[eccodes] 12/106: eccodes 0.16.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jul 28 09:05:00 UTC 2017


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

mckinstry pushed a commit to branch debian/master
in repository eccodes.

commit 0bc528782a089fdec5a20a6af2307f4390e7d583
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Tue Jul 26 16:43:48 2016 +0100

    eccodes 0.16.0
---
 CMakeLists.txt                                     |   96 +-
 NOTICE                                             |    8 +-
 README                                             |   17 +-
 VERSION.cmake                                      |    3 +-
 bin/ecbuild                                        |   90 +-
 cmake/CheckFortranSourceCompiles.cmake             |    8 +-
 cmake/FindADSM.cmake                               |    2 +-
 cmake/FindAEC.cmake                                |    2 +-
 cmake/FindAIO.cmake                                |    2 +-
 cmake/FindArmadillo.cmake                          |    7 +-
 cmake/FindCMath.cmake                              |   15 +-
 cmake/FindCairo.cmake                              |    5 +-
 cmake/FindDl.cmake                                 |    7 +-
 cmake/FindEMOS.cmake                               |    2 +-
 cmake/FindFDB.cmake                                |    2 +-
 cmake/FindGeoTIFF.cmake                            |    5 +-
 cmake/FindHPSS.cmake                               |    2 +-
 cmake/FindLEX.cmake                                |    2 +-
 cmake/FindLegacyFDB.cmake                          |   35 -
 cmake/FindLibGFortran.cmake                        |   23 +-
 cmake/FindLibIFort.cmake                           |    7 +-
 cmake/FindMKL.cmake                                |    2 +-
 cmake/FindNDBM.cmake                               |    2 +-
 cmake/FindNetCDF.cmake                             |   46 +-
 cmake/FindNetCDF3.cmake                            |    7 +-
 cmake/FindODB.cmake                                |    2 +-
 cmake/FindOpenCL.cmake                             |    7 +-
 cmake/FindOpenJPEG.cmake                           |    2 +-
 cmake/FindPGIFortran.cmake                         |   11 +-
 cmake/FindPango.cmake                              |   22 +-
 cmake/FindPangoCairo.cmake                         |   32 +-
 cmake/FindProj4.cmake                              |   12 +-
 cmake/FindREADLINE.cmake                           |    6 +-
 cmake/FindRPCGEN.cmake                             |    2 +-
 cmake/FindRealtime.cmake                           |    8 +-
 cmake/FindSZip.cmake                               |    2 +-
 cmake/FindTrilinos.cmake                           |    2 +-
 cmake/FindViennaCL.cmake                           |    7 +-
 cmake/FindXLFortranLibs.cmake                      |    8 +-
 cmake/FindYACC.cmake                               |    2 +-
 cmake/Findgrib_api.cmake                           |   44 +-
 cmake/Findodb_api.cmake                            |    2 +-
 cmake/Findspot.cmake                               |    2 +-
 cmake/VERSION.cmake                                |    6 +-
 cmake/compiler_flags/Clang_C.cmake                 |   13 +
 cmake/compiler_flags/Clang_CXX.cmake               |   13 +
 cmake/compiler_flags/Cray_C.cmake                  |   14 +
 cmake/compiler_flags/Cray_CXX.cmake                |   14 +
 cmake/compiler_flags/Cray_Fortran.cmake            |   15 +
 cmake/compiler_flags/GNU_C.cmake                   |   18 +
 cmake/compiler_flags/GNU_CXX.cmake                 |   18 +
 cmake/compiler_flags/GNU_Fortran.cmake             |   21 +
 cmake/compiler_flags/Intel_C.cmake                 |   13 +
 cmake/compiler_flags/Intel_CXX.cmake               |   13 +
 cmake/compiler_flags/Intel_Fortran.cmake           |   14 +
 cmake/compiler_flags/PGI_C.cmake                   |   11 +
 cmake/compiler_flags/PGI_CXX.cmake                 |   11 +
 cmake/compiler_flags/PGI_Fortran.cmake             |   11 +
 cmake/contrib/FindFFTW.cmake                       |  193 +-
 cmake/contrib/FindNetCDF4.cmake                    |   41 +-
 cmake/contrib/GetGitRevisionDescription.cmake.in   |    6 +-
 cmake/ecbuild-config-version.cmake                 |    2 +-
 cmake/ecbuild-config.cmake                         |   49 +-
 cmake/ecbuild_add_c_flags.cmake                    |   70 +-
 cmake/ecbuild_add_cxx11_flags.cmake                |    2 +-
 cmake/ecbuild_add_cxx_flags.cmake                  |   70 +-
 cmake/ecbuild_add_executable.cmake                 |  168 +-
 cmake/ecbuild_add_extra_search_paths.cmake         |   12 +-
 cmake/ecbuild_add_fortran_flags.cmake              |   72 +-
 cmake/ecbuild_add_library.cmake                    |  151 +-
 cmake/ecbuild_add_option.cmake                     |   76 +-
 cmake/ecbuild_add_persistent.cmake                 |   20 +-
 cmake/ecbuild_add_resources.cmake                  |    6 +-
 cmake/ecbuild_add_test.cmake                       |   81 +-
 cmake/ecbuild_append_to_rpath.cmake                |    4 +-
 cmake/ecbuild_bundle.cmake                         |   42 +-
 cmake/ecbuild_cache.cmake                          |    2 +-
 cmake/ecbuild_check_c_source.cmake                 |  226 --
 cmake/ecbuild_check_c_source_return.cmake          |   12 +-
 cmake/ecbuild_check_compiler.cmake                 |    9 +-
 cmake/ecbuild_check_cxx11.cmake                    |   17 +-
 cmake/ecbuild_check_cxx_source.cmake               |  221 --
 cmake/ecbuild_check_cxx_source_return.cmake        |   56 +-
 cmake/ecbuild_check_fortran_source.cmake           |  219 --
 cmake/ecbuild_check_fortran_source_return.cmake    |   14 +-
 cmake/ecbuild_check_functions.cmake                |   18 +-
 cmake/ecbuild_check_os.cmake                       |  143 +-
 cmake/ecbuild_compiler_flags.cmake                 |   97 +
 cmake/ecbuild_config.h.in                          |    4 +-
 cmake/ecbuild_debug_var.cmake                      |   47 -
 cmake/ecbuild_declare_project.cmake                |   34 +-
 cmake/ecbuild_define_build_types.cmake             |   82 +-
 cmake/ecbuild_define_libs_and_execs_target.cmake   |   29 +
 cmake/ecbuild_define_links_target.cmake            |   74 +
 cmake/ecbuild_define_options.cmake                 |   12 +-
 cmake/ecbuild_define_paths.cmake                   |    2 +-
 cmake/ecbuild_dont_pack.cmake                      |    6 +-
 cmake/ecbuild_download_resource.cmake              |    6 +-
 cmake/ecbuild_echo_targets.cmake                   |   24 +-
 cmake/ecbuild_enable_fortran.cmake                 |   15 +-
 cmake/ecbuild_features.cmake                       |   55 +-
 cmake/ecbuild_find_fortranlibs.cmake               |   14 +-
 cmake/ecbuild_find_lexyacc.cmake                   |   25 +-
 cmake/ecbuild_find_mpi.cmake                       |   14 +-
 cmake/ecbuild_find_omp.cmake                       |   11 +-
 cmake/ecbuild_find_package.cmake                   |   36 +-
 cmake/ecbuild_find_perl.cmake                      |    6 +-
 cmake/ecbuild_find_python.cmake                    |  140 +-
 cmake/ecbuild_generate_config_headers.cmake        |    4 +-
 cmake/ecbuild_generate_fortran_interfaces.cmake    |  143 +
 cmake/ecbuild_generate_rpc.cmake                   |   10 +-
 cmake/ecbuild_generate_yy.cmake                    |   40 +-
 cmake/ecbuild_get_cxx11_flags.cmake                |    4 +-
 cmake/ecbuild_get_date.cmake                       |    6 +-
 cmake/ecbuild_get_resources.cmake                  |   20 +-
 cmake/ecbuild_get_test_data.cmake                  |   44 +-
 cmake/ecbuild_git.cmake                            |   55 +-
 cmake/ecbuild_install_project.cmake                |   87 +-
 cmake/ecbuild_links_target.cmake                   |   74 -
 cmake/ecbuild_list_add_pattern.cmake               |  102 +
 cmake/ecbuild_list_exclude_pattern.cmake           |   88 +
 cmake/ecbuild_list_extra_search_paths.cmake        |   12 +-
 cmake/ecbuild_list_macros.cmake                    |   40 +-
 cmake/ecbuild_log.cmake                            |  169 +-
 cmake/ecbuild_pkgconfig.cmake                      |    6 +-
 cmake/ecbuild_policies.cmake                       |   10 +-
 cmake/ecbuild_print_summary.cmake                  |   66 +-
 cmake/ecbuild_project_files.cmake                  |   12 +-
 cmake/ecbuild_remove_fortran_flags.cmake           |   61 +
 cmake/ecbuild_requires_macro_version.cmake         |    4 +-
 cmake/ecbuild_separate_sources.cmake               |   16 +-
 cmake/ecbuild_setup_test_framework.cmake           |   10 +-
 cmake/ecbuild_source_flags.cmake                   |   30 +
 cmake/ecbuild_system.cmake                         |   80 +-
 cmake/ecbuild_use_package.cmake                    |   39 +-
 cmake/ecbuild_version.h.in                         |    2 +-
 cmake/ecbuild_warn_unused_files.cmake              |   28 +-
 cmake/fcm-make-interfaces.cfg                      |   31 +
 cmake/gen_source_flags.py                          |   84 +
 cmake/include/ecbuild/boost_test_framework.h       |    2 +-
 cmake/project-config.cmake.in                      |   49 +-
 cmake/sg.pl                                        |    2 +-
 config.status                                      |   18 +-
 data/CMakeLists.txt                                |    7 +-
 data/bufr/CMakeLists.txt                           |    5 +-
 data/bufr/bufr_data_files.txt                      |    3 +
 data/bufr/bufr_ref_files.txt                       |    4 +-
 data/grib_data_files.txt                           |    1 -
 data/gts/CMakeLists.txt                            |    6 +-
 data/metar/CMakeLists.txt                          |    6 +-
 data/ret.sh                                        |    2 -
 data/tigge/CMakeLists.txt                          |    5 +-
 definitions/CMakeLists.txt                         |    3 +
 definitions/Makefile.am                            |  609 ++++-
 definitions/Makefile.in                            |  723 ++++-
 definitions/bufr/boot.def                          |    2 +
 definitions/bufr/boot_edition_3.def                |    4 +-
 definitions/bufr/section.3.def                     |    4 +-
 .../bufr/tables/0/local/1/98/0/element.table       |    8 +-
 .../bufr/tables/0/local/101/98/0/element.table     |    8 +-
 definitions/bufr/tables/0/wmo/10/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/11/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/12/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/13/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/14/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/15/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/16/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/16/sequence.def      |    2 +-
 definitions/bufr/tables/0/wmo/17/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/18/element.table     |   32 +-
 definitions/bufr/tables/0/wmo/19/element.table     |   38 +-
 definitions/bufr/tables/0/wmo/20/element.table     |   38 +-
 definitions/bufr/tables/0/wmo/21/element.table     |   38 +-
 definitions/bufr/tables/0/wmo/22/element.table     |   40 +-
 definitions/bufr/tables/0/wmo/23/element.table     |   40 +-
 definitions/bufr/tables/0/wmo/24/element.table     |   40 +-
 definitions/bufr/tables/0/wmo/25/element.table     |   40 +-
 .../bufr/tables/0/wmo/26/codetables/1003.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/10063.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/10064.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/1007.table     |  188 ++
 .../bufr/tables/0/wmo/26/codetables/1024.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/1028.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/1029.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/1033.table     |  234 ++
 .../bufr/tables/0/wmo/26/codetables/1034.table     |  100 +
 .../bufr/tables/0/wmo/26/codetables/1036.table     |   38 +
 .../bufr/tables/0/wmo/26/codetables/1038.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/1052.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/1090.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/1092.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/1101.table     |  202 ++
 .../bufr/tables/0/wmo/26/codetables/11030.table    |   25 +
 .../bufr/tables/0/wmo/26/codetables/11031.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/11037.table    |   30 +
 .../bufr/tables/0/wmo/26/codetables/11038.table    |   17 +
 .../bufr/tables/0/wmo/26/codetables/11039.table    |   17 +
 .../bufr/tables/0/wmo/26/codetables/13038.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/13039.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/13040.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/13041.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/13051.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/13056.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/13057.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/15025.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/19001.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/19008.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/19010.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/19100.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/19101.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/19102.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/19103.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/19104.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/19105.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/19107.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/19108.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/19109.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/19110.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/19113.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/19117.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/19119.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/20003.table    |  266 ++
 .../bufr/tables/0/wmo/26/codetables/20004.table    |   21 +
 .../bufr/tables/0/wmo/26/codetables/20005.table    |   21 +
 .../bufr/tables/0/wmo/26/codetables/20006.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/20008.table    |   19 +
 .../bufr/tables/0/wmo/26/codetables/20009.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/2001.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/20011.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/20012.table    |   48 +
 .../bufr/tables/0/wmo/26/codetables/20017.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20018.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/2002.table     |    3 +
 .../bufr/tables/0/wmo/26/codetables/20021.table    |   23 +
 .../bufr/tables/0/wmo/26/codetables/20022.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/20023.table    |   14 +
 .../bufr/tables/0/wmo/26/codetables/20024.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/20025.table    |   13 +
 .../bufr/tables/0/wmo/26/codetables/20026.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/20027.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/20028.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/20029.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/2003.table     |   12 +
 .../bufr/tables/0/wmo/26/codetables/20032.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/20033.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/20034.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/20035.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/20036.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/20037.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/2004.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/20040.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/20041.table    |   14 +
 .../bufr/tables/0/wmo/26/codetables/20042.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/20045.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/20048.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/20050.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/20055.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/20056.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/20062.table    |   21 +
 .../bufr/tables/0/wmo/26/codetables/20063.table    |   71 +
 .../bufr/tables/0/wmo/26/codetables/2007.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/20071.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20085.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/20086.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20087.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/20089.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20090.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/20101.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20102.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20103.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20104.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20105.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/20106.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/20107.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20108.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/2011.table     |  100 +
 .../bufr/tables/0/wmo/26/codetables/20119.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/20124.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/2013.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/20136.table    |   44 +
 .../bufr/tables/0/wmo/26/codetables/20137.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/20138.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/2014.table     |   51 +
 .../bufr/tables/0/wmo/26/codetables/2015.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2016.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2017.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2019.table     |  327 +++
 .../bufr/tables/0/wmo/26/codetables/2020.table     |   31 +
 .../bufr/tables/0/wmo/26/codetables/2021.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2022.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2023.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/2024.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2025.table     |   16 +
 .../bufr/tables/0/wmo/26/codetables/2030.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2031.table     |   21 +
 .../bufr/tables/0/wmo/26/codetables/2032.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2033.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2034.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2036.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2037.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2038.table     |   16 +
 .../bufr/tables/0/wmo/26/codetables/2039.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2040.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2041.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2042.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2044.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2045.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2046.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2047.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/2048.table     |   14 +
 .../bufr/tables/0/wmo/26/codetables/2049.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2050.table     |   19 +
 .../bufr/tables/0/wmo/26/codetables/2051.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2052.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2053.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2054.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2055.table     |   10 +
 .../bufr/tables/0/wmo/26/codetables/2056.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2057.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2058.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2059.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2060.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2061.table     |    3 +
 .../bufr/tables/0/wmo/26/codetables/2062.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2064.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2066.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/2070.table     |   13 +
 .../bufr/tables/0/wmo/26/codetables/2080.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2081.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/2083.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2084.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2095.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2096.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2097.table     |   12 +
 .../bufr/tables/0/wmo/26/codetables/2099.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2101.table     |   10 +
 .../bufr/tables/0/wmo/26/codetables/2103.table     |    1 +
 .../bufr/tables/0/wmo/26/codetables/2104.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/21066.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/21067.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/21068.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/21069.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/21070.table    |   22 +
 .../bufr/tables/0/wmo/26/codetables/21072.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/21073.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/21076.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/21109.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/21115.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/21116.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/21119.table    |   14 +
 .../bufr/tables/0/wmo/26/codetables/21144.table    |    1 +
 .../bufr/tables/0/wmo/26/codetables/21148.table    |    2 +
 .../bufr/tables/0/wmo/26/codetables/2115.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/21150.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/21155.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/21158.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/21159.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/21169.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/2119.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2131.table     |    1 +
 .../bufr/tables/0/wmo/26/codetables/2137.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2138.table     |    3 +
 .../bufr/tables/0/wmo/26/codetables/2139.table     |    3 +
 .../bufr/tables/0/wmo/26/codetables/2143.table     |   21 +
 .../bufr/tables/0/wmo/26/codetables/2144.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2145.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/2146.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/2147.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/2148.table     |   12 +
 .../bufr/tables/0/wmo/26/codetables/2149.table     |   38 +
 .../bufr/tables/0/wmo/26/codetables/2150.table     |   55 +
 .../bufr/tables/0/wmo/26/codetables/2151.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/2152.table     |   13 +
 .../bufr/tables/0/wmo/26/codetables/2158.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2159.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2160.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/2163.table     |   16 +
 .../bufr/tables/0/wmo/26/codetables/2164.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2165.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2166.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2167.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2169.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2170.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2172.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2175.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/2176.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2177.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2178.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2179.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/2180.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/2181.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/2182.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2183.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/2184.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/2185.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/2186.table     |   23 +
 .../bufr/tables/0/wmo/26/codetables/2187.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/2188.table     |   10 +
 .../bufr/tables/0/wmo/26/codetables/2189.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/2191.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/22056.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/22060.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/22061.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/22067.table    |  101 +
 .../bufr/tables/0/wmo/26/codetables/22068.table    |   43 +
 .../bufr/tables/0/wmo/26/codetables/22120.table    |   13 +
 .../bufr/tables/0/wmo/26/codetables/22121.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/22122.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/22123.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/22178.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/23001.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/23002.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/23003.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/23004.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/23005.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/23006.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/23007.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/23008.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/23009.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/23016.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/23018.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/23031.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/23032.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/24003.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/25004.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25005.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25006.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/25009.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25010.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/25011.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25012.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25013.table    |    1 +
 .../bufr/tables/0/wmo/26/codetables/25015.table    |    1 +
 .../bufr/tables/0/wmo/26/codetables/25017.table    |    1 +
 .../bufr/tables/0/wmo/26/codetables/25020.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25021.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/25022.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/25023.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/25024.table    |   13 +
 .../bufr/tables/0/wmo/26/codetables/25029.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/25030.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25031.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/25032.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25033.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25034.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/25035.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/25036.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25040.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/25041.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25042.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25053.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/25063.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25069.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/25086.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25090.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/25093.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/25095.table    |    1 +
 .../bufr/tables/0/wmo/26/codetables/25096.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25097.table    |   11 +
 .../bufr/tables/0/wmo/26/codetables/25098.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/25099.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/25110.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/25112.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/25113.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/25120.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25122.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25123.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25124.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/25150.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/25174.table    |   13 +
 .../bufr/tables/0/wmo/26/codetables/25181.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/25182.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/25184.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/25187.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/26010.table    |   25 +
 .../bufr/tables/0/wmo/26/codetables/29001.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/29002.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/30031.table    |   13 +
 .../bufr/tables/0/wmo/26/codetables/30032.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/3010.table     |   12 +
 .../bufr/tables/0/wmo/26/codetables/3011.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/3012.table     |    3 +
 .../bufr/tables/0/wmo/26/codetables/3016.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/3017.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/3018.table     |   22 +
 .../bufr/tables/0/wmo/26/codetables/3019.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/31021.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/31031.table    |    1 +
 .../bufr/tables/0/wmo/26/codetables/33002.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33003.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/33005.table    |   23 +
 .../bufr/tables/0/wmo/26/codetables/33006.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/33015.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/33020.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/33021.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33022.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33023.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33024.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/33025.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/33026.table    |   17 +
 .../bufr/tables/0/wmo/26/codetables/33027.table    |    6 +
 .../bufr/tables/0/wmo/26/codetables/33028.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/33030.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/33031.table    |   21 +
 .../bufr/tables/0/wmo/26/codetables/33032.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/33033.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/33035.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/33037.table    |   19 +
 .../bufr/tables/0/wmo/26/codetables/33038.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/33039.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/33041.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33042.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/33043.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33044.table    |   14 +
 .../bufr/tables/0/wmo/26/codetables/33047.table    |   27 +
 .../bufr/tables/0/wmo/26/codetables/33048.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33049.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33050.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/33060.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/33070.table    |   14 +
 .../bufr/tables/0/wmo/26/codetables/33071.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/33072.table    |   18 +
 .../bufr/tables/0/wmo/26/codetables/33075.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/33076.table    |    2 +
 .../bufr/tables/0/wmo/26/codetables/33077.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/33078.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/33079.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/33080.table    |   13 +
 .../bufr/tables/0/wmo/26/codetables/33081.table    |    9 +
 .../bufr/tables/0/wmo/26/codetables/33082.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/33083.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/33084.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/33085.table    |   14 +
 .../bufr/tables/0/wmo/26/codetables/33086.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/33087.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/33088.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/35000.table    |    1 +
 .../bufr/tables/0/wmo/26/codetables/35001.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/35030.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/35031.table    |   20 +
 .../bufr/tables/0/wmo/26/codetables/35032.table    |   10 +
 .../bufr/tables/0/wmo/26/codetables/35033.table    |   12 +
 .../bufr/tables/0/wmo/26/codetables/35034.table    |    7 +
 .../bufr/tables/0/wmo/26/codetables/35035.table    |   18 +
 .../bufr/tables/0/wmo/26/codetables/40005.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/40006.table    |    8 +
 .../bufr/tables/0/wmo/26/codetables/40011.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/40012.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/40013.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/40020.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/40023.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/40024.table    |    5 +
 .../bufr/tables/0/wmo/26/codetables/40025.table    |    4 +
 .../bufr/tables/0/wmo/26/codetables/40028.table    |   16 +
 .../bufr/tables/0/wmo/26/codetables/40036.table    |    3 +
 .../bufr/tables/0/wmo/26/codetables/4059.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/4080.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/5069.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8001.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/8002.table     |   19 +
 .../bufr/tables/0/wmo/26/codetables/8003.table     |   12 +
 .../bufr/tables/0/wmo/26/codetables/8004.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/8005.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/8006.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/8007.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/8008.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/8009.table     |   16 +
 .../bufr/tables/0/wmo/26/codetables/8010.table     |   14 +
 .../bufr/tables/0/wmo/26/codetables/8011.table     |   27 +
 .../bufr/tables/0/wmo/26/codetables/8012.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8013.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8014.table     |   10 +
 .../bufr/tables/0/wmo/26/codetables/8015.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8016.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/8017.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8018.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8019.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/8021.table     |   32 +
 .../bufr/tables/0/wmo/26/codetables/8023.table     |   14 +
 .../bufr/tables/0/wmo/26/codetables/8024.table     |   12 +
 .../bufr/tables/0/wmo/26/codetables/8025.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/8026.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/8029.table     |   16 +
 .../bufr/tables/0/wmo/26/codetables/8032.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/8033.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/8034.table     |   10 +
 .../bufr/tables/0/wmo/26/codetables/8035.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/8036.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/8039.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/8040.table     |   49 +
 .../bufr/tables/0/wmo/26/codetables/8041.table     |   15 +
 .../bufr/tables/0/wmo/26/codetables/8042.table     |   17 +
 .../bufr/tables/0/wmo/26/codetables/8043.table     |   17 +
 .../bufr/tables/0/wmo/26/codetables/8050.table     |   11 +
 .../bufr/tables/0/wmo/26/codetables/8051.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/8052.table     |   26 +
 .../bufr/tables/0/wmo/26/codetables/8053.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8054.table     |    3 +
 .../bufr/tables/0/wmo/26/codetables/8060.table     |    8 +
 .../bufr/tables/0/wmo/26/codetables/8065.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8066.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8070.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/8072.table     |    6 +
 .../bufr/tables/0/wmo/26/codetables/8074.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8075.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8076.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/8077.table     |    7 +
 .../bufr/tables/0/wmo/26/codetables/8079.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/8080.table     |   14 +
 .../bufr/tables/0/wmo/26/codetables/8081.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/8082.table     |    3 +
 .../bufr/tables/0/wmo/26/codetables/8083.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/8085.table     |    4 +
 .../bufr/tables/0/wmo/26/codetables/8086.table     |    9 +
 .../bufr/tables/0/wmo/26/codetables/8087.table     |    5 +
 .../bufr/tables/0/wmo/26/codetables/8091.table     |    9 +
 definitions/bufr/tables/0/wmo/26/element.table     | 1558 +++++++++++
 definitions/bufr/tables/0/wmo/26/sequence.def      |  946 +++++++
 definitions/bufr/tables/0/wmo/6/element.table      |   22 +-
 definitions/bufr/tables/0/wmo/7/element.table      |   32 +-
 definitions/bufr/tables/0/wmo/8/element.table      |   32 +-
 definitions/bufr/tables/0/wmo/9/element.table      |   32 +-
 .../bufr/tables/3/local/1/98/0/element.table       |    8 +-
 definitions/bufr/tables/3/wmo/11/element.table     |   32 +-
 definitions/bufr/tables/3/wmo/6/element.table      |   22 +-
 definitions/check_grib_defs.pl                     |   30 +-
 definitions/grib1/2.0.1.table                      |    2 +-
 definitions/grib1/2.0.2.table                      |    2 +-
 definitions/grib1/2.0.3.table                      |    2 +-
 definitions/grib1/2.128.table                      |    2 +-
 definitions/grib1/2.82.253.table                   |    2 +-
 definitions/grib1/2.98.128.table                   |    2 +-
 definitions/grib1/2.98.174.table                   |    1 +
 definitions/grib1/2.98.230.table                   |    1 +
 definitions/grib1/6.table                          |    2 +-
 definitions/grib1/boot.def                         |    2 +-
 definitions/grib1/cfVarName.def                    |   36 +-
 definitions/grib1/grid_definition_13.def           |    3 +-
 definitions/grib1/local.34.def                     |    2 +
 definitions/grib1/local.85.def                     |   24 +
 definitions/grib1/local/edzw/2.0.3.table           |    2 +-
 definitions/grib1/localConcepts/ecmf/cfVarName.def |   66 +-
 definitions/grib1/localConcepts/ecmf/name.def      |   14 +-
 definitions/grib1/localConcepts/ecmf/paramId.def   |   12 +-
 definitions/grib1/localConcepts/ecmf/shortName.def |   12 +-
 definitions/grib1/localConcepts/ecmf/units.def     |   36 +-
 definitions/grib1/localConcepts/edzw/name.def      |   16 +-
 definitions/grib1/localConcepts/edzw/paramId.def   |   16 +-
 definitions/grib1/localConcepts/edzw/shortName.def |   16 +-
 definitions/grib1/localConcepts/edzw/units.def     |   16 +-
 definitions/grib1/localConcepts/kwbc/name.def      |    2 +-
 definitions/grib1/localConcepts/kwbc/paramId.def   |    2 +-
 definitions/grib1/localConcepts/kwbc/shortName.def |    2 +-
 definitions/grib1/localConcepts/kwbc/units.def     |    2 +-
 .../grib1/localConcepts/lfpw/faFieldName.def       |  572 ++++
 .../grib1/localConcepts/lfpw/faLevelName.def       |   36 +
 .../grib1/localConcepts/lfpw/faModelName.def       |    9 +
 definitions/grib1/localConcepts/rjtd/cfVarName.def |    2 +-
 definitions/grib1/localConcepts/rjtd/name.def      |    4 +-
 definitions/grib1/localConcepts/rjtd/paramId.def   |    2 +-
 definitions/grib1/localConcepts/rjtd/shortName.def |    4 +-
 definitions/grib1/localConcepts/rjtd/units.def     |    4 +-
 definitions/grib1/localConcepts/sbsj/units.def     |   12 +-
 definitions/grib1/name.def                         |   42 +-
 definitions/grib1/paramId.def                      |   36 +-
 definitions/grib1/shortName.def                    |   42 +-
 definitions/grib1/units.def                        |   36 +-
 definitions/grib2/centre.table                     |  149 ++
 definitions/grib2/cfName.def                       |   34 +-
 definitions/grib2/cfVarName.def                    |  792 ++++--
 definitions/grib2/grib2LocalSectionNumber.85.table |    3 +
 definitions/grib2/local.85.0.def                   |    1 +
 definitions/grib2/local.85.1.def                   |   29 +
 definitions/grib2/local.85.2.def                   |    5 +
 definitions/grib2/local.85.def                     |    3 +
 definitions/grib2/local.98.500.def                 |    2 +-
 definitions/grib2/local/edzw/2.0.3.table           |    2 +-
 definitions/grib2/localConcepts/ecmf/cfName.def    |   96 +
 definitions/grib2/localConcepts/ecmf/cfVarName.def |   60 -
 definitions/grib2/localConcepts/ecmf/name.def      |   60 -
 definitions/grib2/localConcepts/ecmf/paramId.def   |   60 -
 definitions/grib2/localConcepts/ecmf/shortName.def |   60 -
 definitions/grib2/localConcepts/ecmf/units.def     |   74 +-
 definitions/grib2/localConcepts/edzw/name.def      |  582 +++-
 definitions/grib2/localConcepts/edzw/paramId.def   |  582 +++-
 definitions/grib2/localConcepts/edzw/shortName.def |  582 +++-
 definitions/grib2/localConcepts/edzw/units.def     |  582 +++-
 definitions/grib2/localConcepts/kwbc/name.def      |   30 +-
 definitions/grib2/localConcepts/kwbc/paramId.def   |   30 +-
 definitions/grib2/localConcepts/kwbc/shortName.def |   30 +-
 definitions/grib2/localConcepts/kwbc/units.def     |   54 +-
 .../grib2/localConcepts/lfpw/faFieldName.def       | 1258 +++++++++
 .../grib2/localConcepts/lfpw/faLevelName.def       |   63 +
 .../grib2/localConcepts/lfpw/faModelName.def       |    9 +
 definitions/grib2/name.def                         |  214 +-
 definitions/grib2/paramId.def                      |  216 +-
 definitions/grib2/products_uerra.def               |   24 +-
 definitions/grib2/section.1.def                    |    7 +-
 definitions/grib2/shortName.def                    |  218 +-
 definitions/grib2/tables/1.0.table                 |    5 +-
 definitions/grib2/tables/17/0.0.table              |   10 +
 definitions/grib2/tables/17/1.0.table              |   22 +
 definitions/grib2/tables/17/1.1.table              |    4 +
 definitions/grib2/tables/17/1.2.table              |    8 +
 definitions/grib2/tables/17/1.3.table              |   14 +
 definitions/grib2/tables/17/1.4.table              |   13 +
 definitions/grib2/tables/17/1.5.table              |    7 +
 definitions/grib2/tables/17/1.6.table              |    8 +
 definitions/grib2/tables/17/3.0.table              |    6 +
 definitions/grib2/tables/17/3.1.table              |   47 +
 definitions/grib2/tables/17/3.10.table             |    8 +
 definitions/grib2/tables/17/3.11.table             |    7 +
 definitions/grib2/tables/17/3.15.table             |   23 +
 definitions/grib2/tables/17/3.2.table              |   14 +
 definitions/grib2/tables/17/3.20.table             |    6 +
 definitions/grib2/tables/17/3.21.table             |    8 +
 definitions/grib2/tables/17/3.3.table              |    9 +
 definitions/grib2/tables/17/3.4.table              |   17 +
 definitions/grib2/tables/17/3.5.table              |    5 +
 definitions/grib2/tables/17/3.6.table              |    2 +
 definitions/grib2/tables/17/3.7.table              |    5 +
 definitions/grib2/tables/17/3.8.table              |    7 +
 definitions/grib2/tables/17/3.9.table              |    4 +
 definitions/grib2/tables/17/4.0.table              |   65 +
 definitions/grib2/tables/17/4.1.0.table            |   27 +
 definitions/grib2/tables/17/4.1.1.table            |    7 +
 definitions/grib2/tables/17/4.1.10.table           |   10 +
 definitions/grib2/tables/17/4.1.192.table          |    4 +
 definitions/grib2/tables/17/4.1.2.table            |    9 +
 definitions/grib2/tables/17/4.1.3.table            |   11 +
 definitions/grib2/tables/17/4.10.table             |   16 +
 definitions/grib2/tables/17/4.11.table             |   10 +
 definitions/grib2/tables/17/4.12.table             |    7 +
 definitions/grib2/tables/17/4.13.table             |    6 +
 definitions/grib2/tables/17/4.14.table             |    6 +
 definitions/grib2/tables/17/4.15.table             |   11 +
 definitions/grib2/tables/17/4.192.table            |    4 +
 definitions/grib2/tables/17/4.2.0.0.table          |   32 +
 definitions/grib2/tables/17/4.2.0.1.table          |  120 +
 definitions/grib2/tables/17/4.2.0.13.table         |    5 +
 definitions/grib2/tables/17/4.2.0.14.table         |    7 +
 definitions/grib2/tables/17/4.2.0.15.table         |   21 +
 definitions/grib2/tables/17/4.2.0.16.table         |   10 +
 definitions/grib2/tables/17/4.2.0.17.table         |    3 +
 definitions/grib2/tables/17/4.2.0.18.table         |   21 +
 definitions/grib2/tables/17/4.2.0.19.table         |   36 +
 definitions/grib2/tables/17/4.2.0.190.table        |    5 +
 definitions/grib2/tables/17/4.2.0.191.table        |    8 +
 definitions/grib2/tables/17/4.2.0.2.table          |   49 +
 definitions/grib2/tables/17/4.2.0.20.table         |   46 +
 definitions/grib2/tables/17/4.2.0.3.table          |   35 +
 definitions/grib2/tables/17/4.2.0.4.table          |   24 +
 definitions/grib2/tables/17/4.2.0.5.table          |   13 +
 definitions/grib2/tables/17/4.2.0.6.table          |   49 +
 definitions/grib2/tables/17/4.2.0.7.table          |   23 +
 definitions/grib2/tables/17/4.2.1.0.table          |   21 +
 definitions/grib2/tables/17/4.2.1.1.table          |    7 +
 definitions/grib2/tables/17/4.2.1.2.table          |   15 +
 definitions/grib2/tables/17/4.2.10.0.table         |   50 +
 definitions/grib2/tables/17/4.2.10.1.table         |    8 +
 definitions/grib2/tables/17/4.2.10.191.table       |    8 +
 definitions/grib2/tables/17/4.2.10.2.table         |   17 +
 definitions/grib2/tables/17/4.2.10.3.table         |    6 +
 definitions/grib2/tables/17/4.2.10.4.table         |   18 +
 definitions/grib2/tables/17/4.2.2.0.table          |   43 +
 definitions/grib2/tables/17/4.2.2.3.table          |   32 +
 definitions/grib2/tables/17/4.2.2.4.table          |   16 +
 definitions/grib2/tables/17/4.2.2.5.table          |    2 +
 definitions/grib2/tables/17/4.2.3.0.table          |   14 +
 definitions/grib2/tables/17/4.2.3.1.table          |   32 +
 definitions/grib2/tables/17/4.2.3.2.table          |   13 +
 definitions/grib2/tables/17/4.2.3.3.table          |    4 +
 definitions/grib2/tables/17/4.2.3.4.table          |   10 +
 definitions/grib2/tables/17/4.2.3.5.table          |    7 +
 definitions/grib2/tables/17/4.2.3.6.table          |    7 +
 definitions/grib2/tables/17/4.201.table            |   15 +
 definitions/grib2/tables/17/4.202.table            |    4 +
 definitions/grib2/tables/17/4.203.table            |   26 +
 definitions/grib2/tables/17/4.204.table            |    9 +
 definitions/grib2/tables/17/4.205.table            |    6 +
 definitions/grib2/tables/17/4.206.table            |    6 +
 definitions/grib2/tables/17/4.207.table            |   10 +
 definitions/grib2/tables/17/4.208.table            |    9 +
 definitions/grib2/tables/17/4.209.table            |    9 +
 definitions/grib2/tables/17/4.210.table            |    6 +
 definitions/grib2/tables/17/4.211.table            |    7 +
 definitions/grib2/tables/17/4.212.table            |   18 +
 definitions/grib2/tables/17/4.213.table            |   16 +
 definitions/grib2/tables/17/4.215.table            |    9 +
 definitions/grib2/tables/17/4.216.table            |   96 +
 definitions/grib2/tables/17/4.217.table            |    8 +
 definitions/grib2/tables/17/4.218.table            |   44 +
 definitions/grib2/tables/17/4.219.table            |    8 +
 definitions/grib2/tables/17/4.220.table            |    6 +
 definitions/grib2/tables/17/4.221.table            |    6 +
 definitions/grib2/tables/17/4.222.table            |    6 +
 definitions/grib2/tables/17/4.223.table            |    5 +
 definitions/grib2/tables/17/4.224.table            |   18 +
 definitions/grib2/tables/17/4.225.table            |  267 ++
 definitions/grib2/tables/17/4.227.table            |    9 +
 definitions/grib2/tables/17/4.230.table            |  423 +++
 definitions/grib2/tables/17/4.233.table            |  423 +++
 definitions/grib2/tables/17/4.234.table            |   21 +
 definitions/grib2/tables/17/4.236.table            |    8 +
 definitions/grib2/tables/17/4.240.table            |   12 +
 definitions/grib2/tables/17/4.241.table            |    9 +
 definitions/grib2/tables/17/4.242.table            |    7 +
 definitions/grib2/tables/17/4.243.table            |   43 +
 definitions/grib2/tables/17/4.3.table              |   22 +
 definitions/grib2/tables/17/4.4.table              |   17 +
 definitions/grib2/tables/17/4.5.table              |   67 +
 definitions/grib2/tables/17/4.6.table              |    9 +
 definitions/grib2/tables/17/4.7.table              |   14 +
 definitions/grib2/tables/17/4.8.table              |    6 +
 definitions/grib2/tables/17/4.9.table              |    9 +
 definitions/grib2/tables/17/4.91.table             |   16 +
 definitions/grib2/tables/17/5.0.table              |   24 +
 definitions/grib2/tables/17/5.1.table              |    6 +
 definitions/grib2/tables/17/5.2.table              |    8 +
 definitions/grib2/tables/17/5.3.table              |    7 +
 definitions/grib2/tables/17/5.4.table              |    6 +
 definitions/grib2/tables/17/5.40.table             |    5 +
 definitions/grib2/tables/17/5.40000.table          |    5 +
 definitions/grib2/tables/17/5.5.table              |    7 +
 definitions/grib2/tables/17/5.50002.table          |   19 +
 definitions/grib2/tables/17/5.6.table              |    7 +
 definitions/grib2/tables/17/5.7.table              |    7 +
 definitions/grib2/tables/17/6.0.table              |    6 +
 definitions/grib2/tables/17/stepType.table         |    4 +
 definitions/grib2/tables/5/4.2.10.191.table        |    1 +
 definitions/grib2/template.3.110.def               |    2 +-
 definitions/grib2/template.3.140.def               |    2 +-
 definitions/grib2/template.3.20.def                |    2 +-
 definitions/grib2/template.3.gaussian.def          |    2 +-
 definitions/grib2/template.3.stretching.def        |    3 +-
 definitions/grib2/template.4.57.def                |   13 +
 definitions/grib2/template.4.7.def                 |    2 +-
 definitions/grib2/template.4.eps.def               |    6 +-
 .../grib2/template.4.parameter_chemical.def        |   18 +-
 .../template.4.parameter_chemical_distribution.def |   65 +
 definitions/grib2/template.4.percentile.def        |    2 +-
 definitions/grib2/template.5.40000.def             |    3 +-
 definitions/grib2/template.7.1.def                 |    3 +-
 definitions/grib2/template.7.40010.def             |    3 +-
 definitions/grib2/units.def                        |  218 +-
 definitions/mars/class.table                       |    1 +
 definitions/mars/grib.enda.4i.def                  |    2 +
 definitions/metar/boot.def                         |  173 +-
 definitions/metar/boot.flexible.def                |  174 +-
 definitions/metar/cccc.def                         |    6 +-
 definitions/metar/clouds.def                       |   78 +-
 eccodes.sublime-project                            |    4 +-
 eccodes_config.h.in                                |   11 +
 examples/C/CMakeLists.txt                          |   41 +-
 examples/C/bufr_keys_iterator.c                    |   11 +-
 examples/C/bufr_read_temp.c                        |    2 +-
 examples/C/get_product_kind.sh                     |    2 +-
 examples/C/grib_copy_message.c                     |   72 +
 examples/C/grib_copy_message.sh                    |   22 +
 examples/C/grib_get_keys.sh                        |    2 +-
 examples/C/grib_keys_iterator.c                    |   10 +-
 examples/C/grib_keys_iterator.sh                   |    1 +
 examples/C/grib_list.sh                            |    2 +-
 examples/C/grib_precision.sh                       |    2 +-
 examples/C/grib_pthreads.c                         |   72 +
 examples/C/grib_pthreads.sh                        |   14 +
 examples/C/grib_set_keys.sh                        |    2 +-
 examples/C/new_sample.c                            |   10 +
 examples/C/set_missing.sh                          |    2 +-
 examples/F90/CMakeLists.txt                        |   18 +-
 examples/F90/Makefile.am                           |   31 +-
 examples/F90/Makefile.in                           |  151 +-
 examples/F90/bufr_attributes.f90                   |    2 +-
 examples/F90/bufr_clone.f90                        |   30 +-
 examples/F90/bufr_copy_message.f90                 |   56 +
 examples/F90/bufr_copy_message.sh                  |   18 +
 examples/F90/bufr_get_string_array.f90             |   68 +
 examples/F90/bufr_get_string_array.sh              |   39 +
 examples/F90/bufr_read_synop.f90                   |    2 +-
 examples/F90/bufr_read_temp.f90                    |    8 +-
 examples/F90/bufr_read_temp.sh                     |    2 +-
 examples/F90/bufr_set_keys.f90                     |    2 +-
 examples/F90/copy_message.f90                      |   24 +-
 examples/F90/copy_message.sh                       |    7 +-
 examples/F90/count_messages.f90                    |  110 -
 examples/F90/count_messages.sh                     |   12 -
 examples/F90/get_data.f90                          |    3 +-
 examples/F90/get_fortran.f90                       |    1 -
 examples/F90/get_product_kind.f90                  |    2 +-
 examples/F90/grib_clone.f90                        |   19 +-
 examples/F90/grib_count_messages.f90               |  110 +
 examples/F90/grib_count_messages.sh                |   12 +
 examples/F90/grib_count_messages_multi.f90         |   34 +
 examples/F90/grib_count_messages_multi.sh          |   20 +
 examples/F90/grib_get_keys.f90                     |    3 +-
 examples/F90/grib_index.f90                        |    9 +-
 examples/F90/grib_multi.f90                        |    1 -
 examples/F90/grib_multi_write.f90                  |    2 +-
 examples/F90/grib_print_data.f90                   |   11 +-
 examples/F90/grib_print_data.sh                    |    3 +-
 examples/F90/grib_print_data_static.f90            |   58 +
 examples/F90/grib_set_gvc.f90                      |   67 +
 examples/F90/grib_set_keys.sh                      |    5 +-
 examples/F90/iterator_fortran.f90                  |   22 +-
 examples/F90/keys_iterator_fortran.f90             |   10 +-
 examples/F90/multi_fortran.f90                     |   28 +-
 examples/F90/new_from_file.f90                     |    5 +-
 examples/F90/print_data_fortran.f90                |   10 +-
 examples/F90/samples.f90                           |    5 +-
 examples/F90/set_fortran.f90                       |   19 +-
 examples/F90/set_gvc.f90                           |   68 -
 examples/F90/set_missing_fortran.f90               |    6 +-
 examples/python/CMakeLists.txt                     |    8 +-
 examples/python/Makefile.am                        |    8 +-
 examples/python/Makefile.in                        |   38 +-
 examples/python/binary_message.py                  |    4 +-
 examples/python/bufr_attributes.py                 |   12 +-
 examples/python/bufr_clone.py                      |    2 +-
 examples/python/bufr_encode_flight.py              |    6 +-
 examples/python/bufr_expanded.py                   |    4 +-
 examples/python/bufr_get_keys.py                   |   12 +-
 examples/python/bufr_keys_iterator.py              |    4 +-
 examples/python/bufr_read_header.py                |    6 +-
 examples/python/bufr_read_scatterometer.py         |    4 +-
 examples/python/bufr_read_synop.py                 |    6 +-
 examples/python/bufr_read_temp.py                  |    6 +-
 examples/python/bufr_read_temp.sh                  |    2 +-
 examples/python/bufr_read_tropical_cyclone.py      |    6 +-
 examples/python/bufr_set_keys.py                   |    6 +-
 examples/python/bufr_subset.py                     |    4 +-
 examples/python/count_messages.c                   |  122 -
 examples/python/count_messages.py                  |   72 -
 examples/python/count_messages.sh                  |   12 -
 examples/python/get_product_kind.py                |    4 +-
 examples/python/grib_clone.py                      |    6 +-
 examples/python/grib_clone.sh                      |    4 +-
 examples/python/grib_count_messages.c              |  122 +
 examples/python/grib_count_messages.py             |   72 +
 examples/python/grib_count_messages.sh             |   12 +
 examples/python/grib_get_keys.py                   |    6 +-
 examples/python/grib_index.py                      |    4 +-
 examples/python/grib_iterator.c                    |    2 +-
 examples/python/grib_iterator.py                   |    9 +-
 examples/python/grib_iterator.sh                   |   12 +-
 examples/python/grib_iterator_bitmap.py            |   77 +
 examples/python/grib_keys_iterator.py              |    4 +-
 examples/python/grib_multi_write.py                |    4 +-
 examples/python/grib_nearest.py                    |    4 +-
 examples/python/grib_print_data.c                  |    2 +-
 examples/python/grib_print_data.py                 |    4 +-
 examples/python/grib_set_bitmap.py                 |   17 +-
 examples/python/grib_set_keys.py                   |    4 +-
 examples/python/grib_set_pv.py                     |    4 +-
 examples/python/gts_get_keys.py                    |    6 +-
 examples/python/keys_iterator_bufr.py              |    4 +-
 examples/python/keys_iterator_gts.py               |    2 +-
 examples/python/metar_get_keys.py                  |    6 +-
 examples/python/samples.py                         |    4 +-
 examples/python/set_missing.py                     |    4 +-
 fortran/eccodes_f90_int.f90                        |    2 +-
 fortran/eccodes_f90_long_int.f90                   |    2 +-
 fortran/eccodes_f90_tail.f90                       |  186 +-
 fortran/grib_api_externals.h                       |    3 +-
 fortran/grib_f90_tail.f90                          |  110 +-
 fortran/grib_fortran.c                             |  335 ++-
 libtool                                            |    2 +-
 mars_tests/Makefile.am                             |   12 -
 mars_tests/include.sh                              |   50 -
 mars_tests/ls.sh                                   |   60 -
 memfs.py                                           |  186 ++
 memfs/CMakeLists.txt                               |   18 +
 perl/GRIB-API/Makefile.PL                          |    2 +-
 python/CMakeLists.txt                              |   33 +-
 python/Makefile.am                                 |    6 +-
 python/Makefile.in                                 |    6 +-
 python/grib_interface.h                            |    2 +
 python/gribapi.py                                  |    2 +-
 python/{setup.py.in => setup.py.autotools.in}      |    0
 python/setup.py.in                                 |   36 +-
 rpms/eccodes.pc                                    |    2 +-
 rpms/eccodes.spec                                  |    2 +-
 rpms/eccodes_f90.pc                                |    2 +-
 share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake     |   81 -
 share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake      |   73 -
 share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake    |   76 -
 src/CMakeLists.txt                                 |   16 +
 src/Makefile.am                                    |    1 +
 src/Makefile.in                                    |    4 +-
 src/action_class_concept.c                         |   10 +-
 src/action_class_hash_array.c                      |  321 ++-
 src/action_class_if.c                              |   17 +-
 src/action_class_section.c                         |    8 +-
 src/action_class_write.c                           |    2 +-
 src/codes_memfs.c                                  |   60 +
 src/compile.c                                      |    4 +-
 src/config.h                                       |    4 +-
 src/eccodes.c                                      |   12 +
 src/eccodes.h                                      |   18 +
 src/eccodes_version.h                              |    4 +-
 src/grib_accessor.c                                |    2 +
 src/grib_accessor_class.c                          |   20 +-
 src/grib_accessor_class_bufr_data_array.c          |  561 ++--
 src/grib_accessor_class_bufr_elements_table.c      |    6 +-
 src/grib_accessor_class_codeflag.c                 |    3 +-
 src/grib_accessor_class_codetable.c                |  101 +-
 src/grib_accessor_class_concept.c                  |  175 +-
 src/grib_accessor_class_data_2order_packing.c      |    5 +-
 src/grib_accessor_class_data_ccsds_packing.c       |    2 +-
 src/grib_accessor_class_data_complex_packing.c     |    8 +-
 ..._data_g1second_order_general_extended_packing.c |    7 +-
 src/grib_accessor_class_data_g22order_packing.c    |    9 +-
 src/grib_accessor_class_data_png_packing.c         |    6 +-
 src/grib_accessor_class_data_simple_packing.c      |    1 +
 src/grib_accessor_class_dictionary.c               |    4 +-
 src/grib_accessor_class_expanded_descriptors.c     |    2 +-
 src/grib_accessor_class_g1_increment.c             |  234 +-
 src/grib_accessor_class_g2end_step.c               |    2 -
 src/grib_accessor_class_g2grid.c                   |  348 ++-
 src/grib_accessor_class_gen.c                      |   73 +-
 src/grib_accessor_class_latlon_increment.c         |  227 +-
 src/grib_accessor_class_long.c                     |  215 +-
 src/grib_accessor_class_lookup.c                   |    2 +-
 src/grib_accessor_class_signed_bits.c              |    5 +-
 src/grib_accessor_class_smart_table.c              |   16 +-
 src/grib_accessor_class_validity_time.c            |    1 -
 src/grib_api.h                                     |   36 +-
 src/grib_api_internal.h                            |  383 +--
 src/grib_api_prototypes.h                          |   68 +-
 src/grib_api_version.c.in                          |    2 +-
 src/grib_bits_any_endian_simple.c                  |   81 +-
 src/grib_bits_fast_big_endian_vector.c             |    5 +
 src/grib_box_class_reduced_gaussian.c              |    6 +-
 src/grib_buffer.c                                  |  327 ++-
 src/grib_bufr_descriptor.c                         |    6 +
 src/grib_context.c                                 |   80 +-
 src/grib_darray.c                                  |   14 +
 src/grib_dumper_class.c                            |  106 +-
 src/grib_dumper_class_default.c                    |  922 +++----
 src/grib_dumper_class_json.c                       |  365 +--
 src/grib_dumper_class_keys.c                       |    1 +
 src/grib_dumper_class_serialize.c                  |    1 +
 src/grib_dumper_class_wmo.c                        |   23 +-
 src/grib_dumper_class_xml.c                        |  890 ++++---
 src/grib_expression_class_is_in_dict.c             |    8 +-
 src/grib_expression_class_is_in_list.c             |    8 +-
 src/grib_fieldset.c                                |   16 +-
 src/grib_geography.c                               |    5 -
 src/grib_handle.c                                  |   56 +-
 src/grib_hash_keys.c                               |    3 +-
 src/grib_header_compute.c                          |   14 +-
 src/grib_index.c                                   |    1 -
 src/grib_io.c                                      |  534 ++--
 src/grib_iterator_class_lambert_conformal.c        |  305 ++-
 src/grib_iterator_class_polar_stereographic.c      |    6 +-
 src/grib_itrie_keys.c                              |   18 +-
 src/grib_keys_iterator.c                           |   13 +-
 src/grib_lex.c                                     |    9 +-
 src/grib_loader_from_array.c                       |    1 +
 src/grib_nearest_class_reduced.c                   |    5 +-
 src/grib_nearest_class_regular.c                   |    4 +
 src/grib_nearest_class_sh.c                        |   31 +-
 src/grib_parse_utils.c                             |   10 +-
 src/grib_scaling.c                                 |   33 +-
 src/grib_templates.c                               |    6 +-
 src/grib_util.c                                    |   37 +-
 src/grib_value.c                                   |   12 +-
 src/grib_yacc.c                                    |  550 ++--
 src/grib_yacc.h                                    |    2 +-
 src/griby.y                                        |   10 +-
 src/hash.c                                         |  137 -
 src/md5.c                                          |    2 +-
 tests/CMakeLists.txt                               |   42 +-
 tests/Makefile.am                                  |    6 +-
 tests/Makefile.in                                  |   40 +-
 tests/bitsPerValue.sh                              |    1 -
 tests/bufr_dump.sh                                 |    4 +-
 tests/bufr_filter.sh                               |  376 ++-
 tests/bufr_json.sh                                 |   33 +-
 tests/bufrdc_desc_ref.sh                           |    2 +-
 tests/bufrdc_ref.sh                                |    2 +-
 tests/compare.sh                                   |   43 -
 tests/concept.sh                                   |    1 -
 tests/debug.sh                                     |    1 -
 tests/decimalPrecision.sh                          |   10 +-
 tests/double_cmp.c                                 |   81 -
 tests/double_cmp.sh                                |   25 -
 tests/grib_2nd_order_numValues.c                   | 2766 ++++++++++++++++++++
 tests/grib_2nd_order_numValues.sh                  |   13 +
 tests/grib_check_param_concepts.sh                 |   30 +
 tests/grib_compare.sh                              |   71 +
 tests/grib_double_cmp.c                            |   75 +
 tests/grib_double_cmp.sh                           |   25 +
 tests/grib_png.sh                                  |   42 +
 tests/gts_compare.sh                               |   63 +
 tests/gts_get.sh                                   |   35 +
 tests/local_MeteoFrance.c                          |  909 +++++++
 tests/local_MeteoFrance.sh                         |   13 +
 tests/metar_compare.sh                             |   56 +
 tests/metar_get.sh                                 |   38 +
 tests/mybufrdc_ref.sh                              |    2 +-
 tests/set.sh                                       |   19 +-
 tests/uerra.sh                                     |    2 +-
 tests/unit_tests.sh                                |    3 +-
 tests/utils.sh                                     |   22 +-
 tigge/tigge_check.c                                |  303 ++-
 tigge/tigge_check.h                                |  991 ++++++-
 tigge/tigge_split.c                                |  340 ++-
 tools/CMakeLists.txt                               |   34 +-
 tools/Makefile.am                                  |    6 +-
 tools/Makefile.in                                  |  104 +-
 tools/bufr_compare.c                               |  270 +-
 tools/bufr_copy.c                                  |   12 +-
 tools/bufr_dump.c                                  |   91 +-
 tools/bufr_filter.sh                               |   17 +-
 tools/codes_info.c                                 |   27 +-
 tools/grib_compare.c                               |  127 +-
 tools/grib_compare.sh                              |    6 +-
 tools/grib_copy.dox                                |   25 +-
 tools/grib_copy.sh                                 |    7 +-
 tools/grib_count.c                                 |   73 -
 tools/grib_dump.c                                  |    6 +-
 tools/grib_dump.dox                                |  227 +-
 tools/grib_filter.c                                |   17 +-
 tools/grib_filter.dox                              |   61 +-
 tools/grib_filter.sh                               |   17 +-
 tools/grib_get.dox                                 |   22 +-
 tools/grib_get_data.c                              |   14 +-
 tools/grib_get_data.dox                            |   14 +-
 tools/grib_histogram.c                             |    2 +-
 tools/grib_index_build.c                           |   30 +-
 tools/grib_index_build.dox                         |   14 +-
 tools/grib_ls.dox                                  |   34 +-
 tools/grib_options.c                               |   12 +-
 tools/grib_set.c                                   |    8 +-
 tools/grib_set.dox                                 |   19 +-
 tools/grib_to_netcdf.c                             |  151 +-
 tools/grib_tools.c                                 |   55 +-
 tools/gts_compare.c                                |  958 +++++++
 tools/gts_copy.c                                   |  150 +-
 tools/gts_dump.c                                   |   50 +-
 tools/gts_filter.c                                 |  109 +-
 tools/gts_get.c                                    |  239 +-
 tools/gts_ls.c                                     |  360 +--
 tools/make_dox.ksh                                 |   14 +-
 tools/metar_compare.c                              | 1173 +++++++++
 tools/metar_copy.c                                 |  118 +
 tools/metar_dump.c                                 |   20 +-
 tools/metar_filter.c                               |  137 +-
 tools/metar_get.c                                  |  238 +-
 tools/taf_dump.c                                   |  252 +-
 tools/taf_filter.c                                 |  139 +-
 tools/taf_get.c                                    |  331 +--
 tools/taf_ls.c                                     |  496 ++--
 version.sh                                         |    2 +-
 1154 files changed, 38204 insertions(+), 11669 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6efb58e..f49e569 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,14 @@
-############################################################################################
+#
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+#
+###############################################################################
 # cmake options:
 #
 #       -DCMAKE_BUILD_TYPE=Debug|RelWithDebInfo|Release|Production
@@ -6,7 +16,7 @@
 #
 #       -DCMAKE_MODULE_PATH=/path/to/ecbuild/cmake
 
-cmake_minimum_required( VERSION 2.8.4 FATAL_ERROR )
+cmake_minimum_required( VERSION 2.8.11 FATAL_ERROR )
 
 project( eccodes C )
 
@@ -62,7 +72,7 @@ ecbuild_add_option( FEATURE AEC
 ecbuild_add_option( FEATURE PYTHON
     DESCRIPTION "build the ecCodes Python interface"
     DEFAULT ON
-    REQUIRED_PACKAGES "Python VERSION 2.5" NumPy
+    REQUIRED_PACKAGES "Python VERSION 2.6" NumPy
 )
 
 ecbuild_add_option( FEATURE FORTRAN
@@ -80,6 +90,14 @@ else()
     set( HAVE_FORTRAN 0 )
 endif()
 
+# memfs
+
+ecbuild_add_option( FEATURE MEMFS
+    DESCRIPTION "Memory based access to definitions/samples"
+    DEFAULT OFF
+    CONDITION EC_HAVE_FMEMOPEN OR EC_HAVE_FUNOPEN
+    REQUIRED_PACKAGES "Python VERSION 2.6"
+)
 # advanced options (not visible in cmake-gui )
 
 ecbuild_add_option( FEATURE MEMORY_MANAGEMENT   DESCRIPTION "enable memory management" DEFAULT OFF ADVANCED )
@@ -87,6 +105,7 @@ ecbuild_add_option( FEATURE ALIGN_MEMORY        DESCRIPTION "enable memory align
 ecbuild_add_option( FEATURE GRIB_TIMER          DESCRIPTION "enable timer" DEFAULT OFF ADVANCED )
 ecbuild_add_option( FEATURE ECCODES_THREADS     DESCRIPTION "enable POSIX threads" DEFAULT OFF ADVANCED )
 ecbuild_add_option( FEATURE ECCODES_OMP_THREADS DESCRIPTION "enable OMP threads" DEFAULT OFF ADVANCED )
+ecbuild_add_option( FEATURE EXTRA_TESTS         DESCRIPTION "enable extended regression testing" DEFAULT OFF ADVANCED )
 
 ###############################################################################
 # macro processing
@@ -157,9 +176,10 @@ set( CMAKE_THREAD_PREFER_PTHREAD 1 ) # find thread library, but prefer pthreads
 find_package(Threads REQUIRED)
 
 # debug
-message(STATUS " CMAKE_THREAD_LIBS_INIT=${CMAKE_THREAD_LIBS_INIT}")
-message(STATUS " CMAKE_USE_PTHREADS_INIT=${CMAKE_USE_PTHREADS_INIT}")
-message(STATUS " HAVE_ECCODES_THREADS=${HAVE_ECCODES_THREADS}")
+ecbuild_info(" CMAKE_THREAD_LIBS_INIT=${CMAKE_THREAD_LIBS_INIT}")
+ecbuild_info(" CMAKE_USE_PTHREADS_INIT=${CMAKE_USE_PTHREADS_INIT}")
+ecbuild_info(" HAVE_ECCODES_THREADS=${HAVE_ECCODES_THREADS}")
+
 
 set( GRIB_PTHREADS 0 )
 set( GRIB_OMP_THREADS 0 )
@@ -167,7 +187,7 @@ set( GRIB_LINUX_PTHREADS 0 )
 #if( HAVE_ECCODES_THREADS AND CMAKE_THREAD_LIBS_INIT )
 if( HAVE_ECCODES_THREADS )
     if( NOT ${CMAKE_USE_PTHREADS_INIT} )
-        message( FATAL_ERROR "Pthreads is not supported on your system: thread library found=[${CMAKE_THREAD_LIBS_INIT}]" )
+        ecbuild_critical("Pthreads is not supported on your system: thread library found=[${CMAKE_THREAD_LIBS_INIT}]")
     endif()
     set( GRIB_PTHREADS 1 )
     if( ${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
@@ -180,11 +200,11 @@ endif()
 
 # Cannot have both options
 if( HAVE_ECCODES_THREADS AND HAVE_ECCODES_OMP_THREADS )
-    message( FATAL_ERROR "Cannot enable both POSIX threads and OMP! Please specify just one option" )
+    ecbuild_critical("Cannot enable both POSIX threads and OMP! Please specify just one option")
 endif()
 
-message(STATUS " GRIB_PTHREADS=${GRIB_PTHREADS}")
-message(STATUS " GRIB_OMP_THREADS=${GRIB_OMP_THREADS}")
+ecbuild_info(" GRIB_PTHREADS=${GRIB_PTHREADS}")
+ecbuild_info(" GRIB_OMP_THREADS=${GRIB_OMP_THREADS}")
 
 set( GRIB_MEM_ALIGN 0 )
 if( ENABLE_ALIGN_MEMORY )
@@ -217,7 +237,7 @@ if( NOT DEFINED ECCODES_SAMPLES_SUFF )
   set( ECCODES_SAMPLES_SUFF     share/eccodes/samples )
 endif()
 if( NOT DEFINED ECCODES_IFS_SAMPLES_SUFF )
-  set( ECCODES_IFS_SAMPLES_SUFF ifs_samples )
+  set( ECCODES_IFS_SAMPLES_SUFF share/eccodes/ifs_samples )
 endif()
 
 set( ECCODES_DEFINITION_PATH  ${the_default_data_prefix}/${ECCODES_DEFINITION_SUFF} )
@@ -238,7 +258,7 @@ if( CMAKE_COMPILER_IS_GNUCC )
     ecbuild_add_c_flags("-pedantic")
 endif()
 
-############################################################################################
+###############################################################################
 # contents
 
 ### export package to other ecbuild packages
@@ -261,11 +281,12 @@ endforeach()
 
 include_directories( ${ECCODES_INCLUDE_DIRS}  ${ECCODES_EXTRA_INCLUDE_DIRS} )
 
+add_subdirectory( definitions ) # must be before memfs
+add_subdirectory( memfs )
 add_subdirectory( src )
 add_subdirectory( tools )
 add_subdirectory( fortran )
 add_subdirectory( python )
-add_subdirectory( definitions )
 add_subdirectory( tests )
 add_subdirectory( tigge )
 add_subdirectory( examples )
@@ -277,7 +298,7 @@ add_subdirectory( ifs_samples ) # must come after samples
 ecbuild_dont_pack( DIRS
      concepts tests.ecmwf doxygen confluence examples.dev templates parameters java
      gaussian_experimental gribex examples/F77
-     examples/extra bamboo fortran/fortranCtypes tigge/tools share/eccodes grib_api_for_mars
+     examples/extra bamboo fortran/fortranCtypes tigge/tools share/eccodes
      src/.deps tests/.deps tools/.deps tigge/.deps examples/C/.deps examples/python/.deps
      python/.deps fortran/.deps
 )
@@ -286,7 +307,7 @@ ecbuild_dont_pack( DIRS
 
 add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
 
-############################################################################################
+###############################################################################
 # export to other projects
 
 # temporary -- add support for ecbuild 1.0.x sub-project inclusion
@@ -297,25 +318,27 @@ if( EC_HAVE_FORTRAN )
     list( APPEND ECCODES_LIBRARIES eccodes_f90 )
 endif()
 
+# Bundle
 if( NOT PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
   set( ECCODES_FOUND            TRUE PARENT_SCOPE )
   set( ECCODES_DEFINITIONS      ${ECCODES_DEFINITIONS}  PARENT_SCOPE )# includes already TPL definitions
   set( ECCODES_INCLUDE_DIRS     ${ECCODES_INCLUDE_DIRS} ${ECCODES_EXTRA_INCLUDE_DIRS} PARENT_SCOPE )
   set( ECCODES_LIBRARIES        ${ECCODES_LIBRARIES}    ${ECCODES_EXTRA_LIBRARIES} ${CMATH_LIBRARIES} PARENT_SCOPE )
-  set( ECCODES_SAMPLES_PATH     ${ECCODES_SAMPLES_PATH} PARENT_SCOPE )
-  set( ECCODES_IFS_SAMPLES_PATH ${ECCODES_IFS_SAMPLES_PATH} PARENT_SCOPE )
-  set( ECCODES_DEFINITION_PATH  ${ECCODES_DEFINITION_PATH} PARENT_SCOPE )
   set( ECCODES_INSTALL_EXTRA_TOOLS  ${ECCODES_INSTALL_EXTRA_TOOLS} PARENT_SCOPE )
+  set( ECCODES_DEFINITION_PATH  ${CMAKE_BINARY_DIR}/${ECCODES_DEFINITION_SUFF}  PARENT_SCOPE )
+  set( ECCODES_SAMPLES_PATH     ${CMAKE_BINARY_DIR}/${ECCODES_SAMPLES_SUFF}     PARENT_SCOPE )
+  set( ECCODES_IFS_SAMPLES_PATH ${CMAKE_BINARY_DIR}/${ECCODES_IFS_SAMPLES_SUFF} PARENT_SCOPE )
 endif()
 
 # pkg-config
 ecbuild_pkgconfig(
-  NAME                eccodes
-  URL                 "https://software.ecmwf.int/wiki/display/ECC/"
-  DESCRIPTION         "The ecCodes library"
-  LIBRARIES           eccodes
-  VARIABLES           HAVE_JPG HAVE_LIBJASPER HAVE_ECCODES_THREADS HAVE_NETCDF
-                      HAVE_PYTHON HAVE_FORTRAN HAVE_PNG HAVE_AEC
+  NAME           eccodes
+  URL            "https://software.ecmwf.int/wiki/display/ECC/"
+  DESCRIPTION    "The ecCodes library"
+  LIBRARIES      eccodes
+  VARIABLES      HAVE_JPG HAVE_LIBJASPER HAVE_LIBOPENJPEG
+                 HAVE_ECCODES_THREADS HAVE_ECCODES_OMP_THREADS
+                 HAVE_NETCDF HAVE_PYTHON HAVE_FORTRAN HAVE_PNG HAVE_AEC
 )
 if( EC_HAVE_FORTRAN )
   ecbuild_pkgconfig(
@@ -324,24 +347,25 @@ if( EC_HAVE_FORTRAN )
     LIBRARIES           eccodes_f90 eccodes
     DESCRIPTION         "The ecCodes library for Fortran 90"
     IGNORE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/fortran ${PROJECT_BINARY_DIR}/fortran
-    VARIABLES           HAVE_JPG HAVE_LIBJASPER HAVE_ECCODES_THREADS HAVE_NETCDF
-                        HAVE_PYTHON HAVE_PNG HAVE_AEC
+    VARIABLES           HAVE_JPG HAVE_LIBJASPER HAVE_LIBOPENJPEG
+                        HAVE_ECCODES_THREADS HAVE_ECCODES_OMP_THREADS
+                        HAVE_NETCDF HAVE_PYTHON HAVE_PNG HAVE_AEC
   )
 endif()
 
-############################################################################################
+###############################################################################
 # finalize
 
 ecbuild_install_project( NAME ${CMAKE_PROJECT_NAME} )
 
 ecbuild_print_summary()
 
-message(STATUS "")
-message(STATUS "   +---------------------------+")
-message(STATUS "   |  ecCodes version ${ECCODES_VERSION}   |")
-message(STATUS "   |  Configuration completed  |")
-message(STATUS "   +---------------------------+")
-message(STATUS "")
-message(STATUS "   You can now do 'make' to compile the package, 'ctest' to test it and 'make install' to install it afterwards.")
-message(STATUS "")
-message(STATUS "")
+ecbuild_info("")
+ecbuild_info("   +---------------------------+")
+ecbuild_info("   |  ecCodes version ${ECCODES_VERSION}   |")
+ecbuild_info("   |  Configuration completed  |")
+ecbuild_info("   +---------------------------+")
+ecbuild_info("")
+ecbuild_info("   You can now do 'make' to compile the package, 'ctest' to test it and 'make install' to install it afterwards.")
+ecbuild_info("")
+ecbuild_info("")
diff --git a/NOTICE b/NOTICE
index ca9d8e6..f494a65 100644
--- a/NOTICE
+++ b/NOTICE
@@ -8,11 +8,13 @@ Parts of the definitions provided by WMO (http://www.wmo.int/pages/index_en.html
 Microsoft Visual Studio support provided with the help of
 Finnish Meteorological Institute (FMI).
 
-Decoding double array optimisations provided by
-Norwegian Meteorological Institute.
-
 Adaptive Entropy Coding (CCSDS) provided by
 The Max-Planck-Institute for Meteorology and Deutsches Klimarechenzentrum GmbH.
 
 IBM POWER optimisations were developed at
 The Max-Planck-Institute for Meteorology.
+
+Decoding double array optimisations provided by
+Norwegian Meteorological Institute.
+
+OpenMP API Support provided by Eric Millin.
diff --git a/README b/README
index c2b554e..c77a82d 100644
--- a/README
+++ b/README
@@ -1,9 +1,9 @@
-ecCodes is an application program interface developed by ECMWF for
-decoding and encoding messages in the following formats:
+ecCodes is a package developed by ECMWF which provides an application programming interface
+and a set of tools for decoding and encoding messages in the following formats:
 
-    * WMO FM-92 GRIB edition 1 and edition 2
-    * WMO FM-94 BUFR edition 3 and edition 4
-    * WMO GTS abbreviated header (only decoding in this release).
+   * WMO FM-92 GRIB edition 1 and edition 2
+   * WMO FM-94 BUFR edition 3 and edition 4
+   * WMO GTS abbreviated header (only decoding in this release).
 
 A useful set of command line tools provide quick access to the messages.
 C, Fortran 90 and Python interfaces provide access to the main ecCodes functionality.
@@ -12,9 +12,8 @@ ecCodes is an evolution of GRIB API.
 It is designed to provide the user with a simple set of functions to access data from
 several formats with a key/value approach.
 
-
 Documentation can be found here:
-    https://software.ecmwf.int/wiki/display/ECC/ecCodes+Home
+   https://software.ecmwf.int/wiki/display/ECC/ecCodes+Home
 
 INSTALLATION
 ------------
@@ -42,6 +41,10 @@ INSTALLATION
 For more details, please see:
 https://software.ecmwf.int/wiki/display/ECC/ecCodes+installation
 
+If you encounter any problems please send an e-mail with your problem to:
+
+   Software.Support at ecmwf.int
+
 
 
 COPYRIGHT AND LICENSE
diff --git a/VERSION.cmake b/VERSION.cmake
index 5c3ffc2..3a8686c 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1,2 +1 @@
-set( ${PROJECT_NAME}_VERSION_STR  "0.13.0" )
-
+set( ${PROJECT_NAME}_VERSION_STR  "0.16.0" )
diff --git a/bin/ecbuild b/bin/ecbuild
index b327cde..0ee4b13 100755
--- a/bin/ecbuild
+++ b/bin/ecbuild
@@ -2,8 +2,8 @@
 
 set -eua
 
-CMAKE_MIN_REQUIRED=2.8.10
-CMAKE_BUILD_VERSION=3.2.3
+CMAKE_MIN_REQUIRED=2.8.11
+CMAKE_BUILD_VERSION=3.5.2
 
 usage()
 {
@@ -70,13 +70,13 @@ Available values for "option":
           Build static libraries.
           Equivalent to "-DBUILD_SHARED_LIBS=OFF"
 
-    --dynamic
+    --dynamic, --shared
           Build dynamic libraries (usually the default).
           Equivalent to "-DBUILD_SHARED_LIBS=ON"
 
-    --shared     (same option as --dynamic)
-          Build dynamic libraries (usually the default).
-          Equivalent to "-DBUILD_SHARED_LIBS=ON"
+    --config=<config>
+          Configuration file using CMake syntax that gets included
+          Equivalent to cmake argument "-DECBUILD_CONFIG=<config-file>"
 
     --toolchain=<toolchain>
           Use a platform specific toolchain, containing settings such
@@ -93,10 +93,10 @@ Available values for "option":
           that this is only accelerating fresh builds, as cmake internally
           caches also. Therefore this option is *not* recommended.
 
-    --build-cmake
-          Automatically download and build CMake version $CMAKE_BUILD_VERSION if the CMake
-          version found does not meet the minimum requirements (version $CMAKE_MIN_REQUIRED
-          is required). Requires an internet connection and may take a while.
+    --build-cmake[=<prefix>]
+          Automatically download and build CMake version $CMAKE_BUILD_VERSION.
+          Requires an internet connection and may take a while. If no prefix
+          is given, install into $PWD.
 
     --dryrun
           Don't actually execute the cmake call, just print what would have
@@ -188,7 +188,7 @@ version()
 
 log()
 {
-  log_level=$(sed 's/.*/\U&/' <<< "$1")
+  log_level=$(tr "[a-z]" "[A-Z]" <<< "$1")
   ADD_ECBUILD_OPTIONS="$ADD_ECBUILD_OPTIONS -DECBUILD_LOG_LEVEL=${log_level}"
 }
 
@@ -213,6 +213,20 @@ prefix()
   ADD_ECBUILD_OPTIONS="$ADD_ECBUILD_OPTIONS -DCMAKE_INSTALL_PREFIX=${1/#\~\//$HOME/}"
 }
 
+config()
+{
+  arg=${1/#\~\//$HOME/}
+  if [ -f $arg ]; then
+    config_file=$arg
+    config_file="$( cd $( dirname "${config_file}" ) && pwd -P )/$( basename ${config_file} )"
+  else
+    echo "Error:"
+    echo "   Config file [$arg] is not found or is not a file."
+    exit 1
+  fi
+  ADD_ECBUILD_OPTIONS="$ADD_ECBUILD_OPTIONS -DECBUILD_CONFIG=${config_file}"
+}
+
 toolchain()
 {
   arg=${1/#\~\//$HOME/}
@@ -237,7 +251,8 @@ cache()
 {
   arg=$1
   if [ -f $arg ]; then
-    cache_file=$( cd "$arg" && pwd -P )
+    cache_file=$arg
+    cache_file="$( cd $( dirname "${cache_file}" ) && pwd -P )/$( basename ${cache_file} )"
   else
     echo "Error:"
     echo "   Cache file [$arg] is not found or is not a file."
@@ -260,7 +275,7 @@ while test $# -gt 0; do
     case "$1" in
     --*=*)
       opt=`echo "$1" | sed 's/=.*//'`
-      val=`echo "$1" | sed 's/--[_a-zA-Z0-9]*=//'`
+      val=`echo "$1" | sed 's/--[_a-zA-Z0-9-]*=//'`
       ;;
     --*)
       opt=$1
@@ -313,11 +328,17 @@ while test $# -gt 0; do
       --toolchain)
         toolchain $val
         ;;
+      --config)
+        config $val
+        ;;
       --cache)
         cache $val
         ;;
       --build-cmake)
         build_cmake="yes"
+        if [[ -n $val ]]; then
+          cmake_prefix="$val"
+        fi
         ;;
       --)
         shift
@@ -340,6 +361,7 @@ src=${srcARG:=""}
 cmake=${cmakebin:=cmake}
 dryrun=${dryrun:=no}
 build_cmake=${build_cmake:=""}
+cmake_prefix=${cmake_prefix:=$PWD}
 cmake_found=""
 cmake_version_sufficient=""
 
@@ -351,30 +373,13 @@ version_gte() {
     [  "$2" = "$(echo -e "$1\n$2" | sort -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4 -g | head -n1)" ]
 }
 
-# Check if the cmake version is sufficient
-check_cmake() {
-  # Check if cmake is available
-  if $(command -v $cmake >/dev/null 2>&1); then
-    cmake_found="yes"
-    cmake_version=$($cmake --version | head -n1 | awk '{ print $3 }')
-    echo "Found CMake version $cmake_version" >& 2
-    if version_gte $cmake_version $CMAKE_MIN_REQUIRED; then
-      cmake_version_sufficient="yes"
-    fi
-  fi
-}
-check_cmake
 # Use already built CMake if any
-if [[ ! $cmake_version_sufficient && -x bin/cmake ]]; then
-  echo "Using already built CMake in $PWD/bin/cmake" >&2
-  cmake=bin/cmake
-  check_cmake
-fi
-
+if [[ -x "${cmake_prefix}/bin/cmake" ]]; then
+  echo "Using already built CMake in ${cmake_prefix}/bin/cmake" >&2
+  cmake="${cmake_prefix}/bin/cmake"
 # Build CMake if requested and no sufficient version found
-if [[ ! $cmake_version_sufficient && $build_cmake ]]; then
-  echo "CMake version $CMAKE_MIN_REQUIRED is required but only $cmake_version was found." >&2
-  echo "Building CMake version ${CMAKE_BUILD_VERSION} ..." >&2
+elif [[ $build_cmake ]]; then
+  echo "Building CMake version ${CMAKE_BUILD_VERSION} and installing into ${cmake_prefix} ..." >&2
   tarball=cmake-${CMAKE_BUILD_VERSION}.tar.gz
   if [[ ! -r $tarball ]]; then
     url=http://www.cmake.org/files/v${CMAKE_BUILD_VERSION:0:3}/$tarball
@@ -393,10 +398,19 @@ if [[ ! $cmake_version_sufficient && $build_cmake ]]; then
   (
     mkdir -p build_cmake
     cd build_cmake
-    ../cmake-${CMAKE_BUILD_VERSION}/bootstrap --prefix=.. && make && make install
+    ../cmake-${CMAKE_BUILD_VERSION}/bootstrap --prefix="${cmake_prefix}" && make && make install
   )
-  cmake=bin/cmake
-  check_cmake
+  cmake="${cmake_prefix}/bin/cmake"
+fi
+
+# Check if the cmake version is sufficient
+if $(command -v $cmake >/dev/null 2>&1); then
+  cmake_found="yes"
+  cmake_version=$($cmake --version | head -n1 | awk '{ print $3 }')
+  echo "Found CMake version $cmake_version" >& 2
+  if version_gte $cmake_version $CMAKE_MIN_REQUIRED; then
+    cmake_version_sufficient="yes"
+  fi
 fi
 
 # Fail if we don't have a sufficient CMake
diff --git a/cmake/CheckFortranSourceCompiles.cmake b/cmake/CheckFortranSourceCompiles.cmake
index 4303315..d3dc968 100644
--- a/cmake/CheckFortranSourceCompiles.cmake
+++ b/cmake/CheckFortranSourceCompiles.cmake
@@ -38,7 +38,7 @@ if( ${VAR} MATCHES "^${VAR}$" )
       elseif(_key)
         list(APPEND _${_key} "${arg}")
       else()
-        message(FATAL_ERROR "Unknown argument:\n  ${arg}\n")
+        ecbuild_critical("Unknown argument:\n  ${arg}\n")
       endif()
     endforeach()
     set(MACRO_CHECK_FUNCTION_DEFINITIONS
@@ -58,7 +58,7 @@ if( ${VAR} MATCHES "^${VAR}$" )
     file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.f90"
       "${SOURCE}\n")
 
-    message(STATUS "Performing Test ${VAR}")
+    ecbuild_debug("Performing Test ${VAR}")
     try_compile(${VAR}
       ${CMAKE_BINARY_DIR}
       ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.f90
@@ -76,13 +76,13 @@ if( ${VAR} MATCHES "^${VAR}$" )
 
     if(${VAR})
       set(${VAR} 1 CACHE INTERNAL "Test ${VAR}")
-      message(STATUS "Performing Test ${VAR} - Success")
+      ecbuild_debug("Performing Test ${VAR} - Success")
       file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
         "Performing Fortran SOURCE FILE Test ${VAR} succeded with the following output:\n"
         "${OUTPUT}\n"
         "Source file was:\n${SOURCE}\n")
     else()
-      message(STATUS "Performing Test ${VAR} - Failed")
+      ecbuild_debug("Performing Test ${VAR} - Failed")
       set(${VAR} "" CACHE INTERNAL "Test ${VAR}")
       file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
         "Performing Fortran SOURCE FILE Test ${VAR} failed with the following output:\n"
diff --git a/cmake/FindADSM.cmake b/cmake/FindADSM.cmake
index 7af6723..b46e798 100644
--- a/cmake/FindADSM.cmake
+++ b/cmake/FindADSM.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindAEC.cmake b/cmake/FindAEC.cmake
index 8a59037..767544f 100644
--- a/cmake/FindAEC.cmake
+++ b/cmake/FindAEC.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/FindAIO.cmake b/cmake/FindAIO.cmake
index c27b795..76e357a 100644
--- a/cmake/FindAIO.cmake
+++ b/cmake/FindAIO.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindArmadillo.cmake b/cmake/FindArmadillo.cmake
index a3628a5..4ef1a4a 100644
--- a/cmake/FindArmadillo.cmake
+++ b/cmake/FindArmadillo.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -34,9 +34,10 @@ set( ARMADILLO_INCLUDE_DIRS ${ARMADILLO_INCLUDE_DIR} )
 
 include(FindPackageHandleStandardArgs)
 
-# handle the QUIETLY and REQUIRED arguments and set ARMADILLO_FOUND to TRUE
+# handle the QUIET and REQUIRED arguments and set ARMADILLO_FOUND to TRUE
 # if all listed variables are TRUE
-find_package_handle_standard_args(ARMADILLO  DEFAULT_MSG
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args(Armadillo  DEFAULT_MSG
                                   ARMADILLO_LIBRARY ARMADILLO_INCLUDE_DIR)
 
 mark_as_advanced(ARMADILLO_INCLUDE_DIR ARMADILLO_LIBRARY )
diff --git a/cmake/FindCMath.cmake b/cmake/FindCMath.cmake
index cf80f85..b8a2a0b 100644
--- a/cmake/FindCMath.cmake
+++ b/cmake/FindCMath.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -10,14 +10,17 @@
 # CMATH_LIBRARIES      = the library to link against (RT etc)
 
 IF(UNIX)
- if( DEFINED CMATH_PATH )
+  if( DEFINED CMATH_PATH )
     find_library(CMATH_LIBRARIES m PATHS ${CMATH_PATH}/lib NO_DEFAULT_PATH )
- endif()
+  endif()
 
- find_library(CMATH_LIBRARIES m )
+  find_library(CMATH_LIBRARIES m )
 
- include(FindPackageHandleStandardArgs)
+  include(FindPackageHandleStandardArgs)
 
- find_package_handle_standard_args(CMATH  DEFAULT_MSG CMATH_LIBRARIES )
+  # handle the QUIET and REQUIRED arguments and set CMATH_FOUND to TRUE
+  # if all listed variables are TRUE
+  # Note: capitalisation of the package name must be the same as in the file name
+  find_package_handle_standard_args(CMath DEFAULT_MSG CMATH_LIBRARIES )
 
 ENDIF(UNIX)
diff --git a/cmake/FindCairo.cmake b/cmake/FindCairo.cmake
index 7b3d47e..4298a1d 100644
--- a/cmake/FindCairo.cmake
+++ b/cmake/FindCairo.cmake
@@ -50,9 +50,10 @@ set( CAIRO_INCLUDE_DIRS ${CAIRO_INCLUDE_DIR} )
 
 include(FindPackageHandleStandardArgs)
 
-# handle the QUIETLY and REQUIRED arguments and set GRIBAPI_FOUND to TRUE
+# handle the QUIET and REQUIRED arguments and set CAIRO_FOUND to TRUE
 # if all listed variables are TRUE
-find_package_handle_standard_args(CAIRO  DEFAULT_MSG
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args(Cairo  DEFAULT_MSG
                                   CAIRO_LIBRARY CAIRO_INCLUDE_DIR)
 
 mark_as_advanced( CAIRO_INCLUDE_DIR CAIRO_LIBRARY )
diff --git a/cmake/FindDl.cmake b/cmake/FindDl.cmake
index 30db9c6..16463c6 100644
--- a/cmake/FindDl.cmake
+++ b/cmake/FindDl.cmake
@@ -1,4 +1,4 @@
-# © Copyright 1996-2015 ECMWF.
+# © Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -17,4 +17,7 @@ find_library(DL_LIBRARIES dl )
 
 include(FindPackageHandleStandardArgs)
 
-find_package_handle_standard_args(DL  DEFAULT_MSG DL_LIBRARIES )
+# handle the QUIET and REQUIRED arguments and set DL_FOUND to TRUE
+# if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args(Dl DEFAULT_MSG DL_LIBRARIES )
diff --git a/cmake/FindEMOS.cmake b/cmake/FindEMOS.cmake
index 70028ca..c549fc2 100644
--- a/cmake/FindEMOS.cmake
+++ b/cmake/FindEMOS.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindFDB.cmake b/cmake/FindFDB.cmake
index 9608a54..4bcbdf3 100644
--- a/cmake/FindFDB.cmake
+++ b/cmake/FindFDB.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindGeoTIFF.cmake b/cmake/FindGeoTIFF.cmake
index f4f3b53..83c868c 100644
--- a/cmake/FindGeoTIFF.cmake
+++ b/cmake/FindGeoTIFF.cmake
@@ -31,7 +31,8 @@ IF(GEOTIFF_FOUND)
   SET(GEOTIFF_LIBRARIES ${GEOTIFF_LIBRARY})
 ENDIF()
 
-# Handle the QUIETLY and REQUIRED arguments and set SPATIALINDEX_FOUND to TRUE
+# Handle the QUIET and REQUIRED arguments and set GEOTIFF_FOUND to TRUE
 # if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
 INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GEOTIFF DEFAULT_MSG GEOTIFF_LIBRARY GEOTIFF_INCLUDE_DIR)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GEOTiff DEFAULT_MSG GEOTIFF_LIBRARY GEOTIFF_INCLUDE_DIR)
diff --git a/cmake/FindHPSS.cmake b/cmake/FindHPSS.cmake
index a96b8d4..b2b662b 100644
--- a/cmake/FindHPSS.cmake
+++ b/cmake/FindHPSS.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindLEX.cmake b/cmake/FindLEX.cmake
index 00335c2..221868f 100644
--- a/cmake/FindLEX.cmake
+++ b/cmake/FindLEX.cmake
@@ -44,7 +44,7 @@
 # This file is based on the FindFLEX CMake macro, and adapted by ECMWF
 
 #=============================================================================
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/FindLegacyFDB.cmake b/cmake/FindLegacyFDB.cmake
deleted file mode 100644
index f461a0e..0000000
--- a/cmake/FindLegacyFDB.cmake
+++ /dev/null
@@ -1,35 +0,0 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
-# granted to it by virtue of its status as an intergovernmental organisation nor
-# does it submit to any jurisdiction.
-
-# - Try to find FDB
-# Once done this will define
-#  LEGACY_FDB_FOUND - System has FDB
-#  LEGACY_FDB_INCLUDE_DIRS - The FDB include directories
-#  LEGACY_FDB_LIBRARIES - The libraries needed to use FDB
-
-
-if( NOT LEGACY_FDB_FOUND )
-
-	if( DEFINED LEGACY_FDB_PATH )
-		find_library( LEGACY_FDB_LIBRARY NAMES fdb_legacy PATHS ${LEGACY_FDB_PATH} ${LEGACY_FDB_PATH}/lib NO_DEFAULT_PATH)
-	endif()
-	
-	find_library( LEGACY_FDB_LIBRARY NAMES fdb_legacy )
-	
-	set( LEGACY_FDB_LIBRARIES  ${LEGACY_FDB_LIBRARY} )
-	
-	include(FindPackageHandleStandardArgs)
-	
-	# handle the QUIETLY and REQUIRED arguments and set LEGACY_FDB_FOUND to TRUE
-	# if all listed variables are TRUE
-	find_package_handle_standard_args(LEGACY_FDB  DEFAULT_MSG
-		LEGACY_FDB_LIBRARY )
-	
-	mark_as_advanced(LEGACY_FDB_LIBRARY)
-
-endif()
diff --git a/cmake/FindLibGFortran.cmake b/cmake/FindLibGFortran.cmake
index 200ffcb..a293ea5 100644
--- a/cmake/FindLibGFortran.cmake
+++ b/cmake/FindLibGFortran.cmake
@@ -1,8 +1,8 @@
-# © Copyright 1996-2015 ECMWF.
-# 
+# © Copyright 1996-2016 ECMWF.
+#
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -23,16 +23,16 @@ if( GFORTRAN_EXECUTABLE )
 		ERROR_VARIABLE _GFORTRAN_ERROR_VALUE
 		OUTPUT_STRIP_TRAILING_WHITESPACE)
 
-#	debug_var(_GFORTRAN_SEARCH_SUCCESS)
-#	debug_var(_GFORTRAN_VALUES_OUTPUT)
-#	debug_var(_GFORTRAN_ERROR_VALUE)
+#	ecbuild_debug_var(_GFORTRAN_SEARCH_SUCCESS)
+#	ecbuild_debug_var(_GFORTRAN_VALUES_OUTPUT)
+#	ecbuild_debug_var(_GFORTRAN_ERROR_VALUE)
 
 	if(_GFORTRAN_SEARCH_SUCCESS MATCHES 0)
 		string(REGEX REPLACE ".*libraries: =(.*)" "\\1" _result  ${_GFORTRAN_VALUES_OUTPUT})
 		string(REGEX REPLACE ":" ";" _gfortran_hints ${_result} )
 	endif()
 
-	debug_var( _gfortran_hints )
+	ecbuild_debug_var( _gfortran_hints )
 
 endif()
 
@@ -47,6 +47,7 @@ endif()
 
 include(FindPackageHandleStandardArgs)
 
-find_package_handle_standard_args( LIBGFORTRAN  DEFAULT_MSG GFORTRAN_LIBRARIES  )
-
-
+# Handle the QUIET and REQUIRED arguments and set LIBGFORTRAN_FOUND to TRUE
+# if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args( LibGFortran DEFAULT_MSG GFORTRAN_LIBRARIES  )
diff --git a/cmake/FindLibIFort.cmake b/cmake/FindLibIFort.cmake
index e1d82ee..da782a4 100644
--- a/cmake/FindLibIFort.cmake
+++ b/cmake/FindLibIFort.cmake
@@ -1,4 +1,4 @@
-# © Copyright 1996-2015 ECMWF.
+# © Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -44,4 +44,7 @@ endif()
 
 include(FindPackageHandleStandardArgs)
 
-find_package_handle_standard_args( LIBIFORT DEFAULT_MSG IFORT_LIBRARIES )
+# Handle the QUIET and REQUIRED arguments and set LIBIFORT_FOUND to TRUE
+# if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args( LibIFort DEFAULT_MSG IFORT_LIBRARIES )
diff --git a/cmake/FindMKL.cmake b/cmake/FindMKL.cmake
index fe182a4..1123234 100644
--- a/cmake/FindMKL.cmake
+++ b/cmake/FindMKL.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/FindNDBM.cmake b/cmake/FindNDBM.cmake
index 5203ee9..869223f 100644
--- a/cmake/FindNDBM.cmake
+++ b/cmake/FindNDBM.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindNetCDF.cmake b/cmake/FindNetCDF.cmake
index 89af114..9084549 100644
--- a/cmake/FindNetCDF.cmake
+++ b/cmake/FindNetCDF.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -76,7 +76,7 @@ if( PREFER_NETCDF4 )
 
   ## hdf5
 
-  # Note: Only the HDF5 C-library is required for NetCDF 
+  # Note: Only the HDF5 C-library is required for NetCDF
   #       ( even for Fortan and CXX bindings)
   find_package( HDF5 COMPONENTS C QUIET )
 
@@ -87,24 +87,24 @@ if( PREFER_NETCDF4 )
   # Find NetCDF4
 
   # message( "NETCDF CMAKE_PREFIX_PATH = [${CMAKE_PREFIX_PATH}]")
-  # debug_var( NETCDF_ROOT )
-  # debug_var( NETCDF_FIND_COMPONENTS )
-  # debug_var( NETCDF_FIND_QUIETLY )
-  # debug_var( NETCDF_FIND_REQUIRED )
+  # ecbuild_debug_var( NETCDF_ROOT )
+  # ecbuild_debug_var( NETCDF_FIND_COMPONENTS )
+  # ecbuild_debug_var( NETCDF_FIND_QUIETLY )
+  # ecbuild_debug_var( NETCDF_FIND_REQUIRED )
   find_package( NetCDF4 COMPONENTS ${NETCDF_FIND_COMPONENTS} )
-  # debug_var( NETCDF4_FOUND )
-  # debug_var( NETCDF_FOUND )
-  # debug_var( NETCDF_LIBRARIES )
-  # debug_var( NETCDF_INCLUDE_DIRS )
+  # ecbuild_debug_var( NETCDF4_FOUND )
+  # ecbuild_debug_var( NETCDF_FOUND )
+  # ecbuild_debug_var( NETCDF_LIBRARIES )
+  # ecbuild_debug_var( NETCDF_INCLUDE_DIRS )
 
   list( APPEND NETCDF_Fortran_LIBRARIES ${NETCDF_FORTRAN_LIBRARIES} ${NETCDF_F90_LIBRARIES} )
   if( NETCDF_Fortran_LIBRARIES )
     list( REMOVE_DUPLICATES NETCDF_Fortran_LIBRARIES )
   endif()
 
-  # debug_var( NETCDF_Fortran_LIBRARIES )
-  # debug_var( NETCDF_C_LIBRARIES )
-  # debug_var( NETCDF_CXX_LIBRARIES )
+  # ecbuild_debug_var( NETCDF_Fortran_LIBRARIES )
+  # ecbuild_debug_var( NETCDF_C_LIBRARIES )
+  # ecbuild_debug_var( NETCDF_CXX_LIBRARIES )
 
 
   set_package_properties( NetCDF4 PROPERTIES TYPE RECOMMENDED PURPOSE "support for NetCDF4 file format" )
@@ -115,13 +115,13 @@ if( PREFER_NETCDF4 )
     list( APPEND NETCDF_INCLUDE_DIRS ${HDF5_INCLUDE_DIRS} )
   endif()
 
-  #debug_var( NETCDF_FOUND )
-  #debug_var( NETCDF_LIBRARIES )
-  #debug_var( NETCDF_INCLUDE_DIRS )
-  #debug_var( HDF5_FOUND )
-  #debug_var( HDF5_INCLUDE_DIRS )
-  #debug_var( HDF5_HL_LIBRARIES )
-  #debug_var( HDF5_LIBRARIES )
+  #ecbuild_debug_var( NETCDF_FOUND )
+  #ecbuild_debug_var( NETCDF_LIBRARIES )
+  #ecbuild_debug_var( NETCDF_INCLUDE_DIRS )
+  #ecbuild_debug_var( HDF5_FOUND )
+  #ecbuild_debug_var( HDF5_INCLUDE_DIRS )
+  #ecbuild_debug_var( HDF5_HL_LIBRARIES )
+  #ecbuild_debug_var( HDF5_LIBRARIES )
 
 endif()
 
@@ -131,9 +131,9 @@ if( PREFER_NETCDF3 )
 
   ecbuild_debug( "FindNetCDF: looking for NetCDF3" )
 
-  # debug_var( NetCDF_FIND_COMPONENTS )
-  # debug_var( NetCDF_FIND_QUIETLY )
-  # debug_var( NetCDF_FIND_REQUIRED )
+  # ecbuild_debug_var( NetCDF_FIND_COMPONENTS )
+  # ecbuild_debug_var( NetCDF_FIND_QUIETLY )
+  # ecbuild_debug_var( NetCDF_FIND_REQUIRED )
 
   list(FIND NetCDF_FIND_COMPONENTS "CXX" _index)
   if(${_index} GREATER -1)
diff --git a/cmake/FindNetCDF3.cmake b/cmake/FindNetCDF3.cmake
index 40e6bc0..5519fd6 100644
--- a/cmake/FindNetCDF3.cmake
+++ b/cmake/FindNetCDF3.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -104,7 +104,10 @@ if( NETCDF_FIND_REQUIRED )
   set( NETCDF3_FIND_REQUIRED ${NETCDF_FIND_REQUIRED} )
 endif()
 
-find_package_handle_standard_args( NETCDF3  DEFAULT_MSG ${NETCDF_REQUIRED_VARS} )
+# Handle the QUIET and REQUIRED arguments and set NETCDF3_FOUND to TRUE
+# if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args( NetCDF3  DEFAULT_MSG ${NETCDF_REQUIRED_VARS} )
 
 set( NETCDF_FOUND ${NETCDF3_FOUND} )
 
diff --git a/cmake/FindODB.cmake b/cmake/FindODB.cmake
index 3a1fa12..1beb5c8 100644
--- a/cmake/FindODB.cmake
+++ b/cmake/FindODB.cmake
@@ -1,4 +1,4 @@
-# © Copyright 1996-2015 ECMWF.
+# © Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/FindOpenCL.cmake b/cmake/FindOpenCL.cmake
index e4e9556..9b6e978 100644
--- a/cmake/FindOpenCL.cmake
+++ b/cmake/FindOpenCL.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -61,7 +61,10 @@ endif()
 
 include(FindPackageHandleStandardArgs)
 
-find_package_handle_standard_args( OPENCL DEFAULT_MSG
+# Handle the QUIET and REQUIRED arguments and set OPENCL_FOUND to TRUE
+# if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args( OpenCL DEFAULT_MSG
                                    OPENCL_LIBRARIES OPENCL_INCLUDE_DIRS )
 
 mark_as_advanced( OPENCL_INCLUDE_DIRS OPENCL_LIBRARIES )
diff --git a/cmake/FindOpenJPEG.cmake b/cmake/FindOpenJPEG.cmake
index 82d19fb..805f091 100644
--- a/cmake/FindOpenJPEG.cmake
+++ b/cmake/FindOpenJPEG.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindPGIFortran.cmake b/cmake/FindPGIFortran.cmake
index 7308e49..e68bdf6 100644
--- a/cmake/FindPGIFortran.cmake
+++ b/cmake/FindPGIFortran.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -35,12 +35,15 @@ endforeach()
 
 include(FindPackageHandleStandardArgs)
 
-find_package_handle_standard_args( LIBPGIFORTRAN DEFAULT_MSG pgi_fortran_all_libs_found PGIFORTRAN_LIBRARIES  )
+# Handle the QUIET and REQUIRED arguments and set PGIFORTRAN_FOUND to TRUE
+# if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args( PGIFortran DEFAULT_MSG pgi_fortran_all_libs_found PGIFORTRAN_LIBRARIES  )
 
-if( LIBPGIFORTRAN_FOUND )
+if( PGIFORTRAN_FOUND )
 	find_package( Realtime )
 endif()
 
 if( REALTIME_FOUND )
-	set( LIBPGIFORTRAN_LIBRARIES ${PGIFORTRAN_LIBRARIES} ${RT_LIB} )
+	set( PGIFORTRAN_LIBRARIES ${PGIFORTRAN_LIBRARIES} ${RT_LIB} )
 endif()
diff --git a/cmake/FindPango.cmake b/cmake/FindPango.cmake
index 811cdf9..76e152a 100644
--- a/cmake/FindPango.cmake
+++ b/cmake/FindPango.cmake
@@ -1,8 +1,8 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
+# (C) Copyright 1996-2016 ECMWF.
+#
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -17,15 +17,17 @@ find_package(PkgConfig)
 
 pkg_check_modules(PC_LIBPANGO QUIET pango)
 
-debug_var( PC_LIBPANGO_FOUND )
-debug_var( PC_LIBPANGO_VERSION )
-debug_var( PC_LIBPANGO_LIBRARIES )
-debug_var( PC_LIBPANGO_INCLUDE_DIRS )
+ecbuild_debug_var( PC_LIBPANGO_FOUND )
+ecbuild_debug_var( PC_LIBPANGO_VERSION )
+ecbuild_debug_var( PC_LIBPANGO_LIBRARIES )
+ecbuild_debug_var( PC_LIBPANGO_INCLUDE_DIRS )
 
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args( pango DEFAULT_MSG PC_LIBPANGO_LIBRARIES PC_LIBPANGO_INCLUDE_DIRS )
+# Handle the QUIET and REQUIRED arguments and set PANGO_FOUND to TRUE
+# if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args( Pango DEFAULT_MSG PC_LIBPANGO_LIBRARIES PC_LIBPANGO_INCLUDE_DIRS )
 
 set( PANGO_VERSION ${PC_LIBPANGO_VERSION} )
 set( PANGO_LIBRARIES ${PC_LIBPANGO_LIBRARIES} )
 set( PANGO_INCLUDE_DIRS ${PC_LIBPANGO_INCLUDE_DIRS} )
-
diff --git a/cmake/FindPangoCairo.cmake b/cmake/FindPangoCairo.cmake
index 7445754..9979550 100644
--- a/cmake/FindPangoCairo.cmake
+++ b/cmake/FindPangoCairo.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -18,17 +18,20 @@ find_package(PkgConfig)
 
 pkg_check_modules(PC_LIBPANGOCAIRO QUIET pangocairo)
 
-#debug_var( PC_LIBPANGOCAIRO_FOUND )
-#debug_var( PC_LIBPANGOCAIRO_VERSION )
-#debug_var( PC_LIBPANGOCAIRO_LIBRARIES )
-#debug_var( PC_LIBPANGOCAIRO_LDFLAGS )
-#debug_var( PC_LIBPANGOCAIRO_LDFLAGS_OTHER )
-#debug_var( PC_LIBPANGOCAIRO_INCLUDE_DIRS )
+#ecbuild_debug_var( PC_LIBPANGOCAIRO_FOUND )
+#ecbuild_debug_var( PC_LIBPANGOCAIRO_VERSION )
+#ecbuild_debug_var( PC_LIBPANGOCAIRO_LIBRARIES )
+#ecbuild_debug_var( PC_LIBPANGOCAIRO_LDFLAGS )
+#ecbuild_debug_var( PC_LIBPANGOCAIRO_LDFLAGS_OTHER )
+#ecbuild_debug_var( PC_LIBPANGOCAIRO_INCLUDE_DIRS )
 
 if(PC_LIBPANGOCAIRO_FOUND)
 
     include(FindPackageHandleStandardArgs)
-    find_package_handle_standard_args( pangocairo DEFAULT_MSG PC_LIBPANGOCAIRO_LIBRARIES PC_LIBPANGOCAIRO_INCLUDE_DIRS )
+    # Handle the QUIET and REQUIRED arguments and set PANGOCAIRO_FOUND to TRUE
+    # if all listed variables are TRUE
+    # Note: capitalisation of the package name must be the same as in file name
+    find_package_handle_standard_args( PangoCairo DEFAULT_MSG PC_LIBPANGOCAIRO_LIBRARIES PC_LIBPANGOCAIRO_INCLUDE_DIRS )
     set( PANGOCAIRO_VERSION ${PC_LIBPANGOCAIRO_VERSION} )
     set( PANGOCAIRO_LIBRARIES "${PC_LIBPANGOCAIRO_LDFLAGS} ${PC_LIBPANGOCAIRO_LDFLAGS_OTHER}" )
     set( PANGOCAIRO_INCLUDE_DIRS ${PC_LIBPANGOCAIRO_INCLUDE_DIRS} )
@@ -69,8 +72,6 @@ else()
 	${X11_INCLUDE_DIR}
     )
 
-#message(WARNING "===> ${PANGOCAIRO_INCLUDE_DIRS}")
-
     find_library( _PANGOCAIRO_LIBRARIES NAMES pangocairo pangocairo-${PANGO_VERSION})
     find_library( _PANGO_LIBRARIES NAMES pango pango-${PANGO_VERSION})
     find_library( _CAIRO_LIBRARIES NAMES cairo)
@@ -84,11 +85,12 @@ else()
 	${X11_LIBRARIES}
     )
 
-#message(WARNING "===> ${PANGOCAIRO_LIBRARIES}")
-
-    find_package_handle_standard_args( pangocairo  DEFAULT_MSG
-        PANGOCAIRO_LIBRARIES
-        PANGOCAIRO_INCLUDE_DIRS  )
+    # Handle the QUIET and REQUIRED arguments and set PANGOCAIRO_FOUND to TRUE
+    # if all listed variables are TRUE
+    # Note: capitalisation of the package name must be the same as in file name
+    find_package_handle_standard_args( PangoCairo  DEFAULT_MSG
+                                       PANGOCAIRO_LIBRARIES
+                                       PANGOCAIRO_INCLUDE_DIRS  )
 
 endif()
 
diff --git a/cmake/FindProj4.cmake b/cmake/FindProj4.cmake
index 6774b6e..a3560b2 100644
--- a/cmake/FindProj4.cmake
+++ b/cmake/FindProj4.cmake
@@ -38,9 +38,9 @@ if( NOT PROJ4_PATH )
 
     endif()
 
-#    debug_var( PKG_CONFIG_FOUND )
-#    debug_var( PKPROJ4_FOUND )
-#    debug_var( PROJ4_MIN_VERSION )
+#    ecbuild_debug_var( PKG_CONFIG_FOUND )
+#    ecbuild_debug_var( PKPROJ4_FOUND )
+#    ecbuild_debug_var( PROJ4_MIN_VERSION )
 
 endif()
 
@@ -55,12 +55,12 @@ find_path(PROJ4_INCLUDE_DIR NAMES proj_api.h PATHS PATH_SUFFIXES proj4 )
 find_library( PROJ4_LIBRARY NAMES proj       PATHS PATH_SUFFIXES proj4 )
 
 
-# debug_var( PROJ4_INCLUDE_DIR )
-# debug_var( PROJ4_LIBRARY )
+# ecbuild_debug_var( PROJ4_INCLUDE_DIR )
+# ecbuild_debug_var( PROJ4_LIBRARY )
 
 # handle the QUIETLY and REQUIRED arguments and set GRIBAPI_FOUND
 include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(PROJ4  DEFAULT_MSG
+find_package_handle_standard_args(Proj4  DEFAULT_MSG
                                   PROJ4_LIBRARY PROJ4_INCLUDE_DIR)
 
 set( PROJ4_LIBRARIES    ${PROJ4_LIBRARY} )
diff --git a/cmake/FindREADLINE.cmake b/cmake/FindREADLINE.cmake
index bbabe15..2ba08b4 100644
--- a/cmake/FindREADLINE.cmake
+++ b/cmake/FindREADLINE.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -47,8 +47,8 @@ cmake_push_check_state()
 
 cmake_pop_check_state()
 
-# debug_var( readline_version )
-# debug_var( __readline_version_out )
+# ecbuild_debug_var( readline_version )
+# ecbuild_debug_var( __readline_version_out )
 
 set( __readline_fail 0 )
 if( __readline_version_out )
diff --git a/cmake/FindRPCGEN.cmake b/cmake/FindRPCGEN.cmake
index 3e25daf..fd42e9f 100644
--- a/cmake/FindRPCGEN.cmake
+++ b/cmake/FindRPCGEN.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindRealtime.cmake b/cmake/FindRealtime.cmake
index 2c2a7b2..843a54f 100644
--- a/cmake/FindRealtime.cmake
+++ b/cmake/FindRealtime.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -18,5 +18,7 @@ find_library( RT_LIB rt )
 mark_as_advanced( RT_LIB )
 
 include(FindPackageHandleStandardArgs)
-
-find_package_handle_standard_args(REALTIME  DEFAULT_MSG RT_LIB )
+# Handle the QUIET and REQUIRED arguments and set REALTIME_FOUND to TRUE
+# if all listed variables are TRUE
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args(Realtime  DEFAULT_MSG RT_LIB )
diff --git a/cmake/FindSZip.cmake b/cmake/FindSZip.cmake
index 6e9b1a2..925348c 100644
--- a/cmake/FindSZip.cmake
+++ b/cmake/FindSZip.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/FindTrilinos.cmake b/cmake/FindTrilinos.cmake
index a1cabce..0d99b54 100644
--- a/cmake/FindTrilinos.cmake
+++ b/cmake/FindTrilinos.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/FindViennaCL.cmake b/cmake/FindViennaCL.cmake
index a1b1eb9..aba2980 100644
--- a/cmake/FindViennaCL.cmake
+++ b/cmake/FindViennaCL.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -30,9 +30,10 @@ set( VIENNACL_INCLUDE_DIRS ${VIENNACL_INCLUDE_DIR} )
 
 include(FindPackageHandleStandardArgs)
 
-# handle the QUIETLY and REQUIRED arguments and set VIENNACL_FOUND to TRUE
+# handle the QUIET and REQUIRED arguments and set VIENNACL_FOUND to TRUE
 # if all listed variables are valid
-find_package_handle_standard_args(VIENNACL  DEFAULT_MSG
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args(ViennaCL  DEFAULT_MSG
                                   VIENNACL_INCLUDE_DIR)
 
 mark_as_advanced(VIENNACL_INCLUDE_DIRS)
diff --git a/cmake/FindXLFortranLibs.cmake b/cmake/FindXLFortranLibs.cmake
index 10a68aa..37800c7 100644
--- a/cmake/FindXLFortranLibs.cmake
+++ b/cmake/FindXLFortranLibs.cmake
@@ -1,4 +1,4 @@
-# © Copyright 1996-2015 ECMWF.
+# © Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -27,8 +27,10 @@ foreach( lib ${xl_libs} )
 endforeach()
 
 include(FindPackageHandleStandardArgs)
-
-find_package_handle_standard_args( LIBXLFORTRAN DEFAULT_MSG xlf_all_libs_found XLFORTRAN_LIBRARIES  )
+# handle the QUIET and REQUIRED arguments and set XLFORTRANLIBS_FOUND to TRUE
+# if all listed variables are valid
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args( XLFortranLibs DEFAULT_MSG xlf_all_libs_found XLFORTRAN_LIBRARIES  )
 
 # HACK for support libraries
 
diff --git a/cmake/FindYACC.cmake b/cmake/FindYACC.cmake
index a410c6f..7b15bfe 100644
--- a/cmake/FindYACC.cmake
+++ b/cmake/FindYACC.cmake
@@ -41,7 +41,7 @@
 # This file is based on the FindFLEX CMake macro, and adapted by ECMWF
 
 #=============================================================================
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/Findgrib_api.cmake b/cmake/Findgrib_api.cmake
index 8b6cb43..ab6fc0b 100644
--- a/cmake/Findgrib_api.cmake
+++ b/cmake/Findgrib_api.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -20,16 +20,16 @@ option( GRIB_API_JPG "use jpg with grib_api" ON )
 if( NOT grib_api_FOUND AND NOT NO_GRIB_API_BINARIES )
 
     if( GRIB_API_JPG ) # jpeg support
-        
+
         find_package( JPEG     QUIET ) # grib_api might be a static .a library in which
-    
+
         if( NOT "$ENV{JASPER_PATH}" STREQUAL "" )
             list( APPEND CMAKE_PREFIX_PATH "$ENV{JASPER_PATH}" )
         endif()
         find_package( Jasper   QUIET ) # case we don't know if which jpeg library was used
-    
-        find_package( OpenJPEG QUIET ) # so we try to find all jpeg libs and link to them 
-        
+
+        find_package( OpenJPEG QUIET ) # so we try to find all jpeg libs and link to them
+
         if(JPEG_FOUND)
             list( APPEND _grib_api_jpg_incs ${JPEG_INCLUDE_DIR} )
             list( APPEND _grib_api_jpg_libs ${JPEG_LIBRARIES} )
@@ -44,18 +44,18 @@ if( NOT grib_api_FOUND AND NOT NO_GRIB_API_BINARIES )
         endif()
 
     endif()
-    
+
     if( GRIB_API_PNG ) # png support
-    
+
         find_package(PNG)
-    
+
         if( DEFINED PNG_PNG_INCLUDE_DIR AND NOT DEFINED PNG_INCLUDE_DIRS )
           set( PNG_INCLUDE_DIRS ${PNG_PNG_INCLUDE_DIR}  CACHE INTERNAL "PNG include dirs" )
         endif()
         if( DEFINED PNG_LIBRARY AND NOT DEFINED PNG_LIBRARIES )
           set( PNG_LIBRARIES ${PNG_LIBRARY} CACHE INTERNAL "PNG libraries" )
         endif()
-        
+
         if(PNG_FOUND)
             list( APPEND _grib_api_png_defs ${PNG_DEFINITIONS} )
             list( APPEND _grib_api_png_incs ${PNG_INCLUDE_DIRS} )
@@ -85,22 +85,22 @@ if( NOT grib_api_FOUND AND NOT NO_GRIB_API_BINARIES )
         find_library(GRIB_API_LIB_F77  NAMES grib_api_f77 PATHS ${GRIB_API_PATH} ${GRIB_API_PATH}/lib     PATH_SUFFIXES grib_api  NO_DEFAULT_PATH)
         find_program(GRIB_API_INFO     NAMES grib_info  PATHS ${GRIB_API_PATH} ${GRIB_API_PATH}/bin     PATH_SUFFIXES grib_api  NO_DEFAULT_PATH)
     endif()
-    
+
     find_path(GRIB_API_INCLUDE_DIR NAMES grib_api.h PATHS PATH_SUFFIXES grib_api )
     find_library( GRIB_API_LIBRARY NAMES grib_api   PATHS PATH_SUFFIXES grib_api )
     find_library( GRIB_API_LIB_F90 NAMES grib_api_f90 PATHS PATH_SUFFIXES grib_api )
     find_library( GRIB_API_LIB_F77 NAMES grib_api_f77 PATHS PATH_SUFFIXES grib_api )
     find_program(GRIB_API_INFO     NAMES grib_info  PATHS PATH_SUFFIXES grib_api )
-    
+
     list( APPEND GRIB_API_LIBRARIES    ${GRIB_API_LIBRARY} ${GRIB_API_LIB_F90} ${GRIB_API_LIB_F77} )
     set( GRIB_API_INCLUDE_DIRS ${GRIB_API_INCLUDE_DIR} )
 
     if( GRIB_API_INFO )
-        
+
         execute_process( COMMAND ${GRIB_API_INFO} -v  OUTPUT_VARIABLE _grib_info_out ERROR_VARIABLE _grib_info_err OUTPUT_STRIP_TRAILING_WHITESPACE )
-        
-        # debug_var( _grib_info_out )
-    
+
+        # ecbuild_debug_var( _grib_info_out )
+
         string( REPLACE "." " " _version_list ${_grib_info_out} ) # dots to spaces
         separate_arguments( _version_list )
 
@@ -108,22 +108,22 @@ if( NOT grib_api_FOUND AND NOT NO_GRIB_API_BINARIES )
         list( GET _version_list 1 GRIB_API_MINOR_VERSION )
         list( GET _version_list 2 GRIB_API_PATCH_VERSION )
 
-        set( GRIB_API_VERSION     "${GRIB_API_MAJOR_VERSION}.${GRIB_API_MINOR_VERSION}.${GRIB_API_PATCH_VERSION}" ) 
+        set( GRIB_API_VERSION     "${GRIB_API_MAJOR_VERSION}.${GRIB_API_MINOR_VERSION}.${GRIB_API_PATCH_VERSION}" )
         set( GRIB_API_VERSION_STR "${_grib_info_out}" )
 
-        set( grib_api_VERSION     "${GRIB_API_VERSION}" ) 
+        set( grib_api_VERSION     "${GRIB_API_VERSION}" )
         set( grib_api_VERSION_STR "${GRIB_API_VERSION_STR}" )
 
     endif()
-    
+
     include(FindPackageHandleStandardArgs)
-    
+
     # handle the QUIETLY and REQUIRED arguments and set GRIB_API_FOUND to TRUE
     find_package_handle_standard_args( grib_api DEFAULT_MSG
                                        GRIB_API_LIBRARY GRIB_API_INCLUDE_DIR GRIB_API_INFO )
-    
+
     mark_as_advanced( GRIB_API_INCLUDE_DIR GRIB_API_LIBRARY GRIB_API_INFO )
-    
+
     list( APPEND GRIB_API_DEFINITIONS  ${_grib_api_jpg_defs} ${_grib_api_png_defs} )
     list( APPEND GRIB_API_INCLUDE_DIRS ${_grib_api_jpg_incs} ${_grib_api_png_incs} )
 	list( APPEND GRIB_API_LIBRARIES    ${_grib_api_jpg_libs} ${_grib_api_png_libs} )
diff --git a/cmake/Findodb_api.cmake b/cmake/Findodb_api.cmake
index 2b8e800..0058fbe 100644
--- a/cmake/Findodb_api.cmake
+++ b/cmake/Findodb_api.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/Findspot.cmake b/cmake/Findspot.cmake
index cad0e33..52e0fb5 100644
--- a/cmake/Findspot.cmake
+++ b/cmake/Findspot.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/VERSION.cmake b/cmake/VERSION.cmake
index a07bd4a..ff7b93b 100644
--- a/cmake/VERSION.cmake
+++ b/cmake/VERSION.cmake
@@ -1,7 +1,7 @@
-set( ECBUILD_MAJOR_VERSION "1" )
-set( ECBUILD_MINOR_VERSION "9" )
+set( ECBUILD_MAJOR_VERSION "2" )
+set( ECBUILD_MINOR_VERSION "3" )
 set( ECBUILD_PATCH_VERSION "0" )
 
-set( ECBUILD_VERSION_STR  "1.9.0" )
+set( ECBUILD_VERSION_STR  "2.3.0" )
 
 set( ECBUILD_MACRO_VERSION "${ECBUILD_MAJOR_VERSION}.${ECBUILD_MINOR_VERSION}" )
diff --git a/cmake/compiler_flags/Clang_C.cmake b/cmake/compiler_flags/Clang_C.cmake
new file mode 100644
index 0000000..bc73c69
--- /dev/null
+++ b/cmake/compiler_flags/Clang_C.cmake
@@ -0,0 +1,13 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_C_FLAGS_RELEASE        "-O3 -DNDEBUG"   CACHE STRING "C compiler flags for Release builds"          FORCE )
+set( CMAKE_C_FLAGS_BIT            "-O2 -DNDEBUG"   CACHE STRING "C compiler flags for Bit-reproducible builds" FORCE )
+set( CMAKE_C_FLAGS_DEBUG          "-O0 -g -ftrapv" CACHE STRING "C compiler flags for Debug builds"            FORCE )
+set( CMAKE_C_FLAGS_PRODUCTION     "-O3 -g"         CACHE STRING "C compiler flags for Production builds."      FORCE )
+set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g"         CACHE STRING "C compiler flags for RelWithDebInfo builds."  FORCE )
diff --git a/cmake/compiler_flags/Clang_CXX.cmake b/cmake/compiler_flags/Clang_CXX.cmake
new file mode 100644
index 0000000..53f0f21
--- /dev/null
+++ b/cmake/compiler_flags/Clang_CXX.cmake
@@ -0,0 +1,13 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_CXX_FLAGS_RELEASE        "-O3 -DNDEBUG"   CACHE STRING "C++ compiler flags for Release builds"          FORCE )
+set( CMAKE_CXX_FLAGS_BIT            "-O2 -DNDEBUG"   CACHE STRING "C++ compiler flags for Bit-reproducible builds" FORCE )
+set( CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -ftrapv" CACHE STRING "C++ compiler flags for Debug builds"            FORCE )
+set( CMAKE_CXX_FLAGS_PRODUCTION     "-O3 -g"         CACHE STRING "C++ compiler flags for Production builds."      FORCE )
+set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g"         CACHE STRING "C++ compiler flags for RelWithDebInfo builds."  FORCE )
diff --git a/cmake/compiler_flags/Cray_C.cmake b/cmake/compiler_flags/Cray_C.cmake
new file mode 100644
index 0000000..76779f9
--- /dev/null
+++ b/cmake/compiler_flags/Cray_C.cmake
@@ -0,0 +1,14 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_C_FLAGS_ALL            "-hlist=amid"                                                                    CACHE STRING "Common flags for all build-types" FORCE )
+set( CMAKE_C_FLAGS_RELEASE        "${CMAKE_C_FLAGS_ALL} -O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG"                    CACHE STRING "Release C flags"                  FORCE )
+set( CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_ALL} -O2 -hfp1 -Gfast -DNDEBUG"                                 CACHE STRING "Release-with-debug-info C flags"  FORCE )
+set( CMAKE_C_FLAGS_PRODUCTION     "${CMAKE_C_FLAGS_ALL} -O2 -hfp1 -G2"                                             CACHE STRING "Production C flags"               FORCE )
+set( CMAKE_C_FLAGS_BIT            "${CMAKE_C_FLAGS_ALL} -O2 -hfp1 -G2 -hflex_mp=conservative -hadd_paren -DNDEBUG" CACHE STRING "Bit-reproducible C flags"         FORCE )
+set( CMAKE_C_FLAGS_DEBUG          "${CMAKE_C_FLAGS_ALL} -O0 -G0"                                                   CACHE STRING "Debug Cflags"                     FORCE )
diff --git a/cmake/compiler_flags/Cray_CXX.cmake b/cmake/compiler_flags/Cray_CXX.cmake
new file mode 100644
index 0000000..d599bff
--- /dev/null
+++ b/cmake/compiler_flags/Cray_CXX.cmake
@@ -0,0 +1,14 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_CXX_FLAGS_ALL            "-hlist=amid"                                                                      CACHE STRING "Common flags for all build-types"  FORCE )
+set( CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS_ALL} -O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG"                    CACHE STRING "Release C++ flags"                 FORCE )
+set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_ALL} -O2 -hfp1 -Gfast -DNDEBUG"                                 CACHE STRING "Release-with-debug-info C++ flags" FORCE )
+set( CMAKE_CXX_FLAGS_PRODUCTION     "${CMAKE_CXX_FLAGS_ALL} -O2 -hfp1 -G2"                                             CACHE STRING "Production C++ flags"              FORCE )
+set( CMAKE_CXX_FLAGS_BIT            "${CMAKE_CXX_FLAGS_ALL} -O2 -hfp1 -G2 -hflex_mp=conservative -hadd_paren -DNDEBUG" CACHE STRING "Bit-reproducible C++ flags"        FORCE )
+set( CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_CXX_FLAGS_ALL} -O0 -G0"                                                   CACHE STRING "Debug CXX flags"                   FORCE )
diff --git a/cmake/compiler_flags/Cray_Fortran.cmake b/cmake/compiler_flags/Cray_Fortran.cmake
new file mode 100644
index 0000000..b2c23de
--- /dev/null
+++ b/cmake/compiler_flags/Cray_Fortran.cmake
@@ -0,0 +1,15 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+# -emf activates .mods and uses lower case
+set( CMAKE_Fortran_FLAGS_ALL            "-emf"                                                                                 CACHE STRING "Common flags for all build-types"      FORCE )
+set( CMAKE_Fortran_FLAGS_RELEASE        "${CMAKE_Fortran_FLAGS_ALL} -O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG"                    CACHE STRING "Release Fortran flags"                 FORCE )
+set( CMAKE_Fortran_FLAGS_RELWITHDEBINFO "${CMAKE_Fortran_FLAGS_ALL} -O2 -hfp1 -Gfast -DNDEBUG"                                 CACHE STRING "Release-with-debug-info Fortran flags" FORCE )
+set( CMAKE_Fortran_FLAGS_PRODUCTION     "${CMAKE_Fortran_FLAGS_ALL} -O2 -hfp1 -G2"                                             CACHE STRING "Production Fortran flags"              FORCE )
+set( CMAKE_Fortran_FLAGS_BIT            "${CMAKE_Fortran_FLAGS_ALL} -O2 -hfp1 -G2 -hflex_mp=conservative -hadd_paren -DNDEBUG" CACHE STRING "Bit-reproducible Fortran flags"        FORCE )
+set( CMAKE_Fortran_FLAGS_DEBUG          "${CMAKE_Fortran_FLAGS_ALL} -O0 -G0"                                                   CACHE STRING "Debug Fortran flags"                   FORCE )
diff --git a/cmake/compiler_flags/GNU_C.cmake b/cmake/compiler_flags/GNU_C.cmake
new file mode 100644
index 0000000..955f527
--- /dev/null
+++ b/cmake/compiler_flags/GNU_C.cmake
@@ -0,0 +1,18 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_C_FLAGS_RELEASE        "-O3 -DNDEBUG"                       CACHE STRING "C compiler flags for Release builds"          FORCE )
+set( CMAKE_C_FLAGS_BIT            "-g -O2 -m64 -march=native -DNDEBUG" CACHE STRING "C compiler flags for Bit-reproducible builds" FORCE )
+set( CMAKE_C_FLAGS_DEBUG          "-O0 -g"                             CACHE STRING "C compiler flags for Debug builds"            FORCE )
+set( CMAKE_C_FLAGS_PRODUCTION     "-O2 -g"                             CACHE STRING "C compiler flags for Production builds."      FORCE )
+set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g"                             CACHE STRING "C compiler flags for RelWithDebInfo builds."  FORCE )
+
+# NOTE: gcc does not guarrante that -O3 performs better than -O2
+#       -- it can perform worse due to assembly code bloating.
+#   Moreover for gcc 4.1.2 we found that -O3 remove the parser code generated from Lex/Yacc
+#   and therefore in production mode we downgrade to -O2 if the compiler is GCC (for all versions).
diff --git a/cmake/compiler_flags/GNU_CXX.cmake b/cmake/compiler_flags/GNU_CXX.cmake
new file mode 100644
index 0000000..0ab8c3a
--- /dev/null
+++ b/cmake/compiler_flags/GNU_CXX.cmake
@@ -0,0 +1,18 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_CXX_FLAGS_RELEASE        "-O3 -DNDEBUG"                       CACHE STRING "C++ compiler flags for Release builds"          FORCE )
+set( CMAKE_CXX_FLAGS_BIT            "-g -O2 -m64 -march=native -DNDEBUG" CACHE STRING "C++ compiler flags for Bit-reproducible builds" FORCE )
+set( CMAKE_CXX_FLAGS_DEBUG          "-O0 -g"                             CACHE STRING "C++ compiler flags for Debug builds"            FORCE )
+set( CMAKE_CXX_FLAGS_PRODUCTION     "-O2 -g"                             CACHE STRING "C++ compiler flags for Production builds."      FORCE )
+set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g"                             CACHE STRING "C++ compiler flags for RelWithDebInfo builds."  FORCE )
+
+# NOTE: gcc does not guarrante that -O3 performs better than -O2
+#       -- it can perform worse due to assembly code bloating.
+#   Moreover for gcc 4.1.2 we found that -O3 remove the parser code generated from Lex/Yacc
+#   and therefore in production mode we downgrade to -O2 if the compiler is GCC (for all versions).
diff --git a/cmake/compiler_flags/GNU_Fortran.cmake b/cmake/compiler_flags/GNU_Fortran.cmake
new file mode 100644
index 0000000..a12abec
--- /dev/null
+++ b/cmake/compiler_flags/GNU_Fortran.cmake
@@ -0,0 +1,21 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_Fortran_FLAGS_RELEASE        "-O3 -funroll-all-loops -finline-functions"                                CACHE STRING "Fortran compiler flags for Release builds"          FORCE )
+set( CMAKE_Fortran_FLAGS_BIT            "-g -O2 -m64 -march=native -DNDEBUG -fno-range-check -fconvert=big-endian" CACHE STRING "Fortran compiler flags for Bit-reproducible builds" FORCE )
+set( CMAKE_Fortran_FLAGS_DEBUG          "-O0 -g -fcheck=bounds -fbacktrace -finit-real=snan"                       CACHE STRING "Fortran compiler flags for Debug builds"            FORCE )
+set( CMAKE_Fortran_FLAGS_PRODUCTION     "-O2 -g"                                                                   CACHE STRING "Fortran compiler flags for Production builds."      FORCE )
+set( CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-O2 -g"                                                                   CACHE STRING "Fortran compiler flags for RelWithDebInfo builds."  FORCE )
+
+####################################################################
+
+# Meaning of flags
+# ----------------
+# -fstack-arrays     : Allocate automatic arrays on the stack (needs large stacksize!!!)
+# -funroll-all-loops : Unroll all loops
+# -fcheck=bounds     : Bounds checking
diff --git a/cmake/compiler_flags/Intel_C.cmake b/cmake/compiler_flags/Intel_C.cmake
new file mode 100644
index 0000000..dbea59f
--- /dev/null
+++ b/cmake/compiler_flags/Intel_C.cmake
@@ -0,0 +1,13 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_C_FLAGS_RELEASE        "-O3 -DNDEBUG"      CACHE STRING "Release C compiler flags"                  FORCE )
+set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g"            CACHE STRING "Release-with-debug-info C compiler flags"  FORCE )
+set( CMAKE_C_FLAGS_BIT            "-O2 -DNDEBUG"      CACHE STRING "Bit-reproducible C compiler flags"         FORCE )
+set( CMAKE_C_FLAGS_DEBUG          "-O0 -g -traceback" CACHE STRING "Debug C compiler flags"                    FORCE )
+set( CMAKE_C_FLAGS_PRODUCTION     "-O3 -g"            CACHE STRING "Production C compiler flags"               FORCE )
diff --git a/cmake/compiler_flags/Intel_CXX.cmake b/cmake/compiler_flags/Intel_CXX.cmake
new file mode 100644
index 0000000..5b8dc78
--- /dev/null
+++ b/cmake/compiler_flags/Intel_CXX.cmake
@@ -0,0 +1,13 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_CXX_FLAGS_RELEASE        "-O3 -DNDEBUG"      CACHE STRING "Release C++ compiler flags"                 FORCE )
+set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g"            CACHE STRING "Release-with-debug-info C++ compiler flags" FORCE )
+set( CMAKE_CXX_FLAGS_BIT            "-O2 -DNDEBUG"      CACHE STRING "Bit-reproducible C++ compiler flags"        FORCE )
+set( CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -traceback" CACHE STRING "Debug C++ compiler flags"                   FORCE )
+set( CMAKE_CXX_FLAGS_PRODUCTION     "-O3 -g"            CACHE STRING "Production C++ compiler flags"              FORCE )
diff --git a/cmake/compiler_flags/Intel_Fortran.cmake b/cmake/compiler_flags/Intel_Fortran.cmake
new file mode 100644
index 0000000..86b69dc
--- /dev/null
+++ b/cmake/compiler_flags/Intel_Fortran.cmake
@@ -0,0 +1,14 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( CMAKE_Fortran_FLAGS_RELEASE        "-O3 -unroll -inline -heap-arrays"          CACHE STRING "Release Fortran flags"                 FORCE )
+set( CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-O2 -g"                                    CACHE STRING "Release-with-debug-info Fortran flags" FORCE )
+set( CMAKE_Fortran_FLAGS_BIT            "-O2 -unroll -inline -heap-arrays"          CACHE STRING "Bit-reproducible Fortran flags"        FORCE )
+# -check all implies -check bounds
+set( CMAKE_Fortran_FLAGS_DEBUG          "-O0 -g -traceback -heap-arrays -check all" CACHE STRING "Debug Fortran flags"                   FORCE )
+set( CMAKE_Fortran_FLAGS_PRODUCTION     "-O3 -g"                                    CACHE STRING "Production Fortran compiler flags"     FORCE )
diff --git a/cmake/compiler_flags/PGI_C.cmake b/cmake/compiler_flags/PGI_C.cmake
new file mode 100644
index 0000000..6784a14
--- /dev/null
+++ b/cmake/compiler_flags/PGI_C.cmake
@@ -0,0 +1,11 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+set( CMAKE_C_FLAGS_RELEASE "-fast -O3 -DNDEBUG" CACHE STRING "Release C compiler flags" FORCE )
+
+set( CMAKE_C_LINK_FLAGS "" CACHE STRING "" )
diff --git a/cmake/compiler_flags/PGI_CXX.cmake b/cmake/compiler_flags/PGI_CXX.cmake
new file mode 100644
index 0000000..877ef3f
--- /dev/null
+++ b/cmake/compiler_flags/PGI_CXX.cmake
@@ -0,0 +1,11 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+set( CMAKE_CXX_FLAGS_RELEASE "-fast -O3 -DNDEBUG" CACHE STRING "Release C++ compiler flags" FORCE )
+
+set( CMAKE_CXX_LINK_FLAGS "" CACHE STRING "" )
diff --git a/cmake/compiler_flags/PGI_Fortran.cmake b/cmake/compiler_flags/PGI_Fortran.cmake
new file mode 100644
index 0000000..a268cc9
--- /dev/null
+++ b/cmake/compiler_flags/PGI_Fortran.cmake
@@ -0,0 +1,11 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+set( CMAKE_Fortran_FLAGS_RELEASE "-fast -O3" CACHE STRING "Release Fortran compiler flags" FORCE )
+
+set( CMAKE_Fortran_LINK_FLAGS "" CACHE STRING "" )
diff --git a/cmake/contrib/FindFFTW.cmake b/cmake/contrib/FindFFTW.cmake
index d76767b..5ef46df 100644
--- a/cmake/contrib/FindFFTW.cmake
+++ b/cmake/contrib/FindFFTW.cmake
@@ -1,22 +1,60 @@
-# - Find the FFTW library
-#
-# Usage:
-#   find_package(FFTW [REQUIRED] [QUIET] )
-#     
-# It sets the following variables:
-#   FFTW_FOUND               ... true if fftw is found on the system
-#   FFTW_LIBRARIES           ... full path to fftw library
-#   FFTW_INCLUDES            ... fftw include directory
-#
-# The following variables will be checked by the function
-#   FFTW_USE_STATIC_LIBS    ... if true, only static libraries are found
-#   FFTW_ROOT               ... if set, the libraries are exclusively searched
-#                               under this path
-#   FFTW_DIR                ... equivalent to FFTW_ROOT
-#   FFTW_PATH               ... equivalent to FFTW_ROOT
-#   FFTW_LIBRARY            ... fftw library to use
-#   FFTW_INCLUDE_DIR        ... fftw include directory
+# (C) Copyright 1996-2016 ECMWF.
 #
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+##############################################################################
+#.rst:
+#
+# FindFFTW
+# ========
+#
+# Find the FFTW library. ::
+#
+#   find_package(FFTW [REQUIRED] [QUIET]
+#                [COMPONENTS [single] [double] [long_double] [quad]])
+#
+# By default, search for the double precision library ``fftw3``
+#
+# Components
+# ----------
+#
+# If a different version or multiple versions of the library are required,
+# these need to be specified as ``COMPONENTS``. Note that double must be given
+# explicitly if any ``COMPONENTS`` are specified.
+#
+# The libraries corresponding to each of the ``COMPONENTS`` are:
+#
+# :single:      ``fftw3f``
+# :double:      ``fftw3``
+# :long_double: ``fftw3l``
+# :quad:        ``fftw3q``
+#
+# Output variables
+# ----------------
+#
+# The following CMake variables are set on completion:
+#
+# :FFTW_FOUND:      true if FFTW is found on the system
+# :FFTW_LIBRARIES:  full paths to requested FFTW libraries
+# :FFTW_INCLUDES:   FFTW include directory
+#
+# Input variables
+# ---------------
+#
+# The following CMake variables are checked by the function:
+#
+# :FFTW_USE_STATIC_LIBS:  if true, only static libraries are found
+# :FFTW_ROOT:             if set, this path is exclusively searched
+# :FFTW_DIR:              equivalent to FFTW_ROOT
+# :FFTW_PATH:             equivalent to FFTW_ROOT
+# :FFTW_LIBRARY:          FFTW library to use
+# :FFTW_INCLUDE_DIR:      FFTW include directory
+#
+##############################################################################
 
 #============================================#
 #                                            #
@@ -72,76 +110,103 @@ else()
   set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX} )
 endif()
 
+if( FFTW_FIND_COMPONENTS )
+  ecbuild_debug( "FindFFTW: looking for components: ${FFTW_FIND_COMPONENTS}" )
+  foreach( _component ${FFTW_FIND_COMPONENTS} )
+    if( _component MATCHES "single" )
+      ecbuild_debug( "FindFFTW: looking for single precision (fftw3f)" )
+      set( _require_sp TRUE )
+    elseif( _component MATCHES "double" )
+      ecbuild_debug( "FindFFTW: looking for double precision (fftw3)" )
+      set( _require_dp TRUE )
+    elseif( _component MATCHES "long_double" )
+      ecbuild_debug( "FindFFTW: looking for long double precision (fftw3l)" )
+      set( _require_lp TRUE )
+    elseif( _component MATCHES "quad" )
+      ecbuild_debug( "FindFFTW: looking for quad precision (fftw3q)" )
+      set( _require_qp TRUE )
+    else()
+    endif()
+  endforeach()
+else()
+  ecbuild_debug( "FindFFTW: no components specified, looking for double precision (fftw3)" )
+  set( _require_dp TRUE )
+endif()
+
 if( FFTW_ROOT )
+  set( _default_paths NO_DEFAULT_PATH )
+  set( _lib_paths ${FFTW_ROOT} )
+  set( _include_paths ${FFTW_ROOT} )
+else()
+  set( _lib_paths ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} )
+  set( _include_paths ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} )
+endif()
+
+#find libs
 
-  #find libs
+if( _require_dp )
   find_library(
     FFTW_LIB
     NAMES "fftw3"
-    PATHS ${FFTW_ROOT}
+    PATHS ${_lib_paths}
     PATH_SUFFIXES "lib" "lib64"
-    NO_DEFAULT_PATH
+    ${_default_paths}
   )
+  if( NOT FFTW_LIB )
+    ecbuild_warn("FindFFTW: double precision required, but fftw3 was not found")
+  endif()
+endif()
 
+if( _require_sp )
   find_library(
     FFTWF_LIB
     NAMES "fftw3f"
-    PATHS ${FFTW_ROOT}
+    PATHS ${_lib_paths}
     PATH_SUFFIXES "lib" "lib64"
-    NO_DEFAULT_PATH
+    ${_default_paths}
   )
+  if( NOT FFTWF_LIB )
+    ecbuild_warn("FindFFTW: single precision required, but fftw3f was not found")
+  endif()
+endif()
 
+if( _require_lp )
   find_library(
     FFTWL_LIB
     NAMES "fftw3l"
-    PATHS ${FFTW_ROOT}
+    PATHS ${_lib_paths}
     PATH_SUFFIXES "lib" "lib64"
-    NO_DEFAULT_PATH
+    ${_default_paths}
   )
+  if( NOT FFTWL_LIB )
+    ecbuild_warn("FindFFTW: long double precision required, but fftw3l was not found")
+  endif()
+endif()
 
-  #find includes
-  find_path(
-    FFTW_INCLUDES
-    NAMES "fftw3.h"
-    PATHS ${FFTW_ROOT}
-    PATH_SUFFIXES "include"
-    NO_DEFAULT_PATH
-  )
-
-else()
-
-  find_library(
-    FFTW_LIB
-    NAMES "fftw3"
-    PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
-  )
-
-  find_library(
-    FFTWF_LIB
-    NAMES "fftw3f"
-    PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
-  )
-
-
+if( _require_qp )
   find_library(
-    FFTWL_LIB
-    NAMES "fftw3l"
-    PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR}
-  )
-
-  find_path(
-    FFTW_INCLUDES
-    NAMES "fftw3.h"
-    PATHS ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR}
+    FFTWQ_LIB
+    NAMES "fftw3q"
+    PATHS ${_lib_paths}
+    PATH_SUFFIXES "lib" "lib64"
+    ${_default_paths}
   )
+  if( NOT FFTWQ_LIB )
+    ecbuild_warn("FindFFTW: quad precision required, but fftw3q was not found")
+  endif()
+endif()
 
-endif( FFTW_ROOT )
+#find includes
 
-set(FFTW_LIBRARIES ${FFTW_LIB} ${FFTWF_LIB})
+find_path(
+  FFTW_INCLUDES
+  NAMES "fftw3.h"
+  PATHS ${_include_paths}
+  PATH_SUFFIXES "include"
+  ${_default_paths}
+)
 
-if(FFTWL_LIB)
-  set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTWL_LIB})
-endif()
+set(FFTW_LIBRARIES ${FFTW_LIB} ${FFTWF_LIB} ${FFTWL_LIB} ${FFTWQ_LIB})
 
 set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} )
 
@@ -149,4 +214,4 @@ include(FindPackageHandleStandardArgs)
 find_package_handle_standard_args(FFTW DEFAULT_MSG
                                   FFTW_INCLUDES FFTW_LIBRARIES)
 
-mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES FFTW_LIB FFTWF_LIB FFTWL_LIB)
\ No newline at end of file
+mark_as_advanced(FFTW_INCLUDES FFTW_LIBRARIES FFTW_LIB FFTWF_LIB FFTWL_LIB)
diff --git a/cmake/contrib/FindNetCDF4.cmake b/cmake/contrib/FindNetCDF4.cmake
index 89b0337..6bba4e0 100644
--- a/cmake/contrib/FindNetCDF4.cmake
+++ b/cmake/contrib/FindNetCDF4.cmake
@@ -157,10 +157,13 @@ else()
 
     foreach( LANGUAGE ${NETCDF_LANGUAGE_BINDINGS} )
         ecbuild_debug("FindNetCDF4: looking for ${LANGUAGE} language bindings")
+
         set( NETCDF_${LANGUAGE}_FOUND 1 ) # disable this in following if necessary
-      
+
         # find the NETCDF includes
         foreach( INC ${NETCDF_${LANGUAGE}_INCLUDE_NAMES} )
+          #ecbuild_debug( "FindNetCDF4: looking for include file ${INC}")
+
           find_path( NETCDF_${INC}_INCLUDE_DIR ${INC}
               HINTS ${NETCDF_${LANGUAGE}_INCLUDE_FLAGS}
                     ${NETCDF_ROOT} ${NETCDF_DIR} ${NETCDF_PATH} ${NETCDF4_DIR}
@@ -169,8 +172,25 @@ else()
                   include
                   Include
           )
+          if( NOT NETCDF_${INC}_INCLUDE_DIR )
+            #ecbuild_debug( "FindNetCDF4: ${INC} not found" )
+            GET_FILENAME_COMPONENT( _basename ${INC} NAME_WE )
+            GET_FILENAME_COMPONENT( _ext ${INC} EXT )
+            string( TOUPPER ${_basename} _BASENAME )
+            set( INC_MOD "${_BASENAME}${_ext}")
+            #ecbuild_debug( "FindNetCDF4:     try ${INC_MOD}" )
+            find_path( NETCDF_${INC}_INCLUDE_DIR ${INC_MOD}
+              HINTS ${NETCDF_${LANGUAGE}_INCLUDE_FLAGS}
+                    ${NETCDF_ROOT} ${NETCDF_DIR} ${NETCDF_PATH} ${NETCDF4_DIR}
+                    ENV NETCDF_ROOT ENV NETCDF_DIR ENV NETCDF_PATH ENV NETCDF4_DIR
+              PATH_SUFFIXES
+                  include
+                  Include
+            )
+          endif()
+
           mark_as_advanced( NETCDF_${INC}_INCLUDE_DIR )
-          # debug_var( NETCDF_${INC}_INCLUDE_DIR)
+          #ecbuild_debug_var( NETCDF_${INC}_INCLUDE_DIR)
           if (NETCDF_${INC}_INCLUDE_DIR)
             list( APPEND NETCDF_INCLUDE_DIRS ${NETCDF_${INC}_INCLUDE_DIR} )
           else()
@@ -178,7 +198,7 @@ else()
             if( ${location} EQUAL -1 )
               else()
               if(NETCDF_FIND_REQUIRED)
-                message( SEND_ERROR "\"${INC}\" is not found for NetCDF component ${LANGUAGE}" )
+                ecbuild_error( "\"${INC}\" is not found for NetCDF component ${LANGUAGE}" )
               elseif( NOT NETCDF_FIND_QUIETLY )
                 message( STATUS "\"${INC}\" is not found for NetCDF component ${LANGUAGE}" )
               endif()
@@ -249,19 +269,19 @@ else()
 
         # Append the libraries for this language binding to the list of all
         # required libraries.
-        
+
         if( NETCDF_${LANGUAGE}_FOUND )
             ecbuild_debug( "FindNetCDF4: ${LANGUAGE} language bindings found" )
             if( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE )
-                list( APPEND NETCDF_${LANGUAGE}_LIBRARIES 
+                list( APPEND NETCDF_${LANGUAGE}_LIBRARIES
                     debug ${NETCDF_${LANGUAGE}_LIBRARIES_DEBUG}
                     optimized ${NETCDF_${LANGUAGE}_LIBRARIES_RELEASE} )
             else()
-                list( APPEND NETCDF_${LANGUAGE}_LIBRARIES 
-                    ${NETCDF_${LANGUAGE}_LIBRARIES_RELEASE} )                  
+                list( APPEND NETCDF_${LANGUAGE}_LIBRARIES
+                    ${NETCDF_${LANGUAGE}_LIBRARIES_RELEASE} )
             endif()
         endif()
-        # debug_var( NETCDF_${LANGUAGE}_LIBRARIES )
+        # ecbuild_debug_var( NETCDF_${LANGUAGE}_LIBRARIES )
         list( APPEND NETCDF_FOUND_REQUIRED_VARS NETCDF_${LANGUAGE}_FOUND )
     endforeach()
 
@@ -294,7 +314,10 @@ endif()
 
 set( NETCDF4_FIND_QUIETLY ${NETCDF_FIND_QUIETLY} )
 set( NETCDF4_FIND_REQUIRED ${NETCDF_FIND_REQUIRED} )
-find_package_handle_standard_args( NETCDF4 DEFAULT_MSG
+# handle the QUIET and REQUIRED arguments and set NETCDF4_FOUND to TRUE
+# if all listed variables are valid
+# Note: capitalisation of the package name must be the same as in the file name
+find_package_handle_standard_args( NetCDF4 DEFAULT_MSG
     ${NETCDF_FOUND_REQUIRED_VARS}
     NETCDF_LIBRARIES
     NETCDF_INCLUDE_DIRS
diff --git a/cmake/contrib/GetGitRevisionDescription.cmake.in b/cmake/contrib/GetGitRevisionDescription.cmake.in
index 7a3e42f..9fd3e64 100644
--- a/cmake/contrib/GetGitRevisionDescription.cmake.in
+++ b/cmake/contrib/GetGitRevisionDescription.cmake.in
@@ -33,6 +33,10 @@ else()
 endif()
 
 if(NOT HEAD_HASH)
+  if(EXISTS "@GIT_DATA@/head-ref")
     file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
     string(STRIP "${HEAD_HASH}" HEAD_HASH)
-endif()
\ No newline at end of file
+  else()
+    set(HEAD_HASH "unknown")
+  endif()
+endif()
diff --git a/cmake/ecbuild-config-version.cmake b/cmake/ecbuild-config-version.cmake
index eb4e668..df21f03 100644
--- a/cmake/ecbuild-config-version.cmake
+++ b/cmake/ecbuild-config-version.cmake
@@ -1,4 +1,4 @@
-set(PACKAGE_VERSION "1.9.0")
+set(PACKAGE_VERSION "2.3.0")
 
 # check whether the requested PACKAGE_FIND_VERSION is compatible
 
diff --git a/cmake/ecbuild-config.cmake b/cmake/ecbuild-config.cmake
index c5835de..6d89516 100644
--- a/cmake/ecbuild-config.cmake
+++ b/cmake/ecbuild-config.cmake
@@ -1,11 +1,13 @@
 # Config file for the ecbuild package
 # Defines the following variables:
 #
-#  ECBUILD_INCLUDE_DIRS - include directories
-#  ECBUILD_DEFINITIONS  - preprocessor definitions
-#  ECBUILD_LIBRARIES    - libraries to link against
-#  ECBUILD_FEATURES     - list of enabled features
-#  ECBUILD_VERSION      - version of the package
+#  ECBUILD_INCLUDE_DIRS   - include directories
+#  ECBUILD_DEFINITIONS    - preprocessor definitions
+#  ECBUILD_LIBRARIES      - libraries to link against
+#  ECBUILD_FEATURES       - list of enabled features
+#  ECBUILD_VERSION        - version of the package
+#  ECBUILD_GIT_SHA1       - Git revision of the package
+#  ECBUILD_GIT_SHA1_SHORT - short Git revision of the package
 #
 # Also defines ecbuild third-party library dependencies:
 #  ECBUILD_TPLS             - package names of  third-party library dependencies
@@ -26,12 +28,16 @@ set( ECBUILD_TPL_INCLUDE_DIRS  "" )
 set( ECBUILD_TPL_DEFINITIONS   "" )
 set( ECBUILD_TPL_LIBRARIES     "" )
 
+set( ECBUILD_VERSION           "2.3.0" )
+set( ECBUILD_GIT_SHA1          "4074672828fc9d5422808e1abdadbae60bca8b15" )
+set( ECBUILD_GIT_SHA1_SHORT    "4074672" )
+
 ### export include paths as absolute paths
 
 set( ECBUILD_INCLUDE_DIRS "" )
 foreach( path ${ECBUILD_SELF_INCLUDE_DIRS} )
-	get_filename_component( abspath ${path} ABSOLUTE )
-	list( APPEND ECBUILD_INCLUDE_DIRS ${abspath} )
+  get_filename_component( abspath ${path} ABSOLUTE )
+  list( APPEND ECBUILD_INCLUDE_DIRS ${abspath} )
 endforeach()
 list( APPEND ECBUILD_INCLUDE_DIRS ${ECBUILD_TPL_INCLUDE_DIRS} )
 
@@ -47,7 +53,7 @@ set( ECBUILD_LIBRARIES        ${ECBUILD_SELF_LIBRARIES}   ${ECBUILD_TPL_LIBRARIE
 
 set( ECBUILD_FEATURES    "TESTS;INSTALL" )
 foreach( _f ${ECBUILD_FEATURES} )
-	set( ECBUILD_HAVE_${_f} 1 )
+  set( ECBUILD_HAVE_${_f} 1 )
 endforeach()
 
 # Has this configuration been exported from a build tree?
@@ -58,22 +64,22 @@ if( EXISTS ${ECBUILD_CMAKE_DIR}/ecbuild-import.cmake )
   include( ${ECBUILD_IMPORT_FILE} )
 endif()
 
+# here goes the imports of the TPL's
+
+include( ${CMAKE_CURRENT_LIST_FILE}.tpls OPTIONAL )
+
 # insert definitions for IMPORTED targets
 
 if( NOT ecbuild_BINARY_DIR )
 
   if( ECBUILD_IS_BUILD_DIR_EXPORT )
-		include( "/tmp/metabuilds/ecflow-metab_5062/opensuse131/ecbuild/builds/ecbuild-targets.cmake" OPTIONAL )
-	else()
-		include( "${ECBUILD_CMAKE_DIR}/ecbuild-targets.cmake" )
-	endif()
+    include( "/tmp/metabuilds/ecflow-metab_5062/opensuse131/ecbuild/builds/ecbuild-targets.cmake" OPTIONAL )
+  else()
+    include( "${ECBUILD_CMAKE_DIR}/ecbuild-targets.cmake" )
+  endif()
 
 endif()
 
-# here goes the imports of the TPL's
-
-include( ${CMAKE_CURRENT_LIST_FILE}.tpls OPTIONAL )
-
 # publish this file as imported
 
 set( ECBUILD_IMPORT_FILE ${CMAKE_CURRENT_LIST_FILE} )
@@ -82,9 +88,10 @@ mark_as_advanced( ECBUILD_IMPORT_FILE )
 # set ecbuild_BASE_DIR for final installations or build directories
 
 if( NOT ecbuild )
-	if( ECBUILD_IS_BUILD_DIR_EXPORT )
-		set( ecbuild_BASE_DIR /tmp/metabuilds/ecflow-metab_5062/opensuse131/ecbuild/builds )
-	else()
-		set( ecbuild_BASE_DIR /usr/local/apps/ecbuild/1.9.0 )
-	endif()
+  if( ECBUILD_IS_BUILD_DIR_EXPORT )
+    set( ecbuild_BASE_DIR /tmp/metabuilds/ecflow-metab_5062/opensuse131/ecbuild/builds )
+  else()
+    get_filename_component( abspath ${CMAKE_CURRENT_LIST_DIR}/../../.. ABSOLUTE )
+    set( ecbuild_BASE_DIR ${abspath} )
+  endif()
 endif()
diff --git a/cmake/ecbuild_add_c_flags.cmake b/cmake/ecbuild_add_c_flags.cmake
index bef1d34..098c254 100644
--- a/cmake/ecbuild_add_c_flags.cmake
+++ b/cmake/ecbuild_add_c_flags.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -16,7 +16,8 @@
 #
 #   ecbuild_add_c_flags( <flag1> [ <flag2> ... ]
 #                        [ BUILD <build> ]
-#                        [ NAME <name> ] )
+#                        [ NAME <name> ]
+#                        [ NO_FAIL ] )
 #
 # Options
 # -------
@@ -27,6 +28,9 @@
 # NAME : optional
 #   name of the check (if omitted, checks are enumerated)
 #
+# NO_FAIL : optional
+#   do not fail if the flag cannot be added
+#
 ##############################################################################
 
 macro( ecbuild_add_c_flags m_c_flags )
@@ -34,47 +38,61 @@ macro( ecbuild_add_c_flags m_c_flags )
   set( _flags ${m_c_flags} )
 
   if( _flags AND CMAKE_C_COMPILER_LOADED )
-    set( options )
+    set( options NO_FAIL )
     set( single_value_args BUILD NAME )
     set( multi_value_args )
 
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
-    if( NOT DEFINED N_CFLAG )
-      set( N_CFLAG 0 )
+    set( _try_add_flag TRUE )
+    if( _PAR_BUILD )
+      string( TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_CAPS )
+      string( TOUPPER ${_PAR_BUILD}  _PAR_BUILD_CAPS )
+      if( NOT CMAKE_BUILD_TYPE_CAPS MATCHES "${_PAR_BUILD_CAPS}" )
+        set( _try_add_flag FALSE )
+      endif()
     endif()
+    if( _try_add_flag )
+      if( NOT DEFINED N_CFLAG )
+        set( N_CFLAG 0 )
+      endif()
 
-    math( EXPR N_CFLAG '${N_CFLAG}+1' )
+      math( EXPR N_CFLAG '${N_CFLAG}+1' )
 
-    if( NOT ECBUILD_TRUST_FLAGS )
-      if( DEFINED _PAR_NAME )
-        check_c_compiler_flag( ${_flags} ${_PAR_NAME} )
-        set( _flag_ok ${${_PAR_NAME}} )
+      if( NOT ECBUILD_TRUST_FLAGS )
+        if( DEFINED _PAR_NAME )
+          check_c_compiler_flag( ${_flags} ${_PAR_NAME} )
+          set( _flag_ok ${${_PAR_NAME}} )
+        else()
+          check_c_compiler_flag( ${_flags} C_FLAG_TEST_${N_CFLAG} )
+          set( _flag_ok ${C_FLAG_TEST_${N_CFLAG}} )
+        endif()
       else()
-        check_c_compiler_flag( ${_flags} C_FLAG_TEST_${N_CFLAG} )
-        set( _flag_ok ${C_FLAG_TEST_${N_CFLAG}} )
+        set( _flag_ok 1 )
       endif()
-    else()
-      set( _flag_ok 1 )
-    endif()
 
-    if( _flag_ok )
-      if( _PAR_BUILD )
-        set( CMAKE_C_FLAGS_${_PAR_BUILD} "${CMAKE_C_FLAGS_${_PAR_BUILD}} ${_flags}" )
-        ecbuild_debug( "C FLAG [${_flags}] added for build type ${_PAR_BUILD}" )
+      if( _flag_ok )
+        if( _PAR_BUILD )
+          set( CMAKE_C_FLAGS_${_PAR_BUILD} "${CMAKE_C_FLAGS_${_PAR_BUILD}} ${_flags}" )
+          ecbuild_debug( "C FLAG [${_flags}] added for build type ${_PAR_BUILD}" )
+        else()
+          set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flags}" )
+          ecbuild_debug( "C FLAG [${_flags}] added" )
+        endif()
+      elseif( _PAR_NO_FAIL )
+        ecbuild_info( "Unrecognised C flag [${_flags}] -- skipping" )
       else()
-        set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flags}" )
-        ecbuild_debug( "C FLAG [${_flags}] added" )
+        ecbuild_error( "Unrecognised C flag [${_flags}]" )
       endif()
-    else()
-      message( WARNING "Unrecognised C flag [${_flags}] -- skipping" )
     endif()
+    unset( _flags )
+    unset( _flag_ok )
+    unset( _try_add_flag )
   endif()
-  unset( _flags )
-  unset( _flag_ok )
+
 endmacro()
 
 macro( cmake_add_c_flags m_c_flags )
-  message( DEPRECATION " cmake_add_c_flags is deprecated, use ecbuild_add_c_flags instead." )
+  ecbuild_deprecate( " cmake_add_c_flags is deprecated, use ecbuild_add_c_flags instead." )
   ecbuild_add_c_flags( ${m_c_flags} )
 endmacro()
diff --git a/cmake/ecbuild_add_cxx11_flags.cmake b/cmake/ecbuild_add_cxx11_flags.cmake
index a4cce91..df8cde5 100644
--- a/cmake/ecbuild_add_cxx11_flags.cmake
+++ b/cmake/ecbuild_add_cxx11_flags.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/ecbuild_add_cxx_flags.cmake b/cmake/ecbuild_add_cxx_flags.cmake
index 8393572..5104880 100644
--- a/cmake/ecbuild_add_cxx_flags.cmake
+++ b/cmake/ecbuild_add_cxx_flags.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -16,7 +16,8 @@
 #
 #   ecbuild_add_cxx_flags( <flag1> [ <flag2> ... ]
 #                          [ BUILD <build> ]
-#                          [ NAME <name> ] )
+#                          [ NAME <name> ]
+#                          [ NO_FAIL ] )
 #
 # Options
 # -------
@@ -27,54 +28,71 @@
 # NAME : optional
 #   name of the check (if omitted, checks are enumerated)
 #
+# NO_FAIL : optional
+#   do not fail if the flag cannot be added
+#
 ##############################################################################
 
 macro( ecbuild_add_cxx_flags m_cxx_flags )
 
   set( _flags ${m_cxx_flags} )
   if( _flags AND CMAKE_CXX_COMPILER_LOADED )
-    set( options )
+    set( options NO_FAIL )
     set( single_value_args BUILD NAME )
     set( multi_value_args )
 
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
-    if( NOT DEFINED N_CXXFLAG )
-      set( N_CXXFLAG 0 )
+    set( _try_add_flag TRUE )
+    if( _PAR_BUILD )
+      string( TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_CAPS )
+      string( TOUPPER ${_PAR_BUILD}  _PAR_BUILD_CAPS )
+      if( NOT CMAKE_BUILD_TYPE_CAPS MATCHES "${_PAR_BUILD_CAPS}" )
+        set( _try_add_flag FALSE )
+      endif()
     endif()
+    if( _try_add_flag )
 
-    math( EXPR N_CXXFLAG '${N_CXXFLAG}+1' )
+      if( NOT DEFINED N_CXXFLAG )
+        set( N_CXXFLAG 0 )
+      endif()
 
-    if( NOT ECBUILD_TRUST_FLAGS )
-      if( DEFINED _PAR_NAME )
-        check_cxx_compiler_flag( ${_flags} ${_PAR_NAME} )
-        set( _flag_ok ${${_PAR_NAME}} )
+      math( EXPR N_CXXFLAG '${N_CXXFLAG}+1' )
+
+      if( NOT ECBUILD_TRUST_FLAGS )
+        if( DEFINED _PAR_NAME )
+          check_cxx_compiler_flag( ${_flags} ${_PAR_NAME} )
+          set( _flag_ok ${${_PAR_NAME}} )
+        else()
+          check_cxx_compiler_flag( ${_flags} CXX_FLAG_TEST_${N_CXXFLAG} )
+          set( _flag_ok CXX_FLAG_TEST_${N_CXXFLAG} )
+        endif()
       else()
-        check_cxx_compiler_flag( ${_flags} CXX_FLAG_TEST_${N_CXXFLAG} )
-        set( _flag_ok CXX_FLAG_TEST_${N_CXXFLAG} )
+        set( _flag_ok 1 )
       endif()
-    else()
-      set( _flag_ok 1 )
-    endif()
 
-    if( _flag_ok )
-      if( _PAR_BUILD )
-        set( CMAKE_CXX_FLAGS_${_PAR_BUILD} "${CMAKE_CXX_FLAGS_${_PAR_BUILD}} ${_flags}" )
-        ecbuild_debug( "C++ FLAG [${_flags}] added for build type ${_PAR_BUILD}" )
+      if( _flag_ok )
+        if( _PAR_BUILD )
+          set( CMAKE_CXX_FLAGS_${_PAR_BUILD} "${CMAKE_CXX_FLAGS_${_PAR_BUILD}} ${_flags}" )
+          ecbuild_debug( "C++ FLAG [${_flags}] added for build type ${_PAR_BUILD}" )
+        else()
+          set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flags}" )
+          ecbuild_debug( "C++ FLAG [${_flags}] added" )
+        endif()
+      elseif( _PAR_NO_FAIL )
+        ecbuild_info( "Unrecognised CXX flag [${_flags}] -- skipping" )
       else()
-        set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flags}" )
-        ecbuild_debug( "C++ FLAG [${_flags}] added" )
+        ecbuild_error( "Unrecognised CXX flag [${_flags}]" )
       endif()
-    else()
-      message( STATUS "Unrecognised CXX flag [${_flags}] -- skipping" )
     endif()
+    unset( _flags )
+    unset( _flag_ok )
+    unset( _try_add_flag )
   endif()
-  unset( _flags )
-  unset( _flag_ok )
 
 endmacro()
 
 macro( cmake_add_cxx_flags m_cxx_flags )
-  message( DEPRECATION " cmake_add_cxx_flags is deprecated, use ecbuild_add_cxx_flags instead." )
+  ecbuild_deprecate( " cmake_add_cxx_flags is deprecated, use ecbuild_add_cxx_flags instead." )
   ecbuild_add_cxx_flags( ${m_cxx_flags} )
 endmacro()
diff --git a/cmake/ecbuild_add_executable.cmake b/cmake/ecbuild_add_executable.cmake
index e4e39a1..4572832 100644
--- a/cmake/ecbuild_add_executable.cmake
+++ b/cmake/ecbuild_add_executable.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -16,6 +16,9 @@
 #
 #   ecbuild_add_executable( TARGET <name>
 #                           SOURCES <source1> [<source2> ...]
+#                           [ SOURCES_GLOB <glob1> [<glob2> ...] ]
+#                           [ SOURCES_EXCLUDE_REGEX <regex1> [<regex2> ...] ]
+#                           [ OBJECTS <obj1> [<obj2> ...] ]
 #                           [ TEMPLATES <template1> [<template2> ...] ]
 #                           [ LIBS <library1> [<library2> ...] ]
 #                           [ INCLUDES <path1> [<path2> ...] ]
@@ -41,6 +44,16 @@
 # SOURCES : required
 #   list of source files
 #
+# SOURCES_GLOB : optional
+#   search pattern to find source files to compile (note: not recommend according to CMake guidelines)
+#   it is usually better to explicitly list the source files in the CMakeList.txt
+#
+# SOURCES_EXCLUDE_REGEX : optional
+#   search pattern to exclude source files from compilation, applies o the results of SOURCES_GLOB
+#
+# OBJECTS : optional
+#   list of object libraries to add to this target
+#
 # TEMPLATES : optional
 #   list of files specified as SOURCES which are not to be compiled separately
 #   (these are commonly template implementation files included in a header)
@@ -69,7 +82,7 @@
 #
 # NOINSTALL : optional
 #   do not install the executable
-# 
+#
 # VERSION : optional, AUTO_VERSION or LIBS_VERSION is used if not specified
 #   version to use as executable version
 #
@@ -85,7 +98,6 @@
 # FFLAGS : optional
 #   list of Fortran compiler flags to use for all Fortran source files
 #
-#
 # LINKER_LANGUAGE : optional
 #   sets the LINKER_LANGUAGE property on the target
 #
@@ -98,20 +110,20 @@ macro( ecbuild_add_executable )
 
   set( options NOINSTALL AUTO_VERSION )
   set( single_value_args TARGET COMPONENT LINKER_LANGUAGE VERSION OUTPUT_NAME )
-  set( multi_value_args  SOURCES TEMPLATES LIBS INCLUDES DEPENDS PERSISTENT DEFINITIONS CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION )
+  set( multi_value_args  SOURCES SOURCES_GLOB SOURCES_EXCLUDE_REGEX OBJECTS TEMPLATES LIBS INCLUDES DEPENDS PERSISTENT DEFINITIONS CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_add_executable(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_add_executable(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   if( NOT _PAR_TARGET  )
-    message(FATAL_ERROR "The call to ecbuild_add_executable() doesn't specify the TARGET.")
+    ecbuild_critical("The call to ecbuild_add_executable() doesn't specify the TARGET.")
   endif()
 
-  if( NOT _PAR_SOURCES )
-    message(FATAL_ERROR "The call to ecbuild_add_executable() doesn't specify the SOURCES.")
+  if( NOT _PAR_SOURCES AND NOT _PAR_OBJECTS AND NOT _PAR_SOURCES_GLOB )
+    ecbuild_critical("The call to ecbuild_add_executable() specifies neither SOURCES nor OBJECTS nor SOURCES_GLOB.")
   endif()
 
   ### conditional build
@@ -130,19 +142,6 @@ macro( ecbuild_add_executable )
 
   if( _${_PAR_TARGET}_condition )
 
-    # add include dirs if defined
-    if( DEFINED _PAR_INCLUDES )
-      list(REMOVE_DUPLICATES _PAR_INCLUDES )
-      foreach( path ${_PAR_INCLUDES} ) # skip NOTFOUND
-        if( path )
-          ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): add ${path} to include_directories")
-          include_directories( ${path} )
-        else()
-          ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): ${path} not found - not adding to include_directories")
-        endif()
-      endforeach()
-    endif()
-
     # add persistent layer files
     if( DEFINED _PAR_PERSISTENT )
       if( DEFINED PERSISTENT_NAMESPACE )
@@ -159,8 +158,44 @@ macro( ecbuild_add_executable )
       add_custom_target( ${_PAR_TARGET}_templates SOURCES ${_PAR_TEMPLATES} )
     endif()
 
-    # add the executable target
-    add_executable( ${_PAR_TARGET} ${_PAR_SOURCES} )
+    # glob sources
+    unset( _glob_srcs )
+    foreach( pattern ${_PAR_SOURCES_GLOB} )
+        ecbuild_list_add_pattern( LIST _glob_srcs GLOB "${pattern}" )
+    endforeach()
+
+    foreach( pattern ${_PAR_SOURCES_EXCLUDE_REGEX} )
+        ecbuild_list_exclude_pattern( LIST _glob_srcs REGEX "${pattern}" )
+    endforeach()
+
+    # insert already compiled objects (from OBJECT libraries)
+    unset( _all_objects )
+    foreach( _obj ${_PAR_OBJECTS} )
+      list( APPEND _all_objects $<TARGET_OBJECTS:${_obj}> )
+    endforeach()
+
+    list( APPEND _PAR_SOURCES ${_glob_srcs} )
+
+    if( ECBUILD_LIST_SOURCES )
+      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): sources ${_PAR_SOURCES}")
+    endif()
+
+    add_executable( ${_PAR_TARGET} ${_PAR_SOURCES} ${_all_objects} )
+
+    # ecbuild_echo_target( ${_PAR_TARGET} )
+
+    # add include dirs if defined
+    if( DEFINED _PAR_INCLUDES )
+      list(REMOVE_DUPLICATES _PAR_INCLUDES )
+      foreach( path ${_PAR_INCLUDES} ) # skip NOTFOUND
+        if( path )
+          ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): add ${path} to include_directories")
+          target_include_directories( ${_PAR_TARGET} PRIVATE ${path} )
+        else()
+          ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): ${path} not found - not adding to include_directories")
+        endif()
+      endforeach()
+    endif()
 
     # set OUTPUT_NAME
 
@@ -191,24 +226,71 @@ macro( ecbuild_add_executable )
     endif()
 
     # filter sources
+
     ecbuild_separate_sources( TARGET ${_PAR_TARGET} SOURCES ${_PAR_SOURCES} )
 
+    #   ecbuild_debug_var( ${_PAR_TARGET}_h_srcs )
+    #   ecbuild_debug_var( ${_PAR_TARGET}_c_srcs )
+    #   ecbuild_debug_var( ${_PAR_TARGET}_cxx_srcs )
+    #   ecbuild_debug_var( ${_PAR_TARGET}_f_srcs )
+
     # add local flags
-    if( DEFINED _PAR_CFLAGS )
-      ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): use C flags ${_PAR_CFLAGS}")
-      set_source_files_properties( ${${_PAR_TARGET}_c_srcs}   PROPERTIES COMPILE_FLAGS "${_PAR_CFLAGS}" )
-    endif()
-    if( DEFINED _PAR_CXXFLAGS )
-      ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): use C++ flags ${_PAR_CFLAGS}")
-      set_source_files_properties( ${${_PAR_TARGET}_cxx_srcs} PROPERTIES COMPILE_FLAGS "${_PAR_CXXFLAGS}" )
+
+    if( ${_PAR_TARGET}_c_srcs )
+
+      if( ECBUILD_SOURCE_FLAGS )
+        ecbuild_source_flags( ${_PAR_TARGET}_C_SOURCE_FLAGS
+                              ${_PAR_TARGET}_c
+                              "${_PAR_CFLAGS}"
+                              "${${_PAR_TARGET}_c_srcs}" )
+
+        ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): setting source file C flags from ${${_PAR_TARGET}_C_SOURCE_FLAGS}")
+        include( ${${_PAR_TARGET}_C_SOURCE_FLAGS} )
+
+      elseif( DEFINED _PAR_CFLAGS )
+
+        ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): use C flags ${_PAR_CFLAGS}")
+        set_source_files_properties( ${${_PAR_TARGET}_c_srcs}   PROPERTIES COMPILE_FLAGS "${_PAR_CFLAGS}" )
+
+      endif()
     endif()
-    if( DEFINED _PAR_FFLAGS )
-      ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): use Fortran flags ${_PAR_CFLAGS}")
-      set_source_files_properties( ${${_PAR_TARGET}_f_srcs}   PROPERTIES COMPILE_FLAGS "${_PAR_FFLAGS}" )
+
+    if( ${_PAR_TARGET}_cxx_srcs )
+
+      if( ECBUILD_SOURCE_FLAGS )
+        ecbuild_source_flags( ${_PAR_TARGET}_CXX_SOURCE_FLAGS
+                              ${_PAR_TARGET}_cxx
+                              "${_PAR_CXXFLAGS}"
+                              "${${_PAR_TARGET}_cxx_srcs}" )
+
+        ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): setting source file CXX flags from ${${_PAR_TARGET}_CXX_SOURCE_FLAGS}")
+        include( ${${_PAR_TARGET}_CXX_SOURCE_FLAGS} )
+
+      elseif( DEFINED _PAR_CXXFLAGS )
+
+        ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): use C++ flags ${_PAR_CFLAGS}")
+        set_source_files_properties( ${${_PAR_TARGET}_cxx_srcs} PROPERTIES COMPILE_FLAGS "${_PAR_CXXFLAGS}" )
+
+      endif()
     endif()
-    if( DEFINED _PAR_GENERATED )
-      ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): mark as generated ${_PAR_GENERATED}")
-      set_source_files_properties( ${_PAR_GENERATED} PROPERTIES GENERATED 1 )
+
+    if( ${_PAR_TARGET}_f_srcs )
+
+      if( ECBUILD_SOURCE_FLAGS )
+        ecbuild_source_flags( ${_PAR_TARGET}_Fortran_SOURCE_FLAGS
+                              ${_PAR_TARGET}_f
+                              "${_PAR_FFLAGS}"
+                              "${${_PAR_TARGET}_f_srcs}" )
+
+        ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): setting source file Fortran flags from ${${_PAR_TARGET}_Fortran_SOURCE_FLAGS}")
+        include( ${${_PAR_TARGET}_Fortran_SOURCE_FLAGS} )
+
+      elseif( DEFINED _PAR_FFLAGS )
+
+        ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): use Fortran flags ${_PAR_CFLAGS}")
+        set_source_files_properties( ${${_PAR_TARGET}_f_srcs}  PROPERTIES COMPILE_FLAGS "${_PAR_FFLAGS}" )
+
+      endif()
     endif()
 
     # define VERSION if requested
@@ -222,11 +304,6 @@ macro( ecbuild_add_executable )
       endif()
     endif()
 
-    #    debug_var( ${_PAR_TARGET}_h_srcs )
-    #    debug_var( ${_PAR_TARGET}_c_srcs )
-    #    debug_var( ${_PAR_TARGET}_cxx_srcs )
-    #    debug_var( ${_PAR_TARGET}_f_srcs )
-
     # installation
 
     if( NOT _PAR_NOINSTALL )
@@ -240,7 +317,7 @@ macro( ecbuild_add_executable )
       #            endif()
 
       install( TARGETS ${_PAR_TARGET}
-               EXPORT  ${CMAKE_PROJECT_NAME}-targets
+               EXPORT  ${PROJECT_NAME}-targets
                RUNTIME DESTINATION ${INSTALL_BIN_DIR}
                LIBRARY DESTINATION ${INSTALL_LIB_DIR}
                ARCHIVE DESTINATION ${INSTALL_LIB_DIR} )
@@ -273,6 +350,13 @@ macro( ecbuild_add_executable )
     if( DEFINED _PAR_LINKER_LANGUAGE )
       ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): using linker language ${_PAR_LINKER_LANGUAGE}")
       set_property( TARGET ${_PAR_TARGET} PROPERTY LINKER_LANGUAGE ${_PAR_LINKER_LANGUAGE} )
+      if( ECBUILD_${_PAR_LINKER_LANGUAGE}_IMPLICIT_LINK_LIBRARIES )
+        target_link_libraries( ${_PAR_TARGET} ${ECBUILD_${_PAR_LINKER_LANGUAGE}_IMPLICIT_LINK_LIBRARIES} )
+      endif()
+    endif()
+
+    if( ECBUILD_IMPLICIT_LINK_LIBRARIES )
+      target_link_libraries( ${_PAR_TARGET} ${ECBUILD_IMPLICIT_LINK_LIBRARIES} )
     endif()
 
     # make sure target is removed before - some problems with AIX
diff --git a/cmake/ecbuild_add_extra_search_paths.cmake b/cmake/ecbuild_add_extra_search_paths.cmake
index fac96ba..94ac85b 100644
--- a/cmake/ecbuild_add_extra_search_paths.cmake
+++ b/cmake/ecbuild_add_extra_search_paths.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -15,10 +15,10 @@
 
 function( ecbuild_add_extra_search_paths pkg )
 
-  message( DEPRECATION " ecbuild_add_extra_search_paths modifies CMAKE_PREFIX_PATH,"
-           " which can affect future package discovery if not undone by the caller."
-           " The current CMAKE_PREFIX_PATH is being backed up as _CMAKE_PREFIX_PATH"
-           " so it can later be restored." )
+  ecbuild_deprecate( " ecbuild_add_extra_search_paths modifies CMAKE_PREFIX_PATH,"
+                     " which can affect future package discovery if not undone by the caller."
+                     " The current CMAKE_PREFIX_PATH is being backed up as _CMAKE_PREFIX_PATH"
+                     " so it can later be restored." )
 
   # Back up current CMAKE_PREFIX_PATH so the caller can reset it
   set( _CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE )
@@ -28,6 +28,6 @@ function( ecbuild_add_extra_search_paths pkg )
   ecbuild_list_extra_search_paths( ${pkg} CMAKE_PREFIX_PATH )
 
   set( CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE )
-  # debug_var( CMAKE_PREFIX_PATH )
+  # ecbuild_debug_var( CMAKE_PREFIX_PATH )
 
 endfunction()
diff --git a/cmake/ecbuild_add_fortran_flags.cmake b/cmake/ecbuild_add_fortran_flags.cmake
index f0da53f..17b9bf2 100644
--- a/cmake/ecbuild_add_fortran_flags.cmake
+++ b/cmake/ecbuild_add_fortran_flags.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -17,7 +17,8 @@
 #
 #   ecbuild_add_fortran_flags( <flag1> [ <flag2> ... ]
 #                              [ BUILD <build> ]
-#                              [ NAME <name> ] )
+#                              [ NAME <name> ]
+#                              [ NO_FAIL ] )
 #
 # Options
 # -------
@@ -29,6 +30,9 @@
 # NAME : optional
 #   name of the check (if omitted, checks are enumerated)
 #
+# NO_FAIL : optional
+#   do not fail if the flag cannot be added
+#
 ##############################################################################
 
 include( CheckFortranCompilerFlag )
@@ -38,49 +42,63 @@ macro( ecbuild_add_fortran_flags m_fortran_flags )
 
   if( _flags AND CMAKE_Fortran_COMPILER_LOADED )
 
-    set( options )
+    set( options NO_FAIL )
     set( single_value_args BUILD NAME )
     set( multi_value_args )
 
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
-    if( NOT DEFINED N_FortranFLAG )
-      set( N_FortranFLAG 0 )
+    set( _try_add_flag TRUE )
+    if( _PAR_BUILD )
+      string( TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_CAPS )
+      string( TOUPPER ${_PAR_BUILD}  _PAR_BUILD_CAPS )
+      if( NOT CMAKE_BUILD_TYPE_CAPS MATCHES "${_PAR_BUILD_CAPS}" )
+        set( _try_add_flag FALSE )
+      endif()
     endif()
 
-    math( EXPR N_FortranFLAG '${N_FortranFLAG}+1' )
+    if( _try_add_flag )
+      if( NOT DEFINED N_FortranFLAG )
+        set( N_FortranFLAG 0 )
+      endif()
+
+      math( EXPR N_FortranFLAG '${N_FortranFLAG}+1' )
 
-    if( NOT ECBUILD_TRUST_FLAGS )
-      if( DEFINED _PAR_NAME )
-        check_fortran_compiler_flag( ${_flags} ${_PAR_NAME} )
-        set( _flag_ok ${${_PAR_NAME}} )
+      if( NOT ECBUILD_TRUST_FLAGS )
+        if( DEFINED _PAR_NAME )
+          check_fortran_compiler_flag( ${_flags} ${_PAR_NAME} )
+          set( _flag_ok ${${_PAR_NAME}} )
+        else()
+          check_fortran_compiler_flag( ${_flags} Fortran_FLAG_TEST_${N_FortranFLAG} )
+          set( _flag_ok ${Fortran_FLAG_TEST_${N_FortranFLAG}} )
+        endif()
       else()
-        check_fortran_compiler_flag( ${_flags} Fortran_FLAG_TEST_${N_FortranFLAG} )
-        set( _flag_ok ${Fortran_FLAG_TEST_${N_FortranFLAG}} )
+        set( _flag_ok 1 )
       endif()
-    else()
-      set( _flag_ok 1 )
-    endif()
 
-    if( _flag_ok )
-      if( _PAR_BUILD )
-        set( CMAKE_Fortran_FLAGS_${_PAR_BUILD} "${CMAKE_Fortran_FLAGS_${_PAR_BUILD}} ${_flags}" )
-        ecbuild_debug( "Fortran FLAG [${_flags}] added for build type ${_PAR_BUILD}" )
+      if( _flag_ok )
+        if( _PAR_BUILD )
+          set( CMAKE_Fortran_FLAGS_${_PAR_BUILD} "${CMAKE_Fortran_FLAGS_${_PAR_BUILD}} ${_flags}" )
+          ecbuild_debug( "Fortran FLAG [${_flags}] added for build type ${_PAR_BUILD}" )
+        else()
+          set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${_flags}" )
+          ecbuild_debug( "Fortran FLAG [${_flags}] added" )
+        endif()
+      elseif( _PAR_NO_FAIL )
+        ecbuild_info( "Unrecognised Fortran flag [${_flags}] -- skipping" )
       else()
-        set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${_flags}" )
-        ecbuild_debug( "Fortran FLAG [${_flags}] added" )
+        ecbuild_error( "Unrecognised Fortran flag [${_flags}]" )
       endif()
-    else()
-      message( STATUS "Unrecognised Fortran flag [${_flags}] -- skipping" )
     endif()
-  endif()
 
-  unset( _flags )
-  unset( _flag_ok )
+    unset( _flags )
+    unset( _flag_ok )
+    unset( _try_add_flag )
+  endif()
 
 endmacro()
 
 macro( cmake_add_fortran_flags m_fortran_flags )
-  message( DEPRECATION " cmake_add_fortran_flags is deprecated, use ecbuild_add_fortran_flags instead." )
+  ecbuild_deprecate( " cmake_add_fortran_flags is deprecated, use ecbuild_add_fortran_flags instead." )
   ecbuild_add_fortran_flags( ${m_fortran_flags} )
 endmacro()
diff --git a/cmake/ecbuild_add_library.cmake b/cmake/ecbuild_add_library.cmake
index dc47956..48602a4 100644
--- a/cmake/ecbuild_add_library.cmake
+++ b/cmake/ecbuild_add_library.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -16,7 +16,10 @@
 #
 #   ecbuild_add_library( TARGET <name>
 #                        SOURCES <source1> [<source2> ...]
-#                        [ TYPE SHARED|STATIC|MODULE ]
+#                        [ SOURCES_GLOB <glob1> [<glob2> ...] ]
+#                        [ SOURCES_EXCLUDE_REGEX <regex1> [<regex2> ...] ]
+#                        [ TYPE SHARED|STATIC|MODULE|OBJECT ]
+#                        [ OBJECTS <obj1> [<obj2> ...] ]
 #                        [ TEMPLATES <template1> [<template2> ...] ]
 #                        [ LIBS <library1> [<library2> ...] ]
 #                        [ INCLUDES <path1> [<path2> ...] ]
@@ -55,6 +58,17 @@
 #   :STATIC: archives of object files for use when linking other targets.
 #   :MODULE: plugins that are not linked into other targets but may be loaded
 #            dynamically at runtime using dlopen-like functionality
+#   :OBJECT: files are just compiled into objects
+#
+# SOURCES_GLOB : optional
+#   search pattern to find source files to compile (note: not recommend according to CMake guidelines)
+#   it is usually better to explicitly list the source files in the CMakeList.txt
+#
+# SOURCES_EXCLUDE_REGEX : optional
+#   search pattern to exclude source files from compilation, applies o the results of SOURCES_GLOB
+#
+# OBJECTS : optional
+#   list of object libraries to add to this target
 #
 # TEMPLATES : optional
 #   list of files specified as SOURCES which are not to be compiled separately
@@ -135,20 +149,20 @@ function( ecbuild_add_library_impl )
 
   set( options NOINSTALL AUTO_VERSION )
   set( single_value_args TARGET TYPE COMPONENT INSTALL_HEADERS INSTALL_HEADERS_REGEX LINKER_LANGUAGE HEADER_DESTINATION VERSION OUTPUT_NAME )
-  set( multi_value_args  SOURCES TEMPLATES LIBS INCLUDES PRIVATE_INCLUDES PUBLIC_INCLUDES DEPENDS PERSISTENT DEFINITIONS INSTALL_HEADERS_LIST CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION )
+  set( multi_value_args  SOURCES SOURCES_GLOB SOURCES_EXCLUDE_REGEX OBJECTS TEMPLATES LIBS INCLUDES PRIVATE_INCLUDES PUBLIC_INCLUDES DEPENDS PERSISTENT DEFINITIONS INSTALL_HEADERS_LIST CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_add_library(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_add_library(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   if( NOT _PAR_TARGET  )
-    message(FATAL_ERROR "The call to ecbuild_add_library() doesn't specify the TARGET.")
+    ecbuild_critical("The call to ecbuild_add_library() doesn't specify the TARGET.")
   endif()
 
-  if( NOT _PAR_SOURCES )
-    message(FATAL_ERROR "The call to ecbuild_add_library() doesn't specify the SOURCES.")
+  if( NOT _PAR_SOURCES AND NOT _PAR_OBJECTS AND NOT _PAR_SOURCES_GLOB )
+    ecbuild_critical("The call to ecbuild_add_library() specifies neither SOURCES nor OBJECTS nor SOURCES_GLOB")
   endif()
 
   ### conditional build
@@ -172,8 +186,9 @@ function( ecbuild_add_library_impl )
       # checks that is either SHARED or STATIC or MODULE
       if( NOT _PAR_TYPE MATCHES "STATIC" AND
           NOT _PAR_TYPE MATCHES "SHARED" AND
+          NOT _PAR_TYPE MATCHES "OBJECT" AND
           NOT _PAR_TYPE MATCHES "MODULE" )
-        message( FATAL_ERROR "library type must be one of [ STATIC | SHARED | MODULE ]" )
+        ecbuild_critical( "library type must be one of [ STATIC | SHARED | MODULE | OBJECT ]" )
       endif()
       ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): library type is ${_PAR_TYPE}")
     endif()
@@ -195,7 +210,31 @@ function( ecbuild_add_library_impl )
       add_custom_target( ${_PAR_TARGET}_templates SOURCES ${_PAR_TEMPLATES} )
     endif()
 
-    add_library( ${_PAR_TARGET} ${_PAR_TYPE} ${_PAR_SOURCES} )
+    # glob sources
+    unset( _glob_srcs )
+    foreach( pattern ${_PAR_SOURCES_GLOB} )
+        ecbuild_list_add_pattern( LIST _glob_srcs GLOB "${pattern}" )
+    endforeach()
+
+    foreach( pattern ${_PAR_SOURCES_EXCLUDE_REGEX} )
+        ecbuild_list_exclude_pattern( LIST _glob_srcs REGEX "${pattern}" )
+    endforeach()
+
+    # insert already compiled objects (from OBJECT libraries)
+    unset( _all_objects )
+    foreach( _obj ${_PAR_OBJECTS} )
+      list( APPEND _all_objects $<TARGET_OBJECTS:${_obj}> )
+    endforeach()
+
+    list( APPEND _PAR_SOURCES ${_glob_srcs} )
+
+    if( ECBUILD_LIST_SOURCES )
+      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): sources ${_PAR_SOURCES}")
+    endif()
+
+    add_library( ${_PAR_TARGET} ${_PAR_TYPE} ${_PAR_SOURCES}  ${_all_objects} )
+
+    # ecbuild_echo_target( ${_PAR_TARGET} )
 
     # set OUTPUT_NAME
 
@@ -306,27 +345,74 @@ function( ecbuild_add_library_impl )
 
     # filter sources
 
-    ecbuild_separate_sources( TARGET ${_PAR_TARGET} SOURCES ${_PAR_SOURCES} )
+    if( _PAR_SOURCES )
+      ecbuild_separate_sources( TARGET ${_PAR_TARGET} SOURCES ${_PAR_SOURCES} )
+    endif()
 
-    #   debug_var( ${_PAR_TARGET}_h_srcs )
-    #   debug_var( ${_PAR_TARGET}_c_srcs )
-    #   debug_var( ${_PAR_TARGET}_cxx_srcs )
-    #   debug_var( ${_PAR_TARGET}_f_srcs )
+    #   ecbuild_debug_var( ${_PAR_TARGET}_h_srcs )
+    #   ecbuild_debug_var( ${_PAR_TARGET}_c_srcs )
+    #   ecbuild_debug_var( ${_PAR_TARGET}_cxx_srcs )
+    #   ecbuild_debug_var( ${_PAR_TARGET}_f_srcs )
 
     # add local flags
 
-    if( DEFINED _PAR_CFLAGS )
-      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): use C flags ${_PAR_CFLAGS}")
-      set_source_files_properties( ${${_PAR_TARGET}_c_srcs}   PROPERTIES COMPILE_FLAGS "${_PAR_CFLAGS}" )
+    if( ${_PAR_TARGET}_c_srcs )
+
+      if( ECBUILD_SOURCE_FLAGS )
+        ecbuild_source_flags( ${_PAR_TARGET}_C_SOURCE_FLAGS
+                              ${_PAR_TARGET}_c
+                              "${_PAR_CFLAGS}"
+                              "${${_PAR_TARGET}_c_srcs}" )
+
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): setting source file C flags from ${${_PAR_TARGET}_C_SOURCE_FLAGS}")
+        include( ${${_PAR_TARGET}_C_SOURCE_FLAGS} )
+
+      elseif( DEFINED _PAR_CFLAGS )
+
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): use C flags ${_PAR_CFLAGS}")
+        set_source_files_properties( ${${_PAR_TARGET}_c_srcs}   PROPERTIES COMPILE_FLAGS "${_PAR_CFLAGS}" )
+
+      endif()
     endif()
-    if( DEFINED _PAR_CXXFLAGS )
-      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): use C++ flags ${_PAR_CFLAGS}")
-      set_source_files_properties( ${${_PAR_TARGET}_cxx_srcs} PROPERTIES COMPILE_FLAGS "${_PAR_CXXFLAGS}" )
+
+    if( ${_PAR_TARGET}_cxx_srcs )
+
+      if( ECBUILD_SOURCE_FLAGS )
+        ecbuild_source_flags( ${_PAR_TARGET}_CXX_SOURCE_FLAGS
+                              ${_PAR_TARGET}_cxx
+                              "${_PAR_CXXFLAGS}"
+                              "${${_PAR_TARGET}_cxx_srcs}" )
+
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): setting source file CXX flags from ${${_PAR_TARGET}_CXX_SOURCE_FLAGS}")
+        include( ${${_PAR_TARGET}_CXX_SOURCE_FLAGS} )
+
+      elseif( DEFINED _PAR_CXXFLAGS )
+
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): use C++ flags ${_PAR_CFLAGS}")
+        set_source_files_properties( ${${_PAR_TARGET}_cxx_srcs} PROPERTIES COMPILE_FLAGS "${_PAR_CXXFLAGS}" )
+
+      endif()
     endif()
-    if( DEFINED _PAR_FFLAGS )
-      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): use Fortran flags ${_PAR_CFLAGS}")
-      set_source_files_properties( ${${_PAR_TARGET}_f_srcs}   PROPERTIES COMPILE_FLAGS "${_PAR_FFLAGS}" )
+
+    if( ${_PAR_TARGET}_f_srcs )
+
+      if( ECBUILD_SOURCE_FLAGS )
+        ecbuild_source_flags( ${_PAR_TARGET}_Fortran_SOURCE_FLAGS
+                              ${_PAR_TARGET}_f
+                              "${_PAR_FFLAGS}"
+                              "${${_PAR_TARGET}_f_srcs}" )
+
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): setting source file Fortran flags from ${${_PAR_TARGET}_Fortran_SOURCE_FLAGS}")
+        include( ${${_PAR_TARGET}_Fortran_SOURCE_FLAGS} )
+
+      elseif( DEFINED _PAR_FFLAGS )
+
+        ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): use Fortran flags ${_PAR_CFLAGS}")
+        set_source_files_properties( ${${_PAR_TARGET}_f_srcs}  PROPERTIES COMPILE_FLAGS "${_PAR_FFLAGS}" )
+
+      endif()
     endif()
+
     if( DEFINED _PAR_GENERATED )
       ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): mark as generated ${_PAR_GENERATED}")
       set_source_files_properties( ${_PAR_GENERATED} PROPERTIES GENERATED 1 )
@@ -336,11 +422,18 @@ function( ecbuild_add_library_impl )
     if( DEFINED _PAR_LINKER_LANGUAGE )
       ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): using linker language ${_PAR_LINKER_LANGUAGE}")
       set_property( TARGET ${_PAR_TARGET} PROPERTY LINKER_LANGUAGE ${_PAR_LINKER_LANGUAGE} )
+      if( ECBUILD_${_PAR_LINKER_LANGUAGE}_IMPLICIT_LINK_LIBRARIES )
+        target_link_libraries( ${_PAR_TARGET} ${ECBUILD_${_PAR_LINKER_LANGUAGE}_IMPLICIT_LINK_LIBRARIES} )
+      endif()
     endif()
 
-    # installation
+    if( ECBUILD_IMPLICIT_LINK_LIBRARIES )
+      target_link_libraries( ${_PAR_TARGET} ${ECBUILD_IMPLICIT_LINK_LIBRARIES} )
+    endif()
 
-    if( NOT _PAR_NOINSTALL )
+    # installation (except for OBJECT libraries)
+
+    if( NOT _PAR_NOINSTALL AND NOT _PAR_TYPE MATCHES "OBJECT" )
       ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): installing to ${INSTALL_LIB_DIR}")
 
       # and associate with defined component
@@ -351,7 +444,7 @@ function( ecbuild_add_library_impl )
       #            endif()
 
       install( TARGETS ${_PAR_TARGET}
-        EXPORT  ${CMAKE_PROJECT_NAME}-targets
+        EXPORT  ${PROJECT_NAME}-targets
         RUNTIME DESTINATION ${INSTALL_BIN_DIR}
         LIBRARY DESTINATION ${INSTALL_LIB_DIR}
         ARCHIVE DESTINATION ${INSTALL_LIB_DIR} )
@@ -421,7 +514,9 @@ function( ecbuild_add_library_impl )
     endif()
 
     # make sure target is removed before - some problems with AIX
-    add_custom_command( TARGET ${_PAR_TARGET} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E remove $<TARGET_FILE:${_PAR_TARGET}> )
+    if( NOT _PAR_TYPE MATCHES "OBJECT" )
+      add_custom_command( TARGET ${_PAR_TARGET} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E remove $<TARGET_FILE:${_PAR_TARGET}> )
+    endif()
 
     # for the links target
     if( NOT _PAR_NOINSTALL )
@@ -469,7 +564,7 @@ macro( ecbuild_add_library )
   else()
 
     if( NOT DEFINED _p_TARGET )
-      message(FATAL_ERROR "The call to ecbuild_add_library() doesn't specify the TARGET.")
+      ecbuild_critical("The call to ecbuild_add_library() doesn't specify the TARGET.")
     else()
 
       if( BUILD_SHARED_LIBS MATCHES "[Bb][Oo][Tt][Hh]" ) # build both types
diff --git a/cmake/ecbuild_add_option.cmake b/cmake/ecbuild_add_option.cmake
index 7728716..8261bd4 100644
--- a/cmake/ecbuild_add_option.cmake
+++ b/cmake/ecbuild_add_option.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -17,6 +17,7 @@
 #   ecbuild_add_option( FEATURE <name>
 #                       [ DEFAULT ON|OFF ]
 #                       [ DESCRIPTION <description> ]
+#                       [ PURPOSE <purpose> ]
 #                       [ REQUIRED_PACKAGES <package1> [<package2> ...] ]
 #                       [ CONDITION <condition1> [<condition2> ...] ]
 #                       [ ADVANCED ] )
@@ -33,18 +34,30 @@
 # DESCRIPTION : optional
 #   string describing the feature (shown in summary and stored in the cache)
 #
+# TYPE : optional, one of RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED
+#   type of dependency of the project on this package (defaults to OPTIONAL)
+#
+# PURPOSE : optional
+#   string describing which functionality this package enables in the project
+#
 # REQUIRED_PACKAGES : optional
 #   list of packages required to be found for this feature to be enabled
 #
-#   The package specification can be either ::
+#   The package specification can have one of two forms. Either ::
 #
-#     <package> [ <version> ... ]
+#     "<package> [ <version> ... ]"
 #
-#   to search for a given package with option minimum required version or ::
+#   to search for a given package using the CMake ``find_package`` mechanism.
+#   The entire specification must be enclosed in quotes and is passed on
+#   verbatim. Any options of ``find_package`` are supported.
 #
-#     PROJECT <name> [ VERSION <version> ... ]
+#   The other specification must start with ``PROJECT`` like this ::
 #
-#   to search for an ecBuild project with optional minimum required version.
+#     "PROJECT <name> [ VERSION <version> ... ]"
+#
+#   and is used to search for an ecBuild project via ``ecbuild_use_package``.
+#   The entire specification must be enclosed in quotes and is passed on
+#   verbatim. Any options of ``ecbuild_use_package`` are supported.
 #
 # CONDITION : optional
 #   conditional expression which must evaluate to true for this option to be
@@ -72,19 +85,19 @@
 macro( ecbuild_add_option )
 
   set( options ADVANCED )
-  set( single_value_args FEATURE DEFAULT DESCRIPTION )
+  set( single_value_args FEATURE DEFAULT DESCRIPTION TYPE PURPOSE )
   set( multi_value_args  REQUIRED_PACKAGES CONDITION )
 
   cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if( _p_UNPARSED_ARGUMENTS )
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_add_option(): \"${_p_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_add_option(): \"${_p_UNPARSED_ARGUMENTS}\"")
   endif()
 
   # check FEATURE parameter
 
   if( NOT _p_FEATURE  )
-    message(FATAL_ERROR "The call to ecbuild_add_option() doesn't specify the FEATURE.")
+    ecbuild_critical("The call to ecbuild_add_option() doesn't specify the FEATURE.")
   endif()
 
   # check DEFAULT parameter
@@ -93,11 +106,15 @@ macro( ecbuild_add_option )
     set( _p_DEFAULT ON )
   else()
     if( NOT _p_DEFAULT MATCHES "[Oo][Nn]" AND NOT _p_DEFAULT MATCHES "[Oo][Ff][Ff]" )
-      message(FATAL_ERROR "In macro ecbuild_add_option(), DEFAULT is either ON or OFF: \"${_p_DEFAULT}\"")
+      ecbuild_critical("In macro ecbuild_add_option(), DEFAULT is either ON or OFF: \"${_p_DEFAULT}\"")
     endif()
   endif()
   ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): defaults to ${_p_DEFAULT}")
 
+  if( NOT _p_TYPE  )
+    set( _p_TYPE OPTIONAL )
+  endif()
+
   # check CONDITION parameter
   if( DEFINED _p_CONDITION )
     set(_feature_condition_file "${CMAKE_CURRENT_BINARY_DIR}/set_${_p_FEATURE}_condition.cmake")
@@ -135,7 +152,12 @@ macro( ecbuild_add_option )
   # define the option -- for cmake GUI
 
   option( ENABLE_${_p_FEATURE} "${_p_DESCRIPTION}" ${_p_DEFAULT} )
-  ecbuild_set_feature( ${_p_FEATURE} ENABLED ${_p_DEFAULT} PURPOSE "${_p_DESCRIPTION}" )
+  ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): defining option ENABLE_${_p_FEATURE} '${_p_DESCRIPTION}' ${_p_DEFAULT}")
+  ecbuild_set_feature( ${_p_FEATURE} ENABLED ${_p_DEFAULT} )
+  set_package_properties( ${_p_FEATURE} PROPERTIES
+                          DESCRIPTION "${_p_DESCRIPTION}"
+                          TYPE ${_p_TYPE}
+                          PURPOSE "${_p_PURPOSE}" )
 
   ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): ENABLE_${_p_FEATURE} = ${ENABLE_${_p_FEATURE}}")
   set( _do_search ${ENABLE_${_p_FEATURE}} )
@@ -167,9 +189,9 @@ macro( ecbuild_add_option )
           set( pkgproject 0 )
         endif()
 
-        # debug_var( pkg )
-        # debug_var( pkglist )
-        # debug_var( pkgname )
+        # ecbuild_debug_var( pkg )
+        # ecbuild_debug_var( pkglist )
+        # ecbuild_debug_var( pkgname )
 
         string( TOUPPER ${pkgname} pkgUPPER )
         string( TOLOWER ${pkgname} pkgLOWER )
@@ -206,6 +228,11 @@ macro( ecbuild_add_option )
               list( REMOVE_ITEM _find_args ${pkgname} )
               ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): searching for Python")
               ecbuild_find_python( ${_find_args} )
+            elseif( pkgname STREQUAL "LEXYACC" )
+              set( _find_args ${pkglist} )
+              list( REMOVE_ITEM _find_args ${pkgname} )
+              ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): searching for lex-yacc")
+              ecbuild_find_lexyacc( ${_find_args} )
             else()
               ecbuild_debug("ecbuild_add_option(${_p_FEATURE}): searching for package ${pkgname}")
               find_package( ${pkglist} )
@@ -223,16 +250,16 @@ macro( ecbuild_add_option )
 
         endif()
 
-        # debug_var( ${pkgname}_FOUND  )
-        # debug_var( ${pkgLOWER}_FOUND )
-        # debug_var( ${pkgUPPER}_FOUND )
+        # ecbuild_debug_var( ${pkgname}_FOUND  )
+        # ecbuild_debug_var( ${pkgLOWER}_FOUND )
+        # ecbuild_debug_var( ${pkgUPPER}_FOUND )
 
         # we have feature if all required packages were FOUND
 
         if( ${pkgname}_FOUND OR ${pkgUPPER}_FOUND OR ${pkgLOWER}_FOUND )
-          message( STATUS "Found package ${pkgname} required for feature ${_p_FEATURE}" )
+          ecbuild_info( "Found package ${pkgname} required for feature ${_p_FEATURE}" )
         else()
-          message( STATUS "Could not find package ${pkgname} required for feature ${_p_FEATURE} -- Provide ${pkgname} location with -D${pkgUPPER}_PATH=/..." )
+          ecbuild_info( "Could not find package ${pkgname} required for feature ${_p_FEATURE} -- Provide ${pkgname} location with -D${pkgUPPER}_PATH=/..." )
           set( HAVE_${_p_FEATURE} 0 )
           list( APPEND _failed_to_find_packages ${pkgname} )
         endif()
@@ -247,21 +274,22 @@ macro( ecbuild_add_option )
 
     if( HAVE_${_p_FEATURE} )
 
-      message( STATUS "Feature ${_p_FEATURE} enabled" )
+      ecbuild_info( "Feature ${_p_FEATURE} enabled" )
 
     else() # if user provided input and we cannot satisfy FAIL otherwise WARN
 
       if( ${_p_FEATURE}_user_provided_input )
         if( _${_p_FEATURE}_condition )
-          message( FATAL_ERROR "Feature ${_p_FEATURE} cannot be enabled -- following required packages weren't found: ${_failed_to_find_packages}" )
+          ecbuild_critical( "Feature ${_p_FEATURE} cannot be enabled -- following required packages weren't found: ${_failed_to_find_packages}" )
         else()
-          message( FATAL_ERROR "Feature ${_p_FEATURE} cannot be enabled -- following condition was not met: ${_p_CONDITION}" )
+          string(REPLACE ";" " " _condition_msg "${_p_CONDITION}")
+          ecbuild_critical( "Feature ${_p_FEATURE} cannot be enabled -- following condition was not met: ${_condition_msg}" )
         endif()
       else()
         if( _${_p_FEATURE}_condition )
-          message( STATUS "Feature ${_p_FEATURE} was not enabled (also not requested) -- following condition was not met: ${_p_CONDITION}" )
+          ecbuild_info( "Feature ${_p_FEATURE} was not enabled (also not requested) -- following condition was not met: ${_p_CONDITION}" )
         else()
-          message( STATUS "Feature ${_p_FEATURE} was not enabled (also not requested) -- following required packages weren't found: ${_failed_to_find_packages}" )
+          ecbuild_info( "Feature ${_p_FEATURE} was not enabled (also not requested) -- following required packages weren't found: ${_failed_to_find_packages}" )
         endif()
         set( ENABLE_${_p_FEATURE} OFF )
         ecbuild_set_feature( ${_p_FEATURE} ENABLED OFF )
diff --git a/cmake/ecbuild_add_persistent.cmake b/cmake/ecbuild_add_persistent.cmake
index 96c160d..42bb44b 100644
--- a/cmake/ecbuild_add_persistent.cmake
+++ b/cmake/ecbuild_add_persistent.cmake
@@ -1,8 +1,8 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
+# (C) Copyright 1996-2016 ECMWF.
+#
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -34,7 +34,7 @@
 #   C++ namespace to place the persistent class information in
 #
 ##############################################################################
-  
+
 # define the script to build the persistent class information
 set( sg_perl "${CMAKE_CURRENT_LIST_DIR}/sg.pl" CACHE INTERNAL "perl script to generate persistent objects" )
 
@@ -44,20 +44,20 @@ macro( ecbuild_add_persistent )
 
   set( options )
   set( single_value_args SRC_LIST NAMESPACE )
-  set( multi_value_args  FILES ) 
+  set( multi_value_args  FILES )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_add_persistent(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_add_persistent(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   if( NOT _PAR_SRC_LIST  )
-    message(FATAL_ERROR "The call to ecbuild_add_persistent() doesn't specify the SRC_LIST.")
+    ecbuild_critical("The call to ecbuild_add_persistent() doesn't specify the SRC_LIST.")
   endif()
 
   if( NOT _PAR_FILES )
-    message(FATAL_ERROR "The call to ecbuild_add_persistent() doesn't specify the FILES.")
+    ecbuild_critical("The call to ecbuild_add_persistent() doesn't specify the FILES.")
   endif()
 
   foreach( file ${_PAR_FILES} )
@@ -71,7 +71,7 @@ macro( ecbuild_add_persistent )
       set( file ${_file_dir}/${_file_we} )
     endif()
 
-    # debug_var(file)
+    # ecbuild_debug_var(file)
 
     add_custom_command( OUTPUT  ${file}.b
                         COMMAND ${PERL_EXECUTABLE} ${sg_perl} ${CMAKE_CURRENT_SOURCE_DIR}/${file}.h
diff --git a/cmake/ecbuild_add_resources.cmake b/cmake/ecbuild_add_resources.cmake
index da6e55a..cf0543b 100644
--- a/cmake/ecbuild_add_resources.cmake
+++ b/cmake/ecbuild_add_resources.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -62,11 +62,11 @@ macro( ecbuild_add_resources )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_add_resources(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_add_resources(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT _PAR_TARGET  )
-      message(FATAL_ERROR "The call to ecbuild_add_resources() doesn't specify the TARGET.")
+      ecbuild_critical("The call to ecbuild_add_resources() doesn't specify the TARGET.")
     endif()
 
     set( LOCAL_FILES_NOT_TO_PACK "" )
diff --git a/cmake/ecbuild_add_test.cmake b/cmake/ecbuild_add_test.cmake
index 6ae839a..2097683 100644
--- a/cmake/ecbuild_add_test.cmake
+++ b/cmake/ecbuild_add_test.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -16,13 +16,15 @@
 #
 #   ecbuild_add_test( [ TARGET <name> ]
 #                     [ SOURCES <source1> [<source2> ...] ]
+#                     [ OBJECTS <obj1> [<obj2> ...] ]
 #                     [ COMMAND <executable> ]
 #                     [ TYPE EXE|SCRIPT|PYTHON ]
 #                     [ ARGS <argument1> [<argument2> ...] ]
 #                     [ RESOURCES <file1> [<file2> ...] ]
 #                     [ TEST_DATA <file1> [<file2> ...] ]
 #                     [ BOOST ]
-#                     [ MPI <number-of-ranks> ]
+#                     [ MPI <number-of-mpi-tasks> ]
+#                     [ OMP <number-of-threads-per-mpi-task> ]
 #                     [ ENABLED ON|OFF ]
 #                     [ LIBS <library1> [<library2> ...] ]
 #                     [ INCLUDES <path1> [<path2> ...] ]
@@ -48,6 +50,9 @@
 # SOURCES : required if TARGET is provided
 #   list of source files to be compiled
 #
+# OBJECTS : optional
+#   list of object libraries to add to this target
+#
 # COMMAND : either TARGET or COMMAND must be provided, unless TYPE is PYTHON
 #   command or script to execute (no executable is built)
 #
@@ -75,6 +80,12 @@
 #
 #   If greater than 1, and MPI is not available, the test is disabled.
 #
+# OMP : optional
+#   number of OpenMP threads per MPI task to use.
+#
+#   If set, the environment variable OMP_NUM_THREADS will set.
+#   Also, in case of launchers like aprun, the OMP_NUMTHREADS_FLAG will be used.
+#
 # ENABLED : optional
 #   if set to OFF, the test is built but not enabled as a test case
 #
@@ -126,31 +137,39 @@
 macro( ecbuild_add_test )
 
   set( options           BOOST )
-  set( single_value_args TARGET ENABLED COMMAND TYPE LINKER_LANGUAGE MPI WORKING_DIRECTORY )
-  set( multi_value_args  SOURCES LIBS INCLUDES TEST_DEPENDS DEPENDS ARGS
+  set( single_value_args TARGET ENABLED COMMAND TYPE LINKER_LANGUAGE MPI OMP WORKING_DIRECTORY )
+  set( multi_value_args  SOURCES OBJECTS LIBS INCLUDES TEST_DEPENDS DEPENDS ARGS
                          PERSISTENT DEFINITIONS RESOURCES TEST_DATA CFLAGS
                          CXXFLAGS FFLAGS GENERATED CONDITION ENVIRONMENT )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_add_test(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_add_test(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   set( _TEST_DIR ${CMAKE_CURRENT_BINARY_DIR} )
 
   # Check for MPI
   if(_PAR_MPI)
-    if( (_PAR_MPI GREATER 1) AND ( (NOT HAVE_MPI) OR (NOT MPIEXEC) ) )
+    if( (_PAR_MPI GREATER 1) AND ( (NOT MPI_FOUND) OR (NOT MPIEXEC) ) )
       ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): ${_PAR_MPI} MPI ranks requested but MPI not available - disabling test")
       set( _PAR_ENABLED 0 )
-    endif()
-    if( (_PAR_MPI EQUAL 1) AND (NOT HAVE_MPI) )
+    elseif( (_PAR_MPI EQUAL 1) AND (NOT MPI_FOUND) )
       ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): 1 MPI rank requested but MPI not available - disabling MPI")
       set( _PAR_MPI 0 )
+    else()
+      ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): Running using ${_PAR_MPI} MPI rank(s)")
     endif()
   endif()
 
+  # Check for OMP
+  if( NOT DEFINED _PAR_OMP )
+    set( _PAR_OMP 1 )
+  endif()
+  list( APPEND _PAR_ENVIRONMENT "OMP_NUM_THREADS=${_PAR_OMP}" )
+
+
   # default is enabled
   if( NOT DEFINED _PAR_ENABLED )
     set( _PAR_ENABLED 1 )
@@ -168,7 +187,7 @@ macro( ecbuild_add_test )
   if( NOT _PAR_TYPE AND DEFINED _PAR_TARGET )
     set( _PAR_TYPE "EXE" )
     if( NOT _PAR_SOURCES )
-      message(FATAL_ERROR "The call to ecbuild_add_test() defines a TARGET without SOURCES.")
+      ecbuild_critical("The call to ecbuild_add_test() defines a TARGET without SOURCES.")
     endif()
   endif()
 
@@ -176,7 +195,7 @@ macro( ecbuild_add_test )
     if( PYTHONINTERP_FOUND )
       set( _PAR_COMMAND ${PYTHON_EXECUTABLE} )
     else()
-      message( WARNING "Requested a python test but python interpreter not found - disabling test\nPYTHON_EXECUTABLE: [${PYTHON_EXECUTABLE}]" )
+      ecbuild_warn( "Requested a python test but python interpreter not found - disabling test\nPYTHON_EXECUTABLE: [${PYTHON_EXECUTABLE}]" )
       set( _PAR_ENABLED 0 )
     endif()
   endif()
@@ -184,15 +203,15 @@ macro( ecbuild_add_test )
   ### further checks
 
   if( _PAR_ENABLED AND NOT _PAR_TARGET AND NOT _PAR_COMMAND )
-    message(FATAL_ERROR "The call to ecbuild_add_test() defines neither a TARGET nor a COMMAND.")
+    ecbuild_critical("The call to ecbuild_add_test() defines neither a TARGET nor a COMMAND.")
   endif()
 
   if( _PAR_ENABLED AND NOT _PAR_COMMAND AND NOT _PAR_SOURCES )
-    message(FATAL_ERROR "The call to ecbuild_add_test() defines neither a COMMAND nor SOURCES, so no test can be defined or built.")
+    ecbuild_critical("The call to ecbuild_add_test() defines neither a COMMAND nor SOURCES, so no test can be defined or built.")
   endif()
 
   if( _PAR_TYPE MATCHES "SCRIPT" AND NOT _PAR_COMMAND )
-    message(FATAL_ERROR "The call to ecbuild_add_test() defines a 'script' but doesn't specify the COMMAND.")
+    ecbuild_critical("The call to ecbuild_add_test() defines a 'script' but doesn't specify the COMMAND.")
   endif()
 
   ### conditional build
@@ -266,9 +285,13 @@ macro( ecbuild_add_test )
         endif()
       endif()
 
-      # add the test target
+      # insert already compiled objects (from OBJECT libraries)
+      unset( _all_objects )
+      foreach( _obj ${_PAR_OBJECTS} )
+        list( APPEND _all_objects $<TARGET_OBJECTS:${_obj}> )
+      endforeach()
 
-      add_executable( ${_PAR_TARGET} ${_PAR_SOURCES} )
+      add_executable( ${_PAR_TARGET} ${_PAR_SOURCES} ${_all_objects} )
 
       # add extra dependencies
       if( DEFINED _PAR_DEPENDS)
@@ -354,9 +377,6 @@ macro( ecbuild_add_test )
                           PRE_BUILD
                           COMMAND ${CMAKE_COMMAND} -E remove ${EXE_FILENAME} )
 
-      set_property( TARGET ${_PAR_TARGET} PROPERTY SKIP_BUILD_RPATH         FALSE )
-      set_property( TARGET ${_PAR_TARGET} PROPERTY BUILD_WITH_INSTALL_RPATH FALSE )
-
     endif() # _PAR_SOURCES
 
     if( DEFINED _PAR_COMMAND AND NOT _PAR_TARGET ) # in the absence of target, we use the command as a name
@@ -376,18 +396,29 @@ macro( ecbuild_add_test )
 
     # define the arguments
     set( TEST_ARGS "" )
-    if( DEFINED _PAR_ARGS  )
+    # Boost Unit Test >= 1.60 requires arguments to be passed to the application to be separated by --
+    if( DEFINED _PAR_ARGS AND _PAR_BOOST )
+      list( APPEND TEST_ARGS "--" ${_PAR_ARGS} )
+    elseif( DEFINED _PAR_ARGS )
       list( APPEND TEST_ARGS ${_PAR_ARGS} )
     endif()
 
     # Wrap with MPIEXEC
     if( _PAR_MPI )
+      
+      set( MPIEXEC_TASKS ${MPIEXEC_NUMPROC_FLAG} ${_PAR_MPI} )
+      if( DEFINED MPIEXEC_NUMTHREAD_FLAG )
+        set( MPIEXEC_THREADS ${MPIEXEC_NUMTHREAD_FLAG} ${_PAR_OMP} )
+      endif()
+
+      set( _LAUNCH ${MPIEXEC} ${MPIEXEC_TASKS} ${MPIEXEC_THREADS} )
+
       if( DEFINED _PAR_COMMAND )
-        ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): running as ${MPIEXEC} -n ${_PAR_MPI} ${_TEST_DIR}/${_PAR_COMMAND}")
-        set( _PAR_COMMAND ${MPIEXEC} -n ${_PAR_MPI} ${_TEST_DIR}/${_PAR_COMMAND} )
+        ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): running as ${_LAUNCH} ${_PAR_COMMAND}")
+        set( _PAR_COMMAND ${_LAUNCH} ${_PAR_COMMAND} )
       else()
-        ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): running as ${MPIEXEC} -n ${_PAR_MPI} ${_TEST_DIR}/${_PAR_TARGET}")
-        set( _PAR_COMMAND ${MPIEXEC} -n ${_PAR_MPI} ${_TEST_DIR}/${_PAR_TARGET} )
+        ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): running as ${_LAUNCH} ${_TEST_DIR}/${_PAR_TARGET}")
+        set( _PAR_COMMAND ${_LAUNCH} ${_TEST_DIR}/${_PAR_TARGET} )
       endif()
     endif()
 
@@ -396,9 +427,9 @@ macro( ecbuild_add_test )
     if( _PAR_ENABLED ) # we can disable and still build it but not run it with 'make tests'
 
       if( DEFINED _PAR_COMMAND )
-        add_test( ${_PAR_TARGET} ${_PAR_COMMAND} ${TEST_ARGS} ${_working_dir} ) # run a command as test
+        add_test( NAME ${_PAR_TARGET} COMMAND ${_PAR_COMMAND} ${TEST_ARGS} ${_working_dir} ) # run a command as test
       else()
-        add_test( ${_PAR_TARGET} ${_PAR_TARGET}  ${TEST_ARGS} ${_working_dir} ) # run the test that was generated
+        add_test( NAME ${_PAR_TARGET} COMMAND ${_PAR_TARGET}  ${TEST_ARGS} ${_working_dir} ) # run the test that was generated
       endif()
 
       # get test data
diff --git a/cmake/ecbuild_append_to_rpath.cmake b/cmake/ecbuild_append_to_rpath.cmake
index 5a7bd66..9ecde3e 100644
--- a/cmake/ecbuild_append_to_rpath.cmake
+++ b/cmake/ecbuild_append_to_rpath.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -39,7 +39,7 @@ endfunction()
 macro( ecbuild_append_to_rpath RPATH_DIRS )
    
    if( NOT ${ARGC} EQUAL 1 )
-     message( SEND_ERROR "ecbuild_append_to_rpath takes 1 argument")
+     ecbuild_error( "ecbuild_append_to_rpath takes 1 argument")
    endif()
 
    foreach( RPATH_DIR ${RPATH_DIRS} )
diff --git a/cmake/ecbuild_bundle.cmake b/cmake/ecbuild_bundle.cmake
index 2d9b779..83b0bba 100644
--- a/cmake/ecbuild_bundle.cmake
+++ b/cmake/ecbuild_bundle.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -9,10 +9,6 @@
 # Set policies
 include( ecbuild_policies NO_POLICY_SCOPE )
 
-macro( debug_here VAR )
-  message( STATUS " >>>>> ${VAR} [${${VAR}}]")
-endmacro()
-
 include(CMakeParseArguments)
 
 include(ecbuild_git)
@@ -61,7 +57,7 @@ endmacro()
 # Declare a subproject to be built as part of this bundle. ::
 #
 #   ecbuild_bundle( PROJECT <name>
-#                   STASH <repository> | GIT <giturl>
+#                   STASH <repository> | GIT <giturl> | SOURCE <path>
 #                   [ BRANCH <gitbranch> | TAG <gittag> ]
 #                   [ UPDATE | NOREMOTE ] )
 #                   [ MANUAL ] )
@@ -72,12 +68,15 @@ endmacro()
 # PROJECT : required
 #   project name for the Git repository to be managed
 #
-# STASH : cannot be combined with GIT, either is required
+# STASH : cannot be combined with GIT or SOURCE
 #   Stash repository in the form <project>/<repository>
 #
-# URL : cannot be combined with STASH, either is required
+# GIT : cannot be combined with STASH or SOURCE
 #   Git URL of the remote repository to clone (see ``git help clone``)
 #
+# SOURCE : cannot be combined with STASH or GIT
+#   Path to an existing local repository, which will be symlinked
+#
 # BRANCH : optional, cannot be combined with TAG
 #   Git branch to check out
 #
@@ -104,6 +103,10 @@ endmacro()
 # The first time a bundle is built, the sources of all subprojects are cloned
 # into directories named according to project in the *source* tree of the
 # bundle (which means these directories should be added to ``.gitignore``).
+# If the ``SOURCE`` option is used it must point to an existing local
+# repository on disk and no new repository is cloned. Be aware that using the
+# ``BRANCH`` or ``TAG`` option leads to the corresponding version being checked
+# out in that repository!
 #
 # Subprojects are configured and built in order. Due to being added as a
 # subproject, the usual project discovery mechanism (i.e. locating and
@@ -119,23 +122,32 @@ endmacro()
 macro( ecbuild_bundle )
 
   set( options )
-  set( single_value_args PROJECT STASH GIT )
+  set( single_value_args PROJECT STASH GIT SOURCE )
   set( multi_value_args )
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}" ${_FIRST_ARG} ${ARGN} )
 
   string(TOUPPER "${_PAR_PROJECT}" PNAME)
 
   if( BUNDLE_SKIP_${PNAME} )
-      message( STATUS "Skipping bundle project ${PNAME}" )
+    ecbuild_info( "Skipping bundle project ${PNAME}" )
   else()
 
-      if( _PAR_STASH )
-          ecmwf_stash( PROJECT ${_PAR_PROJECT} DIR ${PROJECT_SOURCE_DIR}/${_PAR_PROJECT} STASH ${_PAR_STASH} ${_PAR_UNPARSED_ARGUMENTS} )
-      elseif( _PAR_GIT )
-          ecbuild_git( PROJECT ${_PAR_PROJECT} DIR ${PROJECT_SOURCE_DIR}/${_PAR_PROJECT} URL ${_PAR_GIT} ${_PAR_UNPARSED_ARGUMENTS} )
+    if( _PAR_STASH )
+      ecmwf_stash( PROJECT ${_PAR_PROJECT} DIR ${PROJECT_SOURCE_DIR}/${_PAR_PROJECT} STASH ${_PAR_STASH} ${_PAR_UNPARSED_ARGUMENTS} )
+    elseif( _PAR_GIT )
+      ecbuild_git( PROJECT ${_PAR_PROJECT} DIR ${PROJECT_SOURCE_DIR}/${_PAR_PROJECT} URL ${_PAR_GIT} ${_PAR_UNPARSED_ARGUMENTS} )
+    elseif( _PAR_SOURCE )
+      if( DEFINED ${PNAME}_SOURCE )
+        ecbuild_critical( "ecbuild_bundle called with SOURCE for project ${_PAR_PROJECT} but ${PNAME}_SOURCE is defined" )
       endif()
+      execute_process( COMMAND ${CMAKE_COMMAND} -E create_symlink ${_PAR_SOURCE} ${PROJECT_SOURCE_DIR}/${_PAR_PROJECT} )
+    endif()
+
+    if( NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_PROJECT} OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_PROJECT}/CMakeLists.txt )
+      ecbuild_critical("Source directory '${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_PROJECT}' for subproject '${_PAR_PROJECT}' does not exist or does not contain a CMakeLists.txt file.")
+    endif()
 
-      ecbuild_use_package( PROJECT ${_PAR_PROJECT} )
+    ecbuild_use_package( PROJECT ${_PAR_PROJECT} )
   endif()
 
 endmacro()
diff --git a/cmake/ecbuild_cache.cmake b/cmake/ecbuild_cache.cmake
index 9663bca..e257b36 100644
--- a/cmake/ecbuild_cache.cmake
+++ b/cmake/ecbuild_cache.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/ecbuild_check_c_source.cmake b/cmake/ecbuild_check_c_source.cmake
deleted file mode 100644
index 4460455..0000000
--- a/cmake/ecbuild_check_c_source.cmake
+++ /dev/null
@@ -1,226 +0,0 @@
-# (C) Copyright 1996-2014 ECMWF.
-# 
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
-# granted to it by virtue of its status as an intergovernmental organisation nor
-# does it submit to any jurisdiction.
-
-##############################################################################
-#.rst:
-#
-# ecbuild_check_c_source_return
-# =============================
-#
-# Compile and run a given C source code and return its output. ::
-#
-#   ecbuild_check_c_source_return( <source>
-#                                  VAR <name>
-#                                  OUTPUT <name>
-#                                  [ INCLUDES <path1> [ <path2> ... ] ]
-#                                  [ LIBS <library1> [ <library2> ... ] ]
-#                                  [ DEFINITIONS <definition1> [ <definition2> ... ] ] )
-#
-# Options
-# -------
-#
-# VAR : required
-#   name of the check and name of the CMake variable to write result to
-#
-# OUTPUT : required
-#   name of CMake variable to write the output to
-#
-# INCLUDES : optional
-#   list of paths to add to include directories
-#
-# LIBS : optional
-#   list of libraries to link against (CMake targets or external libraries)
-#
-# DEFINITIONS : optional
-#   list of definitions to add to preprocessor defines
-#
-# Usage
-# -----
-#
-# This will write the given source to a .c file and compile and run it with
-# try_run. If successful, ``${VAR}`` is set to 1 and ``${OUTPUT}`` is set to
-# the output of the successful run in the CMake cache.
-#
-# The check will not run if ``${VAR}`` is defined (e.g. from ecBuild cache).
-#
-##############################################################################
-
-macro( ecbuild_check_c_source_return SOURCE )
-
-    set( options )
-    set( single_value_args VAR  OUTPUT )
-    set( multi_value_args  INCLUDES LIBS DEFINITIONS )
-
-    cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
-
-    if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_check_c_source_return(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
-    endif()
-
-    if( NOT _PAR_VAR OR NOT _PAR_OUTPUT )
-      message(FATAL_ERROR "The call to ecbuild_check_c_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
-    endif()
-
-
-    if( NOT DEFINED ${_PAR_VAR} )
-
-        set(MACRO_CHECK_FUNCTION_DEFINITIONS "-D${_PAR_VAR} ${CMAKE_REQUIRED_FLAGS}")
-
-        set(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES)
-        if( CMAKE_REQUIRED_LIBRARIES )
-            list( APPEND __add_libs ${CMAKE_REQUIRED_LIBRARIES} )
-        endif()
-        if( _PAR_LIBS )
-            list( APPEND __add_libs ${_PAR_LIBS} )
-        endif()
-        if( __add_libs )
-            set(CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${__add_libs}")
-        endif()
-
-        set(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
-        if( CMAKE_REQUIRED_INCLUDES )
-            list( APPEND __add_incs ${CMAKE_REQUIRED_INCLUDES} )
-        endif()
-        if( _PAR_INCLUDES )
-            list( APPEND __add_incs ${_PAR_INCLUDES} )
-        endif()
-        if( __add_incs )
-            set(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES "-DINCLUDE_DIRECTORIES:STRING=${__add_incs}")
-        endif()
-    
-        # write the source file
-    
-        file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_PAR_VAR}.c" "${SOURCE}\n" )
-
-        message( STATUS "Performing Test ${_PAR_VAR}" )
-        try_run( ${_PAR_VAR}_EXITCODE ${_PAR_VAR}_COMPILED
-          ${CMAKE_BINARY_DIR}
-          ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_PAR_VAR}.c
-          COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-          CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-          -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
-          "${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
-          "${CHECK_C_SOURCE_COMPILES_ADD_INCLUDES}"
-          COMPILE_OUTPUT_VARIABLE compile_OUTPUT 
-          RUN_OUTPUT_VARIABLE     run_OUTPUT )
-    
-        # if it did not compile make the return value fail code of 1
-        if( NOT ${_PAR_VAR}_COMPILED )
-          set( ${_PAR_VAR}_EXITCODE 1 )
-        endif()
-    
-        # if the return value was 0 then it worked
-        if("${${_PAR_VAR}_EXITCODE}" EQUAL 0)
-    
-          message(STATUS "Performing Test ${_PAR_VAR} - Success")
-          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log 
-            "Performing C SOURCE FILE Test ${_PAR_VAR} succeded with the following compile output:\n"
-            "${compile_OUTPUT}\n" 
-            "Performing C SOURCE FILE Run ${_PAR_VAR} succeded with the following run output:\n"
-            "${run_OUTPUT}\n" 
-            "Return value: ${${_PAR_VAR}}\n"
-            "Source file was:\n${SOURCE}\n")
-
-          set( ${_PAR_VAR}     1              CACHE INTERNAL "Test ${_PAR_VAR}")
-          set( ${_PAR_OUTPUT} "${run_OUTPUT}" CACHE INTERNAL "Test ${_PAR_VAR} output")
-    
-        else()
-    
-          if(CMAKE_CROSSCOMPILING AND "${${_PAR_VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
-            set(${_PAR_VAR} "${${_PAR_VAR}_EXITCODE}")
-            set(${OUTPUT} "")
-          else()
-            set(${_PAR_VAR} "" CACHE INTERNAL "Test ${_PAR_VAR}")
-            set(${_PAR_OUTPUT} "" CACHE INTERNAL "Test ${_PAR_VAR} output")
-          endif()
-    
-          message(STATUS "Performing Test ${_PAR_VAR} - Failed")
-          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 
-            "Performing C SOURCE FILE Test ${_PAR_VAR} failed with the following compile output:\n"
-            "${compile_OUTPUT}\n" 
-            "Performing C SOURCE FILE Run ${_PAR_VAR} failed with the following run output:\n"
-            "${run_OUTPUT}\n" 
-            "Return value: ${${_PAR_VAR}_EXITCODE}\n"
-            "Source file was:\n${SOURCE}\n")
-        endif()
-    
-    endif()
-
-endmacro()
-
-##############################################################################
-#.rst:
-#
-# ecbuild_add_c_flags
-# ===================
-#
-# Add C compiler flags to CMAKE_C_FLAGS only if supported by the compiler. ::
-#
-#   ecbuild_add_c_flags( <flag1> [ <flag2> ... ]
-#                        [ BUILD <build> ]
-#                        [ NAME <name> ] )
-#
-# Options
-# -------
-#
-# BUILD : optional
-#   add flags to ``CMAKE_C_FLAGS_<build>`` instead of ``CMAKE_C_FLAGS``
-#
-# NAME : optional
-#   name of the check (if omitted, checks are enumerated)
-#
-##############################################################################
-
-macro( ecbuild_add_c_flags m_c_flags )
-
-  set( _flags ${m_c_flags} )
-
-  if( _flags AND CMAKE_C_COMPILER_LOADED )
-    set( options )
-    set( single_value_args BUILD NAME )
-    set( multi_value_args )
-
-    cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
-
-    if( NOT DEFINED N_CFLAG )
-      set( N_CFLAG 0 )
-    endif()
-
-    math( EXPR N_CFLAG '${N_CFLAG}+1' )
-
-    if( NOT ECBUILD_TRUST_FLAGS )
-      if( DEFINED _PAR_NAME )
-        check_c_compiler_flag( ${_flags} ${_PAR_NAME} )
-        set( _flag_ok ${${_PAR_NAME}} )
-      else()
-        check_c_compiler_flag( ${_flags} C_FLAG_TEST_${N_CFLAG} )
-        set( _flag_ok ${C_FLAG_TEST_${N_CFLAG}} )
-      endif()
-    else()
-      set( _flag_ok 1 )
-    endif()
-    
-    if( _flag_ok )
-      if( _PAR_BUILD )
-        set( CMAKE_C_FLAGS_${_PAR_BUILD} "${CMAKE_C_FLAGS_${_PAR_BUILD}} ${_flags}" )
-      else()
-        set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_flags}" )
-        # message( STATUS "C FLAG [${_flags}] added" )
-      endif()
-    else()
-      message( WARNING "Unrecognised C flag [${_flags}] -- skipping" )
-    endif()
-  endif()
-  unset( _flags )
-  unset( _flag_ok )
-endmacro()
-
-macro( cmake_add_c_flags m_c_flags )
-  message( DEPRECATION " cmake_add_c_flags is deprecated, use ecbuild_add_c_flags instead." )
-  ecbuild_add_c_flags( ${m_c_flags} )
-endmacro()
diff --git a/cmake/ecbuild_check_c_source_return.cmake b/cmake/ecbuild_check_c_source_return.cmake
index 1dadca6..18b6117 100644
--- a/cmake/ecbuild_check_c_source_return.cmake
+++ b/cmake/ecbuild_check_c_source_return.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -59,11 +59,11 @@ macro( ecbuild_check_c_source_return SOURCE )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_check_c_source_return(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_check_c_source_return(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT _PAR_VAR OR NOT _PAR_OUTPUT )
-      message(FATAL_ERROR "The call to ecbuild_check_c_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
+      ecbuild_critical("The call to ecbuild_check_c_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
     endif()
 
 
@@ -97,7 +97,7 @@ macro( ecbuild_check_c_source_return SOURCE )
     
         file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_PAR_VAR}.c" "${SOURCE}\n" )
 
-        message( STATUS "Performing Test ${_PAR_VAR}" )
+        ecbuild_debug( "Performing Test ${_PAR_VAR}" )
         try_run( ${_PAR_VAR}_EXITCODE ${_PAR_VAR}_COMPILED
           ${CMAKE_BINARY_DIR}
           ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_PAR_VAR}.c
@@ -117,7 +117,7 @@ macro( ecbuild_check_c_source_return SOURCE )
         # if the return value was 0 then it worked
         if("${${_PAR_VAR}_EXITCODE}" EQUAL 0)
     
-          message(STATUS "Performing Test ${_PAR_VAR} - Success")
+          ecbuild_debug("Performing Test ${_PAR_VAR} - Success")
           file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log 
             "Performing C SOURCE FILE Test ${_PAR_VAR} succeded with the following compile output:\n"
             "${compile_OUTPUT}\n" 
@@ -139,7 +139,7 @@ macro( ecbuild_check_c_source_return SOURCE )
             set(${_PAR_OUTPUT} "" CACHE INTERNAL "Test ${_PAR_VAR} output")
           endif()
     
-          message(STATUS "Performing Test ${_PAR_VAR} - Failed")
+          ecbuild_debug("Performing Test ${_PAR_VAR} - Failed")
           file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 
             "Performing C SOURCE FILE Test ${_PAR_VAR} failed with the following compile output:\n"
             "${compile_OUTPUT}\n" 
diff --git a/cmake/ecbuild_check_compiler.cmake b/cmake/ecbuild_check_compiler.cmake
index 32ff6cc..437b81e 100644
--- a/cmake/ecbuild_check_compiler.cmake
+++ b/cmake/ecbuild_check_compiler.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -10,7 +10,8 @@
 # enable C to use in system introspection
 
 if( NOT CMAKE_C_COMPILER_LOADED AND ENABLE_OS_TESTS )
-	enable_language( C )
+  enable_language( C )
+  ecbuild_compiler_flags( C )
 endif()
 
 ############################################################################################
@@ -122,6 +123,10 @@ if( CMAKE_COMPILER_IS_GNUCXX )
 
 endif()
 
+if( ENABLE_WARNINGS AND CMAKE_Fortran_COMPILER_ID MATCHES "Intel" )
+  ecbuild_add_fortran_flags("-warn all")
+endif()
+
 ############################################################################################
 # compiler dependent fixes
 
diff --git a/cmake/ecbuild_check_cxx11.cmake b/cmake/ecbuild_check_cxx11.cmake
index 6453786..390462b 100644
--- a/cmake/ecbuild_check_cxx11.cmake
+++ b/cmake/ecbuild_check_cxx11.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -45,7 +45,7 @@ function( ecbuild_check_cxx11 )
 	cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
 	if(_PAR_UNPARSED_ARGUMENTS)
-		message(FATAL_ERROR "Unknown keywords given to ecbuild_check_cxx11(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+		ecbuild_critical("Unknown keywords given to ecbuild_check_cxx11(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
 	endif()
 
 	include( ${ECBUILD_MACROS_DIR}/contrib/GreatCMakeCookOff/CheckCXX11Features.cmake )
@@ -86,7 +86,6 @@ function( ecbuild_check_cxx11 )
 	endif()
 
 	foreach( f ${CXX11_CHECKED_FEATURES} )
-		# message( "HAS_CXX11_${FEAT}" )
 		string( TOUPPER ${f} FEAT )
 		if( HAS_CXX11_${FEAT} )
 		   list( APPEND CXX11_SUPPORTED_FEATURES ${f} )
@@ -112,21 +111,21 @@ function( ecbuild_check_cxx11 )
 	if( _p_PRINT )
 		if( CXX11_CHECKED_FEATURES )
 			join( CXX11_CHECKED_FEATURES " " CXX11_CHECKED_FEATURES_STR )
-			message( STATUS "Checked C++11 features: ${CXX11_CHECKED_FEATURES_STR}" )
+			ecbuild_info( "Checked C++11 features: ${CXX11_CHECKED_FEATURES_STR}" )
 		else()
-			message( STATUS "Checked no C++11 features" )
+			ecbuild_info( "Checked no C++11 features" )
 		endif()
 		if( CXX11_SUPPORTED_FEATURES )
 			join( CXX11_SUPPORTED_FEATURES " " CXX11_SUPPORTED_FEATURES_STR )
-			message( STATUS "Found C++11 features: ${CXX11_SUPPORTED_FEATURES_STR}" )
+			ecbuild_info( "Found C++11 features: ${CXX11_SUPPORTED_FEATURES_STR}" )
 		else()
-			message( STATUS "Found no C++11 features" )
+			ecbuild_info( "Found no C++11 features" )
 		endif()
 		if( CXX11_NOT_SUPPORTED_FEATURES )
 			join( CXX11_NOT_SUPPORTED_FEATURES " " CXX11_NOT_SUPPORTED_FEATURES_STR )
-			message( STATUS "Not found C++11 features: ${CXX11_NOT_SUPPORTED_FEATURES_STR}" )
+			ecbuild_info( "Not found C++11 features: ${CXX11_NOT_SUPPORTED_FEATURES_STR}" )
 		else()
-			message( STATUS "Found all checked C++11 features" )
+			ecbuild_info( "Found all checked C++11 features" )
 		endif()
 	endif()
 
diff --git a/cmake/ecbuild_check_cxx_source.cmake b/cmake/ecbuild_check_cxx_source.cmake
deleted file mode 100644
index ee3588b..0000000
--- a/cmake/ecbuild_check_cxx_source.cmake
+++ /dev/null
@@ -1,221 +0,0 @@
-# (C) Copyright 1996-2014 ECMWF.
-# 
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
-# granted to it by virtue of its status as an intergovernmental organisation nor
-# does it submit to any jurisdiction.
-
-##############################################################################
-#.rst:
-#
-# ecbuild_check_cxx_source_return
-# ===============================
-#
-# Compile and run a given C++ code and return its output. ::
-#
-#   ecbuild_check_cxx_source_return( <source>
-#                                    VAR <name>
-#                                    OUTPUT <name>
-#                                    [ INCLUDES <path1> [ <path2> ... ] ]
-#                                    [ LIBS <library1> [ <library2> ... ] ]
-#                                    [ DEFINITIONS <definition1> [ <definition2> ... ] ] )
-#
-# Options
-# -------
-#
-# VAR : required
-#   name of the check and name of the CMake variable to write result to
-#
-# OUTPUT : required
-#   name of CMake variable to write the output to
-#
-# INCLUDES : optional
-#   list of paths to add to include directories
-#
-# LIBS : optional
-#   list of libraries to link against (CMake targets or external libraries)
-#
-# DEFINITIONS : optional
-#   list of definitions to add to preprocessor defines
-#
-# Usage
-# -----
-#
-# This will write the given source to a .cxx file and compile and run it with
-# try_run. If successful, ``${VAR}`` is set to 1 and ``${OUTPUT}`` is set to
-# the output of the successful run in the CMake cache.
-#
-# The check will not run if ``${VAR}`` is defined (e.g. from ecBuild cache).
-#
-##############################################################################
-
-macro( ecbuild_check_cxx_source_return SOURCE )
-
-    set( options )
-    set( single_value_args VAR  OUTPUT )
-    set( multi_value_args  INCLUDES LIBS DEFINITIONS )
-
-    cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
-
-    if(_p_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_check_cxx_source_return(): \"${_p_UNPARSED_ARGUMENTS}\"")
-    endif()
-
-    if( NOT _p_VAR OR NOT _p_OUTPUT )
-      message(FATAL_ERROR "The call to ecbuild_check_cxx_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
-    endif()
-
-    set( _msg "Testing ${_p_VAR}:" )
-
-    if( NOT DEFINED ${_p_VAR} )
-
-        set(MACRO_CHECK_FUNCTION_DEFINITIONS "-D${_p_VAR} ${CMAKE_REQUIRED_FLAGS}")
-
-        set(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES)
-        if(CMAKE_REQUIRED_LIBRARIES)
-            list( APPEND __add_libs ${CMAKE_REQUIRED_LIBRARIES} )
-        endif()
-        if( _p_LIBS )
-            list( APPEND __add_libs ${_p_LIBS} )
-        endif()
-        if( __add_libs )
-            set(CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${__add_libs}")
-        endif()
-
-        set(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES)
-        if(CMAKE_REQUIRED_INCLUDES)
-            list( APPEND __add_incs ${CMAKE_REQUIRED_INCLUDES} )
-        endif()
-        if( _p_INCLUDES )
-            list( APPEND __add_incs ${_p_INCLUDES} )
-        endif()
-        if( __add_incs )
-            set(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES "-DINCLUDE_DIRECTORIES:STRING=${__add_incs}")
-        endif()
-    
-        # write the source file
-    
-        file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_p_VAR}.cxx" "${SOURCE}\n" )
-
-        message( STATUS "${_msg}" )
-        try_run( ${_p_VAR}_EXITCODE ${_p_VAR}_COMPILED
-          ${CMAKE_BINARY_DIR}
-          ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_p_VAR}.cxx
-          COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-          CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-          -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
-          "${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}"
-          "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}"
-          COMPILE_OUTPUT_VARIABLE compile_OUTPUT 
-          RUN_OUTPUT_VARIABLE     run_OUTPUT )
-   
-        # debug_var( ${_p_VAR}_COMPILED )
-        # debug_var( ${_p_VAR}_EXITCODE )
-
-        # if it did not compile make the return value fail code of 1
-
-        if( NOT ${_p_VAR}_COMPILED )
-          message( STATUS "${_msg} failed to compile" )
-        endif()
-
-        if( "${${_p_VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN" )
-          message( STATUS "${_msg} failed to run" )
-        endif()
-
-        # if the return value was 0 then it worked
-        if( ${_p_VAR}_COMPILED AND "${${_p_VAR}_EXITCODE}" EQUAL 0 )
-    
-          message(STATUS "${_msg} Success")
-          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log 
-            "Performing C++ SOURCE FILE Test ${_p_VAR} succeded with the following compile output:\n"
-            "${compile_OUTPUT}\n" 
-            "Performing C++ SOURCE FILE Run ${_p_VAR} succeded with the following run output:\n"
-            "${run_OUTPUT}\n" 
-            "Return value: ${${_p_VAR}}\n"
-            "Source file was:\n${SOURCE}\n")
-
-          set( ${_p_VAR}     1              CACHE INTERNAL "Test ${_p_VAR}")
-          set( ${_p_OUTPUT} "${run_OUTPUT}" CACHE INTERNAL "Test ${_p_VAR} output")
-    
-        else()
-    
-          if(CMAKE_CROSSCOMPILING AND "${${_p_VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
-            set(${_p_VAR} "${${_p_VAR}_EXITCODE}")
-            set(${OUTPUT} "")
-          else()
-            set(${_p_VAR} "" CACHE INTERNAL "Test ${_p_VAR}")
-            set(${_p_OUTPUT} "" CACHE INTERNAL "Test ${_p_VAR} output")
-          endif()
-    
-          message(STATUS "Test ${_p_VAR} - Failed")
-          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 
-            "Performing C++ SOURCE FILE Test ${_p_VAR} failed with the following compile output:\n"
-            "${compile_OUTPUT}\n" 
-            "Performing C++ SOURCE FILE Run ${_p_VAR} failed with the following run output:\n"
-            "${run_OUTPUT}\n" 
-            "Return value: ${${_p_VAR}_EXITCODE}\n"
-            "Source file was:\n${SOURCE}\n")
-        endif()
-    
-    endif()
-
-endmacro()
-
-##############################################################################
-#.rst:
-#
-# ecbuild_add_cxx_flags
-# =====================
-#
-# Add C++ compiler flags to CMAKE_CXX_FLAGS only if supported by compiler. ::
-#
-#   ecbuild_add_cxx_flags( <flag1> [ <flag2> ... ] [ BUILD <build> ] )
-#
-# Options
-# -------
-#
-# BUILD : optional
-#   add flags to ``CMAKE_CXX_FLAGS_<build>`` instead of ``CMAKE_CXX_FLAGS``
-#
-##############################################################################
-
-macro( ecbuild_add_cxx_flags m_cxx_flags )
-
-  set( _flags ${m_cxx_flags} )
-  if( _flags AND CMAKE_CXX_COMPILER_LOADED )
-    set( options )
-    set( single_value_args BUILD )
-    set( multi_value_args )
-
-    cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
-
-    if( NOT DEFINED N_CXXFLAG )
-      set( N_CXXFLAG 0 )
-    endif()
-
-    math( EXPR N_CXXFLAG '${N_CXXFLAG}+1' )
-
-    if( NOT ECBUILD_TRUST_FLAGS )
-      check_cxx_compiler_flag( ${_flags} CXX_FLAG_TEST_${N_CXXFLAG} )
-    endif()
-
-    if( CXX_FLAG_TEST_${N_CXXFLAG} OR ECBUILD_TRUST_FLAGS )
-      if( _PAR_BUILD )
-        set( CMAKE_CXX_FLAGS_${_PAR_BUILD} "${CMAKE_CXX_FLAGS_${_PAR_BUILD}} ${_flags}" )
-      else()
-        set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_flags}" )
-        # message( STATUS "C++ FLAG [${_flags}] added" )
-      endif()
-    else()
-      message( STATUS "Unrecognised CXX flag [${_flags}] -- skipping" )
-    endif()
-  endif()
-  unset( _flags )
-
-endmacro()
-
-macro( cmake_add_cxx_flags m_cxx_flags )
-  message( DEPRECATION " cmake_add_cxx_flags is deprecated, use ecbuild_add_cxx_flags instead." )
-  ecbuild_add_cxx_flags( ${m_cxx_flags} )
-endmacro()
diff --git a/cmake/ecbuild_check_cxx_source_return.cmake b/cmake/ecbuild_check_cxx_source_return.cmake
index e364918..0868b22 100644
--- a/cmake/ecbuild_check_cxx_source_return.cmake
+++ b/cmake/ecbuild_check_cxx_source_return.cmake
@@ -1,8 +1,8 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
+# (C) Copyright 1996-2016 ECMWF.
+#
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -59,11 +59,11 @@ macro( ecbuild_check_cxx_source_return SOURCE )
     cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_p_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_check_cxx_source_return(): \"${_p_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_check_cxx_source_return(): \"${_p_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT _p_VAR OR NOT _p_OUTPUT )
-      message(FATAL_ERROR "The call to ecbuild_check_cxx_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
+      ecbuild_critical("The call to ecbuild_check_cxx_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
     endif()
 
     set( _msg "Testing ${_p_VAR}:" )
@@ -93,12 +93,12 @@ macro( ecbuild_check_cxx_source_return SOURCE )
         if( __add_incs )
             set(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES "-DINCLUDE_DIRECTORIES:STRING=${__add_incs}")
         endif()
-    
+
         # write the source file
-    
+
         file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_p_VAR}.cxx" "${SOURCE}\n" )
 
-        message( STATUS "${_msg}" )
+        ecbuild_debug( "${_msg}" )
         try_run( ${_p_VAR}_EXITCODE ${_p_VAR}_COMPILED
           ${CMAKE_BINARY_DIR}
           ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_p_VAR}.cxx
@@ -107,39 +107,39 @@ macro( ecbuild_check_cxx_source_return SOURCE )
           -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
           "${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}"
           "${CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES}"
-          COMPILE_OUTPUT_VARIABLE compile_OUTPUT 
+          COMPILE_OUTPUT_VARIABLE compile_OUTPUT
           RUN_OUTPUT_VARIABLE     run_OUTPUT )
-   
-        # debug_var( ${_p_VAR}_COMPILED )
-        # debug_var( ${_p_VAR}_EXITCODE )
+
+        # ecbuild_debug_var( ${_p_VAR}_COMPILED )
+        # ecbuild_debug_var( ${_p_VAR}_EXITCODE )
 
         # if it did not compile make the return value fail code of 1
 
         if( NOT ${_p_VAR}_COMPILED )
-          message( STATUS "${_msg} failed to compile" )
+          ecbuild_debug( "${_msg} failed to compile" )
         endif()
 
         if( "${${_p_VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN" )
-          message( STATUS "${_msg} failed to run" )
+          ecbuild_debug( "${_msg} failed to run" )
         endif()
 
         # if the return value was 0 then it worked
         if( ${_p_VAR}_COMPILED AND "${${_p_VAR}_EXITCODE}" EQUAL 0 )
-    
-          message(STATUS "${_msg} Success")
-          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log 
+
+          ecbuild_debug("${_msg} Success")
+          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
             "Performing C++ SOURCE FILE Test ${_p_VAR} succeded with the following compile output:\n"
-            "${compile_OUTPUT}\n" 
+            "${compile_OUTPUT}\n"
             "Performing C++ SOURCE FILE Run ${_p_VAR} succeded with the following run output:\n"
-            "${run_OUTPUT}\n" 
+            "${run_OUTPUT}\n"
             "Return value: ${${_p_VAR}}\n"
             "Source file was:\n${SOURCE}\n")
 
           set( ${_p_VAR}     1              CACHE INTERNAL "Test ${_p_VAR}")
           set( ${_p_OUTPUT} "${run_OUTPUT}" CACHE INTERNAL "Test ${_p_VAR} output")
-    
+
         else()
-    
+
           if(CMAKE_CROSSCOMPILING AND "${${_p_VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
             set(${_p_VAR} "${${_p_VAR}_EXITCODE}")
             set(${OUTPUT} "")
@@ -147,17 +147,17 @@ macro( ecbuild_check_cxx_source_return SOURCE )
             set(${_p_VAR} "" CACHE INTERNAL "Test ${_p_VAR}")
             set(${_p_OUTPUT} "" CACHE INTERNAL "Test ${_p_VAR} output")
           endif()
-    
-          message(STATUS "Test ${_p_VAR} - Failed")
-          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 
+
+          ecbuild_debug("Test ${_p_VAR} - Failed")
+          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
             "Performing C++ SOURCE FILE Test ${_p_VAR} failed with the following compile output:\n"
-            "${compile_OUTPUT}\n" 
+            "${compile_OUTPUT}\n"
             "Performing C++ SOURCE FILE Run ${_p_VAR} failed with the following run output:\n"
-            "${run_OUTPUT}\n" 
+            "${run_OUTPUT}\n"
             "Return value: ${${_p_VAR}_EXITCODE}\n"
             "Source file was:\n${SOURCE}\n")
         endif()
-    
+
     endif()
 
 endmacro()
diff --git a/cmake/ecbuild_check_fortran_source.cmake b/cmake/ecbuild_check_fortran_source.cmake
deleted file mode 100644
index 9f95502..0000000
--- a/cmake/ecbuild_check_fortran_source.cmake
+++ /dev/null
@@ -1,219 +0,0 @@
-# (C) Copyright 1996-2014 ECMWF.
-# 
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
-# granted to it by virtue of its status as an intergovernmental organisation nor
-# does it submit to any jurisdiction.
-
-##############################################################################
-#.rst:
-#
-# ecbuild_check_fortran_source_return
-# ===================================
-#
-# Compile and run a given Fortran code and return its output. ::
-#
-#   ecbuild_check_fortran_source_return( <source>
-#                                        VAR <name>
-#                                        OUTPUT <name>
-#                                        [ INCLUDES <path1> [ <path2> ... ] ]
-#                                        [ LIBS <library1> [ <library2> ... ] ]
-#                                        [ DEFINITIONS <def1> [ <def2> ... ] ] )
-#
-# Options
-# -------
-#
-# VAR : required
-#   name of the check and name of the CMake variable to write result to
-#
-# OUTPUT : required
-#   name of CMake variable to write the output to
-#
-# INCLUDES : optional
-#   list of paths to add to include directories
-#
-# LIBS : optional
-#   list of libraries to link against (CMake targets or external libraries)
-#
-# DEFINITIONS : optional
-#   list of definitions to add to preprocessor defines
-#
-# Usage
-# -----
-#
-# This will write the given source to a .f file and compile and run it with
-# try_run. If successful, ``${VAR}`` is set to 1 and ``${OUTPUT}`` is set to
-# the output of the successful run in the CMake cache.
-#
-# The check will not run if ``${VAR}`` is defined (e.g. from ecBuild cache).
-#
-##############################################################################
-
-macro( ecbuild_check_fortran_source_return SOURCE )
-
-    message( WARNING "This macro ecbuild_check_fortran_source has never been tested" )
-    set( options )
-    set( single_value_args VAR  OUTPUT )
-    set( multi_value_args  INCLUDES LIBS DEFINITIONS )
-
-    cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
-
-    if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_check_fortran_source_return(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
-    endif()
-
-    if( NOT _PAR_VAR OR NOT _PAR_OUTPUT )
-      message(FATAL_ERROR "The call to ecbuild_check_fortran_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
-    endif()
-
-
-    if( NOT DEFINED ${_PAR_VAR} )
-
-        set(MACRO_CHECK_FUNCTION_DEFINITIONS "-D${_PAR_VAR} ${CMAKE_REQUIRED_FLAGS}")
-
-        set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES)
-        if( CMAKE_REQUIRED_LIBRARIES )
-            list( APPEND __add_libs ${CMAKE_REQUIRED_LIBRARIES} )
-        endif()
-        if( _PAR_LIBS )
-            list( APPEND __add_libs ${_PAR_LIBS} )
-        endif()
-        if( __add_libs )
-            set(CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES "-DLINK_LIBRARIES:STRING=${__add_libs}")
-        endif()
-
-        set(CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES)
-        if( CMAKE_REQUIRED_INCLUDES )
-            list( APPEND __add_incs ${CMAKE_REQUIRED_INCLUDES} )
-        endif()
-        if( _PAR_INCLUDES )
-            list( APPEND __add_incs ${_PAR_INCLUDES} )
-        endif()
-        if( __add_libs )
-            set(CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES "-DINCLUDE_DIRECTORIES:STRING=${__add_incs}")
-        endif()
-    
-        # write the source file
-    
-        file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_PAR_VAR}.f" "${SOURCE}\n" )
-
-        message( STATUS "Performing Test ${_PAR_VAR}" )
-        try_run( ${_PAR_VAR}_EXITCODE ${_PAR_VAR}_COMPILED
-          ${CMAKE_BINARY_DIR}
-          ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_PAR_VAR}.f
-          COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
-          CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-          -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
-          "${CHECK_Fortran_SOURCE_COMPILES_ADD_LIBRARIES}"
-          "${CHECK_Fortran_SOURCE_COMPILES_ADD_INCLUDES}"
-          COMPILE_OUTPUT_VARIABLE compile_OUTPUT 
-          RUN_OUTPUT_VARIABLE     run_OUTPUT )
-    
-        # if it did not compile make the return value fail code of 1
-        if( NOT ${_PAR_VAR}_COMPILED )
-          set( ${_PAR_VAR}_EXITCODE 1 )
-        endif()
-    
-        # if the return value was 0 then it worked
-        if("${${_PAR_VAR}_EXITCODE}" EQUAL 0)
-    
-          message(STATUS "Performing Test ${_PAR_VAR} - Success")
-          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log 
-            "Performing Fortran SOURCE FILE Test ${_PAR_VAR} succeded with the following compile output:\n"
-            "${compile_OUTPUT}\n" 
-            "Performing Fortran SOURCE FILE Run ${_PAR_VAR} succeded with the following run output:\n"
-            "${run_OUTPUT}\n" 
-            "Return value: ${${_PAR_VAR}}\n"
-            "Source file was:\n${SOURCE}\n")
-
-          set( ${_PAR_VAR}     1              CACHE INTERNAL "Test ${_PAR_VAR}")
-          set( ${_PAR_OUTPUT} "${run_OUTPUT}" CACHE INTERNAL "Test ${_PAR_VAR} output")
-    
-        else()
-    
-          if(CMAKE_CROSSCOMPILING AND "${${_PAR_VAR}_EXITCODE}" MATCHES  "FAILED_TO_RUN")
-            set(${_PAR_VAR} "${${_PAR_VAR}_EXITCODE}")
-            set(${OUTPUT} "")
-          else()
-            set(${_PAR_VAR} "" CACHE INTERNAL "Test ${_PAR_VAR}")
-            set(${_PAR_OUTPUT} "" CACHE INTERNAL "Test ${_PAR_VAR} output")
-          endif()
-    
-          message(STATUS "Performing Test ${_PAR_VAR} - Failed")
-          file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 
-            "Performing C SOURCE FILE Test ${_PAR_VAR} failed with the following compile output:\n"
-            "${compile_OUTPUT}\n" 
-            "Performing C SOURCE FILE Run ${_PAR_VAR} failed with the following run output:\n"
-            "${run_OUTPUT}\n" 
-            "Return value: ${${_PAR_VAR}_EXITCODE}\n"
-            "Source file was:\n${SOURCE}\n")
-        endif()
-    
-    endif()
-
-endmacro()
-
-##############################################################################
-#.rst:
-#
-# ecbuild_add_fortran_flags
-# =========================
-#
-# Add Fortran compiler flags to CMAKE_Fortran_FLAGS only if supported by the
-# compiler. ::
-#
-#   ecbuild_add_fortran_flags( <flag1> [ <flag2> ... ] [ BUILD <build> ] )
-#
-# Options
-# -------
-#
-# BUILD : optional
-#   add flags to ``CMAKE_Fortran_FLAGS_<build>`` instead of
-#   ``CMAKE_Fortran_FLAGS``
-#
-##############################################################################
-
-include( CheckFortranCompilerFlag )
-macro( ecbuild_add_fortran_flags m_fortran_flags )
-
-  set( _flags ${m_fortran_flags} )
-
-  if( _flags AND CMAKE_Fortran_COMPILER_LOADED )
-
-    set( options )
-    set( single_value_args BUILD )
-    set( multi_value_args )
-
-    cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
-
-    if( NOT DEFINED N_FortranFLAG )
-      set( N_FortranFLAG 0 )
-    endif()
-
-    math( EXPR N_FortranFLAG '${N_FortranFLAG}+1' )
-
-    if( NOT ECBUILD_TRUST_FLAGS )
-      check_fortran_compiler_flag( ${_flags} Fortran_FLAG_TEST_${N_FortranFLAG} )
-    endif()
-
-    if( Fortran_FLAG_TEST_${N_FortranFLAG} OR ECBUILD_TRUST_FLAGS )
-      if( _PAR_BUILD )
-        set( CMAKE_Fortran_FLAGS_${_PAR_BUILD} "${CMAKE_Fortran_FLAGS_${_PAR_BUILD}} ${_flags}" )
-      else()
-        set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${_flags}" )
-        # message( STATUS "Fortran FLAG [${_flags}] added" )
-      endif()
-    else()
-      message( STATUS "Unrecognised Fortran flag [${_flags}] -- skipping" )
-    endif()
-  endif()
-
-  unset( _flags )
-
-endmacro()
-
-macro( cmake_add_fortran_flags m_fortran_flags )
-  message( DEPRECATION " cmake_add_fortran_flags is deprecated, use ecbuild_add_fortran_flags instead." )
-  ecbuild_add_fortran_flags( ${m_fortran_flags} )
-endmacro()
diff --git a/cmake/ecbuild_check_fortran_source_return.cmake b/cmake/ecbuild_check_fortran_source_return.cmake
index 1c50896..6b007df 100644
--- a/cmake/ecbuild_check_fortran_source_return.cmake
+++ b/cmake/ecbuild_check_fortran_source_return.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -52,7 +52,7 @@
 
 macro( ecbuild_check_fortran_source_return SOURCE )
 
-    message( WARNING "This macro ecbuild_check_fortran_source has never been tested" )
+    ecbuild_warn( "This macro ecbuild_check_fortran_source has never been tested" )
     set( options )
     set( single_value_args VAR  OUTPUT )
     set( multi_value_args  INCLUDES LIBS DEFINITIONS )
@@ -60,11 +60,11 @@ macro( ecbuild_check_fortran_source_return SOURCE )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_check_fortran_source_return(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_check_fortran_source_return(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT _PAR_VAR OR NOT _PAR_OUTPUT )
-      message(FATAL_ERROR "The call to ecbuild_check_fortran_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
+      ecbuild_critical("The call to ecbuild_check_fortran_source_return() doesn't specify either SOURCE, VAR or OUTPUT")
     endif()
 
 
@@ -98,7 +98,7 @@ macro( ecbuild_check_fortran_source_return SOURCE )
     
         file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_PAR_VAR}.f" "${SOURCE}\n" )
 
-        message( STATUS "Performing Test ${_PAR_VAR}" )
+        ecbuild_debug( "Performing Test ${_PAR_VAR}" )
         try_run( ${_PAR_VAR}_EXITCODE ${_PAR_VAR}_COMPILED
           ${CMAKE_BINARY_DIR}
           ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test_${_PAR_VAR}.f
@@ -118,7 +118,7 @@ macro( ecbuild_check_fortran_source_return SOURCE )
         # if the return value was 0 then it worked
         if("${${_PAR_VAR}_EXITCODE}" EQUAL 0)
     
-          message(STATUS "Performing Test ${_PAR_VAR} - Success")
+          ecbuild_debug("Performing Test ${_PAR_VAR} - Success")
           file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log 
             "Performing Fortran SOURCE FILE Test ${_PAR_VAR} succeded with the following compile output:\n"
             "${compile_OUTPUT}\n" 
@@ -140,7 +140,7 @@ macro( ecbuild_check_fortran_source_return SOURCE )
             set(${_PAR_OUTPUT} "" CACHE INTERNAL "Test ${_PAR_VAR} output")
           endif()
     
-          message(STATUS "Performing Test ${_PAR_VAR} - Failed")
+          ecbuild_debug("Performing Test ${_PAR_VAR} - Failed")
           file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log 
             "Performing C SOURCE FILE Test ${_PAR_VAR} failed with the following compile output:\n"
             "${compile_OUTPUT}\n" 
diff --git a/cmake/ecbuild_check_functions.cmake b/cmake/ecbuild_check_functions.cmake
index a3ed7a1..88526b5 100644
--- a/cmake/ecbuild_check_functions.cmake
+++ b/cmake/ecbuild_check_functions.cmake
@@ -1,8 +1,8 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -20,6 +20,8 @@ if( ENABLE_OS_FUNCTIONS_TEST )
     ecbuild_cache_check_symbol_exists( ftruncate    "sys/types.h;unistd.h"            EC_HAVE_FTRUNCATE  )
     ecbuild_cache_check_symbol_exists( open         "sys/types.h;sys/stat.h;fcntl.h"  EC_HAVE_OPEN   )
     ecbuild_cache_check_symbol_exists( fopen        "stdio.h"                         EC_HAVE_FOPEN  )
+    ecbuild_cache_check_symbol_exists( fmemopen     "stdio.h"                         EC_HAVE_FMEMOPEN )
+    ecbuild_cache_check_symbol_exists( funopen      "stdio.h"                         EC_HAVE_FUNOPEN )
     ecbuild_cache_check_symbol_exists( flock        "sys/file.h"                      EC_HAVE_FLOCK  )
     ecbuild_cache_check_symbol_exists( mmap         "sys/mman.h"                      EC_HAVE_MMAP   )
 
@@ -73,10 +75,10 @@ if( ENABLE_OS_FUNCTIONS_TEST )
     ecbuild_cache_check_c_source_compiles( "#define _LARGEFILE64_SOURCE\n#include <sys/stat.h>\nint main(){ struct stat64 s; fstat64(1,&s); return 0; }" EC_HAVE_FSTAT64 )
     # test fseeko64
     ecbuild_cache_check_c_source_compiles( "#define _LARGEFILE64_SOURCE\n#include <stdio.h>\n#include <sys/types.h>\nint main(){FILE* file;off64_t l=0;fseeko64(file,l,SEEK_CUR);return 0;}\n" EC_HAVE_FSEEKO64 )
-   
+
     # test for ftello64
     ecbuild_cache_check_c_source_compiles( "#define _LARGEFILE64_SOURCE\n#include <stdio.h>\n#include <sys/types.h>\nint main(){FILE* file;off64_t l = ftello64(file);return 0;}\n"  EC_HAVE_FTELLO64 )
-    
+
     # test for lseek64
     ecbuild_cache_check_c_source_compiles( "#define _LARGEFILE64_SOURCE\n#include <sys/types.h>\n#include <unistd.h>\nint main(){off64_t h = lseek64(0,0,SEEK_SET);return 0;}\n"  EC_HAVE_LSEEK64 )
     # test for open64
@@ -114,7 +116,7 @@ if( ENABLE_OS_FUNCTIONS_TEST )
     # test for getpwuid_r
     ecbuild_cache_check_c_source_compiles( "#include <unistd.h>\n#include <sys/types.h>\n#include <pwd.h>\nint main(){ char buf[4096]; struct passwd pwbuf; struct passwd *pwbufp = 0; getpwuid_r(getuid(), &pwbuf, buf, sizeof(buf), &pwbufp); }\n" EC_HAVE_GETPWUID_R )
     # test for getpwnam_r
-    ecbuild_cache_check_c_source_compiles( "#include <sys/types.h>\n#include <pwd.h>\nint main(){ struct passwd p; char line[1024]; int n = getpwnam_r(\"user\",&p,line,sizeof(line),0); }\n" EC_HAVE_GETPWNAM_R )    
+    ecbuild_cache_check_c_source_compiles( "#include <sys/types.h>\n#include <pwd.h>\nint main(){ struct passwd p; char line[1024]; int n = getpwnam_r(\"user\",&p,line,sizeof(line),0); }\n" EC_HAVE_GETPWNAM_R )
     # test for readdir_r
     ecbuild_cache_check_c_source_compiles( "#include <dirent.h>\nint main(){ DIR *dirp; struct dirent *entry; struct dirent **result; int i = readdir_r(dirp, entry, result); }\n" EC_HAVE_READDIR_R )
     # test for gethostbyname_r
@@ -164,8 +166,8 @@ if( ENABLE_OS_FUNCTIONS_TEST )
     endif()
     ecbuild_cache_var( EC_HAVE_PROCFS )
 
-#    debug_var(EC_HAVE_PROCFS)
-#    debug_var(EC_HAVE_PROCFS_OUTPUT)
+#    ecbuild_debug_var(EC_HAVE_PROCFS)
+#    ecbuild_debug_var(EC_HAVE_PROCFS_OUTPUT)
 
 endif()
 
diff --git a/cmake/ecbuild_check_os.cmake b/cmake/ecbuild_check_os.cmake
index 942fb6b..8d325dc 100644
--- a/cmake/ecbuild_check_os.cmake
+++ b/cmake/ecbuild_check_os.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -9,23 +9,34 @@
 ############################################################################################
 # check size of pointer
 
+# Re-check size of void pointer since for some compiler combinations this is not properly set
 ecbuild_cache_check_type_size( "void*" CMAKE_SIZEOF_VOID_P  )
 
+if( NOT CMAKE_C_COMPILER_LOADED AND ENABLE_OS_TESTS )
+
+  enable_language( C )
+  ecbuild_compiler_flags( C )
+
+endif()
+
 math( EXPR EC_OS_BITS "${CMAKE_SIZEOF_VOID_P} * 8" )
 
 # we only support 32 and 64 bit operating systems
 if( NOT EC_OS_BITS EQUAL "32" AND NOT EC_OS_BITS EQUAL "64" )
-	message( FATAL_ERROR "operating system ${CMAKE_SYSTEM} ${EC_OS_BITS} bits -- ecbuild only supports 32 or 64 bit OS's" )
+  ecbuild_critical( "operating system ${CMAKE_SYSTEM} ${EC_OS_BITS} bits -- ecbuild only supports 32 or 64 bit OS's" )
 endif()
-ecbuild_cache_var( EC_OS_BITS )
 
 ############################################################################################
 # For 64 bit architectures enable PIC (position-independent code)
 
-if( ${EC_OS_BITS} EQUAL 64 )
-	set( CMAKE_POSITION_INDEPENDENT_CODE ON )
+# Allow overriding the position independent code setting (ECBUILD-220)
+if( DEFINED ECBUILD_POSITION_INDEPENDENT_CODE )
+  set( CMAKE_POSITION_INDEPENDENT_CODE ${ECBUILD_POSITION_INDEPENDENT_CODE} )
+elseif( ${EC_OS_BITS} EQUAL 64 )
+  set( CMAKE_POSITION_INDEPENDENT_CODE ON )
 endif()
 
+
 ############################################################################################
 # check architecture
 
@@ -45,21 +56,21 @@ if( ENABLE_OS_TYPES_TEST )
 	ecbuild_cache_check_type_size( ssize_t        EC_SIZEOF_SSIZE_T     )
 	ecbuild_cache_check_type_size( off_t          EC_SIZEOF_OFF_T       )
 
-#	message( STATUS "sizeof void*  [${EC_SIZEOF_PTR}]" )
-#	message( STATUS "sizeof off_t  [${EC_SIZEOF_OFF_T}]" )
-#	message( STATUS "sizeof int    [${EC_SIZEOF_INT}]" )
-#	message( STATUS "sizeof short  [${EC_SIZEOF_SHORT}]" )
-#	message( STATUS "sizeof long   [${EC_SIZEOF_LONG}]" )
-#	message( STATUS "sizeof size_t [${EC_SIZEOF_SIZE_T}]" )
-#	message( STATUS "sizeof float  [${EC_SIZEOF_FLOAT}]" )
-#	message( STATUS "sizeof double [${EC_SIZEOF_DOUBLE}]" )
-#	message( STATUS "sizeof long long   [${EC_SIZEOF_LONG_LONG}]" )
-#	message( STATUS "sizeof long double [${EC_SIZEOF_LONG_DOUBLE}]" )
-
-#	message( STATUS "system sizeof :" )
-#	message( STATUS "  void*  [${EC_SIZEOF_PTR}]  size_t [${EC_SIZEOF_SIZE_T}]  off_t  [${EC_SIZEOF_OFF_T}]   short  [${EC_SIZEOF_SHORT}]" )
-#	message( STATUS "  int    [${EC_SIZEOF_INT}]  long   [${EC_SIZEOF_LONG}]  long long   [${EC_SIZEOF_LONG_LONG}]" )
-#	message( STATUS "  float  [${EC_SIZEOF_FLOAT}]  double [${EC_SIZEOF_DOUBLE}]  long double [${EC_SIZEOF_LONG_DOUBLE}]" )
+#	ecbuild_info( "sizeof void*  [${EC_SIZEOF_PTR}]" )
+#	ecbuild_info( "sizeof off_t  [${EC_SIZEOF_OFF_T}]" )
+#	ecbuild_info( "sizeof int    [${EC_SIZEOF_INT}]" )
+#	ecbuild_info( "sizeof short  [${EC_SIZEOF_SHORT}]" )
+#	ecbuild_info( "sizeof long   [${EC_SIZEOF_LONG}]" )
+#	ecbuild_info( "sizeof size_t [${EC_SIZEOF_SIZE_T}]" )
+#	ecbuild_info( "sizeof float  [${EC_SIZEOF_FLOAT}]" )
+#	ecbuild_info( "sizeof double [${EC_SIZEOF_DOUBLE}]" )
+#	ecbuild_info( "sizeof long long   [${EC_SIZEOF_LONG_LONG}]" )
+#	ecbuild_info( "sizeof long double [${EC_SIZEOF_LONG_DOUBLE}]" )
+
+#	ecbuild_info( "system sizeof :" )
+#	ecbuild_info( "  void*  [${EC_SIZEOF_PTR}]  size_t [${EC_SIZEOF_SIZE_T}]  off_t  [${EC_SIZEOF_OFF_T}]   short  [${EC_SIZEOF_SHORT}]" )
+#	ecbuild_info( "  int    [${EC_SIZEOF_INT}]  long   [${EC_SIZEOF_LONG}]  long long   [${EC_SIZEOF_LONG_LONG}]" )
+#	ecbuild_info( "  float  [${EC_SIZEOF_FLOAT}]  double [${EC_SIZEOF_DOUBLE}]  long double [${EC_SIZEOF_LONG_DOUBLE}]" )
 
 endif()
 
@@ -101,14 +112,19 @@ endif()
 if( ENABLE_OS_ENDINESS_TEST )
 
   if( NOT DEFINED EC_BIG_ENDIAN AND NOT DEFINED EC_LITTLE_ENDIAN )
+
   	test_big_endian( _BIG_ENDIAN )
 
   	if( _BIG_ENDIAN )
-  		set( EC_BIG_ENDIAN    1 )
+        set( EC_BIG_ENDIAN    1 )
+        set( EC_LITTLE_ENDIAN 0 )
   	else()
-  		set( EC_LITTLE_ENDIAN 1 )
+        set( EC_BIG_ENDIAN    0 )
+        set( EC_LITTLE_ENDIAN 1 )
   	endif()
+
   endif()
+
   ecbuild_cache_var( EC_BIG_ENDIAN )
   ecbuild_cache_var( EC_LITTLE_ENDIAN )
 
@@ -142,9 +158,15 @@ if( ENABLE_OS_ENDINESS_TEST )
   	if( "${IEEE_BE}" STREQUAL "" )
   		set( IEEE_BE 0 CACHE INTERNAL "Test IEEE_BE")
   	endif()
+
   endif()
+
   ecbuild_cache_var( IEEE_BE )
 
+  if( EC_BIG_ENDIAN AND NOT IEEE_BE )
+    ecbuild_critical("Failed to sanity check on endiness: OS should be Big-Endian but compiled code runs differently -- to ignore this pass -DIEEE_BE=0 to CMake/ecBuild")
+  endif()
+
     if( NOT DEFINED IEEE_LE )
   	check_c_source_runs(
   		 "int compare(unsigned char* a,unsigned char* b) {
@@ -172,12 +194,17 @@ if( ENABLE_OS_ENDINESS_TEST )
   		   return 0;
   		 }" IEEE_LE )
 
-  	if( "${IEEE_BE}" STREQUAL "" )
+  	if( "${IEEE_LE}" STREQUAL "" )
   		set( IEEE_LE 0 CACHE INTERNAL "Test IEEE_LE")
   	endif()
   endif()
+
   ecbuild_cache_var( IEEE_LE )
 
+  if( EC_LITTLE_ENDIAN AND NOT IEEE_LE )
+    ecbuild_critical("Failed to sanity check on endiness: OS should be Little-Endian but compiled code runs differently -- to ignore this pass -DIEEE_LE=0 to CMake/ecBuild")
+  endif()
+
 endif()
 
 ############################################################################################
@@ -202,9 +229,9 @@ if( ENABLE_PROFILING )
     unset( _trust_flags )
 
     unset( _flags )
-  
+
   else()
-    message( WARNING "Profiling enabled but ecbuild doesn't know how to enable for this particular compiler ${CMAKE_C_COMPILER_ID}")
+    ecbuild_warn( "Profiling enabled but ecbuild doesn't know how to enable for this particular compiler ${CMAKE_C_COMPILER_ID}")
   endif()
 
 endif()
@@ -218,33 +245,41 @@ set( EC_OS_NAME "UNKNOWN" )
 
 if( UNIX )
 
-	### APPLE ###
-
-	if( APPLE AND ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" )
-		set( EC_OS_NAME "macosx" )
-	endif()
-
-	### Linux ###
-
-	if( ${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
+  ### APPLE ###
 
-		set( EC_OS_NAME "linux" )
+  if( APPLE AND ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" )
+    set( EC_OS_NAME "macosx" )
+  endif()
 
-		# recent linkers default to --enable-new-dtags
-		# which then adds both RPATH and RUNPATH to executables
-		# thus invalidating RPATH setting, and making LD_LIBRARY_PATH take precedence
-		# to be sure, use tool 'readelf -a <exe> | grep PATH' to see what paths are built-in
-		# see:
-		#  * http://blog.qt.digia.com/blog/2011/10/28/rpath-and-runpath
-		#  * http://www.cmake.org/Wiki/CMake_RPATH_handling
-		#  * man ld
-		#  * http://blog.tremily.us/posts/rpath
-		#  * http://fwarmerdam.blogspot.co.uk/2010/12/rpath-runpath-and-ldlibrarypath.html
-		set(CMAKE_EXE_LINKER_FLAGS     "${CMAKE_EXE_LINKER_FLAGS}    -Wl,--disable-new-dtags")
-		set(CMAKE_SHARED_LINKER_FLAGS  "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--disable-new-dtags")
-		set(CMAKE_MODULE_LINKER_FLAGS  "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--disable-new-dtags")
+  ### Linux ###
+
+  if( ${CMAKE_SYSTEM_NAME} MATCHES "Linux" )
+
+    set( EC_OS_NAME "linux" )
+
+    # The following option allows enabling the new dtags linker option
+    # (when set to OFF). ONLY SET TO OFF IF YOU KNOW WHAT YOU ARE DOING AND
+    # NEVER WHEN BUILDING PRODUCTION SOFTWARE. YOU HAVE BEEN WARNED!
+    option( ECBUILD_DISABLE_NEW_DTAGS "Set the linker flag --disable-new-dtags" ON )
+    mark_as_advanced( ECBUILD_DISABLE_NEW_DTAGS )
+
+    if( ECBUILD_DISABLE_NEW_DTAGS )
+      # recent linkers default to --enable-new-dtags
+      # which then adds both RPATH and RUNPATH to executables
+      # thus invalidating RPATH setting, and making LD_LIBRARY_PATH take precedence
+      # to be sure, use tool 'readelf -a <exe> | grep PATH' to see what paths are built-in
+      # see:
+      #  * http://blog.qt.digia.com/blog/2011/10/28/rpath-and-runpath
+      #  * http://www.cmake.org/Wiki/CMake_RPATH_handling
+      #  * man ld
+      #  * http://blog.tremily.us/posts/rpath
+      #  * http://fwarmerdam.blogspot.co.uk/2010/12/rpath-runpath-and-ldlibrarypath.html
+      set(CMAKE_EXE_LINKER_FLAGS     "${CMAKE_EXE_LINKER_FLAGS}    -Wl,--disable-new-dtags")
+      set(CMAKE_SHARED_LINKER_FLAGS  "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--disable-new-dtags")
+      set(CMAKE_MODULE_LINKER_FLAGS  "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--disable-new-dtags")
+    endif()
 
-	endif()
+  endif()
 
 	### Solaris ###
 
@@ -350,7 +385,7 @@ endif()
 if( ${CMAKE_SYSTEM_NAME} MATCHES "CYGWIN" )
 
 	set( EC_OS_NAME "cygwin" )
-	message( WARNING "Building on Cygwin should work but is untested" )
+	ecbuild_warn( "Building on Cygwin should work but is untested" )
 
 endif()
 
@@ -359,11 +394,11 @@ endif()
 if( ${EC_OS_NAME} MATCHES "UNKNOWN" )
 
 	if( DISABLE_OS_CHECK )
-		message( WARNING "ecBuild is untested for this operating system: [${CMAKE_SYSTEM_NAME}]"
-						 " -- DISABLE_OS_CHECK is ON so proceeding at your own risk ..." )
+		ecbuild_warn( "ecBuild is untested for this operating system: [${CMAKE_SYSTEM_NAME}]"
+                  " -- DISABLE_OS_CHECK is ON so proceeding at your own risk ..." )
 	else()
-		message( FATAL_ERROR "ecBuild is untested for this operating system: [${CMAKE_SYSTEM_NAME}]"
-							 " -- refusing to continue. Disable this check with -DDISABLE_OS_CHECK=ON" )
+		ecbuild_critical( "ecBuild is untested for this operating system: [${CMAKE_SYSTEM_NAME}]"
+                      " -- refusing to continue. Disable this check with -DDISABLE_OS_CHECK=ON" )
 	endif()
 
 endif()
diff --git a/cmake/ecbuild_compiler_flags.cmake b/cmake/ecbuild_compiler_flags.cmake
new file mode 100644
index 0000000..b97eb2c
--- /dev/null
+++ b/cmake/ecbuild_compiler_flags.cmake
@@ -0,0 +1,97 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+##############################################################################
+#.rst:
+#
+# ecbuild_compiler_flags
+# ======================
+#
+# Set default compiler flags for a given language. ::
+#
+#   ecbuild_compiler_flags( <lang> )
+#
+# The procedure is as follows:
+#
+# 1.  ecBuild does *not* set ``CMAKE_<lang>_FLAGS`` i.e. the user can set these
+#     via -D or the CMake cache and these will be the "base" flags.
+#
+# 2.  ecBuild *overwrites* ``CMAKE_<lang>_FLAGS_<btype>`` in the CMake cache
+#     for all build types with compiler specific defaults for the currently
+#     loaded compiler i.e. any value set by the user via -D or the CMake cache
+#     *has no effect*.
+#
+# 3.  Any value the user provides via ``ECBUILD_<lang>_FLAGS`` or
+#     ``ECBUILD_<lang>_FLAGS_<btype>`` *overrides* the corresponding
+#     ``CMAKE_<lang>_FLAGS`` or ``CMAKE_<lang>_FLAGS_<btype>`` *without being
+#     written to the CMake cache*.
+#
+##############################################################################
+
+macro( ecbuild_compiler_flags _lang )
+
+  if( CMAKE_${_lang}_COMPILER_LOADED )
+
+    ecbuild_debug( "try include ${ECBUILD_MACROS_DIR}/compiler_flags/${CMAKE_${_lang}_COMPILER_ID}_${_lang}.cmake ")
+
+    include( ${ECBUILD_MACROS_DIR}/compiler_flags/${CMAKE_${_lang}_COMPILER_ID}_${_lang}.cmake OPTIONAL )
+
+    ecbuild_debug_var( CMAKE_${_lang}_FLAGS )
+
+    foreach( _btype NONE DEBUG BIT PRODUCTION RELEASE RELWITHDEBINFO )
+      ecbuild_debug_var( CMAKE_${_lang}_FLAGS_${_btype} )
+    endforeach()
+
+  endif()
+
+  foreach( _btype NONE DEBUG BIT PRODUCTION RELEASE RELWITHDEBINFO )
+    if( DEFINED ECBUILD_${_lang}_FLAGS_${_btype} )
+      set( CMAKE_${_lang}_FLAGS_${_btype} ${ECBUILD_${_lang}_FLAGS_${_btype}} )
+    endif()
+    mark_as_advanced( CMAKE_${_lang}_FLAGS_${_btype} )
+  endforeach()
+
+  if( DEFINED ECBUILD_${_lang}_FLAGS )
+    set( CMAKE_${_lang}_FLAGS "${ECBUILD_${_lang}_FLAGS}" )
+  endif()
+
+  mark_as_advanced( CMAKE_${_lang}_FLAGS )
+
+  if( DEFINED ECBUILD_${_lang}_LINK_FLAGS )
+    set( CMAKE_${_lang}_LINK_FLAGS "${ECBUILD_${_lang}_LINK_FLAGS}" )
+  endif()
+
+  mark_as_advanced( CMAKE_${_lang}_LINK_FLAGS )
+
+endmacro()
+
+#-----------------------------------------------------------------------------------------------------------------------
+
+### OVERRIDE Compiler FLAGS (we override because CMake forcely defines them) -- see ecbuild_compiler_flags() macro
+
+foreach( _lang C CXX Fortran )
+  if( CMAKE_${_lang}_COMPILER_LOADED )
+    ecbuild_compiler_flags( ${_lang} )
+  endif()
+endforeach()
+
+### OVERRIDE Linker FLAGS per object type (we override because CMake forcely defines them)
+
+foreach( _btype NONE DEBUG BIT PRODUCTION RELEASE RELWITHDEBINFO )
+
+  foreach( _obj EXE SHARED MODULE )
+    if( ECBUILD_${_obj}_LINKER_FLAGS_${_btype} )
+      set( CMAKE_${_obj}_LINKER_FLAGS_${_btype} ${ECBUILD_${_obj}_LINKER_FLAGS_${_btype}} )
+    endif()
+  endforeach()
+
+endforeach()
+
+#-----------------------------------------------------------------------------------------------------------------------
+
+mark_as_advanced( CMAKE_C_FLAGS_BIT )
diff --git a/cmake/ecbuild_config.h.in b/cmake/ecbuild_config.h.in
index 2a01618..dd8e9cd 100644
--- a/cmake/ecbuild_config.h.in
+++ b/cmake/ecbuild_config.h.in
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 1996-2015 ECMWF.
+ * (C) Copyright 1996-2016 ECMWF.
  *
  * This software is licensed under the terms of the Apache Licence Version 2.0
  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -40,6 +40,8 @@
 #cmakedefine EC_HAVE_FTRUNCATE
 #cmakedefine EC_HAVE_OPEN
 #cmakedefine EC_HAVE_FOPEN
+#cmakedefine EC_HAVE_FMEMOPEN
+#cmakedefine EC_HAVE_FUNOPEN
 #cmakedefine EC_HAVE_FLOCK
 #cmakedefine EC_HAVE_MMAP
 
diff --git a/cmake/ecbuild_debug_var.cmake b/cmake/ecbuild_debug_var.cmake
deleted file mode 100644
index 9bb3499..0000000
--- a/cmake/ecbuild_debug_var.cmake
+++ /dev/null
@@ -1,47 +0,0 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
-# granted to it by virtue of its status as an intergovernmental organisation nor
-# does it submit to any jurisdiction.
-
-##############################################################################
-# macro for exporting a variable to parent scope
-
-macro( set_parent_scope VAR )
-
-	set( ${VAR} ${${VAR}} PARENT_SCOPE )
-
-endmacro( set_parent_scope )
-
-##############################################################################
-# macro for debugging a cmake variable
-
-macro( debug_var VAR )
-
-    message( STATUS "${VAR} [${${VAR}}]" )
-
-endmacro( debug_var )
-
-##############################################################################
-# macro for debugging a cmake list
-
-macro( debug_list VAR )
-
-    message( STATUS "${VAR}:" )
-    foreach( _elem ${${VAR}} )
-      message( STATUS "  ${_elem}" )
-    endforeach()
-
-endmacro( debug_list )
-
-##############################################################################
-# macro for debugging a environment variable within cmake
-
-macro( debug_env_var VAR )
-
-    message( STATUS "ENV ${VAR} [$ENV{${VAR}}]" )
-
-endmacro( debug_env_var )
-
diff --git a/cmake/ecbuild_declare_project.cmake b/cmake/ecbuild_declare_project.cmake
index 11052c6..1c2e93b 100644
--- a/cmake/ecbuild_declare_project.cmake
+++ b/cmake/ecbuild_declare_project.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -69,10 +69,10 @@ macro( ecbuild_declare_project )
     get_git_head_revision( GIT_REFSPEC ${PNAME}_GIT_SHA1 )
     if( ${PNAME}_GIT_SHA1 )
       string( SUBSTRING "${${PNAME}_GIT_SHA1}" 0 7 ${PNAME}_GIT_SHA1_SHORT )
-      #     debug_var( ${PNAME}_GIT_SHA1 )
-      #     debug_var( ${PNAME}_GIT_SHA1_SHORT )
+      #     ecbuild_debug_var( ${PNAME}_GIT_SHA1 )
+      #     ecbuild_debug_var( ${PNAME}_GIT_SHA1_SHORT )
     else()
-      message( STATUS "Could not get git-sha1 for project ${PNAME}")
+      ecbuild_debug( "Could not get git-sha1 for project ${PNAME}")
     endif()
   endif()
 
@@ -101,11 +101,11 @@ macro( ecbuild_declare_project )
   set( ${PNAME}_VERSION_STR "${${PROJECT_NAME}_VERSION_STR}"
        CACHE INTERNAL "package ${PNAME} version string" ) # ignore caps
 
-  #    debug_var( ${PNAME}_VERSION )
-  #    debug_var( ${PNAME}_VERSION_STR )
-  #    debug_var( ${PNAME}_MAJOR_VERSION )
-  #    debug_var( ${PNAME}_MINOR_VERSION )
-  #    debug_var( ${PNAME}_PATCH_VERSION )
+  #    ecbuild_debug_var( ${PNAME}_VERSION )
+  #    ecbuild_debug_var( ${PNAME}_VERSION_STR )
+  #    ecbuild_debug_var( ${PNAME}_MAJOR_VERSION )
+  #    ecbuild_debug_var( ${PNAME}_MINOR_VERSION )
+  #    ecbuild_debug_var( ${PNAME}_PATCH_VERSION )
 
   # install dirs for this project
 
@@ -133,7 +133,7 @@ macro( ecbuild_declare_project )
 
   foreach( p LIB BIN INCLUDE DATA CMAKE )
     if( IS_ABSOLUTE ${INSTALL_${p}_DIR} )
-      message( WARNING "Defining INSTALL_${p}_DIR as absolute path '${INSTALL_${p}_DIR}' makes this build non-relocatable, possibly breaking the installation of RPMS and DEB packages" )
+      ecbuild_warn( "Defining INSTALL_${p}_DIR as absolute path '${INSTALL_${p}_DIR}' makes this build non-relocatable, possibly breaking the installation of RPMS and DEB packages" )
     endif()
   endforeach()
 
@@ -146,12 +146,12 @@ macro( ecbuild_declare_project )
       set( ${PNAME}_FULL_INSTALL_${p}_DIR "${CMAKE_INSTALL_PREFIX}/${${var}}"
            CACHE INTERNAL "${PNAME} ${p} full install path" )
     else()
-      message( WARNING "Setting an absolute path for ${VAR} in project ${PNAME}, breakes generation of relocatable binary packages (rpm,deb,...)" )
+      ecbuild_warn( "Setting an absolute path for ${VAR} in project ${PNAME}, breakes generation of relocatable binary packages (rpm,deb,...)" )
       set( ${PNAME}_FULL_INSTALL_${p}_DIR "${${var}}"
            CACHE INTERNAL "${PNAME} ${p} full install path" )
     endif()
 
-    #        debug_var( ${PNAME}_FULL_INSTALL_${p}_DIR )
+    #        ecbuild_debug_var( ${PNAME}_FULL_INSTALL_${p}_DIR )
 
   endforeach()
 
@@ -162,7 +162,7 @@ macro( ecbuild_declare_project )
     if( ENABLE_RELATIVE_RPATHS )
 
       file( RELATIVE_PATH relative_rpath ${${PNAME}_FULL_INSTALL_BIN_DIR} ${${PNAME}_FULL_INSTALL_LIB_DIR} )
-      # debug_var( relative_rpath )
+      # ecbuild_debug_var( relative_rpath )
 
       ecbuild_append_to_rpath( ${relative_rpath} )
 
@@ -171,23 +171,23 @@ macro( ecbuild_declare_project )
       if( IS_ABSOLUTE ${INSTALL_LIB_DIR} )
         ecbuild_append_to_rpath( "${INSTALL_LIB_DIR}" )
       else()
-        ecbuild_append_to_rpath( "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}" ) 
+        ecbuild_append_to_rpath( "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}" )
       endif()
 
     endif()
 
   endif()
 
-  # debug_var( CMAKE_INSTALL_RPATH )
+  # ecbuild_debug_var( CMAKE_INSTALL_RPATH )
 
   # print project header
 
   message( STATUS "---------------------------------------------------------" )
 
   if( ${PNAME}_GIT_SHA1_SHORT )
-    message( STATUS "[${PROJECT_NAME}] (${${PNAME}_VERSION_STR}) [${${PNAME}_GIT_SHA1_SHORT}]" )
+    ecbuild_info( "[${PROJECT_NAME}] (${${PNAME}_VERSION_STR}) [${${PNAME}_GIT_SHA1_SHORT}]" )
   else()
-    message( STATUS "[${PROJECT_NAME}] (${${PNAME}_VERSION_STR})" )
+    ecbuild_info( "[${PROJECT_NAME}] (${${PNAME}_VERSION_STR})" )
   endif()
 
 endmacro( ecbuild_declare_project )
diff --git a/cmake/ecbuild_define_build_types.cmake b/cmake/ecbuild_define_build_types.cmake
index 53e4de0..cf92d23 100644
--- a/cmake/ecbuild_define_build_types.cmake
+++ b/cmake/ecbuild_define_build_types.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -7,55 +7,6 @@
 # does it submit to any jurisdiction.
 
 ############################################################################################
-# define a Production build type
-
-# NOTE: gcc does not guarrante that -O3 performs better than -O2
-#       -- it can perform worse due to assembly code bloating.
-#   Moreover for gcc 4.1.2 we found that -O3 remove the parser code generated from Lex/Yacc
-#   and therefore in production mode we downgrade to -O2 if the compiler is GCC (for all versions).
-
-
-if(CMAKE_COMPILER_IS_GNUCXX)
-    set( CMAKE_CXX_FLAGS_PRODUCTION "-O2 -g" CACHE STRING "Flags used by the C++ compiler during Production builds." FORCE )
-else()
-    set( CMAKE_CXX_FLAGS_PRODUCTION "-O3 -g" CACHE STRING "Flags used by the C++ compiler during Production builds." FORCE )
-endif()
-
-if(CMAKE_COMPILER_IS_GNUCC)
-    set( CMAKE_C_FLAGS_PRODUCTION "-O2 -g" CACHE STRING "Flags used by the C compiler during Production builds." FORCE )
-else()
-    set( CMAKE_C_FLAGS_PRODUCTION "-O3 -g" CACHE STRING "Flags used by the C compiler during Production builds." FORCE )
-endif()
-
-set( CMAKE_EXE_LINKER_FLAGS_PRODUCTION "" CACHE STRING "Flags used for linking binaries during Production builds." FORCE )
-set( CMAKE_SHARED_LINKER_FLAGS_PRODUCTION "" CACHE STRING "Flags used by the shared libraries linker during Production builds." FORCE )
-set( CMAKE_MODULE_LINKER_FLAGS_PRODUCTION "" CACHE STRING "Flags used by the static libraries linker during Production builds." FORCE )
-
-mark_as_advanced(
-    CMAKE_CXX_FLAGS_PRODUCTION
-    CMAKE_C_FLAGS_PRODUCTION
-    CMAKE_EXE_LINKER_FLAGS_PRODUCTION
-	  CMAKE_SHARED_LINKER_FLAGS_PRODUCTION
-	  CMAKE_MODULE_LINKER_FLAGS_PRODUCTION )
-
-############################################################################################
-# fixes for specific compilers
-
-### remove -Mipa=fast from PGI compilers in RELEASE mode
-
-if( CMAKE_C_COMPILER_ID STREQUAL "PGI" )
-  set(CMAKE_C_FLAGS_RELEASE "-fast -O3")
-endif()
-
-if( CMAKE_CXX_COMPILER_ID STREQUAL "PGI" )
-  set(CMAKE_CXX_FLAGS_RELEASE "-fast -O3")
-endif()
-
-if( CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" )
-  set(CMAKE_Fortran_FLAGS_RELEASE "-fast -O3")
-endif()
-
-############################################################################################
 # define default build type
 
 set( _BUILD_TYPE_MSG "Build type options are: [ None | Debug | Bit | Production | Release | RelWithDebInfo ]" )
@@ -104,34 +55,5 @@ if( NOT CMAKE_BUILD_TYPE MATCHES "None"  AND
 	  NOT CMAKE_BUILD_TYPE MATCHES "Production" AND
     NOT CMAKE_BUILD_TYPE MATCHES "Release"  AND
     NOT CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo" )
-    message( FATAL_ERROR "CMAKE_BUILD_TYPE is not recognized. ${_BUILD_TYPE_MSG}" )
+    ecbuild_critical( "CMAKE_BUILD_TYPE is not recognized. ${_BUILD_TYPE_MSG}" )
 endif()
-
-############################################################################################
-# overrides of the flags per build type
-
-foreach( _btype NONE DEBUG BIT PRODUCTION RELEASE RELWITHDEBINFO )
-
-  # OVERRIDE Compiler FLAGS per language (we override because CMake forcely defines them)
-  foreach( _lang C CXX Fortran )
-    if( ECBUILD_${_lang}_FLAGS_${_btype} )
-      set( CMAKE_${_lang}_FLAGS_${_btype} ${ECBUILD_${_lang}_FLAGS_${_btype}} )
-    endif()
-  endforeach()
-
-  # OVERRIDE Linker FLAGS per object type (we override because CMake forcely defines them)
-  foreach( _obj EXE SHARED MODULE )
-    if( ECBUILD_${_obj}_LINKER_FLAGS_${_btype} )
-      set( CMAKE_${_obj}_LINKER_FLAGS_${_btype} ${ECBUILD_${_obj}_LINKER_FLAGS_${_btype}} )
-    endif()
-  endforeach()
-
-endforeach()
-
-# APPEND Linker FLAGS per language (we append because CMake typically leaves them empty)
-
-foreach( _lang C CXX Fortran )
-  if( ECBUILD_${_lang}_LINK_FLAGS )
-    set( CMAKE_${_lang}_LINK_FLAGS "${CMAKE_${_lang}_LINK_FLAGS} ${ECBUILD_${_lang}_LINK_FLAGS}" )
-  endif()
-endforeach()
\ No newline at end of file
diff --git a/cmake/ecbuild_define_libs_and_execs_target.cmake b/cmake/ecbuild_define_libs_and_execs_target.cmake
new file mode 100644
index 0000000..812f42c
--- /dev/null
+++ b/cmake/ecbuild_define_libs_and_execs_target.cmake
@@ -0,0 +1,29 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+set( EC_ALL_EXES "" CACHE INTERNAL "" )
+set( EC_ALL_LIBS "" CACHE INTERNAL "" )
+
+############################################################################################
+# define libs and execs targets
+
+macro( ecbuild_define_libs_and_execs_targets )
+
+  add_custom_target( libs )
+
+  if( EC_ALL_LIBS )
+    add_dependencies( libs ${EC_ALL_LIBS} )
+  endif()
+
+  add_custom_target( execs )
+
+  if( EC_ALL_EXECS )
+    add_dependencies( execs ${EC_ALL_EXES} )
+  endif()
+
+endmacro(ecbuild_define_libs_and_execs_targets)
diff --git a/cmake/ecbuild_define_links_target.cmake b/cmake/ecbuild_define_links_target.cmake
new file mode 100644
index 0000000..b5f53fe
--- /dev/null
+++ b/cmake/ecbuild_define_links_target.cmake
@@ -0,0 +1,74 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+############################################################################################
+# macro for adding a link to library on a development system
+
+set( EC_ALL_EXES "" CACHE INTERNAL "" )
+set( EC_ALL_LIBS "" CACHE INTERNAL "" )
+
+macro( ecbuild_link_exe TARGET  FILENAME FILEPATH )
+
+    if( DEFINED EC_LINK_DIR )
+       add_custom_target(${TARGET}_link
+          COMMAND ${CMAKE_COMMAND} -E make_directory ${EC_LINK_DIR}
+          COMMAND ${CMAKE_COMMAND} -E make_directory ${EC_LINK_DIR}/bin
+          COMMAND ${CMAKE_COMMAND} -E remove ${EC_LINK_DIR}/bin/${FILENAME}
+          COMMAND ${CMAKE_COMMAND} -E create_symlink ${FILEPATH} ${EC_LINK_DIR}/bin/${FILENAME}
+          DEPENDS ${TARGET}
+          COMMENT "link ${EC_LINK_DIR}/bin/${FILENAME}" )
+    endif()
+
+    set( EC_ALL_EXES ${EC_ALL_EXES} ${TARGET} CACHE INTERNAL "" )
+
+endmacro( ecbuild_link_exe  )
+
+###############################################################################
+# macro for adding a link to library on a development system
+
+macro( ecbuild_link_lib  TARGET FILENAME FILEPATH )
+
+    if( DEFINED EC_LINK_DIR )
+       add_custom_target(${TARGET}_link
+          COMMAND ${CMAKE_COMMAND} -E make_directory ${EC_LINK_DIR}
+          COMMAND ${CMAKE_COMMAND} -E make_directory ${EC_LINK_DIR}/lib
+          COMMAND ${CMAKE_COMMAND} -E remove ${EC_LINK_DIR}/lib/${FILENAME}
+          COMMAND ${CMAKE_COMMAND} -E create_symlink ${FILEPATH} ${EC_LINK_DIR}/lib/${FILENAME}
+          DEPENDS ${TARGET}
+          COMMENT "link ${EC_LINK_DIR}/lib/${FILENAME}" )
+    endif()
+
+    set( EC_ALL_LIBS ${EC_ALL_LIBS} ${TARGET} CACHE INTERNAL "" )
+
+endmacro( ecbuild_link_lib  )
+
+############################################################################################
+# define make links target
+
+macro( ecbuild_define_links_target )
+
+  if( DEFINED EC_LINK_DIR )
+
+    foreach( lib ${EC_ALL_LIBS} )
+      list( APPEND ec_link_libs ${lib}_link )
+    endforeach()
+    foreach( exe ${EC_ALL_EXES} )
+      list( APPEND ec_link_exes ${exe}_link )
+    endforeach()
+
+    add_custom_target( links DEPENDS ${ec_link_libs} ${ec_link_exes} )
+
+     #   ecbuild_debug_var( EC_ALL_EXES )
+     #   ecbuild_debug_var( ec_link_exes )
+
+     #  ecbuild_debug_var( EC_ALL_LIBS )
+     #   ecbuild_debug_var( ec_link_libs )
+
+  endif()
+
+endmacro(ecbuild_define_links_target)
diff --git a/cmake/ecbuild_define_options.cmake b/cmake/ecbuild_define_options.cmake
index f7a2321..af40ae1 100644
--- a/cmake/ecbuild_define_options.cmake
+++ b/cmake/ecbuild_define_options.cmake
@@ -1,8 +1,8 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
+# (C) Copyright 1996-2016 ECMWF.
+#
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -46,3 +46,7 @@ option( ECBUILD_USE_INCLUDE_DIRECTORIES "Forces to use global include_directorie
 mark_as_advanced( ECBUILD_USE_INCLUDE_DIRECTORIES )
 
 set( CMAKE_NO_SYSTEM_FROM_IMPORTED ON )
+
+# hide some CMake options from CMake UI
+
+mark_as_advanced( CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET CMAKE_OSX_SYSROOT )
\ No newline at end of file
diff --git a/cmake/ecbuild_define_paths.cmake b/cmake/ecbuild_define_paths.cmake
index 822bf71..856903d 100644
--- a/cmake/ecbuild_define_paths.cmake
+++ b/cmake/ecbuild_define_paths.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/ecbuild_dont_pack.cmake b/cmake/ecbuild_dont_pack.cmake
index 099ee1d..bc62182 100644
--- a/cmake/ecbuild_dont_pack.cmake
+++ b/cmake/ecbuild_dont_pack.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -41,11 +41,11 @@ macro( ecbuild_dont_pack )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_dont_pack(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_dont_pack(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT DEFINED _PAR_REGEX AND NOT  DEFINED _PAR_FILES AND NOT  DEFINED _PAR_DIRS )
-      message(FATAL_ERROR "Call to ecbuild_dont_pack does not speficify any list to avoid packing.")
+      ecbuild_critical("Call to ecbuild_dont_pack does not speficify any list to avoid packing.")
     endif()
 
     set( LOCAL_FILES_NOT_TO_PACK "" )
diff --git a/cmake/ecbuild_download_resource.cmake b/cmake/ecbuild_download_resource.cmake
index d313704..3b2f90e 100644
--- a/cmake/ecbuild_download_resource.cmake
+++ b/cmake/ecbuild_download_resource.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -34,12 +34,12 @@ function( ecbuild_download_resource _p_OUT _p_URL )
         execute_process( COMMAND ${WGET_PROGRAM} -nv -O ${_p_OUT} ${_p_URL}
                          WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} RESULT_VARIABLE CMD_RESULT )
       else()
-        message(FATAL_ERROR "Could not find curl or wget. Error downloading ${_p_URL}")
+        ecbuild_critical("Could not find curl or wget. Error downloading ${_p_URL}")
       endif()
     endif()
 
     if(CMD_RESULT)
-      message(FATAL_ERROR "Error downloading ${_p_URL}")
+      ecbuild_critical("Error downloading ${_p_URL}")
     endif()
 
   endif()
diff --git a/cmake/ecbuild_echo_targets.cmake b/cmake/ecbuild_echo_targets.cmake
index ddaa2e4..1406a1f 100644
--- a/cmake/ecbuild_echo_targets.cmake
+++ b/cmake/ecbuild_echo_targets.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -32,13 +32,13 @@ function(ecbuild_echo_target_property tgt prop)
   get_property(s TARGET ${tgt} PROPERTY ${prop} SET)
 
   # only produce output for values that are set
-  #if(s)
-    message("tgt='${tgt}' prop='${prop}'")
-    message("  value='${v}'")
-    message("  defined='${d}'")
-    message("  set='${s}'")
-    message("")
-  #endif()
+  if(s)
+    ecbuild_debug("tgt='${tgt}' prop='${prop}'")
+    ecbuild_debug("  value='${v}'")
+    ecbuild_debug("  defined='${d}'")
+    ecbuild_debug("  set='${s}'")
+    ecbuild_debug("")
+  endif()
 
   cmake_policy(POP)
 
@@ -58,7 +58,7 @@ endfunction()
 
 function(ecbuild_echo_target tgt)
   if(NOT TARGET ${tgt})
-    message("There is no target named '${tgt}'")
+    ecbuild_debug("There is no target named '${tgt}'")
     return()
   endif()
 
@@ -205,11 +205,11 @@ WIN32_EXECUTABLE
 XCODE_ATTRIBUTE_WHATEVER
 )
 
-  message("======================== ${tgt} ========================")
+  ecbuild_debug("======================== ${tgt} ========================")
   foreach(p ${props})
-    ecbuild_echo_target_property("${t}" "${p}")
+    ecbuild_echo_target_property("${tgt}" "${p}")
   endforeach()
-  message("")
+  ecbuild_debug("")
 endfunction()
 
 ##############################################################################
diff --git a/cmake/ecbuild_enable_fortran.cmake b/cmake/ecbuild_enable_fortran.cmake
index 16512e8..c1c5503 100644
--- a/cmake/ecbuild_enable_fortran.cmake
+++ b/cmake/ecbuild_enable_fortran.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -36,17 +36,24 @@ macro( ecbuild_enable_fortran )
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_enable_fortran(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_enable_fortran(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
-  enable_language( Fortran )
+  if( NOT CMAKE_Fortran_COMPILER_LOADED )
+    enable_language( Fortran )
+    ecbuild_compiler_flags( Fortran )
+    if( ENABLE_WARNINGS AND CMAKE_Fortran_COMPILER_ID MATCHES "Intel" )
+      set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -warn all" )
+      ecbuild_debug( "Fortran FLAG [-warn all] added" )
+    endif()
+  endif()
 
   if( DEFINED _PAR_REQUIRED )
     if( CMAKE_Fortran_COMPILER_FORCED )
       set( CMAKE_Fortran_COMPILER_WORKS 1 )
     endif()
     if( NOT CMAKE_Fortran_COMPILER OR NOT CMAKE_Fortran_COMPILER_WORKS )
-      message( FATAL_ERROR "Fortran compiler required by project ${PROJECT_NAME} but does not seem to work" )
+      ecbuild_critical( "Fortran compiler required by project ${PROJECT_NAME} but does not seem to work" )
     endif()
   endif()
 
diff --git a/cmake/ecbuild_features.cmake b/cmake/ecbuild_features.cmake
index 5d619a5..6d20038 100644
--- a/cmake/ecbuild_features.cmake
+++ b/cmake/ecbuild_features.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -10,10 +10,6 @@
 
 include( FeatureSummary )
 
-function( debug_var _var )
-  message( "${_var} = ${${_var}}" )
-endfunction()
-
 # Write list of enabled features to CMake variable ${OUT}
 macro( ecbuild_enabled_features OUT )
     get_property( ${OUT}  GLOBAL PROPERTY ENABLED_FEATURES )
@@ -26,17 +22,17 @@ endmacro()
 
 # Enable the feature ${_name} (add to enabled features, remove from disabled)
 function( ecbuild_enable_feature _name )
-  
+
   get_property( _enabled_features  GLOBAL PROPERTY ENABLED_FEATURES )
   get_property( _disabled_features GLOBAL PROPERTY DISABLED_FEATURES )
-  
+
   if( _disabled_features )
     list( REMOVE_ITEM _disabled_features ${_name} )
   endif()
 
   list( APPEND _enabled_features ${_name} )
   list( REMOVE_DUPLICATES _enabled_features )
-    
+
   set_property(GLOBAL PROPERTY ENABLED_FEATURES  "${_enabled_features}" )
   set_property(GLOBAL PROPERTY DISABLED_FEATURES "${_disabled_features}" )
 
@@ -47,53 +43,42 @@ function( ecbuild_disable_feature _name )
 
   get_property( _enabled_features  GLOBAL PROPERTY ENABLED_FEATURES )
   get_property( _disabled_features GLOBAL PROPERTY DISABLED_FEATURES )
-  
+
   if( _enabled_features )
     list( REMOVE_ITEM _enabled_features ${_name} )
   endif()
 
   list( APPEND _disabled_features ${_name} )
   list( REMOVE_DUPLICATES _disabled_features )
-    
+
   set_property(GLOBAL PROPERTY ENABLED_FEATURES  "${_enabled_features}" )
   set_property(GLOBAL PROPERTY DISABLED_FEATURES "${_disabled_features}" )
-  
-endfunction()
 
-# Set description of feature ${_name} to ${_desc}
-function( ecbuild_set_feature_description _name _desc)      
-  set_property(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" )
-endfunction()
-
-# Set purpose of feature ${_name} to ${_desc}
-function( ecbuild_set_feature_purpose _name _purpose )
-  get_property( _purpose_list  GLOBAL PROPERTY _CMAKE_${_name}_PURPOSE )
-  list( APPEND _purpose_list ${_purpose} )
-  list( REMOVE_DUPLICATES _purpose_list )
-  set_property(GLOBAL PROPERTY _CMAKE_${_name}_PURPOSE "${_purpose_list}" )
 endfunction()
 
 # en/disable feature ${_name} and set its description and purpose
 function( ecbuild_set_feature _name )
 
   set(options ) # none
-  set(oneValueArgs ENABLED DESCRIPTION PURPOSE )
+  set(oneValueArgs ENABLED )
   set(multiValueArgs ) # none
 
-  CMAKE_PARSE_ARGUMENTS( _PAR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
-  
-  get_property( _feature_desc      GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION )  
+  cmake_parse_arguments( _PAR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+
+  get_property( _feature_desc      GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION )
   get_property( _enabled_features  GLOBAL PROPERTY ENABLED_FEATURES )
   get_property( _disabled_features GLOBAL PROPERTY DISABLED_FEATURES )
-  
+
   if( DEFINED _PAR_ENABLED )
     if( _PAR_ENABLED )
+      ecbuild_debug( "ecbuild_set_feature(${_name}): enabling feature" )
       ecbuild_enable_feature( ${_name} )
     else()
+      ecbuild_debug( "ecbuild_set_feature(${_name}): disabling feature" )
       ecbuild_disable_feature( ${_name} )
     endif()
   endif()
-  
+
   ecbuild_enabled_features( _enabled_features )
   list (FIND _enabled_features "${_name}" _index)
   if (${_index} GREATER -1)
@@ -105,17 +90,9 @@ function( ecbuild_set_feature _name )
   if (${_index} GREATER -1)
     set( _feature_found 1 )
   endif()
-  
+
   if( NOT _feature_found )
-    message( WARNING "Feature ${_name} has not yet been enabled or disabled" )
-  endif()
-  
-  if( _PAR_DESCRIPTION )
-    ecbuild_set_feature_description( ${_name} ${_PAR_DESCRIPTION} )
-  endif()
-  
-  if( _PAR_PURPOSE )
-    ecbuild_set_feature_purpose( ${_name} ${_PAR_PURPOSE} )
+    ecbuild_warn( "Feature ${_name} has not yet been enabled or disabled" )
   endif()
 
 endfunction()
diff --git a/cmake/ecbuild_find_fortranlibs.cmake b/cmake/ecbuild_find_fortranlibs.cmake
index 850c4a3..279833f 100644
--- a/cmake/ecbuild_find_fortranlibs.cmake
+++ b/cmake/ecbuild_find_fortranlibs.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -39,7 +39,7 @@ macro( ecbuild_find_fortranlibs )
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_find_python(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_find_python(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   if( NOT FORTRANLIBS_FOUND ) # don't repeat search
@@ -69,7 +69,7 @@ macro( ecbuild_find_fortranlibs )
     endif()
 
     if( _PAR_COMPILER AND NOT __known_fcomp )
-      message( FATAL_ERROR "unknown fortran compiler ${_PAR_COMPILER}" )
+      ecbuild_critical( "unknown fortran compiler ${_PAR_COMPILER}" )
     endif()
 
     ### set path from environment variables
@@ -88,7 +88,7 @@ macro( ecbuild_find_fortranlibs )
              WITH_XL_FORTRAN OR WITH_INTEL_FORTRAN)
         AND NOT (DEFINED PGI_PATH OR DEFINED LIBGFORTRAN_PATH OR
                  DEFINED XLF_PATH OR DEFINED INTEL_PATH) )
-      message( WARNING "Finding fortran libs for unspecified Fortran compiler: default search [ gfortran ]" )
+      ecbuild_warn( "Finding fortran libs for unspecified Fortran compiler: default search [ gfortran ]" )
       set( WITH_LIBGFORTRAN 1 )
     endif()
 
@@ -148,13 +148,13 @@ macro( ecbuild_find_fortranlibs )
       set( FORTRANLIBS_FOUND 1 CACHE INTERNAL "Fortran libraries found" )
       set( FORTRANLIBS_NAME ${_flibs_txt}  CACHE INTERNAL "Fortran library name" )
       set( FORTRAN_LIBRARIES ${FORTRAN_LIBRARIES} CACHE INTERNAL "Fortran libraries" )
-      message( STATUS "Found Fortran libraries: ${_flibs_txt}" )
+      ecbuild_info( "Found Fortran libraries: ${_flibs_txt}" )
     else()
       set( FORTRANLIBS_FOUND 0 )
       if( _PAR_REQUIRED )
-        message( FATAL_ERROR "Failed to find Fortran libraries" )
+        ecbuild_critical( "Failed to find Fortran libraries" )
       else()
-        message( STATUS "Failed to find Fortran libraries" )
+        ecbuild_warn( "Failed to find Fortran libraries" )
       endif()
     endif()
 
diff --git a/cmake/ecbuild_find_lexyacc.cmake b/cmake/ecbuild_find_lexyacc.cmake
index 9876097..5c13269 100644
--- a/cmake/ecbuild_find_lexyacc.cmake
+++ b/cmake/ecbuild_find_lexyacc.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -34,6 +34,7 @@
 #
 # The following CMake variables are set if lex and yacc were found:
 #
+# :LEXYACC_FOUND:   Found suitable combination of bison, lex, yacc, flex
 # :LEX_FOUND:       lex was found
 # :YACC_FOUND:      yacc was found
 # :LEX_EXECUTABLE:  path to the lex executable
@@ -47,7 +48,10 @@ macro( ecbuild_find_lexyacc )
 
   if( NOT SKIP_BISON )
 
-    find_package( BISON 2.3 )
+    find_package( BISON )
+    if(BISON_FOUND AND BISON_VERSION VERSION_LESS 2.3 )
+        ecbuild_critical( "Bison found with version ${BISON_VERSION} is less than 2.3.\nPlease define BISON_EXECUTABLE to an appropriate version or define SKIP_BISON to try finding Yacc instead" )
+    endif()
     find_package( FLEX )
 
   endif()
@@ -59,25 +63,32 @@ macro( ecbuild_find_lexyacc )
 
   endif()
 
+  set( LEXYACC_FOUND 1 )
+
   if( NOT YACC_FOUND AND NOT BISON_FOUND ) # neither bison nor yacc were found
-    message( FATAL_ERROR "neither bison or yacc were found - at least one is required (together with its lexical analyser" )
+    ecbuild_debug( "Neither bison or yacc were found - at least one is required (together with its lexical analyser" )
+    set( LEXYACC_FOUND 0 )
   endif()
 
   if( NOT YACC_FOUND ) # check for both bison & flex together
     if( BISON_FOUND AND NOT FLEX_FOUND )
-      message( FATAL_ERROR "both bison and flex are required - flex not found" )
+      set( LEXYACC_FOUND 0 )
+      ecbuild_debug( "Both bison and flex are required - flex not found" )
     endif()
     if( FLEX_FOUND AND NOT BISON_FOUND )
-      message( FATAL_ERROR "both bison and flex are required - bison not found" )
+      set( LEXYACC_FOUND 0 )
+      ecbuild_debug( "Both bison and flex are required - bison not found" )
     endif()
   endif()
 
   if( NOT BISON_FOUND ) # check for both yacc & lex together
     if( YACC_FOUND AND NOT LEX_FOUND )
-      message( FATAL_ERROR "both yacc and lex are required - lex not found" )
+      set( LEXYACC_FOUND 0 )
+      ecbuild_debug( "Both yacc and lex are required - lex not found" )
     endif()
     if( LEX_FOUND AND NOT YACC_FOUND )
-      message( FATAL_ERROR "both yacc and lex are required - yacc not found" )
+      set( LEXYACC_FOUND 0 )
+      ecbuild_debug( "Both yacc and lex are required - yacc not found" )
     endif()
   endif()
 
diff --git a/cmake/ecbuild_find_mpi.cmake b/cmake/ecbuild_find_mpi.cmake
index 82fc4b5..a0c6cfa 100644
--- a/cmake/ecbuild_find_mpi.cmake
+++ b/cmake/ecbuild_find_mpi.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -81,7 +81,7 @@ macro( ecbuild_find_mpi )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_find_mpi(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_find_mpi(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     # if user defined compilers are MPI compliant, then we use them ...
@@ -110,7 +110,7 @@ macro( ecbuild_find_mpi )
                 C_COMPILER_SUPPORTS_MPI )
 
             if( C_COMPILER_SUPPORTS_MPI )
-                message( STATUS "C compiler supports MPI -- ${CMAKE_C_COMPILER}" )
+                ecbuild_info( "C compiler supports MPI -- ${CMAKE_C_COMPILER}" )
                 set( MPI_C_COMPILER ${CMAKE_C_COMPILER} )
             endif()
 
@@ -134,7 +134,7 @@ macro( ecbuild_find_mpi )
                  CXX_COMPILER_SUPPORTS_MPI )
 
             if( CXX_COMPILER_SUPPORTS_MPI )
-                message( STATUS "C++ compiler supports MPI -- ${CMAKE_CXX_COMPILER}" )
+                ecbuild_info( "C++ compiler supports MPI -- ${CMAKE_CXX_COMPILER}" )
                 set( MPI_CXX_COMPILER ${CMAKE_CXX_COMPILER} )
             endif()
 
@@ -157,7 +157,7 @@ macro( ecbuild_find_mpi )
             Fortran_COMPILER_SUPPORTS_MPI )
 
             if( Fortran_COMPILER_SUPPORTS_MPI )
-                message( STATUS "Fortran compiler supports MPI (F90) -- ${CMAKE_Fortran_COMPILER}" )
+                ecbuild_info( "Fortran compiler supports MPI (F90) -- ${CMAKE_Fortran_COMPILER}" )
                 set( MPI_Fortran_COMPILER ${CMAKE_Fortran_COMPILER} )
                 set( MPI_Fortran_FOUND TRUE )
             endif()
@@ -251,7 +251,7 @@ macro( ecbuild_enable_mpi )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-        message(FATAL_ERROR "Unknown keywords given to ecbuild_find_mpi(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+        ecbuild_critical("Unknown keywords given to ecbuild_find_mpi(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT _PAR_COMPONENTS )
@@ -304,7 +304,7 @@ macro( ecbuild_include_mpi )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-        message(FATAL_ERROR "Unknown keywords given to ecbuild_find_mpi(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+        ecbuild_critical("Unknown keywords given to ecbuild_find_mpi(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( MPI_C_FOUND AND NOT C_COMPILER_SUPPORTS_MPI )
diff --git a/cmake/ecbuild_find_omp.cmake b/cmake/ecbuild_find_omp.cmake
index 882adfe..47c05c2 100644
--- a/cmake/ecbuild_find_omp.cmake
+++ b/cmake/ecbuild_find_omp.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -123,7 +123,7 @@ macro( ecbuild_find_omp )
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if( NOT _PAR_COMPONENTS )
-    message( FATAL_ERROR "No COMPONENTS were specified, looking for OMP.\n Please find with COMPONENTS C CXX Fortran " )
+    ecbuild_critical( "No COMPONENTS were specified, looking for OMP.\n Please find with COMPONENTS C CXX Fortran " )
   endif()
 
   set( _STUBS "" )
@@ -206,17 +206,24 @@ endmacro( ecbuild_find_omp )
 
 macro( ecbuild_enable_omp )
 
+  ecbuild_debug("ecbuild_enable_omp: Trying to enable OpenMP")
   ecbuild_find_omp( COMPONENTS C CXX Fortran )
 
+  ecbuild_debug_var("OMP_C_FOUND")
   if( OMP_C_FOUND )
+    ecbuild_debug("Adding ${OMP_C_FLAGS} to CMAKE_C_FLAGS")
     set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OMP_C_FLAGS}" )
   endif()
 
+  ecbuild_debug_var("OMP_CXX_FOUND")
   if( OMP_CXX_FOUND )
+    ecbuild_debug("Adding ${OMP_CXX_FLAGS} to CMAKE_CXX_FLAGS")
     set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OMP_CXX_FLAGS}" )
   endif()
 
+  ecbuild_debug_var("OMP_Fortran_FOUND")
   if( OMP_Fortran_FOUND )
+    ecbuild_debug("Adding ${OMP_Fortran_FLAGS} to CMAKE_Fortran_FLAGS")
     set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OMP_Fortran_FLAGS}" )
   endif()
 
diff --git a/cmake/ecbuild_find_package.cmake b/cmake/ecbuild_find_package.cmake
index b67b51d..f7f1a9c 100644
--- a/cmake/ecbuild_find_package.cmake
+++ b/cmake/ecbuild_find_package.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -92,18 +92,18 @@ macro( ecbuild_find_package )
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_find_package(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_find_package(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   if( NOT _PAR_NAME  )
-    message(FATAL_ERROR "The call to ecbuild_find_package() doesn't specify the NAME.")
+    ecbuild_critical("The call to ecbuild_find_package() doesn't specify the NAME.")
   endif()
 
   if( _PAR_EXACT AND NOT _PAR_VERSION )
-    message(FATAL_ERROR "Call to ecbuild_find_package() requests EXACT but doesn't specify VERSION.")
+    ecbuild_critical("Call to ecbuild_find_package() requests EXACT but doesn't specify VERSION.")
   endif()
 
-  # debug_var( _PAR_NAME )
+  # ecbuild_debug_var( _PAR_NAME )
 
   string( TOUPPER ${_PAR_NAME} pkgUPPER )
   string( TOLOWER ${_PAR_NAME} pkgLOWER )
@@ -157,9 +157,9 @@ macro( ecbuild_find_package )
     set( ${_PAR_NAME}_DIR "$ENV{${_PAR_NAME}_DIR}" )
   endif()
 
-  # Find packages quietly unless in DEVELOPER_MODE, LOG_LEVEL is DEBUG or the package is REQUIRED
+  # Find packages quietly unless in DEVELOPER_MODE or LOG_LEVEL is DEBUG
 
-  if( NOT ( DEVELOPER_MODE OR _PAR_REQUIRED ) AND ( ECBUILD_LOG_LEVEL GREATER ${ECBUILD_DEBUG} ) )
+  if( NOT DEVELOPER_MODE AND ( ECBUILD_LOG_LEVEL GREATER ${ECBUILD_DEBUG} ) )
     set( _find_quiet QUIET )
   endif()
 
@@ -191,10 +191,10 @@ macro( ecbuild_find_package )
 
     if( NOT ${_PAR_NAME}_FOUND )
       if( ${_PAR_NAME}_PATH )
-        message( FATAL_ERROR "${_PAR_NAME}_PATH was provided by user but package ${_PAR_NAME} wasn't found" )
+        ecbuild_critical( "${_PAR_NAME}_PATH was provided by user but package ${_PAR_NAME} wasn't found" )
       endif()
       if( ${pkgUPPER}_PATH )
-        message( FATAL_ERROR "${pkgUPPER}_PATH was provided by user but package ${_PAR_NAME} wasn't found" )
+        ecbuild_critical( "${pkgUPPER}_PATH was provided by user but package ${_PAR_NAME} wasn't found" )
       endif()
     endif()
 
@@ -250,7 +250,7 @@ macro( ecbuild_find_package )
       if( ${_PAR_NAME}_VERSION )
         if( _PAR_EXACT )
           if( NOT ${_PAR_NAME}_VERSION VERSION_EQUAL _PAR_VERSION )
-            message( WARNING "${PROJECT_NAME} requires (exactly) ${_PAR_NAME} = ${_PAR_VERSION} -- found ${${_PAR_NAME}_VERSION}" )
+            ecbuild_warn( "${PROJECT_NAME} requires (exactly) ${_PAR_NAME} = ${_PAR_VERSION} -- found ${${_PAR_NAME}_VERSION}" )
             set( _version_acceptable 0 )
           endif()
         else()
@@ -258,14 +258,14 @@ macro( ecbuild_find_package )
             set( _version_acceptable 1 )
           else()
             if( NOT _PAR_QUIET )
-              message( WARNING "${PROJECT_NAME} requires ${_PAR_NAME} >= ${_PAR_VERSION} -- found ${${_PAR_NAME}_VERSION}" )
+              ecbuild_warn( "${PROJECT_NAME} requires ${_PAR_NAME} >= ${_PAR_VERSION} -- found ${${_PAR_NAME}_VERSION}" )
             endif()
             set( _version_acceptable 0 )
           endif()
         endif()
       else()
         if( NOT _PAR_QUIET )
-          message( WARNING "${PROJECT_NAME} found ${_PAR_NAME} but no version information, so cannot check if satisfies ${_PAR_VERSION}" )
+          ecbuild_warn( "${PROJECT_NAME} found ${_PAR_NAME} but no version information, so cannot check if satisfies ${_PAR_VERSION}" )
         endif()
         set( _version_acceptable 0 )
       endif()
@@ -278,7 +278,7 @@ macro( ecbuild_find_package )
       set( ${pkgUPPER}_FOUND ${${_PAR_NAME}_FOUND} )
     else()
       if( NOT _PAR_QUIET )
-        message( WARNING "${PROJECT_NAME} found ${_PAR_NAME} but with unsuitable version" )
+        ecbuild_warn( "${PROJECT_NAME} found ${_PAR_NAME} but with unsuitable version" )
       endif()
       set( ${pkgUPPER}_FOUND 0 )
       set( ${_PAR_NAME}_FOUND 0 )
@@ -303,21 +303,21 @@ macro( ecbuild_find_package )
 
   if( ${_PAR_NAME}_FOUND OR ${pkgUPPER}_FOUND )
     if( NOT _PAR_QUIET )
-      message( STATUS "[${_PAR_NAME}] (${${_PAR_NAME}_VERSION})" )
+      ecbuild_info( "[${_PAR_NAME}] (${${_PAR_NAME}_VERSION})" )
       foreach( var in ITEMS INCLUDE_DIR INCLUDE_DIRS DEFINITIONS LIBRARY LIBRARIES )
         if( ${pkgUPPER}_${var} )
-          message( STATUS "   ${pkgUPPER}_${var} : [${${pkgUPPER}_${var}}]" )
+          ecbuild_info( "   ${pkgUPPER}_${var} : [${${pkgUPPER}_${var}}]" )
         elseif( ${_PAR_NAME}_${var} )
-          message( STATUS "   ${_PAR_NAME}_${var} : [${${_PAR_NAME}_${var}}]" )
+          ecbuild_info( "   ${_PAR_NAME}_${var} : [${${_PAR_NAME}_${var}}]" )
         endif()
       endforeach()
     endif()
   else()
     if( _PAR_REQUIRED )
-      message( FATAL_ERROR ${_failed_message} " !! ${PROJECT_NAME} requires package ${_PAR_NAME} !!" )
+      ecbuild_critical( ${_failed_message} " !! ${PROJECT_NAME} requires package ${_PAR_NAME} !!" )
     else()
       if( NOT _PAR_QUIET )
-        message( STATUS ${_failed_message} )
+        ecbuild_warn( ${_failed_message} )
       endif()
     endif()
   endif()
diff --git a/cmake/ecbuild_find_perl.cmake b/cmake/ecbuild_find_perl.cmake
index c615203..97b22f8 100644
--- a/cmake/ecbuild_find_perl.cmake
+++ b/cmake/ecbuild_find_perl.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -45,13 +45,13 @@ macro( ecbuild_find_perl )
   cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_p_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_find_perl(): \"${_p_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_find_perl(): \"${_p_UNPARSED_ARGUMENTS}\"")
   endif()
 
   find_package( Perl )
 
   if( NOT PERL_EXECUTABLE AND _p_REQUIRED )
-    message( FATAL_ERROR "Failed to find Perl (REQUIRED)" )
+    ecbuild_critical( "Failed to find Perl (REQUIRED)" )
   endif()
 
   if( PERL_EXECUTABLE )
diff --git a/cmake/ecbuild_find_python.cmake b/cmake/ecbuild_find_python.cmake
index c001a7b..0273951 100644
--- a/cmake/ecbuild_find_python.cmake
+++ b/cmake/ecbuild_find_python.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -14,7 +14,7 @@
 #
 # Find Python interpreter, its version and the Python libraries. ::
 #
-#   ecbuild_find_python( [ VERSION <version> ] [ REQUIRED ] )
+#   ecbuild_find_python( [ VERSION <version> ] [ REQUIRED ] [ NO_LIBS ] )
 #
 # Options
 # -------
@@ -25,14 +25,18 @@
 # REQUIRED : optional
 #   fail if Python was not found
 #
+# NO_LIBS : optional
+#   only search for the Python interpreter, not the libraries
+#
 # Output variables
 # ----------------
 #
-# The following CMake variables are set if perl was found:
+# The following CMake variables are set if python was found:
 #
 # :PYTHONINTERP_FOUND:    Python interpreter was found
 # :PYTHONLIBS_FOUND:      Python libraries were found
 # :PYTHON_FOUND:          Python was found (both interpreter and libraries)
+# :PYTHON_EXECUTABLE:     Python executable
 # :PYTHON_VERSION_MAJOR:  major version number
 # :PYTHON_VERSION_MINOR:  minor version number
 # :PYTHON_VERSION_PATCH:  patch version number
@@ -45,18 +49,18 @@
 
 set( __test_python ${CMAKE_CURRENT_LIST_DIR}/pymain.c )
 
-macro( ecbuild_find_python )
+function( ecbuild_find_python )
 
     # parse parameters
 
-    set( options REQUIRED )
+    set( options REQUIRED NO_LIBS )
     set( single_value_args VERSION )
     set( multi_value_args  )
 
     cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_p_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_find_python(): \"${_p_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_find_python(): \"${_p_UNPARSED_ARGUMENTS}\"")
     endif()
 
     # find python executable
@@ -64,7 +68,7 @@ macro( ecbuild_find_python )
     find_package( PythonInterp )
 
     if( NOT PYTHONINTERP_FOUND AND _p_REQUIRED )
-        message( FATAL_ERROR "Failed to find any Python interpreter (REQUIRED)" )
+        ecbuild_error( "Failed to find any Python interpreter (REQUIRED)" )
     endif()
 
     # find python version
@@ -74,19 +78,19 @@ macro( ecbuild_find_python )
     # endif()
     # endif()
 
-    # message( STATUS "Python version ${PYTHON_VERSION_STRING}" )
-    # debug_var(PYTHON_VERSION_MAJOR)
-    # debug_var(PYTHON_VERSION_MINOR)
-    # debug_var(PYTHON_VERSION_PATCH)
+    # ecbuild_debug( "Python version ${PYTHON_VERSION_STRING}" )
+    # ecbuild_debug_var(PYTHON_VERSION_MAJOR)
+    # ecbuild_debug_var(PYTHON_VERSION_MINOR)
+    # ecbuild_debug_var(PYTHON_VERSION_PATCH)
 
     if( PYTHONINTERP_FOUND AND DEFINED _p_VERSION )
         if( _p_VERSION VERSION_GREATER "${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.${PYTHON_VERSION_PATCH}" )
             set( PYTHONINTERP_FOUND 0 )
             set( PYTHON_EXECUTABLE "PYTHON_EXECUTABLE-NOTFOUND" )
             if( _p_REQUIRED )
-                message( FATAL_ERROR "Required python version at least ${_p_VERSION} but found only ${PYTHON_VERSION_STRING}" )
+                ecbuild_critical( "Required python version at least ${_p_VERSION} but found only ${PYTHON_VERSION_STRING}" )
             else()
-                message( WARNING "Looking for python version at least ${_p_VERSION} but found only ${PYTHON_VERSION_STRING}\nMarking Python as NOTFOUND" )
+                ecbuild_warn( "Looking for python version at least ${_p_VERSION} but found only ${PYTHON_VERSION_STRING}\nMarking Python as NOTFOUND" )
             endif()
         endif()
     endif()
@@ -94,65 +98,77 @@ macro( ecbuild_find_python )
     if( PYTHONINTERP_FOUND )
         ecbuild_debug( "ecbuild_find_python: Found Python interpreter version ${PYTHON_VERSION_STRING} at ${PYTHON_EXECUTABLE}" )
 
+        # find where python site-packages are ...
+
+        if( PYTHON_EXECUTABLE )
+            execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
+        endif()
+        ecbuild_debug( "ecbuild_find_python: PYTHON_SITE_PACKAGES=${PYTHON_SITE_PACKAGES}" )
+
+    endif()
+    if( PYTHONINTERP_FOUND AND NOT _p_NO_LIBS )
         # find python config
 
         if( PYTHON_EXECUTABLE AND EXISTS ${PYTHON_EXECUTABLE}-config )
-            set(PYTHON_CONFIG ${PYTHON_EXECUTABLE}-config CACHE PATH "" FORCE)
+            set(PYTHON_CONFIG_EXECUTABLE ${PYTHON_EXECUTABLE}-config CACHE PATH "" FORCE)
         else()
-            find_program( PYTHON_CONFIG NAMES python-config python-config${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} )
+            find_program( PYTHON_CONFIG_EXECUTABLE NAMES python-config python-config${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} )
         endif()
 
+        ecbuild_debug_var( PYTHON_CONFIG_EXECUTABLE )
+
         # find python libs
 
-        # The OpenBSD python packages have python-config's 
+        # The OpenBSD python packages have python-config's
         # that don't reliably report linking flags that will work.
-        
-        if( PYTHON_CONFIG AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD" )
-            ecbuild_debug( "ecbuild_find_python: Searching for Python include directories and libraries using ${PYTHON_CONFIG}" )
-            
-            execute_process(COMMAND "${PYTHON_CONFIG}" --ldflags
+
+        if( PYTHON_CONFIG_EXECUTABLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD" )
+            ecbuild_debug( "ecbuild_find_python: Searching for Python include directories and libraries using ${PYTHON_CONFIG_EXECUTABLE}" )
+
+            execute_process(COMMAND "${PYTHON_CONFIG_EXECUTABLE}" --ldflags
                             OUTPUT_VARIABLE PYTHON_LIBRARIES
                             OUTPUT_STRIP_TRAILING_WHITESPACE
                             ERROR_QUIET)
 
-            execute_process(COMMAND "${PYTHON_CONFIG}" --includes
-                            OUTPUT_VARIABLE PYTHON_INCLUDE_DIR
+            execute_process(COMMAND "${PYTHON_CONFIG_EXECUTABLE}" --includes
+                            OUTPUT_VARIABLE PYTHON_INCLUDE_DIRS
                             OUTPUT_STRIP_TRAILING_WHITESPACE
                             ERROR_QUIET)
 
-            string(REGEX REPLACE "^[-I]" "" PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}")
-            string(REGEX REPLACE "[ ]-I" " " PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}")
-            
-            separate_arguments(PYTHON_INCLUDE_DIR)
+            string(REGEX REPLACE "^[-I]" "" PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIRS}")
+            string(REGEX REPLACE "[ ]-I" " " PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIRS}")
+
+            separate_arguments(PYTHON_INCLUDE_DIRS)
 
         else() # revert to finding pythonlibs the standard way (cmake macro)
             ecbuild_debug( "ecbuild_find_python: Searching for Python include directories and libraries using find_package(PythonLibs)" )
-            
+
             find_package(PythonLibs)
-            if( PYTHON_INCLUDE_PATH AND NOT PYTHON_INCLUDE_DIR )
-                set(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_PATH}")
+            if( PYTHON_INCLUDE_PATH AND NOT PYTHON_INCLUDE_DIRS )
+              set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_PATH}")
             endif()
 
         endif()
 
         # Remove duplicate include directories
-        list(REMOVE_DUPLICATES PYTHON_INCLUDE_DIR)
+        list(REMOVE_DUPLICATES PYTHON_INCLUDE_DIRS)
 
-        # Test if we can link against the Python libraries and include Python.h
-        try_compile( PYTHON_LIBS_WORKING ${CMAKE_CURRENT_BINARY_DIR}
-                     ${__test_python}
-                     CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${PYTHON_INCLUDE_DIR}"
-                     LINK_LIBRARIES ${PYTHON_LIBRARIES} )
 
-        # set output variables
+        if( PYTHON_LIBRARIES AND PYTHON_INCLUDE_DIRS )
+            # Test if we can link against the Python libraries and include Python.h
+            try_compile( PYTHON_LIBS_WORKING ${CMAKE_CURRENT_BINARY_DIR}
+                         ${__test_python}
+                         CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${PYTHON_INCLUDE_DIRS}"
+                         LINK_LIBRARIES ${PYTHON_LIBRARIES} )
 
-        find_package_handle_standard_args( PythonLibs DEFAULT_MSG
-                                           PYTHON_INCLUDE_DIR PYTHON_LIBRARIES PYTHON_LIBS_WORKING )
-        ecbuild_debug( "ecbuild_find_python: PYTHON_INCLUDE_DIR=${PYTHON_INCLUDE_DIR}" )
-        ecbuild_debug( "ecbuild_find_python: PYTHON_LIBRARIES=${PYTHON_LIBRARIES}" )
+            # set output variables
 
-        set( PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR} )
-        set( PYTHON_INCLUDE_PATH ${PYTHON_INCLUDE_DIR} )
+            find_package_handle_standard_args( PythonLibs DEFAULT_MSG
+                                               PYTHON_INCLUDE_DIRS PYTHON_LIBRARIES PYTHON_LIBS_WORKING )
+            ecbuild_debug( "ecbuild_find_python: PYTHON_INCLUDE_DIRS=${PYTHON_INCLUDE_DIRS}" )
+            ecbuild_debug( "ecbuild_find_python: PYTHON_LIBRARIES=${PYTHON_LIBRARIES}" )
+
+        endif()
 
         # Also set PYTHON_FOUND and Python_FOUND for compatibility with ecbuild_add_option
         if( PYTHONLIBS_FOUND )
@@ -160,18 +176,30 @@ macro( ecbuild_find_python )
           set( Python_FOUND 1 )
         endif()
 
-        # find where python site-packages are ...
-
-        execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
-        ecbuild_debug( "ecbuild_find_python: PYTHON_SITE_PACKAGES=${PYTHON_SITE_PACKAGES}" )
-
     endif()
 
-#    debug_var( PYTHONINTERP_FOUND )
-#    debug_var( PYTHON_EXECUTABLE )
-#    debug_var( PYTHONLIBS_FOUND )
-#    debug_var( PYTHON_INCLUDE_DIRS )
-#    debug_var( PYTHON_LIBRARIES )
-#    debug_var( PYTHON_SITE_PACKAGES )
-
-endmacro( ecbuild_find_python )
+    ecbuild_debug_var( PYTHONINTERP_FOUND )
+    ecbuild_debug_var( PYTHON_FOUND )
+    ecbuild_debug_var( PYTHON_EXECUTABLE )
+    ecbuild_debug_var( PYTHON_CONFIG_EXECUTABLE )
+    ecbuild_debug_var( PYTHON_VERSION_MAJOR )
+    ecbuild_debug_var( PYTHON_VERSION_MINOR )
+    ecbuild_debug_var( PYTHON_VERSION_PATCH )
+    ecbuild_debug_var( PYTHON_VERSION_STRING )
+    ecbuild_debug_var( PYTHON_INCLUDE_DIRS )
+    ecbuild_debug_var( PYTHON_LIBRARIES )
+    ecbuild_debug_var( PYTHON_SITE_PACKAGES )
+
+    set( PYTHONINTERP_FOUND    ${PYTHONINTERP_FOUND} PARENT_SCOPE )
+    set( PYTHONLIBS_FOUND      ${PYTHONLIBS_FOUND} PARENT_SCOPE )
+    set( PYTHON_FOUND          ${PYTHON_FOUND} PARENT_SCOPE )
+    set( PYTHON_EXECUTABLE     ${PYTHON_EXECUTABLE} PARENT_SCOPE )
+    set( PYTHON_VERSION_MAJOR  ${PYTHON_VERSION_MAJOR} PARENT_SCOPE )
+    set( PYTHON_VERSION_MINOR  ${PYTHON_VERSION_MINOR} PARENT_SCOPE )
+    set( PYTHON_VERSION_PATCH  ${PYTHON_VERSION_PATCH} PARENT_SCOPE )
+    set( PYTHON_VERSION_STRING ${PYTHON_VERSION_STRING} PARENT_SCOPE )
+    set( PYTHON_INCLUDE_DIRS   ${PYTHON_INCLUDE_DIRS} PARENT_SCOPE )
+    set( PYTHON_LIBRARIES      ${PYTHON_LIBRARIES} PARENT_SCOPE )
+    set( PYTHON_SITE_PACKAGES  ${PYTHON_SITE_PACKAGES} PARENT_SCOPE )
+
+endfunction( ecbuild_find_python )
diff --git a/cmake/ecbuild_generate_config_headers.cmake b/cmake/ecbuild_generate_config_headers.cmake
index 93cbb1f..6bc8301 100644
--- a/cmake/ecbuild_generate_config_headers.cmake
+++ b/cmake/ecbuild_generate_config_headers.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -36,7 +36,7 @@ function( ecbuild_generate_config_headers )
   cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_generate_config_headers(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_generate_config_headers(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   # generate list of compiler flags
diff --git a/cmake/ecbuild_generate_fortran_interfaces.cmake b/cmake/ecbuild_generate_fortran_interfaces.cmake
new file mode 100644
index 0000000..d586248
--- /dev/null
+++ b/cmake/ecbuild_generate_fortran_interfaces.cmake
@@ -0,0 +1,143 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+##############################################################################
+#.rst:
+#
+# ecbuild_generate_fortran_interfaces
+# ===================================
+#
+# Generates interfaces form the Fortran source files. ::
+#
+#   ecbuild_generate_fortran_interfaces()
+#
+# Options
+# -------
+#
+# TARGET : required
+#   target name
+#
+##############################################################################
+
+function( ecbuild_generate_fortran_interfaces )
+
+  find_program( FCM_EXECUTABLE fcm REQUIRED DOC "Fortran interface generator" )
+
+  if( NOT FCM_EXECUTABLE )
+    ecbuild_error( "ecbuild_generate_fortran_interfaces: fcm executable not found." )
+  endif()
+
+  set( options )
+  set( single_value_args TARGET DESTINATION PARALLEL INCLUDE_DIRS GENERATED SOURCE_DIR FCM_CONFIG_FILE )
+  set( multi_value_args DIRECTORIES )
+
+  cmake_parse_arguments( P "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
+
+  if( NOT DEFINED P_TARGET )
+    ecbuild_error( "ecbuild_generate_fortran_interfaces: TARGET argument missing" )
+  endif()
+
+  if( NOT DEFINED P_DESTINATION )
+    ecbuild_error( "ecbuild_generate_fortran_interfaces: DESTINATION argument missing" )
+  endif()
+
+  if( NOT DEFINED P_DIRECTORIES )
+    ecbuild_error( "ecbuild_generate_fortran_interfaces: DIRECTORIES argument missing" )
+  endif()
+
+  if( NOT DEFINED P_PARALLEL OR (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") )
+    set( P_PARALLEL 1 )
+  endif()
+
+  ecbuild_debug_var( P_PARALLEL )
+
+  if( NOT DEFINED P_SOURCE_DIR )
+    ecbuild_error( "ecbuild_generate_fortran_interfaces: SOURCE_DIR argument missing")
+  endif()
+
+  if( DEFINED P_FCM_CONFIG_FILE )
+    set( FCM_CONFIG_FILE ${P_FCM_CONFIG_FILE} )
+  endif()
+
+  if( NOT FCM_CONFIG_FILE )
+    set( PROJECT_FCM_CONFIG_FILE "${PROJECT_SOURCE_DIR}/cmake/fcm-make-interfaces.cfg" )
+    if( EXISTS ${PROJECT_FCM_CONFIG_FILE} )
+      set( FCM_CONFIG_FILE ${PROJECT_FCM_CONFIG_FILE} )
+      ecbuild_debug( "ecbuild_generate_fortran_interfaces: fcm configuration found in ${PROJECT_FCM_CONFIG_FILE}" )
+    else()
+      ecbuild_debug( "ecbuild_generate_fortran_interfaces: fcm configuration not found in ${PROJECT_FCM_CONFIG_FILE}" )
+    endif()
+  endif()
+
+  if( NOT FCM_CONFIG_FILE )
+    set( DEFAULT_FCM_CONFIG_FILE "${ECBUILD_MACROS_DIR}/fcm-make-interfaces.cfg" )
+    if( EXISTS ${DEFAULT_FCM_CONFIG_FILE} )
+      set( FCM_CONFIG_FILE ${DEFAULT_FCM_CONFIG_FILE} )
+      ecbuild_debug( "ecbuild_generate_fortran_interfaces: fcm configuration found in ${DEFAULT_FCM_CONFIG_FILE}" )
+    else()
+      ecbuild_debug( "ecbuild_generate_fortran_interfaces: fcm configuration not found in ${DEFAULT_FCM_CONFIG_FILE}" )
+    endif()
+  endif()
+
+  ecbuild_debug_var( FCM_CONFIG_FILE )
+
+  if( NOT EXISTS ${FCM_CONFIG_FILE} )
+    ecbuild_error( "ecbuild_generate_fortran_interfaces: needs fcm configuration in ${FCM_CONFIG_FILE}" )
+  endif()
+
+  foreach( _srcdir ${P_DIRECTORIES} )
+    if( _srcdir MATCHES "/$" )
+      ecbuild_critical("ecbuild_generate_fortran_interfaces: directory ${_srcdir} must not end with /")
+    endif()
+    ecbuild_list_add_pattern( LIST fortran_files SOURCE_DIR ${P_SOURCE_DIR} GLOB ${_srcdir}/*.F* )
+  endforeach()
+
+  string( REPLACE ";" " " _srcdirs "${P_DIRECTORIES}" )
+
+  set( _cnt 0 )
+  foreach( file ${_fortran_files} )
+    if( ${${SRC}/file} IS_NEWER_THAN ${${SRC}/file} )
+      set( run_fcm 1 )
+    endif()
+  endforeach()
+
+  foreach( fortran_file ${fortran_files} )
+    #list( APPEND fullpath_fortran_files ${CMAKE_CURRENT_SOURCE_DIR}/${fortran_file} )
+      get_filename_component(base ${fortran_file} NAME_WE)
+      set( interface_file "${CMAKE_CURRENT_BINARY_DIR}/interfaces/include/${base}.intfb.h" )
+      list( APPEND interface_files ${interface_file} )
+      set_source_files_properties( ${interface_file} PROPERTIES GENERATED TRUE )
+      math(EXPR _cnt "${_cnt}+1")
+  endforeach()
+
+  ecbuild_info("Target ${P_TARGET} will generate ${_cnt} interface files using FCM")
+
+
+
+  if( DEFINED P_GENERATED )
+    set( ${P_GENERATED} ${interface_files} PARENT_SCOPE )
+  endif()
+
+  set( include_dir ${CMAKE_CURRENT_BINARY_DIR}/${P_DESTINATION}/interfaces/include )
+  set( ${P_INCLUDE_DIRS} ${include_dir} PARENT_SCOPE )
+
+  execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${include_dir}
+                   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )
+
+    add_custom_command(
+      OUTPUT  "${P_DESTINATION}/${P_TARGET}.timestamp"
+      COMMAND ${FCM_EXECUTABLE} make -j ${P_PARALLEL} --config-file=${FCM_CONFIG_FILE} interfaces.ns-incl=${_srcdirs} interfaces.source=${P_SOURCE_DIR}
+      COMMAND touch "${P_TARGET}.timestamp"
+      DEPENDS ${fortran_files}
+      COMMENT "Generating ${_cnt} interface files for target ${P_TARGET}"
+      WORKING_DIRECTORY ${P_DESTINATION} VERBATIM )
+
+    add_custom_target( ${P_TARGET} DEPENDS ${P_DESTINATION}/${P_TARGET}.timestamp )
+
+
+endfunction( ecbuild_generate_fortran_interfaces )
diff --git a/cmake/ecbuild_generate_rpc.cmake b/cmake/ecbuild_generate_rpc.cmake
index 45a00ba..f06624f 100644
--- a/cmake/ecbuild_generate_rpc.cmake
+++ b/cmake/ecbuild_generate_rpc.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -45,20 +45,20 @@ macro( ecbuild_generate_rpc )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_generate_rpc(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_generate_rpc(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT _PAR_SOURCE  )
-      message(FATAL_ERROR "The call to ecbuild_generate_rpc() doesn't specify the SOURCE file.")
+      ecbuild_critical("The call to ecbuild_generate_rpc() doesn't specify the SOURCE file.")
     endif()
 
 # optional
 #    if( NOT _PAR_DEPENDANT )
-#      message(FATAL_ERROR "The call to ecbuild_generate_rpc() doesn't specify the DEPENDANT files.")
+#      ecbuild_critical("The call to ecbuild_generate_rpc() doesn't specify the DEPENDANT files.")
 #    endif()
 
     if( NOT DEFINED _PAR_TARGET_H AND NOT DEFINED _PAR_TARGET_C )
-      message(FATAL_ERROR "The call to ecbuild_generate_rpc() doesn't specify the _PAR_TARGET_H or _PAR_TARGET_C files.")
+      ecbuild_critical("The call to ecbuild_generate_rpc() doesn't specify the _PAR_TARGET_H or _PAR_TARGET_C files.")
     endif()
 
     find_package( RPCGEN REQUIRED )
diff --git a/cmake/ecbuild_generate_yy.cmake b/cmake/ecbuild_generate_yy.cmake
index 5ef2dad..35088fb 100644
--- a/cmake/ecbuild_generate_yy.cmake
+++ b/cmake/ecbuild_generate_yy.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -19,6 +19,7 @@
 #                        LEX <file>
 #                        DEPENDANT <file1> [ <file2> ... ]
 #                        [ SOURCE_DIR <dir> ]
+#                        [ OUTPUT_DIRECTORY <dir> ]
 #                        [ YACC_TARGET <file> ]
 #                        [ LEX_TARGET <file> ]
 #                        [ YACC_FLAGS <flags> ]
@@ -45,6 +46,9 @@
 # SOURCE_DIR : optional, defaults to CMAKE_CURRENT_SOURCE_DIR
 #   directory where yacc and lex source files are located
 #
+# OUTPUT_DIRECTORY : optional, defaults to CMAKE_CURRENT_BINARY_DIR
+#   output directory for yacc and lex target files
+#
 # YACC_TARGET : optional, defaults to YACC
 #   base name of the generated yacc target file (without .c extension)
 #
@@ -72,29 +76,29 @@ macro( ecbuild_generate_yy )
   ecbuild_find_perl( REQUIRED )
 
   set( options )
-  set( single_value_args YYPREFIX YACC LEX SOURCE_DIR YACC_TARGET LEX_TARGET LEX_FLAGS YACC_FLAGS FLEX_FLAGS BISON_FLAGS )
+  set( single_value_args YYPREFIX YACC LEX SOURCE_DIR OUTPUT_DIRECTORY YACC_TARGET LEX_TARGET LEX_FLAGS YACC_FLAGS FLEX_FLAGS BISON_FLAGS )
   set( multi_value_args  DEPENDANT )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_generate_yy(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_generate_yy(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   if( NOT _PAR_YYPREFIX  )
-    message(FATAL_ERROR "The call to ecbuild_generate_yy() doesn't specify the YYPREFIX.")
+    ecbuild_critical("The call to ecbuild_generate_yy() doesn't specify the YYPREFIX.")
   endif()
 
   if( NOT _PAR_YACC  )
-    message(FATAL_ERROR "The call to ecbuild_generate_yy() doesn't specify the YACC file.")
+    ecbuild_critical("The call to ecbuild_generate_yy() doesn't specify the YACC file.")
   endif()
 
   if( NOT _PAR_LEX  )
-    message(FATAL_ERROR "The call to ecbuild_generate_yy() doesn't specify the LEX file.")
+    ecbuild_critical("The call to ecbuild_generate_yy() doesn't specify the LEX file.")
   endif()
 
   if( NOT _PAR_DEPENDANT )
-    message(FATAL_ERROR "The call to ecbuild_generate_yy() doesn't specify the DEPENDANT files.")
+    ecbuild_critical("The call to ecbuild_generate_yy() doesn't specify the DEPENDANT files.")
   endif()
 
   set( BASE ${_PAR_YYPREFIX}_${_PAR_YACC} )
@@ -125,19 +129,23 @@ macro( ecbuild_generate_yy )
     set ( _PAR_LEX_TARGET ${_PAR_LEX} )
   endif()
 
-  set( ${BASE}yy_tmp_target ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_YACC_TARGET}.tmp.c )
-  set( ${BASE}yh_tmp_target ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_YACC_TARGET}.tmp.h )
-  set( ${BASE}yl_tmp_target ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_LEX_TARGET}.tmp.c )
-
-  set( ${BASE}yy_target ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_YACC_TARGET}.c )
-  set( ${BASE}yh_target ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_YACC_TARGET}.h )
-  set( ${BASE}yl_target ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_LEX_TARGET}.c )
-
   if( NOT _PAR_SOURCE_DIR )
     set( _PAR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} )
   endif()
 
-  add_custom_target( ${_PAR_YYPREFIX}_${DEPENDANT} SOURCES ${_PAR_SOURCE_DIR}/${_PAR_YACC}.y ${_PAR_SOURCE_DIR}/${_PAR_LEX}.l )
+  if( NOT _PAR_OUTPUT_DIRECTORY )
+    set( _PAR_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} )
+  else()
+    file( MAKE_DIRECTORY ${_PAR_OUTPUT_DIRECTORY} )
+  endif()
+
+  set( ${BASE}yy_tmp_target ${_PAR_OUTPUT_DIRECTORY}/${_PAR_YACC_TARGET}.tmp.c )
+  set( ${BASE}yh_tmp_target ${_PAR_OUTPUT_DIRECTORY}/${_PAR_YACC_TARGET}.tmp.h )
+  set( ${BASE}yl_tmp_target ${_PAR_OUTPUT_DIRECTORY}/${_PAR_LEX_TARGET}.tmp.c )
+
+  set( ${BASE}yy_target ${_PAR_OUTPUT_DIRECTORY}/${_PAR_YACC_TARGET}.c )
+  set( ${BASE}yh_target ${_PAR_OUTPUT_DIRECTORY}/${_PAR_YACC_TARGET}.h )
+  set( ${BASE}yl_target ${_PAR_OUTPUT_DIRECTORY}/${_PAR_LEX_TARGET}.c )
 
   if( BISON_FOUND )
     bison_target( ${BASE}_parser ${_PAR_SOURCE_DIR}/${_PAR_YACC}.y ${${BASE}yy_tmp_target} COMPILE_FLAGS "${_PAR_BISON_FLAGS}" )
diff --git a/cmake/ecbuild_get_cxx11_flags.cmake b/cmake/ecbuild_get_cxx11_flags.cmake
index 5bfed07..47d0e1a 100644
--- a/cmake/ecbuild_get_cxx11_flags.cmake
+++ b/cmake/ecbuild_get_cxx11_flags.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -65,7 +65,7 @@ function( ecbuild_get_cxx11_flags CXX11_FLAGS )
   elseif(has_std_cpp0x)
     set(${CXX11_FLAGS} "-std=c++0x" PARENT_SCOPE)
   else()
-    message(FATAL ERROR "Could not detect C++11 flags")
+    ecbuild_critical("Could not detect C++11 flags")
   endif(has_std_gnupp11)
 
 endfunction()
diff --git a/cmake/ecbuild_get_date.cmake b/cmake/ecbuild_get_date.cmake
index ec308a3..730ea54 100644
--- a/cmake/ecbuild_get_date.cmake
+++ b/cmake/ecbuild_get_date.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -24,7 +24,7 @@ macro(ecbuild_get_date RESULT)
         execute_process(COMMAND "date" "+%d/%m/%Y" OUTPUT_VARIABLE ${RESULT})
         string(REGEX REPLACE "(..)/(..)/(....).*" "\\3.\\2.\\1" ${RESULT} ${${RESULT}})
     else()
-        message(SEND_ERROR "date not implemented")
+        ecbuild_error("date not implemented")
     endif()
 endmacro(ecbuild_get_date)
 
@@ -46,7 +46,7 @@ macro(ecbuild_get_timestamp RESULT)
         execute_process(COMMAND "date" "+%Y/%m/%d/%H/%M/%S" OUTPUT_VARIABLE _timestamp)
         string(REGEX REPLACE "(....)/(..)/(..)/(..)/(..)/(..).*" "\\1\\2\\3\\4\\5\\6" ${RESULT} ${_timestamp})
     else()
-        message(WARNING "This is NOT UNIX - timestamp not implemented")
+        ecbuild_warn("This is NOT UNIX - timestamp not implemented")
     endif()
 endmacro(ecbuild_get_timestamp)
 
diff --git a/cmake/ecbuild_get_resources.cmake b/cmake/ecbuild_get_resources.cmake
index da824d9..f531d82 100644
--- a/cmake/ecbuild_get_resources.cmake
+++ b/cmake/ecbuild_get_resources.cmake
@@ -1,8 +1,8 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
+# (C) Copyright 1996-2016 ECMWF.
+#
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -19,17 +19,17 @@ macro( ecbuild_get_resources )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-        message(FATAL_ERROR "Unknown keywords given to ecbuild_get_resources(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+        ecbuild_critical("Unknown keywords given to ecbuild_get_resources(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT _PAR_LIST )
-        message( FATAL_ERROR "Missing parameter LIST of resources in macro ecbuild_get_resources()" )
+        ecbuild_critical( "Missing parameter LIST of resources in macro ecbuild_get_resources()" )
     endif()
 
     if( NOT _PAR_TO_DIR )
 		set( _PAR_TO_DIR ${CMAKE_CURRENT_BINARY_DIR} )
 	endif()
-	
+
     list( LENGTH _PAR_LIST _rsize )
     math( EXPR _max "${_rsize}-1" )
     foreach( i RANGE 0 ${_max} 2 )
@@ -39,14 +39,14 @@ macro( ecbuild_get_resources )
         list( GET _PAR_LIST ${i}  r  )
         list( GET _PAR_LIST ${in} rh )
 
-#        debug_var( r  )
-#        debug_var( rh )
+#        ecbuild_debug_var( r  )
+#        ecbuild_debug_var( rh )
 
         get_filename_component( rf ${r} NAME )
 
         file( DOWNLOAD ${r} ${_PAR_TO_DIR}/${rf} EXPECTED_HASH SHA1=${rh} )
 
     endforeach()
-		
+
 
 endmacro()
diff --git a/cmake/ecbuild_get_test_data.cmake b/cmake/ecbuild_get_test_data.cmake
index 8106c65..c19a760 100644
--- a/cmake/ecbuild_get_test_data.cmake
+++ b/cmake/ecbuild_get_test_data.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -42,7 +42,7 @@ function( _download_test_data _p_NAME _p_DIRNAME )
     else()
 
       if( WARNING_CANNOT_DOWNLOAD_TEST_DATA )
-        message( WARNING "Couldn't find curl neither wget -- cannot download test data from server.\nPlease obtain the test data by other means and pleace it in the build directory." )
+        ecbuild_warn( "Couldn't find curl neither wget -- cannot download test data from server.\nPlease obtain the test data by other means and pleace it in the build directory." )
         set( WARNING_CANNOT_DOWNLOAD_TEST_DATA 1 CACHE INTERNAL "Couldn't find curl neither wget -- cannot download test data from server" )
         mark_as_advanced( WARNING_CANNOT_DOWNLOAD_TEST_DATA )
       endif()
@@ -130,7 +130,7 @@ function( ecbuild_get_test_data )
     cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_p_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_get_test_data(): \"${_p_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_get_test_data(): \"${_p_UNPARSED_ARGUMENTS}\"")
     endif()
 
     file( RELATIVE_PATH currdir ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} )
@@ -138,7 +138,7 @@ function( ecbuild_get_test_data )
     ### check parameters
 
     if( NOT _p_NAME )
-      message(FATAL_ERROR "ecbuild_get_test_data() expects a NAME")
+      ecbuild_critical("ecbuild_get_test_data() expects a NAME")
     endif()
 
     if( NOT _p_TARGET )
@@ -151,10 +151,10 @@ function( ecbuild_get_test_data )
       set( _p_DIRNAME ${PROJECT_NAME}/${currdir} )
     endif()
 
-#    debug_var( _p_TARGET )
-#    debug_var( _p_NAME )
-#    debug_var( _p_URL )
-#    debug_var( _p_DIRNAME )
+#    ecbuild_debug_var( _p_TARGET )
+#    ecbuild_debug_var( _p_NAME )
+#    ecbuild_debug_var( _p_URL )
+#    ecbuild_debug_var( _p_DIRNAME )
 
     # download the data
 
@@ -168,8 +168,6 @@ function( ecbuild_get_test_data )
 
         if( NOT _p_MD5 AND NOT _p_SHA1) # use remote md5
 
-#            message( STATUS " ---  getting MD5 sum " )
-
             add_custom_command( OUTPUT ${_p_NAME}.localmd5
                                 COMMAND ${CMAKE_COMMAND} -E md5sum ${_p_NAME} > ${_p_NAME}.localmd5
                                 DEPENDS ${_p_NAME} )
@@ -187,8 +185,6 @@ function( ecbuild_get_test_data )
 
         if( _p_MD5 )
 
-#            message( STATUS " ---  computing MD5 sum [${_p_MD5}]" )
-
             add_custom_command( OUTPUT ${_p_NAME}.localmd5
                                 COMMAND ${CMAKE_COMMAND} -E md5sum ${_p_NAME} > ${_p_NAME}.localmd5
                                 DEPENDS ${_p_NAME} )
@@ -206,8 +202,6 @@ function( ecbuild_get_test_data )
 
 #        if( _p_SHA1 )
 
-##            message( STATUS " ---  computing SHA1 sum [${_p_SHA1}]" )
-
 #            find_program( SHASUM NAMES sha1sum shasum )
 #            if( SHASUM )
 #                add_custom_command( OUTPUT ${_p_NAME}.localsha1
@@ -313,22 +307,22 @@ function( ecbuild_get_test_multidata )
     cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_p_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_get_test_data(): \"${_p_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_get_test_data(): \"${_p_UNPARSED_ARGUMENTS}\"")
     endif()
 
     ### check parameters
 
     if( NOT _p_NAMES )
-      message(FATAL_ERROR "ecbuild_get_test_data() expects a NAMES")
+      ecbuild_critical("ecbuild_get_test_data() expects a NAMES")
     endif()
 
     if( NOT _p_TARGET )
-      message(FATAL_ERROR "ecbuild_get_test_data() expects a TARGET")
+      ecbuild_critical("ecbuild_get_test_data() expects a TARGET")
     endif()
 
-#    debug_var( _p_TARGET )
-#    debug_var( _p_NAME )
-#    debug_var( _p_DIRNAME )
+#    ecbuild_debug_var( _p_TARGET )
+#    ecbuild_debug_var( _p_NAME )
+#    ecbuild_debug_var( _p_DIRNAME )
 
     if( _p_EXTRACT )
         set( _extract EXTRACT )
@@ -372,11 +366,11 @@ endfunction()\n\n" )
             set( _md5 MD5 ${_md5} )
         endif()
 
-        #debug_var(_f)
-        #debug_var(_file)
-        #debug_var(_dirname)
-        #debug_var(_name)
-        #debug_var(_md5)
+        #ecbuild_debug_var(_f)
+        #ecbuild_debug_var(_file)
+        #ecbuild_debug_var(_dirname)
+        #ecbuild_debug_var(_name)
+        #ecbuild_debug_var(_md5)
 
         ecbuild_get_test_data(
             TARGET __get_data_${_p_TARGET}_${_name}
diff --git a/cmake/ecbuild_git.cmake b/cmake/ecbuild_git.cmake
index 42124db..0a378a6 100644
--- a/cmake/ecbuild_git.cmake
+++ b/cmake/ecbuild_git.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -8,6 +8,8 @@
 
 set( ECBUILD_GIT  ON  CACHE BOOL "Turn on/off ecbuild_git() function" )
 
+mark_as_advanced(ECBUILD_GIT)
+
 if( ECBUILD_GIT )
 
   find_package(Git)
@@ -78,15 +80,15 @@ macro( ecbuild_git )
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}" ${_FIRST_ARG} ${ARGN} )
 
   if( DEFINED _PAR_BRANCH AND DEFINED _PAR_TAG )
-    message( FATAL_ERROR "Cannot defined both BRANCH and TAG in macro ecbuild_git" )
+    ecbuild_critical( "Cannot defined both BRANCH and TAG in macro ecbuild_git" )
   endif()
 
   if( _PAR_UPDATE AND _PAR_NOREMOTE )
-    message( FATAL_ERROR "Cannot pass both NOREMOTE and UPDATE in macro ecbuild_git" )
+    ecbuild_critical( "Cannot pass both NOREMOTE and UPDATE in macro ecbuild_git" )
   endif()
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_git(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_git(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   if( ECBUILD_GIT )
@@ -100,15 +102,15 @@ macro( ecbuild_git )
 
     if( NOT EXISTS "${_PAR_DIR}" )
 
-      message( STATUS "Cloning ${_PAR_PROJECT} from ${_PAR_URL} into ${_PAR_DIR}...")
+      ecbuild_info( "Cloning ${_PAR_PROJECT} from ${_PAR_URL} into ${_PAR_DIR}...")
       execute_process(
         COMMAND ${GIT_EXECUTABLE} "clone" ${_PAR_URL} ${clone_args} ${_PAR_DIR} "-q"
         RESULT_VARIABLE nok ERROR_VARIABLE error
         WORKING_DIRECTORY "${PARENT_DIR}")
       if(nok)
-        message(FATAL_ERROR "${_PAR_DIR} git clone failed: ${error}\n")
+        ecbuild_critical("${_PAR_DIR} git clone failed:\n  ${GIT_EXECUTABLE} clone ${_PAR_URL} ${clone_args} ${_PAR_DIR} -q\n  ${error}\n")
       endif()
-      message( STATUS "${_PAR_DIR} retrieved.")
+      ecbuild_info( "${_PAR_DIR} retrieved.")
       set( _needs_switch 1 )
 
     endif()
@@ -122,7 +124,7 @@ macro( ecbuild_git )
                        OUTPUT_STRIP_TRAILING_WHITESPACE
                        WORKING_DIRECTORY "${ABS_PAR_DIR}" )
       if(nok)
-        message(STATUS "git rev-parse HEAD on ${_PAR_DIR} failed:\n ${error}")
+        ecbuild_info("git rev-parse HEAD on ${_PAR_DIR} failed:\n ${error}")
       endif()
 
       execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
@@ -130,10 +132,9 @@ macro( ecbuild_git )
                        OUTPUT_STRIP_TRAILING_WHITESPACE
                        WORKING_DIRECTORY "${ABS_PAR_DIR}" )
       if( nok OR _current_branch STREQUAL "" )
-        message(STATUS "git rev-parse --abbrev-ref HEAD on ${_PAR_DIR} failed:\n ${error}")
+        ecbuild_info("git rev-parse --abbrev-ref HEAD on ${_PAR_DIR} failed:\n ${error}")
       endif()
 
-      #message(STATUS "git describe --exact-match --abbrev=0 @ ${ABS_PAR_DIR}")
       execute_process( COMMAND ${GIT_EXECUTABLE} describe --exact-match --abbrev=0
                        OUTPUT_VARIABLE _current_tag RESULT_VARIABLE nok ERROR_VARIABLE error
                        OUTPUT_STRIP_TRAILING_WHITESPACE  ERROR_STRIP_TRAILING_WHITESPACE
@@ -143,18 +144,17 @@ macro( ecbuild_git )
         unset( _current_tag )
       else()
         if( nok )
-          message(STATUS "git describe --exact-match --abbrev=0 on ${_PAR_DIR} failed:\n ${error}")
+          ecbuild_info("git describe --exact-match --abbrev=0 on ${_PAR_DIR} failed:\n ${error}")
         endif()
       endif()
 
       if( NOT _current_tag ) # try nother method
-        #message(STATUS "git name-rev --tags --name-only @ ${ABS_PAR_DIR}")
         execute_process( COMMAND ${GIT_EXECUTABLE} name-rev --tags --name-only ${_sha1}
                          OUTPUT_VARIABLE _current_tag RESULT_VARIABLE nok ERROR_VARIABLE error
                          OUTPUT_STRIP_TRAILING_WHITESPACE
                          WORKING_DIRECTORY "${ABS_PAR_DIR}" )
         if( nok OR _current_tag STREQUAL "" )
-          message(STATUS "git name-rev --tags --name-only on ${_PAR_DIR} failed:\n ${error}")
+          ecbuild_info("git name-rev --tags --name-only on ${_PAR_DIR} failed:\n ${error}")
         endif()
       endif()
 
@@ -183,20 +183,11 @@ macro( ecbuild_git )
 
     if( _needs_switch AND IS_DIRECTORY "${_PAR_DIR}/.git" )
 
-      # debug_here( ABS_PAR_DIR )
-      # debug_here( _sha1 )
-      # debug_here( _current_branch )
-      # debug_here( _current_tag )
-      # debug_here( _PAR_TAG )
-      # debug_here( _PAR_BRANCH )
-      # debug_here( _needs_switch )
-      # debug_here( _PAR_UPDATE )
-
       if( DEFINED _PAR_BRANCH )
         set ( _gitref ${_PAR_BRANCH} )
-        message(STATUS "Updating ${_PAR_PROJECT} to head of BRANCH ${_PAR_BRANCH}...")
+        ecbuild_info("Updating ${_PAR_PROJECT} to head of BRANCH ${_PAR_BRANCH}...")
       else()
-        message(STATUS "Updating ${_PAR_PROJECT} to TAG ${_PAR_TAG}...")
+        ecbuild_info("Updating ${_PAR_PROJECT} to TAG ${_PAR_TAG}...")
         set ( _gitref ${_PAR_TAG} )
       endif()
 
@@ -204,34 +195,34 @@ macro( ecbuild_git )
 
       if( NOT _PAR_NOREMOTE )
 
-        message(STATUS "git fetch --all @ ${ABS_PAR_DIR}")
+        ecbuild_info("git fetch --all @ ${ABS_PAR_DIR}")
         execute_process( COMMAND "${GIT_EXECUTABLE}" fetch --all -q
                          RESULT_VARIABLE nok ERROR_VARIABLE error
                          WORKING_DIRECTORY "${ABS_PAR_DIR}")
         if(nok)
-          message(STATUS "git fetch --all in ${_PAR_DIR} failed:\n ${error}")
+          ecbuild_warn("git fetch --all in ${_PAR_DIR} failed:\n ${error}")
         endif()
 
-        message(STATUS "git fetch --all --tags @ ${ABS_PAR_DIR}")
+        ecbuild_info("git fetch --all --tags @ ${ABS_PAR_DIR}")
         execute_process( COMMAND "${GIT_EXECUTABLE}" fetch --all --tags -q
                          RESULT_VARIABLE nok ERROR_VARIABLE error
                          WORKING_DIRECTORY "${ABS_PAR_DIR}")
         if(nok)
-          message(STATUS "git fetch --all --tags in ${_PAR_DIR} failed:\n ${error}")
+          ecbuild_warn("git fetch --all --tags in ${_PAR_DIR} failed:\n ${error}")
         endif()
 
       else()
-        message(STATUS "${_PAR_DIR} marked NOREMOTE : Skipping git fetch")
+        ecbuild_info("${_PAR_DIR} marked NOREMOTE : Skipping git fetch")
       endif()
 
       # checking out gitref
 
-      message(STATUS "git checkout ${_gitref} @ ${ABS_PAR_DIR}")
+      ecbuild_info("git checkout ${_gitref} @ ${ABS_PAR_DIR}")
       execute_process( COMMAND "${GIT_EXECUTABLE}" checkout -q "${_gitref}"
                        RESULT_VARIABLE nok ERROR_VARIABLE error
                        WORKING_DIRECTORY "${ABS_PAR_DIR}")
       if(nok)
-        message(FATAL_ERROR "git checkout ${_gitref} on ${_PAR_DIR} failed:\n ${error}")
+        ecbuild_critical("git checkout ${_gitref} on ${_PAR_DIR} failed:\n  ${GIT_EXECUTABLE} checkout -q ${_gitref}\n  ${error}")
       endif()
 
       if( DEFINED _PAR_BRANCH AND _PAR_UPDATE ) #############################################################################
@@ -240,7 +231,7 @@ macro( ecbuild_git )
                          RESULT_VARIABLE nok ERROR_VARIABLE error
                          WORKING_DIRECTORY "${ABS_PAR_DIR}")
         if(nok)
-          message(STATUS "git pull of branch ${_PAR_BRANCH} on ${_PAR_DIR} failed:\n ${error}")
+          ecbuild_warn("git pull of branch ${_PAR_BRANCH} on ${_PAR_DIR} failed:\n ${error}")
         endif()
 
       endif() ####################################################################################
diff --git a/cmake/ecbuild_install_project.cmake b/cmake/ecbuild_install_project.cmake
index d53f110..2ba472e 100644
--- a/cmake/ecbuild_install_project.cmake
+++ b/cmake/ecbuild_install_project.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -33,7 +33,7 @@
 # the project with cpack and exports the configuration and targets for other
 # projects to use.
 #
-# In a top-level project, the following files are generated:
+# Unless ECBUILD_SKIP_<PNAME>_EXPORT is set, the following files are generated:
 #
 # :<project>-config.cmake:         default project configuration
 # :<project>-config-version.cmake: project version number
@@ -49,7 +49,7 @@
 # and ``<project>-config-version.cmake``.
 #
 # In DEVELOPER_MODE, the build tree location is also added to the CMake user
-# package registry.
+# package registry for top level projects.
 #
 # If the project is added as a subdirectory, the following CMake variables
 # are set in the parent scope:
@@ -70,7 +70,6 @@
 #
 ##############################################################################
 
-
 macro( ecbuild_install_project )
 
     set( options )
@@ -80,11 +79,22 @@ macro( ecbuild_install_project )
     cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
     if(_PAR_UNPARSED_ARGUMENTS)
-      message(FATAL_ERROR "Unknown keywords given to ecbuild_install_project(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+      ecbuild_critical("Unknown keywords given to ecbuild_install_project(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
     endif()
 
     if( NOT _PAR_NAME  )
-      message(FATAL_ERROR "The call to ecbuild_install_project() doesn't specify the NAME.")
+      ecbuild_critical("The call to ecbuild_install_project() doesn't specify the NAME.")
+    endif()
+
+    ### EXTRA TARGETS #####################################################
+
+    # added here to avoid adding another macro call at the end of each project,
+
+    if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
+
+        ecbuild_define_libs_and_execs_targets()
+        ecbuild_define_links_target()
+
     endif()
 
     ### PACKAGING ########################################################
@@ -160,6 +170,8 @@ macro( ecbuild_install_project )
                PATHS ${ECBUILD_MACROS_DIR}/../toolchains
                      ${ECBUILD_MACROS_DIR}/../share/ecbuild/toolchains )
 
+    mark_as_advanced( ECBUILD_TOOLCHAIN_DIR )
+
     if( ECBUILD_TOOLCHAIN_DIR )
       list( APPEND CPACK_SOURCE_INSTALLED_DIRECTORIES "${ECBUILD_TOOLCHAIN_DIR}" "share/ecbuild/toolchains/" )
     endif()
@@ -169,6 +181,8 @@ macro( ecbuild_install_project )
                   PATHS ${ECBUILD_MACROS_DIR}/../bin
                         ${ECBUILD_MACROS_DIR}/../../../bin )
 
+    mark_as_advanced( ECBUILD_SCRIPT )
+
     if( ECBUILD_SCRIPT )
       get_filename_component( ECBUILD_BIN_DIR ${ECBUILD_SCRIPT} PATH )
       list( APPEND CPACK_SOURCE_INSTALLED_DIRECTORIES "${ECBUILD_BIN_DIR}" "bin/" )
@@ -187,7 +201,7 @@ macro( ecbuild_install_project )
         set( ${PNAME}_HAVE_${_f} 1 )
     endforeach()
 
-    message( STATUS "${PROJECT_NAME_CAPS}_TPLS: ${${PROJECT_NAME_CAPS}_TPLS}" )
+    ecbuild_info( "${PROJECT_NAME_CAPS}_TPLS: ${${PROJECT_NAME_CAPS}_TPLS}" )
 
     foreach( _tpl ${${PNAME}_TPLS} )
         string( TOUPPER ${_tpl} _TPL )
@@ -219,16 +233,9 @@ macro( ecbuild_install_project )
         endif()
     endforeach()
 
-    # TOP-LEVEL PROJECT EXPORT
-
-    if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
-
-        # exports the package for use from the build-tree but only in DEVELOPER_MODE
-        # inserts <package> into the CMake user package registry
-
-        if( DEVELOPER_MODE )
-            export( PACKAGE ${PROJECT_NAME} )
-        endif()
+    # Generate the project .cmake config files
+    # All variables here must be (sub)project specific in order to work within bundles
+    if ( NOT ECBUILD_SKIP_${PNAME}_EXPORT )
 
         set( _template_config "${ECBUILD_MACROS_DIR}/project-config.cmake.in" )
         if( EXISTS ${LNAME}-config.cmake.in )
@@ -242,7 +249,9 @@ macro( ecbuild_install_project )
 
         # project-config-version.cmake -- format ([0-9]+).([0-9]+).([0-9]+)
 
-        set( PACKAGE_VERSION "${${PNAME}_VERSION}" )
+        set( PACKAGE_VERSION        "${${PNAME}_VERSION}" )
+        set( PACKAGE_GIT_SHA1       "${${PNAME}_GIT_SHA1}" )
+        set( PACKAGE_GIT_SHA1_SHORT "${${PNAME}_GIT_SHA1_SHORT}" )
 
         configure_file( "${_template_config_version}" "${PROJECT_BINARY_DIR}/${LNAME}-config-version.cmake" @ONLY )
 
@@ -297,6 +306,7 @@ macro( ecbuild_install_project )
         # If <project>-import.cmake.in exist in source tree, configure it to
         # the build tree and install the configured version
         if( EXISTS "${PROJECT_SOURCE_DIR}/${CONF_IMPORT_FILE}.in" )
+          ecbuild_debug( "Found ${PROJECT_SOURCE_DIR}/${CONF_IMPORT_FILE}.in - configuring to ${PROJECT_BINARY_DIR}/${CONF_IMPORT_FILE}" )
           configure_file( "${PROJECT_SOURCE_DIR}/${CONF_IMPORT_FILE}.in"
                           "${PROJECT_BINARY_DIR}/${CONF_IMPORT_FILE}" @ONLY )
           install( FILES "${PROJECT_BINARY_DIR}/${CONF_IMPORT_FILE}"
@@ -304,10 +314,13 @@ macro( ecbuild_install_project )
         # Otherwise, if <project>-import.cmake exist in source tree, copy it to
         # the build tree and install it
         elseif( EXISTS "${PROJECT_SOURCE_DIR}/${CONF_IMPORT_FILE}" )
+          ecbuild_debug( "Found ${PROJECT_SOURCE_DIR}/${CONF_IMPORT_FILE} - copying to ${PROJECT_BINARY_DIR}/${CONF_IMPORT_FILE}" )
           configure_file( "${PROJECT_SOURCE_DIR}/${CONF_IMPORT_FILE}"
                           "${PROJECT_BINARY_DIR}/${CONF_IMPORT_FILE}" COPYONLY )
           install( FILES "${PROJECT_SOURCE_DIR}/${CONF_IMPORT_FILE}"
                    DESTINATION "${INSTALL_CMAKE_DIR}" )
+        else()
+          ecbuild_debug( "No ${CONF_IMPORT_FILE} found in ${PROJECT_SOURCE_DIR}" )
         endif()
 
         set( _lname_config "${PROJECT_BINARY_DIR}/${LNAME}-config.cmake")
@@ -318,13 +331,28 @@ macro( ecbuild_install_project )
         file( REMOVE ${_lname_config}.tpls.in )
 
         foreach( _tpl ${${PNAME}_TPLS} )
+
             string( TOUPPER ${_tpl} TPL )
-            if( ${TPL}_IMPORT_FILE )
+
+            if( ${TPL}_IMPORT_FILE ) # ecBuild packages should trigger this if they export themselves
+
+              ecbuild_debug( "Adding TPL ${TPL} import file to ${_lname_config}.tpls.in" )
                 set( __import_file "${${TPL}_IMPORT_FILE}" )
                 file( APPEND "${_lname_config}.tpls.in" "if( NOT ${TPL}_IMPORT_FILE )\n" )
                 file( APPEND "${_lname_config}.tpls.in" "    include( \"${__import_file}\" OPTIONAL )\n" )
                 file( APPEND "${_lname_config}.tpls.in" "endif()\n" )
+
+            elseif( ${TPL}_CONFIG ) # cmake built packages (e.g. CGAL) may have exported their targets
+
+              ecbuild_debug( "Adding TPL ${TPL} import file to ${_lname_config}.tpls.in" )
+                set( __import_file "${${TPL}_CONFIG}" )
+                file( APPEND "${_lname_config}.tpls.in" "if( NOT ${TPL}_CONFIG )\n" )
+                file( APPEND "${_lname_config}.tpls.in" "    include( \"${__import_file}\" OPTIONAL )\n" )
+                file( APPEND "${_lname_config}.tpls.in" "    set( ${TPL}_CONFIG \"${__import_file}\" )\n" )
+                file( APPEND "${_lname_config}.tpls.in" "endif()\n" )
+
             endif()
+
         endforeach()
 
         if( EXISTS "${_lname_config}.tpls.in" )
@@ -361,14 +389,30 @@ macro( ecbuild_install_project )
         # install the export
 
         if( ${PROJECT_NAME}_ALL_EXES OR ${PROJECT_NAME}_ALL_LIBS )
-            install( EXPORT ${CMAKE_PROJECT_NAME}-targets DESTINATION "${INSTALL_CMAKE_DIR}" )
+            install( EXPORT ${PROJECT_NAME}-targets
+                     DESTINATION "${INSTALL_CMAKE_DIR}" )
+        endif()
+
+    endif()  # if ( NOT ECBUILD_SKIP_${PNAME}_EXPORT )
+
+    # exports the package for use from the build-tree but only in DEVELOPER_MODE
+    # inserts <package> into the CMake user package registry
+
+    if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
+
+        if( DEVELOPER_MODE )
+            export( PACKAGE ${PROJECT_NAME} )
         endif()
 
     else()
 
+    # export variables for upper projects
+
         set( ${PNAME}_FOUND             TRUE                          PARENT_SCOPE )
         set( ${PROJECT_NAME}_FOUND      TRUE                          PARENT_SCOPE )
         set( ${PNAME}_VERSION           ${${PNAME}_VERSION}           PARENT_SCOPE )
+        set( ${PNAME}_GIT_SHA1          ${${PNAME}_GIT_SHA1}          PARENT_SCOPE )
+        set( ${PNAME}_GIT_SHA1_SHORT    ${${PNAME}_GIT_SHA1_SHORT}    PARENT_SCOPE )
         set( ${PROJECT_NAME}_VERSION    ${${PNAME}_VERSION}           PARENT_SCOPE )
         set( ${PNAME}_INCLUDE_DIRS      ${${PNAME}_INCLUDE_DIRS}      PARENT_SCOPE )
         set( ${PNAME}_LIBRARIES         ${${PNAME}_LIBRARIES}         PARENT_SCOPE )
@@ -382,6 +426,7 @@ macro( ecbuild_install_project )
         foreach( _f ${${PNAME}_FEATURES} )
             set( ${PNAME}_HAVE_${_f} ${${PNAME}_HAVE_${_f}} PARENT_SCOPE )
         endforeach()
-     endif()
+
+    endif()
 
 endmacro( ecbuild_install_project )
diff --git a/cmake/ecbuild_links_target.cmake b/cmake/ecbuild_links_target.cmake
deleted file mode 100644
index c881c0d..0000000
--- a/cmake/ecbuild_links_target.cmake
+++ /dev/null
@@ -1,74 +0,0 @@
-# (C) Copyright 1996-2015 ECMWF.
-#
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-# In applying this licence, ECMWF does not waive the privileges and immunities
-# granted to it by virtue of its status as an intergovernmental organisation nor
-# does it submit to any jurisdiction.
-
-############################################################################################
-# macro for adding a link to library on a development system
-
-set( EC_ALL_EXES "" CACHE INTERNAL "" )
-set( EC_ALL_LIBS "" CACHE INTERNAL "" )
-
-macro( ecbuild_link_exe TARGET  FILENAME FILEPATH )
-
-    if( DEFINED EC_LINK_DIR )
-       add_custom_target(${TARGET}_link
-          COMMAND ${CMAKE_COMMAND} -E make_directory ${EC_LINK_DIR}
-          COMMAND ${CMAKE_COMMAND} -E make_directory ${EC_LINK_DIR}/bin
-          COMMAND ${CMAKE_COMMAND} -E remove ${EC_LINK_DIR}/bin/${FILENAME}
-          COMMAND ${CMAKE_COMMAND} -E create_symlink ${FILEPATH} ${EC_LINK_DIR}/bin/${FILENAME}
-          DEPENDS ${TARGET}
-          COMMENT "link ${EC_LINK_DIR}/bin/${FILENAME}" )
-    endif()
-
-    set( EC_ALL_EXES ${EC_ALL_EXES} ${TARGET} CACHE INTERNAL "" )
-
-endmacro( ecbuild_link_exe  )
-
-###############################################################################
-# macro for adding a link to library on a development system
-
-macro( ecbuild_link_lib  TARGET FILENAME FILEPATH )
-
-    if( DEFINED EC_LINK_DIR )
-       add_custom_target(${TARGET}_link
-          COMMAND ${CMAKE_COMMAND} -E make_directory ${EC_LINK_DIR}
-          COMMAND ${CMAKE_COMMAND} -E make_directory ${EC_LINK_DIR}/lib
-          COMMAND ${CMAKE_COMMAND} -E remove ${EC_LINK_DIR}/lib/${FILENAME}
-          COMMAND ${CMAKE_COMMAND} -E create_symlink ${FILEPATH} ${EC_LINK_DIR}/lib/${FILENAME}
-          DEPENDS ${TARGET}
-          COMMENT "link ${EC_LINK_DIR}/lib/${FILENAME}" )
-    endif()
-
-    set( EC_ALL_LIBS ${EC_ALL_LIBS} ${TARGET} CACHE INTERNAL "" )
-
-endmacro( ecbuild_link_lib  )
-
-############################################################################################
-# define make links target
-
-macro( ecbuild_define_links_target )
-
-  if( DEFINED EC_LINK_DIR )
-
-    foreach( lib ${EC_ALL_LIBS} )
-      list( APPEND ec_link_libs ${lib}_link )
-    endforeach()
-    foreach( exe ${EC_ALL_EXES} )
-      list( APPEND ec_link_exes ${exe}_link )
-    endforeach()
-
-    add_custom_target( links DEPENDS ${ec_link_libs} ${ec_link_exes} )
-
-     #   debug_var( EC_ALL_EXES )
-     #   debug_var( ec_link_exes )
-
-     #  debug_var( EC_ALL_LIBS )
-     #   debug_var( ec_link_libs )
-
-  endif()
-
-endmacro(ecbuild_define_links_target)
diff --git a/cmake/ecbuild_list_add_pattern.cmake b/cmake/ecbuild_list_add_pattern.cmake
new file mode 100644
index 0000000..0f68217
--- /dev/null
+++ b/cmake/ecbuild_list_add_pattern.cmake
@@ -0,0 +1,102 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+##############################################################################
+#.rst:
+#
+# ecbuild_list_add_pattern
+# ========================
+#
+# Exclude items from a list that match a list of patterns. ::
+#
+#   ecbuild_list_add_pattern( LIST <input_list>
+#                             GLOB <pattern1> [ <pattern2> ... ]
+#                             [ SOURCE_DIR <source_dir> ]
+#                             [ QUIET ] )
+#
+# Options
+# -------
+#
+# LIST : required
+#   list variable to be appended to
+#
+# GLOB : required
+#   Regex pattern of exclusion
+#
+# SOURCE_DIR : optional
+#   Directory from where to start search
+#
+# QUIET  : optional
+#   Don't warn if patterns don't match
+#
+##############################################################################
+
+function( ecbuild_list_add_pattern )
+
+  set( options QUIET )
+  set( single_value_args LIST SOURCE_DIR )
+  set( multi_value_args  GLOB )
+
+  cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
+
+  if(_p_UNPARSED_ARGUMENTS)
+    ecbuild_critical("Unknown keywords given to ecbuild_list_add_pattern(): \"${_p_UNPARSED_ARGUMENTS}\"")
+  endif()
+
+  if( NOT _p_LIST  )
+    ecbuild_critical("The call to ecbuild_list_add_pattern() doesn't specify the LIST.")
+  endif()
+
+  if( NOT _p_GLOB )
+    ecbuild_critical("The call to ecbuild_list_add_pattern() doesn't specify the GLOB.")
+  endif()
+
+  #####
+
+  set( input_list ${${_p_LIST}} )
+  unset( matched_files )
+
+  foreach( pattern ${_p_GLOB} )
+
+    if( IS_ABSOLUTE ${pattern} )
+      ecbuild_debug( "ecbuild_list_add_pattern: Adding ${pattern}" )
+      file( GLOB_RECURSE matched_files ${pattern} )
+    else()
+
+      if(_p_SOURCE_DIR)
+        if( IS_ABSOLUTE ${_p_SOURCE_DIR} )
+          ecbuild_debug( "ecbuild_list_add_pattern: Adding ${_p_SOURCE_DIR}/${pattern}" )
+          file( GLOB_RECURSE matched_files ${_p_SOURCE_DIR}/${pattern} )
+        else()
+          ecbuild_debug( "ecbuild_list_add_pattern: Adding ${_p_SOURCE_DIR}/${pattern}" )
+          file( GLOB_RECURSE matched_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${_p_SOURCE_DIR}/${pattern} )
+        endif()
+      else()
+        ecbuild_debug( "ecbuild_list_add_pattern: Adding ${pattern} ")
+        file( GLOB_RECURSE matched_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${pattern} )
+      endif()
+
+    endif()
+
+    if(matched_files)
+      ecbuild_debug( "ecbuild_list_add_pattern: Found ${matched_files}" )
+      list( APPEND input_list ${matched_files} )
+      list( REMOVE_DUPLICATES input_list )
+      set( ${_p_LIST} ${input_list} PARENT_SCOPE )
+    else()
+      if(NOT _p_QUIET)
+        ecbuild_warn( "ecbuild_list_add_pattern: no matches found for patterns ${pattern}" )
+      else()
+        ecbuild_debug( "ecbuild_list_add_pattern:no matches found for patterns ${pattern}" )
+      endif()
+    endif()
+
+  endforeach()
+
+
+endfunction(ecbuild_list_add_pattern)
diff --git a/cmake/ecbuild_list_exclude_pattern.cmake b/cmake/ecbuild_list_exclude_pattern.cmake
new file mode 100644
index 0000000..7e02f47
--- /dev/null
+++ b/cmake/ecbuild_list_exclude_pattern.cmake
@@ -0,0 +1,88 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation nor
+# does it submit to any jurisdiction.
+
+##############################################################################
+#.rst:
+#
+# ecbuild_list_exclude_pattern
+# ============================
+#
+# Exclude items from a list that match a list of patterns. ::
+#
+#   ecbuild_list_exclude_pattern( LIST <input_list>
+#                                 REGEX <regex1> [ <regex2> ... ]
+#                                 [ QUIET ] )
+#
+# Options
+# -------
+#
+# LIST : required
+#   list variable to be cleaned
+#
+# REGEX : required
+#   Regex pattern of exclusions
+#
+# QUIET  : optional
+#   Don't warn if patterns don't match
+#
+##############################################################################
+
+function( ecbuild_list_exclude_pattern )
+
+  set( options QUIET )
+  set( single_value_args LIST )
+  set( multi_value_args  REGEX )
+
+  cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
+
+  if(_p_UNPARSED_ARGUMENTS)
+    ecbuild_critical("Unknown keywords given to ecbuild_list_exclude_pattern(): \"${_p_UNPARSED_ARGUMENTS}\"")
+  endif()
+
+  if( NOT _p_LIST  )
+    ecbuild_critical("The call to ecbuild_list_exclude_pattern() doesn't specify the LIST.")
+  endif()
+
+  if( NOT _p_REGEX )
+    ecbuild_critical("The call to ecbuild_list_exclude_pattern() doesn't specify the REGEX.")
+  endif()
+
+  #####
+
+  set( result "" )
+  set( matches_found 0 )
+
+  # ecbuild_debug_var(_p_REGEX)
+
+  foreach( item ${${_p_LIST}} )
+
+    set( _keep 1 )
+
+    foreach( pattern ${_p_REGEX} )
+        if( ${item} MATCHES ${pattern} )
+            set( _keep 0 )
+            set( matches_found 1 )
+        endif()
+    endforeach()
+    if( _keep )
+        list( APPEND result ${item} )
+#    else()
+#      ecbuild_warn( "removing ${item}" )
+    endif()
+
+  endforeach()
+
+  if( matches_found )
+      set( ${_p_LIST} ${result} PARENT_SCOPE )
+  else()
+    if( NOT _p_QUIET )
+        ecbuild_warn( "ecbuild_list_exclude_pattern: no matches found for patterns ${_p_REGEX} in ${_p_LIST}" )
+    endif()
+  endif()
+
+endfunction(ecbuild_list_exclude_pattern)
diff --git a/cmake/ecbuild_list_extra_search_paths.cmake b/cmake/ecbuild_list_extra_search_paths.cmake
index 0768a48..b81f062 100644
--- a/cmake/ecbuild_list_extra_search_paths.cmake
+++ b/cmake/ecbuild_list_extra_search_paths.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -14,11 +14,11 @@
 
 function( ecbuild_list_extra_search_paths pkg var )
 
-  message( DEPRECATION " ecbuild_list_extra_search_paths should no longer be"
-           " used and is going to be removed in a future version of ecBuild." )
+  ecbuild_deprecate( " ecbuild_list_extra_search_paths should no longer be"
+                     " used and is going to be removed in a future version of ecBuild." )
 
-	# debug_var( pkg )
-	# debug_var( var )
+	# ecbuild_debug_var( pkg )
+	# ecbuild_debug_var( var )
 
 	string( TOUPPER ${pkg} _PKG )
 
@@ -75,7 +75,7 @@ function( ecbuild_list_extra_search_paths pkg var )
   ecbuild_debug("ecbuild_list_extra_search_paths(${pkg}): setting ${var} to ${${var}}")
 	set( ${var} ${${var}} PARENT_SCOPE )
 
-# debug_var( ${var} )
+# ecbuild_debug_var( ${var} )
 
 endfunction()
 
diff --git a/cmake/ecbuild_list_macros.cmake b/cmake/ecbuild_list_macros.cmake
index a4152c7..176a161 100644
--- a/cmake/ecbuild_list_macros.cmake
+++ b/cmake/ecbuild_list_macros.cmake
@@ -1,8 +1,8 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
+# (C) Copyright 1996-2016 ECMWF.
+#
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -56,35 +56,3 @@ function( MAP_GET _map _key _var )
 	set( ${_var} "${_${_map}_${_key}}" PARENT_SCOPE )
 endfunction(MAP_GET)
 
-##############################################################################
-# function to remove items from a list that match a list of patterns
-#
-# examples:
-#
-#   ecbuild_list_remove_pattern( mylist "foo;bar" VAR )
-#
-
-function(ecbuild_list_remove_pattern _list _patterns _var)
-
-#debug_var(  _list )
-#debug_var(  _patterns )
-#debug_var(  _var )
-
-    foreach( _elem ${_list} )
-        set( _keep TRUE)
-        foreach( _pat ${_patterns} )
-            if( ${_elem} MATCHES ${_pat} )
-                set( _keep FALSE)
-            endif()
-        endforeach()
-        if( _keep )
-            list( APPEND _result ${_elem} )
-        endif()
-
-    endforeach()
-
-#debug_var(  _result )
-
-    set( ${_var} "${_result}" PARENT_SCOPE )
-
-endfunction(ecbuild_list_remove_pattern)
diff --git a/cmake/ecbuild_log.cmake b/cmake/ecbuild_log.cmake
index fbb2349..ec99495 100644
--- a/cmake/ecbuild_log.cmake
+++ b/cmake/ecbuild_log.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -12,30 +12,52 @@
 # Logging
 # =======
 #
-# ecBuild provides macros for logging based on a log level set by the user,
+# ecBuild provides functions for logging based on a log level set by the user,
 # similar to the Python logging module:
 #
-# :ecbuild_debug:    logs a ``STATUS`` message if log level <= ``DEBUG``
-# :ecbuild_info:     logs a ``STATUS`` message if log level <= ``INFO``
-# :ecbuild_warn:     logs a ``WARNING`` message if log level <= ``WARN``
-# :ecbuild_error:    logs a ``SEND_ERROR`` message if log level <= ``ERROR``
-# :ecbuild_critical: logs a ``FATAL_ERROR`` message if log level <= ``CRITICAL``
+# :ecbuild_debug:     logs a ``STATUS`` message if log level <= ``DEBUG``
+# :ecbuild_info:      logs a ``STATUS`` message if log level <= ``INFO``
+# :ecbuild_warn:      logs a ``WARNING`` message if log level <= ``WARN``
+# :ecbuild_error:     logs a ``SEND_ERROR`` message if log level <= ``ERROR``
+# :ecbuild_critical:  logs a ``FATAL_ERROR`` message if log level <= ``CRITICAL``
+# :ecbuild_deprecate: logs a ``DEPRECATION`` message
+#
+# Furthermore there are auxilliary functions for outputting CMake variables,
+# CMake lists and environment variables if the log level is ``DEBUG``:
+#
+# :ecbuild_debug_var:     logs given CMake variables if log level <= ``DEBUG``
+# :ecbuild_debug_list:    logs given CMake lists if log level <= ``DEBUG``
+# :ecbuild_debug_env_var: logs given environment variables if log level <= ``DEBUG``
+#
+# To log a message to the ecBuild log file only at a given log level, use ::
+#
+#   ecbuild_log( <level> <msg> )
 #
 # Input variables
 # ---------------
 #
 # CMake variables controlling logging behaviour:
 #
+# ECBUILD_LOG_FILE : path
+#   set the log file, defaults to ``${CMAKE_BINARY_DIR}/ecbuild.log``
+#
+#   All ecBuild log functions write their messages to this log file with a time
+#   stamp. Messages emitted by CMake directly cannot be logged to file.
+#
 # ECBUILD_LOG_LEVEL : string, one of DEBUG, INFO, WARN, ERROR, CRITICAL, OFF
-#   set the desired log level, OFF to disable logging altogether
+#   desired log level, defaults to ``INFO``, ``OFF`` to disable logging
 #
 # ECBUILD_NO_COLOUR : bool
 #   if set, does not colour log output (by default log output is coloured)
 #
+# ECBUILD_NO_DEPRECATIONS : bool
+#   if set, does not output deprecation messages (only set this if you *really*
+#   know what you are doing!)
+#
 # Usage
 # -----
 #
-# The macros ``ecbuild_debug`` and ``ecbuild_info`` can be used to output
+# The functions ``ecbuild_debug`` and ``ecbuild_info`` can be used to output
 # messages which are not printed by default. Many ecBuild macros use this
 # facility to log debugging hints. When debugging a CMake run, users can use
 # ``-DECBUILD_LOG_LEVEL=DEBUG`` to get detailed diagnostics.
@@ -70,7 +92,7 @@ set(ECBUILD_ERROR    40)
 set(ECBUILD_CRITICAL 50)
 
 if( NOT DEFINED ECBUILD_LOG_LEVEL )
-  set(ECBUILD_LOG_LEVEL ${ECBUILD_WARN})
+  set(ECBUILD_LOG_LEVEL ${ECBUILD_INFO})
 elseif( NOT ECBUILD_LOG_LEVEL )
   set(ECBUILD_LOG_LEVEL 60)
 elseif( ECBUILD_LOG_LEVEL STREQUAL "DEBUG" )
@@ -88,42 +110,147 @@ else()
   set(ECBUILD_LOG_LEVEL ${ECBUILD_WARN})
 endif()
 
+if( NOT DEFINED ECBUILD_LOG_FILE )
+  set( ECBUILD_LOG_FILE ${CMAKE_BINARY_DIR}/ecbuild.log )
+endif()
+
 ##############################################################################
 
-macro( ecbuild_debug MSG )
+function( ecbuild_log LEVEL )
+  string( REPLACE ";" " " MSG "${ARGN}" )
+  string( TIMESTAMP _time )
+  file( APPEND ${ECBUILD_LOG_FILE} "${_time} - ${LEVEL} - ${MSG}\n" )
+endfunction( ecbuild_log )
+
+##############################################################################
+
+function( ecbuild_debug )
+  string( REPLACE ";" " " MSG "${ARGV}" )
+  ecbuild_log(DEBUG "${MSG}")
   if( ECBUILD_LOG_LEVEL LESS 11)
     message(STATUS "${Blue}DEBUG - ${MSG}${ColourReset}")
   endif()
-endmacro( ecbuild_debug )
+endfunction( ecbuild_debug )
 
 ##############################################################################
 
-macro( ecbuild_info MSG )
+function( ecbuild_info )
+  string( REPLACE ";" " " MSG "${ARGV}" )
+  ecbuild_log(INFO "${MSG}")
   if( ECBUILD_LOG_LEVEL LESS 21)
-    message(STATUS "${Green}INFO - ${MSG}${ColourReset}")
+    message(STATUS "${MSG}")
   endif()
-endmacro( ecbuild_info )
+endfunction( ecbuild_info )
 
 ##############################################################################
 
-macro( ecbuild_warn MSG )
+function( ecbuild_warn )
+  string( REPLACE ";" " " MSG "${ARGV}" )
+  ecbuild_log(WARNING "${MSG}")
   if( ECBUILD_LOG_LEVEL LESS 31)
     message(WARNING "${Yellow}WARN - ${MSG}${ColourReset}")
   endif()
-endmacro( ecbuild_warn )
+endfunction( ecbuild_warn )
 
 ##############################################################################
 
-macro( ecbuild_error MSG )
+function( ecbuild_error )
+  string( REPLACE ";" " " MSG "${ARGV}" )
+  ecbuild_log(ERROR "${MSG}")
   if( ECBUILD_LOG_LEVEL LESS 41)
     message(SEND_ERROR "${BoldRed}ERROR - ${MSG}${ColourReset}")
   endif()
-endmacro( ecbuild_error )
+endfunction( ecbuild_error )
+
+##############################################################################
+
+function( ecbuild_deprecate )
+  string(REPLACE ";" " " MSG ${ARGV})
+  ecbuild_log(DEPRECATION "${MSG}")
+  if( NOT ECBUILD_NO_DEPRECATIONS )
+    message(DEPRECATION "${BoldRed}${MSG}${ColourReset}")
+  endif()
+endfunction( ecbuild_deprecate )
 
 ##############################################################################
 
-macro( ecbuild_critical MSG )
+function( ecbuild_critical )
+  string(REPLACE ";" " " MSG ${ARGV})
+  ecbuild_log(FATAL_ERROR "${MSG}")
   if( ECBUILD_LOG_LEVEL LESS 51)
     message(FATAL_ERROR "${BoldMagenta}CRITICAL - ${MSG}${ColourReset}")
   endif()
-endmacro( ecbuild_critical )
+endfunction( ecbuild_critical )
+
+##############################################################################
+# function for debugging CMake variables
+
+function( ecbuild_debug_var )
+  foreach( VAR ${ARGV} )
+    ecbuild_log(DEBUG "${VAR} : ${${VAR}}")
+    if( ECBUILD_LOG_LEVEL LESS 11)
+      message(STATUS "${Blue}DEBUG - ${VAR} : ${${VAR}}${ColourReset}")
+    endif()
+  endforeach()
+endfunction()
+
+##############################################################################
+# function for debugging CMake lists
+
+function( ecbuild_debug_list )
+  foreach( VAR ${ARGV} )
+    ecbuild_log(DEBUG "${VAR} : ${${VAR}}")
+    foreach( _elem ${${VAR}} )
+      ecbuild_log( DEBUG "  ${_elem}" )
+    endforeach()
+    if( ECBUILD_LOG_LEVEL LESS 11)
+      message( STATUS "${Blue}DEBUG - ${VAR}" )
+      foreach( _elem ${${VAR}} )
+        message( STATUS "  ${_elem}" )
+      endforeach()
+      message(STATUS "${ColourReset}")
+    endif()
+  endforeach()
+endfunction()
+
+##############################################################################
+# function for debugging environment variables
+
+function( ecbuild_debug_env_var )
+  foreach( VAR ${ARGV} )
+    ecbuild_log(DEBUG "ENV ${VAR} : $ENV{${VAR}}")
+    if( ECBUILD_LOG_LEVEL LESS 11)
+      message(STATUS "${Blue}DEBUG - ENV ${VAR} [$ENV{${VAR}}]${ColourReset}")
+    endif()
+  endforeach()
+endfunction()
+
+##############################################################################
+# macro for debugging a cmake variable
+
+macro( debug_var VAR )
+
+    message( WARNING "DEPRECATED debug_var() -- ${VAR} [${${VAR}}]" )
+
+endmacro()
+
+##############################################################################
+# macro for debugging a cmake list
+
+macro( debug_list VAR )
+
+    message( WARNING "DEPRECATED debug_list() -- ${VAR}:" )
+    foreach( _elem ${${VAR}} )
+      message( WARNING "  ${_elem}" )
+    endforeach()
+
+endmacro()
+
+##############################################################################
+# macro for debugging a environment variable within cmake
+
+macro( debug_env_var VAR )
+
+    message( WARNING "DEPRECATED debug_env_var() -- ENV ${VAR} [$ENV{${VAR}}]" )
+
+endmacro()
diff --git a/cmake/ecbuild_pkgconfig.cmake b/cmake/ecbuild_pkgconfig.cmake
index 6db3726..6f62977 100644
--- a/cmake/ecbuild_pkgconfig.cmake
+++ b/cmake/ecbuild_pkgconfig.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -312,7 +312,7 @@ function( ecbuild_pkgconfig )
   string( TOLOWER ${PROJECT_NAME} LNAME )
 
   if(_PAR_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_add_executable(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_add_executable(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
   endif()
 
   unset( PKGCONFIG_LANGUAGES )
@@ -412,7 +412,7 @@ function( ecbuild_pkgconfig )
   endif()
 
   configure_file( ${_PAR_TEMPLATE} "${CMAKE_BINARY_DIR}/${_PAR_FILENAME}" @ONLY )
-  message( STATUS "pkg-config file created: ${_PAR_FILENAME}" )
+  ecbuild_info( "pkg-config file created: ${_PAR_FILENAME}" )
 
   install( FILES ${CMAKE_BINARY_DIR}/${_PAR_FILENAME}
            DESTINATION ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}/pkgconfig/
diff --git a/cmake/ecbuild_policies.cmake b/cmake/ecbuild_policies.cmake
index 06f856b..36ab7fe 100644
--- a/cmake/ecbuild_policies.cmake
+++ b/cmake/ecbuild_policies.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -6,13 +6,17 @@
 # granted to it by virtue of its status as an intergovernmental organisation
 # nor does it submit to any jurisdiction.
 
-###############################################################################
-# define cmake policies
+##############################################################################
+#
+# ecBuild Policies
+# ================
 #
 # NOTE: This file needs to be included with NO_POLICY_SCOPE or it will have no
 #       effect!
 # NOTE: Policies 1 through 17 will be set to NEW by requiring CMake 2.8.4 i.e.
 #       calling cmake_minimum_required( VERSION 2.8.4 FATAL_ERROR )
+#
+##############################################################################
 
 # allow for empty spaces around library names 
 if( POLICY CMP0004 )
diff --git a/cmake/ecbuild_print_summary.cmake b/cmake/ecbuild_print_summary.cmake
index d4bffba..4cf05cc 100644
--- a/cmake/ecbuild_print_summary.cmake
+++ b/cmake/ecbuild_print_summary.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -28,9 +28,9 @@ macro( ecbuild_print_summary )
 
   if( EXISTS ${PROJECT_SOURCE_DIR}/project_summary.cmake )
 
-    message( STATUS "---------------------------------------------------------" )
-    message( STATUS "Project ${PROJECT_NAME} summary" )
-    message( STATUS "---------------------------------------------------------" )
+    ecbuild_info( "---------------------------------------------------------" )
+    ecbuild_info( "Project ${PROJECT_NAME} summary" )
+    ecbuild_info( "---------------------------------------------------------" )
 
     include( ${PROJECT_SOURCE_DIR}/project_summary.cmake )
 
@@ -38,58 +38,56 @@ macro( ecbuild_print_summary )
 
   if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
 
-    ecbuild_define_links_target()
-
     get_property( langs GLOBAL PROPERTY ENABLED_LANGUAGES )
 
-    message( STATUS "---------------------------------------------------------" )
+    ecbuild_info( "---------------------------------------------------------" )
     if( NOT ${DEVELOPER_MODE} )
-      message( STATUS "Build summary" )
+      ecbuild_info( "Build summary" )
     else()
-      message( STATUS "Build summary -- ( DEVELOPER_MODE )" )
+      ecbuild_info( "Build summary -- ( DEVELOPER_MODE )" )
     endif()
-    message( STATUS "---------------------------------------------------------" )
+    ecbuild_info( "---------------------------------------------------------" )
 
-    message( STATUS "system : [${BUILD_SITE}] [${CMAKE_SYSTEM}] [${EC_OS_NAME}.${EC_OS_BITS}]" )
-    message( STATUS "processor        : [${CMAKE_SYSTEM_PROCESSOR}]" )
+    ecbuild_info( "system : [${BUILD_SITE}] [${CMAKE_SYSTEM}] [${EC_OS_NAME}.${EC_OS_BITS}]" )
+    ecbuild_info( "processor        : [${CMAKE_SYSTEM_PROCESSOR}]" )
     if( EC_BIG_ENDIAN )
-      message( STATUS "endiness         : Big Endian -- IEEE [${IEEE_BE}]" )
+      ecbuild_info( "endiness         : Big Endian -- IEEE [${IEEE_BE}]" )
     endif()
     if( EC_LITTLE_ENDIAN )
-      message( STATUS "endiness         : Little Endian -- IEEE [${IEEE_LE}]" )
+      ecbuild_info( "endiness         : Little Endian -- IEEE [${IEEE_LE}]" )
     endif()
-    message( STATUS "build type       : [${CMAKE_BUILD_TYPE}]" )
-    message( STATUS "timestamp        : [${EC_BUILD_TIMESTAMP}]" )
-    message( STATUS "install prefix   : [${CMAKE_INSTALL_PREFIX}]" )
+    ecbuild_info( "build type       : [${CMAKE_BUILD_TYPE}]" )
+    ecbuild_info( "timestamp        : [${EC_BUILD_TIMESTAMP}]" )
+    ecbuild_info( "install prefix   : [${CMAKE_INSTALL_PREFIX}]" )
     if( EC_LINK_DIR )
-      message( STATUS "links prefix     : [${EC_LINK_DIR}]" )
+      ecbuild_info( "links prefix     : [${EC_LINK_DIR}]" )
     endif()
-    message( STATUS "---------------------------------------------------------" )
+    ecbuild_info( "---------------------------------------------------------" )
 
     foreach( lang ${langs} )
-      message( STATUS "${lang} -- ${CMAKE_${lang}_COMPILER_ID} ${CMAKE_${lang}_COMPILER_VERSION}"  )
-      message( STATUS "    compiler   : ${CMAKE_${lang}_COMPILER} ${CMAKE_${lang}_FLAGS} ${CMAKE_${lang}_FLAGS_${CMAKE_BUILD_TYPE_CAPS}}" )
-      message( STATUS "    link flags : ${CMAKE_${lang}_LINK_FLAGS}" )
+      ecbuild_info( "${lang} -- ${CMAKE_${lang}_COMPILER_ID} ${CMAKE_${lang}_COMPILER_VERSION}"  )
+      ecbuild_info( "    compiler   : ${CMAKE_${lang}_COMPILER} ${CMAKE_${lang}_FLAGS} ${CMAKE_${lang}_FLAGS_${CMAKE_BUILD_TYPE_CAPS}}" )
+      ecbuild_info( "    link flags : ${CMAKE_${lang}_LINK_FLAGS}" )
     endforeach()
 
-    message( STATUS "linker : ${CMAKE_LINKER}")
-    message( STATUS "ar     : ${CMAKE_AR}")
-    message( STATUS "ranlib : ${CMAKE_RANLIB}")
-    message( STATUS "link flags" )
-    message( STATUS "    executable [${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_CAPS}}]" )
-    message( STATUS "    shared lib [${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_${CMAKE_BUILD_TYPE_CAPS}}]" )
-    message( STATUS "    static lib [${CMAKE_MODULE_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_CAPS}}]" )
-    message( STATUS "install rpath  : ${CMAKE_INSTALL_RPATH}" )
+    ecbuild_info( "linker : ${CMAKE_LINKER}")
+    ecbuild_info( "ar     : ${CMAKE_AR}")
+    ecbuild_info( "ranlib : ${CMAKE_RANLIB}")
+    ecbuild_info( "link flags" )
+    ecbuild_info( "    executable [${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_CAPS}}]" )
+    ecbuild_info( "    shared lib [${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS_${CMAKE_BUILD_TYPE_CAPS}}]" )
+    ecbuild_info( "    static lib [${CMAKE_MODULE_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS_${CMAKE_BUILD_TYPE_CAPS}}]" )
+    ecbuild_info( "install rpath  : ${CMAKE_INSTALL_RPATH}" )
 
     get_directory_property( defs COMPILE_DEFINITIONS )
 
-    message( STATUS "common definitions: ${defs}" )
+    ecbuild_info( "common definitions: ${defs}" )
 
-    message( STATUS "---------------------------------------------------------" )
+    ecbuild_info( "---------------------------------------------------------" )
 
     ### FEATURE SUMMARY
 
-    # debug_var( CMAKE_VERSION )
+    # ecbuild_debug_var( CMAKE_VERSION )
     if( ${CMAKE_VERSION} VERSION_LESS "2.8.6" )
       feature_summary( WHAT ALL )
     else()
@@ -101,6 +99,6 @@ macro( ecbuild_print_summary )
     # issue warnings / errors in case there are unused project files
     ecbuild_warn_unused_files()
 
-  endif( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
+  endif()
 
 endmacro( ecbuild_print_summary )
diff --git a/cmake/ecbuild_project_files.cmake b/cmake/ecbuild_project_files.cmake
index fbf3015..3e4b3d2 100644
--- a/cmake/ecbuild_project_files.cmake
+++ b/cmake/ecbuild_project_files.cmake
@@ -1,8 +1,8 @@
-# (C) Copyright 1996-2015 ECMWF.
-# 
+# (C) Copyright 1996-2016 ECMWF.
+#
 # This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
-# In applying this licence, ECMWF does not waive the privileges and immunities 
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
 # granted to it by virtue of its status as an intergovernmental organisation nor
 # does it submit to any jurisdiction.
 
@@ -50,7 +50,7 @@ macro( ecbuild_declare_project_files )
   if( CHECK_UNUSED_FILES )
     foreach( _afile ${ARGV} )
 
-      # debug_var( _afile )
+      # ecbuild_debug_var( _afile )
 
       get_property( _src_gen SOURCE ${_afile} PROPERTY GENERATED )
 
@@ -62,7 +62,7 @@ macro( ecbuild_declare_project_files )
         if( EXISTS ${_abspath} )
             list( REMOVE_ITEM EC_UNUSED_FILES ${_abspath} )
         else()
-        message( FATAL_ERROR "In directory ${CMAKE_CURRENT_SOURCE_DIR} file ${_afile} was declared in CMakeLists.txt but not found" )
+        ecbuild_critical( "In directory ${CMAKE_CURRENT_SOURCE_DIR} file ${_afile} was declared in CMakeLists.txt but not found" )
         endif()
       endif()
 
diff --git a/cmake/ecbuild_remove_fortran_flags.cmake b/cmake/ecbuild_remove_fortran_flags.cmake
new file mode 100644
index 0000000..74c8832
--- /dev/null
+++ b/cmake/ecbuild_remove_fortran_flags.cmake
@@ -0,0 +1,61 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+##############################################################################
+#.rst:
+#
+# ecbuild_remove_fortran_flags
+# =========================
+#
+# Remove Fortran compiler flags from CMAKE_Fortran_FLAGS. ::
+#
+#   ecbuild_remove_fortran_flags( <flag1> [ <flag2> ... ] [ BUILD <build> ] )
+#
+# Options
+# -------
+#
+# BUILD : optional
+#   remove flags from ``CMAKE_Fortran_FLAGS_<build>`` instead of
+#   ``CMAKE_Fortran_FLAGS``
+#
+##############################################################################
+
+include( CheckFortranCompilerFlag )
+macro( ecbuild_remove_fortran_flags m_flags )
+
+  set( _flags ${m_flags} )
+  if( _flags AND CMAKE_Fortran_COMPILER_LOADED )
+
+    set( single_value_args BUILD )
+    set( multi_value_args )
+    cmake_parse_arguments( _PAR "" "${single_value_args}" "${multi_value_args}" ${_FIRST_ARG} ${ARGN} )
+
+    string( TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_CAPS )
+    string( TOUPPER ${_PAR_BUILD} _PAR_BUILD_CAPS )
+
+    if( _PAR_BUILD AND (CMAKE_BUILD_TYPE_CAPS MATCHES "${_PAR_BUILD_CAPS}") )
+
+      foreach( _flag ${_flags} )
+        string(REGEX REPLACE " *${_flag} *" " " CMAKE_Fortran_FLAGS_${_PAR_BUILD} ${CMAKE_Fortran_FLAGS_${_PAR_BUILD}})
+        ecbuild_debug( "Fortran FLAG [${_flag}] removed from build type ${_PAR_BUILD}" )
+      endforeach()
+
+    elseif( NOT _PAR_BUILD )
+
+      foreach( _flag ${_flags} )
+        string(REGEX REPLACE " *${_flag} *" " " CMAKE_Fortran_FLAGS ${CMAKE_Fortran_FLAGS} )
+        ecbuild_debug( "Fortran FLAG [${_flag}] removed" )
+      endforeach()
+
+    endif()
+
+  endif()
+  unset( _flags )
+
+endmacro()
+
diff --git a/cmake/ecbuild_requires_macro_version.cmake b/cmake/ecbuild_requires_macro_version.cmake
index ef13d64..1603446 100644
--- a/cmake/ecbuild_requires_macro_version.cmake
+++ b/cmake/ecbuild_requires_macro_version.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -21,7 +21,7 @@
 macro( ecbuild_requires_macro_version req_vrs )
 
 	if( ECBUILD_MACRO_VERSION VERSION_LESS ${req_vrs} )
-		message( FATAL_ERROR "${PROJECT_NAME} needs ecbuild macro version >= ${req_vrs}" )
+		ecbuild_critical( "${PROJECT_NAME} needs ecbuild macro version >= ${req_vrs}" )
 	endif()
 
 endmacro()
diff --git a/cmake/ecbuild_separate_sources.cmake b/cmake/ecbuild_separate_sources.cmake
index 55c6d8f..b56db63 100644
--- a/cmake/ecbuild_separate_sources.cmake
+++ b/cmake/ecbuild_separate_sources.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -48,15 +48,15 @@ macro( ecbuild_separate_sources )
 	cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
 	if(_PAR_UNPARSED_ARGUMENTS)
-	  message(FATAL_ERROR "Unknown keywords given to ecbuild_separate_sources(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+	  ecbuild_critical("Unknown keywords given to ecbuild_separate_sources(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
 	endif()
 
 	if( NOT _PAR_TARGET  )
-	  message(FATAL_ERROR "The call to ecbuild_separate_sources() doesn't specify the TARGET.")
+	  ecbuild_critical("The call to ecbuild_separate_sources() doesn't specify the TARGET.")
 	endif()
 
 	if( NOT _PAR_SOURCES )
-	  message(FATAL_ERROR "The call to ecbuild_separate_sources() doesn't specify the SOURCES.")
+	  ecbuild_critical("The call to ecbuild_separate_sources() doesn't specify the SOURCES.")
 	endif()
 
 	foreach( src ${_PAR_SOURCES} )
@@ -83,9 +83,9 @@ macro( ecbuild_separate_sources )
 		endif()
 	endforeach()
 
-#    debug_var( ${_PAR_TARGET}_h_srcs )
-#    debug_var( ${_PAR_TARGET}_c_srcs )
-#    debug_var( ${_PAR_TARGET}_cxx_srcs )
-#    debug_var( ${_PAR_TARGET}_f_srcs )
+#    ecbuild_debug_var( ${_PAR_TARGET}_h_srcs )
+#    ecbuild_debug_var( ${_PAR_TARGET}_c_srcs )
+#    ecbuild_debug_var( ${_PAR_TARGET}_cxx_srcs )
+#    ecbuild_debug_var( ${_PAR_TARGET}_f_srcs )
 
 endmacro( ecbuild_separate_sources  )
diff --git a/cmake/ecbuild_setup_test_framework.cmake b/cmake/ecbuild_setup_test_framework.cmake
index 538a433..c14b2f9 100644
--- a/cmake/ecbuild_setup_test_framework.cmake
+++ b/cmake/ecbuild_setup_test_framework.cmake
@@ -2,7 +2,7 @@ ecbuild_add_option( FEATURE TESTS
                     DEFAULT ON
                     DESCRIPTION "Enable the unit tests" )
 
-if( ENABLE_TESTS )
+if( ENABLE_TESTS AND CMAKE_CXX_COMPILER_LOADED )
 
   # Try to find compiled boost
 
@@ -23,11 +23,11 @@ if( ENABLE_TESTS )
     set( HAVE_BOOST_UNIT_TEST 1 )
     set( BOOST_UNIT_TEST_FRAMEWORK_LINKED 1 )
 
-    message( STATUS "Using Boost for unit tests:\n    INC [${Boost_INCLUDE_DIRS}]\n    LIB [${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}]" )
+    ecbuild_info( "Using Boost for unit tests:\n    INC [${Boost_INCLUDE_DIRS}]\n    LIB [${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}]" )
 
   else()
 
-    message( STATUS "Boost unit test framework -- NOT FOUND" )
+    ecbuild_info( "Boost unit test framework -- NOT FOUND" )
 
     set( HAVE_BOOST_UNIT_TEST 0 )
 
@@ -39,3 +39,7 @@ if( ENABLE_TESTS )
   endif()
 
 endif()
+
+if( NOT ENABLE_TESTS )
+  ecbuild_info("Tests have been disabled")
+endif()
diff --git a/cmake/ecbuild_source_flags.cmake b/cmake/ecbuild_source_flags.cmake
new file mode 100644
index 0000000..2414765
--- /dev/null
+++ b/cmake/ecbuild_source_flags.cmake
@@ -0,0 +1,30 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+set( __gen_source_flags ${CMAKE_CURRENT_LIST_DIR}/gen_source_flags.py )
+
+# Calls gen_source_flags.py to generate a CMake file with the per
+# source file flags for a given target.
+function( ecbuild_source_flags OUT TARGET DEFAULT_FLAGS SOURCES )
+
+  if( NOT PYTHONINTERP_FOUND OR PYTHON_VERSION VERSION_LESS 2.7 )
+    find_package( PythonInterp 2.7 REQUIRED )
+  endif()
+
+  set( OUTFILE ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_source_flags.cmake )
+
+  if( ECBUILD_LOG_LEVEL LESS 11)
+    set( __debug "--debug" )
+  endif()
+  execute_process( COMMAND ${PYTHON_EXECUTABLE} ${__gen_source_flags}
+                           ${ECBUILD_SOURCE_FLAGS} ${OUTFILE} "${DEFAULT_FLAGS}"
+                           ${SOURCES} "${__debug}" )
+
+  set( ${OUT} ${OUTFILE} PARENT_SCOPE )
+
+endfunction()
diff --git a/cmake/ecbuild_system.cmake b/cmake/ecbuild_system.cmake
index ca4f4fa..a4361f7 100644
--- a/cmake/ecbuild_system.cmake
+++ b/cmake/ecbuild_system.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -28,7 +28,7 @@ endif()
 ########################################################################################################
 # ecbuild versioning support
 
-set( ECBUILD_CMAKE_MINIMUM "2.8.4" )
+set( ECBUILD_CMAKE_MINIMUM "2.8.10" )
 if( ${CMAKE_VERSION} VERSION_LESS ${ECBUILD_CMAKE_MINIMUM} )
     message(FATAL_ERROR "${PROJECT_NAME} requires at least CMake ${ECBUILD_CMAKE_MINIMUM} -- you are using ${CMAKE_COMMAND} [${CMAKE_VERSION}]\n Please, get a newer version of CMake @ www.cmake.org" )
 endif()
@@ -59,16 +59,23 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
 
     set( ECBUILD_PROJECTS  "" CACHE INTERNAL "list of ecbuild (sub)projects that use ecbuild" )
 
-    message( STATUS "ecbuild   ${ecbuild_VERSION_STR}\t${ECBUILD_MACROS_DIR}" )
-    message( STATUS "cmake     ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}\t${CMAKE_COMMAND}" )
+    # Include log macros since these are used right away
+    include( ecbuild_log )
+
+    ecbuild_info( "ecbuild   ${ecbuild_VERSION_STR}\t${ECBUILD_MACROS_DIR}" )
+    ecbuild_info( "cmake     ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}\t${CMAKE_COMMAND}" )
 
     if( CMAKE_TOOLCHAIN_FILE )
-    message( STATUS "toolchain ${CMAKE_TOOLCHAIN_FILE}" )
+      ecbuild_info( "toolchain ${CMAKE_TOOLCHAIN_FILE}" )
+    endif()
+
+    if( ECBUILD_CONFIG )
+      ecbuild_info( "config    ${ECBUILD_CONFIG}" )
     endif()
 
     if( ECBUILD_CACHE )
-    include( ${ECBUILD_CACHE} )
-      message( STATUS "cache     ${ECBUILD_CACHE}" )
+      include( ${ECBUILD_CACHE} )
+      ecbuild_info( "cache     ${ECBUILD_CACHE}" )
     endif()
 
     message( STATUS "---------------------------------------------------------" )
@@ -93,7 +100,7 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
     enable_testing()
 
     # keep this until we modify the meaning to 'check' if installation worked
-    add_custom_target( check COMMAND ${CMAKE_CTEST_COMMAND} -V )
+    add_custom_target( check COMMAND ${CMAKE_CTEST_COMMAND} )
 
     ############################################################################################
     # define valid build types
@@ -121,19 +128,19 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
     # include(CMakePrintSystemInformation) # available in cmake 2.8.4
 
     if( CMAKE_CXX_COMPILER_LOADED )
-    include(CheckIncludeFileCXX)
-    include(CheckCXXCompilerFlag)
-    include(CheckCXXSourceCompiles)
-    include(CheckCXXSourceRuns)
+        include(CheckIncludeFileCXX)
+        include(CheckCXXCompilerFlag)
+        include(CheckCXXSourceCompiles)
+        include(CheckCXXSourceRuns)
     endif()
 
     if( CMAKE_Fortran_COMPILER_LOADED )
         set( CMAKE_Fortran_MODULE_DIRECTORY  ${CMAKE_BINARY_DIR}/module CACHE PATH "directory for all fortran modules." )
-    include(CheckFortranFunctionExists)
-    if( CMAKE_C_COMPILER_LOADED AND ENABLE_FORTRAN_C_INTERFACE )
-    include(FortranCInterface)
-    endif()
-    set( EC_HAVE_FORTRAN 1 )
+        include(CheckFortranFunctionExists)
+        if( CMAKE_C_COMPILER_LOADED AND ENABLE_FORTRAN_C_INTERFACE )
+            include(FortranCInterface)
+        endif()
+        set( EC_HAVE_FORTRAN 1 )
     endif()
 
     include(FeatureSummary) # support features in cmake
@@ -144,17 +151,17 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
     # backport of cmake > 2.8.4 functions
 
     if( "${CMAKE_VERSION}" VERSION_LESS "2.8.6" )
-    include( ${CMAKE_CURRENT_LIST_DIR}/2.8/CMakePushCheckState.cmake )
+        include( ${CMAKE_CURRENT_LIST_DIR}/2.8/CMakePushCheckState.cmake )
     else()
-    include(CMakePushCheckState)
+        include(CMakePushCheckState)
     endif()
 
     ############################################################################################
     # add our macros
 
-    include( ecbuild_debug_var )
-    include( ecbuild_log )
     include( ecbuild_list_macros )
+    include( ecbuild_list_add_pattern )
+    include( ecbuild_list_exclude_pattern )
 
     include( ecbuild_check_c_source_return )
     include( ecbuild_check_cxx_source_return )
@@ -167,6 +174,7 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
     include( ecbuild_generate_config_headers )
     include( ecbuild_generate_rpc )
     include( ecbuild_generate_yy )
+    include( ecbuild_generate_fortran_interfaces )
     include( ecbuild_echo_targets )
     include( ecbuild_features )
     include( ecbuild_add_option )
@@ -202,30 +210,38 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
     include( ecbuild_find_fortranlibs )
     include( ecbuild_git )
     include( ecbuild_enable_fortran )
+    include( ecbuild_source_flags )
     include( ecbuild_bundle )
     include( ecbuild_pkgconfig )
     include( ecbuild_cache )
+    include( ecbuild_remove_fortran_flags )
 
     include( ${CMAKE_CURRENT_LIST_DIR}/contrib/GetGitRevisionDescription.cmake )
 
     ############################################################################################
     # kickstart the build system
 
-      ecbuild_prepare_cache()
+    if( ECBUILD_CONFIG )
+      include( ${ECBUILD_CONFIG} )
+    endif()
+
+    ecbuild_prepare_cache()
 
     include( ecbuild_define_options )               # define build options
+    include( ecbuild_compiler_flags )               # compiler flags
     include( ecbuild_check_compiler )               # check for compiler characteristics
     include( ecbuild_check_os )                     # check for os characteristics
     include( ecbuild_check_functions )              # check for available functions
-    include( ecbuild_define_paths )                 # define installation paths
-    include( ecbuild_links_target )                 # define the links target
+    include( ecbuild_define_paths )                 # defines installation paths
+    include( ecbuild_define_libs_and_execs_target ) # defines the top level execs and libs
+    include( ecbuild_define_links_target )          # defines the links target
     include( ecbuild_setup_test_framework )         # setup test framework
     include( ecbuild_define_uninstall )             # define uninstall target
 
     ecbuild_flush_cache()
 
     ############################################################################################
-    # define the build timestamp
+    # define the build timestamp, unless the user provided one via EC_BUILD_TIMESTAMP
 
     if( NOT DEFINED EC_BUILD_TIMESTAMP )
         ecbuild_get_timestamp( EC_BUILD_TIMESTAMP )
@@ -234,5 +250,17 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
 
     message( STATUS "---------------------------------------------------------" )
 
-endif()
+else()
 
+    # Allow subprojects with different compilation flags. This could be done by defining
+    #     set( ECBUILD_C_FLAGS_DEBUG "-O0" )
+    # or
+    #     set( ECBUILD_CONFIG "<subproject-config>.cmake" )
+    if( ECBUILD_CONFIG )
+        message( STATUS "---------------------------------------------------------" )
+        ecbuild_info( "config    ${ECBUILD_CONFIG}" )
+        include( ${ECBUILD_CONFIG} )
+    endif()
+    include( ecbuild_compiler_flags )
+
+endif()
diff --git a/cmake/ecbuild_use_package.cmake b/cmake/ecbuild_use_package.cmake
index acbe495..6bd2bed 100644
--- a/cmake/ecbuild_use_package.cmake
+++ b/cmake/ecbuild_use_package.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -87,15 +87,15 @@ macro( ecbuild_use_package )
   cmake_parse_arguments( _p "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
   if(_p_UNPARSED_ARGUMENTS)
-    message(FATAL_ERROR "Unknown keywords given to ecbuild_use_package(): \"${_p_UNPARSED_ARGUMENTS}\"")
+    ecbuild_critical("Unknown keywords given to ecbuild_use_package(): \"${_p_UNPARSED_ARGUMENTS}\"")
   endif()
 
   if( NOT _p_PROJECT  )
-    message(FATAL_ERROR "The call to ecbuild_use_package() doesn't specify the PROJECT.")
+    ecbuild_critical("The call to ecbuild_use_package() doesn't specify the PROJECT.")
   endif()
 
   if( _p_EXACT AND NOT _p_VERSION )
-    message(FATAL_ERROR "Call to ecbuild_use_package() requests EXACT but doesn't specify VERSION.")
+    ecbuild_critical("Call to ecbuild_use_package() requests EXACT but doesn't specify VERSION.")
   endif()
 
   # try to find the package as a subproject and build it
@@ -105,6 +105,7 @@ macro( ecbuild_use_package )
   # user defined dir with subprojects
 
   if( NOT DEFINED ${pkgUPPER}_SOURCE AND DEFINED SUBPROJECT_DIRS )
+    ecbuild_warn("ecbuild_use_package(): setting SUBPROJECT_DIRS is deprecated")
     ecbuild_debug("ecbuild_use_package(${_p_PROJECT}): scanning subproject directories ${SUBPROJECT_DIRS}")
     foreach( dir ${SUBPROJECT_DIRS} )
       if( EXISTS ${dir}/${_p_PROJECT} AND EXISTS ${dir}/${_p_PROJECT}/CMakeLists.txt )
@@ -119,7 +120,7 @@ macro( ecbuild_use_package )
   if( DEFINED ${pkgUPPER}_SOURCE )
 
     if( NOT EXISTS ${${pkgUPPER}_SOURCE} OR NOT EXISTS ${${pkgUPPER}_SOURCE}/CMakeLists.txt )
-      message( FATAL_ERROR "User defined source directory '${${pkgUPPER}_SOURCE}' for project '${_p_PROJECT}' does not exist or does not contain a CMakeLists.txt file." )
+      ecbuild_critical("User defined source directory '${${pkgUPPER}_SOURCE}' for project '${_p_PROJECT}' does not exist or does not contain a CMakeLists.txt file.")
     endif()
 
     set( ${pkgUPPER}_subproj_dir_ "${${pkgUPPER}_SOURCE}" )
@@ -187,6 +188,8 @@ macro( ecbuild_use_package )
       set( ${pkgUPPER}_FOUND 1 )
       set( ${_p_PROJECT}_VERSION ${${pkgUPPER}_VERSION} )
 
+      list( APPEND ${pkgUPPER}_INCLUDE_DIRS ${${pkgUPPER}_TPL_INCLUDE_DIRS} )
+
     endif()
 
   endif()
@@ -198,7 +201,7 @@ macro( ecbuild_use_package )
     ecbuild_debug("ecbuild_use_package(${_p_PROJECT}): 2) project was already added as subproject, check version is acceptable")
 
     if( NOT ${pkgUPPER}_FOUND )
-      message( FATAL_ERROR "${_p_PROJECT} was already included as sub-project but ${pkgUPPER}_FOUND isn't set -- this is likely a BUG in ecbuild" )
+      ecbuild_critical( "${_p_PROJECT} was already included as sub-project but ${pkgUPPER}_FOUND isn't set -- this is likely a BUG in ecbuild" )
     endif()
 
     # check version is acceptable
@@ -221,26 +224,26 @@ macro( ecbuild_use_package )
 
   # test version for Cases 1,2,3
 
-  # debug_var( _p_PROJECT )
-  # debug_var( _p_VERSION )
-  # debug_var( ${pkgUPPER}_VERSION )
-  # debug_var( ${_p_PROJECT}_VERSION )
-  # debug_var( _just_added )
-  # debug_var( _do_version_check )
-  # debug_var( _source_description )
-  # debug_var( ${pkgUPPER}_FOUND )
-  # debug_var( ${pkgUPPER}_previous_subproj_ )
+  # ecbuild_debug_var( _p_PROJECT )
+  # ecbuild_debug_var( _p_VERSION )
+  # ecbuild_debug_var( ${pkgUPPER}_VERSION )
+  # ecbuild_debug_var( ${_p_PROJECT}_VERSION )
+  # ecbuild_debug_var( _just_added )
+  # ecbuild_debug_var( _do_version_check )
+  # ecbuild_debug_var( _source_description )
+  # ecbuild_debug_var( ${pkgUPPER}_FOUND )
+  # ecbuild_debug_var( ${pkgUPPER}_previous_subproj_ )
 
   if( _p_VERSION AND _do_version_check )
     if( _p_EXACT )
       if( NOT ${_p_PROJECT}_VERSION VERSION_EQUAL _p_VERSION )
-        message( FATAL_ERROR "${PROJECT_NAME} requires (exactly) ${_p_PROJECT} = ${_p_VERSION} -- detected as ${_source_description} ${${_p_PROJECT}_VERSION}" )
+        ecbuild_critical( "${PROJECT_NAME} requires (exactly) ${_p_PROJECT} = ${_p_VERSION} -- detected as ${_source_description} ${${_p_PROJECT}_VERSION}" )
       endif()
     else()
       if( _p_VERSION VERSION_LESS ${_p_PROJECT}_VERSION OR _p_VERSION VERSION_EQUAL ${_p_PROJECT}_VERSION )
-        message( STATUS "${PROJECT_NAME} requires ${_p_PROJECT} >= ${_p_VERSION} -- detected as ${_source_description} ${${_p_PROJECT}_VERSION}" )
+        ecbuild_info( "${PROJECT_NAME} requires ${_p_PROJECT} >= ${_p_VERSION} -- detected as ${_source_description} ${${_p_PROJECT}_VERSION}" )
       else()
-        message( FATAL_ERROR "${PROJECT_NAME} requires ${_p_PROJECT} >= ${_p_VERSION} -- detected only ${_source_description} ${${_p_PROJECT}_VERSION}" )
+        ecbuild_critical( "${PROJECT_NAME} requires ${_p_PROJECT} >= ${_p_VERSION} -- detected only ${_source_description} ${${_p_PROJECT}_VERSION}" )
       endif()
     endif()
   endif()
diff --git a/cmake/ecbuild_version.h.in b/cmake/ecbuild_version.h.in
index 3ed96ce..70c5f0a 100644
--- a/cmake/ecbuild_version.h.in
+++ b/cmake/ecbuild_version.h.in
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 1996-2015 ECMWF.
+ * (C) Copyright 1996-2016 ECMWF.
  *
  * This software is licensed under the terms of the Apache Licence Version 2.0
  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/cmake/ecbuild_warn_unused_files.cmake b/cmake/ecbuild_warn_unused_files.cmake
index 084adb3..314a006 100644
--- a/cmake/ecbuild_warn_unused_files.cmake
+++ b/cmake/ecbuild_warn_unused_files.cmake
@@ -1,4 +1,4 @@
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
@@ -48,24 +48,24 @@ macro( ecbuild_warn_unused_files )
           # if unused files where found, put the list on the file
           if( EC_UNUSED_FILES )
     
-            message( STATUS "")
-            message( STATUS " !!!--- ${UNUSED_FILES_LEVEL} ---!!! ")
-            message( STATUS " !!!--- ${UNUSED_FILES_LEVEL} ---!!! ")
-            message( STATUS "")
-            message( STATUS " Unused source files found:")
+            ecbuild_info("")
+            ecbuild_info(" !!!--- ${UNUSED_FILES_LEVEL} ---!!! ")
+            ecbuild_info(" !!!--- ${UNUSED_FILES_LEVEL} ---!!! ")
+            ecbuild_info("")
+            ecbuild_info(" Unused source files found:")
             foreach( AFILE ${EC_UNUSED_FILES} )
-              message( STATUS "     ${AFILE}")
+              ecbuild_info("     ${AFILE}")
               file( APPEND ${UNUSED_FILE} "${AFILE}\n" )
             endforeach()
-            message( STATUS "")
-            message( STATUS " List dumped to ${UNUSED_FILE}")
-            message( STATUS "")
-            message( STATUS " !!!--- ${UNUSED_FILES_LEVEL} ---!!! ")
-            message( STATUS " !!!--- ${UNUSED_FILES_LEVEL} ---!!! ")
-            message( STATUS "")
+            ecbuild_info("")
+            ecbuild_info(" List dumped to ${UNUSED_FILE}")
+            ecbuild_info("")
+            ecbuild_info(" !!!--- ${UNUSED_FILES_LEVEL} ---!!! ")
+            ecbuild_info(" !!!--- ${UNUSED_FILES_LEVEL} ---!!! ")
+            ecbuild_info("")
     
             if( UNUSED_FILES_LEVEL STREQUAL "ERROR" )
-                message( FATAL_ERROR "\n Aborted build system configuration. \n Add unused files to the build system or remove them." )
+              ecbuild_critical( "\n Aborted build system configuration. \n Add unused files to the build system or remove them." )
             endif()
     
           endif()
diff --git a/cmake/fcm-make-interfaces.cfg b/cmake/fcm-make-interfaces.cfg
new file mode 100644
index 0000000..a73363a
--- /dev/null
+++ b/cmake/fcm-make-interfaces.cfg
@@ -0,0 +1,31 @@
+# FCM configuration file used to auto-generate interface files
+# for F77 and F90 files.
+# Interface files will have the extention ".intfb.h"
+# Results will be in a directory "interfaces/include" relative to cwd
+
+# Usage: fcm make --config-file=<path -to-this-file> \
+#                 interfaces.ns-incl="<space-sep-list-of-dirs>"
+
+$SRC{?}  = $HERE
+
+step.class[interfaces] = build
+steps  = interfaces
+
+interfaces.target{task}     = ext-iface
+interfaces.target{category} = include
+
+interfaces.source = $SRC
+
+# Exclude all
+interfaces.ns-excl = /
+
+# Include some
+# interfaces.ns-incl = <list of dirs passed at command-line>
+
+# Extention of interface files
+interfaces.prop{file-ext.f90-interface} = .intfb.h
+
+# Do not follow includes
+interfaces.prop{no-dep.f.module} = *
+interfaces.prop{no-dep.include} = *
+
diff --git a/cmake/gen_source_flags.py b/cmake/gen_source_flags.py
new file mode 100644
index 0000000..b976d31
--- /dev/null
+++ b/cmake/gen_source_flags.py
@@ -0,0 +1,84 @@
+# (C) Copyright 1996-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+
+"""
+Generate .cmake file to set source-file specific compiler flags based on
+rules defined in a JSON file.
+"""
+
+from argparse import ArgumentParser
+from fnmatch import fnmatch
+import logging
+from json import JSONDecoder
+from os import path
+
+log = logging.getLogger('gen_source_flags')
+
+
+def match(source, pattern, op, flags, indent=0):
+    if fnmatch(source, pattern):
+
+        suff = '' if op[0] in ('+', '=', '/') else ' (nested pattern)'
+        log.debug('%s-> pattern "%s" matches "%s"%s',
+                  ' ' * (indent + 1), pattern, source, suff)
+
+        if op[0] == "+":
+            flags += [flag for flag in op[1:] if flag not in flags]
+            log.debug('%sappending %s --> flags: %s', ' ' * (indent + 2), op[1:], flags)
+
+        elif op[0] == "=":
+            flags = op[1:]
+            log.debug('%ssetting %s --> flags: %s', ' ' * (indent + 2), op[1:], flags)
+
+        elif op[0] == "/":
+            flags = [flag for flag in flags if flag not in op[1:]]
+            log.debug('%sremoving %s --> flags: %s', ' ' * (indent + 2), op[1:], flags)
+
+        else:  # Nested rule
+            log.debug('%sapplying nested rules for "%s" (flags: %s)',
+                      ' ' * (indent + 2), pattern, flags)
+            for nested_pattern, nested_op in op:
+                flags = match(source, nested_pattern, nested_op, flags, indent + 2)
+
+    return flags
+
+
+def generate(rules, out, default_flags, sources, debug=False):
+    logging.basicConfig(level=logging.DEBUG if debug else logging.INFO,
+                        format='-- %(levelname)s - %(name)s: %(message)s')
+
+    with open(path.expanduser(rules)) as f:
+        rules = JSONDecoder(object_pairs_hook=list).decode(f.read())
+
+    with open(path.expanduser(out), 'w') as f:
+        for source in sources:
+            log.debug('%s (default flags: "%s")', source, default_flags)
+            flags = default_flags.split()
+            for pattern, op in rules:
+                flags = match(source, pattern, op, flags)
+
+            if flags:
+                log.debug(' ==> setting flags for %s to %s', source, ' '.join(flags))
+                f.write('set_source_files_properties(%s PROPERTIES COMPILE_FLAGS "%s")\n'
+                        % (source, ' '.join(flags)))
+            else:
+                log.debug(' ==> flags for %s empty', source)
+
+
+def main():
+    """Parse arguments"""
+    parser = ArgumentParser(description=__doc__)
+    parser.add_argument('rules', metavar='RULES.json', help='JSON rules file')
+    parser.add_argument('out', metavar='OUT.cmake', help='CMake script to generate')
+    parser.add_argument('default_flags', help='Default compiler flags to use')
+    parser.add_argument('sources', metavar='file', nargs='+', help='Path to file to apply rules to')
+    parser.add_argument('--debug', '-d', action='store_true', help='Log debug messages')
+    generate(**vars(parser.parse_args()))
+
+if __name__ == '__main__':
+    main()
diff --git a/cmake/include/ecbuild/boost_test_framework.h b/cmake/include/ecbuild/boost_test_framework.h
index 8cbd8e9..f593b70 100644
--- a/cmake/include/ecbuild/boost_test_framework.h
+++ b/cmake/include/ecbuild/boost_test_framework.h
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 1996-2015 ECMWF.
+ * (C) Copyright 1996-2016 ECMWF.
  *
  * This software is licensed under the terms of the Apache Licence Version 2.0
  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
diff --git a/cmake/project-config.cmake.in b/cmake/project-config.cmake.in
index 03f875b..6d48728 100644
--- a/cmake/project-config.cmake.in
+++ b/cmake/project-config.cmake.in
@@ -1,11 +1,13 @@
 # Config file for the @PROJECT_NAME@ package
 # Defines the following variables:
 #
-#  @PNAME at _INCLUDE_DIRS - include directories
-#  @PNAME at _DEFINITIONS  - preprocessor definitions
-#  @PNAME at _LIBRARIES    - libraries to link against
-#  @PNAME at _FEATURES     - list of enabled features
-#  @PNAME at _VERSION      - version of the package
+#  @PNAME at _INCLUDE_DIRS   - include directories
+#  @PNAME at _DEFINITIONS    - preprocessor definitions
+#  @PNAME at _LIBRARIES      - libraries to link against
+#  @PNAME at _FEATURES       - list of enabled features
+#  @PNAME at _VERSION        - version of the package
+#  @PNAME at _GIT_SHA1       - Git revision of the package
+#  @PNAME at _GIT_SHA1_SHORT - short Git revision of the package
 #
 # Also defines @PROJECT_NAME@ third-party library dependencies:
 #  @PNAME at _TPLS             - package names of  third-party library dependencies
@@ -26,12 +28,16 @@ set( @PNAME at _TPL_INCLUDE_DIRS  "@CONF_TPL_INCLUDE_DIRS@" )
 set( @PNAME at _TPL_DEFINITIONS   "@CONF_TPL_DEFINITIONS@" )
 set( @PNAME at _TPL_LIBRARIES     "@CONF_TPL_LIBRARIES@" )
 
+set( @PNAME at _VERSION           "@PACKAGE_VERSION@" )
+set( @PNAME at _GIT_SHA1          "@PACKAGE_GIT_SHA1@" )
+set( @PNAME at _GIT_SHA1_SHORT    "@PACKAGE_GIT_SHA1_SHORT@" )
+
 ### export include paths as absolute paths
 
 set( @PNAME at _INCLUDE_DIRS "" )
 foreach( path ${@PNAME at _SELF_INCLUDE_DIRS} )
-	get_filename_component( abspath ${path} ABSOLUTE )
-	list( APPEND @PNAME at _INCLUDE_DIRS ${abspath} )
+  get_filename_component( abspath ${path} ABSOLUTE )
+  list( APPEND @PNAME at _INCLUDE_DIRS ${abspath} )
 endforeach()
 list( APPEND @PNAME at _INCLUDE_DIRS ${@PNAME at _TPL_INCLUDE_DIRS} )
 
@@ -47,7 +53,7 @@ set( @PNAME at _LIBRARIES        ${@PNAME at _SELF_LIBRARIES}   ${@PNAME at _TPL_LIBRARIE
 
 set( @PNAME at _FEATURES    "@CONF_FEATURES@" )
 foreach( _f ${@PNAME at _FEATURES} )
-	set( @PNAME at _HAVE_${_f} 1 )
+  set( @PNAME at _HAVE_${_f} 1 )
 endforeach()
 
 # Has this configuration been exported from a build tree?
@@ -58,22 +64,22 @@ if( EXISTS ${@PNAME at _CMAKE_DIR}/@CONF_IMPORT_FILE@ )
   include( ${@PNAME at _IMPORT_FILE} )
 endif()
 
+# here goes the imports of the TPL's
+
+include( ${CMAKE_CURRENT_LIST_FILE}.tpls OPTIONAL )
+
 # insert definitions for IMPORTED targets
 
 if( NOT @PROJECT_NAME at _BINARY_DIR )
 
   if( @PNAME at _IS_BUILD_DIR_EXPORT )
-		include( "@TOP_PROJECT_TARGETS_FILE@" OPTIONAL )
-	else()
-		include( "${@PNAME at _CMAKE_DIR}/@CMAKE_PROJECT_NAME at -targets.cmake" )
-	endif()
+    include( "@TOP_PROJECT_TARGETS_FILE@" OPTIONAL )
+  else()
+    include( "${@PNAME at _CMAKE_DIR}/@PROJECT_NAME at -targets.cmake" )
+  endif()
 
 endif()
 
-# here goes the imports of the TPL's
-
-include( ${CMAKE_CURRENT_LIST_FILE}.tpls OPTIONAL )
-
 # publish this file as imported
 
 set( @PNAME at _IMPORT_FILE ${CMAKE_CURRENT_LIST_FILE} )
@@ -82,9 +88,10 @@ mark_as_advanced( @PNAME at _IMPORT_FILE )
 # set @PROJECT_NAME at _BASE_DIR for final installations or build directories
 
 if( NOT @PROJECT_NAME@ )
-	if( @PNAME at _IS_BUILD_DIR_EXPORT )
-		set( @PROJECT_NAME at _BASE_DIR @CMAKE_BINARY_DIR@ )
-	else()
-		set( @PROJECT_NAME at _BASE_DIR @CMAKE_INSTALL_PREFIX@ )
-	endif()
+  if( @PNAME at _IS_BUILD_DIR_EXPORT )
+    set( @PROJECT_NAME at _BASE_DIR @CMAKE_BINARY_DIR@ )
+  else()
+    get_filename_component( abspath ${CMAKE_CURRENT_LIST_DIR}/../../.. ABSOLUTE )
+    set( @PROJECT_NAME at _BASE_DIR ${abspath} )
+  endif()
 endif()
diff --git a/cmake/sg.pl b/cmake/sg.pl
index 8a64bf4..6bce843 100644
--- a/cmake/sg.pl
+++ b/cmake/sg.pl
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 #!/usr/local/share/perl56
 
-# (C) Copyright 1996-2015 ECMWF.
+# (C) Copyright 1996-2016 ECMWF.
 # 
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 
diff --git a/config.status b/config.status
index 332233c..8b1406f 100755
--- a/config.status
+++ b/config.status
@@ -838,7 +838,7 @@ fi
 
 
     PACKAGE='eccodes'
-    VERSION='0.13.0'
+    VERSION='0.16.0'
     TIMESTAMP=''
     RM='rm -f'
     ofile='libtool'
@@ -988,7 +988,7 @@ S["PERL"]=""
 S["PERL_INSTALL_OPTIONS"]="LIB=NONE/perl"
 S["LIB_PNG"]=""
 S["CCSDS_TEST"]=""
-S["AEC_DIR"]="/usr/local/apps/aec/0.3/LP64"
+S["AEC_DIR"]=""
 S["LIB_AEC"]=""
 S["JPEG_TEST"]="jpeg.sh"
 S["LIB_JASPER"]="-ljasper"
@@ -1056,7 +1056,7 @@ S["AUTOHEADER"]="${SHELL} /home/ma/masn/git/eccodes/config/missing autoheader"
 S["AUTOMAKE"]="${SHELL} /home/ma/masn/git/eccodes/config/missing automake-1.13"
 S["AUTOCONF"]="${SHELL} /home/ma/masn/git/eccodes/config/missing autoconf"
 S["ACLOCAL"]="${SHELL} /home/ma/masn/git/eccodes/config/missing aclocal-1.13"
-S["VERSION"]="0.13.0"
+S["VERSION"]="0.16.0"
 S["PACKAGE"]="eccodes"
 S["CYGPATH_W"]="echo"
 S["am__isrc"]=""
@@ -1067,10 +1067,10 @@ S["ECCODES_AGE"]="0"
 S["ECCODES_REVISION"]="0"
 S["ECCODES_CURRENT"]="1"
 S["ECCODES_PATCH_VERSION"]="0"
-S["ECCODES_MINOR_VERSION"]="13"
+S["ECCODES_MINOR_VERSION"]="16"
 S["ECCODES_MAJOR_VERSION"]="0"
-S["ECCODES_VERSION_STR"]="0.13.0"
-S["ECCODES_MAIN_VERSION"]="0.13.0"
+S["ECCODES_VERSION_STR"]="0.16.0"
+S["ECCODES_MAIN_VERSION"]="0.16.0"
 S["LIBTOOL_DEPS"]="config/ltmain.sh"
 S["CPP"]="gcc -E"
 S["OTOOL64"]=""
@@ -1144,7 +1144,7 @@ S["exec_prefix"]="${prefix}"
 S["PACKAGE_URL"]=""
 S["PACKAGE_BUGREPORT"]="Software.Support at ecmwf.int"
 S["PACKAGE_STRING"]="eccodes  "
-S["PACKAGE_VERSION"]="0.13.0"
+S["PACKAGE_VERSION"]="0.16.0"
 S["PACKAGE_TARNAME"]="eccodes"
 S["PACKAGE_NAME"]="eccodes"
 S["PATH_SEPARATOR"]=":"
@@ -1208,9 +1208,9 @@ D["HAVE_STDINT_H"]=" 1"
 D["HAVE_UNISTD_H"]=" 1"
 D["HAVE_DLFCN_H"]=" 1"
 D["LT_OBJDIR"]=" \".libs/\""
-D["ECCODES_MAIN_VERSION"]=" 0.13.0"
+D["ECCODES_MAIN_VERSION"]=" 0.16.0"
 D["ECCODES_MAJOR_VERSION"]=" 0"
-D["ECCODES_MINOR_VERSION"]=" 13"
+D["ECCODES_MINOR_VERSION"]=" 16"
 D["ECCODES_REVISION_VERSION"]=" 0"
 D["ECCODES_CURRENT"]=" 1"
 D["ECCODES_REVISION"]=" 0"
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
index f8027cf..06162c0 100644
--- a/data/CMakeLists.txt
+++ b/data/CMakeLists.txt
@@ -15,10 +15,15 @@ endif()
 
 
 # Download all data files doing md5 check on each
-ecbuild_get_test_multidata( TARGET eccodes_get_gribs
+ecbuild_get_test_multidata( TARGET eccodes_download_gribs
                             NOCHECK
                             NAMES ${files_to_download} )
 
+if( ENABLE_TESTS )
+  set_property( TEST eccodes_download_gribs APPEND PROPERTY LABELS download_data )
+endif()
+
+
 # Copy other files - e.g. reference data, text files etc from the source data dir
 LIST(APPEND other_files
     60_model_levels
diff --git a/data/bufr/CMakeLists.txt b/data/bufr/CMakeLists.txt
index 7ec0fda..8f4818b 100644
--- a/data/bufr/CMakeLists.txt
+++ b/data/bufr/CMakeLists.txt
@@ -15,10 +15,13 @@ STRING(REGEX REPLACE "\n" ";" bufr_refs_to_download "${bufr_refs_to_download}")
 LIST(APPEND bufr_refs_to_download "vos308014_v3_26.bufr")  # See test ecc-197
 
 ecbuild_get_test_multidata(
-     TARGET eccodes_get_bufrs
+     TARGET eccodes_download_bufrs
      NOCHECK
      NAMES ${bufr_files_to_download} ${bufr_refs_to_download}
 )
+if( ENABLE_TESTS )
+  set_property( TEST eccodes_download_bufrs APPEND PROPERTY LABELS download_data )
+endif()
 
 # Copy other files - e.g. text files etc from the source data/bufr dir
 LIST(APPEND other_files
diff --git a/data/bufr/bufr_data_files.txt b/data/bufr/bufr_data_files.txt
index 1d6c61e..932c32d 100644
--- a/data/bufr/bufr_data_files.txt
+++ b/data/bufr/bufr_data_files.txt
@@ -125,6 +125,7 @@ syno_1.bufr
 syno_2.bufr
 syno_3.bufr
 syno_4.bufr
+syno_multi.bufr
 synop_multi_subset.bufr
 temp_101.bufr
 temp_102.bufr
@@ -138,3 +139,5 @@ tropical_cyclone.bufr
 uegabe.bufr
 PraticaTemp.bufr
 profiler_european.bufr
+metar_with_2_bias.bufr
+temp-land-with-substituted-values.bufr
diff --git a/data/bufr/bufr_ref_files.txt b/data/bufr/bufr_ref_files.txt
index b3d747b..5494484 100644
--- a/data/bufr/bufr_ref_files.txt
+++ b/data/bufr/bufr_ref_files.txt
@@ -268,8 +268,7 @@ syno_multi.bufr.desc.ref
 synop_multi_subset.bufr.desc.ref
 aaen_55.bufr.ls.ref
 syno_multi.bufr.header.ref
-syno_multi.bufr
-bad.bufr.json.ref
+bad.bufr.json.v0.16.0.ref
 207003.bufr.json.ref
 new_207003.bufr.ref
 new_aaen_55.bufr.ref
@@ -385,3 +384,4 @@ uegabe.bufr.num.ref
 syno.bufr.out.ref
 airep.bufr.out.ref
 new_replication.bufr.ref
+get_string_array.ref
diff --git a/data/grib_data_files.txt b/data/grib_data_files.txt
index 2d356cc..47f94f1 100644
--- a/data/grib_data_files.txt
+++ b/data/grib_data_files.txt
@@ -66,7 +66,6 @@ second_ord_rbr.grib1
 simple_bitmap.grib
 simple.grib
 small_ensemble.grib1
-spectral_compex.grib1
 spectral_complex.grib1
 spherical_model_level.grib1
 spherical_model_level.grib2
diff --git a/data/gts/CMakeLists.txt b/data/gts/CMakeLists.txt
index 01e9ca5..cee7c74 100644
--- a/data/gts/CMakeLists.txt
+++ b/data/gts/CMakeLists.txt
@@ -10,10 +10,14 @@ STRING(REGEX REPLACE "\n" ";" gts_refs_to_download "${gts_refs_to_download}")
 
 
 ecbuild_get_test_multidata(
-     TARGET eccodes_get_gts
+     TARGET eccodes_download_gts
      NOCHECK
      NAMES ${gts_files_to_download} ${gts_refs_to_download}
 )
+if( ENABLE_TESTS )
+  set_property( TEST eccodes_download_gts APPEND PROPERTY LABELS download_data )
+endif()
+
 
 # Copy other files - e.g. text files etc from the source data/gts dir
 LIST(APPEND other_files
diff --git a/data/metar/CMakeLists.txt b/data/metar/CMakeLists.txt
index cf06d0b..f1ab808 100644
--- a/data/metar/CMakeLists.txt
+++ b/data/metar/CMakeLists.txt
@@ -13,11 +13,15 @@ STRING(REGEX REPLACE "\n" ";" metar_refs_to_download "${metar_refs_to_download}"
 
 
 ecbuild_get_test_multidata(
-     TARGET eccodes_get_metars
+     TARGET eccodes_download_metars
      NOCHECK
      NAMES ${metar_files_to_download} ${metar_refs_to_download}
 )
 
+if( ENABLE_TESTS )
+  set_property( TEST eccodes_download_metars APPEND PROPERTY LABELS download_data )
+endif()
+
 # Copy other files - e.g. text files etc from the source data/metar dir
 LIST(APPEND other_files
     metar_data_files.txt
diff --git a/data/ret.sh b/data/ret.sh
index 7081789..43cc8d6 100755
--- a/data/ret.sh
+++ b/data/ret.sh
@@ -38,7 +38,6 @@ do
   tar="full_${files[i]}"
 EOF
 
-  p4 edit ${files[i]}
   if [[ ${precision[i]} -gt 0 ]] 
   then 
     grib_set -r -s bitsPerValue=0,decimalScaleFactor=${precision[i]} full_${files[i]} ${files[i]}
@@ -53,4 +52,3 @@ EOF
   grib_dump ${grib2} > /dev/null
 
 done
-
diff --git a/data/tigge/CMakeLists.txt b/data/tigge/CMakeLists.txt
index 6193594..adab34f 100644
--- a/data/tigge/CMakeLists.txt
+++ b/data/tigge/CMakeLists.txt
@@ -5,6 +5,9 @@ file(READ "tigge_data_files.txt" tigge_files_to_download)
 string(REGEX REPLACE "\n" ";" tigge_files_to_download "${tigge_files_to_download}")
 
 # Download all data files doing md5 check on each
-ecbuild_get_test_multidata( TARGET eccodes_get_tigge_gribs
+ecbuild_get_test_multidata( TARGET eccodes_download_tigge_gribs
                             NOCHECK
                             NAMES ${tigge_files_to_download} )
+if( ENABLE_TESTS )
+  set_property( TEST eccodes_download_tigge_gribs APPEND PROPERTY LABELS download_data )
+endif()
diff --git a/definitions/CMakeLists.txt b/definitions/CMakeLists.txt
index bbd1a11..043ee26 100644
--- a/definitions/CMakeLists.txt
+++ b/definitions/CMakeLists.txt
@@ -1,4 +1,7 @@
 file( GLOB definition_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.def" )
+
+set(definition_files ${definition_files} PARENT_SCOPE) # needed for memfs
+
 file( GLOB table_files      RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.table" )
 file( GLOB text_files       RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.txt" )
 
diff --git a/definitions/Makefile.am b/definitions/Makefile.am
index 0871df9..fed200b 100644
--- a/definitions/Makefile.am
+++ b/definitions/Makefile.am
@@ -6603,6 +6603,453 @@ dist_definitionsbufr_tables_0_wmo_25_codetables_DATA = \
 	bufr/tables/0/wmo/25/codetables/8087.table\
 	bufr/tables/0/wmo/25/codetables/8091.table
 
+definitionsbufr_tables_0_wmo_26dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/26
+dist_definitionsbufr_tables_0_wmo_26_DATA = \
+	bufr/tables/0/wmo/26/element.table\
+	bufr/tables/0/wmo/26/sequence.def
+
+definitionsbufr_tables_0_wmo_26_codetablesdir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/26/codetables
+dist_definitionsbufr_tables_0_wmo_26_codetables_DATA = \
+	bufr/tables/0/wmo/26/codetables/1003.table\
+	bufr/tables/0/wmo/26/codetables/10063.table\
+	bufr/tables/0/wmo/26/codetables/10064.table\
+	bufr/tables/0/wmo/26/codetables/1007.table\
+	bufr/tables/0/wmo/26/codetables/1024.table\
+	bufr/tables/0/wmo/26/codetables/1028.table\
+	bufr/tables/0/wmo/26/codetables/1029.table\
+	bufr/tables/0/wmo/26/codetables/1033.table\
+	bufr/tables/0/wmo/26/codetables/1034.table\
+	bufr/tables/0/wmo/26/codetables/1036.table\
+	bufr/tables/0/wmo/26/codetables/1038.table\
+	bufr/tables/0/wmo/26/codetables/1052.table\
+	bufr/tables/0/wmo/26/codetables/1090.table\
+	bufr/tables/0/wmo/26/codetables/1092.table\
+	bufr/tables/0/wmo/26/codetables/1101.table\
+	bufr/tables/0/wmo/26/codetables/11030.table\
+	bufr/tables/0/wmo/26/codetables/11031.table\
+	bufr/tables/0/wmo/26/codetables/11037.table\
+	bufr/tables/0/wmo/26/codetables/11038.table\
+	bufr/tables/0/wmo/26/codetables/11039.table\
+	bufr/tables/0/wmo/26/codetables/13038.table\
+	bufr/tables/0/wmo/26/codetables/13039.table\
+	bufr/tables/0/wmo/26/codetables/13040.table\
+	bufr/tables/0/wmo/26/codetables/13041.table\
+	bufr/tables/0/wmo/26/codetables/13051.table\
+	bufr/tables/0/wmo/26/codetables/13056.table\
+	bufr/tables/0/wmo/26/codetables/13057.table\
+	bufr/tables/0/wmo/26/codetables/15025.table\
+	bufr/tables/0/wmo/26/codetables/19001.table\
+	bufr/tables/0/wmo/26/codetables/19008.table\
+	bufr/tables/0/wmo/26/codetables/19010.table\
+	bufr/tables/0/wmo/26/codetables/19100.table\
+	bufr/tables/0/wmo/26/codetables/19101.table\
+	bufr/tables/0/wmo/26/codetables/19102.table\
+	bufr/tables/0/wmo/26/codetables/19103.table\
+	bufr/tables/0/wmo/26/codetables/19104.table\
+	bufr/tables/0/wmo/26/codetables/19105.table\
+	bufr/tables/0/wmo/26/codetables/19107.table\
+	bufr/tables/0/wmo/26/codetables/19108.table\
+	bufr/tables/0/wmo/26/codetables/19109.table\
+	bufr/tables/0/wmo/26/codetables/19110.table\
+	bufr/tables/0/wmo/26/codetables/19113.table\
+	bufr/tables/0/wmo/26/codetables/19117.table\
+	bufr/tables/0/wmo/26/codetables/19119.table\
+	bufr/tables/0/wmo/26/codetables/20003.table\
+	bufr/tables/0/wmo/26/codetables/20004.table\
+	bufr/tables/0/wmo/26/codetables/20005.table\
+	bufr/tables/0/wmo/26/codetables/20006.table\
+	bufr/tables/0/wmo/26/codetables/20008.table\
+	bufr/tables/0/wmo/26/codetables/20009.table\
+	bufr/tables/0/wmo/26/codetables/2001.table\
+	bufr/tables/0/wmo/26/codetables/20011.table\
+	bufr/tables/0/wmo/26/codetables/20012.table\
+	bufr/tables/0/wmo/26/codetables/20017.table\
+	bufr/tables/0/wmo/26/codetables/20018.table\
+	bufr/tables/0/wmo/26/codetables/2002.table\
+	bufr/tables/0/wmo/26/codetables/20021.table\
+	bufr/tables/0/wmo/26/codetables/20022.table\
+	bufr/tables/0/wmo/26/codetables/20023.table\
+	bufr/tables/0/wmo/26/codetables/20024.table\
+	bufr/tables/0/wmo/26/codetables/20025.table\
+	bufr/tables/0/wmo/26/codetables/20026.table\
+	bufr/tables/0/wmo/26/codetables/20027.table\
+	bufr/tables/0/wmo/26/codetables/20028.table\
+	bufr/tables/0/wmo/26/codetables/20029.table\
+	bufr/tables/0/wmo/26/codetables/2003.table\
+	bufr/tables/0/wmo/26/codetables/20032.table\
+	bufr/tables/0/wmo/26/codetables/20033.table\
+	bufr/tables/0/wmo/26/codetables/20034.table\
+	bufr/tables/0/wmo/26/codetables/20035.table\
+	bufr/tables/0/wmo/26/codetables/20036.table\
+	bufr/tables/0/wmo/26/codetables/20037.table\
+	bufr/tables/0/wmo/26/codetables/2004.table\
+	bufr/tables/0/wmo/26/codetables/20040.table\
+	bufr/tables/0/wmo/26/codetables/20041.table\
+	bufr/tables/0/wmo/26/codetables/20042.table\
+	bufr/tables/0/wmo/26/codetables/20045.table\
+	bufr/tables/0/wmo/26/codetables/20048.table\
+	bufr/tables/0/wmo/26/codetables/20050.table\
+	bufr/tables/0/wmo/26/codetables/20055.table\
+	bufr/tables/0/wmo/26/codetables/20056.table\
+	bufr/tables/0/wmo/26/codetables/20062.table\
+	bufr/tables/0/wmo/26/codetables/20063.table\
+	bufr/tables/0/wmo/26/codetables/2007.table\
+	bufr/tables/0/wmo/26/codetables/20071.table\
+	bufr/tables/0/wmo/26/codetables/20085.table\
+	bufr/tables/0/wmo/26/codetables/20086.table\
+	bufr/tables/0/wmo/26/codetables/20087.table\
+	bufr/tables/0/wmo/26/codetables/20089.table\
+	bufr/tables/0/wmo/26/codetables/20090.table\
+	bufr/tables/0/wmo/26/codetables/20101.table\
+	bufr/tables/0/wmo/26/codetables/20102.table\
+	bufr/tables/0/wmo/26/codetables/20103.table\
+	bufr/tables/0/wmo/26/codetables/20104.table\
+	bufr/tables/0/wmo/26/codetables/20105.table\
+	bufr/tables/0/wmo/26/codetables/20106.table\
+	bufr/tables/0/wmo/26/codetables/20107.table\
+	bufr/tables/0/wmo/26/codetables/20108.table\
+	bufr/tables/0/wmo/26/codetables/2011.table\
+	bufr/tables/0/wmo/26/codetables/20119.table\
+	bufr/tables/0/wmo/26/codetables/20124.table\
+	bufr/tables/0/wmo/26/codetables/2013.table\
+	bufr/tables/0/wmo/26/codetables/20136.table\
+	bufr/tables/0/wmo/26/codetables/20137.table\
+	bufr/tables/0/wmo/26/codetables/20138.table\
+	bufr/tables/0/wmo/26/codetables/2014.table\
+	bufr/tables/0/wmo/26/codetables/2015.table\
+	bufr/tables/0/wmo/26/codetables/2016.table\
+	bufr/tables/0/wmo/26/codetables/2017.table\
+	bufr/tables/0/wmo/26/codetables/2019.table\
+	bufr/tables/0/wmo/26/codetables/2020.table\
+	bufr/tables/0/wmo/26/codetables/2021.table\
+	bufr/tables/0/wmo/26/codetables/2022.table\
+	bufr/tables/0/wmo/26/codetables/2023.table\
+	bufr/tables/0/wmo/26/codetables/2024.table\
+	bufr/tables/0/wmo/26/codetables/2025.table\
+	bufr/tables/0/wmo/26/codetables/2030.table\
+	bufr/tables/0/wmo/26/codetables/2031.table\
+	bufr/tables/0/wmo/26/codetables/2032.table\
+	bufr/tables/0/wmo/26/codetables/2033.table\
+	bufr/tables/0/wmo/26/codetables/2034.table\
+	bufr/tables/0/wmo/26/codetables/2036.table\
+	bufr/tables/0/wmo/26/codetables/2037.table\
+	bufr/tables/0/wmo/26/codetables/2038.table\
+	bufr/tables/0/wmo/26/codetables/2039.table\
+	bufr/tables/0/wmo/26/codetables/2040.table\
+	bufr/tables/0/wmo/26/codetables/2041.table\
+	bufr/tables/0/wmo/26/codetables/2042.table\
+	bufr/tables/0/wmo/26/codetables/2044.table\
+	bufr/tables/0/wmo/26/codetables/2045.table\
+	bufr/tables/0/wmo/26/codetables/2046.table\
+	bufr/tables/0/wmo/26/codetables/2047.table\
+	bufr/tables/0/wmo/26/codetables/2048.table\
+	bufr/tables/0/wmo/26/codetables/2049.table\
+	bufr/tables/0/wmo/26/codetables/2050.table\
+	bufr/tables/0/wmo/26/codetables/2051.table\
+	bufr/tables/0/wmo/26/codetables/2052.table\
+	bufr/tables/0/wmo/26/codetables/2053.table\
+	bufr/tables/0/wmo/26/codetables/2054.table\
+	bufr/tables/0/wmo/26/codetables/2055.table\
+	bufr/tables/0/wmo/26/codetables/2056.table\
+	bufr/tables/0/wmo/26/codetables/2057.table\
+	bufr/tables/0/wmo/26/codetables/2058.table\
+	bufr/tables/0/wmo/26/codetables/2059.table\
+	bufr/tables/0/wmo/26/codetables/2060.table\
+	bufr/tables/0/wmo/26/codetables/2061.table\
+	bufr/tables/0/wmo/26/codetables/2062.table\
+	bufr/tables/0/wmo/26/codetables/2064.table\
+	bufr/tables/0/wmo/26/codetables/2066.table\
+	bufr/tables/0/wmo/26/codetables/2070.table\
+	bufr/tables/0/wmo/26/codetables/2080.table\
+	bufr/tables/0/wmo/26/codetables/2081.table\
+	bufr/tables/0/wmo/26/codetables/2083.table\
+	bufr/tables/0/wmo/26/codetables/2084.table\
+	bufr/tables/0/wmo/26/codetables/2095.table\
+	bufr/tables/0/wmo/26/codetables/2096.table\
+	bufr/tables/0/wmo/26/codetables/2097.table\
+	bufr/tables/0/wmo/26/codetables/2099.table\
+	bufr/tables/0/wmo/26/codetables/2101.table\
+	bufr/tables/0/wmo/26/codetables/2103.table\
+	bufr/tables/0/wmo/26/codetables/2104.table\
+	bufr/tables/0/wmo/26/codetables/21066.table\
+	bufr/tables/0/wmo/26/codetables/21067.table\
+	bufr/tables/0/wmo/26/codetables/21068.table\
+	bufr/tables/0/wmo/26/codetables/21069.table\
+	bufr/tables/0/wmo/26/codetables/21070.table\
+	bufr/tables/0/wmo/26/codetables/21072.table\
+	bufr/tables/0/wmo/26/codetables/21073.table\
+	bufr/tables/0/wmo/26/codetables/21076.table\
+	bufr/tables/0/wmo/26/codetables/21109.table\
+	bufr/tables/0/wmo/26/codetables/21115.table\
+	bufr/tables/0/wmo/26/codetables/21116.table\
+	bufr/tables/0/wmo/26/codetables/21119.table\
+	bufr/tables/0/wmo/26/codetables/21144.table\
+	bufr/tables/0/wmo/26/codetables/21148.table\
+	bufr/tables/0/wmo/26/codetables/2115.table\
+	bufr/tables/0/wmo/26/codetables/21150.table\
+	bufr/tables/0/wmo/26/codetables/21155.table\
+	bufr/tables/0/wmo/26/codetables/21158.table\
+	bufr/tables/0/wmo/26/codetables/21159.table\
+	bufr/tables/0/wmo/26/codetables/21169.table\
+	bufr/tables/0/wmo/26/codetables/2119.table\
+	bufr/tables/0/wmo/26/codetables/2131.table\
+	bufr/tables/0/wmo/26/codetables/2137.table\
+	bufr/tables/0/wmo/26/codetables/2138.table\
+	bufr/tables/0/wmo/26/codetables/2139.table\
+	bufr/tables/0/wmo/26/codetables/2143.table\
+	bufr/tables/0/wmo/26/codetables/2144.table\
+	bufr/tables/0/wmo/26/codetables/2145.table\
+	bufr/tables/0/wmo/26/codetables/2146.table\
+	bufr/tables/0/wmo/26/codetables/2147.table\
+	bufr/tables/0/wmo/26/codetables/2148.table\
+	bufr/tables/0/wmo/26/codetables/2149.table\
+	bufr/tables/0/wmo/26/codetables/2150.table\
+	bufr/tables/0/wmo/26/codetables/2151.table\
+	bufr/tables/0/wmo/26/codetables/2152.table\
+	bufr/tables/0/wmo/26/codetables/2158.table\
+	bufr/tables/0/wmo/26/codetables/2159.table\
+	bufr/tables/0/wmo/26/codetables/2160.table\
+	bufr/tables/0/wmo/26/codetables/2163.table\
+	bufr/tables/0/wmo/26/codetables/2164.table\
+	bufr/tables/0/wmo/26/codetables/2165.table\
+	bufr/tables/0/wmo/26/codetables/2166.table\
+	bufr/tables/0/wmo/26/codetables/2167.table\
+	bufr/tables/0/wmo/26/codetables/2169.table\
+	bufr/tables/0/wmo/26/codetables/2170.table\
+	bufr/tables/0/wmo/26/codetables/2172.table\
+	bufr/tables/0/wmo/26/codetables/2175.table\
+	bufr/tables/0/wmo/26/codetables/2176.table\
+	bufr/tables/0/wmo/26/codetables/2177.table\
+	bufr/tables/0/wmo/26/codetables/2178.table\
+	bufr/tables/0/wmo/26/codetables/2179.table\
+	bufr/tables/0/wmo/26/codetables/2180.table\
+	bufr/tables/0/wmo/26/codetables/2181.table\
+	bufr/tables/0/wmo/26/codetables/2182.table\
+	bufr/tables/0/wmo/26/codetables/2183.table\
+	bufr/tables/0/wmo/26/codetables/2184.table\
+	bufr/tables/0/wmo/26/codetables/2185.table\
+	bufr/tables/0/wmo/26/codetables/2186.table\
+	bufr/tables/0/wmo/26/codetables/2187.table\
+	bufr/tables/0/wmo/26/codetables/2188.table\
+	bufr/tables/0/wmo/26/codetables/2189.table\
+	bufr/tables/0/wmo/26/codetables/2191.table\
+	bufr/tables/0/wmo/26/codetables/22056.table\
+	bufr/tables/0/wmo/26/codetables/22060.table\
+	bufr/tables/0/wmo/26/codetables/22061.table\
+	bufr/tables/0/wmo/26/codetables/22067.table\
+	bufr/tables/0/wmo/26/codetables/22068.table\
+	bufr/tables/0/wmo/26/codetables/22120.table\
+	bufr/tables/0/wmo/26/codetables/22121.table\
+	bufr/tables/0/wmo/26/codetables/22122.table\
+	bufr/tables/0/wmo/26/codetables/22123.table\
+	bufr/tables/0/wmo/26/codetables/22178.table\
+	bufr/tables/0/wmo/26/codetables/23001.table\
+	bufr/tables/0/wmo/26/codetables/23002.table\
+	bufr/tables/0/wmo/26/codetables/23003.table\
+	bufr/tables/0/wmo/26/codetables/23004.table\
+	bufr/tables/0/wmo/26/codetables/23005.table\
+	bufr/tables/0/wmo/26/codetables/23006.table\
+	bufr/tables/0/wmo/26/codetables/23007.table\
+	bufr/tables/0/wmo/26/codetables/23008.table\
+	bufr/tables/0/wmo/26/codetables/23009.table\
+	bufr/tables/0/wmo/26/codetables/23016.table\
+	bufr/tables/0/wmo/26/codetables/23018.table\
+	bufr/tables/0/wmo/26/codetables/23031.table\
+	bufr/tables/0/wmo/26/codetables/23032.table\
+	bufr/tables/0/wmo/26/codetables/24003.table\
+	bufr/tables/0/wmo/26/codetables/25004.table\
+	bufr/tables/0/wmo/26/codetables/25005.table\
+	bufr/tables/0/wmo/26/codetables/25006.table\
+	bufr/tables/0/wmo/26/codetables/25009.table\
+	bufr/tables/0/wmo/26/codetables/25010.table\
+	bufr/tables/0/wmo/26/codetables/25011.table\
+	bufr/tables/0/wmo/26/codetables/25012.table\
+	bufr/tables/0/wmo/26/codetables/25013.table\
+	bufr/tables/0/wmo/26/codetables/25015.table\
+	bufr/tables/0/wmo/26/codetables/25017.table\
+	bufr/tables/0/wmo/26/codetables/25020.table\
+	bufr/tables/0/wmo/26/codetables/25021.table\
+	bufr/tables/0/wmo/26/codetables/25022.table\
+	bufr/tables/0/wmo/26/codetables/25023.table\
+	bufr/tables/0/wmo/26/codetables/25024.table\
+	bufr/tables/0/wmo/26/codetables/25029.table\
+	bufr/tables/0/wmo/26/codetables/25030.table\
+	bufr/tables/0/wmo/26/codetables/25031.table\
+	bufr/tables/0/wmo/26/codetables/25032.table\
+	bufr/tables/0/wmo/26/codetables/25033.table\
+	bufr/tables/0/wmo/26/codetables/25034.table\
+	bufr/tables/0/wmo/26/codetables/25035.table\
+	bufr/tables/0/wmo/26/codetables/25036.table\
+	bufr/tables/0/wmo/26/codetables/25040.table\
+	bufr/tables/0/wmo/26/codetables/25041.table\
+	bufr/tables/0/wmo/26/codetables/25042.table\
+	bufr/tables/0/wmo/26/codetables/25053.table\
+	bufr/tables/0/wmo/26/codetables/25063.table\
+	bufr/tables/0/wmo/26/codetables/25069.table\
+	bufr/tables/0/wmo/26/codetables/25086.table\
+	bufr/tables/0/wmo/26/codetables/25090.table\
+	bufr/tables/0/wmo/26/codetables/25093.table\
+	bufr/tables/0/wmo/26/codetables/25095.table\
+	bufr/tables/0/wmo/26/codetables/25096.table\
+	bufr/tables/0/wmo/26/codetables/25097.table\
+	bufr/tables/0/wmo/26/codetables/25098.table\
+	bufr/tables/0/wmo/26/codetables/25099.table\
+	bufr/tables/0/wmo/26/codetables/25110.table\
+	bufr/tables/0/wmo/26/codetables/25112.table\
+	bufr/tables/0/wmo/26/codetables/25113.table\
+	bufr/tables/0/wmo/26/codetables/25120.table\
+	bufr/tables/0/wmo/26/codetables/25122.table\
+	bufr/tables/0/wmo/26/codetables/25123.table\
+	bufr/tables/0/wmo/26/codetables/25124.table\
+	bufr/tables/0/wmo/26/codetables/25150.table\
+	bufr/tables/0/wmo/26/codetables/25174.table\
+	bufr/tables/0/wmo/26/codetables/25181.table\
+	bufr/tables/0/wmo/26/codetables/25182.table\
+	bufr/tables/0/wmo/26/codetables/25184.table\
+	bufr/tables/0/wmo/26/codetables/25187.table\
+	bufr/tables/0/wmo/26/codetables/26010.table\
+	bufr/tables/0/wmo/26/codetables/29001.table\
+	bufr/tables/0/wmo/26/codetables/29002.table\
+	bufr/tables/0/wmo/26/codetables/30031.table\
+	bufr/tables/0/wmo/26/codetables/30032.table\
+	bufr/tables/0/wmo/26/codetables/3010.table\
+	bufr/tables/0/wmo/26/codetables/3011.table\
+	bufr/tables/0/wmo/26/codetables/3012.table\
+	bufr/tables/0/wmo/26/codetables/3016.table\
+	bufr/tables/0/wmo/26/codetables/3017.table\
+	bufr/tables/0/wmo/26/codetables/3018.table\
+	bufr/tables/0/wmo/26/codetables/3019.table\
+	bufr/tables/0/wmo/26/codetables/31021.table\
+	bufr/tables/0/wmo/26/codetables/31031.table\
+	bufr/tables/0/wmo/26/codetables/33002.table\
+	bufr/tables/0/wmo/26/codetables/33003.table\
+	bufr/tables/0/wmo/26/codetables/33005.table\
+	bufr/tables/0/wmo/26/codetables/33006.table\
+	bufr/tables/0/wmo/26/codetables/33015.table\
+	bufr/tables/0/wmo/26/codetables/33020.table\
+	bufr/tables/0/wmo/26/codetables/33021.table\
+	bufr/tables/0/wmo/26/codetables/33022.table\
+	bufr/tables/0/wmo/26/codetables/33023.table\
+	bufr/tables/0/wmo/26/codetables/33024.table\
+	bufr/tables/0/wmo/26/codetables/33025.table\
+	bufr/tables/0/wmo/26/codetables/33026.table\
+	bufr/tables/0/wmo/26/codetables/33027.table\
+	bufr/tables/0/wmo/26/codetables/33028.table\
+	bufr/tables/0/wmo/26/codetables/33030.table\
+	bufr/tables/0/wmo/26/codetables/33031.table\
+	bufr/tables/0/wmo/26/codetables/33032.table\
+	bufr/tables/0/wmo/26/codetables/33033.table\
+	bufr/tables/0/wmo/26/codetables/33035.table\
+	bufr/tables/0/wmo/26/codetables/33037.table\
+	bufr/tables/0/wmo/26/codetables/33038.table\
+	bufr/tables/0/wmo/26/codetables/33039.table\
+	bufr/tables/0/wmo/26/codetables/33041.table\
+	bufr/tables/0/wmo/26/codetables/33042.table\
+	bufr/tables/0/wmo/26/codetables/33043.table\
+	bufr/tables/0/wmo/26/codetables/33044.table\
+	bufr/tables/0/wmo/26/codetables/33047.table\
+	bufr/tables/0/wmo/26/codetables/33048.table\
+	bufr/tables/0/wmo/26/codetables/33049.table\
+	bufr/tables/0/wmo/26/codetables/33050.table\
+	bufr/tables/0/wmo/26/codetables/33060.table\
+	bufr/tables/0/wmo/26/codetables/33070.table\
+	bufr/tables/0/wmo/26/codetables/33071.table\
+	bufr/tables/0/wmo/26/codetables/33072.table\
+	bufr/tables/0/wmo/26/codetables/33075.table\
+	bufr/tables/0/wmo/26/codetables/33076.table\
+	bufr/tables/0/wmo/26/codetables/33077.table\
+	bufr/tables/0/wmo/26/codetables/33078.table\
+	bufr/tables/0/wmo/26/codetables/33079.table\
+	bufr/tables/0/wmo/26/codetables/33080.table\
+	bufr/tables/0/wmo/26/codetables/33081.table\
+	bufr/tables/0/wmo/26/codetables/33082.table\
+	bufr/tables/0/wmo/26/codetables/33083.table\
+	bufr/tables/0/wmo/26/codetables/33084.table\
+	bufr/tables/0/wmo/26/codetables/33085.table\
+	bufr/tables/0/wmo/26/codetables/33086.table\
+	bufr/tables/0/wmo/26/codetables/33087.table\
+	bufr/tables/0/wmo/26/codetables/33088.table\
+	bufr/tables/0/wmo/26/codetables/35000.table\
+	bufr/tables/0/wmo/26/codetables/35001.table\
+	bufr/tables/0/wmo/26/codetables/35030.table\
+	bufr/tables/0/wmo/26/codetables/35031.table\
+	bufr/tables/0/wmo/26/codetables/35032.table\
+	bufr/tables/0/wmo/26/codetables/35033.table\
+	bufr/tables/0/wmo/26/codetables/35034.table\
+	bufr/tables/0/wmo/26/codetables/35035.table\
+	bufr/tables/0/wmo/26/codetables/40005.table\
+	bufr/tables/0/wmo/26/codetables/40006.table\
+	bufr/tables/0/wmo/26/codetables/40011.table\
+	bufr/tables/0/wmo/26/codetables/40012.table\
+	bufr/tables/0/wmo/26/codetables/40013.table\
+	bufr/tables/0/wmo/26/codetables/40020.table\
+	bufr/tables/0/wmo/26/codetables/40023.table\
+	bufr/tables/0/wmo/26/codetables/40024.table\
+	bufr/tables/0/wmo/26/codetables/40025.table\
+	bufr/tables/0/wmo/26/codetables/40028.table\
+	bufr/tables/0/wmo/26/codetables/40036.table\
+	bufr/tables/0/wmo/26/codetables/4059.table\
+	bufr/tables/0/wmo/26/codetables/4080.table\
+	bufr/tables/0/wmo/26/codetables/5069.table\
+	bufr/tables/0/wmo/26/codetables/8001.table\
+	bufr/tables/0/wmo/26/codetables/8002.table\
+	bufr/tables/0/wmo/26/codetables/8003.table\
+	bufr/tables/0/wmo/26/codetables/8004.table\
+	bufr/tables/0/wmo/26/codetables/8005.table\
+	bufr/tables/0/wmo/26/codetables/8006.table\
+	bufr/tables/0/wmo/26/codetables/8007.table\
+	bufr/tables/0/wmo/26/codetables/8008.table\
+	bufr/tables/0/wmo/26/codetables/8009.table\
+	bufr/tables/0/wmo/26/codetables/8010.table\
+	bufr/tables/0/wmo/26/codetables/8011.table\
+	bufr/tables/0/wmo/26/codetables/8012.table\
+	bufr/tables/0/wmo/26/codetables/8013.table\
+	bufr/tables/0/wmo/26/codetables/8014.table\
+	bufr/tables/0/wmo/26/codetables/8015.table\
+	bufr/tables/0/wmo/26/codetables/8016.table\
+	bufr/tables/0/wmo/26/codetables/8017.table\
+	bufr/tables/0/wmo/26/codetables/8018.table\
+	bufr/tables/0/wmo/26/codetables/8019.table\
+	bufr/tables/0/wmo/26/codetables/8021.table\
+	bufr/tables/0/wmo/26/codetables/8023.table\
+	bufr/tables/0/wmo/26/codetables/8024.table\
+	bufr/tables/0/wmo/26/codetables/8025.table\
+	bufr/tables/0/wmo/26/codetables/8026.table\
+	bufr/tables/0/wmo/26/codetables/8029.table\
+	bufr/tables/0/wmo/26/codetables/8032.table\
+	bufr/tables/0/wmo/26/codetables/8033.table\
+	bufr/tables/0/wmo/26/codetables/8034.table\
+	bufr/tables/0/wmo/26/codetables/8035.table\
+	bufr/tables/0/wmo/26/codetables/8036.table\
+	bufr/tables/0/wmo/26/codetables/8039.table\
+	bufr/tables/0/wmo/26/codetables/8040.table\
+	bufr/tables/0/wmo/26/codetables/8041.table\
+	bufr/tables/0/wmo/26/codetables/8042.table\
+	bufr/tables/0/wmo/26/codetables/8043.table\
+	bufr/tables/0/wmo/26/codetables/8050.table\
+	bufr/tables/0/wmo/26/codetables/8051.table\
+	bufr/tables/0/wmo/26/codetables/8052.table\
+	bufr/tables/0/wmo/26/codetables/8053.table\
+	bufr/tables/0/wmo/26/codetables/8054.table\
+	bufr/tables/0/wmo/26/codetables/8060.table\
+	bufr/tables/0/wmo/26/codetables/8065.table\
+	bufr/tables/0/wmo/26/codetables/8066.table\
+	bufr/tables/0/wmo/26/codetables/8070.table\
+	bufr/tables/0/wmo/26/codetables/8072.table\
+	bufr/tables/0/wmo/26/codetables/8074.table\
+	bufr/tables/0/wmo/26/codetables/8075.table\
+	bufr/tables/0/wmo/26/codetables/8076.table\
+	bufr/tables/0/wmo/26/codetables/8077.table\
+	bufr/tables/0/wmo/26/codetables/8079.table\
+	bufr/tables/0/wmo/26/codetables/8080.table\
+	bufr/tables/0/wmo/26/codetables/8081.table\
+	bufr/tables/0/wmo/26/codetables/8082.table\
+	bufr/tables/0/wmo/26/codetables/8083.table\
+	bufr/tables/0/wmo/26/codetables/8085.table\
+	bufr/tables/0/wmo/26/codetables/8086.table\
+	bufr/tables/0/wmo/26/codetables/8087.table\
+	bufr/tables/0/wmo/26/codetables/8091.table
+
 definitionsbufr_tables_0_wmo_6dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/6
 dist_definitionsbufr_tables_0_wmo_6_DATA = \
 	bufr/tables/0/wmo/6/element.table\
@@ -8040,6 +8487,7 @@ dist_definitionsgrib1_DATA = \
 	grib1/local.82.82.def\
 	grib1/local.82.83.def\
 	grib1/local.82.def\
+	grib1/local.85.def\
 	grib1/local.96.def\
 	grib1/local.98.1.def\
 	grib1/local.98.10.def\
@@ -8126,7 +8574,9 @@ dist_definitionsgrib1_local_ecmf_DATA = \
 
 definitionsgrib1_local_edzwdir = @ECCODES_DEFINITION_PATH@/grib1/local/edzw
 dist_definitionsgrib1_local_edzw_DATA = \
-	grib1/local/edzw/5.table
+	grib1/local/edzw/2.0.3.table\
+	grib1/local/edzw/5.table\
+	grib1/local/edzw/generatingProcessIdentifier.table
 
 definitionsgrib1_local_rjtddir = @ECCODES_DEFINITION_PATH@/grib1/local/rjtd
 dist_definitionsgrib1_local_rjtd_DATA = \
@@ -8224,6 +8674,9 @@ dist_definitionsgrib1_localConcepts_kwbc_DATA = \
 
 definitionsgrib1_localConcepts_lfpwdir = @ECCODES_DEFINITION_PATH@/grib1/localConcepts/lfpw
 dist_definitionsgrib1_localConcepts_lfpw_DATA = \
+	grib1/localConcepts/lfpw/faFieldName.def\
+	grib1/localConcepts/lfpw/faLevelName.def\
+	grib1/localConcepts/lfpw/faModelName.def\
 	grib1/localConcepts/lfpw/name.def\
 	grib1/localConcepts/lfpw/paramId.def\
 	grib1/localConcepts/lfpw/shortName.def\
@@ -8257,17 +8710,23 @@ definitionsgrib2dir = @ECCODES_DEFINITION_PATH@/grib2
 dist_definitionsgrib2_DATA = \
 	grib2/boot.def\
 	grib2/boot_multifield.def\
+	grib2/centre.table\
 	grib2/cfName.def\
 	grib2/cfVarName.def\
 	grib2/dimension.0.table\
 	grib2/dimensionTableNumber.table\
 	grib2/dimensionType.table\
 	grib2/grib2LocalSectionNumber.82.table\
+	grib2/grib2LocalSectionNumber.85.table\
 	grib2/grib2LocalSectionNumber.98.table\
 	grib2/local.82.0.def\
 	grib2/local.82.82.def\
 	grib2/local.82.83.def\
 	grib2/local.82.def\
+	grib2/local.85.0.def\
+	grib2/local.85.1.def\
+	grib2/local.85.2.def\
+	grib2/local.85.def\
 	grib2/local.98.0.def\
 	grib2/local.98.1.def\
 	grib2/local.98.11.def\
@@ -8311,6 +8770,9 @@ dist_definitionsgrib2_DATA = \
 	grib2/products_7.def\
 	grib2/products_8.def\
 	grib2/products_9.def\
+	grib2/products_s2s.def\
+	grib2/products_tigge.def\
+	grib2/products_uerra.def\
 	grib2/rules.def\
 	grib2/section.0.def\
 	grib2/section.1.def\
@@ -8409,6 +8871,7 @@ dist_definitionsgrib2_DATA = \
 	grib2/template.4.54.def\
 	grib2/template.4.55.def\
 	grib2/template.4.56.def\
+	grib2/template.4.57.def\
 	grib2/template.4.6.def\
 	grib2/template.4.60.def\
 	grib2/template.4.61.def\
@@ -8426,6 +8889,7 @@ dist_definitionsgrib2_DATA = \
 	grib2/template.4.parameter_aerosol_44.def\
 	grib2/template.4.parameter_aerosol_optical.def\
 	grib2/template.4.parameter_chemical.def\
+	grib2/template.4.parameter_chemical_distribution.def\
 	grib2/template.4.parameter_partition.def\
 	grib2/template.4.parameter_tile.def\
 	grib2/template.4.percentile.def\
@@ -8491,6 +8955,13 @@ dist_definitionsgrib2_local_1098_DATA = \
 	grib2/local/1098/models.table\
 	grib2/local/1098/template.2.0.def
 
+definitionsgrib2_local_edzwdir = @ECCODES_DEFINITION_PATH@/grib2/local/edzw
+dist_definitionsgrib2_local_edzw_DATA = \
+	grib2/local/edzw/2.0.3.table\
+	grib2/local/edzw/3.table\
+	grib2/local/edzw/5.table\
+	grib2/local/edzw/generatingProcessIdentifier.table
+
 definitionsgrib2_localConcepts_cnmcdir = @ECCODES_DEFINITION_PATH@/grib2/localConcepts/cnmc
 dist_definitionsgrib2_localConcepts_cnmc_DATA = \
 	grib2/localConcepts/cnmc/modelName.def\
@@ -8553,6 +9024,9 @@ dist_definitionsgrib2_localConcepts_kwbc_DATA = \
 
 definitionsgrib2_localConcepts_lfpwdir = @ECCODES_DEFINITION_PATH@/grib2/localConcepts/lfpw
 dist_definitionsgrib2_localConcepts_lfpw_DATA = \
+	grib2/localConcepts/lfpw/faFieldName.def\
+	grib2/localConcepts/lfpw/faLevelName.def\
+	grib2/localConcepts/lfpw/faModelName.def\
 	grib2/localConcepts/lfpw/name.def\
 	grib2/localConcepts/lfpw/paramId.def\
 	grib2/localConcepts/lfpw/shortName.def\
@@ -9666,6 +10140,138 @@ dist_definitionsgrib2_tables_16_DATA = \
 	grib2/tables/16/6.0.table\
 	grib2/tables/16/stepType.table
 
+definitionsgrib2_tables_17dir = @ECCODES_DEFINITION_PATH@/grib2/tables/17
+dist_definitionsgrib2_tables_17_DATA = \
+	grib2/tables/17/0.0.table\
+	grib2/tables/17/1.0.table\
+	grib2/tables/17/1.1.table\
+	grib2/tables/17/1.2.table\
+	grib2/tables/17/1.3.table\
+	grib2/tables/17/1.4.table\
+	grib2/tables/17/1.5.table\
+	grib2/tables/17/1.6.table\
+	grib2/tables/17/3.0.table\
+	grib2/tables/17/3.1.table\
+	grib2/tables/17/3.10.table\
+	grib2/tables/17/3.11.table\
+	grib2/tables/17/3.15.table\
+	grib2/tables/17/3.2.table\
+	grib2/tables/17/3.20.table\
+	grib2/tables/17/3.21.table\
+	grib2/tables/17/3.3.table\
+	grib2/tables/17/3.4.table\
+	grib2/tables/17/3.5.table\
+	grib2/tables/17/3.6.table\
+	grib2/tables/17/3.7.table\
+	grib2/tables/17/3.8.table\
+	grib2/tables/17/3.9.table\
+	grib2/tables/17/4.0.table\
+	grib2/tables/17/4.1.0.table\
+	grib2/tables/17/4.1.1.table\
+	grib2/tables/17/4.1.10.table\
+	grib2/tables/17/4.1.192.table\
+	grib2/tables/17/4.1.2.table\
+	grib2/tables/17/4.1.3.table\
+	grib2/tables/17/4.10.table\
+	grib2/tables/17/4.11.table\
+	grib2/tables/17/4.12.table\
+	grib2/tables/17/4.13.table\
+	grib2/tables/17/4.14.table\
+	grib2/tables/17/4.15.table\
+	grib2/tables/17/4.192.table\
+	grib2/tables/17/4.2.0.0.table\
+	grib2/tables/17/4.2.0.1.table\
+	grib2/tables/17/4.2.0.13.table\
+	grib2/tables/17/4.2.0.14.table\
+	grib2/tables/17/4.2.0.15.table\
+	grib2/tables/17/4.2.0.16.table\
+	grib2/tables/17/4.2.0.17.table\
+	grib2/tables/17/4.2.0.18.table\
+	grib2/tables/17/4.2.0.19.table\
+	grib2/tables/17/4.2.0.190.table\
+	grib2/tables/17/4.2.0.191.table\
+	grib2/tables/17/4.2.0.2.table\
+	grib2/tables/17/4.2.0.20.table\
+	grib2/tables/17/4.2.0.3.table\
+	grib2/tables/17/4.2.0.4.table\
+	grib2/tables/17/4.2.0.5.table\
+	grib2/tables/17/4.2.0.6.table\
+	grib2/tables/17/4.2.0.7.table\
+	grib2/tables/17/4.2.1.0.table\
+	grib2/tables/17/4.2.1.1.table\
+	grib2/tables/17/4.2.1.2.table\
+	grib2/tables/17/4.2.10.0.table\
+	grib2/tables/17/4.2.10.1.table\
+	grib2/tables/17/4.2.10.191.table\
+	grib2/tables/17/4.2.10.2.table\
+	grib2/tables/17/4.2.10.3.table\
+	grib2/tables/17/4.2.10.4.table\
+	grib2/tables/17/4.2.2.0.table\
+	grib2/tables/17/4.2.2.3.table\
+	grib2/tables/17/4.2.2.4.table\
+	grib2/tables/17/4.2.2.5.table\
+	grib2/tables/17/4.2.3.0.table\
+	grib2/tables/17/4.2.3.1.table\
+	grib2/tables/17/4.2.3.2.table\
+	grib2/tables/17/4.2.3.3.table\
+	grib2/tables/17/4.2.3.4.table\
+	grib2/tables/17/4.2.3.5.table\
+	grib2/tables/17/4.2.3.6.table\
+	grib2/tables/17/4.201.table\
+	grib2/tables/17/4.202.table\
+	grib2/tables/17/4.203.table\
+	grib2/tables/17/4.204.table\
+	grib2/tables/17/4.205.table\
+	grib2/tables/17/4.206.table\
+	grib2/tables/17/4.207.table\
+	grib2/tables/17/4.208.table\
+	grib2/tables/17/4.209.table\
+	grib2/tables/17/4.210.table\
+	grib2/tables/17/4.211.table\
+	grib2/tables/17/4.212.table\
+	grib2/tables/17/4.213.table\
+	grib2/tables/17/4.215.table\
+	grib2/tables/17/4.216.table\
+	grib2/tables/17/4.217.table\
+	grib2/tables/17/4.218.table\
+	grib2/tables/17/4.219.table\
+	grib2/tables/17/4.220.table\
+	grib2/tables/17/4.221.table\
+	grib2/tables/17/4.222.table\
+	grib2/tables/17/4.223.table\
+	grib2/tables/17/4.224.table\
+	grib2/tables/17/4.225.table\
+	grib2/tables/17/4.227.table\
+	grib2/tables/17/4.230.table\
+	grib2/tables/17/4.233.table\
+	grib2/tables/17/4.234.table\
+	grib2/tables/17/4.236.table\
+	grib2/tables/17/4.240.table\
+	grib2/tables/17/4.241.table\
+	grib2/tables/17/4.242.table\
+	grib2/tables/17/4.243.table\
+	grib2/tables/17/4.3.table\
+	grib2/tables/17/4.4.table\
+	grib2/tables/17/4.5.table\
+	grib2/tables/17/4.6.table\
+	grib2/tables/17/4.7.table\
+	grib2/tables/17/4.8.table\
+	grib2/tables/17/4.9.table\
+	grib2/tables/17/4.91.table\
+	grib2/tables/17/5.0.table\
+	grib2/tables/17/5.1.table\
+	grib2/tables/17/5.2.table\
+	grib2/tables/17/5.3.table\
+	grib2/tables/17/5.4.table\
+	grib2/tables/17/5.40.table\
+	grib2/tables/17/5.40000.table\
+	grib2/tables/17/5.5.table\
+	grib2/tables/17/5.50002.table\
+	grib2/tables/17/5.6.table\
+	grib2/tables/17/5.7.table\
+	grib2/tables/17/6.0.table\
+	grib2/tables/17/stepType.table
+
 definitionsgrib2_tables_2dir = @ECCODES_DEFINITION_PATH@/grib2/tables/2
 dist_definitionsgrib2_tables_2_DATA = \
 	grib2/tables/2/0.0.table\
@@ -12193,6 +12799,7 @@ dist_definitionsmars_DATA = \
 	mars/grib.elda.fc.def\
 	mars/grib.elda.me.def\
 	mars/grib.elda.ses.def\
+	mars/grib.enda.4i.def\
 	mars/grib.enda.4v.def\
 	mars/grib.enda.an.def\
 	mars/grib.enda.def\
diff --git a/definitions/Makefile.in b/definitions/Makefile.in
index 1b93770..1e3047d 100644
--- a/definitions/Makefile.in
+++ b/definitions/Makefile.in
@@ -124,6 +124,8 @@ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(dist_definitionsbufr_tables_0_wmo_24_codetables_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_25_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_25_codetables_DATA) \
+	$(dist_definitionsbufr_tables_0_wmo_26_DATA) \
+	$(dist_definitionsbufr_tables_0_wmo_26_codetables_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_6_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_6_codetables_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_7_DATA) \
@@ -170,6 +172,7 @@ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(dist_definitionsgrib2_localConcepts_lfpw1_DATA) \
 	$(dist_definitionsgrib2_localConcepts_lssw_DATA) \
 	$(dist_definitionsgrib2_local_1098_DATA) \
+	$(dist_definitionsgrib2_local_edzw_DATA) \
 	$(dist_definitionsgrib2_tables_DATA) \
 	$(dist_definitionsgrib2_tables_0_DATA) \
 	$(dist_definitionsgrib2_tables_1_DATA) \
@@ -180,6 +183,7 @@ DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(dist_definitionsgrib2_tables_14_DATA) \
 	$(dist_definitionsgrib2_tables_15_DATA) \
 	$(dist_definitionsgrib2_tables_16_DATA) \
+	$(dist_definitionsgrib2_tables_17_DATA) \
 	$(dist_definitionsgrib2_tables_2_DATA) \
 	$(dist_definitionsgrib2_tables_3_DATA) \
 	$(dist_definitionsgrib2_tables_4_DATA) \
@@ -300,6 +304,8 @@ am__installdirs = "$(DESTDIR)$(definitionsdir)" \
 	"$(DESTDIR)$(definitionsbufr_tables_0_wmo_24_codetablesdir)" \
 	"$(DESTDIR)$(definitionsbufr_tables_0_wmo_25dir)" \
 	"$(DESTDIR)$(definitionsbufr_tables_0_wmo_25_codetablesdir)" \
+	"$(DESTDIR)$(definitionsbufr_tables_0_wmo_26dir)" \
+	"$(DESTDIR)$(definitionsbufr_tables_0_wmo_26_codetablesdir)" \
 	"$(DESTDIR)$(definitionsbufr_tables_0_wmo_6dir)" \
 	"$(DESTDIR)$(definitionsbufr_tables_0_wmo_6_codetablesdir)" \
 	"$(DESTDIR)$(definitionsbufr_tables_0_wmo_7dir)" \
@@ -347,6 +353,7 @@ am__installdirs = "$(DESTDIR)$(definitionsdir)" \
 	"$(DESTDIR)$(definitionsgrib2_localConcepts_lfpw1dir)" \
 	"$(DESTDIR)$(definitionsgrib2_localConcepts_lsswdir)" \
 	"$(DESTDIR)$(definitionsgrib2_local_1098dir)" \
+	"$(DESTDIR)$(definitionsgrib2_local_edzwdir)" \
 	"$(DESTDIR)$(definitionsgrib2_tablesdir)" \
 	"$(DESTDIR)$(definitionsgrib2_tables_0dir)" \
 	"$(DESTDIR)$(definitionsgrib2_tables_1dir)" \
@@ -357,6 +364,7 @@ am__installdirs = "$(DESTDIR)$(definitionsdir)" \
 	"$(DESTDIR)$(definitionsgrib2_tables_14dir)" \
 	"$(DESTDIR)$(definitionsgrib2_tables_15dir)" \
 	"$(DESTDIR)$(definitionsgrib2_tables_16dir)" \
+	"$(DESTDIR)$(definitionsgrib2_tables_17dir)" \
 	"$(DESTDIR)$(definitionsgrib2_tables_2dir)" \
 	"$(DESTDIR)$(definitionsgrib2_tables_3dir)" \
 	"$(DESTDIR)$(definitionsgrib2_tables_4dir)" \
@@ -421,6 +429,8 @@ DATA = $(dist_definitions_DATA) $(dist_definitionsbudg_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_24_codetables_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_25_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_25_codetables_DATA) \
+	$(dist_definitionsbufr_tables_0_wmo_26_DATA) \
+	$(dist_definitionsbufr_tables_0_wmo_26_codetables_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_6_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_6_codetables_DATA) \
 	$(dist_definitionsbufr_tables_0_wmo_7_DATA) \
@@ -467,6 +477,7 @@ DATA = $(dist_definitions_DATA) $(dist_definitionsbudg_DATA) \
 	$(dist_definitionsgrib2_localConcepts_lfpw1_DATA) \
 	$(dist_definitionsgrib2_localConcepts_lssw_DATA) \
 	$(dist_definitionsgrib2_local_1098_DATA) \
+	$(dist_definitionsgrib2_local_edzw_DATA) \
 	$(dist_definitionsgrib2_tables_DATA) \
 	$(dist_definitionsgrib2_tables_0_DATA) \
 	$(dist_definitionsgrib2_tables_1_DATA) \
@@ -477,6 +488,7 @@ DATA = $(dist_definitions_DATA) $(dist_definitionsbudg_DATA) \
 	$(dist_definitionsgrib2_tables_14_DATA) \
 	$(dist_definitionsgrib2_tables_15_DATA) \
 	$(dist_definitionsgrib2_tables_16_DATA) \
+	$(dist_definitionsgrib2_tables_17_DATA) \
 	$(dist_definitionsgrib2_tables_2_DATA) \
 	$(dist_definitionsgrib2_tables_3_DATA) \
 	$(dist_definitionsgrib2_tables_4_DATA) \
@@ -7288,6 +7300,453 @@ dist_definitionsbufr_tables_0_wmo_25_codetables_DATA = \
 	bufr/tables/0/wmo/25/codetables/8087.table\
 	bufr/tables/0/wmo/25/codetables/8091.table
 
+definitionsbufr_tables_0_wmo_26dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/26
+dist_definitionsbufr_tables_0_wmo_26_DATA = \
+	bufr/tables/0/wmo/26/element.table\
+	bufr/tables/0/wmo/26/sequence.def
+
+definitionsbufr_tables_0_wmo_26_codetablesdir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/26/codetables
+dist_definitionsbufr_tables_0_wmo_26_codetables_DATA = \
+	bufr/tables/0/wmo/26/codetables/1003.table\
+	bufr/tables/0/wmo/26/codetables/10063.table\
+	bufr/tables/0/wmo/26/codetables/10064.table\
+	bufr/tables/0/wmo/26/codetables/1007.table\
+	bufr/tables/0/wmo/26/codetables/1024.table\
+	bufr/tables/0/wmo/26/codetables/1028.table\
+	bufr/tables/0/wmo/26/codetables/1029.table\
+	bufr/tables/0/wmo/26/codetables/1033.table\
+	bufr/tables/0/wmo/26/codetables/1034.table\
+	bufr/tables/0/wmo/26/codetables/1036.table\
+	bufr/tables/0/wmo/26/codetables/1038.table\
+	bufr/tables/0/wmo/26/codetables/1052.table\
+	bufr/tables/0/wmo/26/codetables/1090.table\
+	bufr/tables/0/wmo/26/codetables/1092.table\
+	bufr/tables/0/wmo/26/codetables/1101.table\
+	bufr/tables/0/wmo/26/codetables/11030.table\
+	bufr/tables/0/wmo/26/codetables/11031.table\
+	bufr/tables/0/wmo/26/codetables/11037.table\
+	bufr/tables/0/wmo/26/codetables/11038.table\
+	bufr/tables/0/wmo/26/codetables/11039.table\
+	bufr/tables/0/wmo/26/codetables/13038.table\
+	bufr/tables/0/wmo/26/codetables/13039.table\
+	bufr/tables/0/wmo/26/codetables/13040.table\
+	bufr/tables/0/wmo/26/codetables/13041.table\
+	bufr/tables/0/wmo/26/codetables/13051.table\
+	bufr/tables/0/wmo/26/codetables/13056.table\
+	bufr/tables/0/wmo/26/codetables/13057.table\
+	bufr/tables/0/wmo/26/codetables/15025.table\
+	bufr/tables/0/wmo/26/codetables/19001.table\
+	bufr/tables/0/wmo/26/codetables/19008.table\
+	bufr/tables/0/wmo/26/codetables/19010.table\
+	bufr/tables/0/wmo/26/codetables/19100.table\
+	bufr/tables/0/wmo/26/codetables/19101.table\
+	bufr/tables/0/wmo/26/codetables/19102.table\
+	bufr/tables/0/wmo/26/codetables/19103.table\
+	bufr/tables/0/wmo/26/codetables/19104.table\
+	bufr/tables/0/wmo/26/codetables/19105.table\
+	bufr/tables/0/wmo/26/codetables/19107.table\
+	bufr/tables/0/wmo/26/codetables/19108.table\
+	bufr/tables/0/wmo/26/codetables/19109.table\
+	bufr/tables/0/wmo/26/codetables/19110.table\
+	bufr/tables/0/wmo/26/codetables/19113.table\
+	bufr/tables/0/wmo/26/codetables/19117.table\
+	bufr/tables/0/wmo/26/codetables/19119.table\
+	bufr/tables/0/wmo/26/codetables/20003.table\
+	bufr/tables/0/wmo/26/codetables/20004.table\
+	bufr/tables/0/wmo/26/codetables/20005.table\
+	bufr/tables/0/wmo/26/codetables/20006.table\
+	bufr/tables/0/wmo/26/codetables/20008.table\
+	bufr/tables/0/wmo/26/codetables/20009.table\
+	bufr/tables/0/wmo/26/codetables/2001.table\
+	bufr/tables/0/wmo/26/codetables/20011.table\
+	bufr/tables/0/wmo/26/codetables/20012.table\
+	bufr/tables/0/wmo/26/codetables/20017.table\
+	bufr/tables/0/wmo/26/codetables/20018.table\
+	bufr/tables/0/wmo/26/codetables/2002.table\
+	bufr/tables/0/wmo/26/codetables/20021.table\
+	bufr/tables/0/wmo/26/codetables/20022.table\
+	bufr/tables/0/wmo/26/codetables/20023.table\
+	bufr/tables/0/wmo/26/codetables/20024.table\
+	bufr/tables/0/wmo/26/codetables/20025.table\
+	bufr/tables/0/wmo/26/codetables/20026.table\
+	bufr/tables/0/wmo/26/codetables/20027.table\
+	bufr/tables/0/wmo/26/codetables/20028.table\
+	bufr/tables/0/wmo/26/codetables/20029.table\
+	bufr/tables/0/wmo/26/codetables/2003.table\
+	bufr/tables/0/wmo/26/codetables/20032.table\
+	bufr/tables/0/wmo/26/codetables/20033.table\
+	bufr/tables/0/wmo/26/codetables/20034.table\
+	bufr/tables/0/wmo/26/codetables/20035.table\
+	bufr/tables/0/wmo/26/codetables/20036.table\
+	bufr/tables/0/wmo/26/codetables/20037.table\
+	bufr/tables/0/wmo/26/codetables/2004.table\
+	bufr/tables/0/wmo/26/codetables/20040.table\
+	bufr/tables/0/wmo/26/codetables/20041.table\
+	bufr/tables/0/wmo/26/codetables/20042.table\
+	bufr/tables/0/wmo/26/codetables/20045.table\
+	bufr/tables/0/wmo/26/codetables/20048.table\
+	bufr/tables/0/wmo/26/codetables/20050.table\
+	bufr/tables/0/wmo/26/codetables/20055.table\
+	bufr/tables/0/wmo/26/codetables/20056.table\
+	bufr/tables/0/wmo/26/codetables/20062.table\
+	bufr/tables/0/wmo/26/codetables/20063.table\
+	bufr/tables/0/wmo/26/codetables/2007.table\
+	bufr/tables/0/wmo/26/codetables/20071.table\
+	bufr/tables/0/wmo/26/codetables/20085.table\
+	bufr/tables/0/wmo/26/codetables/20086.table\
+	bufr/tables/0/wmo/26/codetables/20087.table\
+	bufr/tables/0/wmo/26/codetables/20089.table\
+	bufr/tables/0/wmo/26/codetables/20090.table\
+	bufr/tables/0/wmo/26/codetables/20101.table\
+	bufr/tables/0/wmo/26/codetables/20102.table\
+	bufr/tables/0/wmo/26/codetables/20103.table\
+	bufr/tables/0/wmo/26/codetables/20104.table\
+	bufr/tables/0/wmo/26/codetables/20105.table\
+	bufr/tables/0/wmo/26/codetables/20106.table\
+	bufr/tables/0/wmo/26/codetables/20107.table\
+	bufr/tables/0/wmo/26/codetables/20108.table\
+	bufr/tables/0/wmo/26/codetables/2011.table\
+	bufr/tables/0/wmo/26/codetables/20119.table\
+	bufr/tables/0/wmo/26/codetables/20124.table\
+	bufr/tables/0/wmo/26/codetables/2013.table\
+	bufr/tables/0/wmo/26/codetables/20136.table\
+	bufr/tables/0/wmo/26/codetables/20137.table\
+	bufr/tables/0/wmo/26/codetables/20138.table\
+	bufr/tables/0/wmo/26/codetables/2014.table\
+	bufr/tables/0/wmo/26/codetables/2015.table\
+	bufr/tables/0/wmo/26/codetables/2016.table\
+	bufr/tables/0/wmo/26/codetables/2017.table\
+	bufr/tables/0/wmo/26/codetables/2019.table\
+	bufr/tables/0/wmo/26/codetables/2020.table\
+	bufr/tables/0/wmo/26/codetables/2021.table\
+	bufr/tables/0/wmo/26/codetables/2022.table\
+	bufr/tables/0/wmo/26/codetables/2023.table\
+	bufr/tables/0/wmo/26/codetables/2024.table\
+	bufr/tables/0/wmo/26/codetables/2025.table\
+	bufr/tables/0/wmo/26/codetables/2030.table\
+	bufr/tables/0/wmo/26/codetables/2031.table\
+	bufr/tables/0/wmo/26/codetables/2032.table\
+	bufr/tables/0/wmo/26/codetables/2033.table\
+	bufr/tables/0/wmo/26/codetables/2034.table\
+	bufr/tables/0/wmo/26/codetables/2036.table\
+	bufr/tables/0/wmo/26/codetables/2037.table\
+	bufr/tables/0/wmo/26/codetables/2038.table\
+	bufr/tables/0/wmo/26/codetables/2039.table\
+	bufr/tables/0/wmo/26/codetables/2040.table\
+	bufr/tables/0/wmo/26/codetables/2041.table\
+	bufr/tables/0/wmo/26/codetables/2042.table\
+	bufr/tables/0/wmo/26/codetables/2044.table\
+	bufr/tables/0/wmo/26/codetables/2045.table\
+	bufr/tables/0/wmo/26/codetables/2046.table\
+	bufr/tables/0/wmo/26/codetables/2047.table\
+	bufr/tables/0/wmo/26/codetables/2048.table\
+	bufr/tables/0/wmo/26/codetables/2049.table\
+	bufr/tables/0/wmo/26/codetables/2050.table\
+	bufr/tables/0/wmo/26/codetables/2051.table\
+	bufr/tables/0/wmo/26/codetables/2052.table\
+	bufr/tables/0/wmo/26/codetables/2053.table\
+	bufr/tables/0/wmo/26/codetables/2054.table\
+	bufr/tables/0/wmo/26/codetables/2055.table\
+	bufr/tables/0/wmo/26/codetables/2056.table\
+	bufr/tables/0/wmo/26/codetables/2057.table\
+	bufr/tables/0/wmo/26/codetables/2058.table\
+	bufr/tables/0/wmo/26/codetables/2059.table\
+	bufr/tables/0/wmo/26/codetables/2060.table\
+	bufr/tables/0/wmo/26/codetables/2061.table\
+	bufr/tables/0/wmo/26/codetables/2062.table\
+	bufr/tables/0/wmo/26/codetables/2064.table\
+	bufr/tables/0/wmo/26/codetables/2066.table\
+	bufr/tables/0/wmo/26/codetables/2070.table\
+	bufr/tables/0/wmo/26/codetables/2080.table\
+	bufr/tables/0/wmo/26/codetables/2081.table\
+	bufr/tables/0/wmo/26/codetables/2083.table\
+	bufr/tables/0/wmo/26/codetables/2084.table\
+	bufr/tables/0/wmo/26/codetables/2095.table\
+	bufr/tables/0/wmo/26/codetables/2096.table\
+	bufr/tables/0/wmo/26/codetables/2097.table\
+	bufr/tables/0/wmo/26/codetables/2099.table\
+	bufr/tables/0/wmo/26/codetables/2101.table\
+	bufr/tables/0/wmo/26/codetables/2103.table\
+	bufr/tables/0/wmo/26/codetables/2104.table\
+	bufr/tables/0/wmo/26/codetables/21066.table\
+	bufr/tables/0/wmo/26/codetables/21067.table\
+	bufr/tables/0/wmo/26/codetables/21068.table\
+	bufr/tables/0/wmo/26/codetables/21069.table\
+	bufr/tables/0/wmo/26/codetables/21070.table\
+	bufr/tables/0/wmo/26/codetables/21072.table\
+	bufr/tables/0/wmo/26/codetables/21073.table\
+	bufr/tables/0/wmo/26/codetables/21076.table\
+	bufr/tables/0/wmo/26/codetables/21109.table\
+	bufr/tables/0/wmo/26/codetables/21115.table\
+	bufr/tables/0/wmo/26/codetables/21116.table\
+	bufr/tables/0/wmo/26/codetables/21119.table\
+	bufr/tables/0/wmo/26/codetables/21144.table\
+	bufr/tables/0/wmo/26/codetables/21148.table\
+	bufr/tables/0/wmo/26/codetables/2115.table\
+	bufr/tables/0/wmo/26/codetables/21150.table\
+	bufr/tables/0/wmo/26/codetables/21155.table\
+	bufr/tables/0/wmo/26/codetables/21158.table\
+	bufr/tables/0/wmo/26/codetables/21159.table\
+	bufr/tables/0/wmo/26/codetables/21169.table\
+	bufr/tables/0/wmo/26/codetables/2119.table\
+	bufr/tables/0/wmo/26/codetables/2131.table\
+	bufr/tables/0/wmo/26/codetables/2137.table\
+	bufr/tables/0/wmo/26/codetables/2138.table\
+	bufr/tables/0/wmo/26/codetables/2139.table\
+	bufr/tables/0/wmo/26/codetables/2143.table\
+	bufr/tables/0/wmo/26/codetables/2144.table\
+	bufr/tables/0/wmo/26/codetables/2145.table\
+	bufr/tables/0/wmo/26/codetables/2146.table\
+	bufr/tables/0/wmo/26/codetables/2147.table\
+	bufr/tables/0/wmo/26/codetables/2148.table\
+	bufr/tables/0/wmo/26/codetables/2149.table\
+	bufr/tables/0/wmo/26/codetables/2150.table\
+	bufr/tables/0/wmo/26/codetables/2151.table\
+	bufr/tables/0/wmo/26/codetables/2152.table\
+	bufr/tables/0/wmo/26/codetables/2158.table\
+	bufr/tables/0/wmo/26/codetables/2159.table\
+	bufr/tables/0/wmo/26/codetables/2160.table\
+	bufr/tables/0/wmo/26/codetables/2163.table\
+	bufr/tables/0/wmo/26/codetables/2164.table\
+	bufr/tables/0/wmo/26/codetables/2165.table\
+	bufr/tables/0/wmo/26/codetables/2166.table\
+	bufr/tables/0/wmo/26/codetables/2167.table\
+	bufr/tables/0/wmo/26/codetables/2169.table\
+	bufr/tables/0/wmo/26/codetables/2170.table\
+	bufr/tables/0/wmo/26/codetables/2172.table\
+	bufr/tables/0/wmo/26/codetables/2175.table\
+	bufr/tables/0/wmo/26/codetables/2176.table\
+	bufr/tables/0/wmo/26/codetables/2177.table\
+	bufr/tables/0/wmo/26/codetables/2178.table\
+	bufr/tables/0/wmo/26/codetables/2179.table\
+	bufr/tables/0/wmo/26/codetables/2180.table\
+	bufr/tables/0/wmo/26/codetables/2181.table\
+	bufr/tables/0/wmo/26/codetables/2182.table\
+	bufr/tables/0/wmo/26/codetables/2183.table\
+	bufr/tables/0/wmo/26/codetables/2184.table\
+	bufr/tables/0/wmo/26/codetables/2185.table\
+	bufr/tables/0/wmo/26/codetables/2186.table\
+	bufr/tables/0/wmo/26/codetables/2187.table\
+	bufr/tables/0/wmo/26/codetables/2188.table\
+	bufr/tables/0/wmo/26/codetables/2189.table\
+	bufr/tables/0/wmo/26/codetables/2191.table\
+	bufr/tables/0/wmo/26/codetables/22056.table\
+	bufr/tables/0/wmo/26/codetables/22060.table\
+	bufr/tables/0/wmo/26/codetables/22061.table\
+	bufr/tables/0/wmo/26/codetables/22067.table\
+	bufr/tables/0/wmo/26/codetables/22068.table\
+	bufr/tables/0/wmo/26/codetables/22120.table\
+	bufr/tables/0/wmo/26/codetables/22121.table\
+	bufr/tables/0/wmo/26/codetables/22122.table\
+	bufr/tables/0/wmo/26/codetables/22123.table\
+	bufr/tables/0/wmo/26/codetables/22178.table\
+	bufr/tables/0/wmo/26/codetables/23001.table\
+	bufr/tables/0/wmo/26/codetables/23002.table\
+	bufr/tables/0/wmo/26/codetables/23003.table\
+	bufr/tables/0/wmo/26/codetables/23004.table\
+	bufr/tables/0/wmo/26/codetables/23005.table\
+	bufr/tables/0/wmo/26/codetables/23006.table\
+	bufr/tables/0/wmo/26/codetables/23007.table\
+	bufr/tables/0/wmo/26/codetables/23008.table\
+	bufr/tables/0/wmo/26/codetables/23009.table\
+	bufr/tables/0/wmo/26/codetables/23016.table\
+	bufr/tables/0/wmo/26/codetables/23018.table\
+	bufr/tables/0/wmo/26/codetables/23031.table\
+	bufr/tables/0/wmo/26/codetables/23032.table\
+	bufr/tables/0/wmo/26/codetables/24003.table\
+	bufr/tables/0/wmo/26/codetables/25004.table\
+	bufr/tables/0/wmo/26/codetables/25005.table\
+	bufr/tables/0/wmo/26/codetables/25006.table\
+	bufr/tables/0/wmo/26/codetables/25009.table\
+	bufr/tables/0/wmo/26/codetables/25010.table\
+	bufr/tables/0/wmo/26/codetables/25011.table\
+	bufr/tables/0/wmo/26/codetables/25012.table\
+	bufr/tables/0/wmo/26/codetables/25013.table\
+	bufr/tables/0/wmo/26/codetables/25015.table\
+	bufr/tables/0/wmo/26/codetables/25017.table\
+	bufr/tables/0/wmo/26/codetables/25020.table\
+	bufr/tables/0/wmo/26/codetables/25021.table\
+	bufr/tables/0/wmo/26/codetables/25022.table\
+	bufr/tables/0/wmo/26/codetables/25023.table\
+	bufr/tables/0/wmo/26/codetables/25024.table\
+	bufr/tables/0/wmo/26/codetables/25029.table\
+	bufr/tables/0/wmo/26/codetables/25030.table\
+	bufr/tables/0/wmo/26/codetables/25031.table\
+	bufr/tables/0/wmo/26/codetables/25032.table\
+	bufr/tables/0/wmo/26/codetables/25033.table\
+	bufr/tables/0/wmo/26/codetables/25034.table\
+	bufr/tables/0/wmo/26/codetables/25035.table\
+	bufr/tables/0/wmo/26/codetables/25036.table\
+	bufr/tables/0/wmo/26/codetables/25040.table\
+	bufr/tables/0/wmo/26/codetables/25041.table\
+	bufr/tables/0/wmo/26/codetables/25042.table\
+	bufr/tables/0/wmo/26/codetables/25053.table\
+	bufr/tables/0/wmo/26/codetables/25063.table\
+	bufr/tables/0/wmo/26/codetables/25069.table\
+	bufr/tables/0/wmo/26/codetables/25086.table\
+	bufr/tables/0/wmo/26/codetables/25090.table\
+	bufr/tables/0/wmo/26/codetables/25093.table\
+	bufr/tables/0/wmo/26/codetables/25095.table\
+	bufr/tables/0/wmo/26/codetables/25096.table\
+	bufr/tables/0/wmo/26/codetables/25097.table\
+	bufr/tables/0/wmo/26/codetables/25098.table\
+	bufr/tables/0/wmo/26/codetables/25099.table\
+	bufr/tables/0/wmo/26/codetables/25110.table\
+	bufr/tables/0/wmo/26/codetables/25112.table\
+	bufr/tables/0/wmo/26/codetables/25113.table\
+	bufr/tables/0/wmo/26/codetables/25120.table\
+	bufr/tables/0/wmo/26/codetables/25122.table\
+	bufr/tables/0/wmo/26/codetables/25123.table\
+	bufr/tables/0/wmo/26/codetables/25124.table\
+	bufr/tables/0/wmo/26/codetables/25150.table\
+	bufr/tables/0/wmo/26/codetables/25174.table\
+	bufr/tables/0/wmo/26/codetables/25181.table\
+	bufr/tables/0/wmo/26/codetables/25182.table\
+	bufr/tables/0/wmo/26/codetables/25184.table\
+	bufr/tables/0/wmo/26/codetables/25187.table\
+	bufr/tables/0/wmo/26/codetables/26010.table\
+	bufr/tables/0/wmo/26/codetables/29001.table\
+	bufr/tables/0/wmo/26/codetables/29002.table\
+	bufr/tables/0/wmo/26/codetables/30031.table\
+	bufr/tables/0/wmo/26/codetables/30032.table\
+	bufr/tables/0/wmo/26/codetables/3010.table\
+	bufr/tables/0/wmo/26/codetables/3011.table\
+	bufr/tables/0/wmo/26/codetables/3012.table\
+	bufr/tables/0/wmo/26/codetables/3016.table\
+	bufr/tables/0/wmo/26/codetables/3017.table\
+	bufr/tables/0/wmo/26/codetables/3018.table\
+	bufr/tables/0/wmo/26/codetables/3019.table\
+	bufr/tables/0/wmo/26/codetables/31021.table\
+	bufr/tables/0/wmo/26/codetables/31031.table\
+	bufr/tables/0/wmo/26/codetables/33002.table\
+	bufr/tables/0/wmo/26/codetables/33003.table\
+	bufr/tables/0/wmo/26/codetables/33005.table\
+	bufr/tables/0/wmo/26/codetables/33006.table\
+	bufr/tables/0/wmo/26/codetables/33015.table\
+	bufr/tables/0/wmo/26/codetables/33020.table\
+	bufr/tables/0/wmo/26/codetables/33021.table\
+	bufr/tables/0/wmo/26/codetables/33022.table\
+	bufr/tables/0/wmo/26/codetables/33023.table\
+	bufr/tables/0/wmo/26/codetables/33024.table\
+	bufr/tables/0/wmo/26/codetables/33025.table\
+	bufr/tables/0/wmo/26/codetables/33026.table\
+	bufr/tables/0/wmo/26/codetables/33027.table\
+	bufr/tables/0/wmo/26/codetables/33028.table\
+	bufr/tables/0/wmo/26/codetables/33030.table\
+	bufr/tables/0/wmo/26/codetables/33031.table\
+	bufr/tables/0/wmo/26/codetables/33032.table\
+	bufr/tables/0/wmo/26/codetables/33033.table\
+	bufr/tables/0/wmo/26/codetables/33035.table\
+	bufr/tables/0/wmo/26/codetables/33037.table\
+	bufr/tables/0/wmo/26/codetables/33038.table\
+	bufr/tables/0/wmo/26/codetables/33039.table\
+	bufr/tables/0/wmo/26/codetables/33041.table\
+	bufr/tables/0/wmo/26/codetables/33042.table\
+	bufr/tables/0/wmo/26/codetables/33043.table\
+	bufr/tables/0/wmo/26/codetables/33044.table\
+	bufr/tables/0/wmo/26/codetables/33047.table\
+	bufr/tables/0/wmo/26/codetables/33048.table\
+	bufr/tables/0/wmo/26/codetables/33049.table\
+	bufr/tables/0/wmo/26/codetables/33050.table\
+	bufr/tables/0/wmo/26/codetables/33060.table\
+	bufr/tables/0/wmo/26/codetables/33070.table\
+	bufr/tables/0/wmo/26/codetables/33071.table\
+	bufr/tables/0/wmo/26/codetables/33072.table\
+	bufr/tables/0/wmo/26/codetables/33075.table\
+	bufr/tables/0/wmo/26/codetables/33076.table\
+	bufr/tables/0/wmo/26/codetables/33077.table\
+	bufr/tables/0/wmo/26/codetables/33078.table\
+	bufr/tables/0/wmo/26/codetables/33079.table\
+	bufr/tables/0/wmo/26/codetables/33080.table\
+	bufr/tables/0/wmo/26/codetables/33081.table\
+	bufr/tables/0/wmo/26/codetables/33082.table\
+	bufr/tables/0/wmo/26/codetables/33083.table\
+	bufr/tables/0/wmo/26/codetables/33084.table\
+	bufr/tables/0/wmo/26/codetables/33085.table\
+	bufr/tables/0/wmo/26/codetables/33086.table\
+	bufr/tables/0/wmo/26/codetables/33087.table\
+	bufr/tables/0/wmo/26/codetables/33088.table\
+	bufr/tables/0/wmo/26/codetables/35000.table\
+	bufr/tables/0/wmo/26/codetables/35001.table\
+	bufr/tables/0/wmo/26/codetables/35030.table\
+	bufr/tables/0/wmo/26/codetables/35031.table\
+	bufr/tables/0/wmo/26/codetables/35032.table\
+	bufr/tables/0/wmo/26/codetables/35033.table\
+	bufr/tables/0/wmo/26/codetables/35034.table\
+	bufr/tables/0/wmo/26/codetables/35035.table\
+	bufr/tables/0/wmo/26/codetables/40005.table\
+	bufr/tables/0/wmo/26/codetables/40006.table\
+	bufr/tables/0/wmo/26/codetables/40011.table\
+	bufr/tables/0/wmo/26/codetables/40012.table\
+	bufr/tables/0/wmo/26/codetables/40013.table\
+	bufr/tables/0/wmo/26/codetables/40020.table\
+	bufr/tables/0/wmo/26/codetables/40023.table\
+	bufr/tables/0/wmo/26/codetables/40024.table\
+	bufr/tables/0/wmo/26/codetables/40025.table\
+	bufr/tables/0/wmo/26/codetables/40028.table\
+	bufr/tables/0/wmo/26/codetables/40036.table\
+	bufr/tables/0/wmo/26/codetables/4059.table\
+	bufr/tables/0/wmo/26/codetables/4080.table\
+	bufr/tables/0/wmo/26/codetables/5069.table\
+	bufr/tables/0/wmo/26/codetables/8001.table\
+	bufr/tables/0/wmo/26/codetables/8002.table\
+	bufr/tables/0/wmo/26/codetables/8003.table\
+	bufr/tables/0/wmo/26/codetables/8004.table\
+	bufr/tables/0/wmo/26/codetables/8005.table\
+	bufr/tables/0/wmo/26/codetables/8006.table\
+	bufr/tables/0/wmo/26/codetables/8007.table\
+	bufr/tables/0/wmo/26/codetables/8008.table\
+	bufr/tables/0/wmo/26/codetables/8009.table\
+	bufr/tables/0/wmo/26/codetables/8010.table\
+	bufr/tables/0/wmo/26/codetables/8011.table\
+	bufr/tables/0/wmo/26/codetables/8012.table\
+	bufr/tables/0/wmo/26/codetables/8013.table\
+	bufr/tables/0/wmo/26/codetables/8014.table\
+	bufr/tables/0/wmo/26/codetables/8015.table\
+	bufr/tables/0/wmo/26/codetables/8016.table\
+	bufr/tables/0/wmo/26/codetables/8017.table\
+	bufr/tables/0/wmo/26/codetables/8018.table\
+	bufr/tables/0/wmo/26/codetables/8019.table\
+	bufr/tables/0/wmo/26/codetables/8021.table\
+	bufr/tables/0/wmo/26/codetables/8023.table\
+	bufr/tables/0/wmo/26/codetables/8024.table\
+	bufr/tables/0/wmo/26/codetables/8025.table\
+	bufr/tables/0/wmo/26/codetables/8026.table\
+	bufr/tables/0/wmo/26/codetables/8029.table\
+	bufr/tables/0/wmo/26/codetables/8032.table\
+	bufr/tables/0/wmo/26/codetables/8033.table\
+	bufr/tables/0/wmo/26/codetables/8034.table\
+	bufr/tables/0/wmo/26/codetables/8035.table\
+	bufr/tables/0/wmo/26/codetables/8036.table\
+	bufr/tables/0/wmo/26/codetables/8039.table\
+	bufr/tables/0/wmo/26/codetables/8040.table\
+	bufr/tables/0/wmo/26/codetables/8041.table\
+	bufr/tables/0/wmo/26/codetables/8042.table\
+	bufr/tables/0/wmo/26/codetables/8043.table\
+	bufr/tables/0/wmo/26/codetables/8050.table\
+	bufr/tables/0/wmo/26/codetables/8051.table\
+	bufr/tables/0/wmo/26/codetables/8052.table\
+	bufr/tables/0/wmo/26/codetables/8053.table\
+	bufr/tables/0/wmo/26/codetables/8054.table\
+	bufr/tables/0/wmo/26/codetables/8060.table\
+	bufr/tables/0/wmo/26/codetables/8065.table\
+	bufr/tables/0/wmo/26/codetables/8066.table\
+	bufr/tables/0/wmo/26/codetables/8070.table\
+	bufr/tables/0/wmo/26/codetables/8072.table\
+	bufr/tables/0/wmo/26/codetables/8074.table\
+	bufr/tables/0/wmo/26/codetables/8075.table\
+	bufr/tables/0/wmo/26/codetables/8076.table\
+	bufr/tables/0/wmo/26/codetables/8077.table\
+	bufr/tables/0/wmo/26/codetables/8079.table\
+	bufr/tables/0/wmo/26/codetables/8080.table\
+	bufr/tables/0/wmo/26/codetables/8081.table\
+	bufr/tables/0/wmo/26/codetables/8082.table\
+	bufr/tables/0/wmo/26/codetables/8083.table\
+	bufr/tables/0/wmo/26/codetables/8085.table\
+	bufr/tables/0/wmo/26/codetables/8086.table\
+	bufr/tables/0/wmo/26/codetables/8087.table\
+	bufr/tables/0/wmo/26/codetables/8091.table
+
 definitionsbufr_tables_0_wmo_6dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/6
 dist_definitionsbufr_tables_0_wmo_6_DATA = \
 	bufr/tables/0/wmo/6/element.table\
@@ -8725,6 +9184,7 @@ dist_definitionsgrib1_DATA = \
 	grib1/local.82.82.def\
 	grib1/local.82.83.def\
 	grib1/local.82.def\
+	grib1/local.85.def\
 	grib1/local.96.def\
 	grib1/local.98.1.def\
 	grib1/local.98.10.def\
@@ -8811,7 +9271,9 @@ dist_definitionsgrib1_local_ecmf_DATA = \
 
 definitionsgrib1_local_edzwdir = @ECCODES_DEFINITION_PATH@/grib1/local/edzw
 dist_definitionsgrib1_local_edzw_DATA = \
-	grib1/local/edzw/5.table
+	grib1/local/edzw/2.0.3.table\
+	grib1/local/edzw/5.table\
+	grib1/local/edzw/generatingProcessIdentifier.table
 
 definitionsgrib1_local_rjtddir = @ECCODES_DEFINITION_PATH@/grib1/local/rjtd
 dist_definitionsgrib1_local_rjtd_DATA = \
@@ -8909,6 +9371,9 @@ dist_definitionsgrib1_localConcepts_kwbc_DATA = \
 
 definitionsgrib1_localConcepts_lfpwdir = @ECCODES_DEFINITION_PATH@/grib1/localConcepts/lfpw
 dist_definitionsgrib1_localConcepts_lfpw_DATA = \
+	grib1/localConcepts/lfpw/faFieldName.def\
+	grib1/localConcepts/lfpw/faLevelName.def\
+	grib1/localConcepts/lfpw/faModelName.def\
 	grib1/localConcepts/lfpw/name.def\
 	grib1/localConcepts/lfpw/paramId.def\
 	grib1/localConcepts/lfpw/shortName.def\
@@ -8942,17 +9407,23 @@ definitionsgrib2dir = @ECCODES_DEFINITION_PATH@/grib2
 dist_definitionsgrib2_DATA = \
 	grib2/boot.def\
 	grib2/boot_multifield.def\
+	grib2/centre.table\
 	grib2/cfName.def\
 	grib2/cfVarName.def\
 	grib2/dimension.0.table\
 	grib2/dimensionTableNumber.table\
 	grib2/dimensionType.table\
 	grib2/grib2LocalSectionNumber.82.table\
+	grib2/grib2LocalSectionNumber.85.table\
 	grib2/grib2LocalSectionNumber.98.table\
 	grib2/local.82.0.def\
 	grib2/local.82.82.def\
 	grib2/local.82.83.def\
 	grib2/local.82.def\
+	grib2/local.85.0.def\
+	grib2/local.85.1.def\
+	grib2/local.85.2.def\
+	grib2/local.85.def\
 	grib2/local.98.0.def\
 	grib2/local.98.1.def\
 	grib2/local.98.11.def\
@@ -8996,6 +9467,9 @@ dist_definitionsgrib2_DATA = \
 	grib2/products_7.def\
 	grib2/products_8.def\
 	grib2/products_9.def\
+	grib2/products_s2s.def\
+	grib2/products_tigge.def\
+	grib2/products_uerra.def\
 	grib2/rules.def\
 	grib2/section.0.def\
 	grib2/section.1.def\
@@ -9094,6 +9568,7 @@ dist_definitionsgrib2_DATA = \
 	grib2/template.4.54.def\
 	grib2/template.4.55.def\
 	grib2/template.4.56.def\
+	grib2/template.4.57.def\
 	grib2/template.4.6.def\
 	grib2/template.4.60.def\
 	grib2/template.4.61.def\
@@ -9111,6 +9586,7 @@ dist_definitionsgrib2_DATA = \
 	grib2/template.4.parameter_aerosol_44.def\
 	grib2/template.4.parameter_aerosol_optical.def\
 	grib2/template.4.parameter_chemical.def\
+	grib2/template.4.parameter_chemical_distribution.def\
 	grib2/template.4.parameter_partition.def\
 	grib2/template.4.parameter_tile.def\
 	grib2/template.4.percentile.def\
@@ -9176,6 +9652,13 @@ dist_definitionsgrib2_local_1098_DATA = \
 	grib2/local/1098/models.table\
 	grib2/local/1098/template.2.0.def
 
+definitionsgrib2_local_edzwdir = @ECCODES_DEFINITION_PATH@/grib2/local/edzw
+dist_definitionsgrib2_local_edzw_DATA = \
+	grib2/local/edzw/2.0.3.table\
+	grib2/local/edzw/3.table\
+	grib2/local/edzw/5.table\
+	grib2/local/edzw/generatingProcessIdentifier.table
+
 definitionsgrib2_localConcepts_cnmcdir = @ECCODES_DEFINITION_PATH@/grib2/localConcepts/cnmc
 dist_definitionsgrib2_localConcepts_cnmc_DATA = \
 	grib2/localConcepts/cnmc/modelName.def\
@@ -9238,6 +9721,9 @@ dist_definitionsgrib2_localConcepts_kwbc_DATA = \
 
 definitionsgrib2_localConcepts_lfpwdir = @ECCODES_DEFINITION_PATH@/grib2/localConcepts/lfpw
 dist_definitionsgrib2_localConcepts_lfpw_DATA = \
+	grib2/localConcepts/lfpw/faFieldName.def\
+	grib2/localConcepts/lfpw/faLevelName.def\
+	grib2/localConcepts/lfpw/faModelName.def\
 	grib2/localConcepts/lfpw/name.def\
 	grib2/localConcepts/lfpw/paramId.def\
 	grib2/localConcepts/lfpw/shortName.def\
@@ -10351,6 +10837,138 @@ dist_definitionsgrib2_tables_16_DATA = \
 	grib2/tables/16/6.0.table\
 	grib2/tables/16/stepType.table
 
+definitionsgrib2_tables_17dir = @ECCODES_DEFINITION_PATH@/grib2/tables/17
+dist_definitionsgrib2_tables_17_DATA = \
+	grib2/tables/17/0.0.table\
+	grib2/tables/17/1.0.table\
+	grib2/tables/17/1.1.table\
+	grib2/tables/17/1.2.table\
+	grib2/tables/17/1.3.table\
+	grib2/tables/17/1.4.table\
+	grib2/tables/17/1.5.table\
+	grib2/tables/17/1.6.table\
+	grib2/tables/17/3.0.table\
+	grib2/tables/17/3.1.table\
+	grib2/tables/17/3.10.table\
+	grib2/tables/17/3.11.table\
+	grib2/tables/17/3.15.table\
+	grib2/tables/17/3.2.table\
+	grib2/tables/17/3.20.table\
+	grib2/tables/17/3.21.table\
+	grib2/tables/17/3.3.table\
+	grib2/tables/17/3.4.table\
+	grib2/tables/17/3.5.table\
+	grib2/tables/17/3.6.table\
+	grib2/tables/17/3.7.table\
+	grib2/tables/17/3.8.table\
+	grib2/tables/17/3.9.table\
+	grib2/tables/17/4.0.table\
+	grib2/tables/17/4.1.0.table\
+	grib2/tables/17/4.1.1.table\
+	grib2/tables/17/4.1.10.table\
+	grib2/tables/17/4.1.192.table\
+	grib2/tables/17/4.1.2.table\
+	grib2/tables/17/4.1.3.table\
+	grib2/tables/17/4.10.table\
+	grib2/tables/17/4.11.table\
+	grib2/tables/17/4.12.table\
+	grib2/tables/17/4.13.table\
+	grib2/tables/17/4.14.table\
+	grib2/tables/17/4.15.table\
+	grib2/tables/17/4.192.table\
+	grib2/tables/17/4.2.0.0.table\
+	grib2/tables/17/4.2.0.1.table\
+	grib2/tables/17/4.2.0.13.table\
+	grib2/tables/17/4.2.0.14.table\
+	grib2/tables/17/4.2.0.15.table\
+	grib2/tables/17/4.2.0.16.table\
+	grib2/tables/17/4.2.0.17.table\
+	grib2/tables/17/4.2.0.18.table\
+	grib2/tables/17/4.2.0.19.table\
+	grib2/tables/17/4.2.0.190.table\
+	grib2/tables/17/4.2.0.191.table\
+	grib2/tables/17/4.2.0.2.table\
+	grib2/tables/17/4.2.0.20.table\
+	grib2/tables/17/4.2.0.3.table\
+	grib2/tables/17/4.2.0.4.table\
+	grib2/tables/17/4.2.0.5.table\
+	grib2/tables/17/4.2.0.6.table\
+	grib2/tables/17/4.2.0.7.table\
+	grib2/tables/17/4.2.1.0.table\
+	grib2/tables/17/4.2.1.1.table\
+	grib2/tables/17/4.2.1.2.table\
+	grib2/tables/17/4.2.10.0.table\
+	grib2/tables/17/4.2.10.1.table\
+	grib2/tables/17/4.2.10.191.table\
+	grib2/tables/17/4.2.10.2.table\
+	grib2/tables/17/4.2.10.3.table\
+	grib2/tables/17/4.2.10.4.table\
+	grib2/tables/17/4.2.2.0.table\
+	grib2/tables/17/4.2.2.3.table\
+	grib2/tables/17/4.2.2.4.table\
+	grib2/tables/17/4.2.2.5.table\
+	grib2/tables/17/4.2.3.0.table\
+	grib2/tables/17/4.2.3.1.table\
+	grib2/tables/17/4.2.3.2.table\
+	grib2/tables/17/4.2.3.3.table\
+	grib2/tables/17/4.2.3.4.table\
+	grib2/tables/17/4.2.3.5.table\
+	grib2/tables/17/4.2.3.6.table\
+	grib2/tables/17/4.201.table\
+	grib2/tables/17/4.202.table\
+	grib2/tables/17/4.203.table\
+	grib2/tables/17/4.204.table\
+	grib2/tables/17/4.205.table\
+	grib2/tables/17/4.206.table\
+	grib2/tables/17/4.207.table\
+	grib2/tables/17/4.208.table\
+	grib2/tables/17/4.209.table\
+	grib2/tables/17/4.210.table\
+	grib2/tables/17/4.211.table\
+	grib2/tables/17/4.212.table\
+	grib2/tables/17/4.213.table\
+	grib2/tables/17/4.215.table\
+	grib2/tables/17/4.216.table\
+	grib2/tables/17/4.217.table\
+	grib2/tables/17/4.218.table\
+	grib2/tables/17/4.219.table\
+	grib2/tables/17/4.220.table\
+	grib2/tables/17/4.221.table\
+	grib2/tables/17/4.222.table\
+	grib2/tables/17/4.223.table\
+	grib2/tables/17/4.224.table\
+	grib2/tables/17/4.225.table\
+	grib2/tables/17/4.227.table\
+	grib2/tables/17/4.230.table\
+	grib2/tables/17/4.233.table\
+	grib2/tables/17/4.234.table\
+	grib2/tables/17/4.236.table\
+	grib2/tables/17/4.240.table\
+	grib2/tables/17/4.241.table\
+	grib2/tables/17/4.242.table\
+	grib2/tables/17/4.243.table\
+	grib2/tables/17/4.3.table\
+	grib2/tables/17/4.4.table\
+	grib2/tables/17/4.5.table\
+	grib2/tables/17/4.6.table\
+	grib2/tables/17/4.7.table\
+	grib2/tables/17/4.8.table\
+	grib2/tables/17/4.9.table\
+	grib2/tables/17/4.91.table\
+	grib2/tables/17/5.0.table\
+	grib2/tables/17/5.1.table\
+	grib2/tables/17/5.2.table\
+	grib2/tables/17/5.3.table\
+	grib2/tables/17/5.4.table\
+	grib2/tables/17/5.40.table\
+	grib2/tables/17/5.40000.table\
+	grib2/tables/17/5.5.table\
+	grib2/tables/17/5.50002.table\
+	grib2/tables/17/5.6.table\
+	grib2/tables/17/5.7.table\
+	grib2/tables/17/6.0.table\
+	grib2/tables/17/stepType.table
+
 definitionsgrib2_tables_2dir = @ECCODES_DEFINITION_PATH@/grib2/tables/2
 dist_definitionsgrib2_tables_2_DATA = \
 	grib2/tables/2/0.0.table\
@@ -12878,6 +13496,7 @@ dist_definitionsmars_DATA = \
 	mars/grib.elda.fc.def\
 	mars/grib.elda.me.def\
 	mars/grib.elda.ses.def\
+	mars/grib.enda.4i.def\
 	mars/grib.enda.4v.def\
 	mars/grib.enda.an.def\
 	mars/grib.enda.def\
@@ -14300,6 +14919,48 @@ uninstall-dist_definitionsbufr_tables_0_wmo_25_codetablesDATA:
 	@list='$(dist_definitionsbufr_tables_0_wmo_25_codetables_DATA)'; test -n "$(definitionsbufr_tables_0_wmo_25_codetablesdir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(definitionsbufr_tables_0_wmo_25_codetablesdir)'; $(am__uninstall_files_from_dir)
+install-dist_definitionsbufr_tables_0_wmo_26DATA: $(dist_definitionsbufr_tables_0_wmo_26_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_definitionsbufr_tables_0_wmo_26_DATA)'; test -n "$(definitionsbufr_tables_0_wmo_26dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(definitionsbufr_tables_0_wmo_26dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(definitionsbufr_tables_0_wmo_26dir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(definitionsbufr_tables_0_wmo_26dir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(definitionsbufr_tables_0_wmo_26dir)" || exit $$?; \
+	done
+
+uninstall-dist_definitionsbufr_tables_0_wmo_26DATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_definitionsbufr_tables_0_wmo_26_DATA)'; test -n "$(definitionsbufr_tables_0_wmo_26dir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(definitionsbufr_tables_0_wmo_26dir)'; $(am__uninstall_files_from_dir)
+install-dist_definitionsbufr_tables_0_wmo_26_codetablesDATA: $(dist_definitionsbufr_tables_0_wmo_26_codetables_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_definitionsbufr_tables_0_wmo_26_codetables_DATA)'; test -n "$(definitionsbufr_tables_0_wmo_26_codetablesdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(definitionsbufr_tables_0_wmo_26_codetablesdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(definitionsbufr_tables_0_wmo_26_codetablesdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(definitionsbufr_tables_0_wmo_26_codetablesdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(definitionsbufr_tables_0_wmo_26_codetablesdir)" || exit $$?; \
+	done
+
+uninstall-dist_definitionsbufr_tables_0_wmo_26_codetablesDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_definitionsbufr_tables_0_wmo_26_codetables_DATA)'; test -n "$(definitionsbufr_tables_0_wmo_26_codetablesdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(definitionsbufr_tables_0_wmo_26_codetablesdir)'; $(am__uninstall_files_from_dir)
 install-dist_definitionsbufr_tables_0_wmo_6DATA: $(dist_definitionsbufr_tables_0_wmo_6_DATA)
 	@$(NORMAL_INSTALL)
 	@list='$(dist_definitionsbufr_tables_0_wmo_6_DATA)'; test -n "$(definitionsbufr_tables_0_wmo_6dir)" || list=; \
@@ -15287,6 +15948,27 @@ uninstall-dist_definitionsgrib2_local_1098DATA:
 	@list='$(dist_definitionsgrib2_local_1098_DATA)'; test -n "$(definitionsgrib2_local_1098dir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(definitionsgrib2_local_1098dir)'; $(am__uninstall_files_from_dir)
+install-dist_definitionsgrib2_local_edzwDATA: $(dist_definitionsgrib2_local_edzw_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_definitionsgrib2_local_edzw_DATA)'; test -n "$(definitionsgrib2_local_edzwdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(definitionsgrib2_local_edzwdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(definitionsgrib2_local_edzwdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(definitionsgrib2_local_edzwdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(definitionsgrib2_local_edzwdir)" || exit $$?; \
+	done
+
+uninstall-dist_definitionsgrib2_local_edzwDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_definitionsgrib2_local_edzw_DATA)'; test -n "$(definitionsgrib2_local_edzwdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(definitionsgrib2_local_edzwdir)'; $(am__uninstall_files_from_dir)
 install-dist_definitionsgrib2_tablesDATA: $(dist_definitionsgrib2_tables_DATA)
 	@$(NORMAL_INSTALL)
 	@list='$(dist_definitionsgrib2_tables_DATA)'; test -n "$(definitionsgrib2_tablesdir)" || list=; \
@@ -15497,6 +16179,27 @@ uninstall-dist_definitionsgrib2_tables_16DATA:
 	@list='$(dist_definitionsgrib2_tables_16_DATA)'; test -n "$(definitionsgrib2_tables_16dir)" || list=; \
 	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
 	dir='$(DESTDIR)$(definitionsgrib2_tables_16dir)'; $(am__uninstall_files_from_dir)
+install-dist_definitionsgrib2_tables_17DATA: $(dist_definitionsgrib2_tables_17_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_definitionsgrib2_tables_17_DATA)'; test -n "$(definitionsgrib2_tables_17dir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(definitionsgrib2_tables_17dir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(definitionsgrib2_tables_17dir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(definitionsgrib2_tables_17dir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(definitionsgrib2_tables_17dir)" || exit $$?; \
+	done
+
+uninstall-dist_definitionsgrib2_tables_17DATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_definitionsgrib2_tables_17_DATA)'; test -n "$(definitionsgrib2_tables_17dir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(definitionsgrib2_tables_17dir)'; $(am__uninstall_files_from_dir)
 install-dist_definitionsgrib2_tables_2DATA: $(dist_definitionsgrib2_tables_2_DATA)
 	@$(NORMAL_INSTALL)
 	@list='$(dist_definitionsgrib2_tables_2_DATA)'; test -n "$(definitionsgrib2_tables_2dir)" || list=; \
@@ -15958,7 +16661,7 @@ check-am: all-am
 check: check-am
 all-am: Makefile $(DATA)
 installdirs:
-	for dir in "$(DESTDIR)$(definitionsdir)" "$(DESTDIR)$(definitionsbudgdir)" "$(DESTDIR)$(definitionsbufrdir)" "$(DESTDIR)$(definitionsbufr_tablesdir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_101_98_0dir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_101_98_0_codetablesdir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_1_98_0dir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_1_98_0_6dir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_1_98_0_codetablesdir)" "$(DESTDIR)$(definitionsbufr_tabl [...]
+	for dir in "$(DESTDIR)$(definitionsdir)" "$(DESTDIR)$(definitionsbudgdir)" "$(DESTDIR)$(definitionsbufrdir)" "$(DESTDIR)$(definitionsbufr_tablesdir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_101_98_0dir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_101_98_0_codetablesdir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_1_98_0dir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_1_98_0_6dir)" "$(DESTDIR)$(definitionsbufr_tables_0_local_1_98_0_codetablesdir)" "$(DESTDIR)$(definitionsbufr_tabl [...]
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -16056,6 +16759,8 @@ install-data-am: install-dist_definitionsDATA \
 	install-dist_definitionsbufr_tables_0_wmo_24_codetablesDATA \
 	install-dist_definitionsbufr_tables_0_wmo_25DATA \
 	install-dist_definitionsbufr_tables_0_wmo_25_codetablesDATA \
+	install-dist_definitionsbufr_tables_0_wmo_26DATA \
+	install-dist_definitionsbufr_tables_0_wmo_26_codetablesDATA \
 	install-dist_definitionsbufr_tables_0_wmo_6DATA \
 	install-dist_definitionsbufr_tables_0_wmo_6_codetablesDATA \
 	install-dist_definitionsbufr_tables_0_wmo_7DATA \
@@ -16103,6 +16808,7 @@ install-data-am: install-dist_definitionsDATA \
 	install-dist_definitionsgrib2_localConcepts_lsswDATA \
 	install-dist_definitionsgrib2_localDATA \
 	install-dist_definitionsgrib2_local_1098DATA \
+	install-dist_definitionsgrib2_local_edzwDATA \
 	install-dist_definitionsgrib2_tablesDATA \
 	install-dist_definitionsgrib2_tables_0DATA \
 	install-dist_definitionsgrib2_tables_10DATA \
@@ -16112,6 +16818,7 @@ install-data-am: install-dist_definitionsDATA \
 	install-dist_definitionsgrib2_tables_14DATA \
 	install-dist_definitionsgrib2_tables_15DATA \
 	install-dist_definitionsgrib2_tables_16DATA \
+	install-dist_definitionsgrib2_tables_17DATA \
 	install-dist_definitionsgrib2_tables_1DATA \
 	install-dist_definitionsgrib2_tables_2DATA \
 	install-dist_definitionsgrib2_tables_3DATA \
@@ -16221,6 +16928,8 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_24_codetablesDATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_25DATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_25_codetablesDATA \
+	uninstall-dist_definitionsbufr_tables_0_wmo_26DATA \
+	uninstall-dist_definitionsbufr_tables_0_wmo_26_codetablesDATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_6DATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_6_codetablesDATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_7DATA \
@@ -16268,6 +16977,7 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	uninstall-dist_definitionsgrib2_localConcepts_lsswDATA \
 	uninstall-dist_definitionsgrib2_localDATA \
 	uninstall-dist_definitionsgrib2_local_1098DATA \
+	uninstall-dist_definitionsgrib2_local_edzwDATA \
 	uninstall-dist_definitionsgrib2_tablesDATA \
 	uninstall-dist_definitionsgrib2_tables_0DATA \
 	uninstall-dist_definitionsgrib2_tables_10DATA \
@@ -16277,6 +16987,7 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	uninstall-dist_definitionsgrib2_tables_14DATA \
 	uninstall-dist_definitionsgrib2_tables_15DATA \
 	uninstall-dist_definitionsgrib2_tables_16DATA \
+	uninstall-dist_definitionsgrib2_tables_17DATA \
 	uninstall-dist_definitionsgrib2_tables_1DATA \
 	uninstall-dist_definitionsgrib2_tables_2DATA \
 	uninstall-dist_definitionsgrib2_tables_3DATA \
@@ -16349,6 +17060,8 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	install-dist_definitionsbufr_tables_0_wmo_24_codetablesDATA \
 	install-dist_definitionsbufr_tables_0_wmo_25DATA \
 	install-dist_definitionsbufr_tables_0_wmo_25_codetablesDATA \
+	install-dist_definitionsbufr_tables_0_wmo_26DATA \
+	install-dist_definitionsbufr_tables_0_wmo_26_codetablesDATA \
 	install-dist_definitionsbufr_tables_0_wmo_6DATA \
 	install-dist_definitionsbufr_tables_0_wmo_6_codetablesDATA \
 	install-dist_definitionsbufr_tables_0_wmo_7DATA \
@@ -16396,6 +17109,7 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	install-dist_definitionsgrib2_localConcepts_lsswDATA \
 	install-dist_definitionsgrib2_localDATA \
 	install-dist_definitionsgrib2_local_1098DATA \
+	install-dist_definitionsgrib2_local_edzwDATA \
 	install-dist_definitionsgrib2_tablesDATA \
 	install-dist_definitionsgrib2_tables_0DATA \
 	install-dist_definitionsgrib2_tables_10DATA \
@@ -16405,6 +17119,7 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	install-dist_definitionsgrib2_tables_14DATA \
 	install-dist_definitionsgrib2_tables_15DATA \
 	install-dist_definitionsgrib2_tables_16DATA \
+	install-dist_definitionsgrib2_tables_17DATA \
 	install-dist_definitionsgrib2_tables_1DATA \
 	install-dist_definitionsgrib2_tables_2DATA \
 	install-dist_definitionsgrib2_tables_3DATA \
@@ -16477,6 +17192,8 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_24_codetablesDATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_25DATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_25_codetablesDATA \
+	uninstall-dist_definitionsbufr_tables_0_wmo_26DATA \
+	uninstall-dist_definitionsbufr_tables_0_wmo_26_codetablesDATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_6DATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_6_codetablesDATA \
 	uninstall-dist_definitionsbufr_tables_0_wmo_7DATA \
@@ -16524,6 +17241,7 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	uninstall-dist_definitionsgrib2_localConcepts_lsswDATA \
 	uninstall-dist_definitionsgrib2_localDATA \
 	uninstall-dist_definitionsgrib2_local_1098DATA \
+	uninstall-dist_definitionsgrib2_local_edzwDATA \
 	uninstall-dist_definitionsgrib2_tablesDATA \
 	uninstall-dist_definitionsgrib2_tables_0DATA \
 	uninstall-dist_definitionsgrib2_tables_10DATA \
@@ -16533,6 +17251,7 @@ uninstall-am: uninstall-dist_definitionsDATA \
 	uninstall-dist_definitionsgrib2_tables_14DATA \
 	uninstall-dist_definitionsgrib2_tables_15DATA \
 	uninstall-dist_definitionsgrib2_tables_16DATA \
+	uninstall-dist_definitionsgrib2_tables_17DATA \
 	uninstall-dist_definitionsgrib2_tables_1DATA \
 	uninstall-dist_definitionsgrib2_tables_2DATA \
 	uninstall-dist_definitionsgrib2_tables_3DATA \
diff --git a/definitions/bufr/boot.def b/definitions/bufr/boot.def
index e387179..28669b0 100644
--- a/definitions/bufr/boot.def
+++ b/definitions/bufr/boot.def
@@ -17,6 +17,8 @@ transient inputExtendedDelayedDescriptorReplicationFactor={-1};
 #negative value=not used
 transient inputShortDelayedDescriptorReplicationFactor={-1};
 
+transient inputDataPresentIndicator={-1};
+
 transient extractSubset=-1;
 transient extractSubset=-1;
 transient extractSubset=-1;
diff --git a/definitions/bufr/boot_edition_3.def b/definitions/bufr/boot_edition_3.def
index d9005fc..5483796 100644
--- a/definitions/bufr/boot_edition_3.def
+++ b/definitions/bufr/boot_edition_3.def
@@ -10,9 +10,9 @@
 ascii[4] identifier  = "BUFR" : read_only,hidden;
 alias identifier=identifier;
 
-unsigned[3]   totalLength ;
+section_length[3]   totalLength ;
 
-unsigned[1] edition = 2;
+unsigned[1] edition = 3;
 alias editionNumber=edition;
 
 template    section_1 "bufr/section.1.3.def"   ;
diff --git a/definitions/bufr/section.3.def b/definitions/bufr/section.3.def
index 06996e5..e808cf1 100644
--- a/definitions/bufr/section.3.def
+++ b/definitions/bufr/section.3.def
@@ -79,7 +79,9 @@ meta numberOfUnexpandedDescriptors   evaluate( (section3Length - 7) / 2 ) : no_c
 meta unexpandedDescriptorsEncoded raw(totalLength,section3Length,7) : hidden;
 meta unexpandedDescriptors unexpanded_descriptors(unexpandedDescriptorsEncoded,createNewData) :dump,no_copy;
 
-concept BufrTemplate (unknown,"BufrTemplate.def",templatesMasterDir,templatesLocalDir) : no_copy;
+
+concept bufrTemplate (unknown,"BufrTemplate.def",templatesMasterDir,templatesLocalDir) : no_copy;
+alias BufrTemplate=bufrTemplate;
 
 meta elementsTable bufr_elements_table("element.table",tablesMasterDir,tablesLocalDir) : hidden,no_copy; 
 
diff --git a/definitions/bufr/tables/0/local/1/98/0/element.table b/definitions/bufr/tables/0/local/1/98/0/element.table
index 13fd0d0..d38196d 100644
--- a/definitions/bufr/tables/0/local/1/98/0/element.table
+++ b/definitions/bufr/tables/0/local/1/98/0/element.table
@@ -68,7 +68,7 @@
 008223|landOrIceSurfaceFlag|flag|LAND/ICE SURFACE FLAG|FLAG TABLE|0|0|7|FLAG TABLE|0|3
 008224|landOrSeaFraction|long|LAND/SEA FRACTION|Numeric|3|0|10|Numeric|3|4
 008225|ghrsstSurfaceType|flag|GHRSST SURFACE TYPE|FLAG TABLE|0|0|5|FLAG TABLE|0|2
-010195|height|double|HEIGHT(HIGH ACCURACY)|m|1|-4096|20|NA|0|0
+010195|nonCoordinateHeight|double|HEIGHT(HIGH ACCURACY)|m|1|-4096|20|NA|0|0
 010196|solarZenithAngle|double|SOLAR ZENITH ANGLE|deg|2|-9000|15|NA|0|0
 010197|anemometerHeight|long|ANEMOMETER HEIGHT|m|0|0|9|NA|0|0
 010200|surfacePressureSpGrib|long|SURFACE PRESSURE ( SP GRIB )|Pa|-1|0|14|NA|0|0
@@ -219,9 +219,9 @@
 025205|channelQualityFlagsForAtovs|flag|CHANNEL QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|31|NA|0|0
 025206|fovQualityFlagsForAtovs|flag|FOV QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|31|NA|0|0
 025207|compassAzimuthAngle|double|COMPASS AZIMUTH ANGLE|deg|2|0|16|NA|0|0
-026193|year|long|YEAR|a|0|0|12|NA|0|0
-026194|month|long|MONTH|mon|0|0|4|NA|0|0
-026195|day|long|DAY|d|0|0|6|NA|0|0
+026193|nonCoordinateYear|long|YEAR|a|0|0|12|NA|0|0
+026194|nonCoordinateMonth|long|MONTH|mon|0|0|4|NA|0|0
+026195|nonCoordinateDay|long|DAY|d|0|0|6|NA|0|0
 026196|hour|long|HOUR|h|0|0|5|NA|0|0
 026197|minute|long|MINUTE|min|0|0|6|NA|0|0
 026198|second|long|SECOND|s|0|0|6|NA|0|0
diff --git a/definitions/bufr/tables/0/local/101/98/0/element.table b/definitions/bufr/tables/0/local/101/98/0/element.table
index 88acb98..5f9b1ad 100644
--- a/definitions/bufr/tables/0/local/101/98/0/element.table
+++ b/definitions/bufr/tables/0/local/101/98/0/element.table
@@ -61,7 +61,7 @@
 008224|landOrSeaFraction|long|LAND/SEA FRACTION|Numeric|3|0|10|NA|0|0
 010083|squaredOffNadirAngleOfSatelliteFromPlatformData|double|(CBS) OFF NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA|deg|2|-36000|17|NA|0|0
 010084|squaredOffNadirAngleOfSatelliteFromWaveformData|double|(CBS) OFF NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA|deg|2|-36000|17|NA|0|0
-010195|height|double|HEIGHT(HIGH ACCURACY)|m|1|-4096|20|NA|0|0
+010195|nonCoordinateHeight|double|HEIGHT(HIGH ACCURACY)|m|1|-4096|20|NA|0|0
 010196|solarZenithAngle|double|SOLAR ZENITH ANGLE|deg|2|-9000|15|NA|0|0
 010197|anemometerHeight|long|ANEMOMETER HEIGHT|m|0|0|9|NA|0|0
 011192|uAt10M|double|U - COMPONENT AT 10 M|m/s|1|-4096|13|NA|0|0
@@ -201,9 +201,9 @@
 025204|scanLineQualityFlagsForAtovs|flag|SCAN LINE QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|31|NA|0|0
 025205|channelQualityFlagsForAtovs|flag|CHANNEL QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|31|NA|0|0
 025206|fovQualityFlagsForAtovs|flag|FOV QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|31|NA|0|0
-026193|year|long|YEAR|a|0|0|12|NA|0|0
-026194|month|long|MONTH|mon|0|0|4|NA|0|0
-026195|day|long|DAY|d|0|0|6|NA|0|0
+026193|nonCoordinateYear|long|YEAR|a|0|0|12|NA|0|0
+026194|nonCoordinateMonth|long|MONTH|mon|0|0|4|NA|0|0
+026195|nonCoordinateDay|long|DAY|d|0|0|6|NA|0|0
 026196|hour|long|HOUR|h|0|0|5|NA|0|0
 026197|minute|long|MINUTE|min|0|0|6|NA|0|0
 026198|second|long|SECOND|s|0|0|6|NA|0|0
diff --git a/definitions/bufr/tables/0/wmo/10/element.table b/definitions/bufr/tables/0/wmo/10/element.table
index cc9082d..b390929 100644
--- a/definitions/bufr/tables/0/wmo/10/element.table
+++ b/definitions/bufr/tables/0/wmo/10/element.table
@@ -77,7 +77,7 @@
 001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
 001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
 001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
 002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
@@ -391,12 +391,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -940,10 +940,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
 022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
@@ -954,8 +954,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1183,8 +1183,8 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1192,8 +1192,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/11/element.table b/definitions/bufr/tables/0/wmo/11/element.table
index cc9082d..b390929 100644
--- a/definitions/bufr/tables/0/wmo/11/element.table
+++ b/definitions/bufr/tables/0/wmo/11/element.table
@@ -77,7 +77,7 @@
 001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
 001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
 001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
 002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
@@ -391,12 +391,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -940,10 +940,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
 022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
@@ -954,8 +954,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1183,8 +1183,8 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1192,8 +1192,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/12/element.table b/definitions/bufr/tables/0/wmo/12/element.table
index cc9082d..b390929 100644
--- a/definitions/bufr/tables/0/wmo/12/element.table
+++ b/definitions/bufr/tables/0/wmo/12/element.table
@@ -77,7 +77,7 @@
 001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
 001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
 001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
 002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
@@ -391,12 +391,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -940,10 +940,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
 022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
@@ -954,8 +954,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1183,8 +1183,8 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1192,8 +1192,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/13/element.table b/definitions/bufr/tables/0/wmo/13/element.table
index cc9082d..b390929 100644
--- a/definitions/bufr/tables/0/wmo/13/element.table
+++ b/definitions/bufr/tables/0/wmo/13/element.table
@@ -77,7 +77,7 @@
 001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
 001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
 001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
 002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
@@ -391,12 +391,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -940,10 +940,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
 022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
@@ -954,8 +954,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1183,8 +1183,8 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1192,8 +1192,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/14/element.table b/definitions/bufr/tables/0/wmo/14/element.table
index fe23b67..4550bdf 100644
--- a/definitions/bufr/tables/0/wmo/14/element.table
+++ b/definitions/bufr/tables/0/wmo/14/element.table
@@ -87,7 +87,7 @@
 001098|typeOfProduct|table|TYPE OF PRODUCT|CODE TABLE|0|0|12|CODE TABLE|0|4
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTRY|Numeric|0|0|14|Numeric|0|5
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -426,12 +426,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010012|densityAltitude|long|DENSITY ALTITUDE|m|0|-1525|13|m|0|4
@@ -1055,10 +1055,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1070,8 +1070,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1329,8 +1329,8 @@
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1338,8 +1338,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/15/element.table b/definitions/bufr/tables/0/wmo/15/element.table
index b18640f..6efda15 100644
--- a/definitions/bufr/tables/0/wmo/15/element.table
+++ b/definitions/bufr/tables/0/wmo/15/element.table
@@ -91,7 +91,7 @@
 001098|typeOfProduct|table|TYPE OF PRODUCT|CODE TABLE|0|0|12|CODE TABLE|0|4
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|2048|CCITT IA5|0|256
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTRY|Numeric|0|0|14|Numeric|0|5
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|CCITT IA5|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|CCITT IA5|0|3
@@ -434,12 +434,12 @@
 008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|0
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010012|densityAltitude|long|DENSITY ALTITUDE|m|0|-1525|13|m|0|4
@@ -1069,10 +1069,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1084,8 +1084,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1343,8 +1343,8 @@
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1352,8 +1352,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/16/element.table b/definitions/bufr/tables/0/wmo/16/element.table
index 751427d..d90d4ab 100644
--- a/definitions/bufr/tables/0/wmo/16/element.table
+++ b/definitions/bufr/tables/0/wmo/16/element.table
@@ -91,7 +91,7 @@
 001098|typeOfProduct|table|TYPE OF PRODUCT|CODE TABLE|0|0|12|CODE TABLE|0|4
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTRY|Numeric|0|0|14|Numeric|0|5
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -434,12 +434,12 @@
 008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|0
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010012|densityAltitude|long|DENSITY ALTITUDE|m|0|-1525|13|m|0|4
@@ -1066,10 +1066,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1081,8 +1081,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1340,8 +1340,8 @@
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1349,8 +1349,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE (DEGREE TRUE)|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/16/sequence.def b/definitions/bufr/tables/0/wmo/16/sequence.def
index 837d75e..28770e8 100644
--- a/definitions/bufr/tables/0/wmo/16/sequence.def
+++ b/definitions/bufr/tables/0/wmo/16/sequence.def
@@ -759,4 +759,4 @@
                012063, 013090, 013091, 007002, 011097, 011098, 007002, 011095, 011096, 010096,
                010081, 010082, 010083, 010101, 025132, 025163, 025126, 025128, 025164, 010085,
                010097, 010086, 010087, 010092, 010088, 010089, 010098, 010099, 010090, 010100,
-               010093, 025127, 040014 ]
+               010093, 025127, 040014, 010102 ]
diff --git a/definitions/bufr/tables/0/wmo/17/element.table b/definitions/bufr/tables/0/wmo/17/element.table
index b938b78..cb5ffd5 100644
--- a/definitions/bufr/tables/0/wmo/17/element.table
+++ b/definitions/bufr/tables/0/wmo/17/element.table
@@ -91,7 +91,7 @@
 001098|typeOfProduct|table|TYPE OF PRODUCT|CODE TABLE|0|0|12|CODE TABLE|0|4
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTRY|Numeric|0|0|14|Numeric|0|5
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -434,12 +434,12 @@
 008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|0
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010012|densityAltitude|long|DENSITY ALTITUDE|m|0|-1525|13|m|0|4
@@ -1066,10 +1066,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1081,8 +1081,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1340,8 +1340,8 @@
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1349,8 +1349,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE (DEGREE TRUE)|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/18/element.table b/definitions/bufr/tables/0/wmo/18/element.table
index a055194..e5bee21 100644
--- a/definitions/bufr/tables/0/wmo/18/element.table
+++ b/definitions/bufr/tables/0/wmo/18/element.table
@@ -91,7 +91,7 @@
 001098|typeOfProduct|table|TYPE OF PRODUCT|CODE TABLE|0|0|12|CODE TABLE|0|4
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTRY|Numeric|0|0|14|Numeric|0|5
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -436,12 +436,12 @@
 008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|4
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010012|densityAltitude|long|DENSITY ALTITUDE|m|0|-1525|13|m|0|4
@@ -1075,10 +1075,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1090,8 +1090,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1348,8 +1348,8 @@
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1357,8 +1357,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/19/element.table b/definitions/bufr/tables/0/wmo/19/element.table
index d2cb2a4..eb657e5 100644
--- a/definitions/bufr/tables/0/wmo/19/element.table
+++ b/definitions/bufr/tables/0/wmo/19/element.table
@@ -91,7 +91,7 @@
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTRY|Numeric|0|0|24|Numeric|0|7
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -427,12 +427,12 @@
 008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|4
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -1058,10 +1058,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1073,8 +1073,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1332,12 +1332,12 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-026021|year|long|YEAR|a|0|0|12|a|0|4
-026022|month|long|MONTH|mon|0|0|4|mon|0|2
-026023|day|long|DAY|d|0|0|6|d|0|2
+026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4
+026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2
+026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1345,8 +1345,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/20/element.table b/definitions/bufr/tables/0/wmo/20/element.table
index 6c0d8d7..ebf9886 100644
--- a/definitions/bufr/tables/0/wmo/20/element.table
+++ b/definitions/bufr/tables/0/wmo/20/element.table
@@ -91,7 +91,7 @@
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTER|Numeric|0|0|24|Numeric|0|7
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -427,12 +427,12 @@
 008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|4
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -1058,10 +1058,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA-SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1073,8 +1073,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1332,12 +1332,12 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-026021|year|long|YEAR|a|0|0|12|a|0|4
-026022|month|long|MONTH|mon|0|0|4|mon|0|2
-026023|day|long|DAY|d|0|0|6|d|0|2
+026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4
+026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2
+026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1345,8 +1345,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/21/element.table b/definitions/bufr/tables/0/wmo/21/element.table
index 53e9062..be2b99a 100644
--- a/definitions/bufr/tables/0/wmo/21/element.table
+++ b/definitions/bufr/tables/0/wmo/21/element.table
@@ -91,7 +91,7 @@
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTER|Numeric|0|0|24|Numeric|0|7
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -428,12 +428,12 @@
 008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|4
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -1065,10 +1065,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA-SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1080,8 +1080,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1339,12 +1339,12 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-026021|year|long|YEAR|a|0|0|12|a|0|4
-026022|month|long|MONTH|mon|0|0|4|mon|0|2
-026023|day|long|DAY|d|0|0|6|d|0|2
+026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4
+026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2
+026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1352,8 +1352,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/22/element.table b/definitions/bufr/tables/0/wmo/22/element.table
index 0987d33..ae26cf4 100644
--- a/definitions/bufr/tables/0/wmo/22/element.table
+++ b/definitions/bufr/tables/0/wmo/22/element.table
@@ -91,7 +91,7 @@
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTER|Numeric|0|0|24|Numeric|0|7
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -436,12 +436,12 @@
 008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|4
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -1074,10 +1074,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA-SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1089,8 +1089,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE/SALINITY PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1170,7 +1170,7 @@
 022182|waterColumnHeight|double|WATER COLUMN HEIGHT|m|3|0|23|m|3|7
 022184|waterColumnHeightDeviationFromReferenceValue|double|WATER COLUMN HEIGHT DEVIATION FROM THE REFERENCE VALUE|m|3|-2000|12|m|3|4
 022185|bprTransmissionCount|long|BPR TRANSMISSION COUNT|Numeric|0|0|10|Numeric|0|3
-022188|dissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
+022188|oceanographicDissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
 023001|accidentEarlyNotificationArticleApplicable|table|ACCIDENT EARLY NOTIFICATION - ARTICLE APPLICABLE|CODE TABLE|0|0|3|CODE TABLE|0|1
 023002|facilityInvolvedInIncident|table|ACTIVITY OR FACILITY INVOLVED IN INCIDENT|CODE TABLE|0|0|5|CODE TABLE|0|2
 023003|releaseType|table|TYPE OF RELEASE|CODE TABLE|0|0|3|CODE TABLE|0|1
@@ -1349,12 +1349,12 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-026021|year|long|YEAR|a|0|0|12|a|0|4
-026022|month|long|MONTH|mon|0|0|4|mon|0|2
-026023|day|long|DAY|d|0|0|6|d|0|2
+026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4
+026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2
+026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1362,8 +1362,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/23/element.table b/definitions/bufr/tables/0/wmo/23/element.table
index a5ef802..3cf7dec 100644
--- a/definitions/bufr/tables/0/wmo/23/element.table
+++ b/definitions/bufr/tables/0/wmo/23/element.table
@@ -91,7 +91,7 @@
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTER|Numeric|0|0|24|Numeric|0|7
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -437,12 +437,12 @@
 008087|cornerPositionOfObservation|table|CORNER POSITION OF OBSERVATION|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -1083,10 +1083,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA-SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1098,8 +1098,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE/SALINITY PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1184,7 +1184,7 @@
 022182|waterColumnHeight|double|WATER COLUMN HEIGHT|m|3|0|23|m|3|7
 022184|waterColumnHeightDeviationFromReferenceValue|double|WATER COLUMN HEIGHT DEVIATION FROM THE REFERENCE VALUE|m|3|-2000|12|m|3|4
 022185|bprTransmissionCount|long|BPR TRANSMISSION COUNT|Numeric|0|0|10|Numeric|0|3
-022188|dissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
+022188|oceanographicDissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
 022189|specificBandOceanRange|double|SPECIFIC BAND OCEAN RANGE|m|3|0|31|m|3|10
 022190|specificBandSignificantWaveHeight|double|SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
 022191|rmsOfSpecificBandOceanRange|double|RMS OF SPECIFIC BAND OCEAN RANGE|m|4|0|16|m|4|5
@@ -1371,12 +1371,12 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-026021|year|long|YEAR|a|0|0|12|a|0|4
-026022|month|long|MONTH|mon|0|0|4|mon|0|2
-026023|day|long|DAY|d|0|0|6|d|0|2
+026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4
+026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2
+026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1384,8 +1384,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/24/element.table b/definitions/bufr/tables/0/wmo/24/element.table
index 948e13c..bc72b42 100644
--- a/definitions/bufr/tables/0/wmo/24/element.table
+++ b/definitions/bufr/tables/0/wmo/24/element.table
@@ -91,7 +91,7 @@
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTER|Numeric|0|0|24|Numeric|0|7
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -437,12 +437,12 @@
 008087|cornerPositionOfObservation|table|CORNER POSITION OF OBSERVATION|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -1083,10 +1083,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA-SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1098,8 +1098,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE/SALINITY PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1184,7 +1184,7 @@
 022182|waterColumnHeight|double|WATER COLUMN HEIGHT|m|3|0|23|m|3|7
 022184|waterColumnHeightDeviationFromReferenceValue|double|WATER COLUMN HEIGHT DEVIATION FROM THE REFERENCE VALUE|m|3|-2000|12|m|3|4
 022185|bprTransmissionCount|long|BPR TRANSMISSION COUNT|Numeric|0|0|10|Numeric|0|3
-022188|dissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
+022188|oceanographicDissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
 022189|specificBandOceanRange|double|SPECIFIC BAND OCEAN RANGE|m|3|0|31|m|3|10
 022190|specificBandSignificantWaveHeight|double|SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
 022191|rmsOfSpecificBandOceanRange|double|RMS OF SPECIFIC BAND OCEAN RANGE|m|4|0|16|m|4|5
@@ -1371,12 +1371,12 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-026021|year|long|YEAR|a|0|0|12|a|0|4
-026022|month|long|MONTH|mon|0|0|4|mon|0|2
-026023|day|long|DAY|d|0|0|6|d|0|2
+026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4
+026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2
+026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1384,8 +1384,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/25/element.table b/definitions/bufr/tables/0/wmo/25/element.table
index 3044b5d..bd1689d 100644
--- a/definitions/bufr/tables/0/wmo/25/element.table
+++ b/definitions/bufr/tables/0/wmo/25/element.table
@@ -91,7 +91,7 @@
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
 001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTER|Numeric|0|0|24|Numeric|0|7
 001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
 001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
@@ -443,12 +443,12 @@
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
 008091|coordinatesSignificance|table|COORDINATES SIGNIFICANCE|CODE TABLE|0|0|8|CODE TABLE|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -1092,10 +1092,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
 022049|seaSurfaceTemperature|double|SEA-SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
@@ -1107,8 +1107,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE/SALINITY PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1193,7 +1193,7 @@
 022182|waterColumnHeight|double|WATER COLUMN HEIGHT|m|3|0|23|m|3|7
 022184|waterColumnHeightDeviationFromReferenceValue|double|WATER COLUMN HEIGHT DEVIATION FROM THE REFERENCE VALUE|m|3|-2000|12|m|3|4
 022185|bprTransmissionCount|long|BPR TRANSMISSION COUNT|Numeric|0|0|10|Numeric|0|3
-022188|dissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
+022188|oceanographicDissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
 022189|specificBandOceanRange|double|SPECIFIC BAND OCEAN RANGE|m|3|0|31|m|3|10
 022190|specificBandSignificantWaveHeight|double|SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
 022191|rmsOfSpecificBandOceanRange|double|RMS OF SPECIFIC BAND OCEAN RANGE|m|4|0|16|m|4|5
@@ -1380,12 +1380,12 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-026021|year|long|YEAR|a|0|0|12|a|0|4
-026022|month|long|MONTH|mon|0|0|4|mon|0|2
-026023|day|long|DAY|d|0|0|6|d|0|2
+026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4
+026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2
+026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2
 026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1393,8 +1393,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1003.table b/definitions/bufr/tables/0/wmo/26/codetables/1003.table
new file mode 100644
index 0000000..a0c90ee
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1003.table
@@ -0,0 +1,8 @@
+0 0 ANTARCTICA
+1 1 REGION I
+2 2 REGION II
+3 3 REGION III
+4 4 REGION IV
+5 5 REGION V
+6 6 REGION VI
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/10063.table b/definitions/bufr/tables/0/wmo/26/codetables/10063.table
new file mode 100644
index 0000000..5097874
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/10063.table
@@ -0,0 +1,10 @@
+0 0 INCREASING, THEN DECREASING; ATMOSPHERIC PRESSURE THE SAME OR HIGHER THAN THREE HOURS AGO
+1 1 INCREASING, THEN STEADY; OR INCREASING, THEN INCREASING MORE SLOWLY
+2 2 INCREASING (STEADILY OR UNSTEADILY)
+3 3 DECREASING OR STEADY, THEN INCREASING; OR INCREASING, THEN INCREASING MORE RAPIDLY
+4 4 STEADY; ATMOSPHERIC PRESSURE THE SAME AS THREE HOURS AGO
+5 5 DECREASING, THEN INCREASING; ATMOSPHERIC PRESSURE THE SAME OR LOWER THAN THREE HOURS AGO
+6 6 DECREASING, THEN STEADY; OR DECREASING, THEN DECREASING MORE SLOWLY
+7 7 DECREASING (STEADILY OR UNSTEADILY)
+8 8 STEADY OR INCREASING, THEN DECREASING; OR DECREASING, THEN DECREASING MORE RAPIDLY
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/10064.table b/definitions/bufr/tables/0/wmo/26/codetables/10064.table
new file mode 100644
index 0000000..88ba38a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/10064.table
@@ -0,0 +1,4 @@
+0 0 SUBSONIC
+1 1 TRANSONIC
+2 2 SUPERSONIC
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1007.table b/definitions/bufr/tables/0/wmo/26/codetables/1007.table
new file mode 100644
index 0000000..92b7532
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1007.table
@@ -0,0 +1,188 @@
+0 0 RESERVED
+1 1 ERS 1
+2 2 ERS 2
+3 3 METOP-1 (METOP-B)
+4 4 METOP-2 (METOP-A)
+5 5 METOP-3 (METOP-C)
+20 20 SPOT1
+21 21 SPOT2
+22 22 SPOT3
+23 23 SPOT4
+40 40 OERSTED
+41 41 CHAMP
+42 42 TERRASAR-X
+43 43 TANDEM-X
+44 44 PAZ
+46 46 SMOS
+47 47 CRYOSAT-2
+48 48 AEOLUS
+50 50 METEOSAT 3
+51 51 METEOSAT 4
+52 52 METEOSAT 5
+53 53 METEOSAT 6
+54 54 METEOSAT 7
+55 55 METEOSAT 8
+56 56 METEOSAT 9
+57 57 METEOSAT 10
+58 58 METEOSAT 1
+59 59 METEOSAT 2
+60 60 ENVISAT
+61 61 SENTINEL 3A
+70 70 METEOSAT 11
+120 120 ADEOS
+121 121 ADEOS II
+122 122 GCOM-W1
+140 140 GOSAT
+150 150 GMS 3
+151 151 GMS 4
+152 152 GMS 5
+153 153 GMS
+154 154 GMS 2
+171 171 MTSAT-1R
+172 172 MTSAT-2
+173 173 HIMAWARI-8
+174 174 HIMAWARI-9
+200 200 NOAA 8
+201 201 NOAA 9
+202 202 NOAA 10
+203 203 NOAA 11
+204 204 NOAA 12
+205 205 NOAA 14
+206 206 NOAA 15
+207 207 NOAA 16
+208 208 NOAA 17
+209 209 NOAA 18
+220 220 LANDSAT 5
+221 221 LANDSAT 4
+222 222 LANDSAT 7
+223 223 NOAA 19
+224 224 NPP
+240 240 DMSP 7
+241 241 DMSP 8
+242 242 DMSP 9
+243 243 DMSP 10
+244 244 DMSP 11
+245 245 DMSP 12
+246 246 DMSP 13
+247 247 DMSP 14
+248 248 DMSP 15
+249 249 DMSP 16
+250 250 GOES 6
+251 251 GOES 7
+252 252 GOES 8
+253 253 GOES 9
+254 254 GOES 10
+255 255 GOES 11
+256 256 GOES 12
+257 257 GOES 13
+258 258 GOES 14
+259 259 GOES 15
+260 260 JASON 1
+261 261 JASON 2
+262 262 JASON 3
+281 281 QUIKSCAT
+282 282 TRMM
+283 283 CORIOLIS
+285 285 DMSP 17
+286 286 DMSP 18
+287 287 DMSP 19
+288 288 GPM-CORE
+289 289 ORBITING CARBON OBSERVATORY - 2 (OCO-2, NASA)
+310 310 GOMS 1
+311 311 GOMS 2
+320 320 METEOR 2-21
+321 321 METEOR 3-5
+322 322 METEOR 3M-1
+323 323 METEOR 3M-2
+341 341 RESURS 01-4
+410 410 KALPANA-1
+421 421 OCEANSAT-2
+430 430 INSAT 1B
+431 431 INSAT 1C
+432 432 INSAT 1D
+440 440 MEGHA-TROPIQUES
+441 441 SARAL
+450 450 INSAT 2A
+451 451 INSAT 2B
+452 452 INSAT 2E
+470 470 INSAT 3A
+471 471 INSAT 3D
+472 472 INSAT 3E
+500 500 FY-1C
+501 501 FY-1D
+502 502 HAI YANG 2A (HY-2A, SOA/NSOAS CHINA)
+510 510 FY-2
+512 512 FY-2B
+513 513 FY-2C
+514 514 FY-2D
+515 515 FY-2E
+516 516 FY-2F
+517 517 FY-2G
+520 520 FY-3A
+521 521 FY-3B
+522 522 FY-3C
+700 700 TIROS M (ITOS 1)
+701 701 NOAA 1
+702 702 NOAA 2
+703 703 NOAA 3
+704 704 NOAA 4
+705 705 NOAA 5
+706 706 NOAA 6
+707 707 NOAA 7
+708 708 TIROS-N
+710 710 GOES (SMS 1)
+711 711 GOES (SMS 2)
+720 720 TOPEX
+721 721 GFO (GEOSAT FOLLOW ON)
+722 722 GRACE A
+723 723 GRACE B
+724 724 COSMIC-2 P1
+725 725 COSMIC-2 P2
+726 726 COSMIC-2 P3
+727 727 COSMIC-2 P4
+728 728 COSMIC-2 P5
+729 729 COSMIC-2 P6
+731 731 GOES 1
+732 732 GOES 2
+733 733 GOES 3
+734 734 GOES 4
+735 735 GOES 5
+740 740 COSMIC-1
+741 741 COSMIC-2
+742 742 COSMIC-3
+743 743 COSMIC-4
+744 744 COSMIC-5
+745 745 COSMIC-6
+750 750 COSMIC-2 E1
+751 751 COSMIC-2 E2
+752 752 COSMIC-2 E3
+753 753 COSMIC-2 E4
+754 754 COSMIC-2 E5
+755 755 COSMIC-2 E6
+763 763 NIMBUS 3
+764 764 NIMBUS 4
+765 765 NIMBUS 5
+766 766 NIMBUS 6
+767 767 NIMBUS 7
+780 780 ERBS
+781 781 UARS
+782 782 EARTH PROBE
+783 783 TERRA
+784 784 AQUA
+785 785 AURA
+786 786 C/NOFS
+787 787 CALIPSO
+788 788 CLOUDSAT
+800 800 SUNSAT
+801 801 INTERNATIONAL SPACE STATION (ISS)
+810 810 COMS-1
+811 811 COMS-2
+820 820 SAC-C
+821 821 SAC-D
+825 825 KOMPSAT-5
+850 850 COMBINATION OF TERRA AND AQUA
+851 851 COMBINATION OF NOAA 16 TO NOAA 19
+852 852 COMBINATION OF METOP-1 TO METOP-3
+853 853 COMBINATION OF METEOSAT AND DMSP
+854 854 NON-SPECIFIC MIXTURE OF GEOSTATIONARY AND LOW EARTH-ORBITING SATELLITES
+1023 1023 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1024.table b/definitions/bufr/tables/0/wmo/26/codetables/1024.table
new file mode 100644
index 0000000..cdc9e24
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1024.table
@@ -0,0 +1,9 @@
+0 0 NO WIND SPEED DATA AVAILABLE
+1 1 AMSR-E DATA
+2 2 TMI DATA
+3 3 NWP: ECMWF
+4 4 NWP: UK MET OFFICE
+5 5 NWP: NCEP
+6 6 REFERENCE CLIMATOLOGY
+7 7 ERS_SCATTEROMETER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1028.table b/definitions/bufr/tables/0/wmo/26/codetables/1028.table
new file mode 100644
index 0000000..18f8206
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1028.table
@@ -0,0 +1,7 @@
+0 0 NO AOD DATA AVAILABLE
+1 1 NESDIS
+2 2 NAVOCEANO
+3 3 NAAPS
+4 4 MERIS
+5 5 AATSR
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1029.table b/definitions/bufr/tables/0/wmo/26/codetables/1029.table
new file mode 100644
index 0000000..d63d07e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1029.table
@@ -0,0 +1,8 @@
+0 0 NO SSI DATA AVAILABLE
+1 1 MSG_SEVIRI
+2 2 GOES EAST
+3 3 GOES WEST
+4 4 ECMWF
+5 5 NCEP
+6 6 UK MET OFFICE
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1033.table b/definitions/bufr/tables/0/wmo/26/codetables/1033.table
new file mode 100644
index 0000000..6006582
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1033.table
@@ -0,0 +1,234 @@
+0 0 WMO SECRETARIAT
+1 1 MELBOURNE
+2 2 MELBOURNE
+3 3 )
+4 4 MOSCOW
+5 5 MOSCOW
+6 6 )
+7 7 US NATIONAL WEATHER SERVICE - NATIONAL CENTRES FOR ENVIRONMENTAL PREDICTION (NCEP)
+8 8 US NATIONAL WEATHER SERVICE TELECOMMUNICATIONS GATEWAY (NWSTG)
+9 9 US NATIONAL WEATHER SERVICE - OTHER
+10 10 CAIRO (RSMC)
+11 11 )
+12 12 DAKAR (RSMC)
+13 13 )
+14 14 NAIROBI (RSMC)
+15 15 )
+16 16 CASABLANCA (RSMC)
+17 17 TUNIS (RSMC)
+18 18 TUNIS - CASABLANCA (RSMC)
+19 19 )
+20 20 LAS PALMAS
+21 21 ALGIERS (RSMC)
+22 22 ACMAD
+23 23 MOZAMBIQUE (NMC)
+24 24 PRETORIA (RSMC)
+25 25 LA RéUNION (RSMC)
+26 26 KHABAROVSK (RSMC)
+27 27 )
+28 28 NEW DELHI (RSMC)
+29 29 )
+30 30 NOVOSIBIRSK (RSMC)
+31 31 )
+32 32 TASHKENT (RSMC)
+33 33 JEDDAH (RSMC)
+34 34 TOKYO (RSMC), JAPAN METEOROLOGICAL AGENCY
+35 35 )
+36 36 BANGKOK
+37 37 ULAANBAATAR
+38 38 BEIJING (RSMC)
+39 39 )
+40 40 SEOUL
+41 41 BUENOS AIRES (RSMC)
+42 42 )
+43 43 BRASILIA (RSMC)
+44 44 )
+45 45 SANTIAGO
+46 46 BRAZILIAN SPACE AGENCY ­ INPE
+47 47 COLOMBIA (NMC)
+48 48 ECUADOR (NMC)
+49 49 PERU (NMC)
+50 50 VENEZUELA (BOLIVARIAN REPUBLIC OF) (NMC)
+51 51 MIAMI (RSMC)
+52 52 MIAMI (RSMC), NATIONAL HURRICANE CENTRE
+53 53 MSC MONITORING
+54 54 MONTREAL (RSMC)
+55 55 SAN FRANCISCO
+56 56 ARINC CENTRE
+57 57 US AIR FORCE - AIR FORCE GLOBAL WEATHER CENTRAL
+58 58 FLEET NUMERICAL METEOROLOGY AND OCEANOGRAPHY CENTER, MONTEREY, CA, UNITED STATES
+59 59 THE NOAA FORECAST SYSTEMS LABORATORY, BOULDER, CO, UNITED STATES
+60 60 UNITED STATES NATIONAL CENTER FOR ATMOSPHERIC RESEARCH (NCAR)
+61 61 SERVICE ARGOS - LANDOVER
+62 62 US NAVAL OCEANOGRAPHIC OFFICE
+63 63 INTERNATIONAL RESEARCH INSTITUTE FOR CLIMATE AND SOCIETY (IRI)
+64 64 HONOLULU (RSMC)
+65 65 DARWIN (RSMC)
+66 66 )
+67 67 MELBOURNE (RSMC)
+68 68 RESERVED
+69 69 WELLINGTON (RSMC)
+70 70 )
+71 71 NADI (RSMC)
+72 72 SINGAPORE
+73 73 MALAYSIA (NMC)
+74 74 UK METEOROLOGICAL OFFICE ­ EXETER (RSMC)
+75 75 )
+76 76 MOSCOW (RSMC)
+77 77 RESERVED
+78 78 OFFENBACH (RSMC)
+79 79 )
+80 80 ROME (RSMC)
+81 81 )
+82 82 NORRKöPING
+83 83 )
+84 84 TOULOUSE (RSMC)
+85 85 TOULOUSE (RSMC)
+86 86 HELSINKI
+87 87 BELGRADE
+88 88 OSLO
+89 89 PRAGUE
+90 90 EPISKOPI
+91 91 ANKARA
+92 92 FRANKFURT/MAIN
+93 93 LONDON (WAFC)
+94 94 COPENHAGEN
+95 95 ROTA
+96 96 ATHENS
+97 97 EUROPEAN SPACE AGENCY (ESA)
+98 98 EUROPEAN CENTRE FOR MEDIUM-RANGE WEATHER FORECASTS (ECMWF) (RSMC)
+99 99 DE BILT
+100 100 BRAZZAVILLE
+101 101 ABIDJAN
+102 102 LIBYA (NMC)
+103 103 MADAGASCAR (NMC)
+104 104 MAURITIUS (NMC)
+105 105 NIGER (NMC)
+106 106 SEYCHELLES (NMC)
+107 107 UGANDA (NMC)
+108 108 UNITED REPUBLIC OF TANZANIA (NMC)
+109 109 ZIMBABWE (NMC)
+110 110 HONG-KONG, CHINA
+111 111 AFGHANISTAN (NMC)
+112 112 BAHRAIN (NMC)
+113 113 BANGLADESH (NMC)
+114 114 BHUTAN (NMC)
+115 115 CAMBODIA (NMC)
+116 116 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA (NMC)
+117 117 ISLAMIC REPUBLIC OF IRAN (NMC)
+118 118 IRAQ (NMC)
+119 119 KAZAKHSTAN (NMC)
+120 120 KUWAIT (NMC)
+121 121 KYRGYZSTAN (NMC)
+122 122 LAO PEOPLE'S DEMOCRATIC REPUBLIC (NMC)
+123 123 MACAO, CHINA
+124 124 MALDIVES (NMC)
+125 125 MYANMAR (NMC)
+126 126 NEPAL (NMC)
+127 127 OMAN (NMC)
+128 128 PAKISTAN (NMC)
+129 129 QATAR (NMC)
+130 130 YEMEN (NMC)
+131 131 SRI LANKA (NMC)
+132 132 TAJIKISTAN (NMC)
+133 133 TURKMENISTAN (NMC)
+134 134 UNITED ARAB EMIRATES (NMC)
+135 135 UZBEKISTAN (NMC)
+136 136 VIET NAM (NMC)
+140 140 BOLIVIA (PLURINATIONAL STATE OF) (NMC)
+141 141 GUYANA (NMC)
+142 142 PARAGUAY (NMC)
+143 143 SURINAME (NMC)
+144 144 URUGUAY (NMC)
+145 145 FRENCH GUIANA
+146 146 BRAZILIAN NAVY HYDROGRAPHIC CENTRE
+147 147 NATIONAL COMMISSION ON SPACE ACTIVITIES (CONAE) - ARGENTINA
+150 150 ANTIGUA AND BARBUDA (NMC)
+151 151 BAHAMAS (NMC)
+152 152 BARBADOS (NMC)
+153 153 BELIZE (NMC)
+154 154 BRITISH CARIBBEAN TERRITORIES CENTRE
+155 155 SAN JOSé
+156 156 CUBA (NMC)
+157 157 DOMINICA (NMC)
+158 158 DOMINICAN REPUBLIC (NMC)
+159 159 EL SALVADOR (NMC)
+160 160 US NOAA/NESDIS
+161 161 US NOAA OFFICE OF OCEANIC AND ATMOSPHERIC RESEARCH
+162 162 GUATEMALA (NMC)
+163 163 HAITI (NMC)
+164 164 HONDURAS (NMC)
+165 165 JAMAICA (NMC)
+166 166 MEXICO CITY
+167 167 CURAçAO AND SINT MAARTEN (NMC)
+168 168 NICARAGUA (NMC)
+169 169 PANAMA (NMC)
+170 170 SAINT LUCIA (NMC)
+171 171 TRINIDAD AND TOBAGO (NMC)
+172 172 FRENCH DEPARTMENTS IN RA IV
+173 173 US NATIONAL AERONAUTICS AND SPACE ADMINISTRATION (NASA)
+174 174 INTEGRATED SCIENCE DATA MANAGEMENT/MARINE ENVIRONMENTAL DATA SERVICE (ISDM/MEDS) - CANADA
+175 175 UNIVERSITY CORPORATION FOR ATMOSPHERIC RESEARCH (UCAR) - UNITED STATES
+176 176 COOPERATIVE INSTITUTE FOR METEOROLOGICAL SATELLITE STUDIES (CIMSS) - UNITED STATES
+177 177 NOAA NATIONAL OCEAN SERVICE - UNITED STATES
+190 190 COOK ISLANDS (NMC)
+191 191 FRENCH POLYNESIA (NMC)
+192 192 TONGA (NMC)
+193 193 VANUATU (NMC)
+194 194 BRUNEI DARUSSALAM (NMC)
+195 195 INDONESIA (NMC)
+196 196 KIRIBATI (NMC)
+197 197 FEDERATED STATES OF MICRONESIA (NMC)
+198 198 NEW CALEDONIA (NMC)
+199 199 NIUE
+200 200 PAPUA NEW GUINEA (NMC)
+201 201 PHILIPPINES (NMC)
+202 202 SAMOA (NMC)
+203 203 SOLOMON ISLANDS (NMC)
+204 204 NATIONAL INSTITUTE OF WATER AND ATMOSPHERIC RESEARCH (NIWA - NEW ZEALAND)
+210 210 FRASCATI (ESA/ESRIN)
+211 211 LANNION
+212 212 LISBON
+213 213 REYKJAVIK
+214 214 MADRID
+215 215 ZURICH
+216 216 SERVICE ARGOS - TOULOUSE
+217 217 BRATISLAVA
+218 218 BUDAPEST
+219 219 LJUBLJANA
+220 220 WARSAW
+221 221 ZAGREB
+222 222 ALBANIA (NMC)
+223 223 ARMENIA (NMC)
+224 224 AUSTRIA (NMC)
+225 225 AZERBAIJAN (NMC)
+226 226 BELARUS (NMC)
+227 227 BELGIUM (NMC)
+228 228 BOSNIA AND HERZEGOVINA (NMC)
+229 229 BULGARIA (NMC)
+230 230 CYPRUS (NMC)
+231 231 ESTONIA (NMC)
+232 232 GEORGIA (NMC)
+233 233 DUBLIN
+234 234 ISRAEL (NMC)
+235 235 JORDAN (NMC)
+236 236 LATVIA (NMC)
+237 237 LEBANON (NMC)
+238 238 LITHUANIA (NMC)
+239 239 LUXEMBOURG
+240 240 MALTA (NMC)
+241 241 MONACO
+242 242 ROMANIA (NMC)
+243 243 SYRIAN ARAB REPUBLIC (NMC)
+244 244 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA (NMC)
+245 245 UKRAINE (NMC)
+246 246 REPUBLIC OF MOLDOVA (NMC)
+247 247 OPERATIONAL PROGRAMME FOR THE EXCHANGE OF WEATHER RADAR INFORMATION (OPERA) - EUMETNET
+248 248 MONTENEGRO (NMC)
+249 249 BARCELONA DUST FORECAST CENTER
+250 250 CONSORTIUM FOR SMALL SCALE MODELLING  (COSMO)
+251 251 METEOROLOGICAL COOPERATION ON OPERATIONAL NWP (METCOOP)
+252 252 MAX PLANCK INSTITUTE FOR METEOROLOGY (MPI-M)
+253 253 RESERVED FOR OTHER CENTRES
+254 254 EUMETSAT OPERATION CENTRE
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1034.table b/definitions/bufr/tables/0/wmo/26/codetables/1034.table
new file mode 100644
index 0000000..fface93
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1034.table
@@ -0,0 +1,100 @@
+0 0 NO SUB-CENTRE
+1 1 LUXEMBOURG (NMC)
+2 2 FUCINO
+3 3 GATINEAU
+4 4 MASPALOMAS (SPAIN)
+5 5 ESA ERS CENTRAL FACILITY
+6 6 PRINCE ALBERT
+7 7 WEST FREUGH
+8 8 LANGLEY RESEARCH CENTER
+9 9 MARSHALL SPACE FLIGHT CENTER
+10 10 TROMSO (NORWAY)
+11 11 MCMURDO (ANTARCTICA)
+12 12 SODANKYLA (FINLAND)
+13 13 TROMSO
+14 14 BARROW (UNITED STATES)
+15 15 ROTHERA (ANTARCTICA)
+16 16 SPACE WEATHER PREDICTION CENTER
+17 17 ESRL GLOBAL SYSTEMS DIVISION
+20 20 MASPALOMAS (SPAIN)
+21 21 AGENZIA SPAZIALE ITALIANA (ITALY)
+22 22 CENTRE NATIONAL DE LA RECHERCHE SCIENTIFIQUE (FRANCE)
+23 23 GEOFORSCHUNGS ZENTRUM (GERMANY)
+24 24 GEODETIC OBSERVATORY PECNY (CZECH REPUBLIC)
+25 25 INSTITUT D'ESTUDIS ESPACIALS DE CATALUNYA (SPAIN)
+26 26 FEDERAL OFFICE OF TOPOGRAPHY (SWITZERLAND)
+27 27 NORDIC COMMISSION OF GEODESY (NORWAY)
+28 28 NORDIC COMMISSION OF GEODESY (SWEDEN)
+29 29 INSTITUTE GéOGRAPHIQUE NATIONAL (FRANCE) - SERVICE DE GéODéSIE
+30 30 KANGERLUSSUAQ (GREENLAND)
+31 31 INSTITUTE OF ENGINEERING SATELLITE SURVEYING AND GEODESY (UNITED KINGDOM)
+32 32 JOINT OPERATIONAL METEOROLOGY AND OCEANOGRAPHY CENTRE (JOMOC)
+33 33 KONINKLIJK NEDERLANDS METEOROLOGISCH INSTITUT (NETHERLANDS)
+34 34 NORDIC GPS ATMOSPHERIC ANALYSIS CENTRE (SWEDEN)
+35 35 INSTITUTO GEOGRAFICO NACIONAL DE ESPAñA (SPAIN)
+36 36 MET ÉIREANN (IRELAND)
+37 37 ROYAL OBSERVATORY OF BELGIUM (BELGIUM)
+40 40 EDMONTON (CANADA)
+50 50 BEDFORD (CANADA)
+60 60 GANDER (CANADA)
+64 64 BUNDESWEHR GEOINFORMATION OFFICE (BGIO)
+70 70 MONTEREY (UNITED STATES)
+76 76 ROSHYDROMET (RUSSIAN FEDERATION)
+78 78 DEUTSCHER WETTERDIENST (GERMANY)
+80 80 WALLOPS ISLAND (UNITED STATES)
+90 90 GILMOR CREEK (UNITED STATES)
+96 96 HELLENIC NATIONAL METEOROLOGICAL SERVICE (GREECE)
+100 100 ATHENS (GREECE)
+101 101 ALBANIA (NMC)
+102 102 NATIONAL RESEARCH COUNCIL/INSTITUTE OF ATMOSPHERIC SCIENCES AND CLIMATE (CNR-ISAC)
+110 110 NOWCAST MOBILE (LIGHTNING DATA)
+120 120 EWA BEACH, HAWAII
+130 130 MIAMI, FLORIDA
+140 140 LANNION (FRANCE)
+150 150 SVALBARD (NORWAY)
+170 170 ST DENIS (LA RéUNION)
+180 180 MOSCOW
+190 190 MUSCAT
+200 200 KHABAROVSK
+201 201 RHEINISCHES INSTITUT FüR UMWELTFORSCHUNG AN DER UNIVERSITäT ZU KöLN E.V. (GERMANY)
+203 203 DAVIS
+204 204 NATIONAL INSTITUTE OF WATER AND ATMOSPHERIC RESEARCH (NIWA - NEW ZEALAND)
+205 205 NIUE
+206 206 RAROTONGA (COOK ISLANDS)
+207 207 APIA (SAMOA)
+208 208 TONGA
+209 209 TUVALU
+210 210 NOVOSIBIRSK
+211 211 TOKELAU
+214 214 DARWIN
+215 215 METEOSWISS (SWITZERLAND)
+217 217 PERTH
+219 219 TOWNSVILLE
+220 220 INSTITUTE OF METEOROLOGY AND WATER MANAGEMENT (POLAND)
+221 221 SCHLESWIG-HOLSTEIN, TRAFFIC OPERATIONS COMPUTING CENTRE (TOCC) KIEL/NEUMüNSTER
+222 222 HAMBURG, TOCC HAMBURG
+223 223 NIEDERSACHSEN, TOCC HANNOVER
+224 224 AUSTRIA (NMC)
+225 225 NORDRHEIN-WESTFALEN, TOCC KAMEN LEVERKUSEN
+226 226 HESSEN, TOCC RüSSELSHEIM
+227 227 RHEINLAND-PFALZ, TOCC KOBLENZ
+228 228 BADEN-WüRTTEMBERG, TOCC LUDWIGSBURG
+229 229 BAYERN, TOCC FREIMANN
+230 230 SAARLAND, TOCC ROHRBACH
+231 231 BAYERN, AUTOBAHN DIRECTORATE NORDBAYERN
+232 232 BRANDENBURG, TOCC STOLPE
+233 233 MECKLENBURG-VORPOMMERN, TOCC MALCHOW
+234 234 SACHSEN, TOCC DRESDEN
+235 235 SACHSEN-ANHALT, TOCC HALLE
+236 236 THüRINGEN, TOCC ERFURT
+237 237 EASYWAY - METEOTRANS
+240 240 KIYOSE
+241 241 REANALYSIS PROJECT
+242 242 NATIONAL METEOROLOGICAL ADMINISTRATION (ROMANIA)
+243 243 KELBURN
+245 245 JINCHEON
+249 249 SINGAPORE
+250 250 VLADIVOSTOCK
+251 251 GUAM
+252 252 HONOLULU
+254 254 EUMETSAT
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1036.table b/definitions/bufr/tables/0/wmo/26/codetables/1036.table
new file mode 100644
index 0000000..e7e4045
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1036.table
@@ -0,0 +1,38 @@
+36001 36001 AUSTRALIA, BUREAU OF METEOROLOGY (BOM)
+36002 36002 AUSTRALIA, JOINT AUSTRALIAN FACILITY FOR OCEAN OBSERVING SYSTEMS (JAFOOS)
+36003 36003 AUSTRALIA, THE COMMONWEALTH SCIENTIFIC AND INDUSTRIAL RESEARCH ORGANIZATION (CSIRO)
+124001 124001 CANADA, MARINE ENVIRONMENTAL DATA SERVICE (MEDS)
+124002 124002 CANADA, INSTITUTE OF OCEAN SCIENCES (IOS)
+124173 124173 CANADA, ENVIRONMENT CANADA
+124174 124174 CANADA, DEPARTMENT OF NATIONAL DEFENCE
+124175 124175 CANADA, NAV CANADA
+156001 156001 CHINA, THE STATE OCEANIC ADMINISTRATION
+156002 156002 CHINA, SECOND INSTITUTE OF OCEANOGRAPHY, STATE OCEANIC ADMINISTRATION
+156003 156003 CHINA, INSTITUTE OF OCEAN TECHNOLOGY
+250001 250001 FRANCE, INSTITUT DE RECHERCHE POUR LE DéVELOPPEMENT (IRD)
+250002 250002 FRANCE, INSTITUT FRANçAIS DE RECHERCHE POUR L'EXPLOITATION DE LA MER (IFREMER)
+276001 276001 GERMANY, BUNDESAMT FUER SEESCHIFFAHRT UND HYDROGRAPHIE (BSH)
+276002 276002 GERMANY, INSTITUT FUER MEERESKUNDE, KIEL
+356001 356001 INDIA, NATIONAL INSTITUTE OF OCEANOGRAPHY (NIO)
+356002 356002 INDIA, NATIONAL INSTITUTE FOR OCEAN TECHNOLOGY (NIOT)
+356003 356003 INDIA, NATIONAL CENTRE FOR OCEAN INFORMATION SERVICE
+392001 392001 JAPAN, JAPAN METEOROLOGICAL AGENCY (JMA)
+392002 392002 JAPAN, FRONTIER OBSERVATIONAL RESEARCH SYSTEM FOR GLOBAL CHANGE
+392003 392003 JAPAN, JAPAN MARINE SCIENCE AND TECHNOLOGY CENTRE (JAMSTEC)
+410001 410001 REPUBLIC OF KOREA, SEOUL NATIONAL UNIVERSITY
+410002 410002 REPUBLIC OF KOREA, KOREA OCEAN RESEARCH AND DEVELOPMENT INSTITUTE  (KORDI)
+410003 410003 REPUBLIC OF KOREA, METEOROLOGICAL RESEARCH INSTITUTE
+540001 540001 NEW CALEDONIA, INSTITUT DE RECHERCHE POUR LE DéVELOPPEMENT (IRD)
+554001 554001 NEW ZEALAND, NATIONAL INSTITUTE OF WATER AND ATMOSPHERIC RESEARCH (NIWA)
+643001 643001 RUSSIAN FEDERATION, STATE OCEANOGRAPHIC INSTITUTE OF ROSHYDROMET
+643002 643002 RUSSIAN FEDERATION, FEDERAL SERVICE FOR HYDROMETEOROLOGY AND ENVIRONMENTAL MONITORING
+724001 724001 SPAIN, INSTITUTO ESPAñOL DE OCEANOGRAFIA
+826001 826001 UNITED KINGDOM, HYDROGRAPHIC OFFICE
+826002 826002 UNITED KINGDOM, SOUTHAMPTON OCEANOGRAPHY CENTRE (SOC)
+840001 840001 USA, NOAA ATLANTIC OCEANOGRAPHIC AND METEOROLOGICAL LABORATORIES (AOML)
+840002 840002 USA, NOAA PACIFIC MARINE ENVIRONMENTAL LABORATORIES (PMEL)
+840003 840003 USA, SCRIPPS INSTITUTION OF OCEANOGRAPHY (SIO)
+840004 840004 USA, WOODS HOLE OCEANOGRAPHIC INSTITUTION (WHOI)
+840005 840005 USA, UNIVERSITY OF WASHINGTON
+840006 840006 USA, NAVAL OCEANOGRAPHIC OFFICE
+1048575 1048575 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1038.table b/definitions/bufr/tables/0/wmo/26/codetables/1038.table
new file mode 100644
index 0000000..2eee38b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1038.table
@@ -0,0 +1,7 @@
+0 0 NO SEA ICE SET
+1 1 NSIDC SSM/I CAVALIERI ET AL (1992)
+2 2 AMSR-E
+3 3 ECMWF
+4 4 CMS (FRANCE) CLOUD MASK USED BY MEDSPIRATION
+5 5 EUMETSAT OSI-SAF
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1052.table b/definitions/bufr/tables/0/wmo/26/codetables/1052.table
new file mode 100644
index 0000000..b8e14ed
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1052.table
@@ -0,0 +1,4 @@
+0 0 PRIMARY
+1 1 SECONDARY
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1090.table b/definitions/bufr/tables/0/wmo/26/codetables/1090.table
new file mode 100644
index 0000000..55f7ca2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1090.table
@@ -0,0 +1,5 @@
+0 0 LAGGED-AVERAGE FORECASTING (LAF)
+1 1 BREEDING
+2 2 SINGULAR VECTORS
+3 3 MULTIPLE ANALYSIS CYCLES
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1092.table b/definitions/bufr/tables/0/wmo/26/codetables/1092.table
new file mode 100644
index 0000000..dc9bf1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1092.table
@@ -0,0 +1,5 @@
+0 0 UNPERTURBED HIGH-RESOLUTION CONTROL FORECAST
+1 1 UNPERTURBED LOW-RESOLUTION CONTROL FORECAST
+2 2 NEGATIVELY PERTURBED FORECAST
+3 3 POSITIVELY PERTURBED FORECAST
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/1101.table b/definitions/bufr/tables/0/wmo/26/codetables/1101.table
new file mode 100644
index 0000000..21e0cf5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/1101.table
@@ -0,0 +1,202 @@
+100 100 ALGERIA
+101 101 ANGOLA
+102 102 BENIN
+103 103 BOTSWANA
+104 104 BURKINA FASO
+105 105 BURUNDI
+106 106 CAMEROON
+107 107 CABO VERDE
+108 108 CENTRAL AFRICAN REPUBLIC
+109 109 CHAD
+110 110 COMOROS
+111 111 CONGO
+112 112 CôTE D'IVOIRE
+113 113 DEMOCRATIC REPUBLIC OF THE CONGO
+114 114 DJIBOUTI
+115 115 EGYPT
+116 116 ERITREA
+117 117 ETHIOPIA
+118 118 FRANCE (RA I)
+119 119 GABON
+120 120 GAMBIA
+121 121 GHANA
+122 122 GUINEA
+123 123 GUINEA-BISSAU
+124 124 KENYA
+125 125 LESOTHO
+126 126 LIBERIA
+127 127 LIBYA
+128 128 MADAGASCAR
+129 129 MALAWI
+130 130 MALI
+131 131 MAURITANIA
+132 132 MAURITIUS
+133 133 MOROCCO
+134 134 MOZAMBIQUE
+135 135 NAMIBIA
+136 136 NIGER
+137 137 NIGERIA
+138 138 PORTUGAL (RA I)
+139 139 RWANDA
+140 140 SAO TOME AND PRINCIPE
+141 141 SENEGAL
+142 142 SEYCHELLES
+143 143 SIERRA LEONE
+144 144 SOMALIA
+145 145 SOUTH AFRICA
+146 146 SPAIN (RA I)
+147 147 SUDAN
+148 148 SWAZILAND
+149 149 TOGO
+150 150 TUNISIA
+151 151 UGANDA
+152 152 UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (RA I)
+153 153 UNITED REPUBLIC OF TANZANIA
+154 154 ZAMBIA
+155 155 ZIMBABWE
+200 200 AFGHANISTAN
+201 201 BAHRAIN
+202 202 BANGLADESH
+203 203 BHUTAN
+204 204 CAMBODIA
+205 205 CHINA
+206 206 DEMOCRATIC PEOPLE'S REPUBLIC OF KOREA
+207 207 HONG KONG, CHINA
+208 208 INDIA
+209 209 IRAN, ISLAMIC REPUBLIC OF
+210 210 IRAQ
+211 211 JAPAN
+212 212 KAZAKHSTAN
+213 213 KUWAIT
+214 214 KYRGYZSTAN
+215 215 LAO PEOPLE'S DEMOCRATIC REPUBLIC
+216 216 MACAO, CHINA
+217 217 MALDIVES
+218 218 MONGOLIA
+219 219 MYANMAR
+220 220 NEPAL
+221 221 OMAN
+222 222 PAKISTAN
+223 223 QATAR
+224 224 REPUBLIC OF KOREA
+225 225 YEMEN
+226 226 RUSSIAN FEDERATION (RA II)
+227 227 SAUDI ARABIA
+228 228 SRI LANKA
+229 229 TAJIKISTAN
+230 230 THAILAND
+231 231 TURKMENISTAN
+232 232 UNITED ARAB EMIRATES
+233 233 UZBEKISTAN
+234 234 VIET NAM
+300 300 ARGENTINA
+301 301 BOLIVIA (PLURINATIONAL STATE OF)
+302 302 BRAZIL
+303 303 CHILE
+304 304 COLOMBIA
+305 305 ECUADOR
+306 306 FRANCE (RA III)
+307 307 GUYANA
+308 308 PARAGUAY
+309 309 PERU
+310 310 SURINAME
+311 311 URUGUAY
+312 312 VENEZUELA (BOLIVARIAN REPUBLIC OF)
+400 400 ANTIGUA AND BARBUDA
+401 401 BAHAMAS
+402 402 BARBADOS
+403 403 BELIZE
+404 404 BRITISH CARIBBEAN TERRITORIES
+405 405 CANADA
+406 406 COLOMBIA
+407 407 COSTA RICA
+408 408 CUBA
+409 409 DOMINICA
+410 410 DOMINICAN REPUBLIC
+411 411 EL SALVADOR
+412 412 FRANCE (RA IV)
+413 413 GUATEMALA
+414 414 HAITI
+415 415 HONDURAS
+416 416 JAMAICA
+417 417 MEXICO
+418 418 CURAçAO AND SINT MAARTEN
+419 419 NICARAGUA
+420 420 PANAMA
+421 421 SAINT LUCIA
+422 422 TRINIDAD AND TOBAGO
+423 423 UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (RA IV)
+424 424 UNITED STATES OF AMERICA (RA IV)
+425 425 VENEZUELA (BOLIVARIAN REPUBLIC OF)
+500 500 AUSTRALIA
+501 501 BRUNEI DARUSSALAM
+502 502 COOK ISLANDS
+503 503 FIJI
+504 504 FRENCH POLYNESIA
+505 505 INDONESIA
+506 506 KIRIBATI
+507 507 MALAYSIA
+508 508 MICRONESIA, FEDERATED STATES OF
+509 509 NEW CALEDONIA
+510 510 NEW ZEALAND
+511 511 NIUE
+512 512 PAPUA NEW GUINEA
+513 513 PHILIPPINES
+514 514 SAMOA
+515 515 SINGAPORE
+516 516 SOLOMON ISLANDS
+517 517 TONGA
+518 518 UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (RA V)
+519 519 UNITED STATES OF AMERICA (RA V)
+520 520 VANUATU
+600 600 ALBANIA
+601 601 ARMENIA
+602 602 AUSTRIA
+603 603 AZERBAIJAN
+604 604 BELARUS
+605 605 BELGIUM
+606 606 BOSNIA AND HERZEGOVINA
+607 607 BULGARIA
+608 608 CROATIA
+609 609 CYPRUS
+610 610 CZECH REPUBLIC
+611 611 DENMARK
+612 612 ESTONIA
+613 613 FINLAND
+614 614 FRANCE (RA VI)
+615 615 GEORGIA
+616 616 GERMANY
+617 617 GREECE
+618 618 HUNGARY
+619 619 ICELAND
+620 620 IRELAND
+621 621 ISRAEL
+622 622 ITALY
+623 623 JORDAN
+624 624 KAZAKHSTAN
+625 625 LATVIA
+626 626 LEBANON
+627 627 LITHUANIA
+628 628 LUXEMBOURG
+629 629 MALTA
+630 630 MONACO
+631 631 MONTENEGRO
+632 632 NETHERLANDS
+633 633 NORWAY
+634 634 POLAND
+635 635 PORTUGAL (RA VI)
+636 636 REPUBLIC OF MOLDOVA
+637 637 ROMANIA
+638 638 RUSSIAN FEDERATION (RA VI)
+639 639 SERBIA
+640 640 SLOVAKIA
+641 641 SLOVENIA
+642 642 SPAIN (RA VI)
+643 643 SWEDEN
+644 644 SWITZERLAND
+645 645 SYRIAN ARAB REPUBLIC
+646 646 THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA
+647 647 TURKEY
+648 648 UKRAINE
+649 649 UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (RA VI)
+1023 1023 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/11030.table b/definitions/bufr/tables/0/wmo/26/codetables/11030.table
new file mode 100644
index 0000000..253b8fc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/11030.table
@@ -0,0 +1,25 @@
+0 0 NIL
+1 1 LIGHT
+2 2 MODERATE
+3 3 SEVERE
+4 4 NIL
+5 5 LIGHT
+6 6 MODERATE
+7 7 SEVERE
+8 8 NIL
+9 9 LIGHT
+10 10 MODERATE
+11 11 SEVERE
+12 12 EXTREME, IN CLEAR AIR
+13 13 EXTREME, IN CLOUD
+14 14 EXTREME, CLOUD/CLEAR AIR NOT SPECIFIED
+15 15 LIGHT, ISOLATED MODERATE
+16 16 LIGHT, OCCASIONAL MODERATE
+17 17 LIGHT, FREQUENTLY MODERATE
+18 18 MODERATE, ISOLATED SEVERE
+19 19 MODERATE, OCCASIONAL SEVERE
+20 20 MODERATE, FREQUENTLY SEVERE
+21 21 SEVERE, ISOLATED EXTREME
+22 22 SEVERE, OCCASIONAL EXTREME
+23 23 SEVERE, FREQUENTLY EXTREME
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/11031.table b/definitions/bufr/tables/0/wmo/26/codetables/11031.table
new file mode 100644
index 0000000..7bece1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/11031.table
@@ -0,0 +1,16 @@
+0 0 NIL
+1 1 LIGHT
+2 2 MODERATE
+3 3 SEVERE
+4 4 NIL
+5 5 LIGHT
+6 6 MODERATE
+7 7 SEVERE
+8 8 NIL
+9 9 LIGHT
+10 10 MODERATE
+11 11 SEVERE
+12 12 EXTREME, IN CLEAR AIR
+13 13 EXTREME, IN CLOUD
+14 14 EXTREME, CLOUD/CLEAR AIR NOT SPECIFIED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/11037.table b/definitions/bufr/tables/0/wmo/26/codetables/11037.table
new file mode 100644
index 0000000..423eef7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/11037.table
@@ -0,0 +1,30 @@
+0 0 AVE < 0.1
+1 1 AVE < 0.1
+2 2 0.1 <= AVE < 0.2
+3 3 AVE <0.1
+4 4 0.1 <= AVE < 0.2
+5 5 0.2 <= AVE < 0.3
+6 6 AVE < 0.1
+7 7 0.1 <= AVE < 0.2
+8 8 0.2 <= AVE < 0.3
+9 9 0.3 <= AVE < 0.4
+10 10 AVE < 0.1
+11 11 0.1 <= AVE < 0.2
+12 12 0.2 <= AVE < 0.3
+13 13 0.3 <= AVE < 0.4
+14 14 0.4 <= AVE < 0.5
+15 15 AVE < 0.1
+16 16 0.1 <= AVE < 0.2
+17 17 0.2 <= AVE < 0.3
+18 18 0.3 <= AVE < 0.4
+19 19 0.4 <= AVE < 0.5
+20 20 0.5 <= AVE < 0.8
+21 21 AVE < 0.1
+22 22 0.1 <= AVE < 0.2
+23 23 0.2 <= AVE < 0.3
+24 24 0.3 <= AVE < 0.4
+25 25 0.4 <= AVE < 0.5
+26 26 0.5 <= AVE < 0.8
+27 27 0.8 <= AVE
+28 28 NIL
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/11038.table b/definitions/bufr/tables/0/wmo/26/codetables/11038.table
new file mode 100644
index 0000000..f0c5cce
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/11038.table
@@ -0,0 +1,17 @@
+0 0 MIN < 1
+1 1 1 <= MIN < 2
+2 2 2 <= MIN < 3
+3 3 3 <= MIN < 4
+4 4 4 <= MIN < 5
+5 5 5 <= MIN < 6
+6 6 6 <= MIN < 7
+7 7 7 <= MIN < 8
+8 8 8 <= MIN < 9
+9 9 9 <= MIN < 10
+10 10 10 <= MIN < 11
+11 11 11 <= MIN < 12
+12 12 12 <= MIN < 13
+13 13 13 <= MIN < 14
+14 14 14 <= MIN < 15
+15 15 NO TIMING INFORMATION AVAILABLE
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/11039.table b/definitions/bufr/tables/0/wmo/26/codetables/11039.table
new file mode 100644
index 0000000..c2abbda
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/11039.table
@@ -0,0 +1,17 @@
+0 0 MIN < 1
+1 1 1 <= MIN < 2
+2 2 2 <= MIN < 3
+3 3 3 <= MIN < 4
+4 4 4 <= MIN < 5
+5 5 5 <= MIN < 6
+6 6 6 <= MIN < 7
+7 7 7 <= MIN < 8
+8 8 8 <= MIN < 9
+9 9 9 <= MIN < 10
+10 10 10 <= MIN < 11
+11 11 11 <= MIN < 12
+12 12 12 <= MIN < 13
+13 13 13 <= MIN < 14
+14 14 14 <= MIN < 15
+60 60 NO TIMING INFORMATION AVAILABLE
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/13038.table b/definitions/bufr/tables/0/wmo/26/codetables/13038.table
new file mode 100644
index 0000000..19bc422
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/13038.table
@@ -0,0 +1,4 @@
+0 0 NOT SUPERADIABATIC
+1 1 SUPERADIABATIC
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/13039.table b/definitions/bufr/tables/0/wmo/26/codetables/13039.table
new file mode 100644
index 0000000..c070b1d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/13039.table
@@ -0,0 +1,3 @@
+0 0 SEA ICE
+1 1 SNOW ON LAND
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/13040.table b/definitions/bufr/tables/0/wmo/26/codetables/13040.table
new file mode 100644
index 0000000..30c08bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/13040.table
@@ -0,0 +1,8 @@
+0 0 LAND
+1 1 RESERVED
+2 2 NEAR COAST
+3 3 ICE
+4 4 POSSIBLE ICE
+5 5 OCEAN
+6 6 COAST
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/13041.table b/definitions/bufr/tables/0/wmo/26/codetables/13041.table
new file mode 100644
index 0000000..9e77b64
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/13041.table
@@ -0,0 +1,10 @@
+1 1 A
+2 2 A - B
+3 3 B
+4 4 B - C
+5 5 C
+6 6 D
+7 7 E
+8 8 F
+9 9 G
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/13051.table b/definitions/bufr/tables/0/wmo/26/codetables/13051.table
new file mode 100644
index 0000000..4bdb73e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/13051.table
@@ -0,0 +1,8 @@
+0 0 SMALLER THAN ANY VALUE IN THE 30-YEAR PERIOD
+1 1 IN THE FIRST QUINTILE
+2 2 IN THE SECOND QUINTILE
+3 3 IN THE THIRD QUINTILE
+4 4 IN THE FOURTH QUINTILE
+5 5 IN THE FIFTH QUINTILE
+6 6 GREATER THAN ANY VALUE IN THE 30-YEAR PERIOD
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/13056.table b/definitions/bufr/tables/0/wmo/26/codetables/13056.table
new file mode 100644
index 0000000..448c269
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/13056.table
@@ -0,0 +1,11 @@
+0 0 NO PRECIPITATION
+1 1 LIGHT INTERMITTENT
+2 2 MODERATE INTERMITTENT
+3 3 HEAVY INTERMITTENT
+4 4 VERY HEAVY INTERMITTENT
+5 5 LIGHT CONTINUOUS
+6 6 MODERATE CONTINUOUS
+7 7 HEAVY CONTINUOUS
+8 8 VERY HEAVY CONTINUOUS
+9 9 VARIABLE - ALTERNATIVELY LIGHT AND HEAVY
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/13057.table b/definitions/bufr/tables/0/wmo/26/codetables/13057.table
new file mode 100644
index 0000000..6dfa18d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/13057.table
@@ -0,0 +1,11 @@
+0 0 NO PRECIPITATION
+1 1 WITHIN THE LAST HOUR
+2 2 1 TO 2 HOURS AGO
+3 3 2 TO 3 HOURS AGO
+4 4 3 TO 4 HOURS AGO
+5 5 4 TO 5 HOURS AGO
+6 6 5 TO 6 HOURS AGO
+7 7 6 TO 8 HOURS AGO
+8 8 8 TO 10 HOURS AGO
+9 9 MORE THAN 10 HOURS AGO
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/15025.table b/definitions/bufr/tables/0/wmo/26/codetables/15025.table
new file mode 100644
index 0000000..6bb6ed5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/15025.table
@@ -0,0 +1,4 @@
+0 0 OZONE
+11 11 FINE PARTICULATE MATTER (DIAMETER < 2.5 MICRONS)
+12 12 FINE PARTICULATE MATTER (DIAMETER < 10 MICRONS)
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19001.table b/definitions/bufr/tables/0/wmo/26/codetables/19001.table
new file mode 100644
index 0000000..af893eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19001.table
@@ -0,0 +1,7 @@
+0 0 DEPRESSION OR LOW (EXTRATROPLCAL)
+1 1 TROPICAL DEPRESSION
+2 2 TROPICAL STORM
+3 3 SEVERE TROPICAL STORM
+4 4 TYPHOON
+10 10 DUST/SANDSTORM
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19008.table b/definitions/bufr/tables/0/wmo/26/codetables/19008.table
new file mode 100644
index 0000000..3bcb519
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19008.table
@@ -0,0 +1,5 @@
+0 0 RESERVED
+1 1 SHALLOW (TOP OF CIRCULATION BELOW 700-HPA LEVEL)
+2 2 MEDIUM (TOP BETWEEN 700-HPA AND 400-HPA LEVEL)
+3 3 DEEP (TOP ABOVE 400-HPA LEVEL)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19010.table b/definitions/bufr/tables/0/wmo/26/codetables/19010.table
new file mode 100644
index 0000000..b091d96
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19010.table
@@ -0,0 +1,3 @@
+1 1 MINIMUM VALUE OF SEA LEVEL PRESSURE
+2 2 MAXIMUM VALUE OF 850 HPA RELATIVE VORTICITY
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19100.table b/definitions/bufr/tables/0/wmo/26/codetables/19100.table
new file mode 100644
index 0000000..1f03a6f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19100.table
@@ -0,0 +1,9 @@
+3 3 DURING THE PRECEDING 15 MINUTES
+4 4 DURING THE PRECEDING 30 MINUTES
+5 5 DURING THE PRECEDING 1 HOUR
+6 6 DURING THE PRECEDING 2 HOURS
+7 7 DURING THE PRECEDING 3 HOURS
+8 8 DURING THE PRECEDING 6 HOURS
+9 9 DURING A PERIOD OF MORE THAN 6 HOURS
+10 10 UNDETERMINED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19101.table b/definitions/bufr/tables/0/wmo/26/codetables/19101.table
new file mode 100644
index 0000000..0cd1ff4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19101.table
@@ -0,0 +1,10 @@
+0 0 RESERVED
+1 1 EYE VISIBLE ON RADAR SCOPE, ACCURACY GOOD (WITHIN 10 KM)
+2 2 EYE VISIBLE ON RADAR SCOPE, ACCURACY FAIR (WITHIN 30 KM)
+3 3 EYE VISIBLE ON RADAR SCOPE, ACCURACY POOR (WITHIN 50 KM)
+4 4 POSITION OF THE CENTRE WITHIN THE AREA COVERED BY THE RADAR SCOPE, DETERMINATION BY MEANS OF THE SPIRAL-BAND OVERLAY, ACCURACY GOOD (WITHIN 10 KM)
+5 5 POSITION OF THE CENTRE WITHIN THE AREA COVERED BY THE RADAR SCOPE, DETERMINATION BY MEANS OF THE SPIRAL-BAND OVERLAY, ACCURACY FAIR (WITHIN 30 KM)
+6 6 POSITION OF THE CENTRE WITHIN THE AREA COVERED BY THE RADAR SCOPE, DETERMINATION BY MEANS OF THE SPIRAL-BAND OVERLAY, ACCURACY POOR (WITHIN 50 KM)
+7 7 POSITION OF THE CENTRE OUTSIDE THE AREA COVERED BY THE RADAR SCOPE, EXTRAPOLATION BY MEANS OF THE SPIRAL-BAND OVERLAY
+10 10 ACCURACY UNDETERMINED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19102.table b/definitions/bufr/tables/0/wmo/26/codetables/19102.table
new file mode 100644
index 0000000..21ab775
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19102.table
@@ -0,0 +1,8 @@
+0 0 CIRCULAR
+1 1 ELLIPTICAL - THE MINOR AXIS IS AT LEAST 3/4 THE LENGTH OF THE MAJOR AXIS
+2 2 ELLIPTICAL - THE MINOR AXIS IS LESS THAN 3/4 THE LENGTH OF THE MAJOR AXIS
+3 3 APPARENT DOUBLE EYE
+4 4 OTHER SHAPE
+5 5 ILL DEFINED
+6 6 UNDETERMINED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19103.table b/definitions/bufr/tables/0/wmo/26/codetables/19103.table
new file mode 100644
index 0000000..3abb184
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19103.table
@@ -0,0 +1,12 @@
+0 0 LESS THAN 5 KM
+1 1 5 TO LESS THAN 10 KM
+2 2 10 TO LESS THAN 15 KM
+3 3 15 TO LESS THAN 20 KM
+4 4 20 TO LESS THAN 25 KM
+5 5 25 TO LESS THAN 30 KM
+6 6 30 TO LESS THAN 35 KM
+7 7 35 TO LESS THAN 40 KM
+8 8 40 TO LESS THAN 50 KM
+9 9 50 KM AND GREATER
+10 10 UNDETERMINED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19104.table b/definitions/bufr/tables/0/wmo/26/codetables/19104.table
new file mode 100644
index 0000000..67ae474
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19104.table
@@ -0,0 +1,12 @@
+0 0 EYE HAS FIRST BECOME VISIBLE DURING THE PAST 30 MINUTES
+1 1 NO SIGNIFICANT CHANGE IN THE CHARACTERISTICS OR SIZE OF THE EYE
+2 2 EYE HAS BECOME SMALLER WITH NO OTHER SIGNIFICANT CHANGE IN CHARACTERISTICS
+3 3 EYE HAS BECOME LARGER WITH NO OTHER SIGNIFICANT CHANGE IN CHARACTERISTICS
+4 4 EYE HAS BECOME LESS DISTINCT WITH NO SIGNIFICANT CHANGE IN SIZE
+5 5 EYE HAS BECOME LESS DISTINCT AND DECREASED IN SIZE
+6 6 EYE HAS BECOME LESS DISTINCT AND INCREASED IN SIZE
+7 7 EYE HAS BECOME MORE DISTINCT WITH NO SIGNIFICANT CHANGE IN SIZE
+8 8 EYE HAS BECOME MORE DISTINCT AND DECREASED IN SIZE
+9 9 EYE HAS BECOME MORE DISTINCT AND INCREASED IN SIZE
+10 10 CHANGE IN CHARACTER AND SIZE OF EYE CANNOT BE DETERMINED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19105.table b/definitions/bufr/tables/0/wmo/26/codetables/19105.table
new file mode 100644
index 0000000..becfcee
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19105.table
@@ -0,0 +1,10 @@
+0 0 0 TO LESS THAN 100 KM
+1 1 100 TO LESS THAN 200 KM
+2 2 200 TO LESS THAN 300 KM
+3 3 300 TO LESS THAN 400 KM
+4 4 400 TO LESS THAN 500 KM
+5 5 500 TO LESS THAN 600 KM
+6 6 600 TO LESS THAN 800 KM
+7 7 800 KM OR MORE
+10 10 DOUBTFUL OR UNDETERMINED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19107.table b/definitions/bufr/tables/0/wmo/26/codetables/19107.table
new file mode 100644
index 0000000..ed6b79c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19107.table
@@ -0,0 +1,11 @@
+0 0 LESS THAN 1 HOUR
+1 1 1 TO LESS THAN 2 HOURS
+2 2 2 TO LESS THAN 3 HOURS
+3 3 3 TO LESS THAN 6 HOURS
+4 4 6 TO LESS THAN 9 HOURS
+5 5 9 TO LESS THAN 12 HOURS
+6 6 12 TO LESS THAN 15 HOURS
+7 7 15 TO LESS THAN 18 HOURS
+8 8 18 TO LESS THAN 21 HOURS
+9 9 21 TO LESS THAN 30 HOURS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19108.table b/definitions/bufr/tables/0/wmo/26/codetables/19108.table
new file mode 100644
index 0000000..9350bc2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19108.table
@@ -0,0 +1,8 @@
+0 0 CYCLONE CENTRE WITHIN 10 KM OF THE TRANSMITTED POSITION
+1 1 CYCLONE CENTRE WITHIN 20 KM OF THE TRANSMITTED POSITION
+2 2 CYCLONE CENTRE WITHIN 50 KM OF THE TRANSMITTED POSITION
+3 3 CYCLONE CENTRE WITHIN 100 KM OF THE TRANSMITTED POSITION
+4 4 CYCLONE CENTRE WITHIN 200 KM OF THE TRANSMITTED POSITION
+5 5 CYCLONE CENTRE WITHIN 300 KM OF THE TRANSMITTED POSITION
+6 6 CYCLONE CENTRE UNDETERMINED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19109.table b/definitions/bufr/tables/0/wmo/26/codetables/19109.table
new file mode 100644
index 0000000..e3c9c05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19109.table
@@ -0,0 +1,12 @@
+0 0 LESS THAN 1° OF LATITUDE
+1 1 1° TO LESS THAN 2° OF LATITUDE
+2 2 2° TO LESS THAN 3° OF LATITUDE
+3 3 3° TO LESS THAN 4° OF LATITUDE
+4 4 4° TO LESS THAN 5° OF LATITUDE
+5 5 5° TO LESS THAN 6° OF LATITUDE
+6 6 6° TO LESS THAN 7° OF LATITUDE
+7 7 7° TO LESS THAN 8° OF LATITUDE
+8 8 8° TO LESS THAN 9° OF LATITUDE
+9 9 9° OF LATITUDE OR MORE
+10 10 UNDETERMINED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19110.table b/definitions/bufr/tables/0/wmo/26/codetables/19110.table
new file mode 100644
index 0000000..81f4f59
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19110.table
@@ -0,0 +1,8 @@
+0 0 MUCH WEAKENING
+1 1 WEAKENING
+2 2 NO CHANGE
+3 3 INTENSIFICATION
+4 4 STRONG INTENSIFICATION
+9 9 NOT OBSERVED PREVIOUSLY
+10 10 UNDETERMINED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19113.table b/definitions/bufr/tables/0/wmo/26/codetables/19113.table
new file mode 100644
index 0000000..ba46dca
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19113.table
@@ -0,0 +1,8 @@
+1 1 CURVED BAND
+2 2 SHEAR
+3 3 EYE
+4 4 BANDING EYE
+5 5 CENTRAL DENSE OVERCAST (CDO)
+6 6 EMBEDDED CENTRE
+7 7 CENTRE COLD COVER (CCC)
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19117.table b/definitions/bufr/tables/0/wmo/26/codetables/19117.table
new file mode 100644
index 0000000..b623197
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19117.table
@@ -0,0 +1,4 @@
+1 1 A (CURVED BAND)
+2 2 B (CDO)
+3 3 C (SHEAR)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/19119.table b/definitions/bufr/tables/0/wmo/26/codetables/19119.table
new file mode 100644
index 0000000..8329a8a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/19119.table
@@ -0,0 +1,4 @@
+1 1 DT-NUMBER
+2 2 PT-NUMBER
+3 3 MET-NUMBER
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20003.table b/definitions/bufr/tables/0/wmo/26/codetables/20003.table
new file mode 100644
index 0000000..0ebc7c7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20003.table
@@ -0,0 +1,266 @@
+0 0 CLOUD DEVELOPMENT NOT OBSERVED OR NOT OBSERVABLE
+1 1 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED
+2 2 STATE OF SKY ON THE WHOLE UNCHANGED
+3 3 CLOUDS GENERALLY FORMING OR DEVELOPING
+4 4 VISIBILITY REDUCED BY SMOKE, E.G. VELDT OR FOREST FIRES, INDUSTRIAL SMOKE OR VOLCANIC ASHES
+5 5 HAZE
+6 6 WIDESPREAD DUST IN SUSPENSION IN THE AIR, NOT RAISED BY WIND AT OR NEAR THE STATION AT THE TIME OF OBSERVATION
+7 7 DUST OR SAND RAISED BY WIND AT OR NEAR THE STATION AT THE TIME OF OBSERVATION, BUT NO WELL-DEVELOPED DUST WHIRL(S) OR SAND WHIRL(S), AND NO DUSTSTORM OR SANDSTORM SEEN; OR, IN THE CASE OF SEA STATIONS AND COASTAL STATIONS, BLOWING SPRAY AT THE STATION
+8 8 WELL-DEVELOPED DUST WHIRL(S) OR SAND WHIRL(S) SEEN AT OR NEAR THE STATION DURING THE PRECEDING HOUR OR AT THE SAME TIME OF OBSERVATION, BUT NO DUSTSTORM OR SANDSTORM
+9 9 DUSTSTORM OR SANDSTORM WITHIN SIGHT AT THE TIME OF OBSERVATION, OR AT THE STATION DURING THE PRECEDING HOUR
+10 10 MIST
+11 11 PATCHES
+12 12 MORE OR LESS CONTINUOUS
+13 13 LIGHTNING VISIBLE, NO THUNDER HEARD
+14 14 PRECIPITATION WITHIN SIGHT, NOT REACHING THE GROUND OR THE SURFACE OF THE SEA
+15 15 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFACE OF THE SEA, BUT DISTANT, I.E. ESTIMATED TO BE MORE THAN 5 KM FROM THE STATION
+16 16 PRECIPITATION WITHIN SIGHT, REACHING THE GROUND OR THE SURFACE OF THE SEA, NEAR TO, BUT NOT AT THE STATION
+17 17 THUNDERSTORM, BUT NO PRECIPITATION AT THE TIME OF OBSERVATION
+18 18 SQUALLS
+19 19 FUNNEL CLOUD(S)
+20 20 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+21 21 RAIN (NOT FREEZING)
+22 22 SNOW
+23 23 RAIN AND SNOW OR ICE PELLETS
+24 24 FREEZING DRIZZLE OR FREEZING RAIN
+25 25 SHOWER(S) OF RAIN
+26 26 SHOWER(S) OF SNOW, OR OF RAIN AND SNOW
+27 27 SHOWER(S) OF HAIL*, OR OF RAIN AND HAIL*
+28 28 FOG OR ICE FOG
+29 29 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+30 30 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM
+31 31 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM
+32 32 SLIGHT OR MODERATE DUSTSTORM OR SANDSTORM
+33 33 SEVERE DUSTSTORM OR SANDSTORM
+34 34 SEVERE DUSTSTORM OR SANDSTORM
+35 35 SEVERE DUSTSTORM OR SANDSTORM
+36 36 SLIGHT OR MODERATE DRIFTING SNOW
+37 37 HEAVY DRIFTING SNOW
+38 38 SLIGHT OR MODERATE BLOWING SNOW
+39 39 HEAVY BLOWING SNOW
+40 40 FOG OR ICE FOG AT A DISTANCE AT THE TIME OF OBSERVATION, BUT NOT AT THE STATION DURING THE PRECEDING HOUR, THE FOG OR ICE FOG EXTENDING TO A LEVEL ABOVE THAT OF THE OBSERVER
+41 41 FOG OR ICE FOG IN PATCHES
+42 42 FOG OR ICE FOG, SKY VISIBLE
+43 43 FOG OR ICE FOG, SKY INVISIBLE
+44 44 FOG OR ICE FOG, SKY VISIBLE
+45 45 FOG OR ICE FOG, SKY INVISIBLE
+46 46 FOG OR ICE FOG, SKY VISIBLE
+47 47 FOG OR ICE FOG, SKY INVISIBLE
+48 48 FOG, DEPOSITING RIME, SKY VISIBLE
+49 49 FOG, DEPOSITING RIME, SKY INVISIBLE
+50 50 DRIZZLE, NOT FREEZING, INTERMITTENT
+51 51 DRIZZLE, NOT FREEZING, CONTINUOUS
+52 52 DRIZZLE, NOT FREEZING, INTERMITTENT
+53 53 DRIZZLE, NOT FREEZING, CONTINUOUS
+54 54 DRIZZLE, NOT FREEZING, INTERMITTENT
+55 55 DRIZZLE, NOT FREEZING, CONTINUOUS
+56 56 DRIZZLE, FREEZING, SLIGHT
+57 57 DRIZZLE, FREEZING, MODERATE OR HEAVY (DENSE)
+58 58 DRIZZLE AND RAIN, SLIGHT
+59 59 DRIZZLE AND RAIN, MODERATE OR HEAVY
+60 60 RAIN, NOT FREEZING, INTERMITTENT
+61 61 RAIN, NOT FREEZING, CONTINUOUS
+62 62 RAIN, NOT FREEZING, INTERMITTENT
+63 63 RAIN, NOT FREEZING, CONTINUOUS
+64 64 RAIN, NOT FREEZING, INTERMITTENT
+65 65 RAIN, NOT FREEZING, CONTINUOUS
+66 66 RAIN, FREEZING, SLIGHT
+67 67 RAIN, FREEZING, MODERATE OR HEAVY
+68 68 RAIN OR DRIZZLE AND SNOW, SLIGHT
+69 69 RAIN OR DRIZZLE AND SNOW, MODERATE OR HEAVY
+70 70 INTERMITTENT FALL OF SNOWFLAKES
+71 71 CONTINUOUS FALL OF SNOWFLAKES
+72 72 INTERMITTENT FALL OF SNOWFLAKES
+73 73 CONTINUOUS FALL OF SNOWFLAKES
+74 74 INTERMITTENT FALL OF SNOWFLAKES
+75 75 CONTINUOUS FALL OF SNOWFLAKES
+76 76 DIAMOND DUST (WITH OR WITHOUT FOG)
+77 77 SNOW GRAINS (WITH OR WITHOUT FOG)
+78 78 ISOLATED STAR-LIKE SNOW CRYSTALS (WITH OR WITHOUT FOG)
+79 79 ICE PELLETS
+80 80 RAIN SHOWER(S), SLIGHT
+81 81 RAIN SHOWER(S), MODERATE OR HEAVY
+82 82 RAIN SHOWER(S), VIOLENT
+83 83 SHOWER(S) OF RAIN AND SNOW MIXED, SLIGHT
+84 84 SHOWER(S) OF RAIN AND SNOW MIXED, MODERATE OR HEAVY
+85 85 SNOW SHOWER(S), SLIGHT
+86 86 SNOW SHOWER(S), MODERATE OR HEAVY
+87 87 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIXED
+88 88 SHOWER(S) OF SNOW PELLETS OR SMALL HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIXED
+89 89 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIXED, NOT ASSOCIATED WITH THUNDER
+90 90 SHOWER(S) OF HAIL, WITH OR WITHOUT RAIN OR RAIN AND SNOW MIXED, NOT ASSOCIATED WITH THUNDER
+91 91 SLIGHT RAIN AT TIME OF OBSERVATION
+92 92 MODERATE OR HEAVY RAIN AT TIME OF OBSERVATION
+93 93 SLIGHT SNOW, OR RAIN AND SNOW MIXED OR HAIL* AT TIME OF OBSERVATION
+94 94 MODERATE OR HEAVY SNOW, OR RAIN AND SNOW MIXED OR HAIL* AT TIME OF OBSERVATION
+95 95 THUNDERSTORM, SLIGHT OR MODERATE, WITHOUT HAIL*, BUT WITH RAIN AND/OR SNOW AT TIME OF OBSERVATION
+96 96 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL* AT TIME OF OBSERVATION
+97 97 THUNDERSTORM, HEAVY, WITHOUT HAIL*, BUT WITH RAIN AND/OR SNOW AT TIME OF OBSERVATION
+98 98 THUNDERSTORM COMBINED WITH DUSTSTORM OR SANDSTORM AT TIME OF OBSERVATION
+99 99 THUNDERSTORM, HEAVY, WITH HAIL* AT TIME OF OBSERVATION
+100 100 NO SIGNIFICANT WEATHER OBSERVED
+101 101 CLOUDS GENERALLY DISSOLVING OR BECOMING LESS DEVELOPED DURING THE PAST HOUR
+102 102 STATE OF SKY ON THE WHOLE UNCHANGED DURING THE PAST HOUR
+103 103 CLOUDS GENERALLY FORMING OR DEVELOPING DURING THE PAST HOUR
+104 104 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY EQUAL TO, OR GREATER THAN, 1 KM
+105 105 HAZE OR SMOKE, OR DUST IN SUSPENSION IN THE AIR, VISIBILITY LESS THAN 1 KM
+110 110 MIST
+111 111 DIAMOND DUST
+112 112 DISTANT LIGHTNING
+118 118 SQUALLS
+119 119 RESERVED
+120 120 FOG
+121 121 PRECIPITATION
+122 122 DRIZZLE (NOT FREEZING) OR SNOW GRAINS
+123 123 RAIN (NOT FREEZING)
+124 124 SNOW
+125 125 FREEZING DRIZZLE OR FREEZING RAIN
+126 126 THUNDERSTORM (WITH OR WITHOUT PRECIPITATION)
+127 127 BLOWING OR DRIFTING SNOW OR SAND
+128 128 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY EQUAL TO, OR GREATER THAN, 1 KM
+129 129 BLOWING OR DRIFTING SNOW OR SAND, VISIBILITY LESS THAN 1 KM
+130 130 FOG
+131 131 FOG OR ICE FOG IN PATCHES
+132 132 FOG OR ICE FOG, HAS BECOME THINNER DURING THE PAST HOUR
+133 133 FOG OR ICE FOG, NO APPRECIABLE CHANGE DURING THE PAST HOUR
+134 134 FOG OR ICE FOG, HAS BEGUN OR BECOME THICKER DURING THE PAST HOUR
+135 135 FOG, DEPOSITING RIME
+140 140 PRECIPITATION
+141 141 PRECIPITATION, SLIGHT OR MODERATE
+142 142 PRECIPITATION, HEAVY
+143 143 LIQUID PRECIPITATION, SLIGHT OR MODERATE
+144 144 LIQUID PRECIPITATION, HEAVY
+145 145 SOLID PRECIPITATION, SLIGHT OR MODERATE
+146 146 SOLID PRECIPITATION, HEAVY
+147 147 FREEZING PRECIPITATION, SLIGHT OR MODERATE
+148 148 FREEZING PRECIPITATION, HEAVY
+149 149 RESERVED
+150 150 DRIZZLE
+151 151 DRIZZLE, NOT FREEZING, SLIGHT
+152 152 DRIZZLE, NOT FREEZING, MODERATE
+153 153 DRIZZLE, NOT FREEZING, HEAVY
+154 154 DRIZZLE, FREEZING, SLIGHT
+155 155 DRIZZLE, FREEZING, MODERATE
+156 156 DRIZZLE, FREEZING, HEAVY
+157 157 DRIZZLE AND RAIN, SLIGHT
+158 158 DRIZZLE AND RAIN, MODERATE OR HEAVY
+159 159 RESERVED
+160 160 RAIN
+161 161 RAIN, NOT FREEZING, SLIGHT
+162 162 RAIN, NOT FREEZING, MODERATE
+163 163 RAIN, NOT FREEZING, HEAVY
+164 164 RAIN, FREEZING, SLIGHT
+165 165 RAIN, FREEZING, MODERATE
+166 166 RAIN, FREEZING, HEAVY
+167 167 RAIN (OR DRIZZLE) AND SNOW, SLIGHT
+168 168 RAIN (OR DRIZZLE) AND SNOW, MODERATE OR HEAVY
+169 169 RESERVED
+170 170 SNOW
+171 171 SNOW, SLIGHT
+172 172 SNOW, MODERATE
+173 173 SNOW, HEAVY
+174 174 ICE PELLETS, SLIGHT
+175 175 ICE PELLETS, MODERATE
+176 176 ICE PELLETS, HEAVY
+177 177 SNOW GRAINS
+178 178 ICE CRYSTALS
+179 179 RESERVED
+180 180 SHOWER(S) OR INTERMITTENT PRECIPITATION
+181 181 RAIN SHOWER(S) OR INTERMITTENT RAIN, SLIGHT
+182 182 RAIN SHOWER(S) OR INTERMITTENT RAIN, MODERATE
+183 183 RAIN SHOWER(S) OR INTERMITTENT RAIN, HEAVY
+184 184 RAIN SHOWER(S) OR INTERMITTENT RAIN, VIOLENT
+185 185 SNOW SHOWER(S) OR INTERMITTENT SNOW, SLIGHT
+186 186 SNOW SHOWER(S) OR INTERMITTENT SNOW, MODERATE
+187 187 SNOW SHOWER(S) OR INTERMITTENT SNOW, HEAVY
+188 188 RESERVED
+189 189 HAIL
+190 190 THUNDERSTORM
+191 191 THUNDERSTORM, SLIGHT OR MODERATE, WITH NO PRECIPITATION
+192 192 THUNDERSTORM, SLIGHT OR MODERATE, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+193 193 THUNDERSTORM, SLIGHT OR MODERATE, WITH HAIL
+194 194 THUNDERSTORM, HEAVY, WITH NO PRECIPITATION
+195 195 THUNDERSTORM, HEAVY, WITH RAIN SHOWERS AND/OR SNOW SHOWERS
+196 196 THUNDERSTORM, HEAVY, WITH HAIL
+199 199 TORNADO
+204 204 VOLCANIC ASH SUSPENDED IN THE AIR ALOFT
+205 205 NOT USED
+206 206 THICK DUST HAZE, VISIBILITY LESS THAN 1 KM
+207 207 BLOWING SPRAY AT THE STATION
+208 208 DRIFTING DUST (SAND)
+209 209 WALL OF DUST OR SAND IN DISTANCE (LIKE HABOOB)
+210 210 SNOW HAZE
+211 211 WHITEOUT
+212 212 NOT USED
+213 213 LIGHTNING, CLOUD TO SURFACE
+217 217 DRY THUNDERSTORM
+218 218 NOT USED
+219 219 TORNADO CLOUD (DESTRUCTIVE) AT OR WITHIN SIGHT OF THE STATION DURING PRECEDING HOUR OR AT THE TIME OF OBSERVATION
+220 220 DEPOSITION OF VOLCANIC ASH
+221 221 DEPOSITION OF DUST OR SAND
+222 222 DEPOSITION OF DEW
+223 223 DEPOSITION OF WET SNOW
+224 224 DEPOSITION OF SOFT RIME
+225 225 DEPOSITION OF HARD RIME
+226 226 DEPOSITION OF HOAR FROST
+227 227 DEPOSITION OF GLAZE
+228 228 DEPOSITION OF ICE CRUST (ICE SLICK)
+229 229 NOT USED
+230 230 DUSTSTORM OR SANDSTORM WITH TEMPERATURE BELOW 0 °C
+239 239 BLOWING SNOW, IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLING OR NOT
+240 240 NOT USED
+241 241 FOG ON SEA
+242 242 FOG IN VALLEYS
+243 243 ARCTIC OR ANTARCTIC SEA SMOKE
+244 244 STEAM FOG (SEA, LAKE OR RIVER)
+245 245 STEAM LOG (LAND)
+246 246 FOG OVER ICE OR SNOW COVER
+247 247 DENSE FOG, VISIBILITY 60-90 M
+248 248 DENSE FOG, VISIBILITY 30-60 M
+249 249 DENSE FOG, VISIBILITY LESS THAN 30 M
+250 250 DRIZZLE, RATE OF FALL - LESS THAN 0.10 MM H-1
+251 251 DRIZZLE, RATE OF FALL - 0.10-0.19 MM H-1
+252 252 DRIZZLE, RATE OF FALL - 0.20-0.39 MM H-1
+253 253 DRIZZLE, RATE OF FALL - 0.40-0.79 MM H-1
+254 254 DRIZZLE, RATE OF FALL - 0.80-1.59 MM H-1
+255 255 DRIZZLE, RATE OF FALL - 1.60-3.19 MM H-1
+256 256 DRIZZLE, RATE OF FALL - 3.20-6.39 MM H-1
+257 257 DRIZZLE, RATE OF FALL - 6.4 MM H-1 OR MORE
+258 258 NOT USED
+259 259 DRIZZLE AND SNOW
+260 260 RAIN, RATE OF FALL - LESS THAN 1.0 MM H-1
+261 261 RAIN, RATE OF FALL - 1.0-1.9 MM H-1
+262 262 RAIN, RATE OF FALL - 2.0-3.9 MM H-1
+263 263 RAIN, RATE OF FALL - 4.0-7.9 MM H-1
+264 264 RAIN, RATE OF FALL - 8.0-15.9 MM H-1
+265 265 RAIN, RATE OF FALL - 16.0-31.9 MM H-1
+266 266 RAIN, RATE OF FALL - 32.0-63.9 MM H-1
+267 267 RAIN, RATE OF FALL - 64.0 MM H-1 OR MORE
+270 270 SNOW, RATE OF FALL - LESS THAN 1.0 CM H-1
+271 271 SNOW, RATE OF FALL - 1.0-1.9 CM H-1
+272 272 SNOW, RATE OF FALL - 2.0-3.9 CM H-1
+273 273 SNOW, RATE OF FALL - 4.0-7.9 CM H-1
+274 274 SNOW, RATE OF FALL - 8.0-15.9 CM H-1
+275 275 SNOW, RATE OF FALL - 16.0-31.9 CM H-1
+276 276 SNOW, RATE OF FALL - 32.0-63.9 CM H-1
+277 277 SNOW, RATE OF FALL - 64.0 CM H-1 OR MORE
+278 278 SNOW OR ICE CRYSTAL PRECIPITATION FROM A CLEAR SKY
+279 279 WET SNOW, FREEZING ON CONTACT
+280 280 PRECIPITATION OF RAIN
+281 281 PRECIPITATION OF RAIN, FREEZING
+282 282 PRECIPITATION OF RAIN AND SNOW MIXED
+283 283 PRECIPITATION OF SNOW
+284 284 PRECIPITATION OF SNOW PELLETS OR SMALL HALL
+285 285 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN
+286 286 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH RAIN AND SNOW MIXED
+287 287 PRECIPITATION OF SNOW PELLETS OR SMALL HAIL, WITH SNOW
+288 288 PRECIPITATION OF HAIL
+289 289 PRECIPITATION OF HAIL, WITH RAIN
+290 290 PRECIPITATION OF HALL, WITH RAIN AND SNOW MIXED
+291 291 PRECIPITATION OF HAIL, WITH SNOW
+292 292 SHOWER(S) OR THUNDERSTORM OVER SEA
+293 293 SHOWER(S) OR THUNDERSTORM OVER MOUNTAINS
+508 508 NO SIGNIFICANT PHENOMENON TO REPORT, PRESENT AND PAST WEATHER OMITTED
+509 509 NO OBSERVATION, DATA NOT AVAILABLE, PRESENT AND PAST WEATHER OMITTED
+510 510 PRESENT AND PAST WEATHER MISSING, BUT EXPECTED
+511 511 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20004.table b/definitions/bufr/tables/0/wmo/26/codetables/20004.table
new file mode 100644
index 0000000..6d6e7da
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20004.table
@@ -0,0 +1,21 @@
+0 0 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPRIATE PERIOD
+1 1 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE APPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF THE PERIOD
+2 2 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPROPRIATE PERIOD
+3 3 SANDSTORM, DUSTSTORM OR BLOWING SNOW
+4 4 FOG OR ICE FOG OR THICK HAZE
+5 5 DRIZZLE
+6 6 RAIN
+7 7 SNOW, OR RAIN AND SNOW MIXED
+8 8 SHOWER(S)
+9 9 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+10 10 NO SIGNIFICANT WEATHER OBSERVED
+11 11 VISIBILITY REDUCED (SEE NOTE)
+12 12 BLOWING PHENOMENA, VISIBILITY REDUCED
+13 13 FOG (SEE NOTE)
+14 14 PRECIPITATION (SEE NOTE)
+15 15 DRIZZLE
+16 16 RAIN
+17 17 SNOW OR ICE PELLETS
+18 18 SHOWERS OR INTERMITTENT PRECIPITATION
+19 19 THUNDERSTORM
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20005.table b/definitions/bufr/tables/0/wmo/26/codetables/20005.table
new file mode 100644
index 0000000..6d6e7da
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20005.table
@@ -0,0 +1,21 @@
+0 0 CLOUD COVERING 1/2 OR LESS OF THE SKY THROUGHOUT THE APPROPRIATE PERIOD
+1 1 CLOUD COVERING MORE THAN 1/2 OF THE SKY DURING PART OF THE APPROPRIATE PERIOD AND COVERING 1/2 OR LESS DURING PART OF THE PERIOD
+2 2 CLOUD COVERING MORE THAN 1/2 OF THE SKY THROUGHOUT THE APPROPRIATE PERIOD
+3 3 SANDSTORM, DUSTSTORM OR BLOWING SNOW
+4 4 FOG OR ICE FOG OR THICK HAZE
+5 5 DRIZZLE
+6 6 RAIN
+7 7 SNOW, OR RAIN AND SNOW MIXED
+8 8 SHOWER(S)
+9 9 THUNDERSTORM(S) WITH OR WITHOUT PRECIPITATION
+10 10 NO SIGNIFICANT WEATHER OBSERVED
+11 11 VISIBILITY REDUCED (SEE NOTE)
+12 12 BLOWING PHENOMENA, VISIBILITY REDUCED
+13 13 FOG (SEE NOTE)
+14 14 PRECIPITATION (SEE NOTE)
+15 15 DRIZZLE
+16 16 RAIN
+17 17 SNOW OR ICE PELLETS
+18 18 SHOWERS OR INTERMITTENT PRECIPITATION
+19 19 THUNDERSTORM
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20006.table b/definitions/bufr/tables/0/wmo/26/codetables/20006.table
new file mode 100644
index 0000000..a250af9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20006.table
@@ -0,0 +1,5 @@
+0 0 LOW INSTRUMENT FLIGHT RULES - CEILING < 500 FEET AND/OR VISIBILITY < 1 MILE
+1 1 INSTRUMENT FLIGHT RULES - CEILING < 1000 FEET AND/OR VISIBILITY < 3 MILES
+2 2 MARGINAL VISUAL FLIGHT RULES - 1000 FEET <= CEILING < 3000 FEET AND/OR 3 MILES <= VISIBILITY < 5 MILES
+3 3 VISUAL FLIGHT RULES - CEILING => 3000 FEET AND/OR VISIBILITY => 5 MILES
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20008.table b/definitions/bufr/tables/0/wmo/26/codetables/20008.table
new file mode 100644
index 0000000..966bcc2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20008.table
@@ -0,0 +1,19 @@
+0 0 SKY CLEAR
+1 1 FEW
+2 2 SCATTERED
+3 3 BROKEN
+4 4 OVERCAST
+5 5 RESERVED
+6 6 SCATTERED/BROKEN
+7 7 BROKEN/OVERCAST
+8 8 ISOLATED
+9 9 ISOLATED EMBEDDED
+10 10 OCCASIONAL
+11 11 OCCASIONAL EMBEDDED
+12 12 FREQUENT
+13 13 DENSE
+14 14 LAYERS
+15 15 OBSCURED (OBSC)
+16 16 EMBEDDED (EMBD)
+17 17 FREQUENT EMBEDDED
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20009.table b/definitions/bufr/tables/0/wmo/26/codetables/20009.table
new file mode 100644
index 0000000..f0119eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20009.table
@@ -0,0 +1,6 @@
+0 0 RESERVED
+1 1 NSC NIL SIGNIFICANT CLOUD
+2 2 CAVOK
+3 3 SKC SKY CLEAR
+4 4 NSW NIL SIGNIFICANT WEATHER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2001.table b/definitions/bufr/tables/0/wmo/26/codetables/2001.table
new file mode 100644
index 0000000..470fccc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2001.table
@@ -0,0 +1,4 @@
+0 0 AUTOMATIC
+1 1 MANNED
+2 2 HYBRID: BOTH MANNED AND AUTOMATIC
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20011.table b/definitions/bufr/tables/0/wmo/26/codetables/20011.table
new file mode 100644
index 0000000..06c6e10
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20011.table
@@ -0,0 +1,16 @@
+0 0 0
+1 1 1 OKTA OR LESS, BUT NOT ZERO
+2 2 2 OKTAS
+3 3 3 OKTAS
+4 4 4 OKTAS
+5 5 5 OKTAS
+6 6 6 OKTAS
+7 7 7 OKTAS OR MORE, BUT NOT 8 OKTAS
+8 8 8 OKTAS
+9 9 SKY OBSCURED BY FOG AND/OR OTHER METEOROLOGICAL PHENOMENA
+10 10 SKY PARTIALLY OBSCURED BY FOG AND/OR OTHER METEOROLOGICAL PHENOMENA
+11 11 SCATTERED
+12 12 BROKEN
+13 13 FEW
+14 14 RESERVED
+15 15 CLOUD COVER IS INDISCERNIBLE FOR REASONS OTHER THAN FOG OR OTHER METEOROLOGICAL PHENOMENA, OR OBSERVATION IS NOT MADE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20012.table b/definitions/bufr/tables/0/wmo/26/codetables/20012.table
new file mode 100644
index 0000000..99bdc17
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20012.table
@@ -0,0 +1,48 @@
+0 0 CIRRUS (CI)
+1 1 CIRROCUMULUS (CC)
+2 2 CIRROSTRATUS (CS)
+3 3 ALTOCUMULUS (AC)
+4 4 ALTOSTRATUS (AS)
+5 5 NIMBOSTRATUS (NS)
+6 6 STRATOCUMULUS (SC)
+7 7 STRATUS (ST)
+8 8 CUMULUS (CU)
+9 9 CUMULONIMBUS (CB)
+10 10 NO CH CLOUDS
+11 11 CIRRUS FIBRATUS, SOMETIMES UNCINUS, NOT PROGRESSIVELY INVADING THE SKY
+12 12 CIRRUS SPISSATUS, IN PATCHES OR ENTANGLED SHEAVES, WHICH USUALLY DO NOT INCREASE AND SOMETIMES SEEM TO BE THE REMAINS OF THE UPPER PART OF A CUMULONIMBUS; OR CIRRUS CASTELLANUS OR FLOCCUS
+13 13 CIRRUS SPISSATUS CUMULONIMBOGENITUS
+14 14 CIRRUS UNCINUS OR FIBRATUS, OR BOTH, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN AS A WHOLE
+15 15 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS ALONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN AS A WHOLE, BUT THE CONTINUOUS VEIL DOES NOT REACH 45 DEGREES ABOVE THE HORIZON
+16 16 CIRRUS (OFTEN IN BANDS) AND CIRROSTRATUS, OR CIRROSTRATUS ALONE, PROGRESSIVELY INVADING THE SKY; THEY GENERALLY THICKEN AS A WHOLE; THE CONTINUOUS VEIL EXTENDS MORE THAN 45 DEGREES ABOVE THE HORIZON, WITHOUT THE SKY BEING TOTALLY COVERED
+17 17 CIRROSTRATUS COVERING THE WHOLE SKY
+18 18 CIRROSTRATUS NOT PROGRESSIVELY INVADING THE SKY AND NOT ENTIRELY COVERING IT
+19 19 CIRROCUMULUS ALONE, OR CIRROCUMULUS PREDOMINANT AMONG THE CH CLOUDS
+20 20 NO CM CLOUDS
+21 21 ALTOSTRATUS TRANSLUCIDUS
+22 22 ALTOSTRATUS OPACUS OR NIMBOSTRATUS
+23 23 ALTOCUMULUS TRANSLUCIDUS AT A SINGLE LEVEL
+24 24 PATCHES (OFTEN LENTICULAR) OF ALTOCUMULUS TRANSLUCIDUS, CONTINUALLY CHANGING AND OCCURRING AT ONE OR MORE LEVELS
+25 25 ALTOCUMULUS TRANSLUCIDUS IN BANDS, OR ONE OR MORE LAYERS OF ALTOCUMULUS TRANSLUCIDUS OR OPACUS, PROGRESSIVELY INVADING THE SKY; THESE ALTOCUMULUS CLOUDS GENERALLY THICKEN AS A WHOLE
+26 26 ALTOCUMULUS CUMULOGENITUS (OR CUMULONIMBOGENITUS)
+27 27 ALTOCUMULUS TRANSLUCIDUS OR OPACUS IN TWO OR MORE LAYERS, OR ALTOCUMULUS OPACUS IN A SINGLE LAYER, NOT PROGRESSIVELY INVADING THE SKY, OR ALTOCUMULUS WITH ALTOSTRATUS OR NIMBOSTRATUS
+28 28 ALTOCUMULUS CASTELLANUS OR FLOCCUS
+29 29 ALTOCUMULUS OF A CHAOTIC SKY, GENERALLY AT SEVERAL LEVELS
+30 30 NO CL CLOUDS
+31 31 CUMULUS HUMILIS OR CUMULUS FRACTUS OTHER THAN OF BAD WEATHER,* OR BOTH
+32 32 CUMULUS MEDIOCRIS OR CONGESTUS, TOWERING CUMULUS (TCU), WITH OR WITHOUT CUMULUS OF SPECIES FRACTUS OR HUMILIS OR STRATOCUMULUS, ALL HAVING THEIR BASES AT THE SAME LEVEL
+33 33 CUMULONIMBUS CALVUS, WITH OR WITHOUT CUMULUS, STRATOCUMULUS OR STRATUS
+34 34 STRATOCUMULUS CUMULOGENITUS
+35 35 STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS
+36 36 STRATUS NEBULOSUS OR STRATUS FRACTUS OTHER THAN OF BAD WEATHER,* OR BOTH
+37 37 STRATUS FRACTUS OR CUMULUS FRACTUS OF BAD WEATHER,* OR BOTH (PANNUS), USUALLY BELOW ALTOSTRATUS OR NIMBOSTRATUS
+38 38 CUMULUS AND STRATOCUMULUS OTHER THAN STRATOCUMULUS CUMULOGENITUS, WITH BASES AT DIFFERENT LEVELS
+39 39 CUMULONIMBUS CAPILLATUS (OFTEN WITH AN ANVIL), WITH OR WITHOUT CUMULONIMBUS CALVUS, CUMULUS, STRATOCUMULUS, STRATUS OR PANNUS
+40 40 CH
+41 41 CM
+42 42 CL
+59 59 CLOUD NOT VISIBLE OWING TO DARKNESS, FOG, DUSTSTORM, SANDSTORM, OR OTHER ANALOGOUS PHENOMENA
+60 60 CH CLOUDS INVISIBLE OWING TO DARKNESS, FOG, BLOWING DUST OR SAND, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF A CONTINUOUS LAYER OF LOWER CLOUDS
+61 61 CM CLOUDS INVISIBLE OWING TO DARKNESS, FOG, BLOWING DUST OR SAND, OR OTHER SIMILAR PHENOMENA, OR BECAUSE OF CONTINUOUS LAYER OF LOWER CLOUDS
+62 62 CL CLOUDS INVISIBLE OWING TO DARKNESS, FOG, BLOWING DUST OR SAND, OR OTHER SIMILAR PHENOMENA
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20017.table b/definitions/bufr/tables/0/wmo/26/codetables/20017.table
new file mode 100644
index 0000000..5ec10bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20017.table
@@ -0,0 +1,11 @@
+0 0 ISOLATED CLOUD FRAGMENTS OF CLOUDS
+1 1 CONTINUOUS CLOUD
+2 2 BROKEN CLOUD - SMALL BREAKS
+3 3 BROKEN CLOUD - LARGE BREAKS
+4 4 CONTINUOUS CLOUD
+5 5 BROKEN CLOUD - SMALL BREAKS
+6 6 BROKEN CLOUD - LARGE BREAKS
+7 7 CONTINUOUS OR ALMOST CONTINUOUS WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LAYER
+8 8 GROUPS OF WAVES WITH TOWERING CLOUDS ABOVE THE TOP OF THE LAYER
+9 9 TWO OR MORE LAYERS AT DIFFERENT LEVELS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20018.table b/definitions/bufr/tables/0/wmo/26/codetables/20018.table
new file mode 100644
index 0000000..c0ffc36
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20018.table
@@ -0,0 +1,4 @@
+0 0 INCREASING (U)
+1 1 DECREASING (D)
+2 2 NO DISTINCT CHANGE (N)
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2002.table b/definitions/bufr/tables/0/wmo/26/codetables/2002.table
new file mode 100644
index 0000000..a701e1e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2002.table
@@ -0,0 +1,3 @@
+1 1 CERTIFIED INSTRUMENTS
+2 2 ORIGINALLY MEASURED IN KNOTS
+3 3 ORIGINALLY MEASURED IN KM H-1
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20021.table b/definitions/bufr/tables/0/wmo/26/codetables/20021.table
new file mode 100644
index 0000000..747a759
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20021.table
@@ -0,0 +1,23 @@
+1 1 PRECIPITATION - UNKNOWN TYPE
+2 2 LIQUID PRECIPITATION NOT FREEZING
+3 3 LIQUID FREEZING PRECIPITATION
+4 4 DRIZZLE
+5 5 RAIN
+6 6 SOLID PRECIPITATION
+7 7 SNOW
+8 8 SNOW GRAINS
+9 9 SNOW PELLETS
+10 10 ICE PELLETS
+11 11 ICE CRYSTALS
+12 12 DIAMOND DUST
+13 13 SMALL HAIL
+14 14 HAIL
+15 15 GLAZE
+16 16 RIME
+17 17 SOFT RIME
+18 18 HARD RIME
+19 19 CLEAR ICE
+20 20 WET SNOW
+21 21 HOAR FROST
+22 22 DEW
+23 23 WHITE DEW
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20022.table b/definitions/bufr/tables/0/wmo/26/codetables/20022.table
new file mode 100644
index 0000000..a551aac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20022.table
@@ -0,0 +1,7 @@
+0 0 NO PRECIPITATION
+1 1 CONTINUOUS
+2 2 INTERMITTENT
+3 3 SHOWER
+4 4 NOT REACHING GROUND
+5 5 DEPOSITION
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20023.table b/definitions/bufr/tables/0/wmo/26/codetables/20023.table
new file mode 100644
index 0000000..97670df
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20023.table
@@ -0,0 +1,14 @@
+1 1 DUST/SAND WHIRL
+2 2 SQUALLS
+3 3 SANDSTORM
+4 4 DUSTSTORM
+5 5 LIGHTNING - CLOUD TO SURFACE
+6 6 LIGHTNING - CLOUD TO CLOUD
+7 7 LIGHTNING - DISTANT
+8 8 THUNDERSTORM
+9 9 FUNNEL CLOUD NOT TOUCHING SURFACE
+10 10 FUNNEL CLOUD TOUCHING SURFACE
+11 11 SPRAY
+12 12 WATERSPOUT
+13 13 WIND SHEAR
+14 14 DUST DEVILS
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20024.table b/definitions/bufr/tables/0/wmo/26/codetables/20024.table
new file mode 100644
index 0000000..13aba87
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20024.table
@@ -0,0 +1,8 @@
+0 0 NO PHENOMENA
+1 1 LIGHT
+2 2 MODERATE
+3 3 HEAVY
+4 4 VIOLENT
+5 5 SEVERE
+6 6 VERY SEVERE
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20025.table b/definitions/bufr/tables/0/wmo/26/codetables/20025.table
new file mode 100644
index 0000000..4d70e33
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20025.table
@@ -0,0 +1,13 @@
+1 1 FOG
+2 2 ICE FOG
+3 3 STEAM FOG
+7 7 MIST
+8 8 HAZE
+9 9 SMOKE
+10 10 VOLCANIC ASH
+11 11 DUST
+12 12 SAND
+13 13 SNOW
+14 14 CLOUD
+15 15 PRECIPITATION
+16 16 IMPOSSIBLE TO DETERMINE WHETHER SNOW IS FALLING OR NOT
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20026.table b/definitions/bufr/tables/0/wmo/26/codetables/20026.table
new file mode 100644
index 0000000..2852094
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20026.table
@@ -0,0 +1,16 @@
+0 0 NO CHANGE
+1 1 SHALLOW
+2 2 PATCHES
+3 3 PARTIAL
+4 4 FREEZING
+5 5 LOW DRIFTING
+6 6 BLOWING
+7 7 INCREASING
+8 8 DECREASING
+9 9 IN SUSPENSION IN THE AIR
+10 10 WALL
+11 11 DENSE
+12 12 WHITEOUT
+13 13 DRIFTING AND BLOWING
+14 14 RESERVED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20027.table b/definitions/bufr/tables/0/wmo/26/codetables/20027.table
new file mode 100644
index 0000000..c337f16
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20027.table
@@ -0,0 +1,8 @@
+1 1 AT TIME OF OBSERVATION
+2 2 IN PAST HOUR
+3 3 IN TIME PERIOD FOR PAST WEATHER W1W2
+4 4 IN TIME PERIOD SPECIFIED
+5 5 RESERVED
+6 6 BELOW STATION LEVEL
+7 7 AT THE STATION
+8 8 IN THE VICINITY
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20028.table b/definitions/bufr/tables/0/wmo/26/codetables/20028.table
new file mode 100644
index 0000000..6b701a2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20028.table
@@ -0,0 +1,4 @@
+0 0 NO CHANGE (NC)
+1 1 FORECAST TO WEAKEN (WKN)
+2 2 FORECAST TO INTENSIFY (INTSF)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20029.table b/definitions/bufr/tables/0/wmo/26/codetables/20029.table
new file mode 100644
index 0000000..8b46da8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20029.table
@@ -0,0 +1,4 @@
+0 0 NO RAIN
+1 1 RAIN
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2003.table b/definitions/bufr/tables/0/wmo/26/codetables/2003.table
new file mode 100644
index 0000000..e0aa923
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2003.table
@@ -0,0 +1,12 @@
+0 0 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASURING EQUIPMENT
+1 1 OPTICAL THEODOLITE
+2 2 RADIO THEODOLITE
+3 3 RADAR
+4 4 VLF-OMEGA
+5 5 LORAN C
+6 6 WIND PROFILER
+7 7 SATELLITE NAVIGATION
+8 8 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
+9 9 SODAR
+14 14 PRESSURE INSTRUMENT ASSOCIATED WITH WIND MEASURING EQUIPMENT BUT PRESSURE ELEMENT FAILED DURING ASCENT
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20032.table b/definitions/bufr/tables/0/wmo/26/codetables/20032.table
new file mode 100644
index 0000000..fd37c1e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20032.table
@@ -0,0 +1,6 @@
+0 0 ICE NOT BUILDING UP
+1 1 ICE BUILDING UP SLOWLY
+2 2 ICE BUILDING UP RAPIDLY
+3 3 ICE MELTING OR BREAKING UP SLOWLY
+4 4 ICE MELTING OR BREAKING UP RAPIDLY
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20033.table b/definitions/bufr/tables/0/wmo/26/codetables/20033.table
new file mode 100644
index 0000000..8178733
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20033.table
@@ -0,0 +1,3 @@
+1 1 ICING FROM OCEAN SPRAY
+2 2 ICING FROM FOG
+3 3 ICING FROM RAIN
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20034.table b/definitions/bufr/tables/0/wmo/26/codetables/20034.table
new file mode 100644
index 0000000..668e916
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20034.table
@@ -0,0 +1,12 @@
+0 0 NO SEA ICE IN SIGHT
+1 1 SHIP IN OPEN LEAD MORE THAN 1.0 NAUTICAL MILE WIDE, OR SHIP IN FAST ICE WITH BOUNDARY BEYOND LIMIT OF VISIBILITY
+2 2 SEA ICE PRESENT IN CONCENTRATIONS LESS THAN 3/10 (3/8), OPEN WATER OR VERY OPEN PACK ICE
+3 3 4/10 TO 6/10 (3/8 TO LESS THAN 6/8), OPEN PACK ICE
+4 4 7/10 TO 8/10 (6/8 TO LESS THAN 7/8), CLOSE PACK ICE
+5 5 9/10 OR MORE, BUT NOT 10/10 (7/8 TO LESS THAN 8/8), VERY CLOSE PACK ICE
+6 6 STRIPS AND PATCHES OF PACK ICE WITH OPEN WATER BETWEEN
+7 7 STRIPS AND PATCHES OF CLOSE OR VERY CLOSE PACK ICE WITH AREAS OF LESSER CONCENTRATION BETWEEN
+8 8 FAST ICE WITH OPEN WATER, VERY OPEN OR OPEN PACK ICE TO SEAWARD OF THE ICE BOUNDARY
+9 9 FAST ICE WITH CLOSE OR VERY CLOSE PACK ICE TO SEAWARD OF THE BOUNDARY
+14 14 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY, OR BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE EDGE
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20035.table b/definitions/bufr/tables/0/wmo/26/codetables/20035.table
new file mode 100644
index 0000000..07a4a02
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20035.table
@@ -0,0 +1,12 @@
+0 0 NO ICE OF LAND ORIGIN
+1 1 1-5 ICEBERGS, NO GROWLERS OR BERGY BITS
+2 2 6-10 ICEBERGS, NO GROWLERS OR BERGY BITS
+3 3 11-20 ICEBERGS, NO GROWLERS OR BERGY BITS
+4 4 UP TO AND INCLUDING 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+5 5 MORE THAN 10 GROWLERS AND BERGY BITS - NO ICEBERGS
+6 6 1-5 ICEBERGS, WITH GROWLERS AND BERGY BITS
+7 7 6-10 ICEBERGS, WITH GROWLERS AND BERGY BITS
+8 8 11-20 ICEBERGS, WITH GROWLERS AND BERGY BITS
+9 9 MORE THAN 20 ICEBERGS, WITH GROWLERS AND BERGY BITS - A MAJOR HAZARD TO NAVIGATION
+14 14 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR BECAUSE ONLY SEA ICE IS VISIBLE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20036.table b/definitions/bufr/tables/0/wmo/26/codetables/20036.table
new file mode 100644
index 0000000..b4cc874
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20036.table
@@ -0,0 +1,12 @@
+0 0 SHIP IN OPEN WATER WITH FLOATING ICE IN SIGHT
+1 1 SHIP IN EASILY PENETRABLE ICE; CONDITIONS IMPROVING
+2 2 SHIP IN EASILY PENETRABLE ICE; CONDITIONS NOT CHANGING
+3 3 SHIP IN EASILY PENETRABLE ICE; CONDITIONS WORSENING
+4 4 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS IMPROVING
+5 5 SHIP IN ICE DIFFICULT TO PENETRATE; CONDITIONS NOT CHANGING
+6 6 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. ICE FORMING AND FLOES FREEZING TOGETHER
+7 7 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. ICE UNDER SLIGHT PRESSURE
+8 8 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. ICE UNDER MODERATE OR SEVERE PRESSURE
+9 9 SHIP IN ICE DIFFICULT TO PENETRATE AND CONDITIONS WORSENING. SHIP BESET
+30 30 UNABLE TO REPORT, BECAUSE OF DARKNESS OR LACK OF VISIBILITY
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20037.table b/definitions/bufr/tables/0/wmo/26/codetables/20037.table
new file mode 100644
index 0000000..474eeaa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20037.table
@@ -0,0 +1,12 @@
+0 0 NEW ICE ONLY (FRAZIL ICE, GREASE ICE, SLUSH, SHUGA)
+1 1 NILAS OR ICE RIND, LESS THAN 10 CM THICK
+2 2 YOUNG ICE (GREY ICE, GREY-WHITE ICE), 10-30 CM THICK
+3 3 PREDOMINANTLY NEW AND/OR YOUNG ICE WITH SOME FIRST-YEAR ICE
+4 4 PREDOMINANTLY THIN FIRST-YEAR ICE WITH SOME NEW AND/OR YOUNG ICE
+5 5 ALL THIN FIRST-YEAR ICE (30-70 CM THICK)
+6 6 PREDOMINANTLY MEDIUM FIRST-YEAR ICE (70-120 CM THICK) AND THICK FIRST-YEAR ICE (>120 CM THICK) WITH SOME THINNER (YOUNGER) FIRST-YEAR ICE
+7 7 ALL MEDIUM AND THICK FIRST-YEAR ICE
+8 8 PREDOMINANTLY MEDIUM AND THICK FIRST-YEAR ICE WITH SOME OLD ICE (USUALLY MORE THAN 2 METRES THICK)
+9 9 PREDOMINANTLY OLD ICE
+30 30 UNABLE TO REPORT, BECAUSE OF DARKNESS, LACK OF VISIBILITY OR BECAUSE ONLY ICE OF LAND ORIGIN IS VISIBLE OR BECAUSE SHIP IS MORE THAN 0.5 NAUTICAL MILE AWAY FROM ICE EDGE
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2004.table b/definitions/bufr/tables/0/wmo/26/codetables/2004.table
new file mode 100644
index 0000000..a55de6c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2004.table
@@ -0,0 +1,11 @@
+0 0 USA OPEN PAN EVAPORIMETER (WITHOUT COVER)
+1 1 USA OPEN PAN EVAPORIMETER (MESH COVERED)
+2 2 GGI-3000 EVAPORIMETER (SUNKEN)
+3 3 20 M2 TANK
+4 4 OTHERS
+5 5 RICE
+6 6 WHEAT
+7 7 MAIZE
+8 8 SORGHUM
+9 9 OTHER CROPS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20040.table b/definitions/bufr/tables/0/wmo/26/codetables/20040.table
new file mode 100644
index 0000000..889393b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20040.table
@@ -0,0 +1,9 @@
+0 0 DRIFT SNOW ENDED BEFORE THE HOUR OF OBSERVATION
+1 1 INTENSITY DIMINISHING
+2 2 NO CHANGE
+3 3 INTENSITY INCREASING
+4 4 CONTINUES, APART FROM INTERRUPTION LASTING LESS THAN 30 MINUTES
+5 5 GENERAL DRIFT SNOW HAS BECOME DRIFT SNOW NEAR THE GROUND
+6 6 DRIFT SNOW NEAR THE GROUND HAS BECOME GENERAL DRIFT SNOW
+7 7 DRIFT SNOW HAS STARTED AGAIN AFTER AN INTERRUPTION OF MORE THAN 30 MINUTES
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20041.table b/definitions/bufr/tables/0/wmo/26/codetables/20041.table
new file mode 100644
index 0000000..fc57120
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20041.table
@@ -0,0 +1,14 @@
+0 0 NO ICING
+1 1 LIGHT ICING
+2 2 LIGHT ICING IN CLOUD
+3 3 LIGHT ICING IN PRECIPITATION
+4 4 MODERATE ICING
+5 5 MODERATE ICING IN CLOUD
+6 6 MODERATE ICING IN PRECIPITATION
+7 7 SEVERE ICING
+8 8 SEVERE ICING IN CLOUD
+9 9 SEVERE ICING IN PRECIPITATION
+10 10 TRACE OF ICING
+11 11 TRACE OF ICING IN CLOUD
+12 12 TRACE OF ICING IN PRECIPITATION
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20042.table b/definitions/bufr/tables/0/wmo/26/codetables/20042.table
new file mode 100644
index 0000000..2493af7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20042.table
@@ -0,0 +1,4 @@
+0 0 NO ICING
+1 1 ICING PRESENT
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20045.table b/definitions/bufr/tables/0/wmo/26/codetables/20045.table
new file mode 100644
index 0000000..91ae63f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20045.table
@@ -0,0 +1,4 @@
+0 0 NO SLD CONDITIONS PRESENT
+1 1 SLD CONDITIONS PRESENT
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20048.table b/definitions/bufr/tables/0/wmo/26/codetables/20048.table
new file mode 100644
index 0000000..4a54882
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20048.table
@@ -0,0 +1,5 @@
+0 0 STABILITY
+1 1 DIMINUTION
+2 2 INTENSIFICATION
+3 3 UNKNOWN
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20050.table b/definitions/bufr/tables/0/wmo/26/codetables/20050.table
new file mode 100644
index 0000000..3f8654e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20050.table
@@ -0,0 +1,10 @@
+0 0 RESERVED
+1 1 1ST LOW CLOUD
+2 2 2ND LOW CLOUD
+3 3 3RD LOW CLOUD
+4 4 1ST MEDIUM CLOUD
+5 5 2ND MEDIUM CLOUD
+6 6 3RD MEDIUM CLOUD
+7 7 1ST HIGH CLOUD
+8 8 2ND HIGH CLOUD
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20055.table b/definitions/bufr/tables/0/wmo/26/codetables/20055.table
new file mode 100644
index 0000000..ea06427
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20055.table
@@ -0,0 +1,12 @@
+0 0 CUMULUS, IF ANY, ARE QUITE SMALL; GENERALLY LESS THAN 2/8 COVERAGE, EXCEPT ON WINDWARD SLOPES OF ELEVATED TERRAIN; AVERAGE WIDTH OF CLOUD IS AT LEAST AS GREAT AS ITS VERTICAL THICKNESS
+1 1 CUMULUS OF INTERMEDIATE SIZE WITH CLOUD COVER LESS THAN 5/8; AVERAGE CLOUD WIDTH IS MORE THAN ITS VERTICAL THICKNESS; TOWERS ARE VERTICAL WITH LITTLE OR NO EVIDENCE OF PRECIPITATION, EXCEPT ALONG SLOPES OF ELEVATED TERRAIN; A GENERAL ABSENCE OF MIDDLE AND UPPER CLOUDS
+2 2 SWELLING CUMULUS WITH RAPIDLY GROWING TALL TURRETS WHICH DECREASE IN SIZE WITH HEIGHT AND WHOSE TOPS TEND TO SEPARATE FROM THE LONGER CLOUD BODY AND EVAPORATE WITHIN MINUTES OF THE SEPARATION
+3 3 SWELLING CUMULUS WITH TOWERS HAVING A PRONOUNCED TILT IN A DOWNWIND DIRECTION; VERTICAL CLOUD THICKNESS IS MORE THAN ONE AND A HALF TIMES THAT OF ITS AVERAGE WIDTH
+4 4 SWELLING CUMULUS WITH TOWERS HAVING A PRONOUNCED TILT IN AN UPWIND DIRECTION; VERTICAL CLOUD THICKNESS IS MORE THAN ONE AND A HALF TIMES THAT OF ITS AVERAGE WIDTH
+5 5 TALL CUMULUS CONGESTUS WITH VERTICAL THICKNESS MORE THAN TWICE THE AVERAGE WIDTH; NOT ORGANIZED IN CLUSTERS OR LINES; ONE OR MORE LAYERS OF CLOUDS EXTEND OUT FROM THE CLOUD TOWERS, ALTHOUGH NO CONTINUOUS CLOUD LAYERS EXIST
+6 6 ISOLATED CUMULONIMBUS OR LARGE CLUSTERS OF CUMULUS TURRETS SEPARATED BY WIDE AREAS IN WHICH CLOUDS ARE ABSENT; CLOUD BASES ARE GENERALLY DARK WITH SHOWERS OBSERVED IN MOST CELLS; SOME SCATTERED MIDDLE AND UPPER CLOUDS MAY BE PRESENT; INDIVIDUAL CUMULUS CELLS ARE ONE TO TWO TIMES HIGHER THAN THEY ARE WIDE
+7 7 NUMEROUS CUMULUS EXTENDING THROUGH THE MIDDLE TROPOSPHERE WITH BROKEN TO OVERCAST SHEETS OF MIDDLE CLOUDS AND/OR CIRROSTRATUS; CUMULUS TOWERS DO NOT DECREASE GENERALLY IN SIZE WITH HEIGHT; RAGGED DARK CLOUD BASES WITH SOME SHOWERS PRESENT
+8 8 CONTINUOUS DENSE MIDDLE CLOUDS AND/OR CIRROSTRATUS CLOUD SHEETS WITH SOME LARGE ISOLATED CUMULONIMBUS OR CUMULUS CONGESTUS CLOUDS PENETRATING THESE SHEETS; LIGHT RAIN OCCASIONALLY OBSERVED FROM THE ALTOSTRATUS; CUMULONIMBUS BASES RAGGED AND DARK WITH SHOWERS VISIBLE
+9 9 CONTINUOUS SHEETS OF MIDDLE CLOUDS AND/OR CIRROSTRATUS WITH CUMULONIMBUS AND CUMULUS CONGESTUS IN ORGANIZED LINES OR CLOUD BANDS; RAIN IS GENERALLY OBSERVED FROM ALTOSTRATUS SHEETS AND HEAVY SHOWERS FROM CUMULONIMBUS; WIND HAS A SQUALLY CHARACTER
+10 10 STATE OF SKY UNKNOWN OR NOT DESCRIBED BY ANY OF THE ABOVE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20056.table b/definitions/bufr/tables/0/wmo/26/codetables/20056.table
new file mode 100644
index 0000000..d493792
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20056.table
@@ -0,0 +1,6 @@
+0 0 UNKNOWN
+1 1 WATER
+2 2 ICE
+3 3 MIXED
+4 4 CLEAR
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20062.table b/definitions/bufr/tables/0/wmo/26/codetables/20062.table
new file mode 100644
index 0000000..24d96c4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20062.table
@@ -0,0 +1,21 @@
+0 0 SURFACE OF GROUND DRY (WITHOUT CRACKS AND NO APPRECIABLE AMOUNT OF DUST OR LOOSE SAND)
+1 1 SURFACE OF GROUND MOIST
+2 2 SURFACE OF GROUND WET (STANDING WATER IN SMALL OR LARGE POOLS ON SURFACE)
+3 3 FLOODED
+4 4 SURFACE OF GROUND FROZEN
+5 5 GLAZE ON GROUND
+6 6 LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY
+7 7 THIN COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY
+8 8 MODERATE OR THICK COVER OF LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY
+9 9 EXTREMELY DRY WITH CRACKS
+10 10 GROUND PREDOMINANTLY COVERED BY ICE
+11 11 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN ONE HALF OF THE GROUND
+12 12 COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST ONE HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+13 13 EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+14 14 UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY
+15 15 LOOSE DRY SNOW COVERING LESS THAN ONE HALF OF THE GROUND
+16 16 LOOSE DRY SNOW COVERING AT LEAST ONE HALF OF THE GROUND BUT GROUND NOT COMPLETELY COVERED
+17 17 EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+18 18 UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY
+19 19 SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20063.table b/definitions/bufr/tables/0/wmo/26/codetables/20063.table
new file mode 100644
index 0000000..90ce1c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20063.table
@@ -0,0 +1,71 @@
+0 0 RESERVED
+1 1 HIGHEST WIND SPEED GUSTS GREATER THAN 11.5 M/S
+2 2 HIGHEST MEAN WIND SPEED GREATER THAN 17.5 M/S
+7 7 VISIBILITY GREATER THAN 100 000 M
+10 10 MIRAGE - NO SPECIFICATION
+11 11 MIRAGE - IMAGE OF DISTANT OBJECT RAISED (LOOMING)
+13 13 MIRAGE - INVERTED IMAGE OF DISTANT OBJECT
+14 14 MIRAGE - COMPLEX, MULTIPLE IMAGES OF DISTANT OBJECT (IMAGES NOT INVERTED)
+15 15 MIRAGE - COMPLEX, MULTIPLE IMAGES OF DISTANT OBJECT (SOME IMAGES BEING INVERTED)
+16 16 MIRAGE - SUN OR MOON SEEN APPRECIABLY DISTORTED
+17 17 MIRAGE - SUN VISIBLE, ALTHOUGH ASTRONOMICALLY BELOW THE HORIZON
+18 18 MIRAGE - MOON VISIBLE, ALTHOUGH ASTRONOMICALLY BELOW THE HORIZON
+19 19 RESERVED
+20 20 DAY DARKNESS, BAD, WORST IN DIRECTION SPECIFIED
+21 21 DAY DARKNESS, VERY BAD, WORST IN DIRECTION SPECIFIED
+22 22 DAY DARKNESS, BLACK, WORST IN DIRECTION SPECIFIED
+31 31 SLIGHT COLORATION OF CLOUDS AT SUNRISE ASSOCIATED WITH A TROPICAL DISTURBANCE
+32 32 DEEP-RED COLORATION OF CLOUDS AT SUNRISE ASSOCIATED WITH A TROPICAL DISTURBANCE
+33 33 SLIGHT COLORATION OF CLOUDS AT SUNSET ASSOCIATED WITH A TROPICAL DISTURBANCE
+34 34 DEEP-RED COLORATION OF CLOUDS AT SUNSET ASSOCIATED WITH A TROPICAL DISTURBANCE
+35 35 CONVERGENCE OF CH CLOUDS AT A POINT BELOW 45° FORMING OR INCREASING AND ASSOCIATED WITH A TROPICAL DISTURBANCE
+36 36 CONVERGENCE OF CH CLOUDS AT A POINT ABOVE 45° ASSOCIATED WITH A TROPICAL DISTURBANCE
+37 37 CONVERGENCE OF CH CLOUDS AT A POINT BELOW 45° DISSOLVING OR DIMINISHING AND ASSOCIATED WITH A TROPICAL DISTURBANCE
+38 38 CONVERGENCE OF CH CLOUDS AT A POINT ABOVE 45° ASSOCIATED WITH A TROPICAL DISTURBANCE
+39 39 RESERVED
+40 40 HOAR FROST ON HORIZONTAL SURFACES
+41 41 HOAR FROST ON HORIZONTAL AND VERTICAL SURFACES
+42 42 PRECIPITATION CONTAINING SAND OR DESERT DUST
+43 43 PRECIPITATION CONTAINING VOLCANIC ASH
+50 50 CALM OR LIGHT WIND FOLLOWED BY A SQUALL
+51 51 CALM OR LIGHT WIND FOLLOWED BY A SUCCESSION OF SQUALLS
+52 52 GUSTY WEATHER FOLLOWED BY A SQUALL
+53 53 GUSTY WEATHER FOLLOWED BY A SUCCESSION OF SQUALLS
+54 54 SQUALL FOLLOWED BY GUSTY WEATHER
+55 55 GENERAL GUSTY WEATHER WITH SQUALL AT INTERVALS
+56 56 SQUALL APPROACHING STATION
+57 57 LINE SQUALL
+58 58 SQUALL WITH DRIFTING OR BLOWING DUST OR SAND
+59 59 LINE SQUALL WITH DRIFTING OR BLOWING DUST OR SAND
+60 60 TEMPERATURE STEADY
+61 61 TEMPERATURE FALLING, WITHOUT GOING BELOW 0°C
+62 62 TEMPERATURE RISING, WITHOUT GOING ABOVE 0°C
+63 63 TEMPERATURE FALLING TO A VALUE BELOW 0°C
+64 64 TEMPERATURE RISING TO A VALUE ABOVE 0°C
+65 65 IRREGULAR VARIATION, OSCILLATIONS OF TEMPERATURE PASSING THROUGH 0°C
+66 66 IRREGULAR VARIATION, OSCILLATIONS OF TEMPERATURE NOT PASSING THROUGH 0°C
+67 67 VARIATION OF TEMPERATURE NOT OBSERVED
+68 68 NOT ALLOCATED
+69 69 VARIATION OF TEMPERATURE UNKNOWN OWING TO LACK OF THERMOGRAPH
+70 70 VISIBILITY HAS NOT VARIED (SUN* VISIBLE) TOWARDS DIRECTION SPECIFIED
+71 71 VISIBILITY HAS NOT VARIED (SUN* INVISIBLE) TOWARDS DIRECTION SPECIFIED
+72 72 VISIBILITY HAS INCREASED (SUN* VISIBLE) TOWARDS DIRECTION SPECIFIED
+73 73 VISIBILITY HAS INCREASED (SUN* INVISIBLE) TOWARDS DIRECTION SPECIFIED
+74 74 VISIBILITY HAS DECREASED (SUN* VISIBLE) TOWARDS DIRECTION SPECIFIED
+75 75 VISIBILITY HAS DECREASED (SUN* INVISIBLE) TOWARDS DIRECTION SPECIFIED
+76 76 FOG COMING FROM DIRECTION SPECIFIED
+77 77 FOG HAS LIFTED, WITHOUT DISSIPATING
+78 78 FOG HAS DISPERSED WITHOUT REGARD TO DIRECTION
+79 79 MOVING PATCHES OR BANKS OF FOG
+80 80 BROCKEN SPECTRE
+81 81 RAINBOW
+82 82 SOLAR OR LUNAR HALO
+83 83 PARHELIA OR ANTHELIA
+84 84 SUN PILLAR
+85 85 CORONA
+86 86 TWILIGHT GLOW
+87 87 TWILIGHT GLOW ON THE MOUNTAINS (ALPENGLüHEN)
+88 88 MIRAGE
+89 89 ZODIACAL LIGHT
+90 90 ST ELMO'S FIRE
+1023 1023 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2007.table b/definitions/bufr/tables/0/wmo/26/codetables/2007.table
new file mode 100644
index 0000000..05b4c6b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2007.table
@@ -0,0 +1,11 @@
+0 0 RESERVED
+1 1 SHAFT ENCODER FLOAT SYSTEM
+2 2 ULTRASONIC
+3 3 RADAR
+4 4 PRESSURE (SINGLE TRANSDUCER)
+5 5 PRESSURE (MULTIPLE TRANSDUCER)
+6 6 PRESSURE (IN STILLING WELL)
+7 7 BUBBLER PRESSURE
+8 8 ACOUSTIC (WITH SOUNDING TUBE)
+9 9 ACOUSTIC (IN OPEN AIR)
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20071.table b/definitions/bufr/tables/0/wmo/26/codetables/20071.table
new file mode 100644
index 0000000..72367bf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20071.table
@@ -0,0 +1,11 @@
+0 0 NO ASSESSMENT
+1 1 LESS THAN 50 KM
+2 2 BETWEEN 50 AND 200 KM
+3 3 MORE THAN 200 KM
+4 4 LESS THAN 50 KM
+5 5 BETWEEN 50 AND 200 KM
+6 6 MORE THAN 200 KM
+7 7 LESS THAN 50 KM
+8 8 BETWEEN 50 AND 200 KM
+9 9 MORE THAN 200 KM
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20085.table b/definitions/bufr/tables/0/wmo/26/codetables/20085.table
new file mode 100644
index 0000000..f929e87
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20085.table
@@ -0,0 +1,3 @@
+0 0 CLEARED (CLRD//)
+1 1 ALL RUNWAYS CLOSED (SNOCLO)
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20086.table b/definitions/bufr/tables/0/wmo/26/codetables/20086.table
new file mode 100644
index 0000000..b543330
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20086.table
@@ -0,0 +1,11 @@
+0 0 CLEAR AND DRY
+1 1 DAMP
+2 2 WET WITH WATER PATCHES
+3 3 RIME AND FROST COVERED (DEPTH NORMALLY LESS THAN 1 MM)
+4 4 DRY SNOW
+5 5 WET SNOW
+6 6 SLUSH
+7 7 ICE
+8 8 COMPACTED OR ROLLED SNOW
+9 9 FROZEN RUTS OR RIDGES
+15 15 MISSING OR NOT REPORTED (E.G. DUE TO RUNWAY CLEARANCE IN PROGRESS)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20087.table b/definitions/bufr/tables/0/wmo/26/codetables/20087.table
new file mode 100644
index 0000000..b2e33aa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20087.table
@@ -0,0 +1,6 @@
+0 0 RESERVED
+1 1 LESS THAN 10% OF RUNWAY COVERED
+2 2 11% TO 25% OF RUNWAY COVERED
+5 5 25% TO 50% OF RUNWAY COVERED
+9 9 51% TO 100% OF RUNWAY COVERED
+15 15 MISSING OR NOT REPORTED (E.G. DUE TO RUNWAY CLEARANCE IN PROGRESS)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20089.table b/definitions/bufr/tables/0/wmo/26/codetables/20089.table
new file mode 100644
index 0000000..f616c62
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20089.table
@@ -0,0 +1,11 @@
+0 0 0.00
+1 1 0.01
+89 89 0.89
+90 90 0.90
+91 91 BRAKING ACTION POOR
+92 92 BRAKING ACTION MEDIUM TO POOR
+93 93 BRAKING ACTION MEDIUM
+94 94 BRAKING ACTION MEDIUM TO GOOD
+95 95 BRAKING ACTION GOOD
+99 99 UNRELIABLE
+127 127 MISSING, NOT REPORTED AND/OR RUNWAY NOT OPERATIONAL
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20090.table b/definitions/bufr/tables/0/wmo/26/codetables/20090.table
new file mode 100644
index 0000000..d13502e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20090.table
@@ -0,0 +1,7 @@
+0 0 RESERVED
+1 1 NACREOUS CLOUDS
+2 2 NOCTILUCENT CLOUDS
+3 3 CLOUDS FROM WATERFALLS
+4 4 CLOUDS FROM FIRES
+5 5 CLOUDS FROM VOLCANIC ERUPTIONS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20101.table b/definitions/bufr/tables/0/wmo/26/codetables/20101.table
new file mode 100644
index 0000000..abe89f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20101.table
@@ -0,0 +1,11 @@
+0 0 RESERVED
+1 1 SCHISTOCERCA GREGARIA
+2 2 LOCUSTA MIGRATORIA
+3 3 NOMADACRIS SEPTEMFASCIATA
+4 4 OEDALEUS SENEGALENSIS
+5 5 ANRACRIDIUM SPP
+6 6 OTHER LOCUSTS
+7 7 OTHER GRASSHOPPERS
+8 8 OTHER CRICKETS
+9 9 SPODOPTERA EXEMPTA
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20102.table b/definitions/bufr/tables/0/wmo/26/codetables/20102.table
new file mode 100644
index 0000000..6a53039
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20102.table
@@ -0,0 +1,11 @@
+0 0 GREEN
+1 1 GREEN OR BLACK
+2 2 BLACK
+3 3 YELLOW AND BLACK
+4 4 STRAW/GREY
+5 5 PINK
+6 6 DARK RED/BROWN
+7 7 MIXED RED AND YELLOW
+8 8 YELLOW
+9 9 OTHER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20103.table b/definitions/bufr/tables/0/wmo/26/codetables/20103.table
new file mode 100644
index 0000000..9c4f689
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20103.table
@@ -0,0 +1,11 @@
+0 0 HOPPERS (NYMPHS, LARVAE), STAGE 1
+1 1 HOPPERS (NYMPHS, LARVAE), STAGE 2 OR MIXED 1, 2 INSTARS (STAGES)
+2 2 HOPPERS (NYMPHS, LARVAE), STAGE 3 OR MIXED 2, 3 INSTARS
+3 3 HOPPERS (NYMPHS, LARVAE), STAGE 4 OR MIXED 3, 4 INSTARS
+4 4 HOPPERS (NYMPHS, LARVAE), STAGE 5 OR MIXED 4, 5 INSTARS
+5 5 HOPPERS (NYMPHS, LARVAE), STAGE MIXED, ALL OR MANY INSTARS
+6 6 FLEDGLINGS (WINGS TOO SOFT FOR SUSTAINED FLIGHT)
+7 7 IMMATURE ADULTS
+8 8 MIXED MATURITY ADULTS
+9 9 MATURE ADULTS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20104.table b/definitions/bufr/tables/0/wmo/26/codetables/20104.table
new file mode 100644
index 0000000..15ca8ac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20104.table
@@ -0,0 +1,11 @@
+0 0 HOPPERS ONLY, MAINLY IN BANDS OR CLUSTERS
+1 1 WINGED ADULTS IN THE VICINITY MORE THAN 10 KILOMETRES FROM POINT OF OBSERVATION
+2 2 LOCUSTS IN FLIGHT, A FEW SEEN AT THE STATION
+3 3 LOCUSTS AT THE STATION, MOST OF THEM ON THE GROUND
+4 4 LOCUSTS, SOME ON GROUND AND OTHERS IN FLIGHT AT A HEIGHT LESS THAN 10 METRES
+5 5 LOCUSTS, SOME ON GROUND AND OTHERS IN FLIGHT AT A HEIGHT GREATER THAN 10 METRES
+6 6 LOCUSTS, MOST IN FLIGHT AT A HEIGHT LESS THAN 10 METRES
+7 7 LOCUSTS, MOST IN FLIGHT AT A HEIGHT GREATER THAN 10 METRES
+8 8 LOCUSTS, ALL OVER INFLICTING SEVERE DAMAGE TO VEGETATION, NO EXTERMINATION OPERATION
+9 9 LOCUSTS, ALL OVER INFLICTING SEVERE DAMAGE TO VEGETATION, EXTERMINATION OPERATION IN PROGRESS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20105.table b/definitions/bufr/tables/0/wmo/26/codetables/20105.table
new file mode 100644
index 0000000..b7406c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20105.table
@@ -0,0 +1,12 @@
+0 0 SMALL SWARM LESS THAN 1 KM2 OR ADULTS IN GROUND, TENS OR HUNDREDS OF INDIVIDUALS VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE LESS THAN 1 HOUR AGO
+1 1 SMALL SWARM LESS THAN 1 KM2 OR ADULTS IN GROUND, TENS OR HUNDREDS OF INDIVIDUALS VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE 1 TO 6 HOURS AGO
+2 2 SMALL SWARM LESS THAN 1 KM2 OR ADULTS IN GROUND, TENS OR HUNDREDS OF INDIVIDUALS VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE OVER 6 HOURS AGO
+3 3 MEDIUM SWARM OR SCATTERED ADULTS, SEVERAL VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE LESS THAN 1 HOUR AGO
+4 4 MEDIUM SWARM OR SCATTERED ADULTS, SEVERAL VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE 1 TO 6 HOURS AGO
+5 5 MEDIUM SWARM OR SCATTERED ADULTS, SEVERAL VISIBLE SIMULTANEOUSLY, DURATION OF PASSAGE OVER 6 HOURS AGO
+6 6 LARGE SWARM OR ISOLATED ADULTS, SEEN SINGLY, DURATION OF PASSAGE LESS THAN 1 HOUR AGO
+7 7 LARGE SWARM OR ISOLATED ADULTS, SEEN SINGLY, DURATION OF PASSAGE 1 TO 6 HOURS AGO
+8 8 LARGE SWARM OR ISOLATED ADULTS, SEEN SINGLY, DURATION OF PASSAGE OVER 6 HOURS AGO
+9 9 MORE THAN ONE SWARM OF LOCUSTS
+10 10 SIZE OF SWARM AND/OR DURATION OF PASSAGE NOT DETERMINED OWING TO DARKNESS OR SIMILAR PHENOMENA
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20106.table b/definitions/bufr/tables/0/wmo/26/codetables/20106.table
new file mode 100644
index 0000000..2a8c4a0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20106.table
@@ -0,0 +1,7 @@
+0 0 RESERVED
+1 1 THIN DENSITY SWARM (SWARM VISIBLE ONLY WHEN NEAR ENOUGH FOR INDIVIDUAL LOCUSTS TO BE DISCERNED)
+2 2 MEDIUM DENSITY SWARM
+3 3 DENSE SWARM (OBSCURING NEARBY FEATURES, E.G. TREES)
+4 4 ISOLATED HOPPERS SEEN SINGLY
+5 5 SCATTERED HOPPERS, SEVERAL VISIBLE SIMULTANEOUSLY
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20107.table b/definitions/bufr/tables/0/wmo/26/codetables/20107.table
new file mode 100644
index 0000000..0bea30a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20107.table
@@ -0,0 +1,11 @@
+0 0 RESERVED
+1 1 GENERALLY IN THE DIRECTION NE
+2 2 GENERALLY IN THE DIRECTION E
+3 3 GENERALLY IN THE DIRECTION SE
+4 4 GENERALLY IN THE DIRECTION S
+5 5 GENERALLY IN THE DIRECTION SW
+6 6 GENERALLY IN THE DIRECTION W
+7 7 GENERALLY IN THE DIRECTION NW
+8 8 GENERALLY IN THE DIRECTION N
+9 9 SPECIFIC DIRECTION INDETERMINABLE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20108.table b/definitions/bufr/tables/0/wmo/26/codetables/20108.table
new file mode 100644
index 0000000..4404614
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20108.table
@@ -0,0 +1,9 @@
+0 0 BARE GROUND
+1 1 DRY, PRESENCE OF FEW AND ISOLATED SHRUBS
+2 2 SPARSE VEGETATION (SPROUTING)
+3 3 DENSE VEGETATION (SPROUTING)
+4 4 SPARSE VEGETATION (GROWING)
+5 5 DENSE VEGETATION (GROWING)
+6 6 SPARSE VEGETATION IN FLOWER
+7 7 DENSE VEGETATION IN FLOWER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2011.table b/definitions/bufr/tables/0/wmo/26/codetables/2011.table
new file mode 100644
index 0000000..fbf81b0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2011.table
@@ -0,0 +1,100 @@
+0 0 RESERVED
+1 1 NOT VACANT
+2 2 NO RADIOSONDE - PASSIVE TARGET (E.G. REFLECTOR)
+3 3 NO RADIOSONDE - ACTIVE TARGET (E.G. TRANSPONDER)
+4 4 NO RADIOSONDE - PASSIVE TEMPERATURE-HUMIDITY PROFILER
+5 5 NO RADIOSONDE - ACTIVE TEMPERATURE-HUMIDITY PROFILER
+6 6 NO RADIOSONDE - RADIO-ACOUSTIC SOUNDER
+7 7 NOT VACANT
+8 8 NO RADIOSONDE -... (RESERVED)
+9 9 NO RADIOSONDE - SYSTEM UNKNOWN OR NOT SPECIFIED
+10 10 SIPPICAN LMS5 W/CHIP THERMISTOR, DUCT MOUNTED CAPACITANCE RELATIVE HUMIDITY SENSOR AND DERIVED PRESSURE FROM GPS HEIGHT
+11 11 SIPPICAN LMS6 W/CHIP THERMISTOR, EXTERNAL BOOM MOUNTED CAPACITANCE RELATIVE HUMIDITY SENSOR, AND DERIVED PRESSURE FROM GPS HEIGHT
+12 12 JIN YANG RSG-20A WITH DERIVED PRESSURE FROM GPS HEIGHT/GL-5000P (REPUBLIC OF KOREA)
+13 13 VAISALA RS92/MARWIN MW32 (FINLAND)
+14 14 VAISALA RS92/DIGICORA MW41 (FINLAND)
+15 15 PAZA-12M/RADIOTHEODOLITE-UL (UKRAINE)
+16 16 PAZA-22/AVK-1 (UKRAINE)
+17 17 GRAW DFM-09 (GERMANY)
+18 18 NOT VACANT
+19 19 VACANT
+20 20 NOT VACANT
+21 21 JIN YANG 1524LA LORAN-C/GL5000 (REPUBLIC OF KOREA)
+22 22 MEISEI RS-11G GPS RADIOSONDE W/THERMISTOR, CAPACITANCE RELATIVE HUMIDITY SENSOR, AND DERIVED PRESSURE FROM GPS HEIGHT (JAPAN)
+23 23 VAISALA RS41/DIGICORA MW41 (FINLAND)
+24 24 VAISALA RS41/AUTOSONDE (FINLAND)
+25 25 VAISALA RS41/MARWIN MW32 (FINLAND)
+26 26 METEOLABOR SRS-C34/ARGUS 37 (SWITZERLAND)
+27 27 NOT VACANT
+28 28 AVK - AK2-02 (RUSSIAN FEDERATION)
+29 29 MARL-A OR VEKTOR-M - AK2-02 (RUSSIAN FEDERATION)
+30 30 MEISEI RS-06G (JAPAN)
+31 31 TAIYUAN GTS1-1/GFE(L) (CHINA )
+32 32 SHANGHAI GTS1/GFE(L) (CHINA)
+33 33 NANJING GTS1-2/GFE(L) (CHINA)
+34 34 VACANT
+35 35 MEISEI IMS-100 GPS RADIOSONDE W/THERMISTOR SENSOR, CAPACITANCE RELATIVE HUMIDITY SENSOR, AND DERIVED PRESSURE FROM GPS HEIGHT (JAPAN)
+36 36 VACANT
+37 37 NOT VACANT
+38 38 VIZ LOCATE LORAN-C (UNITED STATES)
+39 39 SPRENGER E076 (GERMANY)
+40 40 SPRENGER E084 (GERMANY)
+41 41 VAISALA RS41 WITH PRESSURE DERIVED FROM GPS HEIGHT/DIGICORA MW41 (FINLAND)
+42 42 VAISALA RS41 WITH PRESSURE DERIVED FROM GPS HEIGHT/AUTOSONDE (FINLAND)
+43 43 NANJING DAQIAO XGP-3G (CHINA)*
+44 44 TIANJIN HUAYUNTIANYI GTS(U)1 (CHINA)*
+45 45 BEIJING CHANGFENG CF-06 (CHINA)*
+46 46 SHANGHAI CHANGWANG GTS3 (CHINA)*
+47 47 NOT VACANT
+48 48 PAZA-22M/MARL-A
+49 49 NOT VACANT
+50 50 VACANT
+51 51 NOT VACANT
+52 52 VAISALA RS92-NGP/INTERMET IMS-2000 (UNITED STATES)
+53 53 AVK - I-2012 (RUSSIAN FEDERATION)
+54 54 GRAW DFM-97 (GERMANY)
+55 55 MEISEI RS-01G (JAPAN)
+56 56 M2K2 (FRANCE)
+57 57 MODEM M2K2-DC (FRANCE)
+58 58 AVK-BAR (RUSSIAN FEDERATION)
+59 59 MODEM M2K2-R 1680 MHZ RDF RADIOSONDE WITH PRESSURE SENSOR CHIP (FRANCE)
+60 60 MARL-A OR VEKTOR-M - I-2012 (RUSSIAN FEDERATION)
+61 61 NOT VACANT
+62 62 MARL-A OR VEKTOR-M - MRZ-3MK (RUSSIAN FEDERATION)
+63 63 VAISALA RS80/STAR (FINLAND)
+64 64 ORBITAL SCIENCES CORPORATION, SPACE DATA DIVISION, TRANSPONDER RADIOSONDE, TYPE 909-11-XX, WHERE XX CORRESPONDS TO THE MODEL OF THE INSTRUMENT (UNITED STATES)
+65 65 VIZ TRANSPONDER RADIOSONDE, MODEL NUMBER 1499–520 (UNITED STATES)
+66 66 VAISALA RS80 /AUTOSONDE (FINLAND)
+67 67 VAISALA RS80/DIGICORA III (FINLAND)
+68 68 AVK-RZM-2 (RUSSIAN FEDERATION)
+69 69 MARL-A OR VEKTOR-M-RZM-2 (RUSSIAN FEDERATION)
+70 70 VAISALA RS92/STAR (FINLAND)
+71 71 VAISALA RS90/LORAN/DIGICORA I, II OR MARWIN (FINLAND)
+72 72 VAISALA RS90/PC-CORA (FINLAND)
+73 73 VACANT
+74 74 VAISALA RS90/STAR (FINLAND)
+75 75 AVK-MRZ-ARMA (RUSSIAN FEDERATION)
+76 76 AVK-RF95-ARMA (RUSSIAN FEDERATION)
+77 77 MODEM GPSONDE M10 (FRANCE)
+78 78 VAISALA RS90/DIGICORA III (FINLAND)
+79 79 VAISALA RS92/DIGICORA I,II OR MARWIN (FINLAND)
+80 80 VAISALA RS92/DIGICORA III (FINLAND)
+81 81 VAISALA RS92/AUTOSONDE (FINLAND)
+82 82 LOCKHEED MARTIN LMS-6 W/CHIP THERMISTOR; EXTERNAL BOOM MOUNTED POLYMER CAPACITIVE RELATIVE HUMIDITY SENSOR; CAPACITIVE PRESSURE SENSOR AND GPS WIND
+83 83 VAISALA RS92-D/INTERMET IMS 1500 W/SILICON CAPACITIVE PRESSURE SENSOR, CAPACITIVE WIRE TEMPERATURE SENSOR, TWIN THIN-FILM HEATED POLYMER CAPACITIVE RELATIVE HUMIDITY SENSOR AND RDF WIND
+84 84 VACANT
+85 85 SIPPICAN MARK IIA WITH CHIP THERMISTOR, CARBON ELEMENT AND DERIVED PRESSURE FROM GPS HEIGHT
+86 86 SIPPICAN MARK II WITH CHIP THERMISTOR, PRESSURE AND CARBON ELEMENT
+87 87 SIPPICAN MARK IIA WITH CHIP THERMISTOR, PRESSURE AND CARBON ELEMENT
+88 88 MARL-A OR VEKTOR-M-MRZ (RUSSIAN FEDERATION)
+89 89 MARL-A OR VEKTOR-M-BAR (RUSSIAN FEDERATION)
+90 90 RADIOSONDE NOT SPECIFIED OR UNKNOWN
+91 91 PRESSURE ONLY RADIOSONDE
+92 92 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+93 93 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+94 94 NO PRESSURE RADIOSONDE PLUS TRANSPONDER
+95 95 NO PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+96 96 DESCENDING RADIOSONDE
+97 97 BAT-16P (SOUTH AFRICA)
+98 98 BAT-16G (SOUTH AFRICA)
+99 99 BAT-4G (SOUTH AFRICA)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20119.table b/definitions/bufr/tables/0/wmo/26/codetables/20119.table
new file mode 100644
index 0000000..4a4b40f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20119.table
@@ -0,0 +1,4 @@
+0 0 NOT DEFINED
+1 1 POSITIVE
+2 2 NEGATIVE
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20124.table b/definitions/bufr/tables/0/wmo/26/codetables/20124.table
new file mode 100644
index 0000000..f78eacb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20124.table
@@ -0,0 +1,4 @@
+0 0 NOT DEFINED
+1 1 LIGHTNING STROKE
+2 2 LIGHTNING FLASH, BY MANUAL OBSERVATION, OR IF EQUIPMENT INSENSITIVE TO STROKE RESOLUTION
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2013.table b/definitions/bufr/tables/0/wmo/26/codetables/2013.table
new file mode 100644
index 0000000..9d042d0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2013.table
@@ -0,0 +1,9 @@
+0 0 NO CORRECTION
+1 1 CIMO SOLAR CORRECTED AND CIMO INFRARED CORRECTED
+2 2 CIMO SOLAR CORRECTED AND INFRARED CORRECTED
+3 3 CIMO SOLAR CORRECTED ONLY
+4 4 SOLAR AND INFRARED CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+5 5 SOLAR CORRECTED AUTOMATICALLY BY RADIOSONDE SYSTEM
+6 6 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY COUNTRY
+7 7 SOLAR CORRECTED AS SPECIFIED BY COUNTRY
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20136.table b/definitions/bufr/tables/0/wmo/26/codetables/20136.table
new file mode 100644
index 0000000..0369f5d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20136.table
@@ -0,0 +1,44 @@
+0 0 ISOLATED CUMULUS HUMILIS AND/OR CUMULUS MEDIOCRIS OF VERTICAL DEVELOPMENT
+1 1 NUMEROUS CUMULUS HUMILIS AND/OR CUMULUS MEDIOCRIS OF VERTICAL DEVELOPMENT
+2 2 ISOLATED CUMULUS CONGESTUS OF VERTICAL DEVELOPMENT
+3 3 NUMEROUS CUMULUS CONGESTUS OF VERTICAL DEVELOPMENT
+4 4 ISOLATED CUMULONIMBUS OF VERTICAL DEVELOPMENT
+5 5 NUMEROUS CUMULONIMBUS OF VERTICAL DEVELOPMENT
+6 6 ISOLATED CUMULUS AND CUMULONIMBUS OF VERTICAL DEVELOPMENT
+7 7 NUMEROUS CUMULUS AND CUMULONIMBUS OF VERTICAL DEVELOPMENT
+10 10 RESERVED
+11 11 ISOLATED OROGRAPHIC CLOUDS, PILEUS, INCUS, FORMING
+12 12 ISOLATED OROGRAPHIC CLOUDS, PILEUS, INCUS, NOT CHANGING
+13 13 ISOLATED OROGRAPHIC CLOUDS, PILEUS, INCUS, DISSOLVING
+14 14 IRREGULAR BANKS OF OROGRAPHIC CLOUD, FöHN BANK, ETC., FORMING
+15 15 IRREGULAR BANKS OF OROGRAPHIC CLOUD, FöHN BANK, ETC., NOT CHANGING
+16 16 IRREGULAR BANKS OF OROGRAPHIC CLOUD, FöHN BANK, ETC., DISSOLVING
+17 17 COMPACT LAYER OF OROGRAPHIC CLOUD, FöHN BANK, ETC., FORMING
+18 18 COMPACT LAYER OF OROGRAPHIC CLOUD, FöHN BANK, ETC., NOT CHANGING
+19 19 COMPACT LAYER OF OROGRAPHIC CLOUD, FöHN BANK, ETC., DISSOLVING
+20 20 ALL MOUNTAINS OPEN, ONLY SMALL AMOUNTS OF CLOUD PRESENT
+21 21 MOUNTAINS PARTLY COVERED WITH DETACHED CLOUDS (NOT MORE THAN HALF THE PEAKS CAN BE SEEN)
+22 22 ALL MOUNTAIN SLOPES COVERED, PEAKS AND PASSES FREE
+23 23 MOUNTAINS OPEN ON OBSERVER’S SIDE (ONLY SMALL AMOUNTS OF CLOUD PRESENT), BUT A CONTINUOUS WALL OF CLOUD ON THE OTHER SIDE
+24 24 CLOUDS LOW ABOVE THE MOUNTAINS, BUT ALL SLOPES AND MOUNTAINS OPEN (ONLY SMALL AMOUNTS OF CLOUD ON THE SLOPES)
+25 25 CLOUDS LOW ABOVE THE MOUNTAINS, PEAKS PARTLY COVERED BY PRECIPITATION TRAILS OR CLOUDS
+26 26 ALL PEAKS COVERED BUT PASSES OPEN, SLOPES EITHER OPEN OR COVERED
+27 27 MOUNTAINS GENERALLY COVERED BUT SOME PEAKS FREE, SLOPES WHOLLY OR PARTIALLY COVERED
+28 28 ALL PEAKS, PASSES AND SLOPES COVERED
+29 29 MOUNTAINS CANNOT BE SEEN OWING TO DARKNESS, FOG, SNOWSTORM, PRECIPITATION, ETC.
+35 35 NON-PERSISTENT CONDENSATION TRAILS
+36 36 PERSISTENT CONDENSATION TRAILS COVERING LESS THAN 1/8 OF THE SKY
+37 37 PERSISTENT CONDENSATION TRAILS COVERING 1/8 OF THE SKY
+38 38 PERSISTENT CONDENSATION TRAILS COVERING 2/8 OF THE SKY
+39 39 PERSISTENT CONDENSATION TRAILS COVERING 3/8 OR MORE OF THE SKY
+40 40 NO CLOUD OR MIST OBSERVED FROM A HIGHER LEVEL
+41 41 MIST, CLEAR ABOVE OBSERVED FROM A HIGHER LEVEL
+42 42 FOG PATCHES OBSERVED FROM A HIGHER LEVEL
+43 43 LAYER OF SLIGHT FOG OBSERVED FROM A HIGHER LEVEL
+44 44 LAYER OF THICK FOG OBSERVED FROM A HIGHER LEVEL
+45 45 SOME ISOLATED CLOUDS OBSERVED FROM A HIGHER LEVEL
+46 46 ISOLATED CLOUDS AND FOG BELOW OBSERVED FROM A HIGHER LEVEL
+47 47 MANY ISOLATED CLOUDS OBSERVED FROM A HIGHER LEVEL
+48 48 SEA OF CLOUDS OBSERVED FROM A HIGHER LEVEL
+49 49 BAD VISIBILITY OBSCURING THE DOWNWARD VIEW OBSERVED FROM A HIGHER LEVEL
+511 511 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20137.table b/definitions/bufr/tables/0/wmo/26/codetables/20137.table
new file mode 100644
index 0000000..adda880
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20137.table
@@ -0,0 +1,11 @@
+0 0 NO CHANGE
+1 1 CUMULIFICATION
+2 2 SLOW ELEVATION
+3 3 RAPID ELEVATION
+4 4 ELEVATION AND STRATIFICATION
+5 5 SLOW LOWERING
+6 6 RAPID LOWERING
+7 7 STRATIFICATION
+8 8 STRATIFICATION AND LOWERING
+9 9 RAPID CHANGE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/20138.table b/definitions/bufr/tables/0/wmo/26/codetables/20138.table
new file mode 100644
index 0000000..ed9b315
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/20138.table
@@ -0,0 +1,9 @@
+0 0  DRY
+1 1  MOIST
+2 2  WET
+3 3  RIME
+4 4  SNOW
+5 5  ICE
+6 6  GLAZE
+7 7  NOT DRY
+15 15  MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2014.table b/definitions/bufr/tables/0/wmo/26/codetables/2014.table
new file mode 100644
index 0000000..bc5c5fc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2014.table
@@ -0,0 +1,51 @@
+0 0 NO WIND FINDING
+1 1 AUTOMATIC WITH AUXILIARY OPTICAL DIRECTION FINDING
+2 2 AUTOMATIC WITH AUXILIARY RADIO DIRECTION FINDING
+3 3 AUTOMATIC WITH AUXILIARY RANGING
+4 4 NOT USED
+5 5 AUTOMATIC WITH MULTIPLE VLF-OMEGA SIGNALS
+6 6 AUTOMATIC CROSS CHAIN LORAN-C
+7 7 AUTOMATIC WITH AUXILIARY WIND PROFILER
+8 8 AUTOMATIC SATELLITE NAVIGATION
+19 19 TRACKING TECHNIQUE NOT SPECIFIED
+20 20 VESSEL STOPPED
+21 21 VESSEL DIVERTED FROM ORIGINAL DESTINATION
+22 22 VESSEL'S ARRIVAL DELAYED
+23 23 CONTAINER DAMAGED
+24 24 POWER FAILURE TO CONTAINER
+29 29 OTHER PROBLEMS
+30 30 MAJOR POWER PROBLEMS
+31 31 UPS INOPERATIVE
+32 32 RECEIVER HARDWARE PROBLEMS
+33 33 RECEIVER SOFTWARE PROBLEMS
+34 34 PROCESSOR HARDWARE PROBLEMS
+35 35 PROCESSOR SOFTWARE PROBLEMS
+36 36 NAVAID SYSTEM DAMAGED
+37 37 SHORTAGE OF LIFTING GAS
+38 38 RESERVED
+39 39 OTHER PROBLEMS
+40 40 MECHANICAL DEFECT
+41 41 MATERIAL DEFECT (HAND LAUNCHER)
+42 42 POWER FAILURE
+43 43 CONTROL FAILURE
+44 44 PNEUMATIC/HYDRAULIC FAILURE
+45 45 OTHER PROBLEMS
+46 46 COMPRESSOR PROBLEMS
+47 47 BALLOON PROBLEMS
+48 48 BALLOON RELEASE PROBLEMS
+49 49 LAUNCHER DAMAGED
+50 50 R/S RECEIVER ANTENNA DEFECT
+51 51 NAVAID ANTENNA DEFECT
+52 52 R/S RECEIVER CABLING (ANTENNA) DEFECT
+53 53 NAVAID ANTENNA CABLING DEFECT
+59 59 OTHER PROBLEMS
+60 60 ASAP COMMUNICATIONS DEFECT
+61 61 COMMUNICATIONS FACILITY REJECTED DATA
+62 62 NO POWER AT TRANSMITTING ANTENNA
+63 63 ANTENNA CABLE BROKEN
+64 64 ANTENNA CABLE DEFECT
+65 65 MESSAGE TRANSMITTED POWER BELOW NORMAL
+69 69 OTHER PROBLEMS
+70 70 ALL SYSTEMS IN NORMAL OPERATION
+99 99 STATUS OF SYSTEM AND ITS COMPONENTS NOT SPECIFIED
+127 127 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2015.table b/definitions/bufr/tables/0/wmo/26/codetables/2015.table
new file mode 100644
index 0000000..7b0ccaf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2015.table
@@ -0,0 +1,7 @@
+0 0 RESERVED
+1 1 PRESSURE ONLY RADIOSONDE
+2 2 PRESSURE ONLY RADIOSONDE PLUS TRANSPONDER
+3 3 PRESSURE ONLY RADIOSONDE PLUS RADAR REFLECTOR
+4 4 NO-PRESSURE RADIOSONDE PLUS TRANSPONDER
+5 5 NO-PRESSURE RADIOSONDE PLUS RADAR REFLECTOR
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2016.table b/definitions/bufr/tables/0/wmo/26/codetables/2016.table
new file mode 100644
index 0000000..4a30226
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2016.table
@@ -0,0 +1,4 @@
+1 1 TRAIN REGULATOR
+2 2 LIGHT UNIT
+3 3 PARACHUTE
+4 4 ROOFTOP RELEASE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2017.table b/definitions/bufr/tables/0/wmo/26/codetables/2017.table
new file mode 100644
index 0000000..79a09f6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2017.table
@@ -0,0 +1,5 @@
+0 0 NO CORRECTIONS
+1 1 TIME LAG CORRECTION PROVIDED BY THE MANUFACTURER
+2 2 SOLAR RADIATION CORRECTION PROVIDED BY THE MANUFACTURER
+3 3 SOLAR RADIATION AND TIME LAG CORRECTION PROVIDED BY THE MANUFACTURER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2019.table b/definitions/bufr/tables/0/wmo/26/codetables/2019.table
new file mode 100644
index 0000000..f36246e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2019.table
@@ -0,0 +1,327 @@
+10 10 AATSR
+11 11 ATSR
+12 12 ATSR-2
+13 13 MWR
+30 30 ARGOS
+40 40 LASER REFLECTORS
+41 41 DORIS
+42 42 DORIS-NG
+47 47 POSEIDON-1 (SSALT1)
+48 48 POSEIDON-2 (SSALT2)
+49 49 POSEIDON-3 (SSALT3)
+50 50 ATSR/M
+51 51 HRG
+52 52 HRV
+53 53 HRVIR
+54 54 SCARAB/MV2
+55 55 POLDER
+56 56 IIR
+60 60 VEGETATION
+61 61 WINDII
+62 62 ALTIKA
+80 80 RADARSAT DTT
+81 81 RADARSAT TTC
+85 85 SAR (CSA)
+90 90 MOPITT
+91 91 OSIRIS
+97 97 PANCHROMATIC IMAGER
+98 98 GPS RECEIVER
+102 102 CHAMP GPS SOUNDER
+103 103 IGOR
+116 116 CHAMP GRAVITY PACKAGE (ACCELEROMETER+GPS)
+117 117 CHAMP MAGNETOMETRY PACKAGE (1 SCALAR+2 VECTOR MAGNETOMETER)
+120 120 ENVISAT COMMS
+121 121 ERS COMMS
+130 130 ALADIN
+131 131 ATLID
+140 140 AMI/SAR/IMAGE
+141 141 AMI/SAR/WAVE
+142 142 AMI/SCATTEROMETER
+143 143 ASAR
+144 144 ASAR
+145 145 ASAR
+146 146 CPR
+147 147 RA-2/MWR
+148 148 RA/MWR
+150 150 SCATTEROMETER
+161 161 MIPAS
+162 162 MWR-2
+163 163 SOPRANO
+170 170 GOME
+172 172 GOMOS
+174 174 MERIS
+175 175 SCIAMACHY
+176 176 MIRAS
+177 177 SIRAL
+178 178 SRAL
+179 179 OLCI
+180 180 SLSTR
+181 181 METEOSAT COMMS
+182 182 MSG COMMS
+190 190 ASCAT
+200 200 GERB
+202 202 GRAS
+203 203 MHS
+205 205 MVIRI
+207 207 SEVIRI
+208 208 VIRI
+220 220 GOME-2
+221 221 IASI
+240 240 DCP
+245 245 CCD
+246 246 HSB
+248 248 OBA
+250 250 WFI
+255 255 IRMSS
+260 260 BSS & FSS TRANSPONDERS
+261 261 DRT-S&R
+262 262 INSAT COMMS
+268 268 HR-PAN
+269 269 MSMR
+270 270 VHRR
+271 271 WIFS
+275 275 AWIFS
+276 276 LISS-I
+277 277 LISS-II
+278 278 LISS-III
+279 279 LISS-IV
+284 284 PAN
+285 285 MOS
+286 286 OCM
+287 287 ROSA
+288 288 SCAT
+290 290 MTSAT COMMS
+291 291 HIMAWARI COMMS
+294 294 JAMI
+295 295 IMAGER/MTSAT-2
+296 296 VISSR
+297 297 AHI
+300 300 GLAS
+301 301 LRA
+302 302 MBLA
+303 303 CALIOP
+309 309 CPR (CLOUDSAT)
+312 312 NSCAT
+313 313 SEAWINDS
+314 314 RAPIDSCAT
+330 330 ACRIM
+334 334 BUV
+336 336 ALI
+347 347 ASTER
+348 348 CERES-2
+351 351 GPSDR
+353 353 HIRDLS
+354 354 HRDI
+356 356 LIS
+358 358 PEM
+359 359 SEAWIFS
+360 360 SUSIM (UARS)
+363 363 SBUV/1
+365 365 TMI
+366 366 JMR
+367 367 AMR
+369 369 LIMS
+370 370 LRIR
+371 371 EPIC
+372 372 NISTAR
+373 373 PLASMA-MAG
+374 374 XPS
+375 375 VIRS
+376 376 POLDER II
+377 377 TIM
+379 379 WFC
+382 382 CLAES
+383 383 HALOE
+384 384 ISAMS
+385 385 MISR
+386 386 MLS
+387 387 MLS (EOS-AURA)
+389 389 MODIS
+393 393 HAIRS
+394 394 OMI
+395 395 ATMOSPHERIC CORRECTOR
+396 396 HYPERION
+399 399 SAGE I
+400 400 SAGE II
+401 401 SAGE III
+402 402 SAMS
+403 403 SAM-II
+404 404 IRIS
+405 405 GIFTS
+420 420 AIRS
+426 426 SOLSTICE
+430 430 TES
+431 431 TOMS
+432 432 OCO
+450 450 ADEOS COMMS
+451 451 DCS (JAXA)
+453 453 GMS COMMS
+454 454 JERS-1 COMMS
+460 460 RIS
+461 461 PR
+462 462 SAR
+470 470 PALSAR
+478 478 AMSR2
+479 479 AMSR-E
+480 480 PRISM (ALOS)
+481 481 AMSR
+482 482 AVNIR
+483 483 AVNIR-2
+484 484 GLI
+485 485 MESSR
+486 486 MSR
+487 487 OCTS
+488 488 OPS
+489 489 VISSR (GMS-5)
+490 490 VTIR
+510 510 ILAS-I
+511 511 ILAS-II
+512 512 IMG
+514 514 SEM
+515 515 SOFIS
+516 516 TANSO-FTS
+517 517 TANSO-CAI
+518 518 DPR
+519 519 GMI
+540 540 DCS (NOAA)
+541 541 GOES COMMS
+542 542 LANDSAT COMMS
+543 543 NOAA COMMS
+544 544 S&R (GOES)
+545 545 S&R (NOAA)
+546 546 WEFAX
+547 547 SEM (GOES)
+550 550 SSM
+551 551 SSJ/4
+552 552 SSIES-2
+553 553 SSB/X-2
+570 570 AMSU-A
+574 574 AMSU-B
+580 580 ATOVS (HIRS/3 + AMSU + AVHRR/3)
+590 590 AVHRR/2
+591 591 AVHRR/3
+592 592 AVHRR/4
+600 600 ERBE
+601 601 ETM+
+605 605 HIRS/2
+606 606 HIRS/3
+607 607 HIRS/4
+615 615 IMAGER
+616 616 VIIRS
+620 620 CRIRS/NP
+621 621 ATMS
+622 622 MSS
+623 623 MSU
+624 624 SBUV/2
+625 625 SBUV/3
+626 626 SOUNDER
+627 627 SSU
+628 628 TM
+629 629 TOVS (HIRS/2 + MSU + SSU)
+630 630 VAS
+631 631 SSZ
+645 645 SEM
+650 650 MVIRSR (10 CHANNEL)
+651 651 MVIRSR (3 CHANNEL)
+652 652 MVIRSR (5 CHANNEL)
+670 670 RLSBO
+680 680 MSU-EU
+681 681 MSU-UM
+682 682 RM-08
+683 683 SU-UMS
+684 684 SU-VR
+685 685 TRASSER
+686 686 SCAT
+687 687 ALT
+688 688 MWI
+700 700 KONDOR-2
+701 701 BRK
+710 710 ALISSA
+712 712 BALKAN-2 LIDAR
+715 715 MK-4
+716 716 MK-4M
+730 730 GREBEN
+731 731 SAR-10
+732 732 SAR-3
+733 733 SAR-70
+740 740 SLR-3
+745 745 TRAVERS SAR
+750 750 174-K
+751 751 BTVK
+752 752 CHAIKA
+753 753 DELTA-2
+755 755 IKAR-D
+756 756 IKAR-N
+757 757 IKAR-P
+760 760 ISP
+761 761 KFA-1000
+762 762 KFA-200
+763 763 KFA-3000
+770 770 KLIMAT
+771 771 KLIMAT-2
+775 775 MIRAS
+776 776 MIVZA
+777 777 MIVZA-M
+780 780 MR-2000
+781 781 MR-2000M
+785 785 MR-900
+786 786 MR-900B
+790 790 MSU-E
+791 791 MSU-E1
+792 792 MSU-E2
+793 793 MSU-M
+794 794 MSU-S
+795 795 MSU-SK
+796 796 MSU-V
+810 810 MTZA
+815 815 MZOAS
+820 820 R-225
+821 821 R-400
+822 822 R-600
+830 830 RMS
+835 835 TV CAMERA
+836 836 SILVA
+840 840 SROSMO
+850 850 BUFS-2
+851 851 BUFS-4
+855 855 ISTOK-1
+856 856 SFM-2
+857 857 DOPI
+858 858 KGI-4
+859 859 OZON-M
+860 860 RMK-2
+900 900 MAXIE
+901 901 OLS
+905 905 SSM/I
+906 906 SSM/T-1
+907 907 SSM/T-2
+908 908 SSMIS
+910 910 SXI
+930 930 EHIC
+931 931 X-RAY ASTRONOMY PAYLOAD
+932 932 IVISSR (FY-2)
+933 933 IRAS
+934 934 MWAS
+935 935 IMWAS
+936 936 MWHS
+937 937 MVIRS
+938 938 MWRI
+940 940 MTVZA-OK
+941 941 SAPHIR
+942 942 MADRAS
+944 944 ALT
+945 945 TSIS
+946 946 CMIS
+947 947 OMPS
+948 948 GPSOS
+949 949 SESS
+950 950 VIRR
+951 951 TOM
+952 952 OP
+953 953 MWHS-2
+954 954 MWTS-2
+955 955 HIRAS
+956 956 SBUS
+957 957 TOU
+958 958 GNOS
+2047 2047 
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2020.table b/definitions/bufr/tables/0/wmo/26/codetables/2020.table
new file mode 100644
index 0000000..fc19e6d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2020.table
@@ -0,0 +1,31 @@
+0 0 NIMBUS
+1 1 VTPR
+2 2 TIROS 1 (TIROS, NOAA-6 TO NOAA-13)
+3 3 TIROS 2 (NOAA-14 ONWARDS)
+10 10 EOS
+20 20 GPM-CORE
+31 31 DMSP
+61 61 EUMETSAT POLAR SYSTEM (EPS)
+91 91 ERS
+92 92 SENTINEL-3
+121 121 ADEOS
+122 122 GCOM
+241 241 GOES
+261 261 JASON
+271 271 GMS
+272 272 MTSAT
+273 273 HIMAWARI
+281 281 COMS
+301 301 INSAT
+331 331 METEOSAT OPERATIONAL PROGRAMME (MOP)
+332 332 METEOSAT TRANSITIONAL PROGRAMME (MTP)
+333 333 METEOSAT SECOND GENERATION PROGRAMME (MSG)
+351 351 GOMS
+380 380 FY-1
+381 381 FY-2
+382 382 FY-3
+401 401 GPS
+402 402 GLONASS
+403 403 GALILEO
+404 404 BDS (BEIDOU NAVIGATION SATELLITE SYSTEM)
+511 511 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2021.table b/definitions/bufr/tables/0/wmo/26/codetables/2021.table
new file mode 100644
index 0000000..b95fdc9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2021.table
@@ -0,0 +1,8 @@
+1 1 HIGH-RESOLUTION INFRARED SOUNDER (HIRS)
+2 2 MICROWAVE SOUNDING UNIT (MSU)
+3 3 STRATOSPHERIC SOUNDING UNIT (SSU)
+4 4 AMI (ADVANCED MICROWAVE INSTRUMENT) WIND MODE
+5 5 AMI (ADVANCED MICROWAVE INSTRUMENT) WAVE MODE
+6 6 AMI (ADVANCED MICROWAVE INSTRUMENT) IMAGE MODE
+7 7 RADAR ALTIMETER
+8 8 ATSR (ALONG-TRACK SCANNING RADIOMETER)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2022.table b/definitions/bufr/tables/0/wmo/26/codetables/2022.table
new file mode 100644
index 0000000..5068e7f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2022.table
@@ -0,0 +1,5 @@
+1 1 PROCESSING TECHNIQUE NOT DEFINED
+2 2 AUTOMATED STATISTICAL REGRESSION
+3 3 CLEAR PATH
+4 4 PARTLY CLOUDY PATH
+5 5 CLOUDY PATH
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2023.table b/definitions/bufr/tables/0/wmo/26/codetables/2023.table
new file mode 100644
index 0000000..be7eb84
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2023.table
@@ -0,0 +1,11 @@
+0 0 RESERVED
+1 1 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE INFRARED CHANNEL
+2 2 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE VISIBLE CHANNEL
+3 3 WIND DERIVED FROM CLOUD MOTION OBSERVED IN THE WATER VAPOUR CHANNEL
+4 4 WIND DERIVED FROM MOTION OBSERVED IN A COMBINATION OF SPECTRAL CHANNELS
+5 5 WIND DERIVED FROM MOTION OBSERVED IN THE WATER VAPOUR CHANNEL IN CLEAR AIR
+6 6 WIND DERIVED FROM MOTION OBSERVED IN THE OZONE CHANNEL
+7 7 WIND DERIVED FROM MOTION OBSERVED IN WATER VAPOUR CHANNEL (CLOUD OR CLEAR AIR NOT SPECIFIED)
+13 13 ROOT-MEAN-SQUARE
+14 14 RESERVED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2024.table b/definitions/bufr/tables/0/wmo/26/codetables/2024.table
new file mode 100644
index 0000000..00ec80e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2024.table
@@ -0,0 +1,4 @@
+0 0 RESERVED
+1 1 TABLE WITH FULL RANGE OF HUMIDITY VARIATION IN LAYER
+2 2 REGRESSION TECHNIQUE ON 2 HUMIDITY VALUES IN LAYER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2025.table b/definitions/bufr/tables/0/wmo/26/codetables/2025.table
new file mode 100644
index 0000000..64dc018
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2025.table
@@ -0,0 +1,16 @@
+1 1 RESERVED
+2 2 HIRS
+3 3 MSU
+6 6 HIRS
+7 7 MSU
+10 10 HIRS (1, 2, 3, 8, 9, 16, 17)
+11 11 HIRS (1, 2, 3, 9, 17)
+12 12 MSU
+15 15 HIRS
+16 16 HIRS
+17 17 MSU
+18 18 SKINTK (OCEAN ONLY)
+21 21 HIRS
+22 22 SSU
+23 23 MSU (3, 4)
+24 24 RESERVED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2030.table b/definitions/bufr/tables/0/wmo/26/codetables/2030.table
new file mode 100644
index 0000000..2777bbc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2030.table
@@ -0,0 +1,8 @@
+0 0 RESERVED
+1 1 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+2 2 GEK (GEOMAGNETIC ELECTROKINETOGRAPH)
+3 3 SHIP'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+4 4 SHIP'S SET AND DRIFT DETERMINED BY FIXES MORE THAN 6 HOURS BUT LESS THAN 12 HOURS APART
+5 5 DRIFT OF BUOY
+6 6 ADCP (ACOUSTIC DOPPLER CURRENT PROFILER)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2031.table b/definitions/bufr/tables/0/wmo/26/codetables/2031.table
new file mode 100644
index 0000000..a96b857
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2031.table
@@ -0,0 +1,21 @@
+0 0 RESERVED
+1 1 INSTANTANEOUS
+2 2 AVERAGED OVER 3 MINUTES OR LESS
+3 3 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+4 4 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+5 5 INSTANTANEOUS
+6 6 AVERAGED OVER 3 MINUTES OR LESS
+7 7 AVERAGED OVER MORE THAN 3 MINUTES, BUT 6 AT THE MOST
+8 8 AVERAGED OVER MORE THAN 6 MINUTES, BUT 12 AT THE MOST
+9 9 VECTOR OR DOPPLER CURRENT PROFILING METHOD NOT USED
+10 10 RESERVED
+11 11 1 HOUR OR LESS
+12 12 MORE THAN 1 HOUR BUT 2 AT THE MOST
+13 13 MORE THAN 2 HOURS BUT 4 AT THE MOST
+14 14 MORE THAN 4 HOURS BUT 8 AT THE MOST
+15 15 MORE THAN 8 HOURS BUT 12 AT THE MOST
+16 16 MORE THAN 12 HOURS BUT 18 AT THE MOST
+17 17 MORE THAN 18 HOURS BUT 24 AT THE MOST
+18 18 RESERVED
+19 19 DRIFT METHOD NOT USED
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2032.table b/definitions/bufr/tables/0/wmo/26/codetables/2032.table
new file mode 100644
index 0000000..7e9310d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2032.table
@@ -0,0 +1,4 @@
+0 0 VALUES AT SELECTED DEPTHS (DATA POINTS FIXED BY THE INSTRUMENT OR SELECTED BY ANY OTHER METHOD)
+1 1 VALUES AT SELECTED DEPTHS (DATA POINTS TAKEN FROM TRACES AT SIGNIFICANT DEPTHS)
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2033.table b/definitions/bufr/tables/0/wmo/26/codetables/2033.table
new file mode 100644
index 0000000..8215be0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2033.table
@@ -0,0 +1,5 @@
+0 0 NO SALINITY MEASURED
+1 1 IN SITU SENSOR, ACCURACY BETTER THAN 0.02 ‰
+2 2 IN SITU SENSOR, ACCURACY LESS THAN 0.02 ‰
+3 3 SAMPLE ANALYSIS
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2034.table b/definitions/bufr/tables/0/wmo/26/codetables/2034.table
new file mode 100644
index 0000000..06cdd52
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2034.table
@@ -0,0 +1,7 @@
+0 0 UNSPECIFIED DROGUE
+1 1 HOLEY SOCK
+2 2 TRISTAR
+3 3 WINDOW SHADE
+4 4 PARACHUTE
+5 5 NON-LAGRANGIAN SEA ANCHOR
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2036.table b/definitions/bufr/tables/0/wmo/26/codetables/2036.table
new file mode 100644
index 0000000..7782d30
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2036.table
@@ -0,0 +1,4 @@
+0 0 DRIFTING BUOY
+1 1 FIXED BUOY
+2 2 SUBSURFACE FLOAT (MOVING)
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2037.table b/definitions/bufr/tables/0/wmo/26/codetables/2037.table
new file mode 100644
index 0000000..729c40e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2037.table
@@ -0,0 +1,8 @@
+0 0 RESERVED
+1 1 MANUAL READING FROM VERTICAL TIDE STAFF
+2 2 MANUAL READING FROM SINGLE AUTOMATIC RECORDER AT STATION
+3 3 MANUAL READING FROM MULTIPLE AUTOMATIC RECORDERS AT STATION
+4 4 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION WITHOUT LEVEL REFERENCE CHECK
+5 5 AUTOMATIC READING FROM SINGLE AUTOMATIC RECORDER AT STATION WITH LEVEL REFERENCE CHECK, OR FROM MULTIPLE AUTOMATIC RECORDERS
+6 6 RESERVED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2038.table b/definitions/bufr/tables/0/wmo/26/codetables/2038.table
new file mode 100644
index 0000000..458f141
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2038.table
@@ -0,0 +1,16 @@
+0 0 SHIP INTAKE
+1 1 BUCKET
+2 2 HULL CONTACT SENSOR
+3 3 REVERSING THERMOMETER
+4 4 STD/CTD SENSOR
+5 5 MECHANICAL BT
+6 6 EXPENDABLE BT
+7 7 DIGITAL BT
+8 8 THERMISTOR CHAIN
+9 9 INFRARED SCANNER
+10 10 MICROWAVE SCANNER
+11 11 INFRARED RADIOMETER
+12 12 IN-LINE THERMOSALINOGRAPH
+13 13 TOWED BODY
+14 14 OTHER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2039.table b/definitions/bufr/tables/0/wmo/26/codetables/2039.table
new file mode 100644
index 0000000..0a94982
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2039.table
@@ -0,0 +1,5 @@
+0 0 MEASURED WET-BULB TEMPERATURE
+1 1 ICED BULB MEASURED WET-BULB TEMPERATURE
+2 2 COMPUTED WET-BULB TEMPERATURE
+3 3 ICED BULB COMPUTED WET-BULB TEMPERATURE
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2040.table b/definitions/bufr/tables/0/wmo/26/codetables/2040.table
new file mode 100644
index 0000000..78b2917
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2040.table
@@ -0,0 +1,8 @@
+0 0 SHIP'S MOTION REMOVED BY AVERAGING
+1 1 SHIP'S MOTION REMOVED BY MOTION COMPENSATION
+2 2 SHIP'S MOTION NOT REMOVED
+3 3 SHIP'S MOTION REMOVED BY AVERAGING
+4 4 SHIP'S MOTION REMOVED BY MOTION COMPENSATION
+5 5 SHIP'S MOTION NOT REMOVED
+6 6 DOPPLER CURRENT PROFILING METHOD NOT USED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2041.table b/definitions/bufr/tables/0/wmo/26/codetables/2041.table
new file mode 100644
index 0000000..ef5bf86
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2041.table
@@ -0,0 +1,6 @@
+0 0 INFORMATION BASED ON MANUAL ANALYSIS
+1 1 INFORMATION BASED ON COMPUTER ANALYSIS
+2 2 INFORMATION BASED ON DATA ASSIMILATION
+3 3 INFORMATION BASED ON COMPUTER ANALYSIS OR DATA ASSIMILATION MANUALLY MODIFIED
+10 10 INFORMATION BASED ON THE NUMERICAL WEATHER PREDICTION
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2042.table b/definitions/bufr/tables/0/wmo/26/codetables/2042.table
new file mode 100644
index 0000000..eb2445b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2042.table
@@ -0,0 +1,4 @@
+0 0 VALUE ORIGINALLY REPORTED IN M/S
+1 1 VALUE ORIGINALLY REPORTED IN KNOTS
+2 2 NO SEA CURRENT DATA AVAILABLE
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2044.table b/definitions/bufr/tables/0/wmo/26/codetables/2044.table
new file mode 100644
index 0000000..0e10ed8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2044.table
@@ -0,0 +1,6 @@
+0 0 RESERVED FOR FUTURE USE
+1 1 LONGUET-HIGGINS (1964)
+2 2 LONGUET-HIGGINS (F3 METHOD)
+3 3 MAXIMUM LIKELIHOOD METHOD
+4 4 MAXIMUM ENTROPY METHOD
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2045.table b/definitions/bufr/tables/0/wmo/26/codetables/2045.table
new file mode 100644
index 0000000..374e4f2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2045.table
@@ -0,0 +1,5 @@
+0 0 SEA STATION
+1 1 AUTOMATIC DATA BUOY
+2 2 AIRCRAFT
+3 3 SATELLITE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2046.table b/definitions/bufr/tables/0/wmo/26/codetables/2046.table
new file mode 100644
index 0000000..57fb9d6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2046.table
@@ -0,0 +1,4 @@
+0 0 RESERVED FOR FUTURE USE
+1 1 HEAVE SENSOR
+2 2 SLOPE SENSOR
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2047.table b/definitions/bufr/tables/0/wmo/26/codetables/2047.table
new file mode 100644
index 0000000..8213931
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2047.table
@@ -0,0 +1,9 @@
+0 0 RESERVED
+1 1 DART II (PMEL)
+2 2 DART ETD
+3 3 SAIC TSUNAMI BUOY (STB)
+4 4 GFZ - POTSDAM
+5 5 INCOIS (INDIA)
+6 6 INABUOY (INDONESIA)
+7 7 ENVIRTECH
+127 127 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2048.table b/definitions/bufr/tables/0/wmo/26/codetables/2048.table
new file mode 100644
index 0000000..d7cb2ef
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2048.table
@@ -0,0 +1,14 @@
+0 0 HIRS
+1 1 MSU
+2 2 SSU
+3 3 AMSU-A
+4 4 AMSU-B
+5 5 AVHRR
+6 6 SSMI
+7 7 NSCAT
+8 8 SEAWINDS
+9 9 POSEIDON ALTIMETER
+10 10 JMR (JASON MICROWAVE RADIOMETER)
+11 11 MHS
+12 12 ASCAT
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2049.table b/definitions/bufr/tables/0/wmo/26/codetables/2049.table
new file mode 100644
index 0000000..ade5cac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2049.table
@@ -0,0 +1,4 @@
+1 1 PROCESSING TECHNIQUE NOT DEFINED
+2 2 SIMULTANEOUS PHYSICAL RETRIEVAL
+3 3 CLEAR SOUNDING
+4 4 CLOUDY SOUNDING
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2050.table b/definitions/bufr/tables/0/wmo/26/codetables/2050.table
new file mode 100644
index 0000000..fbcce61
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2050.table
@@ -0,0 +1,19 @@
+1 1 1
+2 2 2
+3 3 3
+4 4 4
+5 5 5
+6 6 6
+7 7 7
+8 8 8
+9 9 9
+10 10 10
+11 11 11
+12 12 12
+13 13 13
+14 14 14
+15 15 15
+16 16 16
+17 17 17
+18 18 18
+19 19 19
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2051.table b/definitions/bufr/tables/0/wmo/26/codetables/2051.table
new file mode 100644
index 0000000..3524ae7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2051.table
@@ -0,0 +1,5 @@
+0 0 RESERVED
+1 1 MAXIMUM/MINIMUM THERMOMETERS
+2 2 AUTOMATED INSTRUMENTS
+3 3 THERMOGRAPH
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2052.table b/definitions/bufr/tables/0/wmo/26/codetables/2052.table
new file mode 100644
index 0000000..8b6262c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2052.table
@@ -0,0 +1,5 @@
+1 1 1
+2 2 2
+3 3 3
+4 4 4
+5 5 5
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2053.table b/definitions/bufr/tables/0/wmo/26/codetables/2053.table
new file mode 100644
index 0000000..03e5e29
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2053.table
@@ -0,0 +1,5 @@
+0 0 OBSERVED BRIGHTNESS TEMPERATURE
+1 1 BRIGHTNESS TEMPERATURE WITH BIAS CORRECTION APPLIED
+2 2 BRIGHTNESS TEMPERATURE CALCULATED FROM FIRST GUESS
+3 3 BRIGHTNESS TEMPERATURE CALCULATED FROM SOUNDING
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2054.table b/definitions/bufr/tables/0/wmo/26/codetables/2054.table
new file mode 100644
index 0000000..0995688
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2054.table
@@ -0,0 +1,6 @@
+0 0 PARAMETER DERIVED USING OBSERVED SOUNDER BRIGHTNESS TEMPERATURES
+1 1 PARAMETER DERIVED USING OBSERVED IMAGER BRIGHTNESS TEMPERATURES
+2 2 PARAMETER DERIVED USING FIRST GUESS INFORMATION
+3 3 PARAMETER DERIVED USING NMC ANALYSIS INFORMATION
+4 4 PARAMETER DERIVED USING RADIOSONDE INFORMATION
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2055.table b/definitions/bufr/tables/0/wmo/26/codetables/2055.table
new file mode 100644
index 0000000..ce06f00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2055.table
@@ -0,0 +1,10 @@
+0 0 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS RADIOSONDE
+1 1 STATISTICS GENERATED COMPARING RETRIEVAL VERSUS FIRST GUESS
+2 2 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS FIRST GUESS
+3 3 STATISTICS GENERATED COMPARING OBSERVED VERSUS RETRIEVAL
+4 4 STATISTICS GENERATED COMPARING OBSERVED VERSUS FIRST GUESS
+5 5 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS IMAGER
+6 6 STATISTICS GENERATED COMPARING RADIOSONDE VERSUS SOUNDER
+7 7 STATISTICS GENERATED FOR RADIOSONDE
+8 8 STATISTICS GENERATED FOR FIRST GUESS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2056.table b/definitions/bufr/tables/0/wmo/26/codetables/2056.table
new file mode 100644
index 0000000..86eb983
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2056.table
@@ -0,0 +1,6 @@
+0 0 SUMS OF DIFFERENCES
+1 1 SUMS OF SQUARED DIFFERENCES
+2 2 SAMPLE SIZE
+3 3 MINIMUM DIFFERENCE
+4 4 MAXIMUM DIFFERENCE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2057.table b/definitions/bufr/tables/0/wmo/26/codetables/2057.table
new file mode 100644
index 0000000..681e6bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2057.table
@@ -0,0 +1,7 @@
+0 0 NESTED GRID MODEL (NGM)
+1 1 AVIATION MODEL (AVN)
+2 2 MEDIUM RANGE FORECAST (MRF) MODEL
+3 3 GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL
+4 4 PRIOR SOUNDINGS (WITHIN 3 HOURS OF CURRENT TIME)
+5 5 CLIMATOLOGY
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2058.table b/definitions/bufr/tables/0/wmo/26/codetables/2058.table
new file mode 100644
index 0000000..6c45eda
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2058.table
@@ -0,0 +1,5 @@
+0 0 12 HOUR AND 18 HOUR
+1 1 18 HOUR AND 24 HOUR
+2 2 6 HOUR AND 12 HOUR
+3 3 GREATER THAN 24 HOURS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2059.table b/definitions/bufr/tables/0/wmo/26/codetables/2059.table
new file mode 100644
index 0000000..8f089d3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2059.table
@@ -0,0 +1,5 @@
+0 0 NCEP NESTED GRID MODEL (NGM) ANALYSIS
+1 1 NCEP AVIATION MODEL (AVN) ANALYSIS
+2 2 NCEP MEDIUM RANGE FORECAST (MRF) MODEL ANALYSIS
+3 3 NCEP GLOBAL DATA ASSIMILATION SYSTEM (GDAS) FORECAST MODEL ANALYSIS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2060.table b/definitions/bufr/tables/0/wmo/26/codetables/2060.table
new file mode 100644
index 0000000..6f84698
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2060.table
@@ -0,0 +1,7 @@
+0 0 CURRENT SURFACE HOURLY REPORTS
+1 1 CURRENT SHIP REPORTS
+2 2 CURRENT BUOY REPORTS
+3 3 ONE HOUR OLD SURFACE HOURLY REPORTS
+4 4 ONE HOUR OLD SHIP REPORTS
+5 5 ONE HOUR OLD BUOY REPORTS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2061.table b/definitions/bufr/tables/0/wmo/26/codetables/2061.table
new file mode 100644
index 0000000..592d51e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2061.table
@@ -0,0 +1,3 @@
+0 0 INERTIAL NAVIGATION SYSTEM
+1 1 OMEGA
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2062.table b/definitions/bufr/tables/0/wmo/26/codetables/2062.table
new file mode 100644
index 0000000..2d0f4e2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2062.table
@@ -0,0 +1,7 @@
+0 0 ASDAR
+1 1 ASDAR (ACARS ALSO AVAILABLE BUT NOT OPERATIVE)
+2 2 ASDAR (ACARS ALSO AVAILABLE AND OPERATIVE)
+3 3 ACARS
+4 4 ACARS (ASDAR ALSO AVAILABLE BUT NOT OPERATIVE)
+5 5 ACARS (ASDAR ALSO AVAILABLE AND OPERATIVE)
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2064.table b/definitions/bufr/tables/0/wmo/26/codetables/2064.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2064.table
@@ -0,0 +1,4 @@
+0 0 GOOD
+1 1 BAD
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2066.table b/definitions/bufr/tables/0/wmo/26/codetables/2066.table
new file mode 100644
index 0000000..a3865dc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2066.table
@@ -0,0 +1,9 @@
+0 0 INTERMET IMS 2000
+1 1 INTERMET IMS 1500C
+2 2 SHANGHAI GTC1
+3 3 NANJING GTC2
+4 4 NANJING GFE(L)1
+5 5 MARL-A RADAR
+6 6 VEKTOR-M RADAR
+62 62 OTHER
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2070.table b/definitions/bufr/tables/0/wmo/26/codetables/2070.table
new file mode 100644
index 0000000..5a098ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2070.table
@@ -0,0 +1,13 @@
+0 0 ACTUAL LOCATION IN SECONDS
+1 1 ACTUAL LOCATION IN MINUTES
+2 2 ACTUAL LOCATION IN DEGREES
+3 3 ACTUAL LOCATION IN DECIDEGREES
+4 4 ACTUAL LOCATION IN CENTIDEGREES
+5 5 REFERENCED TO CHECKPOINT IN SECONDS
+6 6 REFERENCED TO CHECKPOINT IN MINUTES
+7 7 REFERENCED TO CHECKPOINT IN DEGREES
+8 8 REFERENCED TO CHECKPOINT IN DECIDEGREES
+9 9 REFERENCED TO CHECKPOINT IN CENTIDEGREES
+10 10 ACTUAL LOCATION IN TENTHS OF A MINUTE
+11 11 REFERENCED TO CHECKPOINT IN TENTHS OF A MINUTE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2080.table b/definitions/bufr/tables/0/wmo/26/codetables/2080.table
new file mode 100644
index 0000000..c68a39d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2080.table
@@ -0,0 +1,7 @@
+0 0 KAYSAM
+1 1 TOTEX
+2 2 KKS
+3 3 GUANGZHOU SHUANGYI (CHINA)
+4 4 CHEMCHINA ZHUZHOU (CHINA)
+62 62 OTHER
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2081.table b/definitions/bufr/tables/0/wmo/26/codetables/2081.table
new file mode 100644
index 0000000..4c0f1dc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2081.table
@@ -0,0 +1,9 @@
+0 0 GP26
+1 1 GP28
+2 2 GP30
+3 3 HM26
+4 4 HM28
+5 5 HM30
+6 6 SV16
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2083.table b/definitions/bufr/tables/0/wmo/26/codetables/2083.table
new file mode 100644
index 0000000..bac421f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2083.table
@@ -0,0 +1,6 @@
+0 0 HIGH BAY
+1 1 LOW BAY
+2 2 BALLOON-INFLATED LAUNCH SYSTEM (BILS)
+3 3 ROOF-TOP BILS
+14 14 OTHER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2084.table b/definitions/bufr/tables/0/wmo/26/codetables/2084.table
new file mode 100644
index 0000000..be6430a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2084.table
@@ -0,0 +1,5 @@
+0 0 HYDROGEN
+1 1 HELIUM
+2 2 NATURAL GAS
+14 14 OTHER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2095.table b/definitions/bufr/tables/0/wmo/26/codetables/2095.table
new file mode 100644
index 0000000..580fe93
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2095.table
@@ -0,0 +1,7 @@
+0 0 CAPACITANCE ANEROID
+1 1 DERIVED FROM GPS
+2 2 RESISTIVE STRAIN GAUGE
+3 3 SILICON CAPACITOR
+4 4 DERIVED FROM RADAR HEIGHT
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2096.table b/definitions/bufr/tables/0/wmo/26/codetables/2096.table
new file mode 100644
index 0000000..e0e1815
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2096.table
@@ -0,0 +1,8 @@
+0 0 ROD THERMISTOR
+1 1 BEAD THERMISTOR
+2 2 CAPACITANCE BEAD
+3 3 CAPACITANCE WIRE
+4 4 RESISTIVE SENSOR
+5 5 CHIP THERMISTOR
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2097.table b/definitions/bufr/tables/0/wmo/26/codetables/2097.table
new file mode 100644
index 0000000..23661d5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2097.table
@@ -0,0 +1,12 @@
+0 0 VIZ MARK II CARBON HYGRISTOR
+1 1 VIZ B2 HYGRISTOR
+2 2 VAISALA A-HUMICAP
+3 3 VAISALA H-HUMICAP
+4 4 CAPACITANCE SENSOR
+5 5 VAISALA RS90
+6 6 SIPPICAN MARK IIA CARBON HYGRISTOR
+7 7 TWIN ALTERNATIVELY HEATED HUMICAP CAPACITANCE SENSOR
+8 8 HUMICAP CAPACITANCE SENSOR WITH ACTIVE DE-ICING METHOD
+9 9 CARBON HYGRISTOR
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2099.table b/definitions/bufr/tables/0/wmo/26/codetables/2099.table
new file mode 100644
index 0000000..74cb817
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2099.table
@@ -0,0 +1,5 @@
+0 0 HH POLARIZATION
+1 1 VV POLARIZATION
+2 2 HV POLARIZATION REAL VALUED COMPONENT
+3 3 HV POLARIZATION IMAGINARY VALUED COMPONENT
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2101.table b/definitions/bufr/tables/0/wmo/26/codetables/2101.table
new file mode 100644
index 0000000..efdb3ec
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2101.table
@@ -0,0 +1,10 @@
+0 0 CENTRE FRONT-FED PARABOLOID
+1 1 OFFSET FRONT-FED PARABOLOID
+2 2 CENTRE CASSEGRAIN PARABOLOID
+3 3 OFFSET CASSEGRAIN PARABOLOID
+4 4 PLANAR ARRAY
+5 5 COAXIAL-COLLINEAR ARRAY
+6 6 YAGI ELEMENTS ARRAY
+7 7 MICROSTRIP
+14 14 OTHER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2103.table b/definitions/bufr/tables/0/wmo/26/codetables/2103.table
new file mode 100644
index 0000000..417d2c9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2103.table
@@ -0,0 +1 @@
+1 1 RADAR ANTENNA IS PROTECTED BY A RADOME
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2104.table b/definitions/bufr/tables/0/wmo/26/codetables/2104.table
new file mode 100644
index 0000000..e39a153
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2104.table
@@ -0,0 +1,9 @@
+0 0 HORIZONTAL POLARIZATION
+1 1 VERTICAL POLARIZATION
+2 2 RIGHT CIRCULAR POLARIZATION
+3 3 LEFT CIRCULAR POLARIZATION
+4 4 HORIZONTAL AND VERTICAL POLARIZATION
+5 5 RIGHT AND LEFT CIRCULAR POLARIZATION
+6 6 QUASI-HORIZONTAL POLARIZATION
+7 7 QUASI-VERTICAL POLARIZATION
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21066.table b/definitions/bufr/tables/0/wmo/26/codetables/21066.table
new file mode 100644
index 0000000..9bcafea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21066.table
@@ -0,0 +1,11 @@
+1 1 PROCESSING EQUIPMENT NOT WORKING
+2 2 EQUIPMENT FAILED
+3 3 PRF CODE CHANGED DURING IMAGE GENERATION
+4 4 SAMPLING WINDOW CHANGED DURING IMAGE GENERATION
+5 5 GAIN CHANGED DURING IMAGE GENERATION
+6 6 CHIRP REPLICA EXCEEDS SPECIFIED VALUE
+7 7 INPUT DATA MEAN AND STANDARD DEVIATION OF IN-PHASE AND QUADRATURE OUT OF RANGE
+8 8 DOPPLER CENTROID CONFIDENCE > MMCC VALUE
+9 9 DOPPLER CENTROID ABSOLUTE VALUE > PRF/2
+10 10 DOPPLER AMBIGUITY CONFIDENCE < MMCC VALUE
+11 11 OUTPUT DATA MEAN AND STANDARD DEVIATION =< MMCC VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21067.table b/definitions/bufr/tables/0/wmo/26/codetables/21067.table
new file mode 100644
index 0000000..a0ed399
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21067.table
@@ -0,0 +1,12 @@
+1 1 NO FOREBEAM CALCULATION
+2 2 NO MIDBEAM CALCULATION
+3 3 NO AFTBEAM CALCULATION
+4 4 FOREBEAM ARCING DETECTED
+5 5 MIDBEAM ARCING DETECTED
+6 6 AFTBEAM ARCING DETECTED
+7 7 ANY BEAM NOISE CONTENT ABOVE OR EQUAL TO THRESHOLD
+8 8 LAND (ANY LAND IN CELL FOOTPRINT)
+9 9 AUTONOMOUS AMBIGUITY REMOVAL NOT USED
+10 10 METEOROLOGICAL BACKGROUND NOT USED
+11 11 MINIMUM RESIDUAL EXCEEDED THRESHOLD
+12 12 FRAME CHECKSUM ERROR DETECTED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21068.table b/definitions/bufr/tables/0/wmo/26/codetables/21068.table
new file mode 100644
index 0000000..102171f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21068.table
@@ -0,0 +1,7 @@
+1 1 STANDARD DEVIATION OF WIND SPEED OUTSIDE MMCC LIMIT
+2 2 STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT OUTSIDE MMCC LIMIT
+3 3 STANDARD DEVIATION OF ALTITUDE OUTSIDE MMCC LIMIT
+4 4 MEAN PEAKINESS OUTSIDE MMCC LIMIT
+5 5 FRAME CHECKSUM ERROR DETECTED
+6 6 HEIGHT-TIME LOOP TIME CONSTANT CORRECTION NOT PERFORMED
+7 7 NOT ENOUGH MEASUREMENTS (N < 10)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21069.table b/definitions/bufr/tables/0/wmo/26/codetables/21069.table
new file mode 100644
index 0000000..320890a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21069.table
@@ -0,0 +1,9 @@
+1 1 12.0 µM CHANNEL PRESENT IN SOURCE DATA
+2 2 11.0 µM CHANNEL PRESENT IN SOURCE DATA
+3 3 3.7 µM CHANNEL PRESENT IN SOURCE DATA
+4 4 1.6 µM CHANNEL PRESENT IN SOURCE DATA
+5 5 CLOUD IDENTIFICATION USED 1.6 µM HISTOGRAM REFLECTANCE CLOUD TEST
+6 6 1.6 µM HISTOGRAM REFLECTANCE CLOUD TEST USED DYNAMIC THRESHOLD
+7 7 SUN GLINT DETECTED BY 1.6 µM REFLECTANCE CLOUD TEST
+8 8 3.7 µM CHANNEL USED IN SEA-SURFACE TEMPERATURE RETRIEVAL
+9 9 SEA-SURFACE TEMPERATURE DERIVATION USED DAYTIME DATA (NIGHT-TIME IF ZERO)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21070.table b/definitions/bufr/tables/0/wmo/26/codetables/21070.table
new file mode 100644
index 0000000..669655f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21070.table
@@ -0,0 +1,22 @@
+1 1 CELL 1: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+2 2 CELL 2: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+3 3 CELL 3: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+4 4 CELL 4: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+5 5 CELL 5: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+6 6 CELL 6: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+7 7 CELL 7: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+8 8 CELL 8: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+9 9 CELL 9: NADIR-ONLY VIEW SST USED 3.7 MICRON CHANNEL
+10 10 CELL 1: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+11 11 CELL 2: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+12 12 CELL 3: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+13 13 CELL 4: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+14 14 CELL 5: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+15 15 CELL 6: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+16 16 CELL 7: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+17 17 CELL 8: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+18 18 CELL 9: DUAL VIEW SST USED 3.7 MICRON CHANNEL
+19 19 NADIR VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+20 20 FORWARD VIEW CONTAINS DAY-TIME DATA (NIGHT IF ZERO)
+21 21 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS ACQUIRED WHEN ERS PLATFORM NOT IN YAW-STEERING MODE
+22 22 RECORD CONTAINS CONTRIBUTIONS FROM INSTRUMENT SCANS FOR WHICH PRODUCT CONFIDENCE DATA SHOW QUALITY IS POOR OR UNKNOWN
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21072.table b/definitions/bufr/tables/0/wmo/26/codetables/21072.table
new file mode 100644
index 0000000..99e4b1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21072.table
@@ -0,0 +1,3 @@
+1 1 HEIGHT ERROR CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRATION
+2 2 MICROWAVE SOUNDER USED FOR TROPOSPHERE CORRECTION
+3 3 AGC OUTPUT CORRECTION APPLIED INSTEAD OF OPEN LOOP CALIBRATION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21073.table b/definitions/bufr/tables/0/wmo/26/codetables/21073.table
new file mode 100644
index 0000000..9538fa5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21073.table
@@ -0,0 +1,8 @@
+1 1 BLANK DATA RECORD
+2 2 TEST
+3 3 CALIBRATION (CLOSED LOOP)
+4 4 BITE
+5 5 ACQUISITION ON ICE
+6 6 ACQUISITION ON OCEAN
+7 7 TRACKING ON ICE
+8 8 TRACKING ON OCEAN
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21076.table b/definitions/bufr/tables/0/wmo/26/codetables/21076.table
new file mode 100644
index 0000000..bc52ac5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21076.table
@@ -0,0 +1,4 @@
+0 0 LINEAR
+1 1 LOGARITHMIC (BASE E)
+2 2 LOGARITHMIC (BASE 10)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21109.table b/definitions/bufr/tables/0/wmo/26/codetables/21109.table
new file mode 100644
index 0000000..deb577a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21109.table
@@ -0,0 +1,7 @@
+1 1 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+2 2 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+8 8 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+9 9 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+10 10 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+11 11 REPORTED WIND SPEED IS GREATER THAN 30 M S-1
+12 12 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M S-1
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21115.table b/definitions/bufr/tables/0/wmo/26/codetables/21115.table
new file mode 100644
index 0000000..9e90133
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21115.table
@@ -0,0 +1,10 @@
+1 1 SIGMA-0 MEASUREMENT IS NOT USABLE
+2 2 SIGNAL TO NOISE RATIO IS LOW
+3 3 SIGMA-0 IS NEGATIVE
+4 4 SIGMA-0 IS OUTSIDE OF ACCEPTABLE RANGE
+5 5 SCATTEROMETER PULSE QUALITY IS NOT ACCEPTABLE
+6 6 SIGMA-0 CELL LOCATION ALGORITHM DOES NOT CONVERGE
+7 7 FREQUENCY SHIFT LIES BEYOND THE RANGE OF THE X FACTOR TABLE
+8 8 SPACECRAFT TEMPERATURE IS BEYOND CALIBRATION COEFFICIENT RANGE
+9 9 NO APPLICABLE ALTITUDE RECORDS WERE FOUND FOR THIS SIGMA-0
+10 10 INTERPOLATED EPHEMERIS DATA ARE NOT ACCEPTABLE FOR THIS SIGMA-0
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21116.table b/definitions/bufr/tables/0/wmo/26/codetables/21116.table
new file mode 100644
index 0000000..10b5c53
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21116.table
@@ -0,0 +1,16 @@
+1 1 CALIBRATION/MEASUREMENT PULSE FLAG (1)
+2 2 CALIBRATION/MEASUREMENT PULSE FLAG (2)
+3 3 OUTER ANTENNA BEAM
+4 4 SIGMA-0 CELL IS AFT OF SPACECRAFT
+5 5 CURRENT MODE (1)
+6 6 CURRENT MODE (2)
+7 7 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (1)
+8 8 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (2)
+9 9 EFFECTIVE GATE WIDTH - SLICE RESOLUTION (3)
+10 10 LOW RESOLUTION MODE - WHOLE PULSE DATA
+11 11 SCATTEROMETER ELECTRONIC SUBSYSTEM B
+12 12 ALTERNATE SPIN RATE - 19.8 RPM
+13 13 RECEIVER PROTECTION ON
+14 14 SLICES PER COMPOSITE FLAG (1)
+15 15 SLICES PER COMPOSITE FLAG (2)
+16 16 SLICES PER COMPOSITE FLAG (3)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21119.table b/definitions/bufr/tables/0/wmo/26/codetables/21119.table
new file mode 100644
index 0000000..e17e3c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21119.table
@@ -0,0 +1,14 @@
+0 0 RESERVED
+1 1 SASS
+2 2 SASS2
+3 3 NSCAT0
+4 4 NSCAT1
+5 5 NSCAT2
+6 6 QSCAT0
+7 7 QSCAT1
+31 31 CMOD1
+32 32 CMOD2
+33 33 CMOD3
+34 34 CMOD4
+35 35 CMOD5
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21144.table b/definitions/bufr/tables/0/wmo/26/codetables/21144.table
new file mode 100644
index 0000000..1f082e6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21144.table
@@ -0,0 +1 @@
+1 1 RAIN
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21148.table b/definitions/bufr/tables/0/wmo/26/codetables/21148.table
new file mode 100644
index 0000000..11413ed
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21148.table
@@ -0,0 +1,2 @@
+1 1 NON SHORT SCALE VARIATION
+2 2 SHORT SCALE VARIATION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2115.table b/definitions/bufr/tables/0/wmo/26/codetables/2115.table
new file mode 100644
index 0000000..c7e866c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2115.table
@@ -0,0 +1,7 @@
+0 0 PDB
+1 1 RSOIS
+2 2 ASOS
+3 3 PSYCHROMETER
+4 4 F420
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21150.table b/definitions/bufr/tables/0/wmo/26/codetables/21150.table
new file mode 100644
index 0000000..8510046
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21150.table
@@ -0,0 +1,4 @@
+0 0 DATA FROM SINGLE GROUND STATION (NO CO-LOCATION)
+1 1 DATA FROM MULTIPLE GROUND STATION (CO-LOCATED DATA)
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21155.table b/definitions/bufr/tables/0/wmo/26/codetables/21155.table
new file mode 100644
index 0000000..a7837cf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21155.table
@@ -0,0 +1,16 @@
+1 1 NOT ENOUGH GOOD SIGMA-0 AVAILABLE FOR WIND RETRIEVAL
+2 2 POOR AZIMUTH DIVERSITY AMONG SIGMA-0 FOR WIND RETRIEVAL
+3 3 ANY BEAM NOISE CONTENT ABOVE THRESHOLD
+4 4 PRODUCT MONITORING NOT USED
+5 5 PRODUCT MONITORING FLAG
+6 6 KNMI QUALITY CONTROL FAILS
+7 7 VARIATIONAL QUALITY CONTROL FAILS
+8 8 SOME PORTION OF WIND VECTOR CELL IS OVER LAND
+9 9 SOME PORTION OF WIND VECTOR CELL IS OVER ICE
+10 10 WIND RETRIEVAL NOT PERFORMED FOR WIND VECTOR CELL
+11 11 REPORTED WIND SPEED IS GREATER THAN 30 M/S
+12 12 REPORTED WIND SPEED IS LESS THAN OR EQUAL TO 3 M/S
+13 13 RAIN FLAG FOR THE WIND VECTOR CELL IS NOT USABLE
+14 14 RAIN FLAG ALGORITHM DETECTS RAIN
+15 15 NO METEOROLOGICAL BACKGROUND USED
+16 16 DATA ARE REDUNDANT
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21158.table b/definitions/bufr/tables/0/wmo/26/codetables/21158.table
new file mode 100644
index 0000000..dd53c51
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21158.table
@@ -0,0 +1,4 @@
+0 0 ACCEPTABLE
+1 1 NOT ACCEPTABLE
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21159.table b/definitions/bufr/tables/0/wmo/26/codetables/21159.table
new file mode 100644
index 0000000..1703f9b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21159.table
@@ -0,0 +1,4 @@
+0 0 GOOD
+1 1 USABLE
+2 2 BAD
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/21169.table b/definitions/bufr/tables/0/wmo/26/codetables/21169.table
new file mode 100644
index 0000000..9b93444
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/21169.table
@@ -0,0 +1,4 @@
+0 0 NO ICE PRESENT
+1 1 ICE PRESENT
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2119.table b/definitions/bufr/tables/0/wmo/26/codetables/2119.table
new file mode 100644
index 0000000..0640af6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2119.table
@@ -0,0 +1,8 @@
+0 0 INTERMEDIATE FREQUENCY CALIBRATION MODE (IF CAL)
+1 1 BUILT-IN TEST EQUIPMENT DIGITAL (BITE DGT)
+2 2 BUILT-IN TEST EQUIPMENT RADIO FREQUENCY (BITE RF)
+3 3 PRESET TRACKING (PSET TRK)
+4 4 PRESET LOOP OUT
+5 5 ACQUISITION
+6 6 TRACKING
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2131.table b/definitions/bufr/tables/0/wmo/26/codetables/2131.table
new file mode 100644
index 0000000..f4336ef
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2131.table
@@ -0,0 +1 @@
+1 1 STC OPERATIONAL
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2137.table b/definitions/bufr/tables/0/wmo/26/codetables/2137.table
new file mode 100644
index 0000000..40d33fd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2137.table
@@ -0,0 +1,4 @@
+1 1 3:2
+2 2 4:3
+3 3 5:4
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2138.table b/definitions/bufr/tables/0/wmo/26/codetables/2138.table
new file mode 100644
index 0000000..a574506
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2138.table
@@ -0,0 +1,3 @@
+1 1 CLOCKWISE ROTATION
+2 2 COUNTERCLOCKWISE ROTATION
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2139.table b/definitions/bufr/tables/0/wmo/26/codetables/2139.table
new file mode 100644
index 0000000..f6cf802
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2139.table
@@ -0,0 +1,3 @@
+0 0 SIRAL NOMINAL
+1 1 SIRAL REDUNDANT
+2 2 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2143.table b/definitions/bufr/tables/0/wmo/26/codetables/2143.table
new file mode 100644
index 0000000..975d068
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2143.table
@@ -0,0 +1,21 @@
+0 0 RESERVED
+1 1 BREWER SPECTROPHOTOMETER
+2 2 CAVER TEICHERT
+3 3 DOBSON
+4 4 DOBSON (JAPAN)
+5 5 EHMET
+6 6 FECKER TELESCOPE
+7 7 HOELPER
+8 8 JODMETER
+9 9 FILTER OZONOMETER M-83
+10 10 MAST
+11 11 OXFORD
+12 12 PAETZOLD
+13 13 REGENER
+14 14 RESERVED FOR FUTURE USE
+15 15 VASSY FILTER OZONOMETER
+16 16 CARBON IODIDE
+17 17 SURFACE OZONE BUBBLER
+18 18 FILTER OZONOMETER M-124
+19 19 ECC SONDE
+127 127 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2144.table b/definitions/bufr/tables/0/wmo/26/codetables/2144.table
new file mode 100644
index 0000000..5b0f37b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2144.table
@@ -0,0 +1,8 @@
+0 0 DIRECT SUN
+1 1 DIRECT SUN, ATTENUATOR #1
+2 2 DIRECT SUN, ATTENUATOR #2
+3 3 FOCUSED MOON
+4 4 FOCUSED SUN
+5 5 FOCUSED SUN CORRECTED WITH ADJACENT SKY MEASUREMENTS
+6 6 ZENITH SKY
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2145.table b/definitions/bufr/tables/0/wmo/26/codetables/2145.table
new file mode 100644
index 0000000..1944e69
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2145.table
@@ -0,0 +1,9 @@
+0 0 WAVELENGTHS AD ORDINARY SETTING
+1 1 WAVELENGTHS BD ORDINARY SETTING
+2 2 WAVELENGTHS CD ORDINARY SETTING
+3 3 WAVELENGTHS CC' ORDINARY SETTING
+4 4 WAVELENGTHS AD FOCUSED IMAGE
+5 5 WAVELENGTHS BD FOCUSED IMAGE
+6 6 WAVELENGTHS CD FOCUSED IMAGE
+7 7 WAVELENGTHS CC' FOCUSED IMAGE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2146.table b/definitions/bufr/tables/0/wmo/26/codetables/2146.table
new file mode 100644
index 0000000..871b357
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2146.table
@@ -0,0 +1,11 @@
+0 0 ON DIRECT SUN
+1 1 ON DIRECT MOON
+2 2 ON BLUE ZENITH SKY
+3 3 ON ZENITH CLOUD (UNIFORM STRATIFIED LAYER OF SMALL OPACITY)
+4 4 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF MEDIUM OPACITY)
+5 5 ON ZENITH CLOUD (UNIFORM OR MODERATELY VARIABLE LAYER OF LARGE OPACITY)
+6 6 ON ZENITH CLOUD (HIGHLY VARIABLE OPACITY, WITH OR WITHOUT PRECIPITATION)
+7 7 ON ZENITH CLOUD (FOG)
+8 8 ON ZENITH HAZE
+9 9 ON DIRECT SUN THROUGH THIN CLOUD, FOG OR HAZE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2147.table b/definitions/bufr/tables/0/wmo/26/codetables/2147.table
new file mode 100644
index 0000000..4ff1c92
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2147.table
@@ -0,0 +1,11 @@
+0 0 RESERVED
+1 1 DIRECT LEASED CIRCUIT
+2 2 DIALLED UP CONNECTION
+3 3 INTERNET ISP
+4 4 DCP VIA SATELLITE (MTSAT, METEOSAT, ETC.)
+5 5 VSAT
+6 6 GAN,* BGAN**
+7 7 THISS TERMINAL
+8 8 IRIDIUM SATELLITES
+9 9 MOBILE TELEPHONY
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2148.table b/definitions/bufr/tables/0/wmo/26/codetables/2148.table
new file mode 100644
index 0000000..7d8ca51
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2148.table
@@ -0,0 +1,12 @@
+0 0 RESERVED
+1 1 ARGOS
+2 2 GPS
+3 3 GOES DCP
+4 4 METEOSAT DCP
+5 5 ORBCOMM
+6 6 INMARSAT
+7 7 IRIDIUM
+8 8 IRIDIUM AND GPS
+9 9 ARGOS-3
+10 10 ARGOS-4
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2149.table b/definitions/bufr/tables/0/wmo/26/codetables/2149.table
new file mode 100644
index 0000000..04638d2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2149.table
@@ -0,0 +1,38 @@
+0 0 UNSPECIFIED DRIFTING BUOY
+1 1 STANDARD LAGRANGIAN DRIFTER (GLOBAL DRIFTER PROGRAMME)
+2 2 STANDARD FGGE TYPE DRIFTING BUOY (NON-LAGRANGIAN METEOROLOGICAL DRIFTING BUOY)
+3 3 WIND MEASURING FGGE TYPE DRIFTING BUOY (NON-LAGRANGIAN METEOROLOGICAL DRIFTING BUOY)
+4 4 ICE DRIFTER
+5 5 SVPG STANDARD LAGRANGIAN DRIFTER WITH GPS
+6 6 SVP-HR DRIFTER WITH HIGH-RESOLUTION TEMPERATURE OR THERMISTOR STRING
+7 7 RESERVED
+8 8 UNSPECIFIED SUBSURFACE FLOAT
+9 9 SOFAR
+10 10 ALACE
+11 11 MARVOR
+12 12 RAFOS
+13 13 PROVOR
+14 14 SOLO
+15 15 APEX
+16 16 UNSPECIFIED MOORED BUOY
+17 17 NOMAD
+18 18 3-METRE DISCUS
+19 19 10-12-METRE DISCUS
+20 20 ODAS 30 SERIES
+21 21 ATLAS (E.G. TAO AREA)
+22 22 TRITON BUOY
+23 23 FLEX MOORING (E.G. TIP AREA)
+24 24 OMNIDIRECTIONAL WAVERIDER
+25 25 DIRECTIONAL WAVERIDER
+26 26 SUBSURFACE ARGO FLOAT
+27 27 PALACE
+28 28 NEMO
+29 29 NINJA
+30 30 ICE BUOY/FLOAT (POPS OR ITP)
+34 34 MOORING OCEANOGRAPHIC
+35 35 MOORING METEOROLOGICAL
+36 36 MOORING MULTIDISCIPLINARY (OCEANSITES)
+37 37 MOORING TIDE GAUGE OR TSUNAMI BUOY
+38 38 ICE BEACON
+39 39 ICE MASS BALANCE BUOY
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2150.table b/definitions/bufr/tables/0/wmo/26/codetables/2150.table
new file mode 100644
index 0000000..8193b57
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2150.table
@@ -0,0 +1,55 @@
+0 0 RESERVED
+1 1 HIRS 1
+2 2 HIRS 2
+3 3 HIRS 3
+4 4 HIRS 4
+5 5 HIRS 5
+6 6 HIRS 6
+7 7 HIRS 7
+8 8 HIRS 8
+9 9 HIRS 9
+10 10 HIRS 10
+11 11 HIRS 11
+12 12 HIRS 12
+13 13 HIRS 13
+14 14 HIRS 14
+15 15 HIRS 15
+16 16 HIRS 16
+17 17 HIRS 17
+18 18 HIRS 18
+19 19 HIRS 19
+20 20 HIRS 20
+21 21 MSU 1
+22 22 MSU 2
+23 23 MSU 3
+24 24 MSU 4
+25 25 SSU 1
+26 26 SSU 2
+27 27 SSU 3
+28 28 AMSU-A 1
+29 29 AMSU-A 2
+30 30 AMSU-A 3
+31 31 AMSU-A 4
+32 32 AMSU-A 5
+33 33 AMSU-A 6
+34 34 AMSU-A 7
+35 35 AMSU-A 8
+36 36 AMSU-A 9
+37 37 AMSU-A 10
+38 38 AMSU-A 11
+39 39 AMSU-A 12
+40 40 AMSU-A 13
+41 41 AMSU-A 14
+42 42 AMSU-A 15
+43 43 AMSU-B 1 / MHS 1
+44 44 AMSU-B 2 / MHS 2
+45 45 AMSU-B 3 / MHS 3
+46 46 AMSU-B 4 / MHS 4
+47 47 AMSU-B 5 / MHS 5
+48 48 AVHRR 1
+49 49 AVHRR 2
+50 50 AVHRR 3A
+51 51 AVHRR 3B
+52 52 AVHRR 4
+53 53 AVHRR 5
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2151.table b/definitions/bufr/tables/0/wmo/26/codetables/2151.table
new file mode 100644
index 0000000..45c80df
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2151.table
@@ -0,0 +1,11 @@
+0 0 HIRS
+1 1 MSU
+2 2 SSU
+3 3 AMSU-A1-1
+4 4 AMSU-A1-2
+5 5 AMSU-A2
+6 6 AMSU-B
+7 7 AVHRR
+8 8 RESERVED
+9 9 MHS
+2047 2047 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2152.table b/definitions/bufr/tables/0/wmo/26/codetables/2152.table
new file mode 100644
index 0000000..880c384
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2152.table
@@ -0,0 +1,13 @@
+1 1 HIGH-RESOLUTION INFRARED SOUNDER (HIRS)
+2 2 MICROWAVE SOUNDING UNIT (MSU)
+3 3 STRATOSPHERIC SOUNDING UNIT (SSU)
+4 4 AMI WIND MODE
+5 5 AMI WAVE MODE
+6 6 AMI IMAGE MODE
+7 7 RADAR ALTIMETER
+8 8 ATSR
+9 9 GEOSTATIONARY IMAGER
+10 10 GEOSTATIONARY SOUNDER
+11 11 GEOSTATIONARY EARTH RADIATION (GERB)
+12 12 MULTI-CHANNEL SCANNING RADIOMETER
+13 13 POLAR-ORBITING IMAGER
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2158.table b/definitions/bufr/tables/0/wmo/26/codetables/2158.table
new file mode 100644
index 0000000..97c4449
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2158.table
@@ -0,0 +1,8 @@
+1 1 MISMATCH IN RED VEC HPA
+2 2 MISMATCH IN RED VEC RFSS
+3 3 PTR CALIBRATION BAND 320 MHZ (KU)
+4 4 PTR CALIBRATION BAND 80 MHZ (KU)
+5 5 PTR CALIBRATION BAND 20 MHZ (KU)
+6 6 PTR CALIBRATION BAND 160 MHZ (S)
+7 7 KU FLIGHT CALIBRATION PARAMETERS AVAILABLE
+8 8 S FLIGHT CALIBRATION PARAMETERS AVAILABLE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2159.table b/definitions/bufr/tables/0/wmo/26/codetables/2159.table
new file mode 100644
index 0000000..63cb87c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2159.table
@@ -0,0 +1,7 @@
+1 1 TEMPERATURE INCONSISTENCY
+2 2 DATA IS MISSING
+3 3 REDUNDANCY CHANNEL
+4 4 POWER BUS PROTECTION
+5 5 OVERVOLTAGE/OVERLOAD PROTECTION
+6 6 RESERVED
+7 7 RESERVED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2160.table b/definitions/bufr/tables/0/wmo/26/codetables/2160.table
new file mode 100644
index 0000000..fd7f372
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2160.table
@@ -0,0 +1,11 @@
+0 0 RESERVED
+1 1 10 TO LESS THAN 20 MM
+2 2 RESERVED
+3 3 20 TO LESS THAN 40 MM
+4 4 RESERVED
+5 5 40 TO LESS THAN 60 MM
+6 6 RESERVED
+7 7 60 TO LESS THAN 90 MM
+8 8 90 TO LESS THAN 110 MM
+9 9 110 MM AND GREATER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2163.table b/definitions/bufr/tables/0/wmo/26/codetables/2163.table
new file mode 100644
index 0000000..8cac631
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2163.table
@@ -0,0 +1,16 @@
+0 0 AUTO EDITOR
+1 1 IRW HEIGHT ASSIGNMENT
+2 2 WV HEIGHT ASSIGNMENT
+3 3 H2O INTERCEPT HEIGHT ASSIGNMENT
+4 4 CO2 SLICING HEIGHT ASSIGNMENT
+5 5 LOW PIXEL MAX GRADIENT
+6 6 HIGHER PIXEL MAX GRADIENT
+7 7 PRIMARY HEIGHT ASSIGNMENT
+8 8 LAYER THICKNESS ASSIGNMENT
+9 9 CUMULATIVE CONTRIBUTION FUNCTION - 10 PER CENT HEIGHT
+10 10 CUMULATIVE CONTRIBUTION FUNCTION - 50 PER CENT HEIGHT
+11 11 CUMULATIVE CONTRIBUTION FUNCTION - 90 PER CENT HEIGHT
+12 12 CUMULATIVE CONTRIBUTION FUNCTION - HEIGHT OF MAXIMUM GRADIENT
+13 13 IR / TWO WV CHANNEL RATIOING METHOD
+14 14 COMPOSITE HEIGHT ASSIGNMENT
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2164.table b/definitions/bufr/tables/0/wmo/26/codetables/2164.table
new file mode 100644
index 0000000..01dc970
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2164.table
@@ -0,0 +1,4 @@
+0 0 LP - NORMS LEAST SQUARE MINIMUM
+1 1 EN - EUCLIDEAN NORM WITH RADIANCE CORRELATION
+2 2 CC - CROSS CORRELATION
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2165.table b/definitions/bufr/tables/0/wmo/26/codetables/2165.table
new file mode 100644
index 0000000..628be0e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2165.table
@@ -0,0 +1,7 @@
+1 1 CLEAR PATH
+2 2 PARTLY CLOUDY PATH
+3 3 CLOUDY PATH
+4 4 APODIZED
+5 5 UNAPODIZED
+6 6 RECONSTRUCTED
+7 7 CLOUD CLEARED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2166.table b/definitions/bufr/tables/0/wmo/26/codetables/2166.table
new file mode 100644
index 0000000..efac38f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2166.table
@@ -0,0 +1,6 @@
+0 0 TYPE NOT DEFINED
+1 1 AUTOMATED STATISTICAL REGRESSION
+2 2 CLEAR PATH
+3 3 PARTLY CLOUDY PATH
+4 4 CLOUDY PATH
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2167.table b/definitions/bufr/tables/0/wmo/26/codetables/2167.table
new file mode 100644
index 0000000..acb2f9d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2167.table
@@ -0,0 +1,4 @@
+0 0 METHOD NOT DEFINED
+1 1 1B RAW RADIANCE
+2 2 PROCESSED RADIANCE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2169.table b/definitions/bufr/tables/0/wmo/26/codetables/2169.table
new file mode 100644
index 0000000..bd31667
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2169.table
@@ -0,0 +1,5 @@
+0 0 CUP ROTOR
+1 1 PROPELLER ROTOR
+2 2 WIND OBSERVATION THROUGH AMBIENT NOISE (WOTAN)
+3 3 SONIC
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2170.table b/definitions/bufr/tables/0/wmo/26/codetables/2170.table
new file mode 100644
index 0000000..05bab00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2170.table
@@ -0,0 +1,5 @@
+0 0 SPECTRASENSORS WVSS-II, VERSION 1
+1 1 SPECTRASENSORS WVSS-II, VERSION 2
+2 2 SPECTRASENSORS WVSS-II, VERSION 3
+62 62 OTHER
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2172.table b/definitions/bufr/tables/0/wmo/26/codetables/2172.table
new file mode 100644
index 0000000..3c3641a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2172.table
@@ -0,0 +1,4 @@
+0 0 RESERVED
+1 1 RETRIEVAL FROM A NADIR SOUNDING
+2 2 RETRIEVAL FROM A LIMB SOUNDING
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2175.table b/definitions/bufr/tables/0/wmo/26/codetables/2175.table
new file mode 100644
index 0000000..2cf2a3d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2175.table
@@ -0,0 +1,9 @@
+0 0 MANUAL MEASUREMENT
+1 1 TIPPING BUCKET METHOD
+2 2 WEIGHING METHOD
+3 3 OPTICAL METHOD
+4 4 PRESSURE METHOD
+5 5 FLOAT METHOD
+6 6 DROP COUNTER METHOD
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2176.table b/definitions/bufr/tables/0/wmo/26/codetables/2176.table
new file mode 100644
index 0000000..2c27a6f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2176.table
@@ -0,0 +1,6 @@
+0 0 MANUAL OBSERVATION
+1 1 VIDEO CAMERA METHOD
+2 2 INFRARED METHOD
+3 3 LASER METHOD
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2177.table b/definitions/bufr/tables/0/wmo/26/codetables/2177.table
new file mode 100644
index 0000000..e7bb67a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2177.table
@@ -0,0 +1,6 @@
+0 0 MANUAL OBSERVATION
+1 1 ULTRASONIC METHOD
+2 2 VIDEO CAMERA METHOD
+3 3 LASER METHOD
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2178.table b/definitions/bufr/tables/0/wmo/26/codetables/2178.table
new file mode 100644
index 0000000..f4f8b59
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2178.table
@@ -0,0 +1,5 @@
+0 0 MANUAL OBSERVATION
+1 1 OPTICAL METHOD
+2 2 CAPACITIVE METHOD
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2179.table b/definitions/bufr/tables/0/wmo/26/codetables/2179.table
new file mode 100644
index 0000000..9e9ba18
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2179.table
@@ -0,0 +1,6 @@
+0 0 MANUAL OBSERVATION
+1 1 VAISALA ALGORITHM
+2 2 ASOS (FAA) ALGORITHM
+3 3 AWOS (CANADA) ALGORITHM
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2180.table b/definitions/bufr/tables/0/wmo/26/codetables/2180.table
new file mode 100644
index 0000000..0b21b2c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2180.table
@@ -0,0 +1,8 @@
+0 0 MANUAL OBSERVATION
+1 1 OPTICAL SCATTER SYSTEM COMBINED WITH PRECIPITATION OCCURRENCE SENSING SYSTEM
+2 2 FORWARD AND/OR BACKSCATTER SYSTEM OF VISIBLE LIGHT
+3 3 FORWARD AND/OR BACKSCATTER SYSTEM OF INFRARED LIGHT
+4 4 INFRARED LIGHT EMITTING DIODE (IRED) SYSTEM
+5 5 DOPPLER RADAR SYSTEM
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2181.table b/definitions/bufr/tables/0/wmo/26/codetables/2181.table
new file mode 100644
index 0000000..5096dc4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2181.table
@@ -0,0 +1,5 @@
+1 1 RAIN DETECTOR
+2 2 FREEZING RAIN SENSOR
+3 3 ICE DETECTION SENSOR
+4 4 HAIL AND ICE PELLET SENSOR
+20 20 OTHERS
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2182.table b/definitions/bufr/tables/0/wmo/26/codetables/2182.table
new file mode 100644
index 0000000..4ffab26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2182.table
@@ -0,0 +1,7 @@
+0 0 MANUAL MEASUREMENT
+1 1 TRANSMISSOMETER SYSTEM (BASE > 25 M)
+2 2 TRANSMISSOMETER SYSTEM (BASE < 25 M)
+3 3 FORWARD SCATTER SYSTEM
+4 4 BACKSCATTER SYSTEM
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2183.table b/definitions/bufr/tables/0/wmo/26/codetables/2183.table
new file mode 100644
index 0000000..a804ea1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2183.table
@@ -0,0 +1,9 @@
+0 0 MANUAL OBSERVATION
+1 1 CEILOMETER SYSTEM
+2 2 INFRARED CAMERA SYSTEM
+3 3 MICROWAVE VISUAL CAMERA SYSTEM
+4 4 SKY IMAGER SYSTEM
+5 5 VIDEO TIME-LAPSED CAMERA SYSTEM
+6 6 MICROPULSE LIDAR (MPL) SYSTEM
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2184.table b/definitions/bufr/tables/0/wmo/26/codetables/2184.table
new file mode 100644
index 0000000..cf5ee84
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2184.table
@@ -0,0 +1,9 @@
+0 0 MANUAL OBSERVATION
+1 1 LIGHTNING IMAGING SENSOR
+2 2 ELECTRICAL STORM IDENTIFICATION SENSOR
+3 3 MAGNETIC FINDER SENSOR
+4 4 LIGHTNING STRIKE SENSOR
+5 5 FLASH COUNTER
+6 6 ATDNET VLF WAVEFORM CORRELATED SENSOR
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2185.table b/definitions/bufr/tables/0/wmo/26/codetables/2185.table
new file mode 100644
index 0000000..45b0810
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2185.table
@@ -0,0 +1,7 @@
+0 0 MANUAL MEASUREMENT
+1 1 BALANCED FLOATING METHOD
+2 2 PRESSURE METHOD
+3 3 ULTRASONIC METHOD
+4 4 HYDRAULIC METHOD
+14 14 OTHERS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2186.table b/definitions/bufr/tables/0/wmo/26/codetables/2186.table
new file mode 100644
index 0000000..05e1a36
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2186.table
@@ -0,0 +1,23 @@
+1 1 PRECIPITATION-UNKNOWN TYPE
+2 2 LIQUID PRECIPITATION NOT FREEZING
+3 3 LIQUID FREEZING PRECIPITATION
+4 4 DRIZZLE
+5 5 RAIN
+6 6 SOLID PRECIPITATION
+7 7 SNOW
+8 8 SNOW GRAINS
+9 9 SNOW PELLETS
+10 10 ICE PELLETS
+11 11 ICE CRYSTALS
+12 12 DIAMOND DUST
+13 13 SMALL HAIL
+14 14 HAIL
+15 15 GLAZE
+16 16 RIME
+17 17 SOFT RIME
+18 18 HARD RIME
+19 19 CLEAR ICE
+20 20 WET SNOW
+21 21 HOAR FROST
+22 22 DEW
+23 23 WHITE DEW
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2187.table b/definitions/bufr/tables/0/wmo/26/codetables/2187.table
new file mode 100644
index 0000000..def3d2f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2187.table
@@ -0,0 +1,11 @@
+1 1 DUST/SAND WHIRL
+2 2 SQUALLS
+3 3 SAND STORM
+4 4 DUST STORM
+5 5 LIGHTNING - CLOUD TO SURFACE
+6 6 LIGHTNING - CLOUD TO CLOUD
+7 7 LIGHTNING - DISTANT
+8 8 THUNDERSTORM
+9 9 FUNNEL CLOUD NOT TOUCHING SURFACE
+10 10 FUNNEL CLOUD TOUCHING SURFACE
+11 11 SPRAY
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2188.table b/definitions/bufr/tables/0/wmo/26/codetables/2188.table
new file mode 100644
index 0000000..bb8114c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2188.table
@@ -0,0 +1,10 @@
+1 1 FOG
+2 2 ICE FOG
+3 3 STEAM FOG
+7 7 MIST
+8 8 HAZE
+9 9 SMOKE
+10 10 VOLCANIC ASH
+11 11 DUST
+12 12 SAND
+13 13 SNOW
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2189.table b/definitions/bufr/tables/0/wmo/26/codetables/2189.table
new file mode 100644
index 0000000..61ac9e3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2189.table
@@ -0,0 +1,4 @@
+1 1 MANUAL OBSERVATION
+2 2 ALL LIGHTNING STRIKES WITHOUT DISCRIMINATION
+3 3 LIGHTNING STRIKES CLOUD TO GROUND ONLY
+4 4 ALL LIGHTNING STRIKES WITH DISCRIMINATION BETWEEN CLOUD TO GROUND AND CLOUD TO CLOUD
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/2191.table b/definitions/bufr/tables/0/wmo/26/codetables/2191.table
new file mode 100644
index 0000000..2e96256
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/2191.table
@@ -0,0 +1,4 @@
+0 0 GEOPOTENTIAL HEIGHT CALCULATED FROM PRESSURE
+1 1 GEOPOTENTIAL HEIGHT CALCULATED FROM GPS HEIGHT
+2 2 GEOPOTENTIAL HEIGHT CALCULATED FROM RADAR HEIGHT
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22056.table b/definitions/bufr/tables/0/wmo/26/codetables/22056.table
new file mode 100644
index 0000000..28ddbf4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22056.table
@@ -0,0 +1,4 @@
+0 0 UPWARDS PROFILE
+1 1 DOWNWARDS PROFILE
+2 2 HORIZONTAL
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22060.table b/definitions/bufr/tables/0/wmo/26/codetables/22060.table
new file mode 100644
index 0000000..b73ad32
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22060.table
@@ -0,0 +1,4 @@
+0 0 DROGUE IS DETACHED
+1 1 DROGUE IS ATTACHED
+2 2 DROGUE STATUS UNKNOWN
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22061.table b/definitions/bufr/tables/0/wmo/26/codetables/22061.table
new file mode 100644
index 0000000..aa8c62b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22061.table
@@ -0,0 +1,11 @@
+0 0 CALM (GLASSY)
+1 1 CALM (RIPPLED)
+2 2 SMOOTH (WAVELETS)
+3 3 SLIGHT
+4 4 MODERATE
+5 5 ROUGH
+6 6 VERY ROUGH
+7 7 HIGH
+8 8 VERY HIGH
+9 9 PHENOMENAL
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22067.table b/definitions/bufr/tables/0/wmo/26/codetables/22067.table
new file mode 100644
index 0000000..621b7a4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22067.table
@@ -0,0 +1,101 @@
+1 1 SIPPICAN T-4
+2 2 SIPPICAN T-4
+11 11 SIPPICAN T-5
+21 21 SIPPICAN FAST DEEP
+31 31 SIPPICAN T-6
+32 32 SIPPICAN T-6
+41 41 SIPPICAN T-7
+42 42 SIPPICAN T-7
+51 51 SIPPICAN DEEP BLUE
+52 52 SIPPICAN DEEP BLUE
+61 61 SIPPICAN T-10
+71 71 SIPPICAN T-11
+81 81 SIPPICAN AXBT (300 M PROBES)
+201 201 TSK T-4
+202 202 TSK T-4
+211 211 TSK T-6
+212 212 TSK T-6
+221 221 TSK T-7
+222 222 TSK T-7
+231 231 TSK T-5
+241 241 TSK T-10
+251 251 TSK DEEP BLUE
+252 252 TSK DEEP BLUE
+261 261 TSK AXBT
+401 401 SPARTON XBT-1
+411 411 SPARTON XBT-3
+421 421 SPARTON XBT-4
+431 431 SPARTON XBT-5
+441 441 SPARTON XBT-5DB
+451 451 SPARTON XBT-6
+461 461 SPARTON XBT-7
+462 462 SPARTON XBT-7
+471 471 SPARTON XBT-7DB
+481 481 SPARTON XBT-10
+491 491 SPARTON XBT-20
+501 501 SPARTON XBT-20DB
+510 510 SPARTON 536 AXBT
+700 700 SIPPICAN XCTD STANDARD
+710 710 SIPPICAN XCTD DEEP
+720 720 SIPPICAN AXCTD
+730 730 SIPPICAN SXCTD
+741 741 TSK XCTD/XCTD-1
+742 742 TSK XCTD-2
+743 743 TSK XCTD-2F
+744 744 TSK XCTD-3
+745 745 TSK XCTD-4
+751 751 TSK AXCTD
+780 780 SEA-BIRD SBE21 SEACAT THERMOSALINOGRAPH
+781 781 SEA-BIRD SBE45 MICROTSG THERMOSALINOGRAPH
+800 800 MECHANICAL BT
+810 810 HYDROCAST
+820 820 THERMISTOR CHAIN
+825 825 TEMPERATURE (SONIC) AND PRESSURE PROBES
+830 830 CTD
+831 831 CTD-P-ALACE FLOAT
+837 837 ARVOR_C, SBE CONDUCTIVITY SENSOR
+838 838 ARVOR_D, SBE CONDUCTIVITY SENSOR
+839 839 PROVOR–II, SBE CONDUCTIVITY SENSOR
+840 840 PROVOR, NO CONDUCTIVITY SENSOR
+841 841 PROVOR, SEA-BIRD CONDUCTIVITY SENSOR
+842 842 PROVOR, FSI CONDUCTIVITY SENSOR
+843 843 POLAR OCEAN PROFILING SYSTEM (POPS), PROVOR, SBE CTD
+844 844 PROFILING FLOAT, ARVOR, SEA-BIRD CONDUCTIVITY SENSOR
+845 845 WEBB RESEARCH, NO CONDUCTIVITY SENSOR
+846 846 WEBB RESEARCH, SEA-BIRD CONDUCTIVITY SENSOR
+847 847 WEBB RESEARCH, FSI CONDUCTIVITY SENSOR
+848 848 APEX–EM, SBE CONDUCTIVITY SENSOR
+849 849 APEX_D, SBE CONDUCTIVITY SENSOR
+850 850 SOLO, NO CONDUCTIVITY SENSOR
+851 851 SOLO, SEA-BIRD CONDUCTIVITY SENSOR
+852 852 SOLO, FSI CONDUCTIVITY SENSOR
+853 853 PROFILING FLOAT, SOLO2 (SCRIPPS), SEA-BIRD CONDUCTIVITY SENSOR
+854 854 S2A, SBE CONDUCTIVITY SENSOR
+855 855 PROFILING FLOAT, NINJA, NO CONDUCTIVITY SENSOR
+856 856 PROFILING FLOAT, NINJA, SBE CONDUCTIVITY SENSOR
+857 857 PROFILING FLOAT, NINJA, FSI CONDUCTIVITY SENSOR
+858 858 PROFILING FLOAT, NINJA, TSK CONDUCTIVITY SENSOR
+859 859 PROFILING FLOAT, NEMO, NO CONDUCTIVITY SENSOR
+860 860 PROFILING FLOAT, NEMO, SBE CONDUCTIVITY SENSOR
+861 861 PROFILING FLOAT, NEMO, FSI CONDUCTIVITY SENSOR
+862 862 SOLO_D, SBE CONDUCTIVITY SENSOR
+863 863 NAVIS–A, SBE CONDUCTIVITY SENSOR
+864 864 NINJA_D, SBE CONDUCTIVITY SENSOR
+865 865 NOVA, SBE CONDUCTIVITY SENSOR
+866 866 ALAMO, NO CONDUCTIVITY SENSOR
+867 867 ALAMO, RBR CONDUCTIVITY SENSOR
+868 868 ALAMO, SBE CONDUCTIVITY SENSOR
+900 900 SIPPICAN LMP-5 XBT
+901 901 ICE-TETHERED PROFILER (ITP), SBE CTD
+902 902 BROOKE OCEAN MOVING VESSEL PROFILER (MVP)
+903 903 SEA-BIRD CTD
+904 904 AML OCEANOGRAPHIC CTD
+905 905 FALMOUTH SCIENTIFIC CTD
+906 906 OCEAN SENSORS CTD
+907 907 VALEPORT CTD
+908 908 OCEANSCIENCE MVP
+909 909 IDRONAUT CTD
+910 910 SEA-BIRD SBE 38
+995 995 INSTRUMENT ATTACHED TO MARINE MAMMALS
+996 996 INSTRUMENT ATTACHED TO ANIMALS OTHER THAN MARINE MAMMALS
+1023 1023 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22068.table b/definitions/bufr/tables/0/wmo/26/codetables/22068.table
new file mode 100644
index 0000000..f6ddeb2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22068.table
@@ -0,0 +1,43 @@
+1 1 SIPPICAN STRIP CHART RECORDER
+2 2 SIPPICAN MK2A/SSQ-61
+3 3 SIPPICAN MK-9
+4 4 SIPPICAN AN/BHQ-7/MK8
+5 5 SIPPICAN MK-12
+6 6 SIPPICAN MK-21
+7 7 SIPPICAN MK-8 LINEAR RECORDER
+8 8 SIPPICAN MK-10
+10 10 SPARTON SOC BT/SV PROCESSOR MODEL 100
+11 11 LOCKHEED-SANDERS MODEL OL5005
+20 20 ARGOS XBT-ST
+21 21 CLS-ARGOS/PROTECNO XBT-ST MODEL-1
+22 22 CLS-ARGOS/PROTECNO XBT-ST MODEL-2
+30 30 BATHY SYSTEMS SA-810
+31 31 SCRIPPS METROBYTE CONTROLLER
+32 32 MURAYAMA DENKI Z-60-16 III
+33 33 MURAYAMA DENKI Z-60-16 II
+34 34 PROTECNO ETSM2
+35 35 NAUTILUS MARINE SERVICE NMS-XBT
+40 40 TSK MK-2A
+41 41 TSK MK-2S
+42 42 TSK MK-30
+43 43 TSK MK-30N
+45 45 TSK MK-100
+46 46 TSK MK-130 COMPATIBLE RECORDER FOR BOTH XBT AND XCTD
+47 47 TSK MK-130A XCTD RECORDER
+48 48 TSK AXBT RECEIVER MK-300
+49 49 TSK MK-150/MK-150N COMPATIBLE RECORDER FOR BOTH XBT AND XCTD
+50 50 JMA ASTOS
+60 60 ARGOS COMMUNICATIONS, SAMPLING ON UP TRANSIT
+61 61 ARGOS COMMUNICATIONS, SAMPLING ON DOWN TRANSIT
+62 62 ORBCOMM COMMUNICATIONS, SAMPLING ON UP TRANSIT
+63 63 ORBCOMM COMMUNICATIONS, SAMPLING ON DOWN TRANSIT
+64 64 IRIDIUM COMMUNICATIONS, SAMPLING ON UP TRANSIT
+65 65 IRIDIUM COMMUNICATIONS, SAMPLING ON DOWN TRANSIT
+70 70 CSIRO DEVIL-1 XBT ACQUISITION SYSTEM
+71 71 CSIRO DEVIL-2 XBT ACQUISITION SYSTEM
+72 72 TURO/CSIRO QUOLL XBT ACQUISITION SYSTEM
+80 80 APPLIED MICROSYSTEMS LTD., MICRO-SVT&P
+81 81 SEA MAMMAL RESEARCH UNIT, UNIV. ST. ANDREWS, UK, UNCORRECTED SALINITY FROM A SEA MAMMAL MOUNTED INSTRUMENT
+82 82 SEA MAMMAL RESEARCH UNIT, UNIV. ST. ANDREWS, UK, CORRECTED SALINITY FROM A SEA MAMMAL MOUNTED INSTRUMENT
+99 99 UNKNOWN
+127 127 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22120.table b/definitions/bufr/tables/0/wmo/26/codetables/22120.table
new file mode 100644
index 0000000..8c747ce
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22120.table
@@ -0,0 +1,13 @@
+0 0 GOOD DATA
+1 1 MAXIMUM (HIGH) WATER LEVEL LIMIT EXCEEDED
+2 2 MINIMUM (LOW) WATER LEVEL LIMIT EXCEEDED
+3 3 RATE OF CHANGE LIMIT FOR WATER LEVEL EXCEEDED
+4 4 FLAT LIMIT FOR WATER LEVEL EXCEEDED
+5 5 OBSERVED MINUS PREDICTED WATER LEVEL VALUE LIMIT EXCEEDED
+6 6 OBSERVED VALUE FROM PRIMARY WATER LEVEL SENSOR MINUS BACKUP WATER LEVEL SENSOR
+7 7 VALUE EXCEEDED SPECIFIED TOLERANCE FROM EXPECTED VALUE
+8 8 WATER LEVEL QA PARAMETER (SIGMAS AND/OR OUTLIERS) LIMITS EXCEEDED
+9 9 SEA TEMPERATURE OUTSIDE OF EXPECTED RANGE
+10 10 MULTIPLE QC CHECKS (ABOVE) FAILED
+11 11 NO AUTOMATED WATER LEVEL CHECKS PERFORMED
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22121.table b/definitions/bufr/tables/0/wmo/26/codetables/22121.table
new file mode 100644
index 0000000..7d4dfa8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22121.table
@@ -0,0 +1,9 @@
+0 0 OPERATIONAL
+1 1 POSSIBLE CLOGGING PROBLEM OR OTHERWISE DEGRADED WATER LEVEL DATA
+2 2 POSSIBLE DATUM SHIFT
+3 3 UNKNOWN STATUS OF WATER LEVEL SENSOR
+4 4 SUSPECTED OR KNOWN SEA TEMPERATURE SENSOR PROBLEM
+5 5 MULTIPLE POSSIBLE PROBLEMS (ABOVE)
+6 6 BAD DATA - DO NOT DISSEMINATE!
+7 7 NO MANUAL WATER LEVEL CHECKS PERFORMED
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22122.table b/definitions/bufr/tables/0/wmo/26/codetables/22122.table
new file mode 100644
index 0000000..aa9d5eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22122.table
@@ -0,0 +1,8 @@
+0 0 GOOD DATA FROM ALL SENSORS
+1 1 WIND DIRECTION OUTSIDE OF ALLOWABLE RANGE
+2 2 WIND SPEED OUTSIDE OF EXPECTED RANGE
+3 3 BAROMETRIC PRESSURE OUTSIDE OF EXPECTED RANGE
+4 4 AIR TEMPERATURE OUTSIDE OF EXPECTED RANGE
+5 5 MULTIPLE SENSORS FAILED QC CHECKS
+6 6 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22123.table b/definitions/bufr/tables/0/wmo/26/codetables/22123.table
new file mode 100644
index 0000000..acfb616
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22123.table
@@ -0,0 +1,9 @@
+0 0 OPERATIONAL
+1 1 SUSPECTED OR KNOWN PROBLEM WITH WIND SENSOR
+2 2 SUSPECTED OR KNOWN PROBLEM WITH BAROMETRIC PRESSURE SENSOR
+3 3 SUSPECTED OR KNOWN PROBLEM WITH AIR TEMPERATURE SENSOR
+4 4 UNKNOWN STATUS OF ALL SENSORS
+5 5 SUSPECTED OR KNOWN PROBLEMS WITH MULTIPLE SENSORS
+6 6 BAD DATA - DO NOT DISSEMINATE!
+7 7 NO MANUAL METEOROLOGICAL DATA CHECKS PERFORMED
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/22178.table b/definitions/bufr/tables/0/wmo/26/codetables/22178.table
new file mode 100644
index 0000000..355848c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/22178.table
@@ -0,0 +1,12 @@
+0 0 UNKNOWN
+1 1 LM-2A DECK-MOUNTED
+2 2 LM-3A HAND-HELD
+3 3 LM-4A THRU-HULL
+10 10 AL-12 TSK AUTOLAUNCHER (UP TO 12 PROBES)
+20 20 SIO XBT AUTOLAUNCHER (UP TO 6 PROBES)
+30 30 AOML XBT V6 AUTOLAUNCHER (UP TO 6 DEEP BLUE PROBES)
+31 31 AOML XBT V8.0 AUTOLAUNCHER (UP TO 8 DEEP BLUE PROBES)
+32 32 AOML XBT V8.1 AUTOLAUNCHER (UP TO 8 DEEP BLUE AND FAST DEEP PROBES)
+90 90 CSIRO DEVIL AUTOLAUNCHER
+100 100 MFSTEP AUTOLAUNCHER (MEDITERRANEAN)
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23001.table b/definitions/bufr/tables/0/wmo/26/codetables/23001.table
new file mode 100644
index 0000000..92ac5de
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23001.table
@@ -0,0 +1,5 @@
+0 0 RESERVED
+1 1 ARTICLES 1 AND 2
+2 2 ARTICLE 3
+3 3 ARTICLE 5.2
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23002.table b/definitions/bufr/tables/0/wmo/26/codetables/23002.table
new file mode 100644
index 0000000..12815c6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23002.table
@@ -0,0 +1,16 @@
+0 0 RESERVED
+1 1 NUCLEAR REACTOR ON GROUND
+2 2 NUCLEAR REACTOR AT SEA
+3 3 NUCLEAR REACTOR IN SPACE
+4 4 NUCLEAR FUEL FACILITY
+5 5 RADIOACTIVE WASTE MANAGEMENT FACILITY
+6 6 TRANSPORT OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+7 7 STORAGE OF NUCLEAR FUEL OR RADIOACTIVE WASTE
+8 8 MANUFACTURE OF RADIO-ISOTOPES
+9 9 USE OF RADIO-ISOTOPES
+10 10 STORAGE OF RADIO-ISOTOPES
+11 11 DISPOSAL OF RADIO-ISOTOPES
+12 12 TRANSPORT OF RADIO-ISOTOPES
+13 13 USE OF RADIO-ISOTOPES FOR POWER GENERATION
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23003.table b/definitions/bufr/tables/0/wmo/26/codetables/23003.table
new file mode 100644
index 0000000..e3e891f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23003.table
@@ -0,0 +1,8 @@
+0 0 NO RELEASE
+1 1 RELEASE TO ATMOSPHERE
+2 2 RELEASE TO WATER
+3 3 RELEASE TO BOTH ATMOSPHERE AND WATER
+4 4 EXPECTED RELEASE TO ATMOSPHERE
+5 5 EXPECTED RELEASE TO WATER
+6 6 EXPECTED RELEASE TO BOTH ATMOSPHERE AND WATER
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23004.table b/definitions/bufr/tables/0/wmo/26/codetables/23004.table
new file mode 100644
index 0000000..383731c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23004.table
@@ -0,0 +1,6 @@
+0 0 NO COUNTERMEASURES
+1 1 EVACUATION
+2 2 SHELTERING
+3 3 PROPHYLAXIS
+4 4 WATER
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23005.table b/definitions/bufr/tables/0/wmo/26/codetables/23005.table
new file mode 100644
index 0000000..c5ff5ae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23005.table
@@ -0,0 +1,4 @@
+0 0 INCIDENT STATE DOES NOT UNDERSTAND WHAT HAPPENED
+1 1 INCIDENT STATE KNOWS THE CAUSE OF THE INCIDENT
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23006.table b/definitions/bufr/tables/0/wmo/26/codetables/23006.table
new file mode 100644
index 0000000..fe7706a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23006.table
@@ -0,0 +1,8 @@
+0 0 NO IMPROVEMENT
+1 1 UNSTABLE
+2 2 NO DETERIORATION
+3 3 IMPROVING
+4 4 STABLE
+5 5 DETERIORATING
+6 6 RESERVED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23007.table b/definitions/bufr/tables/0/wmo/26/codetables/23007.table
new file mode 100644
index 0000000..59fc043
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23007.table
@@ -0,0 +1,5 @@
+0 0 NO RELEASE
+1 1 RELEASE HAS STOPPED
+2 2 RELEASE
+3 3 RELEASE IS CONTINUING
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23008.table b/definitions/bufr/tables/0/wmo/26/codetables/23008.table
new file mode 100644
index 0000000..4ac5c58
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23008.table
@@ -0,0 +1,4 @@
+0 0 GASEOUS
+1 1 PARTICULATE
+2 2 MIXTURE OF GASEOUS AND PARTICULATE
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23009.table b/definitions/bufr/tables/0/wmo/26/codetables/23009.table
new file mode 100644
index 0000000..4ac5c58
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23009.table
@@ -0,0 +1,4 @@
+0 0 GASEOUS
+1 1 PARTICULATE
+2 2 MIXTURE OF GASEOUS AND PARTICULATE
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23016.table b/definitions/bufr/tables/0/wmo/26/codetables/23016.table
new file mode 100644
index 0000000..ae84bae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23016.table
@@ -0,0 +1,4 @@
+0 0 NO SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT
+1 1 SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT POSSIBLE
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23018.table b/definitions/bufr/tables/0/wmo/26/codetables/23018.table
new file mode 100644
index 0000000..ccdcc45
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23018.table
@@ -0,0 +1,6 @@
+0 0 RELEASE NO LONGER OCCURRING
+1 1 RELEASE STILL OCCURRING
+2 2 RELEASE EXPECTED TO INCREASE IN NEXT SIX HOURS
+3 3 RELEASE EXPECTED TO REMAIN CONSTANT IN NEXT SIX HOURS
+4 4 RELEASE EXPECTED TO DECREASE IN NEXT SIX HOURS
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23031.table b/definitions/bufr/tables/0/wmo/26/codetables/23031.table
new file mode 100644
index 0000000..cf20e26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23031.table
@@ -0,0 +1,4 @@
+0 0 PLUME WILL NOT ENCOUNTER RAIN IN INCIDENT STATE
+1 1 PLUME WILL ENCOUNTER RAIN IN INCIDENT STATE
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/23032.table b/definitions/bufr/tables/0/wmo/26/codetables/23032.table
new file mode 100644
index 0000000..0f439b7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/23032.table
@@ -0,0 +1,4 @@
+0 0 NO SIGNIFICANT CHANGE EXPECTED WITHIN THE NEXT SIX HOURS
+1 1 ANTICIPATED SIGNIFICANT CHANGE EXPECTED WITHIN THE NEXT SIX HOURS
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/24003.table b/definitions/bufr/tables/0/wmo/26/codetables/24003.table
new file mode 100644
index 0000000..2daa810
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/24003.table
@@ -0,0 +1,5 @@
+0 0 NOBLE GASES
+1 1 IODINES
+2 2 CAESIUMS
+3 3 TRANSURANICS
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25004.table b/definitions/bufr/tables/0/wmo/26/codetables/25004.table
new file mode 100644
index 0000000..dfe4517
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25004.table
@@ -0,0 +1,4 @@
+0 0 INCOHERENT
+1 1 COHERENT (DOPPLER)
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25005.table b/definitions/bufr/tables/0/wmo/26/codetables/25005.table
new file mode 100644
index 0000000..bc693a7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25005.table
@@ -0,0 +1,4 @@
+0 0 LOGARITHM - 2.5 DB
+1 1 LINEAR
+2 2 SPECIAL
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25006.table b/definitions/bufr/tables/0/wmo/26/codetables/25006.table
new file mode 100644
index 0000000..bf9d1f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25006.table
@@ -0,0 +1,5 @@
+0 0 ZH TO R CONVERSION
+1 1 (ZH, ZDR) TO (NO, DO) TO R
+2 2 (Z (F1), Z (F2)) TO ATTENUATION TO R
+6 6 OTHER
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25009.table b/definitions/bufr/tables/0/wmo/26/codetables/25009.table
new file mode 100644
index 0000000..bf34fb2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25009.table
@@ -0,0 +1,4 @@
+1 1 NONE
+2 2 CALIBRATION TARGET OR SIGNAL
+3 3 AGAINST RAINGAUGES
+4 4 AGAINST OTHER INSTRUMENTS (DISDROMETER - ATTENUATION)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25010.table b/definitions/bufr/tables/0/wmo/26/codetables/25010.table
new file mode 100644
index 0000000..e88b3ca
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25010.table
@@ -0,0 +1,8 @@
+0 0 NONE
+1 1 MAP
+2 2 INSERTION OF HIGHER ELEVATION DATA AND MAP
+3 3 ANALYSIS OF THE FLUCTUATING LOGARITHM SIGNAL (CLUTTER DETECTION)
+4 4 EXTRACTION OF THE FLUCTUATING PART OF LINEAR SIGNAL (CLUTTER SUPPRESSION)
+5 5 CLUTTER SUPPRESSION - DOPPLER
+6 6 MULTIPARAMETER ANALYSIS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25011.table b/definitions/bufr/tables/0/wmo/26/codetables/25011.table
new file mode 100644
index 0000000..f739498
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25011.table
@@ -0,0 +1,4 @@
+0 0 NONE
+1 1 MAP OF CORRECTION FACTORS
+2 2 INTERPOLATION (AZIMUTH OR ELEVATION)
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25012.table b/definitions/bufr/tables/0/wmo/26/codetables/25012.table
new file mode 100644
index 0000000..c869a4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25012.table
@@ -0,0 +1,4 @@
+0 0 HARDWARE
+1 1 SOFTWARE
+2 2 HARDWARE AND SOFTWARE
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25013.table b/definitions/bufr/tables/0/wmo/26/codetables/25013.table
new file mode 100644
index 0000000..b91ea71
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25013.table
@@ -0,0 +1 @@
+1 1 BRIGHT-BAND CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25015.table b/definitions/bufr/tables/0/wmo/26/codetables/25015.table
new file mode 100644
index 0000000..043e587
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25015.table
@@ -0,0 +1 @@
+1 1 RADOME ATTENUATION CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25017.table b/definitions/bufr/tables/0/wmo/26/codetables/25017.table
new file mode 100644
index 0000000..ed48487
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25017.table
@@ -0,0 +1 @@
+1 1 PRECIPITATION ATTENUATION CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25020.table b/definitions/bufr/tables/0/wmo/26/codetables/25020.table
new file mode 100644
index 0000000..6133da3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25020.table
@@ -0,0 +1,4 @@
+0 0 FFT (FAST FOURIER TRANSFORM)
+1 1 PPP (PULSE-PAIR PROCESSING)
+2 2 VPC (VECTOR-PHASE CHANGE)
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25021.table b/definitions/bufr/tables/0/wmo/26/codetables/25021.table
new file mode 100644
index 0000000..314716b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25021.table
@@ -0,0 +1,5 @@
+1 1 SIMPLE AVERAGE
+2 2 CONSENSUS AVERAGE
+3 3 MEDIAN CHECK
+4 4 VERTICAL CONSISTENCY CHECK
+5 5 OTHER
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25022.table b/definitions/bufr/tables/0/wmo/26/codetables/25022.table
new file mode 100644
index 0000000..9584878
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25022.table
@@ -0,0 +1,8 @@
+1 1 UNPROCESSED
+2 2 LAND SUSPECTED
+3 3 WIND SPEED TOO LARGE
+4 4 ICE DETECTED
+5 5 RAIN DETECTED (MICROWAVE RETRIEVALS ONLY)
+6 6 CLOUDY DETECTED (INFRA-RED RETRIEVALS ONLY)
+7 7 COSMETIC VALUE
+8 8 SST OUT OF RANGE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25023.table b/definitions/bufr/tables/0/wmo/26/codetables/25023.table
new file mode 100644
index 0000000..e4840dc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25023.table
@@ -0,0 +1,8 @@
+1 1 DEFAULT CONFIDENCE VALUE HAS BEEN USED
+2 2 DEFAULT BIAS AND STANDARD DEVIATION HAVE BEEN USED
+3 3 SUN GLINT SUSPECTED
+4 4 SEA ICE RETRIEVAL FOR MICROWAVE DATA
+5 5 HIGH WIND SPEED RETRIEVAL
+6 6 INACCURATE SST DUE TO LOW SST (< 285K) (ONLY APPLIES TO THE TMI INSTRUMENT)
+7 7 RELAXED RAIN CONTAMINATION SUSPECTED
+8 8 POTENTIAL SIDE LOBE CONTAMINATION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25024.table b/definitions/bufr/tables/0/wmo/26/codetables/25024.table
new file mode 100644
index 0000000..81b2638
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25024.table
@@ -0,0 +1,13 @@
+0 0 UNPROCESSED INFRARED RETRIEVAL
+1 1 CLOUDY RETRIEVALS
+2 2 BAD: DATA THAT ARE PROBABLY CONTAMINATED BY CLOUD
+3 3 SUSPECT DATA
+4 4 ACCEPTABLE DATA
+5 5 EXCELLENT DATA
+6 6 COOL SKIN SUSPECTED
+10 10 UNPROCESSED MICROWAVE RETRIEVAL
+11 11 QUESTIONABLE MICROWAVE RETRIEVAL THAT MAY BE CONTAMINATED
+12 12 ACCEPTABLE MICROWAVE RETRIEVAL
+13 13 HIGH PROBABILITY OF DIURNAL VARIABILITY
+14 14 RESERVED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25029.table b/definitions/bufr/tables/0/wmo/26/codetables/25029.table
new file mode 100644
index 0000000..fb00d01
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25029.table
@@ -0,0 +1,5 @@
+1 1 RESERVED
+2 2 CALIBRATION TARGET OR SIGNAL
+3 3 AGAINST RAINGAUGES
+4 4 AGAINST OTHER INSTRUMENTS (DISDROMETER - ATTENUATION)
+5 5 RESERVED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25030.table b/definitions/bufr/tables/0/wmo/26/codetables/25030.table
new file mode 100644
index 0000000..c3235d6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25030.table
@@ -0,0 +1,4 @@
+0 0 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE USAGE CRITERIA NOT MET
+1 1 RUNNING MEAN SEA-SURFACE TEMPERATURE NOT USED BECAUSE DATA NOT AVAILABLE
+2 2 RUNNING MEAN SEA-SURFACE TEMPERATURE USED AS PREDICTOR
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25031.table b/definitions/bufr/tables/0/wmo/26/codetables/25031.table
new file mode 100644
index 0000000..16ff950
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25031.table
@@ -0,0 +1,6 @@
+0 0 RESERVED
+1 1 NO THINNING APPLIED (ALL NATIVE MODEL LEVELS ARE INCLUDED FROM BASE TO TOP OF PSEUDO-SOUNDING)
+2 2 NATIVE MODEL LEVELS ARE PRESENT ONLY IF THEY ARE SIGNIFICANT LEVELS AS PER REGULATIONS B/C 25 FOR CONVENTIONAL TEMP SOUNDINGS
+3 3 A PREDEFINED SUBSET OF NATIVE MODEL LEVELS IS PRESENT
+4 4 NO NATIVE MODEL LEVELS ARE PRESENT.  ALL PROFILE LEVELS ARE INTERPOLATED TO A PREDEFINED SET OF PRESSURE COORDINATE LEVELS
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25032.table b/definitions/bufr/tables/0/wmo/26/codetables/25032.table
new file mode 100644
index 0000000..9b894f4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25032.table
@@ -0,0 +1,4 @@
+0 0 RESERVED
+1 1 DATA FROM LOW MODE
+2 2 DATA FROM HIGH MODE
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25033.table b/definitions/bufr/tables/0/wmo/26/codetables/25033.table
new file mode 100644
index 0000000..e7141c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25033.table
@@ -0,0 +1,4 @@
+0 0 WIND PROFILER OPERATING IN SUBMODE A
+1 1 WIND PROFILER OPERATING IN SUBMODE B
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25034.table b/definitions/bufr/tables/0/wmo/26/codetables/25034.table
new file mode 100644
index 0000000..473338a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25034.table
@@ -0,0 +1,3 @@
+1 1 TEST A PERFORMED AND FAILED
+2 2 TEST B PERFORMED AND FAILED
+3 3 TEST RESULTS INCONCLUSIVE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25035.table b/definitions/bufr/tables/0/wmo/26/codetables/25035.table
new file mode 100644
index 0000000..a0c8faa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25035.table
@@ -0,0 +1,8 @@
+0 0 NOT DEFINED
+1 1 INDIVIDUAL VOLTAGE DEFLECTION
+2 2 CURRENT BASED, ABOVE A THRESHOLD
+3 3 VOLTAGE BASED, ABOVE A THRESHOLD
+4 4 CONSENSUS OF SENSORS, CURRENT ABOVE A THRESHOLD
+5 5 CONSENSUS OF SENSORS, VOLTAGE ABOVE A THRESHOLD
+6 6 RESERVED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25036.table b/definitions/bufr/tables/0/wmo/26/codetables/25036.table
new file mode 100644
index 0000000..79ebd88
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25036.table
@@ -0,0 +1,4 @@
+0 0 NETWORK OF SEVERAL DIRECTION-FINDERS OPERATING ON THE SAME INDIVIDUAL ATMOSPHERICS
+1 1 NETWORK OF SEVERAL ARRIVAL-TIME STATIONS OPERATING ON THE SAME INDIVIDUAL ATMOSPHERICS
+6 6 SINGLE STATION RANGE BEARING TECHNIQUE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25040.table b/definitions/bufr/tables/0/wmo/26/codetables/25040.table
new file mode 100644
index 0000000..3ddf12e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25040.table
@@ -0,0 +1,10 @@
+0 0 NON-SPECIFIC MODE
+1 1 FIRST GUESS DATA
+2 2 CLOUD DATA
+3 3 AVERAGE VECTOR DATA
+4 4 PRIMARY DATA
+5 5 GUESS DATA
+6 6 VECTOR DATA
+7 7 TRACER DATA; THIS IMAGE
+8 8 TRACER DATA TO NEXT IMAGE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25041.table b/definitions/bufr/tables/0/wmo/26/codetables/25041.table
new file mode 100644
index 0000000..f388da0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25041.table
@@ -0,0 +1,4 @@
+0 0 DIRECTION ORIGINALLY REPORTED IN TRUE DEGREES
+1 1 DIRECTION ORIGINALLY REPORTED USING CODE TABLE 0700, FM 13
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25042.table b/definitions/bufr/tables/0/wmo/26/codetables/25042.table
new file mode 100644
index 0000000..f3cf059
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25042.table
@@ -0,0 +1,4 @@
+0 0 SPEED ORIGINALLY REPORTED IN METRES PER SECOND
+1 1 SPEED ORIGINALLY REPORTED USING CODE TABLE 4451, FM 13
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25053.table b/definitions/bufr/tables/0/wmo/26/codetables/25053.table
new file mode 100644
index 0000000..af34138
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25053.table
@@ -0,0 +1,6 @@
+1 1 GOOD
+2 2 REDUNDANT
+3 3 QUESTIONABLE
+4 4 BAD
+5 5 EXPERIMENTAL
+6 6 PRECIPITATING
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25063.table b/definitions/bufr/tables/0/wmo/26/codetables/25063.table
new file mode 100644
index 0000000..a8970ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25063.table
@@ -0,0 +1,4 @@
+0 0 NOT DEFINED
+1 1 MAIN PROCESSOR
+2 2 BACKUP PROCESSOR
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25069.table b/definitions/bufr/tables/0/wmo/26/codetables/25069.table
new file mode 100644
index 0000000..e627613
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25069.table
@@ -0,0 +1,7 @@
+1 1 SMOOTHED
+2 2 BASELINE ADJUSTED
+3 3 NORMALIZED TIME INTERVAL
+4 4 OUTLIER CHECKED
+5 5 PLAUSIBILITY CHECKED
+6 6 CONSISTENCY CHECKED
+7 7 INTERPOLATED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25086.table b/definitions/bufr/tables/0/wmo/26/codetables/25086.table
new file mode 100644
index 0000000..294fa69
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25086.table
@@ -0,0 +1,4 @@
+0 0 DEPTHS ARE NOT CORRECTED
+1 1 DEPTHS ARE CORRECTED
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25090.table b/definitions/bufr/tables/0/wmo/26/codetables/25090.table
new file mode 100644
index 0000000..309fefc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25090.table
@@ -0,0 +1,11 @@
+0 0 ORBIT COMPUTED DURING A MANOEUVRE
+1 1 ADJUSTED MISSION OPERATIONS ORBIT
+2 2 EXTRAPOLATED MISSION OPERATIONS ORBIT
+3 3 ADJUSTED (PRELIMINARY/PRECISE) ORBIT
+4 4 (PRELIMINARY/PRECISE) ORBIT IS ESTIMATED DURING A MANOEUVRE PERIOD
+5 5 (PRELIMINARY/PRECISE) ORBIT IS INTERPOLATED OVER A TRACKING DATA GAP
+6 6 (PRELIMINARY/PRECISE) ORBIT IS EXTRAPOLATED FOR A DURATION LESS THAN 1 DAY
+7 7 (PRELIMINARY/PRECISE) ORBIT IS EXTRAPOLATED FOR A DURATION THAT RANGES FROM 1 DAY TO 2 DAYS
+8 8 (PRELIMINARY/PRECISE) ORBIT IS EXTRAPOLATED FOR A DURATION LARGER THAN 2 DAYS, OR THAT THE ORBIT IS EXTRAPOLATED JUST AFTER A MANOEUVRE
+9 9 DORIS* DIODE** NAVIGATOR ORBIT
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25093.table b/definitions/bufr/tables/0/wmo/26/codetables/25093.table
new file mode 100644
index 0000000..e547e6c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25093.table
@@ -0,0 +1,3 @@
+1 1 NO CORRECTION
+2 2 VERTICAL VELOCITY CORRECTION
+7 7 ALL CORRECTIONS
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25095.table b/definitions/bufr/tables/0/wmo/26/codetables/25095.table
new file mode 100644
index 0000000..c446a50
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25095.table
@@ -0,0 +1 @@
+1 1 ALTIMETER OPERATING (0 IF NOMINAL, 1 IF BACKUP)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25096.table b/definitions/bufr/tables/0/wmo/26/codetables/25096.table
new file mode 100644
index 0000000..89dcc39
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25096.table
@@ -0,0 +1,4 @@
+1 1 MODE INDICATOR (0 IF MODE 2, 1 IF MODE 1)
+2 2 MODE 1 CALIBRATION SEQUENCE INDICATOR (0 IF NORMAL DATA TAKING EITHER MODE 1 OR 2, 1 IF MODE 1 CALIBRATION SEQUENCE)  BITS 3 AND 4 INDICATE ACTIVE 23.8 GHZ CHANNEL(S):
+3 3 CHANNEL 2 (0 IF ON, 1 IF OFF)
+4 4 CHANNEL 3 (0 IF ON, 1 IF OFF)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25097.table b/definitions/bufr/tables/0/wmo/26/codetables/25097.table
new file mode 100644
index 0000000..d4e1e46
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25097.table
@@ -0,0 +1,11 @@
+0 0 RANGES BETWEEN 0 AND 30 CM
+1 1 RANGES BETWEEN 30 AND 60 CM
+2 2 RANGES BETWEEN 60 AND 90 CM
+3 3 RANGES BETWEEN 90 AND 120 CM
+4 4 RANGES BETWEEN 120 AND 150 CM
+5 5 RANGES BETWEEN 150 AND 180 CM
+6 6 RANGES BETWEEN 180 AND 210 CM
+7 7 RANGES BETWEEN 210 AND 240 CM
+8 8 RANGES BETWEEN 240 AND 270 CM
+9 9 RANGES LARGER THAN 270 CM
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25098.table b/definitions/bufr/tables/0/wmo/26/codetables/25098.table
new file mode 100644
index 0000000..9d505a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25098.table
@@ -0,0 +1,8 @@
+1 1 KU BAND RANGE
+2 2 C BAND RANGE
+3 3 KU BAND SWH*
+4 4 C BAND SWH*
+5 5 KU BAND BACKSCATTER COEFFICIENT
+6 6 C BAND BACKSCATTER COEFFICIENT
+7 7 OFF NADIR ANGLE FROM KU BAND WAVEFORM PARAMETERS
+8 8 OFF NADIR ANGLE FROM PLATFORM
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25099.table b/definitions/bufr/tables/0/wmo/26/codetables/25099.table
new file mode 100644
index 0000000..40f35b1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25099.table
@@ -0,0 +1,6 @@
+1 1 KU BAND RANGE INSTRUMENTAL CORRECTION
+2 2 C BAND RANGE INSTRUMENTAL CORRECTION
+3 3 KU BAND SWH* INSTRUMENTAL CORRECTION
+4 4 C BAND SWH* INSTRUMENTAL CORRECTION
+5 5 KU BAND BACKSCATTER COEFFICIENT INSTRUMENTAL CORRECTION
+6 6 C BAND BACKSCATTER COEFFICIENT INSTRUMENTAL CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25110.table b/definitions/bufr/tables/0/wmo/26/codetables/25110.table
new file mode 100644
index 0000000..912e01f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25110.table
@@ -0,0 +1,6 @@
+1 1 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION. CORRECTION DONE USING DEFAULT PARAMETERS
+2 2 RAW DATA ANALYSIS USED FOR RAW DATA CORRECTION. CORRECTION DONE USING RAW DATA ANALYSIS RESULTS
+3 3 ANTENNA ELEVATION PATTERN CORRECTION APPLIED
+4 4 NOMINAL CHIRP REPLICA USED
+5 5 RECONSTRUCTED CHIRP USED
+6 6 SLANT RANGE TO GROUND RANGE CONVERSION APPLIED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25112.table b/definitions/bufr/tables/0/wmo/26/codetables/25112.table
new file mode 100644
index 0000000..a2a4ec9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25112.table
@@ -0,0 +1,5 @@
+1 1 BAND SPECIFIC RANGE
+2 2 BAND SPECIFIC SIGNIFICANT WAVE HEIGHT
+3 3 BAND SPECIFIC BACKSCATTER COEFFICIENT
+4 4 OFF NADIR ANGLE FROM BAND SPECIFIC WAVEFORM PARAMETERS
+5 5 OFF NADIR ANGLE FROM PLATFORM
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25113.table b/definitions/bufr/tables/0/wmo/26/codetables/25113.table
new file mode 100644
index 0000000..ef394b6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25113.table
@@ -0,0 +1,3 @@
+1 1 BAND SPECIFIC RANGE INSTRUMENTAL CORRECTION
+2 2 BAND SPECIFIC SIGNIFICANT WAVE HEIGHT INSTRUMENTAL CORRECTION
+3 3 BAND SPECIFIC BACKSCATTER COEFFICIENT INSTRUMENTAL CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25120.table b/definitions/bufr/tables/0/wmo/26/codetables/25120.table
new file mode 100644
index 0000000..bdb9f96
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25120.table
@@ -0,0 +1,4 @@
+0 0 PERCENTAGE OF DSRS* FREE OF PROCESSING ERRORS DURING LEVEL 2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+1 1 PERCENTAGE OF DSRS FREE OF PROCESSING ERRORS DURING LEVEL 2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25122.table b/definitions/bufr/tables/0/wmo/26/codetables/25122.table
new file mode 100644
index 0000000..1085ef9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25122.table
@@ -0,0 +1,4 @@
+0 0 HARDWARE CONFIGURATION FOR RF IS A
+1 1 HARDWARE CONFIGURATION FOR RF IS B
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25123.table b/definitions/bufr/tables/0/wmo/26/codetables/25123.table
new file mode 100644
index 0000000..70f0670
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25123.table
@@ -0,0 +1,4 @@
+0 0 HARDWARE CONFIGURATION FOR HPA IS A
+1 1 HARDWARE CONFIGURATION FOR HPA IS B
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25124.table b/definitions/bufr/tables/0/wmo/26/codetables/25124.table
new file mode 100644
index 0000000..dce5b04
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25124.table
@@ -0,0 +1,4 @@
+0 0 PERCENTAGE OF DSRS** FREE OF PROCESSING ERRORS DURING LEVEL 2 PROCESSING IS GREATER THAN THE ACCEPTABLE THRESHOLD
+1 1 PERCENTAGE OF DSRS** FREE OF PROCESSING ERRORS DURING LEVEL 2 PROCESSING IS LESS THAN THE ACCEPTABLE THRESHOLD
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25150.table b/definitions/bufr/tables/0/wmo/26/codetables/25150.table
new file mode 100644
index 0000000..7b452c3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25150.table
@@ -0,0 +1,3 @@
+1 1 THE DVORAK'S VIS (VISUAL IMAGERY) INTENSITY ANALYSIS
+2 2 THE DVORAK'S EIR (ENHANCED INFRARED IMAGERY) INTENSITY ANALYSIS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25174.table b/definitions/bufr/tables/0/wmo/26/codetables/25174.table
new file mode 100644
index 0000000..c8a11b6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25174.table
@@ -0,0 +1,13 @@
+1 1 PIXEL IS AFFECTED BY RFI EFFECTS
+2 2 PIXEL IS LOCATED IN THE HEXAGONAL ALIAS DIRECTION CENTRED ON SUN ALIAS
+3 3 PIXEL IS CLOSE TO THE BORDER DELIMITING THE EXTENDED ALIAS FREE ZONE
+4 4 PIXEL IS INSIDE THE EXTENDED ALIAS FREE ZONE
+5 5 PIXEL IS INSIDE THE EXCLUSIVE OF ALIAS FREE ZONE
+6 6 PIXEL IS LOCATED IN A ZONE WHERE A MOON ALIAS WAS RECONSTRUCTED
+7 7 PIXEL IS LOCATED IN A ZONE WHERE SUN REFLECTION HAS BEEN DETECTED
+8 8 PIXEL IS LOCATED IN A ZONE WHERE SUN ALIAS WAS RECONSTRUCTED
+9 9 FLAT TARGET TRANSFORMATION HAS BEEN PERFORMED DURING IMAGE RECONSTRUCTION OF THIS PIXEL
+10 10 SCENE HAS BEEN COMBINED WITH AN ADJUSTMENT SCENE IN OPPOSITE POLARIZATION DURING IMAGE RECONSTRUCTION TO ACCOUNT FOR CROSS-POLARIZATION LEAKAGE
+11 11 DIRECT MOON CORRECTION HAS BEEN PERFORMED DURING IMAGE RECONSTRUCTION OF THIS PIXEL
+12 12 REFLECTED SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE RECONSTRUCTION OF THIS PIXEL
+13 13 DIRECT SUN CORRECTION HAS BEEN PERFORMED DURING IMAGE RECONSTRUCTION OF THIS IMAGE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25181.table b/definitions/bufr/tables/0/wmo/26/codetables/25181.table
new file mode 100644
index 0000000..2c1eabf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25181.table
@@ -0,0 +1,3 @@
+0 0 OK
+1 1 PERCENTAGE OF L2B RECORDS FREE OF PROCESSING ERRORS IS LESS THAN ACCEPTABLE THRESHOLD
+2 2 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25182.table b/definitions/bufr/tables/0/wmo/26/codetables/25182.table
new file mode 100644
index 0000000..9827b1d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25182.table
@@ -0,0 +1,3 @@
+0 0 OK
+1 1 PERCENTAGE OF L1B RECORDS FREE OF PROCESSING ERRORS IS LESS THAN ACCEPTABLE THRESHOLD
+2 2 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25184.table b/definitions/bufr/tables/0/wmo/26/codetables/25184.table
new file mode 100644
index 0000000..29005c1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25184.table
@@ -0,0 +1,3 @@
+0 0 OK
+1 1 PRODUCT AS A DURATION SHORTER THAN THE INPUT PRODUCT
+2 2 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/25187.table b/definitions/bufr/tables/0/wmo/26/codetables/25187.table
new file mode 100644
index 0000000..683c097
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/25187.table
@@ -0,0 +1,3 @@
+0 0 VALID
+1 1 INVALID
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/26010.table b/definitions/bufr/tables/0/wmo/26/codetables/26010.table
new file mode 100644
index 0000000..f825040
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/26010.table
@@ -0,0 +1,25 @@
+1 1 0100 INCLUDED
+2 2 0200 INCLUDED
+3 3 0300 INCLUDED
+4 4 0400 INCLUDED
+5 5 0500 INCLUDED
+6 6 0600 INCLUDED
+7 7 0700 INCLUDED
+8 8 0800 INCLUDED
+9 9 0900 INCLUDED
+10 10 1000 INCLUDED
+11 11 1100 INCLUDED
+12 12 1200 INCLUDED
+13 13 1300 INCLUDED
+14 14 1400 INCLUDED
+15 15 1500 INCLUDED
+16 16 1600 INCLUDED
+17 17 1700 INCLUDED
+18 18 1800 INCLUDED
+19 19 1900 INCLUDED
+20 20 2000 INCLUDED
+21 21 2100 INCLUDED
+22 22 2200 INCLUDED
+23 23 2300 INCLUDED
+24 24 2400 INCLUDED
+25 25 UNKNOWN MIXTURE OF HOURS
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/29001.table b/definitions/bufr/tables/0/wmo/26/codetables/29001.table
new file mode 100644
index 0000000..1481243
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/29001.table
@@ -0,0 +1,8 @@
+0 0 GNOMONIC PROJECTION
+1 1 POLAR STEREOGRAPHIC PROJECTION
+2 2 LAMBERT'S CONFORMAL CONIC PROJECTION
+3 3 MERCATOR'S PROJECTION
+4 4 SCANNING CONE (RADAR)*
+5 5 RESERVED
+6 6 NO PROJECTION
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/29002.table b/definitions/bufr/tables/0/wmo/26/codetables/29002.table
new file mode 100644
index 0000000..1d7efd0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/29002.table
@@ -0,0 +1,4 @@
+0 0 CARTESIAN
+1 1 POLAR
+2 2 OTHER
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/30031.table b/definitions/bufr/tables/0/wmo/26/codetables/30031.table
new file mode 100644
index 0000000..80cce26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/30031.table
@@ -0,0 +1,13 @@
+0 0 PPI
+1 1 COMPOSITE
+2 2 CAPPL
+3 3 VERTICAL SECTION
+4 4 ALPHANUMERIC DATA
+5 5 MAP OF SUBJECT CLUTTER
+6 6 MAP
+7 7 TEST PICTURE
+8 8 COMMENTS
+9 9 MAP OF GROUND OCCULTATION
+10 10 MAP OF RADAR BEAM HEIGHT
+14 14 OTHER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/30032.table b/definitions/bufr/tables/0/wmo/26/codetables/30032.table
new file mode 100644
index 0000000..942cb5d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/30032.table
@@ -0,0 +1,9 @@
+1 1 MAP
+2 2 SATELLITE IR
+3 3 SATELLITE VIS
+4 4 SATELLITE WV
+5 5 SATELLITE MULTISPECTRAL
+6 6 SYNOPTIC OBSERVATIONS
+7 7 FORECAST PARAMETERS
+8 8 LIGHTNING DATA
+15 15 OTHER DATA
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/3010.table b/definitions/bufr/tables/0/wmo/26/codetables/3010.table
new file mode 100644
index 0000000..75746a1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/3010.table
@@ -0,0 +1,12 @@
+0 0 RESERVED
+1 1 ADCP
+2 2 GEK (GEOMAGNETIC ELECTROKINETOGRAPH)
+3 3 SHIP'S SET AND DRIFT DETERMINED BY FIXES 3-6 HOURS APART
+4 4 SHIP'S SET AND DRIFT DETERMINED BY FIXES MORE THAN 6 HOURS BUT LESS THAN 12 HOURS APART
+5 5 DRIFT OF BUOY
+6 6 ADCP
+7 7 ADCP BOTTOM TRACKING MODE
+8 8 ELECTROMAGNETIC SENSOR
+9 9 ROTOR AND VANE
+10 10 LOWERED ADCP
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/3011.table b/definitions/bufr/tables/0/wmo/26/codetables/3011.table
new file mode 100644
index 0000000..7488268
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/3011.table
@@ -0,0 +1,4 @@
+0 0 DEPTH CALCULATED USING FALL RATE EQUATION
+1 1 DEPTH CALCULATED FROM WATER PRESSURE/EQUATION OF STATE
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/3012.table b/definitions/bufr/tables/0/wmo/26/codetables/3012.table
new file mode 100644
index 0000000..35bdead
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/3012.table
@@ -0,0 +1,3 @@
+0 0 ANDERRAA OXYGEN OPTODE
+1 1 WINKLER BOTTLE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/3016.table b/definitions/bufr/tables/0/wmo/26/codetables/3016.table
new file mode 100644
index 0000000..792788f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/3016.table
@@ -0,0 +1,9 @@
+0 0 FAST LANE BETWEEN THE WHEEL TRACKS
+1 1 FAST LANE BETWEEN THE WHEEL TRACKS IN THE OPPOSITE DIRECTION
+2 2 FAST LANE IN THE WHEEL TRACKS
+3 3 FAST LANE IN THE WHEEL TRACKS IN THE OPPOSITE DIRECTION
+4 4 SLOW LANE BETWEEN THE WHEEL TRACKS
+5 5 SLOW LANE BETWEEN THE WHEEL TRACKS IN THE OPPOSITE DIRECTION
+6 6 SLOW LANE IN THE WHEEL TRACKS
+7 7 SLOW LANE IN THE WHEEL TRACKS IN THE OPPOSITE DIRECTION
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/3017.table b/definitions/bufr/tables/0/wmo/26/codetables/3017.table
new file mode 100644
index 0000000..e94c0a4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/3017.table
@@ -0,0 +1,5 @@
+1 1 AUTOMATIC
+2 2 MANNED
+3 3 EVENT TRIGGERED
+4 4 LONGER TIME PERIOD THAN THE STANDARD
+5 5 RESERVED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/3018.table b/definitions/bufr/tables/0/wmo/26/codetables/3018.table
new file mode 100644
index 0000000..79e0375
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/3018.table
@@ -0,0 +1,22 @@
+0 0 FREE TRACK WITHOUT FURTHER INFORMATION
+1 1 FREE TRACK, EMBANKMENT
+2 2 FREE TRACK, FLAT RELATIVE TO SURROUNDINGS
+3 3 FREE TRACK, WATER BASIN(S) IN VICINITY
+4 4 FREE TRACK, FOREST
+5 5 FREE TRACK, CLEFT
+6 6 FREE TRACK, ON HILLTOP
+7 7 FREE TRACK, ON HILLTOP, FOREST
+8 8 FREE TRACK, IN VALLEY
+9 9 FREE TRACK, IN VALLEY, FOREST
+10 10 FREE TRACK, NORTH INCLINATION
+11 11 FREE TRACK, NORTH INCLINATION, FOREST
+12 12 FREE TRACK, SOUTH INCLINATION
+13 13 FREE TRACK, SOUTH INCLINATION, FOREST
+20 20 BRIDGE WITHOUT FURTHER INFORMATION
+21 21 BRIDGE ACROSS A VALLEY IN A URBAN AREA
+22 22 BRIDGE ACROSS A VALLEY WITH FOREST/MEADOWS/FIELDS
+23 23 BRIDGE ACROSS STREET/TRACK
+24 24 BRIDGE ACROSS BIG RIVER/CANAL
+25 25 BRIDGE ACROSS RIVER/CANAL OF MEDIUM SIZE
+26 26 BRIDGE ACROSS A SMALL STREAM/LOADING CANAL
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/3019.table b/definitions/bufr/tables/0/wmo/26/codetables/3019.table
new file mode 100644
index 0000000..2f55b00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/3019.table
@@ -0,0 +1,8 @@
+0 0 ASPHALT
+1 1 CONCRETE
+2 2 CONCRETE CONSTRUCTION
+3 3 STEEL-GIRDER CONSTRUCTION
+4 4 BOX GIRDER BRIDGE
+5 5 ORTHOTROPIC SLAB
+6 6 DRAIN ASPHALT
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/31021.table b/definitions/bufr/tables/0/wmo/26/codetables/31021.table
new file mode 100644
index 0000000..fb70e1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/31021.table
@@ -0,0 +1,8 @@
+0 0 RESERVED
+1 1 1-BIT INDICATOR OF QUALITY
+2 2 2-BIT INDICATOR OF QUALITY
+6 6 4-BIT INDICATOR OF QUALITY CONTROL CLASS ACCORDING TO GTSPP
+7 7 PERCENTAGE CONFIDENCE
+8 8 0 = NOT SUSPECTED, 1 = SUSPECTED, 2 = RESERVED, 3 = INFORMATION NOT REQUIRED
+21 21 1-BIT INDICATOR OF CORRECTION
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/31031.table b/definitions/bufr/tables/0/wmo/26/codetables/31031.table
new file mode 100644
index 0000000..1f27429
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/31031.table
@@ -0,0 +1 @@
+1 1 
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33002.table b/definitions/bufr/tables/0/wmo/26/codetables/33002.table
new file mode 100644
index 0000000..4177c05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33002.table
@@ -0,0 +1,4 @@
+0 0 DATA NOT SUSPECT
+1 1 DATA SUSPECT
+2 2 RESERVED
+3 3 QUALITY INFORMATION NOT GIVEN
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33003.table b/definitions/bufr/tables/0/wmo/26/codetables/33003.table
new file mode 100644
index 0000000..7577129
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33003.table
@@ -0,0 +1,5 @@
+0 0 DATA NOT SUSPECT
+1 1 DATA SLIGHTLY SUSPECT
+2 2 DATA HIGHLY SUSPECT
+3 3 DATA CONSIDERED UNFIT FOR USE
+7 7 QUALITY INFORMATION NOT GIVEN
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33005.table b/definitions/bufr/tables/0/wmo/26/codetables/33005.table
new file mode 100644
index 0000000..8d7569a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33005.table
@@ -0,0 +1,23 @@
+1 1 NO AUTOMATED METEOROLOGICAL DATA CHECKS PERFORMED
+2 2 PRESSURE DATA SUSPECT
+3 3 WIND DATA SUSPECT
+4 4 AIR TEMPERATURE DATA SUSPECT
+5 5 WET-BULB TEMPERATURE DATA SUSPECT
+6 6 HUMIDITY DATA SUSPECT
+7 7 GROUND TEMPERATURE DATA SUSPECT
+8 8 SOIL TEMPERATURE (DEPTH 1) DATA SUSPECT
+9 9 SOIL TEMPERATURE (DEPTH 2) DATA SUSPECT
+10 10 SOIL TEMPERATURE (DEPTH 3) DATA SUSPECT
+11 11 SOIL TEMPERATURE (DEPTH 4) DATA SUSPECT
+12 12 SOIL TEMPERATURE (DEPTH 5) DATA SUSPECT
+13 13 CLOUD DATA SUSPECT
+14 14 VISIBILITY DATA SUSPECT
+15 15 PRESENT WEATHER DATA SUSPECT
+16 16 LIGHTNING DATA SUSPECT
+17 17 ICE DEPOSIT DATA SUSPECT
+18 18 PRECIPITATION DATA SUSPECT
+19 19 STATE OF GROUND DATA SUSPECT
+20 20 SNOW DATA SUSPECT
+21 21 WATER CONTENT DATA SUSPECT
+22 22 EVAPORATION/EVAPOTRANSPIRATION DATA SUSPECT
+23 23 SUNSHINE DATA SUSPECT
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33006.table b/definitions/bufr/tables/0/wmo/26/codetables/33006.table
new file mode 100644
index 0000000..0ea44a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33006.table
@@ -0,0 +1,5 @@
+0 0 SELF-CHECK OK
+1 1 AT LEAST ONE WARNING ACTIVE, NO ALARMS
+2 2 AT LEAST ONE ALARM ACTIVE
+3 3 SENSOR FAILURE
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33015.table b/definitions/bufr/tables/0/wmo/26/codetables/33015.table
new file mode 100644
index 0000000..f585808
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33015.table
@@ -0,0 +1,16 @@
+0 0 PASSED ALL CHECKS
+1 1 MISSING DATA CHECK
+2 2 DESCENDING/REASCENDING BALLOON CHECK
+3 3 DATA PLAUSIBILITY CHECK (ABOVE LIMITS)
+4 4 DATA PLAUSIBILITY CHECK (BELOW LIMITS)
+5 5 SUPERADIABATIC LAPSE RATE CHECK
+6 6 LIMITING ANGLES CHECK
+7 7 ASCENSION RATE CHECK
+8 8 EXCESSIVE CHANGE FROM PREVIOUS FLIGHT
+9 9 BALLOON OVERHEAD CHECK
+10 10 WIND SPEED CHECK
+11 11 WIND DIRECTION CHECK
+12 12 DEPENDENCY CHECK
+13 13 DATA VALID BUT MODIFIED
+14 14 DATA OUTLIER CHECK
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33020.table b/definitions/bufr/tables/0/wmo/26/codetables/33020.table
new file mode 100644
index 0000000..ba7a4d4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33020.table
@@ -0,0 +1,8 @@
+0 0 GOOD
+1 1 INCONSISTENT
+2 2 DOUBTFUL
+3 3 WRONG
+4 4 NOT CHECKED
+5 5 HAS BEEN CHANGED
+6 6 ESTIMATED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33021.table b/definitions/bufr/tables/0/wmo/26/codetables/33021.table
new file mode 100644
index 0000000..e3e67ae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33021.table
@@ -0,0 +1,4 @@
+0 0 WITHIN LIMITS
+1 1 OUTSIDE LIMITS
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33022.table b/definitions/bufr/tables/0/wmo/26/codetables/33022.table
new file mode 100644
index 0000000..50ef65f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33022.table
@@ -0,0 +1,4 @@
+0 0 GOOD (SEVERAL IDENTICAL REPORTS HAVE BEEN RECEIVED)
+1 1 DUBIOUS (NO IDENTICAL REPORTS HAVE BEEN RECEIVED)
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33023.table b/definitions/bufr/tables/0/wmo/26/codetables/33023.table
new file mode 100644
index 0000000..896c816
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33023.table
@@ -0,0 +1,4 @@
+0 0 RELIABLE (LOCATION WAS MADE OVER TWO SATELLITE PASSES)
+1 1 LATEST KNOWN (NO LOCATION OVER THE CORRESPONDING PASS)
+2 2 DUBIOUS (LOCATION MADE OVER ONE PASS ONLY; A SECOND SOLUTION IS POSSIBLE IN 5 PER CENT OF THE CASES)
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33024.table b/definitions/bufr/tables/0/wmo/26/codetables/33024.table
new file mode 100644
index 0000000..771e04b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33024.table
@@ -0,0 +1,10 @@
+0 0 RESERVED
+1 1 EXCELLENT - WITHIN 3 METRES
+2 2 GOOD - WITHIN 10 METRES
+3 3 FAIR - WITHIN 20 METRES
+4 4 POOR - MORE THAN 20 METRES
+5 5 EXCELLENT - WITHIN 10 FEET
+6 6 GOOD - WITHIN 30 FEET
+7 7 FAIR - WITHIN 60 FEET
+8 8 POOR - MORE THAN 60 FEET
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33025.table b/definitions/bufr/tables/0/wmo/26/codetables/33025.table
new file mode 100644
index 0000000..4da695a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33025.table
@@ -0,0 +1,5 @@
+0 0 TIME INTERPOLATED, LATITUDE AND LONGITUDE REPORTED
+1 1 TIME REPORTED, LATITUDE AND LONGITUDE INTERPOLATED
+2 2 TIME, LATITUDE, AND LONGITUDE INTERPOLATED
+3 3 TIME, LATITUDE, AND LONGITUDE REPORTED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33026.table b/definitions/bufr/tables/0/wmo/26/codetables/33026.table
new file mode 100644
index 0000000..08c6125
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33026.table
@@ -0,0 +1,17 @@
+0 0 NORMAL OPERATIONS - MEASUREMENT MODE
+1 1 NORMAL OPERATIONS - NON-MEASUREMENT MODE
+2 2 SMALL RH
+3 3 HUMIDITY ELEMENT IS WET
+4 4 HUMIDITY ELEMENT CONTAMINATED
+5 5 HEATER FAIL
+6 6 HEATER FAIL AND WET/CONTAMINATED HUMIDITY ELEMENT
+7 7 AT LEAST ONE OF THE INPUT PARAMETERS USED IN THE CALCULATION OF MIXING RATIO IS INVALID
+8 8 NUMERIC ERROR
+9 9 SENSOR NOT INSTALLED
+10 10 CALCULATED RH > 100%
+11 11 INPUT LASER POWER TOO LOW
+12 12 PROBE WV TEMPERATURE OUT OF RANGE
+13 13 PROBE WV PRESSURE OUT OF RANGE
+14 14 SPECTRAL LINE OUT OF RANGE
+15 15 NO LASER OUTPUT
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33027.table b/definitions/bufr/tables/0/wmo/26/codetables/33027.table
new file mode 100644
index 0000000..8997392
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33027.table
@@ -0,0 +1,6 @@
+0 0 RADIUS >= 1500 M
+1 1 500 M =< RADIUS <1500 M
+2 2 250 M =< RADIUS < 500 M
+3 3 RADIUS < 250 M
+4 4 <= 100 M
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33028.table b/definitions/bufr/tables/0/wmo/26/codetables/33028.table
new file mode 100644
index 0000000..84bd666
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33028.table
@@ -0,0 +1,5 @@
+1 1 NOMINAL
+2 2 DEGRADED BY SW ERROR; ANY ERROR REPORTED BY THE ALGORITHMS
+3 3 DEGRADED BY INSTRUMENT ERROR
+4 4 DEGRADED BY CORRUPTED /MISSING ADF
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33030.table b/definitions/bufr/tables/0/wmo/26/codetables/33030.table
new file mode 100644
index 0000000..c9e36c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33030.table
@@ -0,0 +1,7 @@
+1 1 DO NOT USE SCAN FOR PRODUCT GENERATION
+2 2 TIME SEQUENCE ERROR DETECTED WITH THIS SCAN
+3 3 DATA GAP PRECEDES THIS SCAN
+4 4 NO CALIBRATION
+5 5 NO EARTH LOCATION
+6 6 FIRST GOOD TIME FOLLOWING A CLOCK UPDATE
+7 7 INSTRUMENT STATUS CHANGED WITH THIS SCAN
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33031.table b/definitions/bufr/tables/0/wmo/26/codetables/33031.table
new file mode 100644
index 0000000..c11fd4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33031.table
@@ -0,0 +1,21 @@
+1 1 TIME FIELD IS BAD BUT CAN PROBABLY BE INFERRED FROM THE PREVIOUS GOOD TIME
+2 2 TIME FIELD IS BAD AND CANNOT BE INFERRED FROM THE PREVIOUS GOOD TIME
+3 3 THIS RECORD STARTS A SEQUENCE THAT IS INCONSISTENT WITH PREVIOUS TIMES (I.E. THERE IS A TIME DISCONTINUITY). THIS MAY OR MAY NOT BE ASSOCIATED WITH A SPACECRAFT CLOCK UPDATE (SEE SCAN LINE STATUS FLAGS FOR ATOVS)
+4 4 START OF A SEQUENCE THAT APPARENTLY REPEATS SCAN TIMES THAT HAVE BEEN PREVIOUSLY ACCEPTED
+5 5 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD TIME
+6 6 SCAN LINE WAS CALIBRATED USING FEWER THAN THE PREFERRED NUMBER OF SCAN LINES BECAUSE OF PROXIMITY TO START OR END OF DATA OR TO A DATA GAP
+7 7 SCAN LINE WAS NOT CALIBRATED BECAUSE OF BAD OR INSUFFICIENT PRT DATA
+8 8 SCAN LINE WAS CALIBRATED BUT WITH MARGINAL PRT DATA
+9 9 SOME UNCALIBRATED CHANNELS ON THIS SCAN
+10 10 UNCALIBRATED DUE TO INSTRUMENT MODE
+11 11 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF SPACE VIEW
+12 12 QUESTIONABLE CALIBRATION BECAUSE OF ANTENNA POSITION ERROR OF BLACK BODY
+13 13 NOT EARTH LOCATED BECAUSE OF BAD TIME
+14 14 EARTH LOCATION QUESTIONABLE BECAUSE OF QUESTIONABLE TIME CODE (SEE TIME PROBLEM CODE BITS)
+15 15 EARTH LOCATION QUESTIONABLE - ONLY MARGINAL AGREEMENT WITH REASONABLENESS CHECK
+16 16 EARTH LOCATION QUESTIONABLE - FAILS REASONABLENESS CHECK
+17 17 EARTH LOCATION QUESTIONABLE BECAUSE OF ANTENNA POSITION CHECK
+18 18 SCAN LINE CALIBRATION COLD BLACK BODY
+19 19 SCAN LINE CALIBRATION WARM BLACK BODY
+20 20 SCAN LINE CALIBRATION SPACE VIEW
+21 21 EARTH VIEW
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33032.table b/definitions/bufr/tables/0/wmo/26/codetables/33032.table
new file mode 100644
index 0000000..33307f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33032.table
@@ -0,0 +1,7 @@
+1 1 NO GOOD BLACKBODY COUNTS FOR SCAN LINE
+2 2 NO GOOD SPACE VIEW COUNTS FOR THIS LINE
+3 3 NO GOOD PRTS FOR THIS LINE
+4 4 SOME BAD BLACKBODY VIEW COUNTS FOR THIS LINE
+5 5 SOME BAD SPACE VIEW COUNTS FOR THIS LINE
+6 6 SOME BAD PRT TEMPS ON THIS LINE
+7 7 QUALITY FOR THIS SCAN IS REDUCED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33033.table b/definitions/bufr/tables/0/wmo/26/codetables/33033.table
new file mode 100644
index 0000000..6fd3205
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33033.table
@@ -0,0 +1,3 @@
+1 1 SET IF SECONDARY CALIBRATION USED
+22 22 SET IF ALL THE CHANNELS ARE MISSING
+23 23 SUSPECT
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33035.table b/definitions/bufr/tables/0/wmo/26/codetables/33035.table
new file mode 100644
index 0000000..01996ba
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33035.table
@@ -0,0 +1,10 @@
+0 0 AUTOMATIC QUALITY CONTROL PASSED AND NOT MANUALLY CHECKED
+1 1 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND PASSED
+2 2 AUTOMATIC QUALITY CONTROL PASSED AND MANUALLY CHECKED AND DELETED
+3 3 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY NOT CHECKED
+4 4 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND FAILED
+5 5 AUTOMATIC QUALITY CONTROL FAILED AND MANUALLY CHECKED AND RE-INSERTED
+6 6 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND NOT MANUALLY CHECKED
+7 7 AUTOMATIC QUALITY CONTROL FLAGGED DATA AS QUESTIONABLE AND MANUALLY CHECKED AND FAILED
+8 8 MANUALLY CHECKED AND FAILED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33037.table b/definitions/bufr/tables/0/wmo/26/codetables/33037.table
new file mode 100644
index 0000000..9f26652
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33037.table
@@ -0,0 +1,19 @@
+1 1 U DEPARTURE FROM GUESS
+2 2 V DEPARTURE FROM GUESS
+3 3 U AND V DEPARTURE FROM GUESS
+4 4 U ACCELERATION
+5 5 V ACCELERATION
+6 6 U AND V ACCELERATION
+7 7 POSSIBLE LAND FEATURE
+8 8 U ACCELERATION AND POSSIBLE LAND FEATURE
+9 9 V ACCELERATION AND POSSIBLE LAND FEATURE
+10 10 U AND V ACCELERATION AND POSSIBLE LAND FEATURE
+11 11 BAD WIND GUESS
+12 12 CORRELATION FAILURE
+13 13 SEARCH BOX OFF EDGE OF AREA
+14 14 TARGET BOX OFF EDGE OF AREA
+15 15 PIXEL BRIGHTNESS OUT OF BOUNDS (NOISY LINE)
+16 16 TARGET OUTSIDE OF LATITUDE/LONGITUDE BOX
+17 17 TARGET OUTSIDE OF PRESSURE MINIMUM/MAXIMUM
+18 18 AUTOEDITOR FLAGGED SLOW VECTOR
+19 19 AUTOEDITOR FLAGGED VECTORS
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33038.table b/definitions/bufr/tables/0/wmo/26/codetables/33038.table
new file mode 100644
index 0000000..3dc1192
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33038.table
@@ -0,0 +1,9 @@
+1 1 TOTAL ZENITH DELAY QUALITY IS CONSIDERED POOR
+2 2 GALILEO SATELLITES USED
+3 3 GLONASS SATELLITES USED
+4 4 GPS SATELLITES USED
+5 5 METEOROLOGICAL DATA APPLIED
+6 6 ATMOSPHERIC LOADING CORRECTION APPLIED
+7 7 OCEAN TIDE LOADING APPLIED
+8 8 CLIMATE QUALITY DATA PROCESSING
+9 9 NEAR-REAL TIME DATA PROCESSING
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33039.table b/definitions/bufr/tables/0/wmo/26/codetables/33039.table
new file mode 100644
index 0000000..50ff126
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33039.table
@@ -0,0 +1,9 @@
+1 1 NON-NOMINAL QUALITY
+2 2 OFFLINE PRODUCT
+3 3 ASCENDING OCCULTATION FLAG
+4 4 EXCESS PHASE PROCESSING NON-NOMINAL
+5 5 BENDING ANGLE PROCESSING NON-NOMINAL
+6 6 REFRACTIVITY PROCESSING NON-NOMINAL
+7 7 METEOROLOGICAL PROCESSING NON-NOMINAL
+14 14 BACKGROUND PROFILE NON-NOMINAL
+15 15 BACKGROUND (I.E. NOT RETRIEVED) PROFILE PRESENT
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33041.table b/definitions/bufr/tables/0/wmo/26/codetables/33041.table
new file mode 100644
index 0000000..8bbdba9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33041.table
@@ -0,0 +1,4 @@
+0 0 THE FOLLOWING VALUE IS THE TRUE VALUE
+1 1 THE FOLLOWING VALUE IS HIGHER THAN THE TRUE VALUE (THE MEASUREMENT HIT THE LOWER LIMIT OF THE INSTRUMENT)
+2 2 THE FOLLOWING VALUE IS LOWER THAN THE TRUE VALUE (THE MEASUREMENT HIT THE HIGHER LIMIT OF THE INSTRUMENT)
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33042.table b/definitions/bufr/tables/0/wmo/26/codetables/33042.table
new file mode 100644
index 0000000..b75447a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33042.table
@@ -0,0 +1,5 @@
+0 0 EXCLUSIVE LOWER LIMIT (>)
+1 1 INCLUSIVE LOWER LIMIT (>=)
+2 2 EXCLUSIVE UPPER LIMIT (<)
+3 3 INCLUSIVE UPPER LIMIT (=<)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33043.table b/definitions/bufr/tables/0/wmo/26/codetables/33043.table
new file mode 100644
index 0000000..398d9ab
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33043.table
@@ -0,0 +1,4 @@
+1 1 SEA MDS.  NADIR ONLY SST RETRIEVAL USED 3.7 MICRON CHANNEL.  LAND MDS RESERVED
+2 2 SEA MDS.  DUAL VIEW SST RETRIEVAL USED 3.7 MICRON CHANNEL.  LAND MDS RESERVED
+3 3 NADIR VIEW CONTAINS DAY TIME DATA
+4 4 FORWARD VIEW CONTAINS DAY TIME DATA
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33044.table b/definitions/bufr/tables/0/wmo/26/codetables/33044.table
new file mode 100644
index 0000000..01746c7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33044.table
@@ -0,0 +1,14 @@
+1 1 INPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+2 2 INPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+3 3 NUMBER OF INPUT DATA GAPS > THRESHOLD VALUE
+4 4 PERCENTAGE OF MISSING LINES > THRESHOLD VALUE
+5 5 DOPPLER CENTROID UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE
+6 6 DOPPLER AMBIGUITY ESTIMATE UNCERTAIN. CONFIDENCE MEASURE < SPECIFIC VALUE
+7 7 OUTPUT DATA MEAN OUTSIDE NOMINAL RANGE FLAG
+8 8 OUTPUT DATA STANDARD DEVIATION OUTSIDE NOMINAL RANGE FLAG
+9 9 CHIRP RECONSTRUCTION FAILED OR IS OF LOW QUALITY FLAG
+10 10 DATA SET MISSING
+11 11 INVALID DOWNLINK PARAMETERS
+12 12 AZIMUTH CUT-OFF ITERATION COUNT. THE AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+13 13 AZIMUTH CUT-OFF FIT DID NOT CONVERGE WITHIN A MINIMUM NUMBER OF ITERATIONS
+14 14 PHASE INFORMATION CONFIDENCE MEASURE. THE IMAGINARY SPECTRAL PEAK IS LESS THAN A MINIMUM THRESHOLD, OR THE ZERO LAG SHIFT IS GREATER THAN A MINIMUM THRESHOLD
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33047.table b/definitions/bufr/tables/0/wmo/26/codetables/33047.table
new file mode 100644
index 0000000..f69b56e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33047.table
@@ -0,0 +1,27 @@
+1 1 ERROR DETECTED AND ATTEMPTS TO RECOVER MADE
+2 2 ANOMALY IN ON-BOARD DATA HANDLING (OBDH) VALUE DETECTED
+3 3 ANOMALY IN ULTRA STABLE OSCILLATOR PROCESSING (USOP) VALUE DETECTED
+4 4 ERRORS DETECTED BY ON-BOARD COMPUTER
+5 5 AUTOMATIC GAIN CONTROL (AGC) OUT OF RANGE
+6 6 RECEPTION (RX) DELAY FAULT.  RX DISTANCE OUT OF RANGE
+7 7 WAVE FORM SAMPLES FAULT IDENTIFIER. ERROR
+8 8 S BAND ANOMALY/ERROR DETECTED
+12 12 BRIGHTNESS TEMPERATURE (CHANNEL 1) OUT OF RANGE
+13 13 BRIGHTNESS TEMPERATURE (CHANNEL 2) OUT OF RANGE
+14 14 RESERVED
+15 15 KU BAND OCEAN RETRACKING ERROR
+16 16 S BAND OCEAN RETRACKING ERROR
+17 17 KU BAND ICE 1 RETRACKING ERROR
+18 18 S BAND ICE 1 RETRACKING ERROR
+19 19 KU BAND ICE 2 RETRACKING ERROR
+20 20 S BAND ICE 2 RETRACKING ERROR
+21 21 KU BAND SEA ICE RETRACKING ERROR
+22 22 ARITHMETIC FAULT ERROR
+23 23 METEO DATA STATE. NO MAP
+24 24 METEO DATA STATE. 1 MAP
+25 25 METEO DATA STATE. 2 MAPS DEGRADED
+26 26 METEO DATA STATE. 2 MAPS NOMINAL
+27 27 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, SEVERAL ERRORS
+28 28 ORBIT PROPAGATOR STATUS FOR PROPAGATION MODE, WARNING DETECTED
+29 29 ORBIT PROPAGATOR STATUS FOR INITIALIZATION MODE, SEVERAL ERRORS
+30 30 ORBIT PROPAGATOR STATUS FOR INITIALIZATION MODE, WARNING DETECTED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33048.table b/definitions/bufr/tables/0/wmo/26/codetables/33048.table
new file mode 100644
index 0000000..312ba40
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33048.table
@@ -0,0 +1,4 @@
+0 0 INVERSION SUCCESSFUL
+1 1 INVERSION NOT SUCCESSFUL
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33049.table b/definitions/bufr/tables/0/wmo/26/codetables/33049.table
new file mode 100644
index 0000000..bdde061
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33049.table
@@ -0,0 +1,4 @@
+0 0 EXTERNAL WIND DIRECTION USED DURING INVERSION
+1 1 EXTERNAL WIND DIRECTION NOT USED DURING INVERSION
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33050.table b/definitions/bufr/tables/0/wmo/26/codetables/33050.table
new file mode 100644
index 0000000..ee7bb6d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33050.table
@@ -0,0 +1,9 @@
+0 0 UNQUALIFIED
+1 1 CORRECT VALUE (ALL CHECKS PASSED)
+2 2 PROBABLY GOOD BUT VALUE INCONSISTENT WITH STATISTICS (DIFFER FROM CLIMATOLOGY)
+3 3 PROBABLY BAD (SPIKE, GRADIENT, ETC., IF OTHER TESTS PASSED)
+4 4 BAD VALUE, IMPOSSIBLE VALUE (OUT OF SCALE, VERTICAL INSTABILITY, CONSTANT PROFILE)
+5 5 VALUE MODIFIED DURING QUALITY CONTROL
+8 8 INTERPOLATED VALUE
+9 9 GOOD FOR OPERATIONAL USE; CAUTION; CHECK LITERATURE FOR OTHER USES
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33060.table b/definitions/bufr/tables/0/wmo/26/codetables/33060.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33060.table
@@ -0,0 +1,4 @@
+0 0 GOOD
+1 1 BAD
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33070.table b/definitions/bufr/tables/0/wmo/26/codetables/33070.table
new file mode 100644
index 0000000..8a0467b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33070.table
@@ -0,0 +1,14 @@
+0 0 GOOD RETRIEVAL
+1 1 BAD AEROSOL INFORMATION FLAG OR NOAA-16 RADIANCE ANOMALY
+2 2 SOLAR ZENITH ANGLE GREATER THAN 84 DEGREES
+3 3 380 NM RESIDUE GREATER THAN LIMIT
+4 4 OZONE INCONSISTENCY
+5 5 DIFFERENCE BETWEEN PROFILE OZONE AND STEP 3 TOTAL OZONE EXCEEDS THRESHOLD (SET TO 25 DU)
+6 6 STEP 1 OZONE ITERATION DID NOT CONVERGE
+7 7 ANY CHANNEL RESIDUE GREATER THAN 16 OR BAD RADIANCE
+8 8 INSUFFICIENT PIXELS - NOT PROCESSED
+9 9 FIRST GUESS GOOD - OZONE FORECAST DATA USED
+10 10 HIGH CLOUD IN PIXEL - NOT PROCESSED
+11 11 SUCCESSFUL OZONE RETRIEVAL
+12 12 UNSUCCESSFUL OZONE RETRIEVAL
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33071.table b/definitions/bufr/tables/0/wmo/26/codetables/33071.table
new file mode 100644
index 0000000..8c9d4de
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33071.table
@@ -0,0 +1,10 @@
+0 0 GOOD RETRIEVAL
+1 1 SOLAR ZENITH ANGLE GREATER THAN 84 DEGREES
+2 2 DIFFERENCE BETWEEN STEP 3 AND PROFILE TOTAL OZONE GREATER THAN LIMIT (25 DU)
+3 3 AVERAGE FINAL RESIDUE FOR WAVELENGTHS USED IN RETRIEVAL GREATER THAN THRESHOLD
+4 4 FINAL RESIDUE GREATER THAN 3 TIMES A PRIORI ERROR
+5 5 DIFFERENCE BETWEEN RETRIEVED AND A PRIORI GREATER THAN 3 TIMES A PRIORI ERROR
+6 6 NON-CONVERGENT SOLUTION
+7 7 UPPER LEVEL PROFILE ANOMALY OR STRAY LIGHT ANOMALY
+8 8 INITIAL RESIDUE GREATER THAN 18.0 N-VALUE UNITS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33072.table b/definitions/bufr/tables/0/wmo/26/codetables/33072.table
new file mode 100644
index 0000000..fcc7f09
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33072.table
@@ -0,0 +1,18 @@
+0 0 GOOD RETRIEVAL
+1 1 REFLECTIVITY OUT OF RANGE
+2 2 LARGER PIXELS (NUMBER OF CROSS-TRACK PIXELS LESS THAN 32) OR BACKWARD SCANS ERROR
+3 3 SOLAR ZENITH ANGLE GREATER THAN 88 DEGREES
+4 4 LATITUDE/LONGITUDE OUT OF RANGE
+5 5 VIEWING ZENITH ANGLE OR SOLAR ZENITH ANGLE OUT OF RANGE
+6 6 STEP-ONE PROCESS FAILED IN GENERAL
+7 7 FIRST GUESS OZONE OUT OF RANGE
+8 8 TOO MANY ITERATIONS (EXCEED 8)
+9 9 STEP-ONE RESIDUE CALCULATION FAILED
+10 10 STEP-TWO PROCESS FAILED IN GENERAL
+11 11 FIRST GUESS OZONE PROFILE OUT OF RANGE
+12 12 STEP-TWO OZONE VALUE OUT OF RANGE
+13 13 STEP-TWO RESIDUE CALCULATION FAILED
+14 14 STEP-THREE PROCESS FAILED IN GENERAL
+15 15 POLARIZATION CORRECTION ACCURACY ALERT
+16 16 RADIANCE OR IRRADIANCE LESS OR EQUAL TO ZERO
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33075.table b/definitions/bufr/tables/0/wmo/26/codetables/33075.table
new file mode 100644
index 0000000..23edae6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33075.table
@@ -0,0 +1,5 @@
+1 1 GAP IN RAW DATA RECORD (RDR) DATA DETECTED (I.E., MISSING SCAN(S) PRECEDING THE CURRENT SCAN)
+2 2 RECORDED TIME IS NOT IN SEQUENCE (I.E., THE SCAN START TIME IS OUT OF SEQUENCE)
+3 3 LAMBDA MONITORED CALCULATION CANNOT BE UPDATED
+4 4 THE MEASURED TEMPERATURES OF ANY INSTRUMENT COMPONENTS (E.G., BEAM-SPLITTER, SCAN MIRROR, SCAN BAFFLE) ARE OUTSIDE THE ALLOWABLE RANGES
+5 5 AT LEAST ONE OF THE MONITORED INSTRUMENT TEMPERATURES HAS DRIFTED MORE THAN A SPECIFIED TOLERANCE VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33076.table b/definitions/bufr/tables/0/wmo/26/codetables/33076.table
new file mode 100644
index 0000000..7100c4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33076.table
@@ -0,0 +1,2 @@
+1 1 LUNAR INTRUSION ON FIRST DEEP SPACE VIEW
+2 2 LUNAR INTRUSION ON SECOND DEEP SPACE VIEW
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33077.table b/definitions/bufr/tables/0/wmo/26/codetables/33077.table
new file mode 100644
index 0000000..742c83c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33077.table
@@ -0,0 +1,12 @@
+1 1 DEGRADED SDR* QUALITY
+2 2 INVALID SDR* QUALITY
+3 3 INVALID SDR* GEOLOCATION INFORMATION
+4 4 DEGRADED RADIOMETRIC CALIBRATION
+5 5 INVALID RADIOMETRIC CALIBRATION
+6 6 DEGRADED SPECTRAL CALIBRATION
+7 7 INVALID SPECTRAL CALIBRATION
+8 8 FRINGE COUNT ERROR DETECTED AND CORRECTED
+9 9 DAY/NIGHT INDICATOR
+10 10 INVALID RDR** DATA
+11 11 SIGNIFICANT FRINGE COUNT ERROR DETECTED
+12 12 BIT TRIM FAILED
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33078.table b/definitions/bufr/tables/0/wmo/26/codetables/33078.table
new file mode 100644
index 0000000..f3a2180
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33078.table
@@ -0,0 +1,5 @@
+0 0 NOMINAL - ALTITUDE AND EPHEMERIS DATA AVAILABLE
+1 1 MISSING AT MOST A SMALL GAP OF ALTITUDE AND EPHEMERIS DATA
+2 2 MISSING MORE THAN A SMALL GAP OF ALTITUDE AND EPHEMERIS DATA, BUT NO MORE THAN A GRANULE BOUNDARY
+3 3 MISSING MORE THAN A GRANULE BOUNDARY OF ALTITUDE AND EPHEMERIS DATA
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33079.table b/definitions/bufr/tables/0/wmo/26/codetables/33079.table
new file mode 100644
index 0000000..0875143
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33079.table
@@ -0,0 +1,10 @@
+6 6 THE NO. 1-NO. 7 HEALTH CHECKS FAILED
+7 7 THE NO. 8-NO. 15 HEALTH CHECKS FAILED
+8 8 THE NO. 16-NO. 23 HEALTH CHECKS FAILED
+9 9 THE NO. 24-NO. 31 HEALTH CHECKS FAILED
+10 10 THE NO. 32-NO. 39 HEALTH CHECKS FAILED
+11 11 THE NO. 40-NO. 47 HEALTH CHECKS FAILED
+12 12 THE NO. 48-NO. 55 HEALTH CHECKS FAILED
+13 13 THE NO. 56-NO. 63 HEALTH CHECKS FAILED
+14 14 THE NO. 64-NO. 70 HEALTH CHECKS FAILED
+15 15 QUADRATIC CORRECTION APPLIED TO THE RADIOMETRIC TRANSFER FUNCTION FOR NON-LINEARITY CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33080.table b/definitions/bufr/tables/0/wmo/26/codetables/33080.table
new file mode 100644
index 0000000..a39dd47
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33080.table
@@ -0,0 +1,13 @@
+7 7 DIVIDE-BY-ZERO CONDITION OR COMPUTATION LOOP FAILED TO CONVERGE IN THE K/KA AND V (KAV) BAND PRT
+8 8 DIVIDE-BY-ZERO CONDITION OR COMPUTATION LOOP FAILED TO CONVERGE IN THE WG BAND PRT
+9 9 DIVIDE-BY-ZERO CONDITION OR COMPUTATION LOOP FAILED TO CONVERGE IN THE K/KA, V, W, G BAND RECEIVER SHELF PRT K TEMPERATURE COMPUTATION
+10 10 OUT OF RANGE CONDITION FOR THE K/KA AND V BAND PRT
+11 11 OUT OF RANGE CONDITION FOR THE WG BAND PRT
+12 12 KAV PRT TEMPERATURE INCONSISTENCY
+13 13 WG PRT TEMPERATURE INCONSISTENCY
+14 14 TIME SEQUENCE ERROR
+15 15 DATA GAP - MISSING SCAN(S) PRECEDING THE CURRENT SCAN
+16 16 KAV PRT SUFFICIENCY - INSUFFICIENT KAV PRT DATA ARE AVAILABLE
+17 17 WG PRT SUFFICIENCY - INSUFFICIENT WG PRT DATA ARE AVAILABLE
+18 18 SPACE VIEW ANTENNA POSITION ERROR
+19 19 BLACKBODY ANTENNA POSITION ERROR
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33081.table b/definitions/bufr/tables/0/wmo/26/codetables/33081.table
new file mode 100644
index 0000000..f8759e0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33081.table
@@ -0,0 +1,9 @@
+3 3 MOON IN SPACE VIEW
+4 4 GAIN ERROR - THE LOWEST BLACKBODY COUNT IS SMALLER THAN OR EQUAL TO THE HIGHEST SPACE VIEW COUNT IN A SCAN
+5 5 CALIBRATION WITH FEWER THAN PREFERRED SAMPLES
+6 6 SPACE VIEW DATA SUFFICIENCY CHECK - INSUFFICIENT SPACE VIEW SAMPLES ARE AVAILABLE
+7 7 BLACKBODY VIEW DATA SUFFICIENCY CHECK - INSUFFICIENT BLACKBODY VIEW SAMPLES ARE AVAILABLE
+8 8 OUT OF RANGE CONDITION FOR THE SPACE VIEW
+9 9 OUT OF RANGE CONDITION FOR THE BLACKBODY VIEW
+10 10 SPACE VIEW INCONSISTENCY
+11 11 BLACKBODY VIEW INCONSISTENCY
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33082.table b/definitions/bufr/tables/0/wmo/26/codetables/33082.table
new file mode 100644
index 0000000..4671574
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33082.table
@@ -0,0 +1,10 @@
+6 6 WITHIN SOUTH ATLANTIC ANOMALY
+7 7 INVALID INPUT DATA (INDICATES THAT ANY OF THE SPACECRAFT EPHEMERIS OR ATTITUDE DATA ARE INVALID)
+8 8 BAD POINTING (INDICATES THAT THE SENSOR LOS DOES NOT INTERSECT THE GEOID, IS NEAR THE LIMB, HAS INVALID SENSOR ANGLES OR OTHER SIMILAR CONDITION)
+9 9 BAD TERRAIN (INDICATES THAT THE ALGORITHM COULD NOT OBTAIN A VALID TERRAIN VALUE)
+10 10 INVALID SOLAR ANGLES
+11 11 MISSING AT MOST A SMALL GAP OF ALTITUDE AND EPHEMERIS DATA
+12 12 MISSING MORE THAN A SMALL GAP OF ALTITUDE AND EPHEMERIS DATA, BUT NO MORE THAN A GRANULE BOUNDARY
+13 13 MISSING MORE THAN A GRANULE BOUNDARY OF ALTITUDE AND EPHEMERIS DATA
+14 14 THE NUMBER OF ENCODER PULSE VALUES PER DELTA TIME IS NOT AS EXPECTED
+15 15 SOLAR ECLIPSE DURING EARTH VIEW SCAN
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33083.table b/definitions/bufr/tables/0/wmo/26/codetables/33083.table
new file mode 100644
index 0000000..6fe63f6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33083.table
@@ -0,0 +1,10 @@
+6 6 PIXEL IS AFFECTED BY RADIO-FREQUENCY INTERFERENCE
+7 7 POOR CALIBRATION QUALITY DUE TO BAD SPACE VIEW OFFSETS, OBC * VIEW OFFSETS, ETC. OR USE OF A PREVIOUS CALIBRATION VIEW
+8 8 SATURATED PIXEL
+9 9 MISSING DATA -DATA REQUIRED FOR CALIBRATION PROCESSING ARE NOT AVAILABLE FOR PROCESSING
+10 10 CALIBRATED PIXEL RADIANCE OUT OF RANGE
+11 11 CALIBRATED PIXEL REFLECTANCE OR EBBT OUT OF RANGE
+12 12 THE MOON HAS CORRUPTED THE SPACE VIEW
+13 13 SCAN DATA IS NOT PRESENT (NO VALID DATA)
+14 14 QUALITY FOR THIS SCAN-LINE IS REDUCED. THE VALUE IS DETERMINED BY THE COMBINED NUMBER OF STEPS REQUIRED TO FIND A REPLACEMENT FOR THERMISTOR OR CALIBRATION SOURCE DATA
+15 15 BAD DETECTOR
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33084.table b/definitions/bufr/tables/0/wmo/26/codetables/33084.table
new file mode 100644
index 0000000..accb209
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33084.table
@@ -0,0 +1,10 @@
+6 6 BULK SST OUTSIDE OF VALIDATION RANGE
+7 7 SKIN SST OUTSIDE OF VALIDATION RANGE
+8 8 SENSOR ZENITH ANGLE > 40 DEGREES (PIXEL IS NOT WITHIN 40 DEGREES OF NADIR AND THEREFORE IS NOT OF HIGH QUALITY)
+9 9 DEGRADATION - HORIZONTAL CELL SIZE (HCS) > 1.3 KM (HCS > 1.3 KM, SWATH WIDTH > 1 700 KM, SENSOR ZENITH ANGLE > 50.3 DEGREES)
+10 10 EXCLUSION: NO OCEAN IN PIXEL
+11 11 DEGRADATION: AEROSOL OPTICAL THICKNESS (AOT) > 0.6 (AOT IN HORIZONTAL CELL > 0.6 ON THE SLANT PATH (AOT @550 NM))
+12 12 EXCLUSION: AOT > 1.0 (AOT IN HORIZONTAL CELL > 1.0 ON THE SLANT PATH (AOT @550 NM))
+13 13 SUN GLINT PRESENT IN PIXEL
+14 14 ICE CONCENTRATION THRESHOLD EXCEEDED (SST NOT RETRIEVED DUE TO ICE CONCENTRATION EXCEEDING THRESHOLD IN SYSTEM SPEC)
+15 15 THIN CIRRUS DETECTED IN PIXEL
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33085.table b/definitions/bufr/tables/0/wmo/26/codetables/33085.table
new file mode 100644
index 0000000..7962ec5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33085.table
@@ -0,0 +1,14 @@
+4 4 ANGSTROM EXPONENT IS OUTSIDE OF THE SYSTEM SPECIFICATION RANGE
+5 5 EXCLUDED, ANGSTROM EXPONENT FOR AOT* AT 550 NM < 0.15
+6 6 BRIGHT SURFACE IN CELL (IF OVER LAND), OR SHALLOW OR TURBID WATER IN CELL (IF OVER OCEAN)
+7 7 LOW SUN, EXCLUDED, SOLAR ZENITH ANGLE > 80 DEGREES
+8 8 LOW SUN, DEGRADED, 65 DEGREES < SOLAR ZENITH ANGLE <= 80 DEGREES
+9 9 FIRE DETECTED IN CELL
+10 10 SNOW/ICE IN CELL
+11 11 CLOUD SHADOW IN CELL
+12 12 SUN GLINT IN CELL
+13 13 BAD SDR** DATA PRESENT IN HORIZONTAL CELL (QUALITY OF AOT/APSP*** DEGRADED OR AOT/APSP NOT RETRIEVED DUE TO BAD SDR DATA IN HORIZONTAL CELL)
+14 14 CIRRUS CONTAMINATION IN CELL
+15 15 CLOUD ADJACENT TO CELL
+16 16 CLOUD CONTAMINATION IN CELL
+17 17 AOT IS OUTSIDE OF THE SYSTEM SPECIFICATION RANGE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33086.table b/definitions/bufr/tables/0/wmo/26/codetables/33086.table
new file mode 100644
index 0000000..b7cda32
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33086.table
@@ -0,0 +1,5 @@
+0 0 NOT RETRIEVED
+1 1 EXCLUDED
+2 2 DEGRADED
+3 3 HIGH QUALITY
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33087.table b/definitions/bufr/tables/0/wmo/26/codetables/33087.table
new file mode 100644
index 0000000..f3000e2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33087.table
@@ -0,0 +1,10 @@
+0 0 LESS THAN OR EQUAL TO 10%
+1 1 GREATER THAN 10% BUT LESS THAN OR EQUAL TO 20%
+2 2 GREATER THAN 20% BUT LESS THAN OR EQUAL TO 30%
+3 3 GREATER THAN 30% BUT LESS THAN OR EQUAL TO 40%
+4 4 GREATER THAN 40% BUT LESS THAN OR EQUAL TO 50%
+5 5 GREATER THAN 50% BUT LESS THAN OR EQUAL TO 60%
+6 6 GREATER THAN 60% BUT LESS THAN OR EQUAL TO 70%
+7 7 GREATER THAN 70% BUT LESS THAN OR EQUAL TO 80%
+8 8 GREATER THAN 80%
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/33088.table b/definitions/bufr/tables/0/wmo/26/codetables/33088.table
new file mode 100644
index 0000000..8f7b539
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/33088.table
@@ -0,0 +1,12 @@
+6 6 SURFACE REFLECTIVITY OUT OF RANGE
+7 7 RESIDUAL TOO LARGE
+8 8 AEROSOL INDEX LIMIT EXCEEDED
+9 9 SOLAR ECLIPSE PRESENT (ALL OR PART OF THE IFOV* IS AFFECTED BY A SOLAR ECLIPSE, UMBRA OR PENUMBRA VIEWING)
+10 10 SUN GLINT PRESENT WITHIN IFOV
+11 11 SNOW OR ICE SURFACE IS WITHIN THE IFOV
+12 12 SOLAR ZENITH ANGLE IN EXCLUDED (NIGHT) CONDITION (SOLAR ZENITH ANGLE >= 88 DEGREES)
+13 13 SOLAR ZENITH ANGLE IN DEGRADED CONDITION (80 DEGREES <= SOLAR ZENITH ANGLE < 88 DEGREES)
+14 14 SO2 INDEX > 6 DU (DEGRADED CONDITION)
+15 15 RESIDUES ARE NOT CONSISTENT (INDICATES WHETHER THE RESIDUES FROM THE 22 WAVELENGTHS ARE CONSISTENT)
+16 16 O3 TRIPLET SELECTION IS NOT CONSISTENT WITHIN RETRIEVAL (OZONE TRIPLET CONSISTENCY)
+17 17 INPUT DATA QUALITY IS NOT GOOD
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/35000.table b/definitions/bufr/tables/0/wmo/26/codetables/35000.table
new file mode 100644
index 0000000..8c57023
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/35000.table
@@ -0,0 +1 @@
+1023 1023 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/35001.table b/definitions/bufr/tables/0/wmo/26/codetables/35001.table
new file mode 100644
index 0000000..bba0c81
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/35001.table
@@ -0,0 +1,4 @@
+0 0 REAL TIME
+1 1 NEAR-REAL TIME
+2 2 NON-REAL TIME
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/35030.table b/definitions/bufr/tables/0/wmo/26/codetables/35030.table
new file mode 100644
index 0000000..5b83f8b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/35030.table
@@ -0,0 +1,10 @@
+0 0 NO DISCREPANCIES
+1 1 NON-COMPLIANCE WITH STANDARD AND RECOMMENDED PRACTICES AND PROCEDURES INCLUDING THOSE OF MONITORING
+2 2 CATALOGUES OF METEOROLOGICAL BULLETINS NOT UPDATED IN A TIMELY MANNER
+3 3 INCORRECT ROUTING DIRECTORIES
+4 4 LACK OF FLEXIBILITY IN THE ROUTING ARRANGEMENTS
+5 5 DEFICIENCIES IN THE OPERATION OF GTS CENTRES AND CIRCUITS
+6 6 LOSS OF DATA OR DELAYS IN RELAYING DATA ON THE GTS
+7 7 ROUTING OF DATA DIFFERENT FROM THE ROUTING PROVIDED IN THE PLAN
+8 8 VARIOUS MALPRACTICES
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/35031.table b/definitions/bufr/tables/0/wmo/26/codetables/35031.table
new file mode 100644
index 0000000..bdd705d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/35031.table
@@ -0,0 +1,20 @@
+1 1 SUFFICIENT AND ALL OF ACCEPTABLE QUALITY
+2 2 SUFFICIENT BUT PARTLY OF ACCEPTABLE QUALITY
+3 3 INSUFFICIENT BUT ALL OF ACCEPTABLE QUALITY
+4 4 INSUFFICIENT AND OF UNACCEPTABLE QUALITY
+5 5 SOME MESSAGES NOT COMPLETE
+6 6 SUSPECT OR WRONGLY CODED GROUPS COULD NOT BE INTERPRETED CONFIDENTLY
+7 7 GROSS CODING ERRORS
+8 8 TRANSMISSION SEQUENTIAL ORDER NOT OBSERVED
+9 9 REPORT COMPLETELY GARBLED AND THUS DISCARDED
+10 10 DEFICIENCIES IDENTIFIED AND RECTIFIED
+11 11 DEFICIENCIES IDENTIFIED BUT NOT RECTIFIED
+12 12 DEFICIENCIES NOT IDENTIFIED
+13 13 MEASURING ERRORS
+14 14 MUTUAL INCONSISTENCY
+15 15 TEMPORAL INCONSISTENCY
+16 16 FORECAST ERROR
+17 17 BIAS
+18 18 IMPROVE SYSTEM OF QUALITY CONTROL
+19 19 EXPAND TRAINING PROGRAMMES
+127 127 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/35032.table b/definitions/bufr/tables/0/wmo/26/codetables/35032.table
new file mode 100644
index 0000000..7f53a05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/35032.table
@@ -0,0 +1,10 @@
+1 1 DATA GROUPS MISSING DUE TO RADIO FADING
+2 2 DATA GROUPS MISSING DUE TO OUTAGE OF CENTRE
+3 3 DATA GROUPS MISSING DUE TO OUTAGE OF CIRCUIT
+4 4 NON-IMPLEMENTATION OR MAINTENANCE OF REQUIRED RBSN DENSITY
+5 5 SHORTAGE OF QUALIFIED STAFF TO MAN STATIONS
+6 6 LACK OF CONSUMABLES
+7 7 INSTRUMENT FAILURE
+8 8 NON-ADHERENCE TO TELECOMMUNICATION PROCEDURES
+9 9 SOME OBSERVING PROGRAMMES CEASED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/35033.table b/definitions/bufr/tables/0/wmo/26/codetables/35033.table
new file mode 100644
index 0000000..86e9592
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/35033.table
@@ -0,0 +1,12 @@
+1 1 NO DEFICIENCY
+2 2 OBSERVATIONS NOT MADE REGULARLY
+3 3 OBSERVATIONS NOT MADE AT RIGHT TIME
+4 4 OBSERVATIONS MADE BUT NOT DISSEMINATED
+5 5 OBSERVATIONS MADE AND SENT TO INCORRECT USERS
+6 6 COLLECTION NOT RECEIVED
+7 7 COLLECTION TRANSMITTED LATE
+8 8 COLLECTION NOT TRANSMITTED
+9 9 DIFFICULTIES IN HF PROPAGATION AND SELECTION OF SUITABLE FREQUENCY
+10 10 DIFFICULTIES IN MAINTENANCE OF COMMUNICATION EQUIPMENT AT REMOTE STATIONS
+11 11 NO ALTERNATIVE ARRANGEMENT FOR ROUTING METEOROLOGICAL OBSERVATION
+123 123 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/35034.table b/definitions/bufr/tables/0/wmo/26/codetables/35034.table
new file mode 100644
index 0000000..7297664
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/35034.table
@@ -0,0 +1,7 @@
+1 1 SLIGHT IMPROVEMENT
+2 2 SIGNIFICANT IMPROVEMENT
+3 3 MOST SIGNIFICANT IMPROVEMENT
+4 4 STEADY
+5 5 DECREASING
+6 6 EFFORTS REQUIRED TO IMPROVE NIGHT-TIME OBSERVATIONS
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/35035.table b/definitions/bufr/tables/0/wmo/26/codetables/35035.table
new file mode 100644
index 0000000..2007fc4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/35035.table
@@ -0,0 +1,18 @@
+0 0 RESERVED
+1 1 BALLOON BURST
+2 2 BALLOON FORCED DOWN BY ICING
+3 3 LEAKING OR FLOATING BALLOON
+4 4 WEAK OR FADING SIGNAL
+5 5 BATTERY FAILURE
+6 6 GROUND EQUIPMENT FAILURE
+7 7 SIGNAL INTERFERENCE
+8 8 RADIOSONDE FAILURE
+9 9 EXCESSIVE MISSING DATA FRAMES
+10 10 RESERVED
+11 11 EXCESSIVE MISSING TEMPERATURE
+12 12 EXCESSIVE MISSING PRESSURE
+13 13 USER TERMINATED
+14 14 SUDDEN LOSS OF SIGNAL
+15 15 TRACKING LOST
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40005.table b/definitions/bufr/tables/0/wmo/26/codetables/40005.table
new file mode 100644
index 0000000..045a4f1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40005.table
@@ -0,0 +1,5 @@
+1 1 SOIL MOISTURE BETWEEN -20% AND 0%
+2 2 SOIL MOISTURE BETWEEN 100% AND 120%
+3 3 CORRECTION OF WET BACKSCATTER REFERENCE
+4 4 CORRECTION OF DRY BACKSCATTER REFERENCE
+5 5 CORRECTION OF VOLUME SCATTERING IN SAND
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40006.table b/definitions/bufr/tables/0/wmo/26/codetables/40006.table
new file mode 100644
index 0000000..d53382e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40006.table
@@ -0,0 +1,8 @@
+1 1 NOT SOIL
+2 2 SENSITIVITY TO SOIL MOISTURE BELOW LIMIT
+3 3 AZIMUTHAL NOISE ABOVE LIMIT
+4 4 BACKSCATTER FORE-AFT BEAM OUT OF RANGE
+5 5 SLOPE MID-FORE BEAM OUT OF RANGE
+6 6 SLOPE MID-AFT BEAM OUT OF RANGE
+7 7 SOIL MOISTURE BELOW -20%
+8 8 SOIL MOISTURE ABOVE 120%
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40011.table b/definitions/bufr/tables/0/wmo/26/codetables/40011.table
new file mode 100644
index 0000000..ddc7e86
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40011.table
@@ -0,0 +1,4 @@
+1 1 MEAN SEA-SURFACE (MSS) INTERPOLATION FLAG
+2 2 OCEAN TIDE SOLUTION 1 INTERPOLATION FLAG (0 = 4 POINTS OVER OCEAN, 1 = LESS THAN 4 POINTS)
+3 3 OCEAN TIDE SOLUTION 2 INTERPOLATION FLAG (0 = 4 POINTS OVER OCEAN, 1 = LESS THAN 4 POINTS)
+4 4 METEOROLOGICAL DATA INTERPOLATION FLAG (0 = 4 POINTS OVER OCEAN, 1 = LESS THAN 4 POINTS)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40012.table b/definitions/bufr/tables/0/wmo/26/codetables/40012.table
new file mode 100644
index 0000000..d8ce14d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40012.table
@@ -0,0 +1,3 @@
+1 1 18.7 GHZ BRIGHTNESS TEMPERATURE
+2 2 23.8 GHZ BRIGHTNESS TEMPERATURE
+3 3 34 GHZ BRIGHTNESS TEMPERATURE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40013.table b/definitions/bufr/tables/0/wmo/26/codetables/40013.table
new file mode 100644
index 0000000..79b991a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40013.table
@@ -0,0 +1,5 @@
+0 0 INTERPOLATION WITH NO GAP BETWEEN JMR* DATA
+1 1 INTERPOLATION WITH GAPS BETWEEN JMR* DATA
+2 2 EXTRAPOLATION OF JMR* DATA
+3 3 FAILURE OF EXTRAPOLATION AND INTERPOLATION
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40020.table b/definitions/bufr/tables/0/wmo/26/codetables/40020.table
new file mode 100644
index 0000000..fa1d1f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40020.table
@@ -0,0 +1,16 @@
+1 1 NZPD AND COMPLEX CALIBRATION ERROR
+2 2 BAND 3 AFFECTED BY SPIKE
+3 3 BAND 3 AFFECTED BY SATURATION
+4 4 BAND 2 AFFECTED BY SPIKE
+5 5 BAND 1 AFFECTED BY SPIKE
+6 6 OVERFLOW/UNDER FLOW
+7 7 ON-BOARD PROCESSING ERROR
+8 8 SPECTRAL CALIBRATION ERROR
+9 9 RADIOMETRIC CALIBRATION ERROR
+10 10 MISSING AVHRR DATA
+11 11 MISSING IIS DATA
+12 12 MISSING SOUNDER DATA
+13 13 GQISFLAGQUAL SUMMARY FLAG FOR ALL BANDS
+14 14 ON-GROUND PROCESSING ERROR
+15 15 INTER-CALIBRATION ERROR IASI/AVHRR
+16 16 SPARE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40023.table b/definitions/bufr/tables/0/wmo/26/codetables/40023.table
new file mode 100644
index 0000000..2e4cbfb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40023.table
@@ -0,0 +1,4 @@
+1 1 BAND SEQUENCE (0 = 3KU_1C_3KU, 1 = 2KU_1C_2KU)
+2 2 C BAND FREQUENCY (0 = 320 MHZ, 1 = 100 MHZ)
+3 3 C BAND STATUS (0 = ON, 1 = OFF)
+4 4 KU BAND STATUS (0 = ON, 1 = OFF)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40024.table b/definitions/bufr/tables/0/wmo/26/codetables/40024.table
new file mode 100644
index 0000000..c8421e5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40024.table
@@ -0,0 +1,5 @@
+0 0 2 MAPS AVAILABLE (6 HOURS APART)
+1 1 2 MAPS AVAILABLE (> 6 HOURS APART)
+2 2 1 MAP AVAILABLE; DATA EXTRAPOLATED
+3 3 NO MAPS USED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40025.table b/definitions/bufr/tables/0/wmo/26/codetables/40025.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40025.table
@@ -0,0 +1,4 @@
+0 0 GOOD
+1 1 BAD
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40028.table b/definitions/bufr/tables/0/wmo/26/codetables/40028.table
new file mode 100644
index 0000000..0b104f1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40028.table
@@ -0,0 +1,16 @@
+0 0 GOOD DATA
+1 1 POSSIBLE SUN GLINT
+2 2 POSSIBLE RADIO-FREQUENCY INTERFERENCE
+3 3 DEGRADED GEOLOCATION DATA
+4 4 DATA CORRECTED FOR WARM LOAD INTRUSION
+5 5 SCAN BLANKING ON
+6 6 DATA IS MISSING FROM FILE OR UNREADABLE
+7 7 UNPHYSICAL BRIGHTNESS TEMPERATURE
+8 8 ERROR IN GEOLOCATION DATA
+9 9 DATA MISSING IN ONE CHANNEL
+10 10 DATA MISSING IN MULTIPLE CHANNELS
+11 11 LAT/LON VALUES ARE OUT OF RANGE
+12 12 NON-NORMAL STATUS MODES
+13 13 DISTANCE TO CORRESPONDING IF PIXEL > 7 KM
+14 14 RESERVED
+15 15 MISSING VALUE (NO QUALITY INFORMATION AVAILABLE)
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/40036.table b/definitions/bufr/tables/0/wmo/26/codetables/40036.table
new file mode 100644
index 0000000..9a5418e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/40036.table
@@ -0,0 +1,3 @@
+0 0 CLEAR
+1 1 CLOUD
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/4059.table b/definitions/bufr/tables/0/wmo/26/codetables/4059.table
new file mode 100644
index 0000000..91fc6f4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/4059.table
@@ -0,0 +1,5 @@
+1 1 0000 UTC
+2 2 0600 UTC
+3 3 1200 UTC
+4 4 1800 UTC
+5 5 OTHER HOURS
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/4080.table b/definitions/bufr/tables/0/wmo/26/codetables/4080.table
new file mode 100644
index 0000000..84caf21
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/4080.table
@@ -0,0 +1,6 @@
+0 0 SPOT VALUES
+1 1 LESS THAN 15 MINUTES
+2 2 FROM 15 TO 45 MINUTES
+3 3 MORE THAN 45 MINUTES
+9 9 DATA NOT AVAILABLE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/5069.table b/definitions/bufr/tables/0/wmo/26/codetables/5069.table
new file mode 100644
index 0000000..e267747
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/5069.table
@@ -0,0 +1,4 @@
+0 0 MIE
+1 1 RAYLEIGH
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8001.table b/definitions/bufr/tables/0/wmo/26/codetables/8001.table
new file mode 100644
index 0000000..6210da3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8001.table
@@ -0,0 +1,6 @@
+1 1 SURFACE
+2 2 STANDARD LEVEL
+3 3 TROPOPAUSE LEVEL
+4 4 MAXIMUM WIND LEVEL
+5 5 SIGNIFICANT LEVEL, TEMPERATURE AND/OR RELATIVE HUMIDITY
+6 6 SIGNIFICANT LEVEL, WIND
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8002.table b/definitions/bufr/tables/0/wmo/26/codetables/8002.table
new file mode 100644
index 0000000..6ab4fd7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8002.table
@@ -0,0 +1,19 @@
+0 0 OBSERVING RULES FOR BASE OF LOWEST CLOUD AND CLOUD TYPES OF FM 12 SYNOP AND FM 13 SHIP APPLY
+1 1 FIRST NON-CUMULONIMBUS SIGNIFICANT LAYER
+2 2 SECOND NON-CUMULONIMBUS SIGNIFICANT LAYER
+3 3 THIRD NON-CUMULONIMBUS SIGNIFICANT LAYER
+4 4 CUMULONIMBUS LAYER
+5 5 CEILING
+6 6 CLOUDS NOT DETECTED BELOW THE FOLLOWING HEIGHT(S)
+7 7 LOW CLOUD
+8 8 MIDDLE CLOUD
+9 9 HIGH CLOUD
+10 10 CLOUD LAYER WITH BASE BELOW AND TOP ABOVE THE STATION
+11 11 CLOUD LAYER WITH BASE AND TOP BELOW THE STATION LEVEL
+20 20 NO CLOUDS DETECTED BY THE CLOUD DETECTION SYSTEM
+21 21 FIRST INSTRUMENT DETECTED CLOUD LAYER
+22 22 SECOND INSTRUMENT DETECTED CLOUD LAYER
+23 23 THIRD INSTRUMENT DETECTED CLOUD LAYER
+24 24 FOURTH INSTRUMENT DETECTED CLOUD LAYER
+62 62 VALUE NOT APPLICABLE
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8003.table b/definitions/bufr/tables/0/wmo/26/codetables/8003.table
new file mode 100644
index 0000000..3731351
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8003.table
@@ -0,0 +1,12 @@
+0 0 SURFACE
+1 1 BASE OF SATELLITE SOUNDING
+2 2 CLOUD TOP
+3 3 TROPOPAUSE
+4 4 PRECIPITABLE WATER
+5 5 SOUNDING RADIANCES
+6 6 MEAN TEMPERATURES
+7 7 OZONE
+8 8 LOW CLOUD
+9 9 MED CLOUD
+10 10 HIGH CLOUD
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8004.table b/definitions/bufr/tables/0/wmo/26/codetables/8004.table
new file mode 100644
index 0000000..2a8925e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8004.table
@@ -0,0 +1,6 @@
+2 2 UNSTEADY (UNS)
+3 3 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+4 4 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+5 5 ASCENDING (ASC)
+6 6 DESCENDING (DES)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8005.table b/definitions/bufr/tables/0/wmo/26/codetables/8005.table
new file mode 100644
index 0000000..587ea99
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8005.table
@@ -0,0 +1,7 @@
+0 0 RESERVED
+1 1 STORM CENTRE
+2 2 OUTER LIMIT OR EDGE OF STORM
+3 3 LOCATION OF MAXIMUM WIND
+4 4 LOCATION OF THE STORM IN THE PERTURBED ANALYSIS
+5 5 LOCATION OF THE STORM IN THE ANALYSIS
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8006.table b/definitions/bufr/tables/0/wmo/26/codetables/8006.table
new file mode 100644
index 0000000..9f56c62
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8006.table
@@ -0,0 +1,8 @@
+1 1 SURFACE
+2 2 STANDARD LEVEL
+3 3 TROPOPAUSE LEVEL
+4 4 PROMINENT MAXIMUM LEVEL
+5 5 PROMINENT MINIMUM LEVEL
+6 6 MINIMUM PRESSURE LEVEL
+7 7 RESERVED
+8 8 LEVEL OF UNDETERMINED SIGNIFICANCE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8007.table b/definitions/bufr/tables/0/wmo/26/codetables/8007.table
new file mode 100644
index 0000000..3e4d2cc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8007.table
@@ -0,0 +1,5 @@
+0 0 POINT
+1 1 LINE
+2 2 AREA
+3 3 VOLUME
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8008.table b/definitions/bufr/tables/0/wmo/26/codetables/8008.table
new file mode 100644
index 0000000..2714b5a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8008.table
@@ -0,0 +1,8 @@
+1 1 SURFACE
+2 2 STANDARD LEVEL
+3 3 TROPOPAUSE LEVEL
+4 4 LEVEL OF BETA RADIATION MAXIMUM
+5 5 LEVEL OF GAMMA RADIATION MAXIMUM
+6 6 MINIMUM PRESSURE LEVEL
+7 7 RESERVED
+8 8 LEVEL OF UNDETERMINED SIGNIFICANCE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8009.table b/definitions/bufr/tables/0/wmo/26/codetables/8009.table
new file mode 100644
index 0000000..b033982
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8009.table
@@ -0,0 +1,16 @@
+0 0 LEVEL FLIGHT, ROUTINE OBSERVATION, UNSTEADY
+1 1 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED, UNSTEADY
+2 2 UNSTEADY (UNS)
+3 3 LEVEL FLIGHT, ROUTINE OBSERVATION (LVR)
+4 4 LEVEL FLIGHT, HIGHEST WIND ENCOUNTERED (LVW)
+5 5 ASCENDING (ASC)
+6 6 DESCENDING (DES)
+7 7 ASCENDING, OBSERVATION INTERVALS SELECTED BY TIME INCREMENTS
+8 8 ASCENDING, OBSERVATION INTERVALS SELECTED BY TIME INCREMENTS, UNSTEADY
+9 9 ASCENDING, OBSERVATION INTERVALS SELECTED BY PRESSURE INCREMENTS
+10 10 ASCENDING, OBSERVATION INTERVALS SELECTED BY PRESSURE INCREMENTS, UNSTEADY
+11 11 DESCENDING, OBSERVATION INTERVALS SELECTED BY TIME INCREMENTS
+12 12 DESCENDING, OBSERVATION INTERVALS SELECTED BY TIME INCREMENTS, UNSTEADY
+13 13 DESCENDING, OBSERVATION INTERVALS SELECTED BY PRESSURE INCREMENTS
+14 14 DESCENDING, OBSERVATION INTERVALS SELECTED BY PRESSURE INCREMENTS, UNSTEADY
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8010.table b/definitions/bufr/tables/0/wmo/26/codetables/8010.table
new file mode 100644
index 0000000..3c5fe71
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8010.table
@@ -0,0 +1,14 @@
+0 0 RESERVED
+1 1 BARE SOIL
+2 2 BARE ROCK
+3 3 LAND GRASS COVER
+4 4 WATER (LAKE, SEA)
+5 5 FLOOD WATER UNDERNEATH
+6 6 SNOW
+7 7 ICE
+8 8 RUNWAY OR ROAD
+9 9 SHIP OR PLATFORM DECK IN STEEL
+10 10 SHIP OR PLATFORM DECK IN WOOD
+11 11 SHIP OR PLATFORM DECK PARTLY COVERED WITH RUBBER MAT
+12 12 BUILDING ROOF
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8011.table b/definitions/bufr/tables/0/wmo/26/codetables/8011.table
new file mode 100644
index 0000000..e7a8221
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8011.table
@@ -0,0 +1,27 @@
+0 0 QUASI-STATIONARY FRONT AT THE SURFACE
+1 1 QUASI-STATIONARY FRONT ABOVE THE SURFACE
+2 2 WARM FRONT AT THE SURFACE
+3 3 WARM FRONT ABOVE THE SURFACE
+4 4 COLD FRONT AT THE SURFACE
+5 5 COLD FRONT ABOVE THE SURFACE
+6 6 OCCLUSION
+7 7 INSTABILITY LINE
+8 8 INTERTROPICAL FRONT
+9 9 CONVERGENCE LINE
+10 10 JET STREAM
+11 11 CLOUD CLEAR
+12 12 CLOUD
+13 13 TURBULENCE
+14 14 STORM
+15 15 AIRFRAME ICING
+16 16 PHENOMENON
+17 17 VOLCANO
+18 18 ATMOSPHERICS
+19 19 RESERVED
+20 20 SPECIAL CLOUDS
+21 21 THUNDERSTORM
+22 22 TROPICAL CYCLONE
+23 23 MOUNTAIN WAVE
+24 24 DUSTSTORM
+25 25 SANDSTORM
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8012.table b/definitions/bufr/tables/0/wmo/26/codetables/8012.table
new file mode 100644
index 0000000..769bc0b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8012.table
@@ -0,0 +1,4 @@
+0 0 LAND
+1 1 SEA
+2 2 COAST
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8013.table b/definitions/bufr/tables/0/wmo/26/codetables/8013.table
new file mode 100644
index 0000000..e18d295
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8013.table
@@ -0,0 +1,4 @@
+0 0 NIGHT
+1 1 DAY
+2 2 TWILIGHT
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8014.table b/definitions/bufr/tables/0/wmo/26/codetables/8014.table
new file mode 100644
index 0000000..e6f2e46
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8014.table
@@ -0,0 +1,10 @@
+0 0 10-MINUTE MEAN VALUE - NORMAL VALUE
+1 1 10-MINUTE MEAN VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENTS OF RVR (P)
+2 2 10-MINUTE MEAN VALUE - BELOW THE LOWER LIMIT FOR ASSESSMENTS OF RVR (M)
+3 3 ONE-MINUTE MINIMUM VALUE - NORMAL VALUE
+4 4 ONE-MINUTE MINIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENTS OF RVR (P)
+5 5 ONE-MINUTE MINIMUM VALUE - BELOW THE LOWER LIMIT FOR ASSESSMENTS OF RVR (M)
+6 6 ONE-MINUTE MAXIMUM VALUE - NORMAL VALUE
+7 7 ONE-MINUTE MAXIMUM VALUE - ABOVE THE UPPER LIMIT FOR ASSESSMENTS OF RVR (P)
+8 8 ONE-MINUTE MAXIMUM VALUE - BELOW THE LOWER LIMIT FOR ASSESSMENTS OF RVR (M)
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8015.table b/definitions/bufr/tables/0/wmo/26/codetables/8015.table
new file mode 100644
index 0000000..6830b95
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8015.table
@@ -0,0 +1,4 @@
+0 0 SINGLE SENSOR
+1 1 PRIMARY SENSOR
+2 2 SECONDARY SENSOR (BACKUP)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8016.table b/definitions/bufr/tables/0/wmo/26/codetables/8016.table
new file mode 100644
index 0000000..6b8a1fa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8016.table
@@ -0,0 +1,5 @@
+0 0 NOSIG
+1 1 BECMG
+2 2 TEMPO
+3 3 FM
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8017.table b/definitions/bufr/tables/0/wmo/26/codetables/8017.table
new file mode 100644
index 0000000..b3156f8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8017.table
@@ -0,0 +1,4 @@
+0 0 FM
+1 1 TL
+2 2 AT
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8018.table b/definitions/bufr/tables/0/wmo/26/codetables/8018.table
new file mode 100644
index 0000000..f91e554
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8018.table
@@ -0,0 +1,4 @@
+1 1 LAND IS PRESENT
+2 2 SURFACE ICE MAP INDICATES ICE IS PRESENT
+11 11 ICE MAP DATA NOT AVAILABLE
+12 12 ATTENUATION MAP DATA NOT AVAILABLE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8019.table b/definitions/bufr/tables/0/wmo/26/codetables/8019.table
new file mode 100644
index 0000000..4ed4133
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8019.table
@@ -0,0 +1,8 @@
+0 0 RESERVED
+1 1 ATS (AIR TRAFFIC SERVICE) UNIT SERVING FIR (FLIGHT INFORMATION REGION)
+2 2 FIR (FLIGHT INFORMATION REGION)
+3 3 UIR (UPPER FLIGHT INFORMATION REGION)
+4 4 CTA (CONTROL AREA)
+5 5 VAAC (VOLCANIC ASH ADVISORY CENTRE)
+6 6 MWO (METEOROLOGICAL WATCH OFFICE) ISSUING SIGMET
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8021.table b/definitions/bufr/tables/0/wmo/26/codetables/8021.table
new file mode 100644
index 0000000..20fd793
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8021.table
@@ -0,0 +1,32 @@
+0 0 RESERVED
+1 1 TIME SERIES
+2 2 TIME AVERAGED (SEE NOTE 1)
+3 3 ACCUMULATED
+4 4 FORECAST
+5 5 FORECAST TIME SERIES
+6 6 FORECAST TIME AVERAGED
+7 7 FORECAST ACCUMULATED
+8 8 ENSEMBLE MEAN (SEE NOTE 2)
+9 9 ENSEMBLE MEAN TIME SERIES
+10 10 ENSEMBLE MEAN TIME AVERAGED
+11 11 ENSEMBLE MEAN ACCUMULATED
+12 12 ENSEMBLE MEAN FORECAST
+13 13 ENSEMBLE MEAN FORECAST TIME SERIES
+14 14 ENSEMBLE MEAN FORECAST TIME AVERAGED
+15 15 ENSEMBLE MEAN FORECAST ACCUMULATED
+16 16 ANALYSIS
+17 17 START OF PHENOMENON
+18 18 RADIOSONDE LAUNCH TIME
+19 19 START OF ORBIT
+20 20 END OF ORBIT
+21 21 TIME OF ASCENDING NODE
+22 22 TIME OF OCCURRENCE OF WIND SHIFT
+23 23 MONITORING PERIOD
+24 24 AGREED TIME LIMIT FOR REPORT RECEPTION
+25 25 NOMINAL REPORTING TIME
+26 26 TIME OF LAST KNOWN POSITION
+27 27 FIRST GUESS
+28 28 START OF SCAN
+29 29 END OF SCAN OR TIME OF ENDING
+30 30 TIME OF OCCURRENCE
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8023.table b/definitions/bufr/tables/0/wmo/26/codetables/8023.table
new file mode 100644
index 0000000..2125e23
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8023.table
@@ -0,0 +1,14 @@
+2 2 MAXIMUM VALUE
+3 3 MINIMUM VALUE
+4 4 MEAN VALUE
+5 5 MEDIAN VALUE
+6 6 MODAL VALUE
+7 7 MEAN ABSOLUTE ERROR
+8 8 RESERVED
+9 9 BEST ESTIMATE OF STANDARD DEVIATION (N-1)
+10 10 STANDARD DEVIATION (N)
+11 11 HARMONIC MEAN
+12 12 ROOT-MEAN-SQUARE VECTOR ERROR
+13 13 ROOT-MEAN-SQUARE
+32 32 VECTOR MEAN
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8024.table b/definitions/bufr/tables/0/wmo/26/codetables/8024.table
new file mode 100644
index 0000000..377858b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8024.table
@@ -0,0 +1,12 @@
+2 2 OBSERVED MINUS MAXIMUM
+3 3 OBSERVED MINUS MINIMUM
+4 4 OBSERVED MINUS MEAN
+5 5 OBSERVED MINUS MEDIAN
+6 6 OBSERVED MINUS MODE
+11 11 OBSERVED MINUS CLIMATOLOGY (ANOMALY)
+12 12 OBSERVED MINUS ANALYSED VALUE
+13 13 OBSERVED MINUS INITIALIZED ANALYSED VALUE
+14 14 OBSERVED MINUS FORECAST VALUE
+21 21 OBSERVED MINUS INTERPOLATED VALUE
+22 22 OBSERVED MINUS HYDROSTATICALLY CALCULATED VALUE
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8025.table b/definitions/bufr/tables/0/wmo/26/codetables/8025.table
new file mode 100644
index 0000000..1d88fa5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8025.table
@@ -0,0 +1,5 @@
+0 0 UNIVERSAL TIME COORDINATED (UTC) MINUS LOCAL STANDARD TIME (LST)
+1 1 LOCAL STANDARD TIME
+2 2 UNIVERSAL TIME COORDINATED (UTC) MINUS SATELLITE CLOCK
+5 5 TIME DIFFERENCE FROM EDGE OF PROCESSING SEGMENT
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8026.table b/definitions/bufr/tables/0/wmo/26/codetables/8026.table
new file mode 100644
index 0000000..9bcef78
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8026.table
@@ -0,0 +1,5 @@
+0 0 AVERAGING KERNEL MATRIX
+1 1 CORRELATION MATRIX (C)
+2 2 LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L FROM C=LLT)
+3 3 INVERSE OF LOWER TRIANGULAR CORRELATION MATRIX SQUARE ROOT (L-1)
+63 63 MISSING OR UNDEFINED SIGNIFICANCE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8029.table b/definitions/bufr/tables/0/wmo/26/codetables/8029.table
new file mode 100644
index 0000000..d0eae5a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8029.table
@@ -0,0 +1,16 @@
+0 0 OPEN OCEAN OR SEMI-ENCLOSED SEA
+1 1 ENCLOSED SEA OR LAKE
+2 2 CONTINENTAL ICE
+3 3 LAND
+4 4 LOW INLAND (BELOW SEA LEVEL)
+5 5 MIX OF LAND AND WATER
+6 6 MIX OF LAND AND LOW INLAND
+11 11 RIVER
+12 12 LAKE
+13 13 SEA
+14 14 GLACIER
+15 15 URBAN LAND
+16 16 RURAL LAND
+17 17 SUBURBAN LAND
+18 18 SEA ICE
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8032.table b/definitions/bufr/tables/0/wmo/26/codetables/8032.table
new file mode 100644
index 0000000..712400d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8032.table
@@ -0,0 +1,7 @@
+0 0 ROUTINE OPERATION
+1 1 EVENT TRIGGERED BY STORM SURGE
+2 2 EVENT TRIGGERED BY TSUNAMI
+3 3 EVENT TRIGGERED MANUALLY
+4 4 INSTALLATION TESTING
+5 5 MAINTENANCE TESTING
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8033.table b/definitions/bufr/tables/0/wmo/26/codetables/8033.table
new file mode 100644
index 0000000..1c69537
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8033.table
@@ -0,0 +1,6 @@
+0 0 RESERVED
+1 1 PERCENTAGE CONFIDENCE CALCULATED USING CLOUD FRACTION
+2 2 PERCENTAGE CONFIDENCE CALCULATED USING STANDARD DEVIATION OF TEMPERATURE
+3 3 PERCENTAGE CONFIDENCE CALCULATED USING PROBABILITY OF CLOUD CONTAMINATION
+4 4 PERCENTAGE CONFIDENCE CALCULATED USING NORMALITY OF DISTRIBUTION
+127 127 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8034.table b/definitions/bufr/tables/0/wmo/26/codetables/8034.table
new file mode 100644
index 0000000..879f274
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8034.table
@@ -0,0 +1,10 @@
+0 0 SECONDARY SAMPLING: AVERAGED
+1 1 SECONDARY SAMPLING: DISCRETE
+2 2 SECONDARY SAMPLING: MIXED
+3 3 NEAR-SURFACE SAMPLING: AVERAGED, PUMPED
+4 4 NEAR-SURFACE SAMPLING: AVERAGED, UNPUMPED
+5 5 NEAR-SURFACE SAMPLING: DISCRETE, PUMPED
+6 6 NEAR-SURFACE SAMPLING: DISCRETE, UNPUMPED
+7 7 NEAR-SURFACE SAMPLING: MIXED, PUMPED
+8 8 NEAR-SURFACE SAMPLING: MIXED, UNPUMPED
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8035.table b/definitions/bufr/tables/0/wmo/26/codetables/8035.table
new file mode 100644
index 0000000..3d641fd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8035.table
@@ -0,0 +1,8 @@
+0 0 GLOBAL
+1 1 REGIONAL
+2 2 NATIONAL
+3 3 SPECIAL
+4 4 BILATERAL
+5 5 RESERVED
+6 6 RESERVED
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8036.table b/definitions/bufr/tables/0/wmo/26/codetables/8036.table
new file mode 100644
index 0000000..6436989
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8036.table
@@ -0,0 +1,8 @@
+0 0 WMO SECRETARIAT
+1 1 WMO
+2 2 RSMC
+3 3 NMC
+4 4 RTH
+5 5 OBSERVING SITE
+6 6 OTHER
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8039.table b/definitions/bufr/tables/0/wmo/26/codetables/8039.table
new file mode 100644
index 0000000..f4403c6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8039.table
@@ -0,0 +1,8 @@
+0 0 ISSUE TIME OF FORECAST
+1 1 TIME OF COMMENCEMENT OF PERIOD OF THE FORECAST
+2 2 TIME OF ENDING OF PERIOD OF THE FORECAST
+3 3 FORECAST TIME OF MAXIMUM TEMPERATURE
+4 4 FORECAST TIME OF MINIMUM TEMPERATURE
+5 5 TIME OF BEGINNING OF THE FORECAST CHANGE
+6 6 TIME OF ENDING OF THE FORECAST CHANGE
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8040.table b/definitions/bufr/tables/0/wmo/26/codetables/8040.table
new file mode 100644
index 0000000..42c5af0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8040.table
@@ -0,0 +1,49 @@
+0 0 HIGH-RESOLUTION DATA SAMPLE
+1 1 WITHIN 20 HPA OF SURFACE
+2 2 PRESSURE LESS THAN 10 HPA (I.E., 9, 8, 7, ETC.) WHEN NO OTHER REASON APPLIES
+3 3 BASE PRESSURE LEVEL FOR STABILITY INDEX
+4 4 BEGIN DOUBTFUL TEMPERATURE, HEIGHT DATA
+5 5 BEGIN MISSING DATA (ALL ELEMENTS)
+6 6 BEGIN MISSING RELATIVE HUMIDITY DATA
+7 7 BEGIN MISSING TEMPERATURE DATA
+8 8 HIGHEST LEVEL REACHED BEFORE BALLOON DESCENT BECAUSE OF ICING OR TURBULENCE
+9 9 END DOUBTFUL TEMPERATURE, HEIGHT DATA
+10 10 END MISSING DATA (ALL ELEMENTS)
+11 11 END MISSING RELATIVE HUMIDITY DATA
+12 12 END MISSING TEMPERATURE DATA
+13 13 ZERO DEGREES CELSIUS CROSSING(S) FOR RADAT
+14 14 STANDARD PRESSURE LEVEL
+15 15 OPERATOR-ADDED LEVEL
+16 16 OPERATOR-DELETED LEVEL
+17 17 BALLOON RE-ASCENDED BEYOND PREVIOUS HIGHEST ASCENT LEVEL
+18 18 SIGNIFICANT RELATIVE HUMIDITY LEVEL
+19 19 RELATIVE HUMIDITY LEVEL SELECTION TERMINATED
+20 20 SURFACE LEVEL
+21 21 SIGNIFICANT TEMPERATURE LEVEL
+22 22 MANDATORY TEMPERATURE LEVEL
+23 23 FLIGHT TERMINATION LEVEL
+24 24 TROPOPAUSE(S)
+25 25 AIRCRAFT REPORT
+26 26 INTERPOLATED (GENERATED) LEVEL
+27 27 MANDATORY WIND LEVEL
+28 28 SIGNIFICANT WIND LEVEL
+29 29 MAXIMUM WIND LEVEL
+30 30 INCREMENTAL WIND LEVEL (FIXED REGIONAL)
+31 31 INCREMENTAL HEIGHT LEVEL (GENERATED)
+32 32 WIND TERMINATION LEVEL
+33 33 PRESSURE 100 TO 110 HPA, WHEN NO OTHER REASON APPLIES
+34 34 FREEZING LEVEL BASE
+35 35 FREEZING LEVEL TOP
+36 36 FLIGHT LEVEL BASE
+37 37 FLIGHT LEVEL TOP
+38 38 TOP OF WIND SOUNDING
+39 39 BOTTOM OF WIND SOUNDING
+40 40 SIGNIFICANT THERMODYNAMIC LEVEL (INVERSION)
+41 41 SIGNIFICANT RELATIVE HUMIDITY LEVEL (ACCORDING TO NCDC CRITERIA)
+42 42 SIGNIFICANT TEMPERATURE LEVEL (ACCORDING TO NCDC)
+43 43 BEGIN MISSING WIND DATA
+44 44 END MISSING WIND DATA
+60 60 LEVEL OF 80-KNOT ISOTACH ABOVE JET
+61 61 LEVEL OF 80-KNOT ISOTACH BELOW JET
+62 62 OTHER
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8041.table b/definitions/bufr/tables/0/wmo/26/codetables/8041.table
new file mode 100644
index 0000000..1f48fbe
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8041.table
@@ -0,0 +1,15 @@
+0 0 PARENT SITE
+1 1 OBSERVATION SITE
+2 2 BALLOON MANUFACTURE DATE
+3 3 BALLOON LAUNCH POINT
+4 4 SURFACE OBSERVATION
+5 5 SURFACE OBSERVATION DISPLACEMENT FROM LAUNCH POINT
+6 6 FLIGHT LEVEL OBSERVATION
+7 7 FLIGHT LEVEL TERMINATION POINT
+8 8 IFR CEILING AND VISIBILITY
+9 9 MOUNTAIN OBSCURATION
+10 10 STRONG SURFACE WIND
+11 11 FREEZING LEVEL
+12 12 MULTIPLE FREEZING LEVEL
+13 13 INSTRUMENT MANUFACTURE DATE
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8042.table b/definitions/bufr/tables/0/wmo/26/codetables/8042.table
new file mode 100644
index 0000000..c71709a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8042.table
@@ -0,0 +1,17 @@
+1 1 SURFACE
+2 2 STANDARD LEVEL
+3 3 TROPOPAUSE LEVEL
+4 4 MAXIMUM WIND LEVEL
+5 5 SIGNIFICANT TEMPERATURE LEVEL
+6 6 SIGNIFICANT HUMIDITY LEVEL
+7 7 SIGNIFICANT WIND LEVEL
+8 8 BEGINNING OF MISSING TEMPERATURE DATA
+9 9 END OF MISSING TEMPERATURE DATA
+10 10 BEGINNING OF MISSING HUMIDITY DATA
+11 11 END OF MISSING HUMIDITY DATA
+12 12 BEGINNING OF MISSING WIND DATA
+13 13 END OF MISSING WIND DATA
+14 14 TOP OF WIND SOUNDING
+15 15 LEVEL DETERMINED BY REGIONAL DECISION
+16 16 FREEZING LEVEL
+17 17 PRESSURE LEVEL ORIGINALLY INDICATED BY HEIGHT AS THE VERTICAL COORDINATE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8043.table b/definitions/bufr/tables/0/wmo/26/codetables/8043.table
new file mode 100644
index 0000000..249fd0e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8043.table
@@ -0,0 +1,17 @@
+0 0 OZONE
+1 1 WATER VAPOUR
+2 2 METHANE
+3 3 CARBON DIOXIDE
+4 4 CARBON MONOXIDE
+5 5 NITROGEN DIOXIDE
+6 6 NITROUS OXIDE
+7 7 FORMALDEHYDE
+8 8 SULPHUR DIOXIDE
+25 25 PARTICULATE MATTER < 1.0 MICRONS
+26 26 PARTICULATE MATTER < 2.5 MICRONS
+27 27 PARTICULATE MATTER < 10 MICRONS
+28 28 AEROSOLS (GENERIC)
+29 29 SMOKE (GENERIC)
+30 30 CRUSTAL MATERIAL (GENERIC DUST)
+31 31 VOLCANIC ASH
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8050.table b/definitions/bufr/tables/0/wmo/26/codetables/8050.table
new file mode 100644
index 0000000..4b401f1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8050.table
@@ -0,0 +1,11 @@
+0 0 RESERVED
+1 1 PRESSURE
+2 2 TEMPERATURE
+3 3 EXTREME TEMPERATURE
+4 4 VAPOUR PRESSURE
+5 5 PRECIPITATION
+6 6 SUNSHINE DURATION
+7 7 MAXIMUM TEMPERATURE
+8 8 MINIMUM TEMPERATURE
+9 9 WIND
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8051.table b/definitions/bufr/tables/0/wmo/26/codetables/8051.table
new file mode 100644
index 0000000..5249fe6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8051.table
@@ -0,0 +1,7 @@
+1 1 PRESSURE
+2 2 TEMPERATURE
+3 3 EXTREME TEMPERATURE
+4 4 VAPOUR PRESSURE
+5 5 PRECIPITATION
+6 6 SUNSHINE DURATION
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8052.table b/definitions/bufr/tables/0/wmo/26/codetables/8052.table
new file mode 100644
index 0000000..46dcbbe
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8052.table
@@ -0,0 +1,26 @@
+0 0 MEAN WIND SPEED OVER A 10-MINUTE PERIOD OBSERVED OR RECORDED EQUAL TO OR MORE THAN 10 M S-1 OR 20 KNOTS
+1 1 MEAN WIND SPEED OVER A 10-MINUTE PERIOD OBSERVED OR RECORDED EQUAL TO OR MORE THAN 20 M S-1 OR 40 KNOTS
+2 2 MEAN WIND SPEED OVER A 10-MINUTE PERIOD OBSERVED OR RECORDED EQUAL TO OR MORE THAN 30 M S-1 OR 60 KNOTS
+3 3 MAXIMUM TEMPERATURE LESS THAN 273.15 K
+4 4 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 298.15 K
+5 5 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 303.15 K
+6 6 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 308.15 K
+7 7 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 313.15 K
+8 8 MINIMUM TEMPERATURE LESS THAN 273.15 K
+9 9 MAXIMUM TEMPERATURE EQUAL TO OR MORE THAN 273.15 K
+10 10 PRECIPITATION EQUAL TO OR MORE THAN 1.0 KG M-2
+11 11 PRECIPITATION EQUAL TO OR MORE THAN 5.0 KG M-2
+12 12 PRECIPITATION EQUAL TO OR MORE THAN 10.0 KG M-2
+13 13 PRECIPITATION EQUAL TO OR MORE THAN 50.0 KG M-2
+14 14 PRECIPITATION EQUAL TO OR MORE THAN 100.0 KG M-2
+15 15 PRECIPITATION EQUAL TO OR MORE THAN 150.0 KG M-2
+16 16 SNOW DEPTH MORE THAN 0.00 M
+17 17 SNOW DEPTH MORE THAN 0.01 M
+18 18 SNOW DEPTH MORE THAN 0.10 M
+19 19 SNOW DEPTH MORE THAN 0.50 M
+20 20 HORIZONTAL VISIBILITY LESS THAN 50 M
+21 21 HORIZONTAL VISIBILITY LESS THAN 100 M
+22 22 HORIZONTAL VISIBILITY LESS THAN 1000 M
+23 23 HAIL
+24 24 THUNDERSTORM
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8053.table b/definitions/bufr/tables/0/wmo/26/codetables/8053.table
new file mode 100644
index 0000000..cbc11c9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8053.table
@@ -0,0 +1,4 @@
+0 0 VALUE OCCURRED ON ONLY ONE DAY IN THE MONTH
+1 1 VALUE OCCURRED ON MORE THAN ONE DAY IN THE MONTH
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8054.table b/definitions/bufr/tables/0/wmo/26/codetables/8054.table
new file mode 100644
index 0000000..51b908e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8054.table
@@ -0,0 +1,3 @@
+0 0 WIND SPEED OR GUST IS AS REPORTED
+1 1 WIND SPEED IS GREATER THAN THAT REPORTED (P IN METAR/TAF/SPECI)
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8060.table b/definitions/bufr/tables/0/wmo/26/codetables/8060.table
new file mode 100644
index 0000000..2865fec
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8060.table
@@ -0,0 +1,8 @@
+0 0 RESERVED
+1 1 RANGE
+2 2 AZIMUTH
+3 3 HORIZONTAL
+4 4 VERTICAL
+5 5 NORTH/SOUTH
+6 6 EAST/WEST
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8065.table b/definitions/bufr/tables/0/wmo/26/codetables/8065.table
new file mode 100644
index 0000000..69b80ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8065.table
@@ -0,0 +1,4 @@
+0 0 NO SUN-GLINT
+1 1 SUN-GLINT
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8066.table b/definitions/bufr/tables/0/wmo/26/codetables/8066.table
new file mode 100644
index 0000000..fcc0252
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8066.table
@@ -0,0 +1,4 @@
+0 0 OPAQUE
+1 1 SEMI-TRANSPARENT
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8070.table b/definitions/bufr/tables/0/wmo/26/codetables/8070.table
new file mode 100644
index 0000000..f580617
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8070.table
@@ -0,0 +1,6 @@
+0 0 RESERVED
+1 1 RESERVED
+2 2 EARTH LOCATED INSTRUMENT COUNTS, CALIBRATION COEFFICIENTS AND HOUSEKEEPING (LEVEL 1B)
+3 3 EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1C)
+4 4 MAPPED TO A COMMON FOOTPRINT, EARTH LOCATED CALIBRATED RADIANCES (LEVEL 1D)
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8072.table b/definitions/bufr/tables/0/wmo/26/codetables/8072.table
new file mode 100644
index 0000000..7dcd961
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8072.table
@@ -0,0 +1,6 @@
+0 0 MIXED
+1 1 CLEAR
+2 2 CLOUDY
+3 3 PROBABLY CLEAR
+4 4 PROBABLY CLOUDY
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8074.table b/definitions/bufr/tables/0/wmo/26/codetables/8074.table
new file mode 100644
index 0000000..5778e65
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8074.table
@@ -0,0 +1,4 @@
+0 0 OPEN OCEAN OR SEMI-ENCLOSED SEA
+1 1 NON-OCEAN LIKE
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8075.table b/definitions/bufr/tables/0/wmo/26/codetables/8075.table
new file mode 100644
index 0000000..5f5e3a2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8075.table
@@ -0,0 +1,4 @@
+0 0 ASCENDING ORBIT
+1 1 DESCENDING ORBIT
+2 2 RESERVED
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8076.table b/definitions/bufr/tables/0/wmo/26/codetables/8076.table
new file mode 100644
index 0000000..431496f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8076.table
@@ -0,0 +1,9 @@
+0 0 KU
+1 1 C
+2 2 LONG-WAVE INFRARED
+3 3 MEDIUM-WAVE INFRARED
+4 4 SHORT-WAVE INFRARED
+5 5 M
+6 6 I
+7 7 DAY/NIGHT
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8077.table b/definitions/bufr/tables/0/wmo/26/codetables/8077.table
new file mode 100644
index 0000000..2c7902b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8077.table
@@ -0,0 +1,7 @@
+0 0 LAND
+1 1 SEA
+2 2 COASTAL
+3 3 OPEN OCEAN OR SEMI-ENCLOSED SEA
+4 4 ENCLOSED SEA OR LAKE
+5 5 CONTINENTAL ICE
+127 127 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8079.table b/definitions/bufr/tables/0/wmo/26/codetables/8079.table
new file mode 100644
index 0000000..735a09c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8079.table
@@ -0,0 +1,9 @@
+0 0 NORMAL ISSUE
+1 1 CORRECTION TO A PREVIOUSLY ISSUED PRODUCT (COR)
+2 2 AMENDMENT TO A PREVIOUSLY ISSUED PRODUCT (AMD)
+3 3 CORRECTION TO A PREVIOUSLY ISSUED AMENDED PRODUCT (COR AMD)
+4 4 CANCELLATION OF A PREVIOUSLY ISSUED PRODUCT (CNL)
+5 5 NO PRODUCT AVAILABLE (NIL)
+6 6 SPECIAL REPORT (SPECI)
+7 7 CORRECTED SPECIAL REPORT (SPECI COR)
+15 15 MISSING OR NOT APPLICABLE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8080.table b/definitions/bufr/tables/0/wmo/26/codetables/8080.table
new file mode 100644
index 0000000..1a0f3a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8080.table
@@ -0,0 +1,14 @@
+0 0 TOTAL WATER PRESSURE PROFILE
+1 1 TOTAL WATER TEMPERATURE PROFILE
+2 2 TOTAL WATER SALINITY PROFILE
+3 3 TOTAL WATER CONDUCTIVITY PROFILE
+4 4 TOTAL WATER DEPTH
+10 10 WATER PRESSURE AT A LEVEL
+11 11 WATER TEMPERATURE AT A LEVEL
+12 12 SALINITY AT A LEVEL
+13 13 WATER DEPTH AT A LEVEL
+14 14 SEA/WATER CURRENT SPEED AT A LEVEL
+15 15 SEA/WATER CURRENT DIRECTION AT A LEVEL
+16 16 DISSOLVED OXYGEN AT A LEVEL
+20 20 POSITION
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8081.table b/definitions/bufr/tables/0/wmo/26/codetables/8081.table
new file mode 100644
index 0000000..75d2887
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8081.table
@@ -0,0 +1,5 @@
+0 0 SENSOR
+1 1 TRANSMITTER
+2 2 RECEIVER
+3 3 OBSERVING PLATFORM
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8082.table b/definitions/bufr/tables/0/wmo/26/codetables/8082.table
new file mode 100644
index 0000000..1f24db8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8082.table
@@ -0,0 +1,3 @@
+0 0 SENSOR HEIGHT IS NOT MODIFIED
+1 1 SENSOR HEIGHT IS MODIFIED TO STANDARD LEVEL
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8083.table b/definitions/bufr/tables/0/wmo/26/codetables/8083.table
new file mode 100644
index 0000000..174ef34
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8083.table
@@ -0,0 +1,9 @@
+1 1 ADJUSTED TO OR WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)
+2 2 ADJUSTED TO OR WITH RESPECT TO REPRESENTATIVE HEIGHT OF SENSOR ABOVE WATER SURFACE
+3 3 ADJUSTED WITH RESPECT TO STANDARD SURFACE ROUGHNESS
+4 4 ADJUSTED WITH RESPECT TO WIND SPEED
+5 5 ADJUSTED WITH RESPECT TO TEMPERATURE
+6 6 ADJUSTED WITH RESPECT TO PRESSURE
+7 7 ADJUSTED WITH RESPECT TO HUMIDITY
+8 8 ADJUSTED WITH RESPECT TO EVAPORATION
+9 9 ADJUSTED WITH RESPECT TO WETTING LOSSES
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8085.table b/definitions/bufr/tables/0/wmo/26/codetables/8085.table
new file mode 100644
index 0000000..79e1a3d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8085.table
@@ -0,0 +1,4 @@
+0 0 FORE BEAM
+1 1 MID BEAM
+2 2 AFT BEAM
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8086.table b/definitions/bufr/tables/0/wmo/26/codetables/8086.table
new file mode 100644
index 0000000..47665e9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8086.table
@@ -0,0 +1,9 @@
+1 1 MODEL GROUND SURFACE
+2 2 STANDARD LEVEL
+3 3 TROPOPAUSE LEVEL
+4 4 MAXIMUM WIND LEVEL
+5 5 SIGNIFICANT TEMPERATURE LEVEL
+6 6 SIGNIFICANT HUMIDITY LEVEL
+7 7 SIGNIFICANT WIND LEVEL
+8 8 VERTICALLY INTERPOLATED LEVEL (THIS SHOULD BE SET TO 1 FOR POINTS ON THE VERTICAL PROFILE THAT FALL BETWEEN THE MODEL'S NATIVE VERTICAL LEVELS.)
+9 9 VIRTUAL STATION HEIGHT
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8087.table b/definitions/bufr/tables/0/wmo/26/codetables/8087.table
new file mode 100644
index 0000000..d556c98
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8087.table
@@ -0,0 +1,5 @@
+0 0 UPPER LEFT
+1 1 UPPER RIGHT
+2 2 LOWER RIGHT
+3 3 LOWER LEFT
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/codetables/8091.table b/definitions/bufr/tables/0/wmo/26/codetables/8091.table
new file mode 100644
index 0000000..f0b3ca2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/codetables/8091.table
@@ -0,0 +1,9 @@
+0 0 SATELLITE COORDINATES
+1 1 OBSERVATION COORDINATES
+2 2 START OF OBSERVATION
+3 3 END OF OBSERVATION
+4 4 HORIZONTAL CENTRE OF GRAVITY OF THE OBSERVATION
+5 5 VERTICAL CENTRE OF GRAVITY OF THE OBSERVATION
+6 6 TOP OF THE OBSERVATION
+7 7 BOTTOM OF THE OBSERVATION
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/26/element.table b/definitions/bufr/tables/0/wmo/26/element.table
new file mode 100644
index 0000000..6983112
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/element.table
@@ -0,0 +1,1558 @@
+#code|abbreviation|type|name|unit|scale|reference|width|crex_unit|crex_scale|crex_width
+000001|tableAEntry|string|TABLE A: ENTRY|CCITT IA5|0|0|24|Character|0|3
+000002|tableALine1|string|TABLE A: DATA CATEGORY DESCRIPTION, LINE 1|CCITT IA5|0|0|256|Character|0|32
+000003|tableALine2|string|TABLE A: DATA CATEGORY DESCRIPTION, LINE 2|CCITT IA5|0|0|256|Character|0|32
+000004|masterTable|string|BUFR/CREX MASTER TABLE|CCITT IA5|0|0|16|Character|0|2
+000005|editionNumber|string|BUFR/CREX EDITION NUMBER|CCITT IA5|0|0|24|Character|0|3
+000006|bufrMasterTableVersionNumber|string|BUFR MASTER TABLE VERSION NUMBER|CCITT IA5|0|0|16|Character|0|2
+000007|crexMasterTableVersionNumber|string|CREX MASTER TABLE VERSION NUMBER|CCITT IA5|0|0|16|Character|0|2
+000008|bufrLocalTableVersionNumber|string|BUFR LOCAL TABLE VERSION NUMBER|CCITT IA5|0|0|16|Character|0|2
+000010|fDescriptorToBeAddedOrDefined|string|F DESCRIPTOR TO BE ADDED OR DEFINED|CCITT IA5|0|0|8|Character|0|1
+000011|xDescriptorToBeAddedOrDefined|string|X DESCRIPTOR TO BE ADDED OR DEFINED|CCITT IA5|0|0|16|Character|0|2
+000012|yDescriptorToBeAddedOrDefined|string|Y DESCRIPTOR TO BE ADDED OR DEFINED|CCITT IA5|0|0|24|Character|0|3
+000013|elementNameLine1|string|ELEMENT NAME, LINE 1|CCITT IA5|0|0|256|Character|0|32
+000014|elementNameLine2|string|ELEMENT NAME, LINE 2|CCITT IA5|0|0|256|Character|0|32
+000015|unitsName|string|UNITS NAME|CCITT IA5|0|0|192|Character|0|24
+000016|unitsScaleSign|string|UNITS SCALE SIGN|CCITT IA5|0|0|8|Character|0|1
+000017|unitsScale|string|UNITS SCALE|CCITT IA5|0|0|24|Character|0|3
+000018|unitsReferenceSign|string|UNITS REFERENCE SIGN|CCITT IA5|0|0|8|Character|0|1
+000019|unitsReferenceValue|string|UNITS REFERENCE VALUE|CCITT IA5|0|0|80|Character|0|10
+000020|elementDataWidth|string|ELEMENT DATA WIDTH|CCITT IA5|0|0|24|Character|0|3
+000024|codeFigure|string|CODE FIGURE|CCITT IA5|0|0|64|Character|0|8
+000025|codeFigureMeaning|string|CODE FIGURE MEANING|CCITT IA5|0|0|496|Character|0|62
+000026|bitNumber|string|BIT NUMBER|CCITT IA5|0|0|48|Character|0|6
+000027|bitNumberMeaning|string|BIT NUMBER MEANING|CCITT IA5|0|0|496|Character|0|62
+000030|descriptorDefiningSequence|string|DESCRIPTOR DEFINING SEQUENCE|CCITT IA5|0|0|48|Character|0|6
+001001|blockNumber|long|WMO BLOCK NUMBER|Numeric|0|0|7|Numeric|0|2
+001002|stationNumber|long|WMO STATION NUMBER|Numeric|0|0|10|Numeric|0|3
+001003|regionNumber|table|WMO REGION NUMBER/GEOGRAPHICAL AREA|CODE TABLE|0|0|3|CODE TABLE|0|1
+001004|wmoRegionSubArea|long|WMO REGION SUB-AREA|Numeric|0|0|3|Numeric|0|1
+001005|buoyOrPlatformIdentifier|long|BUOY/PLATFORM IDENTIFIER|Numeric|0|0|17|Numeric|0|5
+001006|aircraftFlightNumber|string|AIRCRAFT FLIGHT NUMBER|CCITT IA5|0|0|64|Character|0|8
+001007|satelliteIdentifier|table|SATELLITE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|4
+001008|aircraftRegistrationNumberOrOtherIdentification|string|AIRCRAFT REGISTRATION NUMBER OR OTHER IDENTIFICATION|CCITT IA5|0|0|64|Character|0|8
+001009|commercialAircraftType|string|TYPE OF COMMERCIAL AIRCRAFT|CCITT IA5|0|0|64|Character|0|8
+001010|stationaryBuoyPlatformIdentifierEGCManBuoys|string|STATIONARY BUOY PLATFORM IDENTIFIER; E.G. C-MAN BUOYS|CCITT IA5|0|0|64|Character|0|8
+001011|shipOrMobileLandStationIdentifier|string|SHIP OR MOBILE LAND STATION IDENTIFIER|CCITT IA5|0|0|72|Character|0|9
+001012|directionOfMotionOfMovingObservingPlatform|long|DIRECTION OF MOTION OF MOVING OBSERVING PLATFORM|deg|0|0|9|deg|0|3
+001013|movingObservingPlatformSpeed|long|SPEED OF MOTION OF MOVING OBSERVING PLATFORM|m/s|0|0|10|m/s|0|3
+001014|platformDriftSpeed|double|PLATFORM DRIFT SPEED (HIGH PRECISION)|m/s|2|0|10|m/s|2|4
+001015|stationOrSiteName|string|STATION OR SITE NAME|CCITT IA5|0|0|160|Character|0|20
+001018|shortStationName|string|SHORT STATION OR SITE NAME|CCITT IA5|0|0|40|Character|0|5
+001019|longStationName|string|LONG STATION OR SITE NAME|CCITT IA5|0|0|256|Character|0|32
+001020|wmoRegionSubArea|long|WMO REGION SUB-AREA|Numeric|0|0|4|Numeric|0|2
+001021|synopticFeatureIdentifier|long|SYNOPTIC FEATURE IDENTIFIER|Numeric|0|0|14|Numeric|0|4
+001022|featureName|string|NAME OF FEATURE|CCITT IA5|0|0|224|Character|0|28
+001023|observationSequenceNumber|long|OBSERVATION SEQUENCE NUMBER|Numeric|0|0|9|Numeric|0|3
+001024|windSpeedSource|table|WIND SPEED SOURCE|CODE TABLE|0|0|5|CODE TABLE|0|2
+001025|stormIdentifier|string|STORM IDENTIFIER|CCITT IA5|0|0|24|Character|0|3
+001026|stormName|string|WMO STORM NAME|CCITT IA5|0|0|64|Character|0|8
+001027|longStormName|string|WMO LONG STORM NAME|CCITT IA5|0|0|80|Character|0|10
+001028|aerosolOpticalDepthSource|table|AEROSOL OPTICAL DEPTH (AOD) SOURCE|CODE TABLE|0|0|5|CODE TABLE|0|2
+001029|ssiSource|table|SSI SOURCE|CODE TABLE|0|0|5|CODE TABLE|0|2
+001030|numericalModelIdentifier|string|NUMERICAL MODEL IDENTIFIER|CCITT IA5|0|0|128|Character|0|16
+001031|centre|table|IDENTIFICATION OF ORIGINATING/GENERATING CENTRE|CODE TABLE|0|0|16|CODE TABLE|0|5
+001032|generatingApplication|table|GENERATING APPLICATION|CODE TABLE defined by originating/generating centre|0|0|8|CODE TABLE|0|3
+001033|centre|table|IDENTIFICATION OF ORIGINATING/GENERATING CENTRE|Common CODE TABLE C-1|0|0|8|Common CODE TABLE C-1|0|3
+001034|subCentre|table|IDENTIFICATION OF ORIGINATING/GENERATING SUB-CENTRE|Common CODE TABLE C-12|0|0|8|Common CODE TABLE C-12|0|3
+001035|centre|table|ORIGINATING CENTRE|Common CODE TABLE C-11|0|0|16|Common CODE TABLE C-11|0|5
+001036|agencyInChargeOfOperatingObservingPlatform|table|AGENCY IN CHARGE OF OPERATING THE OBSERVING PLATFORM|CODE TABLE|0|0|20|CODE TABLE|0|7
+001037|sigmetSequenceIdentifier|string|SIGMET SEQUENCE IDENTIFIER|CCITT IA5|0|0|24|Character|0|3
+001038|sourceOfSeaIceFraction|table|SOURCE OF SEA ICE FRACTION|CODE TABLE|0|0|5|CODE TABLE|0|2
+001039|graphicalAreaForecastSequenceIdentifier|string|GRAPHICAL AREA FORECAST (GFA) SEQUENCE IDENTIFIER|CCITT IA5|0|0|40|Character|0|5
+001040|processingCentreIdCode|string|PROCESSING CENTRE ID CODE|CCITT IA5|0|0|48|Character|0|6
+001041|absolutePlatformVelocityFirstComponent|double|ABSOLUTE PLATFORM VELOCITY - FIRST COMPONENT|m/s|5|-1073741824|31|m/s|5|10
+001042|absolutePlatformVelocitySecondComponent|double|ABSOLUTE PLATFORM VELOCITY - SECOND COMPONENT|m/s|5|-1073741824|31|m/s|5|10
+001043|absolutePlatformVelocityThirdComponent|double|ABSOLUTE PLATFORM VELOCITY - THIRD COMPONENT|m/s|5|-1073741824|31|m/s|5|10
+001050|platformTransmitterIdNumber|long|PLATFORM TRANSMITTER ID NUMBER|Numeric|0|0|17|Numeric|0|6
+001051|platformTransmitterIdNumber|string|PLATFORM TRANSMITTER ID NUMBER|CCITT IA5|0|0|96|Character|0|12
+001052|platformTransmitterId|table|PLATFORM TRANSMITTER ID|CODE TABLE|0|0|3|CODE TABLE|0|1
+001053|tsunameterReportSequenceNumber|long|TSUNAMETER REPORT SEQUENCE NUMBER TRIGGERED BY A TSUNAMI EVENT|Numeric|0|0|7|Numeric|0|2
+001060|aircraftReportingPointBeaconIdentifier|string|AIRCRAFT REPORTING POINT (BEACON IDENTIFIER)|CCITT IA5|0|0|64|Character|0|8
+001062|shortIcaoLocationIndicator|string|SHORT ICAO LOCATION INDICATOR|CCITT IA5|0|0|32|Character|0|4
+001063|icaoLocationIndicator|string|ICAO LOCATION INDICATOR|CCITT IA5|0|0|64|Character|0|8
+001064|runwayDesignator|string|RUNWAY DESIGNATOR|CCITT IA5|0|0|32|Character|0|4
+001065|icaoRegionIdentifier|string|ICAO REGION IDENTIFIER|CCITT IA5|0|0|256|Character|0|32
+001075|tideStationIdentification|string|TIDE STATION IDENTIFICATION|CCITT IA5|0|0|40|Character|0|5
+001079|uniqueIdentifierForProfile|string|UNIQUE IDENTIFIER FOR THE PROFILE|CCITT IA5|0|0|64|Character|0|8
+001080|shipLineNumberAccordingToSoop|string|SHIP LINE NUMBER ACCORDING TO SOOP|CCITT IA5|0|0|32|Character|0|4
+001081|radiosondeSerialNumber|string|RADIOSONDE SERIAL NUMBER|CCITT IA5|0|0|160|Character|0|20
+001082|radiosondeAscensionNumber|long|RADIOSONDE ASCENSION NUMBER|Numeric|0|0|14|Numeric|0|4
+001083|radiosondeReleaseNumber|long|RADIOSONDE RELEASE NUMBER|Numeric|0|0|3|Numeric|0|1
+001085|observingPlatformManufacturerModel|string|OBSERVING PLATFORM MANUFACTURER'S MODEL|CCITT IA5|0|0|160|Character|0|20
+001086|observingPlatformManufacturerSerialNumber|string|OBSERVING PLATFORM MANUFACTURER'S SERIAL NUMBER|CCITT IA5|0|0|256|Character|0|32
+001087|marineObservingPlatformIdentifier|long|WMO MARINE OBSERVING PLATFORM EXTENDED IDENTIFIER|Numeric|0|0|23|Numeric|0|7
+001090|techniqueForMakingUpInitialPerturbations|table|TECHNIQUE FOR MAKING UP INITIAL PERTURBATIONS|CODE TABLE|0|0|8|CODE TABLE|0|3
+001091|ensembleMemberNumber|long|ENSEMBLE MEMBER NUMBER|Numeric|0|0|10|Numeric|0|4
+001092|ensembleForecastType|table|TYPE OF ENSEMBLE FORECAST|CODE TABLE|0|0|8|CODE TABLE|0|3
+001093|balloonLotNumber|string|BALLOON LOT NUMBER|CCITT IA5|0|0|96|Character|0|12
+001094|wbanNumber|long|WBAN NUMBER|Numeric|0|0|17|Numeric|0|5
+001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
+001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
+001099|uniqueProductDefinition|string|UNIQUE PRODUCT DEFINITION|CCITT IA5|0|0|248|Character|0|31
+001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
+001102|nationalStationNumber|long|NATIONAL STATION NUMBER|Numeric|0|0|30|Numeric|0|9
+001103|imoNumber|long|IMO NUMBER. UNIQUE LLOYD'S REGISTER|Numeric|0|0|24|Numeric|0|7
+001104|stateOrFederalStateIdentifier|string|STATE/FEDERAL STATE IDENTIFIER|CCITT IA5|0|0|32|Character|0|4
+001105|highwayDesignator|string|HIGHWAY DESIGNATOR|CCITT IA5|0|0|40|Character|0|5
+001106|locationAlongHighwayAsIndicatedByPositionMarkers|long|LOCATION ALONG HIGHWAY AS INDICATED BY POSITION MARKERS|m|-2|0|14|m|-2|5
+001110|aircraftTailNumber|string|AIRCRAFT TAIL NUMBER|CCITT IA5|0|0|48|Character|0|6
+001111|originationAirport|string|ORIGINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
+001112|destinationAirport|string|DESTINATION AIRPORT|CCITT IA5|0|0|24|Character|0|3
+001113|templateVersionNumberDefinedByOriginatingCentre|long|TEMPLATE VERSION NUMBER DEFINED BY ORIGINATING CENTRE|Numeric|1|0|9|Numeric|1|3
+001115|identifierOfTheCruiseOrMission|string|IDENTIFIER OF THE CRUISE OR MISSION UNDER WHICH THE DATA WERE COLLECTED|CCITT IA5|0|0|160|Character|0|20
+001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
+001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
+002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+002002|instrumentationForWindMeasurement|flag|TYPE OF INSTRUMENTATION FOR WIND MEASUREMENT|FLAG TABLE|0|0|4|FLAG TABLE|0|2
+002003|measuringEquipmentType|table|TYPE OF MEASURING EQUIPMENT USED|CODE TABLE|0|0|4|CODE TABLE|0|2
+002004|typeOfInstrumentationForEvaporationMeasurement|table|TYPE OF INSTRUMENTATION FOR EVAPORATION MEASUREMENT OR TYPE OF CROP FOR WHICH EVAPOTRANSPIRATION IS REPORTED|CODE TABLE|0|0|4|CODE TABLE|0|2
+002005|temperatureObservationPrecision|double|PRECISION OF TEMPERATURE OBSERVATION|K|2|0|7|K|2|3
+002007|sensorForWaterLevelMeasuringInstrumentType|table|TYPE OF SENSOR FOR WATER LEVEL MEASURING INSTRUMENT|CODE TABLE|0|0|6|CODE TABLE|0|2
+002011|radiosondeType|table|RADIOSONDE TYPE|CODE TABLE|0|0|8|CODE TABLE|0|3
+002012|radiosondeComputationalMethod|table|RADIOSONDE COMPUTATIONAL METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2
+002013|solarAndInfraredRadiationCorrection|table|SOLAR AND INFRARED RADIATION CORRECTION|CODE TABLE|0|0|4|CODE TABLE|0|2
+002014|trackingTechniqueOrStatusOfSystem|table|TRACKING TECHNIQUE/STATUS OF SYSTEM USED|CODE TABLE|0|0|7|CODE TABLE|0|3
+002015|radiosondeCompleteness|table|RADIOSONDE COMPLETENESS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002016|radiosondeConfiguration|flag|RADIOSONDE CONFIGURATION|FLAG TABLE|0|0|5|FLAG TABLE|0|2
+002017|correctionAlgorithmsForHumidityMeasurements|table|CORRECTION ALGORITHMS FOR HUMIDITY MEASUREMENTS|CODE TABLE|0|0|5|CODE TABLE|0|2
+002019|satelliteInstruments|table|SATELLITE INSTRUMENTS|CODE TABLE|0|0|11|CODE TABLE|0|4
+002020|satelliteClassification|table|SATELLITE CLASSIFICATION|CODE TABLE|0|0|9|CODE TABLE|0|3
+002021|satelliteInstrumentDataUsedInProcessing|flag|SATELLITE INSTRUMENT DATA USED IN PROCESSING|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+002022|satelliteDataProcessingTechnique|flag|SATELLITE DATA-PROCESSING TECHNIQUE USED|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+002023|satelliteDerivedWindComputationMethod|table|SATELLITE-DERIVED WIND COMPUTATION METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2
+002024|meanHumidityComputationalMethod|table|INTEGRATED MEAN HUMIDITY COMPUTATIONAL METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2
+002025|satelliteChannelsUsedInComputation|flag|SATELLITE CHANNEL(S) USED IN COMPUTATION|FLAG TABLE|0|0|25|FLAG TABLE|0|9
+002026|crossTrackResolution|double|CROSS-TRACK RESOLUTION|m|2|0|12|m|2|4
+002027|alongTrackResolution|double|ALONG-TRACK RESOLUTION|m|2|0|12|m|2|4
+002028|segmentSizeAtNadirInXDirection|long|SEGMENT SIZE AT NADIR IN X-DIRECTION|m|0|0|18|m|0|6
+002029|segmentSizeAtNadirInYDirection|long|SEGMENT SIZE AT NADIR IN Y-DIRECTION|m|0|0|18|m|0|6
+002030|methodOfCurrentMeasurement|table|METHOD OF CURRENT MEASUREMENT|CODE TABLE|0|0|3|CODE TABLE|0|1
+002031|durationAndTimeOfCurrentMeasurement|table|DURATION AND TIME OF CURRENT MEASUREMENT|CODE TABLE|0|0|5|CODE TABLE|0|2
+002032|indicatorForDigitization|table|INDICATOR FOR DIGITIZATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+002033|methodOfSalinityOrDepthMeasurement|table|METHOD OF SALINITY/DEPTH MEASUREMENT|CODE TABLE|0|0|3|CODE TABLE|0|1
+002034|drogueType|table|DROGUE TYPE|CODE TABLE|0|0|5|CODE TABLE|0|2
+002035|cableLength|long|CABLE LENGTH|m|0|0|9|m|0|3
+002036|buoyType|table|BUOY TYPE|CODE TABLE|0|0|2|CODE TABLE|0|1
+002037|methodOfTidalObservation|table|METHOD OF TIDAL OBSERVATION|CODE TABLE|0|0|3|CODE TABLE|0|1
+002038|methodOfWaterTemperatureAndOrOrSalinityMeasurement|table|METHOD OF WATER TEMPERATURE AND/OR SALINITY MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+002039|methodOfWetBulbTemperatureMeasurement|table|METHOD OF WET-BULB TEMPERATURE MEASUREMENT|CODE TABLE|0|0|3|CODE TABLE|0|1
+002040|methodOfRemovingVelocityAndMotionOfPlatformFromCurrent|table|METHOD OF REMOVING VELOCITY AND MOTION OF PLATFORM FROM CURRENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+002041|methodForEstimatingReportsRelatedToSynopticFeatures|table|METHOD FOR ESTIMATING REPORTS RELATED TO SYNOPTIC FEATURES|CODE TABLE|0|0|6|CODE TABLE|0|2
+002042|indicatorForSeaSurfaceCurrentSpeed|table|INDICATOR FOR SEA-SURFACE CURRENT SPEED|CODE TABLE|0|0|2|CODE TABLE|0|1
+002044|indicatorForMethodOfCalculatingSpectralWaveData|table|INDICATOR FOR METHOD OF CALCULATING SPECTRAL WAVE DATA|CODE TABLE|0|0|4|CODE TABLE|0|2
+002045|platformType|table|INDICATOR FOR TYPE OF PLATFORM|CODE TABLE|0|0|4|CODE TABLE|0|2
+002046|waveMeasurementInstrumentation|table|WAVE MEASUREMENT INSTRUMENTATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+002047|deepOceanTsunameterType|table|DEEP-OCEAN TSUNAMETER TYPE|CODE TABLE|0|0|7|CODE TABLE|0|2
+002048|satelliteSensorIndicator|table|SATELLITE SENSOR INDICATOR|CODE TABLE|0|0|4|CODE TABLE|0|2
+002049|geostationarySatelliteDataProcessingTechnique|flag|GEOSTATIONARY SATELLITE DATA-PROCESSING TECHNIQUE USED|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+002050|geostationarySounderSatelliteChannels|flag|GEOSTATIONARY SOUNDER SATELLITE CHANNELS USED|FLAG TABLE|0|0|20|FLAG TABLE|0|7
+002051|indicatorToSpecifyObservingMethodForExtremeTemperatures|table|INDICATOR TO SPECIFY OBSERVING METHOD FOR EXTREME TEMPERATURES|CODE TABLE|0|0|4|CODE TABLE|0|2
+002052|geostationaryImagerSatelliteChannels|flag|GEOSTATIONARY IMAGER SATELLITE CHANNELS USED|FLAG TABLE|0|0|6|FLAG TABLE|0|2
+002053|goesBrightnessTemperatureCharacteristics|table|GOES-I/M BRIGHTNESS TEMPERATURE CHARACTERISTICS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002054|goesSoundingsParameter|table|GOES-I/M SOUNDINGS PARAMETER CHARACTERISTICS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002055|geostationarySoundingsStatisticalParameters|table|GEOSTATIONARY SOUNDINGS STATISTICAL PARAMETERS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002056|geostationarySoundingsAccuracyStatistics|table|GEOSTATIONARY SOUNDINGS ACCURACY STATISTICS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002057|originOfFirstGuessInformationForGoesIOrMSoundings|table|ORIGIN OF FIRST-GUESS INFORMATION FOR GOES-I/M SOUNDINGS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002058|validTimesOfFirstGuessInformationForGoesIOrMSoundings|table|VALID TIMES OF FIRST-GUESS INFORMATION FOR GOES-I/M SOUNDINGS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002059|originOfAnalysisInformationForGoesIOrMSoundings|table|ORIGIN OF ANALYSIS INFORMATION FOR GOES-I/M SOUNDINGS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002060|originOfSurfaceInformationForGoesIOrMSoundings|table|ORIGIN OF SURFACE INFORMATION FOR GOES-I/M SOUNDINGS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002061|aircraftNavigationalSystem|table|AIRCRAFT NAVIGATIONAL SYSTEM|CODE TABLE|0|0|3|CODE TABLE|0|1
+002062|aircraftDataRelaySystemType|table|TYPE OF AIRCRAFT DATA RELAY SYSTEM|CODE TABLE|0|0|4|CODE TABLE|0|2
+002063|aircraftRollAngle|double|AIRCRAFT ROLL ANGLE|deg|2|-18000|16|deg|2|5
+002064|aircraftRollAngleQuality|table|AIRCRAFT ROLL ANGLE QUALITY|CODE TABLE|0|0|2|CODE TABLE|0|1
+002065|acarsGroundReceivingStation|string|ACARS GROUND-RECEIVING STATION|CCITT IA5|0|0|40|Character|0|5
+002066|radiosondeGroundReceivingSystem|table|RADIOSONDE GROUND RECEIVING SYSTEM|CODE TABLE|0|0|6|CODE TABLE|0|2
+002067|radiosondeOperatingFrequency|long|RADIOSONDE OPERATING FREQUENCY|Hz|-5|0|15|Hz|-5|5
+002070|originalSpecificationOfLatitudeOrLongitude|table|ORIGINAL SPECIFICATION OF LATITUDE/LONGITUDE|CODE TABLE|0|0|4|CODE TABLE|0|2
+002071|spectrographicWavelength|double|SPECTROGRAPHIC WAVELENGTH|m|13|0|30|m|13|10
+002072|spectrographicWidth|double|SPECTROGRAPHIC WIDTH|m|13|0|30|m|13|10
+002080|balloonManufacturer|table|BALLOON MANUFACTURER|CODE TABLE|0|0|6|CODE TABLE|0|2
+002081|balloonType|table|TYPE OF BALLOON|CODE TABLE|0|0|5|CODE TABLE|0|2
+002082|weightOfBalloon|double|WEIGHT OF BALLOON|kg|3|0|12|kg|3|4
+002083|balloonShelterType|table|TYPE OF BALLOON SHELTER|CODE TABLE|0|0|4|CODE TABLE|0|2
+002084|typeOfGasUsedInBalloon|table|TYPE OF GAS USED IN BALLOON|CODE TABLE|0|0|4|CODE TABLE|0|2
+002085|amountOfGasUsedInBalloon|double|AMOUNT OF GAS USED IN BALLOON|kg|3|0|13|kg|3|4
+002086|balloonFlightTrainLength|double|BALLOON FLIGHT TRAIN LENGTH|m|1|0|10|m|1|4
+002091|entrySensor4Or20Ma|double|ENTRY SENSOR 4/20 MA|A|4|0|10|A|4|3
+002095|pressureSensorType|table|TYPE OF PRESSURE SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2
+002096|temperatureSensorType|table|TYPE OF TEMPERATURE SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2
+002097|humiditySensorType|table|TYPE OF HUMIDITY SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2
+002099|polarization|table|POLARIZATION|CODE TABLE|0|0|3|CODE TABLE|0|1
+002100|radarConstant|double|RADAR CONSTANT|dB|1|0|12|dB|1|4
+002101|antennaType|table|TYPE OF ANTENNA|CODE TABLE|0|0|4|CODE TABLE|0|2
+002102|antennaHeightAboveTowerBase|long|ANTENNA HEIGHT ABOVE TOWER BASE|m|0|0|8|m|0|3
+002103|radome|flag|RADOME|FLAG TABLE|0|0|2|FLAG TABLE|0|1
+002104|antennaPolarization|table|ANTENNA POLARIZATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+002105|maximumAntennaGain|long|MAXIMUM ANTENNA GAIN|dB|0|0|6|dB|0|2
+002106|3DbBeamwidth|double|3-DB BEAMWIDTH|deg|1|0|6|deg|1|2
+002107|sidelobeSuppression|long|SIDELOBE SUPPRESSION|dB|0|0|6|dB|0|2
+002108|crosspolDiscriminationOnAxis|long|CROSSPOL DISCRIMINATION (ON AXIS)|dB|0|0|6|dB|0|2
+002109|antennaSpeedAzimuth|double|ANTENNA SPEED (AZIMUTH)|deg/s|2|0|12|deg/s|2|4
+002110|antennaSpeedElevation|double|ANTENNA SPEED (ELEVATION)|deg/s|2|0|12|deg/s|2|4
+002111|radarIncidenceAngle|double|RADAR INCIDENCE ANGLE|deg|1|0|10|deg|1|4
+002112|radarLookAngle|double|RADAR LOOK ANGLE|deg|1|0|12|deg|1|4
+002113|numberOfAzimuthLooks|long|NUMBER OF AZIMUTH LOOKS|Numeric|0|0|4|Numeric|0|2
+002114|antennaEffectiveSurfaceArea|long|ANTENNA EFFECTIVE SURFACE AREA|m2|0|0|15|m2|0|5
+002115|surfaceObservingEquipmentType|table|TYPE OF SURFACE OBSERVING EQUIPMENT|CODE TABLE|0|0|5|CODE TABLE|0|2
+002116|percentageOf320MhzBandProcessed|long|PERCENTAGE OF 320 MHZ BAND PROCESSED|%|0|0|7|%|0|3
+002117|percentageOf80MhzBandProcessed|long|PERCENTAGE OF 80 MHZ BAND PROCESSED|%|0|0|7|%|0|3
+002118|percentageOf20MhzBandProcessed|long|PERCENTAGE OF 20 MHZ BAND PROCESSED|%|0|0|7|%|0|3
+002119|ra2InstrumentOperations|table|RA-2 INSTRUMENT OPERATIONS|CODE TABLE|0|0|3|CODE TABLE|0|1
+002120|oceanWaveFrequency|double|OCEAN WAVE FREQUENCY|Hz|3|0|10|Hz|3|4
+002121|meanFrequency|long|MEAN FREQUENCY|Hz|-8|0|7|Hz|-8|3
+002122|frequencyAgilityRange|long|FREQUENCY AGILITY RANGE|Hz|-6|-128|8|Hz|-6|3
+002123|peakPower|long|PEAK POWER|W|-4|0|7|W|-4|3
+002124|averagePower|long|AVERAGE POWER|W|-1|0|7|W|-1|3
+002125|pulseRepetitionFrequency|long|PULSE REPETITION FREQUENCY|Hz|-1|0|8|Hz|-1|3
+002126|pulseWidth|double|PULSE WIDTH|s|7|0|6|s|7|2
+002127|receiverIntermediateFrequency|long|RECEIVER INTERMEDIATE FREQUENCY|Hz|-6|0|7|Hz|-6|3
+002128|intermediateFrequencyBandwidth|long|INTERMEDIATE FREQUENCY BANDWIDTH|Hz|-5|0|6|Hz|-5|2
+002129|minimumDetectableSignal|long|MINIMUM DETECTABLE SIGNAL|dB|0|-150|5|dB|0|3
+002130|dynamicRange|long|DYNAMIC RANGE|dB|0|0|7|dB|0|3
+002131|sensitivityTimeControl|flag|SENSITIVITY TIME CONTROL (STC)|FLAG TABLE|0|0|2|FLAG TABLE|0|1
+002132|azimuthPointingAccuracy|double|AZIMUTH POINTING ACCURACY|deg|2|0|6|deg|2|2
+002133|elevationPointingAccuracy|double|ELEVATION POINTING ACCURACY|deg|2|0|6|deg|2|2
+002134|antennaBeamAzimuth|double|ANTENNA BEAM AZIMUTH|deg|2|0|16|deg|2|5
+002135|antennaElevation|double|ANTENNA ELEVATION|deg|2|-9000|15|deg|2|5
+002136|rangeProcessedByRangeAttenuationCorrection|long|RANGE PROCESSED BY RANGE ATTENUATION CORRECTION|m|-3|0|16|m|-3|5
+002137|radarDualPrfRatio|table|RADAR DUAL PRF RATIO|CODE TABLE|0|0|4|CODE TABLE|0|2
+002138|antennaRotationDirection|table|ANTENNA ROTATION DIRECTION|CODE TABLE|0|0|2|CODE TABLE|0|1
+002139|siralInstrumentConfiguration|table|SIRAL INSTRUMENT CONFIGURATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+002140|satelliteRadarBeamAzimuthAngle|long|SATELLITE RADAR BEAM AZIMUTH ANGLE|deg|0|0|9|deg|0|3
+002141|measurementType|string|MEASUREMENT TYPE|CCITT IA5|0|0|24|Character|0|3
+002142|ozoneInstrument|string|OZONE INSTRUMENT SERIAL NUMBER/IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
+002143|ozoneInstrumentType|table|OZONE INSTRUMENT TYPE|CODE TABLE|0|0|7|CODE TABLE|0|3
+002144|lightSourceTypeForBrewerSpectrophotometer|table|LIGHT SOURCE TYPE FOR BREWER SPECTROPHOTOMETER|CODE TABLE|0|0|4|CODE TABLE|0|2
+002145|wavelengthSettingForDobsonInstruments|table|WAVELENGTH SETTING FOR DOBSON INSTRUMENTS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002146|sourceConditionsForDobsonInstruments|table|SOURCE CONDITIONS FOR DOBSON INSTRUMENTS|CODE TABLE|0|0|4|CODE TABLE|0|2
+002147|methodOfTransmissionToCollectionCentre|table|METHOD OF TRANSMISSION TO COLLECTION CENTRE|CODE TABLE|0|0|6|CODE TABLE|0|2
+002148|dataCollectionLocationSystem|table|DATA COLLECTION AND/OR LOCATION SYSTEM|CODE TABLE|0|0|5|CODE TABLE|0|2
+002149|dataBuoyType|table|TYPE OF DATA BUOY|CODE TABLE|0|0|6|CODE TABLE|0|2
+002150|tovsOrAtovsOrAvhrrInstrumentationChannelNumber|table|TOVS/ATOVS/AVHRR INSTRUMENTATION CHANNEL NUMBER|CODE TABLE|0|0|6|CODE TABLE|0|2
+002151|radiometerIdentifier|table|RADIOMETER IDENTIFIER|CODE TABLE|0|0|11|CODE TABLE|0|4
+002152|satelliteInstrumentUsedInDataProcessing|flag|SATELLITE INSTRUMENT USED IN DATA PROCESSING|FLAG TABLE|0|0|31|FLAG TABLE|0|10
+002153|satelliteChannelCentreFrequency|long|SATELLITE CHANNEL CENTRE FREQUENCY|Hz|-8|0|26|Hz|-8|8
+002154|satelliteChannelBandWidth|long|SATELLITE CHANNEL BAND WIDTH|Hz|-8|0|26|Hz|-8|8
+002155|satelliteChannelWavelength|double|SATELLITE CHANNEL WAVELENGTH|m|9|0|16|m|9|5
+002156|percentageOfValidKuOceanRetrackerMeasurements|long|PERCENTAGE OF VALID KU OCEAN RETRACKER MEASUREMENTS|%|0|0|7|%|0|3
+002157|percentageOfValidSOceanRetrackerMeasurements|long|PERCENTAGE OF VALID S OCEAN RETRACKER MEASUREMENTS|%|0|0|7|%|0|3
+002158|ra2Instrument|flag|RA-2 INSTRUMENT|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+002159|mwrInstrument|flag|MWR INSTRUMENT|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+002160|radarWaveLength|table|WAVELENGTH OF THE RADAR|CODE TABLE|0|0|4|CODE TABLE|0|2
+002163|heightAssignmentMethod|table|HEIGHT ASSIGNMENT METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2
+002164|tracerCorrelationMethod|table|TRACER CORRELATION METHOD|CODE TABLE|0|0|3|CODE TABLE|0|1
+002165|radianceTypeFlags|flag|RADIANCE TYPE FLAGS|FLAG TABLE|0|0|15|FLAG TABLE|0|5
+002166|radianceType|table|RADIANCE TYPE|CODE TABLE|0|0|4|CODE TABLE|0|2
+002167|radianceComputationalMethod|table|RADIANCE COMPUTATIONAL METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2
+002168|hydrostaticPressureOfLowerEndOfCableThermistorString|long|HYDROSTATIC PRESSURE OF LOWER END OF CABLE (THERMISTOR STRING)|Pa|-3|0|16|kPa|0|5
+002169|anemometerType|table|ANEMOMETER TYPE|CODE TABLE|0|0|4|CODE TABLE|0|2
+002170|aircraftHumiditySensors|table|AIRCRAFT HUMIDITY SENSORS|CODE TABLE|0|0|6|CODE TABLE|0|2
+002171|instrumentSerialNumberForWaterTemperatureProfile|string|INSTRUMENT SERIAL NUMBER FOR WATER TEMPERATURE PROFILE MEASUREMENT|CCITT IA5|0|0|64|Character|0|8
+002172|productTypeForRetrievedAtmosphericGases|table|PRODUCT TYPE FOR RETRIEVED ATMOSPHERIC GASES|CODE TABLE|0|0|8|CODE TABLE|0|3
+002173|squareOfOffNadirAngle|double|SQUARE OF THE OFF-NADIR ANGLE|deg2|4|0|10|deg2|4|4
+002174|meanAcrossTrackPixelNumber|long|MEAN ACROSS TRACK PIXEL NUMBER|Numeric|0|0|9|Numeric|0|3
+002175|methodOfPrecipitationMeasurement|table|METHOD OF PRECIPITATION MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+002176|methodOfStateOfGroundMeasurement|table|METHOD OF STATE OF GROUND MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+002177|methodOfSnowDepthMeasurement|table|METHOD OF SNOW DEPTH MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+002178|methodOfLiquidContentMeasurementOfPrecipitation|table|METHOD OF LIQUID CONTENT MEASUREMENT OF PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+002179|skyConditionAlgorithmType|table|TYPE OF SKY CONDITION ALGORITHM|CODE TABLE|0|0|4|CODE TABLE|0|2
+002180|mainPresentWeatherDetectingSystem|table|MAIN PRESENT WEATHER DETECTING SYSTEM|CODE TABLE|0|0|4|CODE TABLE|0|2
+002181|supplementaryPresentWeatherSensor|flag|SUPPLEMENTARY PRESENT WEATHER SENSOR|FLAG TABLE|0|0|21|FLAG TABLE|0|7
+002182|visibilityMeasurementSystem|table|VISIBILITY MEASUREMENT SYSTEM|CODE TABLE|0|0|4|CODE TABLE|0|2
+002183|cloudDetectionSystem|table|CLOUD DETECTION SYSTEM|CODE TABLE|0|0|4|CODE TABLE|0|2
+002184|lightningDetectionSensorType|table|TYPE OF LIGHTNING DETECTION SENSOR|CODE TABLE|0|0|4|CODE TABLE|0|2
+002185|methodOfEvaporationMeasurement|table|METHOD OF EVAPORATION MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+002186|capabilityToDetectPrecipitationPhenomena|flag|CAPABILITY TO DETECT PRECIPITATION PHENOMENA|FLAG TABLE|0|0|30|FLAG TABLE|0|10
+002187|capabilityToDetectOtherWeatherPhenomena|flag|CAPABILITY TO DETECT OTHER WEATHER PHENOMENA|FLAG TABLE|0|0|18|FLAG TABLE|0|6
+002188|capabilityToDetectObscuration|flag|CAPABILITY TO DETECT OBSCURATION|FLAG TABLE|0|0|21|FLAG TABLE|0|7
+002189|capabilityToDiscriminateLightningStrikes|flag|CAPABILITY TO DISCRIMINATE LIGHTNING STRIKES|FLAG TABLE|0|0|12|FLAG TABLE|0|4
+002190|lagrangianDrifterSubmergenceTimeSubmerged|long|LAGRANGIAN DRIFTER SUBMERGENCE (% TIME SUBMERGED)|%|0|0|7|%|0|3
+002191|geopotentialHeightCalculation|table|GEOPOTENTIAL HEIGHT CALCULATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+003010|methodOfSeaOrWaterCurrentMeasurement|table|METHOD OF SEA/WATER CURRENT MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+003011|methodOfDepthCalculation|table|METHOD OF DEPTH CALCULATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+003012|instrumentTypeOrSensorForDissolvedOxygenMeasurement|table|INSTRUMENT TYPE/SENSOR FOR DISSOLVED OXYGEN MEASUREMENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+003016|positionOfRoadSensors|table|POSITION OF ROAD SENSORS|CODE TABLE|0|0|4|CODE TABLE|0|2
+003017|extendedTypeOfStation|flag|EXTENDED TYPE OF STATION|FLAG TABLE|0|0|6|FLAG TABLE|0|2
+003018|typeOfRoad|table|TYPE OF ROAD|CODE TABLE|0|0|5|CODE TABLE|0|2
+003019|typeOfConstruction|table|TYPE OF CONSTRUCTION|CODE TABLE|0|0|4|CODE TABLE|0|2
+004001|year|long|YEAR|a|0|0|12|a|0|4
+004002|month|long|MONTH|mon|0|0|4|mon|0|2
+004003|day|long|DAY|d|0|0|6|d|0|2
+004004|hour|long|HOUR|h|0|0|5|h|0|2
+004005|minute|long|MINUTE|min|0|0|6|min|0|2
+004006|second|long|SECOND|s|0|0|6|s|0|2
+004007|secondsWithinAMinuteMicrosecond|double|SECONDS WITHIN A MINUTE (MICROSECOND ACCURACY)|s|6|0|26|s|6|8
+004011|timeIncrement|long|TIME INCREMENT|a|0|-1024|11|a|0|4
+004012|timeIncrement|long|TIME INCREMENT|mon|0|-1024|11|mon|0|4
+004013|timeIncrement|long|TIME INCREMENT|d|0|-1024|11|d|0|4
+004014|timeIncrement|long|TIME INCREMENT|h|0|-1024|11|h|0|4
+004015|timeIncrement|long|TIME INCREMENT|min|0|-2048|12|min|0|4
+004016|timeIncrement|long|TIME INCREMENT|s|0|-4096|13|s|0|4
+004017|referenceTimePeriodForAccumulatedOrExtremeData|long|REFERENCE TIME PERIOD FOR ACCUMULATED OR EXTREME DATA|min|0|-1440|12|min|0|4
+004021|timePeriod|long|TIME PERIOD OR DISPLACEMENT|a|0|-1024|11|a|0|4
+004022|timePeriod|long|TIME PERIOD OR DISPLACEMENT|mon|0|-1024|11|mon|0|4
+004023|timePeriod|long|TIME PERIOD OR DISPLACEMENT|d|0|-1024|11|d|0|4
+004024|timePeriod|long|TIME PERIOD OR DISPLACEMENT|h|0|-2048|12|h|0|4
+004025|timePeriod|long|TIME PERIOD OR DISPLACEMENT|min|0|-2048|12|min|0|4
+004026|timePeriod|long|TIME PERIOD OR DISPLACEMENT|s|0|-4096|13|s|0|4
+004031|durationOfTimeRelatingToFollowingValue|long|DURATION OF TIME RELATING TO FOLLOWING VALUE|h|0|0|8|h|0|3
+004032|durationOfTimeRelatingToFollowingValue|long|DURATION OF TIME RELATING TO FOLLOWING VALUE|min|0|0|6|min|0|2
+004041|timeDifferenceUtcLmt|long|TIME DIFFERENCE, UTC - LMT|min|0|-1440|12|min|0|4
+004043|dayOfYear|long|DAY OF THE YEAR|d|0|0|9|d|0|3
+004051|principalTimeOfDailyReadingOfMaximumTemperature|long|PRINCIPAL TIME OF DAILY READING OF MAXIMUM TEMPERATURE|h|0|0|5|h|0|2
+004052|principalTimeOfDailyReadingOfMinimumTemperature|long|PRINCIPAL TIME OF DAILY READING OF MINIMUM TEMPERATURE|h|0|0|5|h|0|2
+004053|numberOfDaysWithPrecipitationEqualToOrMoreThan1Mm|long|NUMBER OF DAYS WITH PRECIPITATION EQUAL TO OR MORE THAN 1 MM|Numeric|0|0|6|Numeric|0|2
+004059|timesOfObservationUsedToComputeReportedMeanValues|flag|TIMES OF OBSERVATION USED TO COMPUTE THE REPORTED MEAN VALUES|FLAG TABLE|0|0|6|FLAG TABLE|0|2
+004065|timeIncrement|long|SHORT TIME INCREMENT|min|0|-128|8|min|0|2
+004066|timeIncrement|long|SHORT TIME INCREMENT|s|0|-128|8|s|0|2
+004073|timePeriod|long|SHORT TIME PERIOD OR DISPLACEMENT|d|0|-128|8|d|0|2
+004074|timePeriod|long|SHORT TIME PERIOD OR DISPLACEMENT|h|0|-128|8|h|0|2
+004075|timePeriod|long|SHORT TIME PERIOD OR DISPLACEMENT|min|0|-128|8|min|0|2
+004080|averagingPeriodForFollowingValue|table|AVERAGING PERIOD FOR FOLLOWING VALUE|CODE TABLE|0|0|4|CODE TABLE|0|2
+004086|timePeriod|long|LONG TIME PERIOD OR DISPLACEMENT|s|0|-8192|15|s|0|5
+005001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+005002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+005011|latitudeIncrement|double|LATITUDE INCREMENT (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+005012|latitudeIncrement|double|LATITUDE INCREMENT (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+005015|latitudeDisplacement|double|LATITUDE DISPLACEMENT (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+005016|latitudeDisplacement|double|LATITUDE DISPLACEMENT (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+005021|bearingOrAzimuth|double|BEARING OR AZIMUTH|deg|2|0|16|deg|2|5
+005022|solarAzimuth|double|SOLAR AZIMUTH|deg|2|0|16|deg|2|5
+005023|sunToSatelliteAzimuthDifference|double|SUN TO SATELLITE AZIMUTH DIFFERENCE|deg|1|-1800|12|deg|1|4
+005030|directionSpectral|long|DIRECTION (SPECTRAL)|deg|0|0|12|deg|0|4
+005031|rowNumber|long|ROW NUMBER|Numeric|0|0|12|Numeric|0|4
+005033|pixelSizeOnHorizontal1|long|PIXEL SIZE ON HORIZONTAL - 1|m|-1|0|16|m|-1|5
+005034|alongTrackRowNumber|long|ALONG TRACK ROW NUMBER|Numeric|0|0|11|Numeric|0|4
+005035|xDimensionMaximumSize|long|MAXIMUM SIZE OF X-DIMENSION|Numeric|0|0|12|Numeric|0|4
+005036|shipTransectNumberAccordingToSoop|long|SHIP TRANSECT NUMBER ACCORDING TO SOOP|Numeric|0|0|7|Numeric|0|2
+005040|orbitNumber|long|ORBIT NUMBER|Numeric|0|0|24|Numeric|0|8
+005041|scanLineNumber|long|SCAN LINE NUMBER|Numeric|0|0|8|Numeric|0|3
+005042|channelNumber|long|CHANNEL NUMBER|Numeric|0|0|6|Numeric|0|2
+005043|fieldOfViewNumber|long|FIELD OF VIEW NUMBER|Numeric|0|0|8|Numeric|0|3
+005044|satelliteCycleNumber|long|SATELLITE CYCLE NUMBER|Numeric|0|0|11|Numeric|0|4
+005045|fieldOfRegardNumber|long|FIELD OF REGARD NUMBER|Numeric|0|0|8|Numeric|0|3
+005052|channelNumberIncrement|long|CHANNEL NUMBER INCREMENT|Numeric|0|0|5|Numeric|0|2
+005053|fieldOfViewNumberIncrement|long|FIELD OF VIEW NUMBER INCREMENT|Numeric|0|0|5|Numeric|0|2
+005060|yAngularPositionFromCentreOfGravity|double|Y ANGULAR POSITION FROM CENTRE OF GRAVITY|deg|6|-8000000|24|deg|6|8
+005061|zAngularPositionFromCentreOfGravity|double|Z ANGULAR POSITION FROM CENTRE OF GRAVITY|deg|6|-8000000|24|deg|6|8
+005063|spacecraftRoll|double|SPACECRAFT ROLL|deg|2|0|16|deg|2|5
+005064|spacecraftPitch|double|SPACECRAFT PITCH|deg|2|0|16|deg|2|5
+005066|spacecraftYaw|double|SPACECRAFT YAW|deg|2|0|16|deg|2|5
+005067|numberOfScanLines|long|NUMBER OF SCAN LINES|Numeric|0|0|8|Numeric|0|3
+005068|profileNumber|long|PROFILE NUMBER|Numeric|0|0|16|Numeric|0|5
+005069|receiverChannel|table|RECEIVER CHANNEL|CODE TABLE|0|0|2|CODE TABLE|0|1
+005070|observationIdentifier|long|OBSERVATION IDENTIFIER|Numeric|0|0|30|Numeric|0|10
+006001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+006002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+006011|longitudeIncrement|double|LONGITUDE INCREMENT (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+006012|longitudeIncrement|double|LONGITUDE INCREMENT (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+006015|longitudeDisplacement|double|LONGITUDE DISPLACEMENT (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+006016|longitudeDisplacement|double|LONGITUDE DISPLACEMENT (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+006021|distance|long|DISTANCE|m|-1|0|13|m|-1|4
+006029|waveNumber|double|WAVE NUMBER|/m|1|0|22|/m|1|7
+006030|waveNumberSpectral|double|WAVE NUMBER (SPECTRAL)|rad/m|5|0|13|rad/m|5|4
+006031|columnNumber|long|COLUMN NUMBER|Numeric|0|0|12|Numeric|0|4
+006033|pixelSizeOnHorizontal2|long|PIXEL SIZE ON HORIZONTAL - 2|m|-1|0|16|m|-1|5
+006034|crossTrackCellNumber|long|CROSS-TRACK CELL NUMBER|Numeric|0|0|7|Numeric|0|3
+006035|yDimensionMaximumSize|long|MAXIMUM SIZE OF Y-DIMENSION|Numeric|0|0|12|Numeric|0|4
+006040|radiusOfConfidence|long|RADIUS OF CONFIDENCE|m|0|0|13|m|0|4
+007001|heightOfStation|long|HEIGHT OF STATION|m|0|-400|15|m|0|5
+007002|height|long|HEIGHT OR ALTITUDE|m|-1|-40|16|m|-1|5
+007003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+007004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+007005|heightIncrement|long|HEIGHT INCREMENT|m|0|-400|12|m|0|4
+007006|heightAboveStation|long|HEIGHT ABOVE STATION|m|0|0|15|m|0|5
+007007|height|long|HEIGHT|m|0|-1000|17|m|0|6
+007008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+007009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+007010|flightLevel|long|FLIGHT LEVEL|m|0|-1024|16|ft|-1|5
+007012|gridPointAltitude|double|GRID POINT ALTITUDE|m|2|-50000|20|m|2|7
+007021|elevation|double|ELEVATION|deg|2|-9000|15|deg|2|5
+007022|solarElevation|double|SOLAR ELEVATION|deg|2|-9000|15|deg|2|5
+007024|satelliteZenithAngle|double|SATELLITE ZENITH ANGLE|deg|2|-9000|15|deg|2|5
+007025|solarZenithAngle|double|SOLAR ZENITH ANGLE|deg|2|-9000|15|deg|2|5
+007026|satelliteZenithAngle|double|SATELLITE ZENITH ANGLE|deg|4|-900000|21|deg|4|7
+007030|heightOfStationGroundAboveMeanSeaLevel|double|HEIGHT OF STATION GROUND ABOVE MEAN SEA LEVEL|m|1|-4000|17|m|1|5
+007031|heightOfBarometerAboveMeanSeaLevel|double|HEIGHT OF BAROMETER ABOVE MEAN SEA LEVEL|m|1|-4000|17|m|1|5
+007032|heightOfSensorAboveLocalGroundOrDeckOfMarinePlatform|double|HEIGHT OF SENSOR ABOVE LOCAL GROUND (OR DECK OF MARINE PLATFORM)|m|2|0|16|m|2|5
+007033|heightOfSensorAboveWaterSurface|double|HEIGHT OF SENSOR ABOVE WATER SURFACE|m|1|0|12|m|1|4
+007035|zDimensionMaximumSize|long|MAXIMUM SIZE OF Z-DIMENSION|Numeric|0|0|12|Numeric|0|4
+007036|levelIndexOfZ|long|LEVEL INDEX OF Z|Numeric|0|0|12|Numeric|0|4
+007040|impactParameter|double|IMPACT PARAMETER|m|1|62000000|22|m|1|8
+007061|depthBelowLandSurface|double|DEPTH BELOW LAND SURFACE|m|2|0|14|m|2|5
+007062|depthBelowWaterSurface|double|DEPTH BELOW SEA/WATER SURFACE|m|1|0|17|m|1|6
+007063|depthBelowWaterSurface|double|DEPTH BELOW SEA/WATER SURFACE (CM)|m|2|0|20|m|2|7
+007064|representativeHeightOfSensorAboveStation|long|REPRESENTATIVE HEIGHT OF SENSOR ABOVE STATION|m|0|0|4|m|0|2
+007065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+007070|drogueDepth|long|DROGUE DEPTH|m|0|0|10|m|0|4
+007071|height|double|HEIGHT (HIGH RESOLUTION)|m|3|-10000000|26|m|3|8
+008001|verticalSoundingSignificance|flag|VERTICAL SOUNDING SIGNIFICANCE|FLAG TABLE|0|0|7|FLAG TABLE|0|3
+008002|verticalSignificanceSurfaceObservations|table|VERTICAL SIGNIFICANCE (SURFACE OBSERVATIONS)|CODE TABLE|0|0|6|CODE TABLE|0|2
+008003|verticalSignificanceSatelliteObservations|table|VERTICAL SIGNIFICANCE (SATELLITE OBSERVATIONS)|CODE TABLE|0|0|6|CODE TABLE|0|2
+008004|phaseOfAircraftFlight|table|PHASE OF AIRCRAFT FLIGHT|CODE TABLE|0|0|3|CODE TABLE|0|1
+008005|meteorologicalAttributeSignificance|table|METEOROLOGICAL ATTRIBUTE SIGNIFICANCE|CODE TABLE|0|0|4|CODE TABLE|0|2
+008006|ozoneVerticalSoundingSignificance|flag|OZONE VERTICAL SOUNDING SIGNIFICANCE|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+008007|dimensionalSignificance|table|DIMENSIONAL SIGNIFICANCE|CODE TABLE|0|0|4|CODE TABLE|0|2
+008008|radiationVerticalSoundingSignificance|flag|RADIATION VERTICAL SOUNDING SIGNIFICANCE|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+008009|detailedPhaseOfFlight|table|DETAILED PHASE OF FLIGHT|CODE TABLE|0|0|4|CODE TABLE|0|2
+008010|surfaceQualifierForTemperatureData|table|SURFACE QUALIFIER (FOR TEMPERATURE DATA)|CODE TABLE|0|0|5|CODE TABLE|0|2
+008011|meteorologicalFeature|table|METEOROLOGICAL FEATURE|CODE TABLE|0|0|6|CODE TABLE|0|2
+008012|landOrSeaQualifier|table|LAND/SEA QUALIFIER|CODE TABLE|0|0|2|CODE TABLE|0|1
+008013|dayOrNightQualifier|table|DAY/NIGHT QUALIFIER|CODE TABLE|0|0|2|CODE TABLE|0|1
+008014|qualifierForRunwayVisualRange|table|QUALIFIER FOR RUNWAY VISUAL RANGE|CODE TABLE|0|0|4|CODE TABLE|0|2
+008015|significantQualifierForSensor|table|SIGNIFICANT QUALIFIER FOR SENSOR|CODE TABLE|0|0|3|CODE TABLE|0|1
+008016|changeQualifierOfATrendTypeForecastOrAnAerodromeForecast|table|CHANGE QUALIFIER OF A TREND-TYPE FORECAST OR AN AERODROME FORECAST|CODE TABLE|0|0|3|CODE TABLE|0|1
+008017|qualifierOfTimeWhenForecastChangeExpected|table|QUALIFIER OF THE TIME WHEN THE FORECAST CHANGE IS EXPECTED|CODE TABLE|0|0|2|CODE TABLE|0|1
+008018|seawindsLandOrIceSurfaceType|flag|SEAWINDS LAND/ICE SURFACE TYPE|FLAG TABLE|0|0|17|FLAG TABLE|0|6
+008019|qualifierForFollowingCentreIdentifier|table|QUALIFIER FOR FOLLOWING CENTRE IDENTIFIER|CODE TABLE|0|0|4|CODE TABLE|0|2
+008020|totalNumberOfMissingEntitiesWithRespectToAccumulationOrAverage|long|TOTAL NUMBER OF MISSING ENTITIES (WITH RESPECT TO ACCUMULATION OR AVERAGE)|Numeric|0|0|16|Numeric|0|5
+008021|timeSignificance|table|TIME SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2
+008022|totalNumberWithRespectToAccumulationOrAverage|long|TOTAL NUMBER (WITH RESPECT TO ACCUMULATION OR AVERAGE)|Numeric|0|0|16|Numeric|0|5
+008023|firstOrderStatistics|table|FIRST-ORDER STATISTICS|CODE TABLE|0|0|6|CODE TABLE|0|2
+008024|differenceStatistics|table|DIFFERENCE STATISTICS|CODE TABLE|0|0|6|CODE TABLE|0|2
+008025|timeDifferenceQualifier|table|TIME DIFFERENCE QUALIFIER|CODE TABLE|0|0|4|CODE TABLE|0|2
+008026|matrixSignificance|table|MATRIX SIGNIFICANCE|CODE TABLE|0|0|6|CODE TABLE|0|2
+008029|surfaceType|table|SURFACE TYPE|CODE TABLE|0|0|8|CODE TABLE|0|3
+008030|manualOnCodesVolumeI1SectionCCodeTableFromWhichDataAreDerived|long|MANUAL ON CODES (VOLUME I.1, SECTION C) CODE TABLE FROM WHICH DATA ARE DERIVED|Numeric|0|0|13|Numeric|0|4
+008031|dataCategoryCrexTableA|long|DATA CATEGORY - CREX TABLE A|Numeric|0|0|8|Numeric|0|3
+008032|statusOfOperation|table|STATUS OF OPERATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+008033|methodOfDerivationOfPercentageConfidence|table|METHOD OF DERIVATION OF PERCENTAGE CONFIDENCE|CODE TABLE|0|0|7|CODE TABLE|0|3
+008034|temperatureOrSalinityMeasurementQualifier|table|TEMPERATURE/SALINITY MEASUREMENT QUALIFIER|CODE TABLE|0|0|4|CODE TABLE|0|2
+008035|monitoringExerciseType|table|TYPE OF MONITORING EXERCISE|CODE TABLE|0|0|3|CODE TABLE|0|1
+008036|typeOfCentreOrStationPerformingMonitoring|table|TYPE OF CENTRE OR STATION PERFORMING MONITORING|CODE TABLE|0|0|3|CODE TABLE|0|1
+008039|timeSignificanceAviationForecast|table|TIME SIGNIFICANCE (AVIATION FORECAST)|CODE TABLE|0|0|6|CODE TABLE|0|2
+008040|flightLevelSignificance|table|FLIGHT LEVEL SIGNIFICANCE|CODE TABLE|0|0|6|CODE TABLE|0|2
+008041|dataSignificance|table|DATA SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2
+008042|extendedVerticalSoundingSignificance|flag|EXTENDED VERTICAL SOUNDING SIGNIFICANCE|FLAG TABLE|0|0|18|FLAG TABLE|0|6
+008043|atmosphericChemical|table|ATMOSPHERIC CHEMICAL OR PHYSICAL CONSTITUENT TYPE|CODE TABLE|0|0|8|CODE TABLE|0|3
+008044|casRegistryNumber|string|CAS REGISTRY NUMBER|CCITT IA5|0|0|88|Character|0|11
+008046|atmosphericChemical|table|ATMOSPHERIC CHEMICAL OR PHYSICAL CONSTITUENT TYPE|Common CODE TABLE C-14|0|0|16|Common CODE TABLE C-14|0|5
+008049|numberOfObservations|long|NUMBER OF OBSERVATIONS|Numeric|0|0|8|Numeric|0|3
+008050|qualifierForNumberOfMissingValuesInCalculationOfStatistic|table|QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATISTIC|CODE TABLE|0|0|4|CODE TABLE|0|2
+008051|qualifierForNumberOfMissingValuesInCalculationOfStatistic|table|QUALIFIER FOR NUMBER OF MISSING VALUES IN CALCULATION OF STATISTIC|CODE TABLE|0|0|3|CODE TABLE|0|1
+008052|conditionForWhichNumberOfDaysOfOccurrenceFollows|table|CONDITION FOR WHICH NUMBER OF DAYS OF OCCURRENCE FOLLOWS|CODE TABLE|0|0|5|CODE TABLE|0|2
+008053|dayOfOccurrenceQualifier|table|DAY OF OCCURRENCE QUALIFIER|CODE TABLE|0|0|2|CODE TABLE|0|1
+008054|qualifierForWindSpeedOrWindGusts|table|QUALIFIER FOR WIND SPEED OR WIND GUSTS|CODE TABLE|0|0|3|CODE TABLE|0|1
+008060|sampleScanningModeSignificance|table|SAMPLE SCANNING MODE SIGNIFICANCE|CODE TABLE|0|0|4|CODE TABLE|0|2
+008065|sunGlintIndicator|table|SUN-GLINT INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1
+008066|semiTransparencyIndicator|table|SEMI-TRANSPARENCY INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1
+008070|tovsOrAtovsProductQualifier|table|TOVS/ATOVS PRODUCT QUALIFIER|CODE TABLE|0|0|4|CODE TABLE|0|2
+008072|pixelType|table|PIXEL(S) TYPE|CODE TABLE|0|0|3|CODE TABLE|0|1
+008074|altimeterEchoType|table|ALTIMETER ECHO TYPE|CODE TABLE|0|0|2|CODE TABLE|0|1
+008075|orbitQualifier|table|ASCENDING/DESCENDING ORBIT QUALIFIER|CODE TABLE|0|0|2|CODE TABLE|0|1
+008076|band|table|TYPE OF BAND|CODE TABLE|0|0|6|CODE TABLE|0|2
+008077|radiometerSensedSurfaceType|table|RADIOMETER SENSED SURFACE TYPE|CODE TABLE|0|0|7|CODE TABLE|0|3
+008079|productStatus|table|PRODUCT STATUS|CODE TABLE|0|0|4|CODE TABLE|0|2
+008080|qualifierForGtsppQualityFlag|table|QUALIFIER FOR GTSPP QUALITY FLAG|CODE TABLE|0|0|6|CODE TABLE|0|2
+008081|equipmentType|table|TYPE OF EQUIPMENT|CODE TABLE|0|0|6|CODE TABLE|0|2
+008082|modificationOfSensorHeightToAnotherValue|table|MODIFICATION OF SENSOR HEIGHT TO ANOTHER VALUE|CODE TABLE|0|0|3|CODE TABLE|0|1
+008083|nominalValueIndicator|flag|NOMINAL VALUE INDICATOR|FLAG TABLE|0|0|15|FLAG TABLE|0|5
+008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
+008086|verticalSignificanceForNwp|flag|VERTICAL SIGNIFICANCE FOR NWP|FLAG TABLE|0|0|12|FLAG TABLE|0|4
+008087|cornerPositionOfObservation|table|CORNER POSITION OF OBSERVATION|CODE TABLE|0|0|3|CODE TABLE|0|1
+008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE OF FOLLOWING SIGNIFICANDS|Numeric|0|-127|8|Numeric|0|3
+008091|coordinatesSignificance|table|COORDINATES SIGNIFICANCE|CODE TABLE|0|0|8|CODE TABLE|0|3
+010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
+010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
+010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
+010032|satelliteDistanceToEarthCentre|double|SATELLITE DISTANCE TO EARTH'S CENTRE|m|1|0|27|m|2|9
+010033|altitudePlatformToEllipsoid|double|ALTITUDE (PLATFORM TO ELLIPSOID)|m|1|0|27|m|2|9
+010034|earthRadius|double|EARTH'S RADIUS|m|1|0|27|m|2|9
+010035|earthLocalRadiusOfCurvature|double|EARTH'S LOCAL RADIUS OF CURVATURE|m|1|62000000|22|m|1|8
+010036|geoidUndulation|double|GEOID UNDULATION|m|2|-15000|15|m|2|6
+010040|numberOfRetrievedLayers|long|NUMBER OF RETRIEVED LAYERS|Numeric|0|0|10|Numeric|0|4
+010050|standardDeviationAltitude|double|STANDARD DEVIATION ALTITUDE|m|2|0|16|m|2|5
+010051|pressureReducedToMeanSeaLevel|long|PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
+010052|altimeterSettingQnh|long|ALTIMETER SETTING (QNH)|Pa|-1|0|14|Pa|-1|5
+010053|globalNavigationSatelliteSystemAltitude|long|GLOBAL NAVIGATION SATELLITE SYSTEM ALTITUDE|m|0|-1000|17|m|0|5
+010060|pressureChange|long|PRESSURE CHANGE|Pa|-1|-1024|11|Pa|-1|4
+010061|3HourPressureChange|long|3-HOUR PRESSURE CHANGE|Pa|-1|-500|10|Pa|-1|4
+010062|24HourPressureChange|long|24-HOUR PRESSURE CHANGE|Pa|-1|-1000|11|Pa|-1|4
+010063|characteristicOfPressureTendency|table|CHARACTERISTIC OF PRESSURE TENDENCY|CODE TABLE|0|0|4|CODE TABLE|0|2
+010064|sigmetCruisingLevel|table|SIGMET CRUISING LEVEL|CODE TABLE|0|0|3|CODE TABLE|0|1
+010070|indicatedAircraftAltitude|long|INDICATED AIRCRAFT ALTITUDE|m|0|-400|16|m|0|5
+010079|offNadirAngleOfTheSatelliteFromPlatformData|double|OFF-NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA|deg|4|0|16|deg|4|5
+010080|viewingZenithAngle|double|VIEWING ZENITH ANGLE|deg|2|-9000|15|deg|2|5
+010081|cogAltitudeAboveReferenceEllipsoid|double|ALTITUDE OF COG ABOVE REFERENCE ELLIPSOID|m|3|0|31|m|3|10
+010082|instantaneousAltitudeRate|double|INSTANTANEOUS ALTITUDE RATE|m/s|3|-65536|17|m/s|3|6
+010083|squaredOffNadirAngleOfSatelliteFromPlatformData|double|SQUARED OFF-NADIR ANGLE OF THE SATELLITE FROM PLATFORM DATA|deg2|2|0|16|deg2|2|5
+010084|squaredOffNadirAngleOfSatelliteFromWaveformData|double|SQUARED OFF-NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA|deg2|2|0|16|deg2|2|5
+010085|meanSeaSurfaceHeight|double|MEAN SEA-SURFACE HEIGHT|m|3|-131072|18|m|3|6
+010086|geoidHeight|double|GEOID'S HEIGHT|m|3|-131072|18|m|3|6
+010087|oceanDepthOrLandElevation|double|OCEAN DEPTH/LAND ELEVATION|m|1|-131072|18|m|1|6
+010088|totalGeocentricOceanTideHeightSolution1|double|TOTAL GEOCENTRIC OCEAN TIDE HEIGHT (SOLUTION 1)|m|3|-32768|16|m|3|5
+010089|totalGeocentricOceanTideHeightSolution2|double|TOTAL GEOCENTRIC OCEAN TIDE HEIGHT (SOLUTION 2)|m|3|-32768|16|m|3|5
+010090|longPeriodTideHeight|double|LONG PERIOD TIDE HEIGHT|m|3|-32768|16|m|3|5
+010091|tidalLoadingHeight|double|TIDAL LOADING HEIGHT|m|3|-32768|16|m|3|5
+010092|solidEarthTideHeight|double|SOLID EARTH TIDE HEIGHT|m|3|-32768|16|m|3|5
+010093|geocentricPoleTideHeight|double|GEOCENTRIC POLE TIDE HEIGHT|m|3|-32768|16|m|3|5
+010095|heightOfAtmosphere|long|HEIGHT OF ATMOSPHERE USED|m|0|0|16|m|0|5
+010096|meanDynamicTopography|double|MEAN DYNAMIC TOPOGRAPHY|m|3|-131072|18|m|3|6
+010097|meanSeaSurfaceHeightFromAltimeterOnly|double|MEAN SEA-SURFACE HEIGHT FROM ALTIMETER ONLY|m|3|-131072|18|m|3|6
+010098|loadingTideHeightGeocentricOceanTideSolution1|double|LOADING TIDE HEIGHT GEOCENTRIC OCEAN TIDE SOLUTION 1|m|4|-2000|12|m|4|4
+010099|loadingTideHeightGeocentricOceanTideSolution2|double|LOADING TIDE HEIGHT GEOCENTRIC OCEAN TIDE SOLUTION 2|m|4|-2000|12|m|4|4
+010100|nonEquilibriumLongPeriodTideHeight|double|NON-EQUILIBRIUM LONG PERIOD TIDE HEIGHT|m|4|-2000|12|m|4|4
+010101|squaredOffNadirAngleOfSatelliteFromWaveformData|double|SQUARED OFF-NADIR ANGLE OF THE SATELLITE FROM WAVEFORM DATA|deg2|2|-32768|16|deg2|2|5
+010102|seaSurfaceHeightAnomaly|double|SEA-SURFACE HEIGHT ANOMALY|m|3|-32768|16|m|3|5
+011001|windDirection|long|WIND DIRECTION|deg|0|0|9|deg|0|3
+011002|windSpeed|double|WIND SPEED|m/s|1|0|12|m/s|1|4
+011003|u|double|U-COMPONENT|m/s|1|-4096|13|m/s|1|4
+011004|v|double|V-COMPONENT|m/s|1|-4096|13|m/s|1|4
+011005|w|double|W-COMPONENT|Pa/s|1|-512|10|Pa/s|1|4
+011006|w|double|W-COMPONENT|m/s|2|-4096|13|m/s|2|4
+011010|windDirectionAssociatedWithWindSpeedWhichFollows|long|WIND DIRECTION ASSOCIATED WITH WIND SPEED WHICH FOLLOWS|deg|0|0|9|deg|0|3
+011011|windDirectionAt10M|long|WIND DIRECTION AT 10 M|deg|0|0|9|deg|0|3
+011012|windSpeedAt10M|double|WIND SPEED AT 10 M|m/s|1|0|12|m/s|1|4
+011013|windDirectionAt5M|long|WIND DIRECTION AT 5 M|deg|0|0|9|deg|0|3
+011014|windSpeedAt5M|double|WIND SPEED AT 5 M|m/s|1|0|12|m/s|1|4
+011016|extremeCounterclockwiseWindDirectionOfAVariableWind|long|EXTREME COUNTERCLOCKWISE WIND DIRECTION OF A VARIABLE WIND|deg|0|0|9|deg|0|3
+011017|extremeClockwiseWindDirectionOfAVariableWind|long|EXTREME CLOCKWISE WIND DIRECTION OF A VARIABLE WIND|deg|0|0|9|deg|0|3
+011019|steadinessOfWind|long|STEADINESS OF WIND|%|0|0|7|%|0|3
+011021|relativeVorticity|double|RELATIVE VORTICITY|/s|9|-65536|17|/s|9|6
+011022|divergence|double|DIVERGENCE|/s|9|-65536|17|/s|9|6
+011023|velocityPotential|long|VELOCITY POTENTIAL|m2/s|-2|-65536|17|m2/s|-2|6
+011030|extendedDegreeOfTurbulence|table|EXTENDED DEGREE OF TURBULENCE|CODE TABLE|0|0|6|CODE TABLE|0|2
+011031|degreeOfTurbulence|table|DEGREE OF TURBULENCE|CODE TABLE|0|0|4|CODE TABLE|0|2
+011032|heightOfBaseOfTurbulence|long|HEIGHT OF BASE OF TURBULENCE|m|-1|-40|16|m|-1|5
+011033|heightOfTopOfTurbulence|long|HEIGHT OF TOP OF TURBULENCE|m|-1|-40|16|m|-1|5
+011034|verticalGustVelocity|double|VERTICAL GUST VELOCITY|m/s|1|-1024|11|m/s|1|4
+011035|verticalGustAcceleration|double|VERTICAL GUST ACCELERATION|m s-2|2|-8192|14|m s-2|2|5
+011036|maximumDerivedEquivalentVerticalGustSpeed|double|MAXIMUM DERIVED EQUIVALENT VERTICAL GUST SPEED|m/s|1|0|10|m/s|1|4
+011037|turbulenceIndex|table|TURBULENCE INDEX|CODE TABLE|0|0|6|CODE TABLE|0|2
+011038|timeOfOccurrenceOfPeakEddyDissipationRate|table|TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE|CODE TABLE|0|0|5|CODE TABLE|0|2
+011039|extendedTimeOfOccurrenceOfPeakEddyDissipationRate|table|EXTENDED TIME OF OCCURRENCE OF PEAK EDDY DISSIPATION RATE|CODE TABLE|0|0|6|CODE TABLE|0|2
+011040|maximumWindSpeedMeanWind|double|MAXIMUM WIND SPEED (MEAN WIND)|m/s|1|0|12|m/s|1|4
+011041|maximumWindGustSpeed|double|MAXIMUM WIND GUST SPEED|m/s|1|0|12|m/s|1|4
+011042|maximumWindSpeed10MinuteMeanWind|double|MAXIMUM WIND SPEED (10-MINUTE MEAN WIND)|m/s|1|0|12|m/s|1|4
+011043|maximumWindGustDirection|long|MAXIMUM WIND GUST DIRECTION|deg|0|0|9|deg|0|3
+011044|meanWindDirectionForSurfaceTo1500M|long|MEAN WIND DIRECTION FOR SURFACE - 1 500 M (5 000 FEET)|deg|0|0|9|deg|0|3
+011045|meanWindSpeedForSurfaceTo1500M|double|MEAN WIND SPEED FOR SURFACE - 1 500 M (5 000 FEET)|m/s|1|0|12|m/s|1|4
+011046|maximumInstantaneousWindSpeed|double|MAXIMUM INSTANTANEOUS WIND SPEED|m/s|1|0|12|m/s|1|4
+011047|maximumInstantaneousWindSpeedOver10Minutes|double|MAXIMUM INSTANTANEOUS WIND SPEED OVER 10 MINUTES|m/s|1|0|12|m/s|1|4
+011049|windDirectionStandardDeviation|long|STANDARD DEVIATION OF WIND DIRECTION|deg|0|0|9|deg|0|3
+011050|standardDeviationOfHorizontalWindSpeed|double|STANDARD DEVIATION OF HORIZONTAL WIND SPEED|m/s|1|0|12|m/s|1|4
+011051|standardDeviationOfVerticalWindSpeed|double|STANDARD DEVIATION OF VERTICAL WIND SPEED|m/s|1|0|8|m/s|1|3
+011052|formalUncertaintyInWindSpeed|double|FORMAL UNCERTAINTY IN WIND SPEED|m/s|2|0|13|m/s|2|5
+011053|formalUncertaintyInWindDirection|double|FORMAL UNCERTAINTY IN WIND DIRECTION|deg|2|0|15|deg|2|5
+011054|meanWindDirectionFor1500To3000M|long|MEAN WIND DIRECTION FOR 1 500 - 3 000 M|deg|0|0|9|deg|0|3
+011055|meanWindSpeedFor1500To3000M|double|MEAN WIND SPEED FOR 1 500 - 3 000 M|m/s|1|0|12|m/s|1|4
+011061|absoluteWindShearIn1KmLayerBelow|double|ABSOLUTE WIND SHEAR IN 1 KM LAYER BELOW|m/s|1|0|12|m/s|1|4
+011062|absoluteWindShearIn1KmLayerAbove|double|ABSOLUTE WIND SHEAR IN 1 KM LAYER ABOVE|m/s|1|0|12|m/s|1|4
+011070|designatorOfRunwayAffectedByWindShearIncludingAll|string|DESIGNATOR OF THE RUNWAY AFFECTED BY WIND SHEAR (INCLUDING ALL)|CCITT IA5|0|0|32|Character|0|4
+011071|turbulentVerticalMomentumFlux|double|TURBULENT VERTICAL MOMENTUM FLUX|m2 s-2|3|-128|14|m2 s-2|3|5
+011072|turbulentVerticalBuoyancyFlux|double|TURBULENT VERTICAL BUOYANCY FLUX|K m s-1|3|-128|11|K m s-1|3|4
+011073|turbulentKineticEnergy|double|TURBULENT KINETIC ENERGY|m2 s-2|2|-1024|13|m2 s-2|2|4
+011074|dissipationEnergy|double|DISSIPATION ENERGY|m2 s-2|2|-1024|10|m2 s-2|2|4
+011075|meanTurbulenceIntensityEddyDissipationRate|double|MEAN TURBULENCE INTENSITY (EDDY DISSIPATION RATE)|m2/3 s-1|2|0|8|m2/3 s-1|2|3
+011076|peakTurbulenceIntensityEddyDissipationRate|double|PEAK TURBULENCE INTENSITY (EDDY DISSIPATION RATE)|m2/3 s-1|2|0|8|m2/3 s-1|2|3
+011077|reportingIntervalOrAveragingTimeForEddyDissipationRate|long|REPORTING INTERVAL OR AVERAGING TIME FOR EDDY DISSIPATION RATE|s|0|0|12|s|0|4
+011081|modelWindDirectionAt10M|double|MODEL WIND DIRECTION AT 10 M|deg|2|0|16|deg|2|5
+011082|modelWindSpeedAt10M|double|MODEL WIND SPEED AT 10 M|m/s|2|0|14|m/s|2|4
+011083|windSpeed|long|WIND SPEED|km/h|0|0|9|km/h|0|3
+011084|windSpeed|long|WIND SPEED|kt|0|0|8|kt|0|3
+011085|maximumWindGustSpeed|long|MAXIMUM WIND GUST SPEED|km/h|0|0|9|km/h|0|3
+011086|maximumWindGustSpeed|long|MAXIMUM WIND GUST SPEED|kt|0|0|8|kt|0|3
+011095|u|double|U-COMPONENT OF THE MODEL WIND VECTOR|m/s|1|-4096|13|m/s|1|4
+011096|v|double|V-COMPONENT OF THE MODEL WIND VECTOR|m/s|1|-4096|13|m/s|1|4
+011097|windSpeedFromAltimeter|double|WIND SPEED FROM ALTIMETER|m/s|2|0|12|m/s|2|4
+011098|windSpeedFromRadiometer|double|WIND SPEED FROM RADIOMETER|m/s|2|0|12|m/s|2|4
+011100|aircraftTrueAirspeed|double|AIRCRAFT TRUE AIRSPEED|m/s|1|0|12|m/s|1|4
+011101|aircraftGroundSpeedUComponent|double|AIRCRAFT GROUND SPEED U-COMPONENT|m/s|1|-4096|13|m/s|1|4
+011102|aircraftGroundSpeedVComponent|double|AIRCRAFT GROUND SPEED V-COMPONENT|m/s|1|-4096|13|m/s|1|4
+011103|aircraftGroundSpeedWComponent|double|AIRCRAFT GROUND SPEED W-COMPONENT|m/s|1|-512|10|m/s|1|3
+011104|aircraftTrueHeading|long|AIRCRAFT TRUE HEADING|deg|0|0|9|deg|0|3
+011105|edrAlgorithmVersion|long|EDR ALGORITHM VERSION|Numeric|0|0|6|Numeric|0|2
+011106|runningMinimumConfidence|long|RUNNING MINIMUM CONFIDENCE|Numeric|1|0|4|Numeric|1|2
+011107|maximumNumberBadInputs|long|MAXIMUM NUMBER BAD INPUTS|Numeric|0|0|5|Numeric|0|2
+011108|peakLocation|long|PEAK LOCATION|Numeric|1|0|4|Numeric|1|2
+011109|numberOfGoodEdr|long|NUMBER OF GOOD EDR|Numeric|0|0|4|Numeric|0|2
+012001|airTemperature|double|TEMPERATURE/AIR TEMPERATURE|K|1|0|12|C|1|3
+012002|wetBulbTemperature|double|WET-BULB TEMPERATURE|K|1|0|12|C|1|3
+012003|dewpointTemperature|double|DEWPOINT TEMPERATURE|K|1|0|12|C|1|3
+012004|airTemperatureAt2M|double|AIR TEMPERATURE AT 2 M|K|1|0|12|C|1|3
+012005|wetBulbTemperatureAt2M|double|WET-BULB TEMPERATURE AT 2 M|K|1|0|12|C|1|3
+012006|dewpointTemperatureAt2M|double|DEWPOINT TEMPERATURE AT 2 M|K|1|0|12|C|1|3
+012007|virtualTemperature|double|VIRTUAL TEMPERATURE|K|1|0|12|C|1|3
+012011|maximumTemperatureAtHeightAndOverPeriodSpecified|double|MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED|K|1|0|12|C|1|3
+012012|minimumTemperatureAtHeightAndOverPeriodSpecified|double|MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED|K|1|0|12|C|1|3
+012013|groundMinimumTemperaturePast12Hours|double|GROUND MINIMUM TEMPERATURE, PAST 12 HOURS|K|1|0|12|C|1|3
+012014|maximumTemperatureAt2MPast12Hours|double|MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS|K|1|0|12|C|1|3
+012015|minimumTemperatureAt2MPast12Hours|double|MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS|K|1|0|12|C|1|3
+012016|maximumTemperatureAt2MPast24Hours|double|MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS|K|1|0|12|C|1|3
+012017|minimumTemperatureAt2MPast24Hours|double|MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS|K|1|0|12|C|1|3
+012021|maximumTemperatureAt2M|double|MAXIMUM TEMPERATURE AT 2 M|K|2|0|16|C|2|4
+012022|minimumTemperatureAt2M|double|MINIMUM TEMPERATURE AT 2 M|K|2|0|16|C|2|4
+012023|temperature|long|TEMPERATURE|C|0|-99|8|C|0|2
+012024|dewpointTemperature|long|DEWPOINT TEMPERATURE|C|0|-99|8|C|0|2
+012030|soilTemperature|double|SOIL TEMPERATURE|K|1|0|12|C|1|3
+012049|temperatureChangeOverSpecifiedPeriod|long|TEMPERATURE CHANGE OVER SPECIFIED PERIOD|K|0|-30|6|C|0|2
+012051|standardDeviationTemperature|double|STANDARD DEVIATION TEMPERATURE|K|1|0|10|C|1|3
+012052|highestDailyMeanTemperature|double|HIGHEST DAILY MEAN TEMPERATURE|K|1|0|12|C|1|3
+012053|lowestDailyMeanTemperature|double|LOWEST DAILY MEAN TEMPERATURE|K|1|0|12|C|1|3
+012060|awsEnclosureInternalTemperature|double|AWS ENCLOSURE INTERNAL TEMPERATURE|K|1|0|12|C|1|3
+012061|skinTemperature|double|SKIN TEMPERATURE|K|1|0|12|C|1|3
+012062|equivalentBlackBodyTemperature|double|EQUIVALENT BLACK BODY TEMPERATURE|K|1|0|12|C|1|3
+012063|brightnessTemperature|double|BRIGHTNESS TEMPERATURE|K|1|0|12|C|1|3
+012064|instrumentTemperature|double|INSTRUMENT TEMPERATURE|K|1|0|12|K|1|4
+012065|standardDeviationBrightnessTemperature|double|STANDARD DEVIATION BRIGHTNESS TEMPERATURE|K|1|0|12|K|1|4
+012066|antennaTemperature|double|ANTENNA TEMPERATURE|K|2|0|16|C|2|5
+012070|warmLoadTemperature|double|WARM LOAD TEMPERATURE|K|2|0|16|K|2|5
+012071|coldestClusterTemperature|double|COLDEST CLUSTER TEMPERATURE|K|1|0|12|K|1|4
+012072|radiance|double|RADIANCE|W m-2 sr-1|6|0|31|W m-2 sr-1|6|9
+012075|spectralRadiance|long|SPECTRAL RADIANCE|W m-3 sr-1|-3|0|16|W m-3 sr-1|-3|5
+012076|radiance|double|RADIANCE|W m-2 sr-1|3|0|16|W m-2 sr-1|3|5
+012080|brightnessTemperatureRealPart|double|BRIGHTNESS TEMPERATURE REAL PART|K|2|-10000|16|K|2|5
+012081|brightnessTemperatureImaginaryPart|double|BRIGHTNESS TEMPERATURE IMAGINARY PART|K|2|-10000|16|K|2|5
+012082|pixelRadiometricAccuracy|double|PIXEL RADIOMETRIC ACCURACY|K|2|0|12|K|2|4
+012101|airTemperature|double|TEMPERATURE/AIR TEMPERATURE|K|2|0|16|C|2|4
+012102|wetBulbTemperature|double|WET-BULB TEMPERATURE|K|2|0|16|C|2|4
+012103|dewpointTemperature|double|DEWPOINT TEMPERATURE|K|2|0|16|C|2|4
+012104|airTemperatureAt2M|double|AIR TEMPERATURE AT 2 M|K|2|0|16|C|2|4
+012105|webBulbTemperatureAt2M|double|WEB-BULB TEMPERATURE AT 2 M|K|2|0|16|C|2|4
+012106|dewpointTemperatureAt2M|double|DEWPOINT TEMPERATURE AT 2 M|K|2|0|16|C|2|4
+012107|virtualTemperature|double|VIRTUAL TEMPERATURE|K|2|0|16|C|2|4
+012111|maximumTemperatureAtHeightAndOverPeriodSpecified|double|MAXIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED|K|2|0|16|C|2|4
+012112|minimumTemperatureAtHeightAndOverPeriodSpecified|double|MINIMUM TEMPERATURE, AT HEIGHT AND OVER PERIOD SPECIFIED|K|2|0|16|C|2|4
+012113|groundMinimumTemperaturePast12Hours|double|GROUND MINIMUM TEMPERATURE, PAST 12 HOURS|K|2|0|16|C|2|4
+012114|maximumTemperatureAt2MPast12Hours|double|MAXIMUM TEMPERATURE AT 2 M, PAST 12 HOURS|K|2|0|16|C|2|4
+012115|minimumTemperatureAt2MPast12Hours|double|MINIMUM TEMPERATURE AT 2 M, PAST 12 HOURS|K|2|0|16|C|2|4
+012116|maximumTemperatureAt2MPast24Hours|double|MAXIMUM TEMPERATURE AT 2 M, PAST 24 HOURS|K|2|0|16|C|2|4
+012117|minimumTemperatureAt2MPast24Hours|double|MINIMUM TEMPERATURE AT 2 M, PAST 24 HOURS|K|2|0|16|C|2|4
+012118|maximumTemperatureAtHeightSpecifiedPast24Hours|double|MAXIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS|K|2|0|16|C|2|4
+012119|minimumTemperatureAtHeightSpecifiedPast24Hours|double|MINIMUM TEMPERATURE AT HEIGHT SPECIFIED, PAST 24 HOURS|K|2|0|16|C|2|4
+012120|groundTemperature|double|GROUND TEMPERATURE|K|2|0|16|C|2|4
+012121|groundMinimumTemperature|double|GROUND MINIMUM TEMPERATURE|K|2|0|16|C|2|4
+012122|groundMinimumTemperatureOfPrecedingNight|double|GROUND MINIMUM TEMPERATURE OF THE PRECEDING NIGHT|K|2|0|16|C|2|4
+012128|roadSurfaceTemperature|double|ROAD SURFACE TEMPERATURE|K|2|0|16|C|2|5
+012129|roadSubSurfaceTemperature|double|ROAD SUB-SURFACE TEMPERATURE|K|2|0|16|C|2|5
+012130|soilTemperature|double|SOIL TEMPERATURE|K|2|0|16|C|2|4
+012131|snowTemperature|double|SNOW TEMPERATURE|K|2|0|16|C|2|4
+012132|iceSurfaceTemperature|double|ICE SURFACE TEMPERATURE|K|2|0|16|C|2|4
+012151|dailyMeanTemperatureStandardDeviation|double|STANDARD DEVIATION OF DAILY MEAN TEMPERATURE|K|2|0|12|C|2|4
+012152|highestDailyMeanTemperature|double|HIGHEST DAILY MEAN TEMPERATURE|K|2|0|16|C|2|4
+012153|lowestDailyMeanTemperature|double|LOWEST DAILY MEAN TEMPERATURE|K|2|0|16|C|2|4
+012158|noiseEquivalentDeltaTemperatureWhileViewingColdTarget|double|NOISE-EQUIVALENT DELTA TEMPERATURE WHILE VIEWING COLD TARGET|K|2|0|12|C|2|4
+012159|noiseEquivalentDeltaTemperatureWhileViewingWarmTarget|double|NOISE-EQUIVALENT DELTA TEMPERATURE WHILE VIEWING WARM TARGET|K|2|0|12|C|2|4
+012161|skinTemperature|double|SKIN TEMPERATURE|K|2|0|16|C|2|4
+012162|equivalentBlackBodyTemperature|double|EQUIVALENT BLACK BODY TEMPERATURE|K|2|0|16|C|2|4
+012163|brightnessTemperature|double|BRIGHTNESS TEMPERATURE|K|2|0|16|C|2|4
+012164|instrumentTemperature|double|INSTRUMENT TEMPERATURE|K|2|0|16|K|2|5
+012165|directSunBrightnessTemperature|long|DIRECT SUN BRIGHTNESS TEMPERATURE|K|0|0|23|K|0|7
+012166|snapshotAccuracy|double|SNAPSHOT ACCURACY|K|1|-4000|13|K|1|4
+012167|radiometricAccuracyPurePolarization|double|RADIOMETRIC ACCURACY (PURE POLARIZATION)|K|1|0|9|K|1|3
+012168|radiometricAccuracyCrossPolarization|double|RADIOMETRIC ACCURACY (CROSS POLARIZATION)|K|1|0|9|K|1|3
+012171|coldestClusterTemperature|double|COLDEST CLUSTER TEMPERATURE|K|2|0|16|K|2|5
+012180|averaged12MicronBtForAllClearPixelsAtNadir|double|AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS AT NADIR|K|2|0|16|K|2|5
+012181|averaged11MicronBtForAllClearPixelsAtNadir|double|AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS AT NADIR|K|2|0|16|K|2|5
+012182|averaged37MicronBtForAllClearPixelsAtNadir|double|AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS AT NADIR|K|2|0|16|K|2|5
+012183|averaged12MicronBtForAllClearPixelsForwardView|double|AVERAGED 12 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW|K|2|0|16|K|2|5
+012184|averaged11MicronBtForAllClearPixelsForwardView|double|AVERAGED 11 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW|K|2|0|16|K|2|5
+012185|averaged37MicronBtForAllClearPixelsForwardView|double|AVERAGED 3.7 MICRON BT FOR ALL CLEAR PIXELS, FORWARD VIEW|K|2|0|16|K|2|5
+012186|meanNadirSeaSurfaceTemperature|double|MEAN NADIR SEA-SURFACE TEMPERATURE|K|2|0|16|K|2|5
+012187|meanDualViewSeaSurfaceTemperature|double|MEAN DUAL VIEW SEA-SURFACE TEMPERATURE|K|2|0|16|K|2|5
+012188|interpolated238GhzBrightnessTFromMwr|double|INTERPOLATED 23.8 GHZ BRIGHTNESS T FROM MWR|K|2|0|16|K|2|5
+012189|interpolated365GhzBrightnessTFromMwr|double|INTERPOLATED 36.5 GHZ BRIGHTNESS T FROM MWR|K|2|0|16|K|2|5
+013001|specificHumidity|double|SPECIFIC HUMIDITY|kg/kg|5|0|14|kg/kg|5|5
+013002|mixingRatio|double|MIXING RATIO|kg/kg|5|0|14|kg/kg|5|5
+013003|relativeHumidity|long|RELATIVE HUMIDITY|%|0|0|7|%|0|3
+013004|vapourPressure|long|VAPOUR PRESSURE|Pa|-1|0|10|Pa|-1|4
+013005|vapourDensity|double|VAPOUR DENSITY|kg m-3|3|0|7|kg m-3|3|3
+013006|mixingHeights|long|MIXING HEIGHTS|m|-1|-40|16|m|-1|5
+013007|minimumRelativeHumidity|long|MINIMUM RELATIVE HUMIDITY|%|0|0|7|%|0|3
+013008|maximumRelativeHumidity|long|MAXIMUM RELATIVE HUMIDITY|%|0|0|7|%|0|3
+013009|relativeHumidity|double|RELATIVE HUMIDITY|%|1|-1000|12|%|1|4
+013011|totalPrecipitationOrTotalWaterEquivalent|double|TOTAL PRECIPITATION/TOTAL WATER EQUIVALENT|kg m-2|1|-1|14|kg m-2|1|5
+013012|depthOfFreshSnow|double|DEPTH OF FRESH SNOW|m|2|-2|12|m|2|4
+013013|totalSnowDepth|double|TOTAL SNOW DEPTH|m|2|-2|16|m|2|5
+013014|rainfallOrWaterEquivalentOfSnowAveragedRate|double|RAINFALL/WATER EQUIVALENT OF SNOW (AVERAGED RATE)|kg m-2 s-1|4|0|12|kg m-2 s-1|4|4
+013015|snowfallAveragedRate|double|SNOWFALL (AVERAGED RATE)|m/s|7|0|12|m/s|7|4
+013016|precipitableWater|long|PRECIPITABLE WATER|kg m-2|0|0|7|kg m-2|0|3
+013019|totalPrecipitationPast1Hour|double|TOTAL PRECIPITATION PAST 1 HOUR|kg m-2|1|-1|14|kg m-2|1|4
+013020|totalPrecipitationPast3Hours|double|TOTAL PRECIPITATION PAST 3 HOURS|kg m-2|1|-1|14|kg m-2|1|5
+013021|totalPrecipitationPast6Hours|double|TOTAL PRECIPITATION PAST 6 HOURS|kg m-2|1|-1|14|kg m-2|1|5
+013022|totalPrecipitationPast12Hours|double|TOTAL PRECIPITATION PAST 12 HOURS|kg m-2|1|-1|14|kg m-2|1|5
+013023|totalPrecipitationPast24Hours|double|TOTAL PRECIPITATION PAST 24 HOURS|kg m-2|1|-1|14|kg m-2|1|5
+013031|evapotranspiration|long|EVAPOTRANSPIRATION|kg m-2|0|0|7|kg m-2|0|3
+013032|evaporation|double|EVAPORATION/EVAPOTRANSPIRATION|kg m-2|1|0|8|kg m-2|1|3
+013033|evaporation|double|EVAPORATION/EVAPOTRANSPIRATION|kg m-2|1|0|10|kg m-2|1|4
+013038|superadiabaticIndicator|table|SUPERADIABATIC INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1
+013039|terrainTypeIceOrSnow|table|TERRAIN TYPE (ICE/SNOW)|CODE TABLE|0|0|3|CODE TABLE|0|1
+013040|surfaceFlag|table|SURFACE FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2
+013041|pasquillGiffordStabilityCategory|table|PASQUILL-GIFFORD STABILITY CATEGORY|CODE TABLE|0|0|4|CODE TABLE|0|2
+013042|parcelLiftedIndexTo500Hpa|long|PARCEL LIFTED INDEX (TO 500 HPA)|K|0|-20|6|K|0|2
+013043|bestLiftedIndexTo500Hpa|long|BEST LIFTED INDEX (TO 500 HPA)|K|0|-20|6|K|0|2
+013044|kIndex|long|K INDEX|K|0|-30|8|K|0|3
+013045|koIndex|long|KO INDEX|K|0|-30|8|K|0|3
+013046|maximumBuoyancy|long|MAXIMUM BUOYANCY|K|0|-30|8|K|0|3
+013047|modifiedShowalterStabilityIndex|long|MODIFIED SHOWALTER STABILITY INDEX|K|0|-60|6|C|0|2
+013048|waterFraction|double|WATER FRACTION|%|1|0|10|%|1|4
+013051|frequencyGroupPrecipitation|table|FREQUENCY GROUP, PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+013052|highestDailyAmountOfPrecipitation|double|HIGHEST DAILY AMOUNT OF PRECIPITATION|kg m-2|1|-1|14|kg m-2|1|5
+013055|intensityOfPrecipitation|double|INTENSITY OF PRECIPITATION|kg m-2 s-1|4|0|8|mm/h|1|4
+013056|characterAndIntensityOfPrecipitation|table|CHARACTER AND INTENSITY OF PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+013057|timeOfBeginningOrEndOfPrecipitation|table|TIME OF BEGINNING OR END OF PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+013058|sizeOfPrecipitatingElement|double|SIZE OF PRECIPITATING ELEMENT|m|4|0|7|mm|1|3
+013059|numberOfFlashesThunderstorm|long|NUMBER OF FLASHES (THUNDERSTORM)|Numeric|0|0|7|Numeric|0|3
+013060|totalAccumulatedPrecipitation|double|TOTAL ACCUMULATED PRECIPITATION|kg m-2|1|-1|17|kg m-2|1|5
+013071|upstreamWaterLevel|double|UPSTREAM WATER LEVEL|m|2|0|14|m|2|4
+013072|downstreamWaterLevel|double|DOWNSTREAM WATER LEVEL|m|2|0|14|m|2|4
+013073|maximumWaterLevel|double|MAXIMUM WATER LEVEL|m|2|0|14|m|2|4
+013074|groundWaterLevel|double|GROUND WATER LEVEL|m|2|0|18|m|2|6
+013080|waterPh|double|WATER PH|pH unit|1|0|10|pH unit|1|3
+013081|waterConductivity|double|WATER CONDUCTIVITY|S/m|3|0|14|S/m|3|4
+013082|waterTemperature|double|WATER TEMPERATURE|K|1|0|12|K|1|4
+013083|dissolvedOxygen|double|DISSOLVED OXYGEN|kg m-3|6|0|15|kg m-3|6|5
+013084|turbidity|long|TURBIDITY|lm|0|0|14|lm|0|4
+013085|oxidationReductionPotential|double|OXIDATION REDUCTION POTENTIAL (ORP)|V|3|0|14|V|3|4
+013090|radiometerWaterVapourContent|double|RADIOMETER WATER VAPOUR CONTENT|kg m-2|1|0|10|kg m-2|1|4
+013091|radiometerLiquidContent|double|RADIOMETER LIQUID CONTENT|kg m-2|2|0|8|kg m-2|2|3
+013093|cloudOpticalThickness|long|CLOUD OPTICAL THICKNESS|Numeric|0|0|8|Numeric|0|3
+013095|totalColumnWaterVapour|double|TOTAL COLUMN WATER VAPOUR|kg m-2|4|0|19|kg m-2|4|6
+013096|mwrWaterVapourContent|double|MWR WATER VAPOUR CONTENT|kg m-2|2|0|14|kg m-2|2|5
+013097|mwrLiquidWaterContent|double|MWR LIQUID WATER CONTENT|kg m-2|2|0|14|kg m-2|2|5
+013098|integratedWaterVapourDensity|double|INTEGRATED WATER VAPOUR DENSITY|kg m-2|8|0|30|kg m-2|8|10
+013099|log10OfIntegratedCloudParticleDensity|double|LOG10 OF INTEGRATED CLOUD PARTICLE DENSITY|log (m-2)|1|0|7|log (m-2)|1|3
+013100|log10OfIntegratedCloudParticleArea|double|LOG10 OF INTEGRATED CLOUD PARTICLE AREA|log (m2 m-2)|1|-70|7|log (m2 m-2)|1|2
+013101|log10OfIntegratedCloudParticleVolume|double|LOG10 OF INTEGRATED CLOUD PARTICLE VOLUME|log (m3 m-2)|1|-140|7|log (m3 m-2)|1|3
+013110|massMixingRatio|long|MASS MIXING RATIO|%|0|0|7|%|0|3
+013111|soilMoisture|long|SOIL MOISTURE|g/kg|0|0|10|g/kg|0|4
+013112|objectWetnessDuration|long|OBJECT WETNESS DURATION|s|0|0|17|s|0|5
+013114|rateOfIceAccretion|double|RATE OF ICE ACCRETION|kg m-2 h-1|1|0|11|kg m-2 h-1|1|4
+013115|iceThickness|double|ICE THICKNESS|m|2|0|19|m|2|6
+013116|waterFilmThickness|double|WATER FILM THICKNESS|m|4|0|10|m|3|2
+013117|snowDensityLiquidWaterContent|long|SNOW DENSITY (LIQUID WATER CONTENT)|kg m-3|0|0|10|kg m-3|0|3
+013118|freshSnowDepth|double|DEPTH OF FRESH SNOW (HIGH ACCURACY)|m|3|-2|14|m|3|5
+013155|precipitationIntensityHighAccuracy|double|INTENSITY OF PRECIPITATION (HIGH ACCURACY)|kg m-2 s-1|5|-1|16|mm/h|2|5
+013160|radiometerLiquidContent|double|RADIOMETER LIQUID CONTENT|kg m-2|2|-350|10|kg m-2|2|3
+014001|longWaveRadiationIntegratedOver24Hours|long|LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-3|-65536|17|J m-2|-3|5
+014002|longWaveRadiationIntegratedOverPeriodSpecified|long|LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|-65536|17|J m-2|-3|5
+014003|shortWaveRadiationIntegratedOver24Hours|long|SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-3|-65536|17|J m-2|-3|5
+014004|shortWaveRadiationIntegratedOverPeriodSpecified|long|SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|-65536|17|J m-2|-3|5
+014011|netLongWaveRadiationIntegratedOver24Hours|long|NET LONG-WAVE RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-3|-65536|17|J m-2|-3|5
+014012|netLongWaveRadiationIntegratedOverPeriodSpecified|long|NET LONG-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|-65536|17|J m-2|-3|5
+014013|netShortWaveRadiation24Hours|long|NET SHORT-WAVE RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-3|-65536|17|J m-2|-3|5
+014014|netShortWaveRadiationIntegratedOverPeriodSpecified|long|NET SHORT-WAVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|-65536|17|J m-2|-3|5
+014015|netRadiationIntegratedOver24Hours|long|NET RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-4|-16384|15|J m-2|-4|5
+014016|netRadiationIntegratedOverPeriodSpecified|long|NET RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-4|-16384|15|J m-2|-4|5
+014017|instantaneousLongWaveRadiation|long|INSTANTANEOUS LONG-WAVE RADIATION|W m-2|0|-512|10|W m-2|0|4
+014018|instantaneousShortWaveRadiation|long|INSTANTANEOUS SHORT-WAVE RADIATION|W m-2|0|-2048|12|W m-2|0|4
+014019|surfaceAlbedo|long|SURFACE ALBEDO|%|0|0|7|%|0|3
+014020|globalSolarRadiation24Hours|long|GLOBAL SOLAR RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-4|0|15|J m-2|-4|5
+014021|globalSolarRadiationIntegratedOverPeriodSpecified|long|GLOBAL SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-4|0|15|J m-2|-4|5
+014022|diffuseSolarRadiationIntegratedOver24Hours|long|DIFFUSE SOLAR RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-4|0|15|J m-2|-4|5
+014023|diffuseSolarRadiationIntegratedOverPeriodSpecified|long|DIFFUSE SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-4|0|15|J m-2|-4|5
+014024|directSolarRadiationIntegratedOver24Hours|long|DIRECT SOLAR RADIATION, INTEGRATED OVER 24 HOURS|J m-2|-4|0|15|J m-2|-4|5
+014025|directSolarRadiationIntegratedOverPeriodSpecified|long|DIRECT SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-4|0|15|J m-2|-4|5
+014026|cloudTopAlbedo|long|ALBEDO AT THE TOP OF CLOUDS|%|0|0|7|%|0|3
+014027|albedo|long|ALBEDO|%|0|0|7|%|0|3
+014028|globalSolarRadiationIntegratedOverPeriodSpecified|long|GLOBAL SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|0|20|J m-2|-2|6
+014029|diffuseSolarRadiationIntegratedOverPeriodSpecified|long|DIFFUSE SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|0|20|J m-2|-2|6
+014030|directSolarRadiationIntegratedOverPeriodSpecified|long|DIRECT SOLAR RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|0|20|J m-2|-2|6
+014031|totalSunshine|long|TOTAL SUNSHINE|min|0|0|11|min|0|4
+014032|totalSunshine|long|TOTAL SUNSHINE|h|0|0|10|h|0|4
+014033|totalSunshine|long|TOTAL SUNSHINE|%|0|0|9|%|0|3
+014034|sunshineOverPeriodSpecified|long|SUNSHINE OVER PERIOD SPECIFIED|min|0|0|11|min|0|4
+014035|solarRadiationFlux|double|SOLAR RADIATION FLUX|W m-2|1|0|14|W m-2|1|5
+014042|bidirectionalReflectance|long|BIDIRECTIONAL REFLECTANCE|%|0|0|7|%|0|3
+014043|channelRadiance|double|CHANNEL RADIANCE|W m-2 sr-1 um-1|4|0|23|W m-2 sr-1 um-1|4|7
+014044|channelRadiance|double|CHANNEL RADIANCE|W m-2 sr-1 cm|7|-100000|22|W m-2 sr-1 cm|7|7
+014045|channelRadiance|long|CHANNEL RADIANCE|W m-2 sr-1 cm|0|0|11|W m-2 sr-1 cm|0|4
+014046|scaledIasiRadiance|long|SCALED IASI RADIANCE|W m-2 sr-1 m|0|-5000|16|W m-2 sr-1 m|0|5
+014047|scaledMeanAvhrrRadiance|long|SCALED MEAN AVHRR RADIANCE|W m-2 sr-1 m|0|0|31|W m-2 sr-1 m|0|10
+014048|scaledStandardDeviationAvhrrRadiance|long|SCALED STANDARD DEVIATION AVHRR RADIANCE|W m-2 sr-1 m|0|0|31|W m-2 sr-1 m|0|10
+014050|emissivity|double|EMISSIVITY|%|1|0|10|%|1|4
+014051|directSolarRadiationIntegratedOverLastHour|long|DIRECT SOLAR RADIATION INTEGRATED OVER LAST HOUR|J m-2|-3|0|14|J m-2|-3|4
+014052|globalUpwardSolarRadiationIntegratedOverPeriodSpecified|long|GLOBAL UPWARD SOLAR RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|-1048574|20|J m-2|-2|7
+014053|netRadiationIntegratedOverPeriodSpecified|long|NET RADIATION (HIGH ACCURACY), INTEGRATED OVER PERIOD SPECIFIED|J m-2|-2|-1048574|21|J m-2|-2|7
+014054|photosyntheticallyActiveRadiationIntegratedOverPeriodSpecified|long|PHOTOSYNTHETICALLY ACTIVE RADIATION, INTEGRATED OVER PERIOD SPECIFIED|J m-2|-3|0|16|J m-2|-3|5
+014055|solarActivityIndex|long|SOLAR ACTIVITY INDEX|Numeric|0|-32768|16|Numeric|0|5
+014056|backgroundLuminance|long|BACKGROUND LUMINANCE|cd m-2|0|0|18|cd m-2|0|6
+014057|soilHeatFlux|long|SOIL HEAT FLUX|J m-2|-2|-1048574|21|J m-2|-2|7
+014072|globalUvIrradiation|long|GLOBAL UV IRRADIATION|J m-2|0|-4000000|23|J m-2|0|7
+015001|totalOzone|long|TOTAL OZONE|DU|0|0|10|DU|0|4
+015002|airMassSlantPathAt22Km|long|AIR MASS (SLANT PATH AT 22 KM)|Numeric|2|0|10|Numeric|2|3
+015003|measuredOzonePartialPressureSounding|double|MEASURED OZONE PARTIAL PRESSURE (SOUNDING)|Pa|4|0|9|nbar|0|3
+015004|ozoneSoundingCorrectionFactor|long|OZONE SOUNDING CORRECTION FACTOR (CF)|Numeric|3|0|11|Numeric|3|4
+015005|ozoneP|long|OZONE P|DU|0|0|10|DU|0|3
+015008|significandOfVolumetricMixingRatio|long|SIGNIFICAND OF VOLUMETRIC MIXING RATIO|Numeric|0|0|10|Numeric|0|4
+015011|log10IntegratedElectronDensity|double|LOG10 OF INTEGRATED ELECTRON DENSITY|log (m-2)|3|14000|13|log (m-2)|3|4
+015012|totalElectronCountPerSquareMetre|long|TOTAL ELECTRON COUNT PER SQUARE METRE|m-2|-16|0|6|m-2|-16|2
+015015|maxImageSpectralComponentBeforeNormalization|long|MAXIMUM IMAGE SPECTRAL COMPONENT BEFORE NORMALIZATION|Numeric|0|0|31|Numeric|0|10
+015020|integratedOzoneDensity|double|INTEGRATED OZONE DENSITY|kg m-2|8|0|21|kg m-2|8|7
+015021|integratedMassDensity|double|INTEGRATED MASS DENSITY|kg m-2|11|0|31|kg m-2|11|10
+015024|opticalDepth|long|OPTICAL DEPTH|Numeric|4|0|24|Numeric|4|8
+015025|pollutantType|table|TYPE OF POLLUTANT|CODE TABLE|0|0|4|CODE TABLE|0|2
+015026|moleFractionOfPollutant|double|CONCENTRATION OF POLLUTANT (MOL MOL-1)|mol/mol|9|0|9|mol/mol|9|3
+015027|massConcentrationOfPollutant|double|CONCENTRATION OF POLLUTANT (KG M-3)|kg m-3|9|0|10|kg m-3|9|4
+015029|extinctionCoefficient|double|EXTINCTION COEFFICIENT|/m|9|0|30|/m|9|10
+015030|aerosolContaminationIndex|long|AEROSOL CONTAMINATION INDEX|Numeric|2|-1000|12|Numeric|2|4
+015031|atmosphericPathDelayInSatelliteSignal|double|ATMOSPHERIC PATH DELAY IN SATELLITE SIGNAL|m|4|10000|15|m|4|5
+015032|estimatedErrorInAtmosphericPathDelay|double|ESTIMATED ERROR IN ATMOSPHERIC PATH DELAY|m|4|0|10|m|4|4
+015033|differenceInPathDelaysForLimbViewsAtExtremesOfScan|double|DIFFERENCE IN PATH DELAYS FOR LIMB VIEWS AT EXTREMES OF SCAN|m|5|-10000|15|m|5|5
+015034|estimatedErrorInPathDelayDifference|double|ESTIMATED ERROR IN PATH DELAY DIFFERENCE|m|5|0|14|m|5|5
+015035|componentOfZenithPathDelayDueToWaterVapour|double|COMPONENT OF ZENITH PATH DELAY DUE TO WATER VAPOUR|m|4|0|14|m|4|5
+015036|atmosphericRefractivity|double|ATMOSPHERIC REFRACTIVITY|N units|3|0|19|N units|3|6
+015037|bendingAngle|double|BENDING ANGLE|rad|8|-100000|23|rad|8|7
+015041|sulphurDioxideIndex|long|SULPHUR DIOXIDE INDEX|Numeric|2|-1200|14|Numeric|2|4
+015042|reflectance|double|REFLECTANCE|%|2|0|14|%|2|5
+015045|sulphurDioxide|double|SULPHUR DIOXIDE|DU|2|-2000|15|DU|2|5
+015046|volcanoContaminationIndex|long|VOLCANO CONTAMINATION INDEX|Numeric|2|-1000|11|Numeric|2|4
+015049|aerosolAngstromWavelengthExponent|long|AEROSOL ANGSTROM WAVELENGTH EXPONENT|Numeric|3|-2000|14|Numeric|3|5
+015051|meteorologicalOpticalRange|long|METEOROLOGICAL OPTICAL RANGE|m|0|0|18|m|0|6
+015052|log10OfNumberDensityOfAerosolParticlesWithDiameterGreaterThan5Nm|double|LOG10 OF NUMBER DENSITY OF AEROSOL PARTICLES WITH DIAMETER GREATER THAN 5 NM|log (m-3)|1|60|6|log (m-3)|1|3
+015053|log10OfNumberDensityOfAerosolParticlesWithDiameterGreaterThan14Nm|double|LOG10 OF NUMBER DENSITY OF AEROSOL PARTICLES WITH DIAMETER GREATER THAN 14 NM|log (m-3)|2|600|9|log (m-3)|2|4
+015054|log10OfNumberDensityOfAerosolParticlesWithDiameterBetween0p25And2p5|double|LOG10 OF NUMBER DENSITY OF AEROSOL PARTICLES WITH DIAMETER BETWEEN 0.25 AND 2.5 µM|log (m-3)|2|550|9|log (m-3)|2|4
+015055|nonVolatileAerosolRatio|long|NON VOLATILE AEROSOL RATIO|Numeric|2|0|7|Numeric|2|3
+015062|aerosolOpticalThickness|long|AEROSOL OPTICAL THICKNESS|Numeric|3|-1000|14|Numeric|3|5
+019001|synopticFeatureType|table|TYPE OF SYNOPTIC FEATURE|CODE TABLE|0|0|6|CODE TABLE|0|2
+019002|effectiveRadiusOfFeature|long|EFFECTIVE RADIUS OF FEATURE|m|-2|0|12|m|-2|4
+019003|windSpeedThreshold|long|WIND SPEED THRESHOLD|m/s|0|0|8|m/s|0|3
+019004|effectiveRadiusWithRespectToWindSpeedsAboveThreshold|long|EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD|m|-2|0|12|m|-2|4
+019005|featureDirectionOfMotion|long|DIRECTION OF MOTION OF FEATURE|deg|0|0|9|deg|0|3
+019006|speedOfMotionOfFeature|double|SPEED OF MOTION OF FEATURE|m/s|2|0|14|m/s|2|5
+019007|effectiveRadiusOfFeature|long|EFFECTIVE RADIUS OF FEATURE|m|-3|0|12|m|-3|4
+019008|verticalExtentOfCirculation|table|VERTICAL EXTENT OF CIRCULATION|CODE TABLE|0|0|3|CODE TABLE|0|1
+019009|effectiveRadiusWithRespectToWindSpeedsAboveThresholdLargeStorms|long|EFFECTIVE RADIUS WITH RESPECT TO WIND SPEEDS ABOVE THRESHOLD (LARGE STORMS)|m|-3|0|12|m|-3|4
+019010|methodForTrackingCentreOfSynopticFeature|table|METHOD FOR TRACKING THE CENTRE OF SYNOPTIC FEATURE|CODE TABLE|0|0|4|CODE TABLE|0|2
+019100|timeIntervalToCalculateMovementOfTropicalCyclone|table|TIME INTERVAL TO CALCULATE THE MOVEMENT OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2
+019101|accuracyOfPositionOfCentreOfTropicalCyclone|table|ACCURACY OF THE POSITION OF THE CENTRE OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2
+019102|shapeAndDefinitionOfEyeOfTropicalCyclone|table|SHAPE AND DEFINITION OF THE EYE OF THE TROPICAL CYCLONE|CODE TABLE|0|0|3|CODE TABLE|0|1
+019103|diameterOfMajorAxisOfEyeOfTropicalCyclone|table|DIAMETER OF MAJOR AXIS OF THE EYE OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2
+019104|changeInCharacterOfEyeDuring30Minutes|table|CHANGE IN CHARACTER OF THE EYE DURING THE 30 MINUTES|CODE TABLE|0|0|4|CODE TABLE|0|2
+019105|distanceBetweenEndOfSpiralBandAndCentre|table|DISTANCE BETWEEN THE END OF SPIRAL BAND AND THE CENTRE|CODE TABLE|0|0|4|CODE TABLE|0|2
+019106|identificationNumberOfTropicalCyclone|long|IDENTIFICATION NUMBER OF TROPICAL CYCLONE|Numeric|0|0|7|Numeric|0|3
+019107|timeIntervalOverWhichMovementOfTropicalCycloneHasBeenCalculated|table|TIME INTERVAL OVER WHICH THE MOVEMENT OF THE TROPICAL CYCLONE HAS BEEN CALCULATED|CODE TABLE|0|0|4|CODE TABLE|0|2
+019108|accuracyOfGeographicalPositionOfTropicalCyclone|table|ACCURACY OF GEOGRAPHICAL POSITION OF THE TROPICAL CYCLONE|CODE TABLE|0|0|3|CODE TABLE|0|1
+019109|meanDiameterOfOvercastCloudOfTropicalCyclone|table|MEAN DIAMETER OF THE OVERCAST CLOUD OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2
+019110|apparent24HourChangeInIntensityOfTropicalCyclone|table|APPARENT 24-HOUR CHANGE IN INTENSITY OF THE TROPICAL CYCLONE|CODE TABLE|0|0|4|CODE TABLE|0|2
+019111|currentIntensityNumberOfTropicalCyclone|long|CURRENT INTENSITY (CI) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3
+019112|dataTropicalNumberOfTropicalCyclone|long|DATA TROPICAL (DT) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3
+019113|cloudPatternTypeOfDtNumber|table|CLOUD PATTERN TYPE OF THE DT-NUMBER|CODE TABLE|0|0|4|CODE TABLE|0|2
+019114|modelExpectedTropicalNumberOfTropicalCyclone|long|MODEL EXPECTED TROPICAL (MET) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3
+019115|trendOfPast24HourChangeDevelopedWeakened|long|TREND OF THE PAST 24-HOUR CHANGE (+: DEVELOPED, -: WEAKENED)|Numeric|1|-30|6|Numeric|1|2
+019116|patternTropicalNumberOfTropicalCyclone|long|PATTERN TROPICAL (PT) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3
+019117|cloudPictureTypeOfPtNumber|table|CLOUD PICTURE TYPE OF THE PT-NUMBER|CODE TABLE|0|0|3|CODE TABLE|0|1
+019118|finalTropicalNumberOfTropicalCyclone|long|FINAL TROPICAL (T) NUMBER OF THE TROPICAL CYCLONE|Numeric|1|0|7|Numeric|1|3
+019119|finalTNumberType|table|TYPE OF THE FINAL T-NUMBER|CODE TABLE|0|0|3|CODE TABLE|0|1
+019150|typhoonInternationalCommonNumberTyphoonCommittee|string|TYPHOON INTERNATIONAL COMMON NUMBER (TYPHOON COMMITTEE)|CCITT IA5|0|0|32|Character|0|4
+020001|horizontalVisibility|long|HORIZONTAL VISIBILITY|m|-1|0|13|m|-1|4
+020002|verticalVisibility|long|VERTICAL VISIBILITY|m|-1|0|7|m|-1|3
+020003|presentWeather|table|PRESENT WEATHER|CODE TABLE|0|0|9|CODE TABLE|0|3
+020004|pastWeather1|table|PAST WEATHER (1)|CODE TABLE|0|0|5|CODE TABLE|0|2
+020005|pastWeather2|table|PAST WEATHER (2)|CODE TABLE|0|0|5|CODE TABLE|0|2
+020006|flightRules|table|FLIGHT RULES|CODE TABLE|0|0|3|CODE TABLE|0|1
+020008|cloudDistributionForAviation|table|CLOUD DISTRIBUTION FOR AVIATION|CODE TABLE|0|0|5|CODE TABLE|0|2
+020009|generalWeatherIndicatorTafOrMetar|table|GENERAL WEATHER INDICATOR (TAF/METAR)|CODE TABLE|0|0|4|CODE TABLE|0|2
+020010|cloudCoverTotal|long|CLOUD COVER (TOTAL)|%|0|0|7|%|0|3
+020011|cloudAmount|table|CLOUD AMOUNT|CODE TABLE|0|0|4|CODE TABLE|0|2
+020012|cloudType|table|CLOUD TYPE|CODE TABLE|0|0|6|CODE TABLE|0|2
+020013|heightOfBaseOfCloud|long|HEIGHT OF BASE OF CLOUD|m|-1|-40|11|m|-1|4
+020014|heightOfTopOfCloud|long|HEIGHT OF TOP OF CLOUD|m|-1|-40|11|m|-1|4
+020015|pressureAtBaseOfCloud|long|PRESSURE AT BASE OF CLOUD|Pa|-1|0|14|Pa|-1|5
+020016|pressureAtTopOfCloud|long|PRESSURE AT TOP OF CLOUD|Pa|-1|0|14|Pa|-1|5
+020017|cloudTopDescription|table|CLOUD TOP DESCRIPTION|CODE TABLE|0|0|4|CODE TABLE|0|2
+020018|tendencyOfRunwayVisualRange|table|TENDENCY OF RUNWAY VISUAL RANGE|CODE TABLE|0|0|2|CODE TABLE|0|1
+020019|significantWeather|string|SIGNIFICANT PRESENT OR FORECAST WEATHER|CCITT IA5|0|0|72|Character|0|9
+020020|significantRecentWeatherPhenomena|string|SIGNIFICANT RECENT WEATHER PHENOMENA|CCITT IA5|0|0|32|Character|0|4
+020021|precipitationType|flag|TYPE OF PRECIPITATION|FLAG TABLE|0|0|30|FLAG TABLE|0|10
+020022|characterOfPrecipitation|table|CHARACTER OF PRECIPITATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+020023|otherWeatherPhenomena|flag|OTHER WEATHER PHENOMENA|FLAG TABLE|0|0|18|FLAG TABLE|0|6
+020024|intensityOfPhenomena|table|INTENSITY OF PHENOMENA|CODE TABLE|0|0|3|CODE TABLE|0|1
+020025|obscuration|flag|OBSCURATION|FLAG TABLE|0|0|21|FLAG TABLE|0|7
+020026|characterOfObscuration|table|CHARACTER OF OBSCURATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+020027|phenomenaOccurrence|flag|PHENOMENA OCCURRENCE|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+020028|expectedChangeInIntensity|table|EXPECTED CHANGE IN INTENSITY|CODE TABLE|0|0|3|CODE TABLE|0|1
+020029|rainFlag|table|RAIN FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1
+020031|iceDepositThickness|double|ICE DEPOSIT (THICKNESS)|m|2|0|7|m|2|3
+020032|rateOfIceAccretionEstimated|table|RATE OF ICE ACCRETION (ESTIMATED)|CODE TABLE|0|0|3|CODE TABLE|0|1
+020033|causeOfIceAccretion|flag|CAUSE OF ICE ACCRETION|FLAG TABLE|0|0|4|FLAG TABLE|0|2
+020034|seaIceConcentration|table|SEA ICE CONCENTRATION|CODE TABLE|0|0|5|CODE TABLE|0|2
+020035|amountAndTypeOfIce|table|AMOUNT AND TYPE OF ICE|CODE TABLE|0|0|4|CODE TABLE|0|2
+020036|iceSituation|table|ICE SITUATION|CODE TABLE|0|0|5|CODE TABLE|0|2
+020037|iceDevelopment|table|ICE DEVELOPMENT|CODE TABLE|0|0|5|CODE TABLE|0|2
+020038|iceEdgeBearing|long|BEARING OF ICE EDGE|deg|0|0|12|deg|0|3
+020039|iceDistance|long|ICE DISTANCE|m|-1|0|13|m|-1|4
+020040|evolutionOfDriftSnow|table|EVOLUTION OF DRIFT SNOW|CODE TABLE|0|0|4|CODE TABLE|0|2
+020041|airframeIcing|table|AIRFRAME ICING|CODE TABLE|0|0|4|CODE TABLE|0|2
+020042|airframeIcingPresent|table|AIRFRAME ICING PRESENT|CODE TABLE|0|0|2|CODE TABLE|0|1
+020043|peakLiquidWaterContent|double|PEAK LIQUID WATER CONTENT|kg m-3|4|0|7|kg m-3|4|2
+020044|averageLiquidWaterContent|double|AVERAGE LIQUID WATER CONTENT|kg m-3|4|0|7|kg m-3|4|2
+020045|supercooledLargeDropletConditions|table|SUPERCOOLED LARGE DROPLET (SLD) CONDITIONS|CODE TABLE|0|0|2|CODE TABLE|0|1
+020048|evolutionOfFeature|table|EVOLUTION OF FEATURE|CODE TABLE|0|0|4|CODE TABLE|0|2
+020050|cloudIndex|table|CLOUD INDEX|CODE TABLE|0|0|8|CODE TABLE|0|3
+020051|amountOfLowClouds|long|AMOUNT OF LOW CLOUDS|%|0|0|7|%|0|3
+020052|amountOfMiddleClouds|long|AMOUNT OF MIDDLE CLOUDS|%|0|0|7|%|0|3
+020053|amountOfHighClouds|long|AMOUNT OF HIGH CLOUDS|%|0|0|7|%|0|3
+020054|trueDirectionFromWhichAPhenomenonOrCloudsAreMovingOrInWhichTheyAreObserved|long|TRUE DIRECTION FROM WHICH A PHENOMENON OR CLOUDS ARE MOVING OR IN WHICH THEY ARE OBSERVED|deg|0|0|9|deg|0|3
+020055|stateOfSkyInTropics|table|STATE OF SKY IN THE TROPICS|CODE TABLE|0|0|4|CODE TABLE|0|2
+020056|cloudPhase|table|CLOUD PHASE|CODE TABLE|0|0|3|CODE TABLE|0|1
+020058|visibilitySeawardsFromACoastalStation|long|VISIBILITY SEAWARDS FROM A COASTAL STATION|m|-1|0|13|m|-1|4
+020059|minimumHorizontalVisibility|long|MINIMUM HORIZONTAL VISIBILITY|m|-1|0|9|m|-1|3
+020060|prevailingHorizontalVisibility|long|PREVAILING HORIZONTAL VISIBILITY|m|-1|0|10|m|-1|4
+020061|runwayVisualRangeRvr|long|RUNWAY VISUAL RANGE (RVR)|m|0|0|12|m|0|4
+020062|stateOfGround|table|STATE OF THE GROUND (WITH OR WITHOUT SNOW)|CODE TABLE|0|0|5|CODE TABLE|0|2
+020063|specialPhenomena|table|SPECIAL PHENOMENA|CODE TABLE|0|0|10|CODE TABLE|0|4
+020065|snowCover|long|SNOW COVER|%|0|0|7|%|0|3
+020066|maximumDiameterOfHailstones|double|MAXIMUM DIAMETER OF HAILSTONES|m|3|0|8|m|3|3
+020067|diameterOfDeposit|double|DIAMETER OF DEPOSIT|m|3|0|9|m|3|3
+020070|minimumNumberOfAtmospherics|long|MINIMUM NUMBER OF ATMOSPHERICS|Numeric|0|0|7|Numeric|0|3
+020071|accuracyOfFixAndRateOfAtmospherics|table|ACCURACY OF FIX AND RATE OF ATMOSPHERICS|CODE TABLE|0|0|4|CODE TABLE|0|2
+020081|cloudAmountInSegment|long|CLOUD AMOUNT IN SEGMENT|%|0|0|7|%|0|3
+020082|amountSegmentCloudFree|long|AMOUNT SEGMENT CLOUD FREE|%|0|0|7|%|0|3
+020083|amountOfSegmentCoveredByScene|long|AMOUNT OF SEGMENT COVERED BY SCENE|%|0|0|7|%|0|3
+020085|generalConditionOfRunway|table|GENERAL CONDITION OF RUNWAY|CODE TABLE|0|0|4|CODE TABLE|0|1
+020086|runwayDeposits|table|RUNWAY DEPOSITS|CODE TABLE|0|0|4|CODE TABLE|0|1
+020087|runwayContamination|table|RUNWAY CONTAMINATION|CODE TABLE|0|0|4|CODE TABLE|0|1
+020088|depthOfRunwayDeposits|double|DEPTH OF RUNWAY DEPOSITS|m|3|0|12|m|0|4
+020089|runwayFrictionCoefficient|table|RUNWAY FRICTION COEFFICIENT|CODE TABLE|0|0|7|CODE TABLE|0|2
+020090|specialClouds|table|SPECIAL CLOUDS|CODE TABLE|0|0|4|CODE TABLE|0|2
+020091|verticalVisibility|long|VERTICAL VISIBILITY|ft|-2|0|10|ft|-2|3
+020092|heightOfBaseOfCloud|long|HEIGHT OF BASE OF CLOUD|ft|-2|0|10|ft|-2|3
+020093|heightOfInversion|long|HEIGHT OF INVERSION|m|-1|0|8|m|-1|3
+020095|iceProbability|long|ICE PROBABILITY|Numeric|3|0|10|Numeric|3|4
+020096|iceAgeAParameter|double|ICE AGE (A PARAMETER)|dB|2|-4096|13|dB|2|4
+020101|locustAcridianName|table|LOCUST (ACRIDIAN) NAME|CODE TABLE|0|0|4|CODE TABLE|0|2
+020102|locustMaturityColour|table|LOCUST (MATURITY) COLOUR|CODE TABLE|0|0|4|CODE TABLE|0|2
+020103|stageOfDevelopmentOfLocusts|table|STAGE OF DEVELOPMENT OF LOCUSTS|CODE TABLE|0|0|4|CODE TABLE|0|2
+020104|organizationStateOfSwarm|table|ORGANIZATION STATE OF SWARM OR BAND OF LOCUSTS|CODE TABLE|0|0|4|CODE TABLE|0|2
+020105|sizeOfSwarmOrBandOfLocustsAndDurationOfPassageOfSwarm|table|SIZE OF SWARM OR BAND OF LOCUSTS AND DURATION OF PASSAGE OF SWARM|CODE TABLE|0|0|4|CODE TABLE|0|2
+020106|locustPopulationDensity|table|LOCUST POPULATION DENSITY|CODE TABLE|0|0|4|CODE TABLE|0|2
+020107|directionOfMovementsOfLocustSwarm|table|DIRECTION OF MOVEMENTS OF LOCUST SWARM|CODE TABLE|0|0|4|CODE TABLE|0|2
+020108|extentOfVegetation|table|EXTENT OF VEGETATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+020111|xAxisErrorEllipseMajorComponent|long|X-AXIS ERROR ELLIPSE MAJOR COMPONENT|m|-1|0|17|m|-1|6
+020112|yAxisErrorEllipseMinorComponent|long|Y-AXIS ERROR ELLIPSE MINOR COMPONENT|m|-1|0|17|m|-1|6
+020113|zAxisErrorEllipseComponent|long|Z-AXIS ERROR ELLIPSE COMPONENT|m|-1|0|17|m|-1|6
+020114|angleOfXAxisInErrorEllipse|double|ANGLE OF X-AXIS IN ERROR ELLIPSE|deg|2|-18000|16|deg|2|5
+020115|angleOfZAxisInErrorEllipse|double|ANGLE OF Z-AXIS IN ERROR ELLIPSE|deg|2|-18000|16|deg|2|5
+020116|emissionHeightOfCloudStroke|long|EMISSION HEIGHT OF CLOUD STROKE|m|0|0|16|m|0|5
+020117|amplitudeOfLightningStrike|long|AMPLITUDE OF LIGHTNING STRIKE|A|-1|-32000|16|A|-1|5
+020118|lightningDetectionError|long|LIGHTNING DETECTION ERROR|m|0|0|19|m|0|6
+020119|lightningDischargePolarity|table|LIGHTNING DISCHARGE POLARITY|CODE TABLE|0|0|2|CODE TABLE|0|1
+020121|thresholdValueForPolarityDecision|double|THRESHOLD VALUE FOR POLARITY DECISION|V|3|0|16|V|3|5
+020122|thresholdValueForPolarityDecision|long|THRESHOLD VALUE FOR POLARITY DECISION|A|0|0|16|A|0|5
+020123|minimumDirectionThreshold|double|MINIMUM THRESHOLD FOR DETECTION|V/m|3|0|16|V/m|3|5
+020124|lightningStrokeOrFlash|table|LIGHTNING STROKE OR FLASH|CODE TABLE|0|0|2|CODE TABLE|0|1
+020126|lightningRateOfDischarge|long|LIGHTNING RATE OF DISCHARGE|/h|0|0|23|/h|0|7
+020127|lightningDistanceFromStation|long|LIGHTNING - DISTANCE FROM STATION|m|-3|0|8|m|-3|3
+020128|lightningDirectionFromStation|double|LIGHTNING - DIRECTION FROM STATION|deg|1|0|12|deg|1|4
+020130|cloudHydrometeorConcentration|long|CLOUD HYDROMETEOR CONCENTRATION|Numeric|0|0|10|Numeric|0|3
+020131|effectiveRadiusOfCloudHydrometeors|double|EFFECTIVE RADIUS OF CLOUD HYDROMETEORS|m|5|0|6|m|5|2
+020132|cloudLiquidWaterContent|double|CLOUD LIQUID WATER CONTENT|kg m-3|5|0|11|kg m-3|5|4
+020133|hydrometeorRadius|double|HYDROMETEOR RADIUS|m|5|0|6|m|5|2
+020135|iceMassOnARod|double|ICE MASS (ON A ROD)|kg/m|1|0|10|kg/m|1|3
+020136|supplementaryCloudType|table|SUPPLEMENTARY CLOUD TYPE|CODE TABLE|0|0|9|CODE TABLE|0|3
+020137|evolutionOfClouds|table|EVOLUTION OF CLOUDS|CODE TABLE|0|0|4|CODE TABLE|0|2
+020138|roadSurfaceCondition|table|ROAD SURFACE CONDITION|CODE TABLE|0|0|4|CODE TABLE|0|2
+021001|horizontalReflectivity|long|HORIZONTAL REFLECTIVITY|dB|0|-64|7|dB|0|3
+021002|verticalReflectivity|long|VERTICAL REFLECTIVITY|dB|0|-64|7|dB|0|3
+021003|differentialReflectivity|double|DIFFERENTIAL REFLECTIVITY|dB|1|-5|7|dB|1|3
+021004|differentialReflectivity|double|DIFFERENTIAL REFLECTIVITY|dB|2|-800|11|dB|2|4
+021005|linearDepolarizationRatio|long|LINEAR DEPOLARIZATION RATIO|dB|0|-65|6|dB|0|2
+021006|circularDepolarizationRatio|long|CIRCULAR DEPOLARIZATION RATIO|dB|0|-65|6|dB|0|2
+021011|dopplerMeanVelocityXDirection|long|DOPPLER MEAN VELOCITY IN X-DIRECTION|m/s|0|-128|8|m/s|0|3
+021012|dopplerMeanVelocityYDirection|long|DOPPLER MEAN VELOCITY IN Y-DIRECTION|m/s|0|-128|8|m/s|0|3
+021013|dopplerMeanVelocityZDirection|long|DOPPLER MEAN VELOCITY IN Z-DIRECTION|m/s|0|-128|8|m/s|0|3
+021014|dopplerMeanVelocityRadial|double|DOPPLER MEAN VELOCITY (RADIAL)|m/s|1|-4096|13|m/s|1|4
+021017|dopplerVelocitySpectralWidth|double|DOPPLER VELOCITY SPECTRAL WIDTH|m/s|1|0|8|m/s|1|3
+021018|extendedNyquistVelocity|double|EXTENDED NYQUIST VELOCITY|m/s|1|0|10|m/s|1|4
+021019|highNyquistVelocity|double|HIGH NYQUIST VELOCITY|m/s|1|0|10|m/s|1|3
+021021|echoTops|long|ECHO TOPS|m|-3|0|4|m|-3|2
+021022|rangeBinOffset|double|RANGE BIN OFFSET|m|1|0|14|m|1|5
+021023|rangeBinSize|long|RANGE BIN SIZE|m|0|0|14|m|0|5
+021024|azimuthOffset|double|AZIMUTH OFFSET|deg|1|0|12|deg|1|4
+021025|azimuthalResolution|double|AZIMUTHAL RESOLUTION|deg|1|0|8|deg|1|3
+021028|differentialPhase|double|DIFFERENTIAL PHASE|deg|1|0|12|deg|1|4
+021029|crossPolarizationCorrelationCoefficient|long|CROSS-POLARIZATION CORRELATION COEFFICIENT|Numeric|2|-100|8|Numeric|2|3
+021030|signalToNoiseRatio|long|SIGNAL TO NOISE RATIO|dB|0|-32|8|dB|0|3
+021031|verticallyIntegratedLiquidWaterContent|long|VERTICALLY INTEGRATED LIQUID-WATER CONTENT|kg m-2|0|0|7|kg m-2|0|3
+021036|radarRainfallIntensity|double|RADAR RAINFALL INTENSITY|m/s|7|0|12|m/s|7|4
+021041|brightBandHeight|long|BRIGHT-BAND HEIGHT|m|-2|0|8|m|-2|3
+021051|signalPowerAbove1Mw|long|SIGNAL POWER ABOVE 1 MW|dB|0|-256|8|dB|0|3
+021062|backscatter|double|BACKSCATTER|dB|2|-5000|13|dB|2|4
+021063|radiometricResolutionNoiseValue|double|RADIOMETRIC RESOLUTION (NOISE VALUE)|%|1|0|10|%|1|4
+021064|clutterNoiseEstimate|long|CLUTTER NOISE ESTIMATE|Numeric|0|0|8|Numeric|0|3
+021065|missingPacketCounter|long|MISSING PACKET COUNTER|Numeric|0|-127|8|Numeric|0|3
+021066|waveScatterometerProductConfidenceData|flag|WAVE SCATTEROMETER PRODUCT CONFIDENCE DATA|FLAG TABLE|0|0|12|FLAG TABLE|0|4
+021067|windProductConfidenceData|flag|WIND PRODUCT CONFIDENCE DATA|FLAG TABLE|0|0|13|FLAG TABLE|0|5
+021068|radarAltimeterProductConfidenceData|flag|RADAR ALTIMETER PRODUCT CONFIDENCE DATA|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+021069|sstProductConfidenceData|flag|SST PRODUCT CONFIDENCE DATA|FLAG TABLE|0|0|10|FLAG TABLE|0|4
+021070|sstProductConfidenceDataSadist2|flag|SST PRODUCT CONFIDENCE DATA (SADIST-2)|FLAG TABLE|0|0|23|FLAG TABLE|0|6
+021071|peakiness|long|PEAKINESS|Numeric|0|0|16|Numeric|0|5
+021072|satelliteAltimeterCalibrationStatus|flag|SATELLITE ALTIMETER CALIBRATION STATUS|FLAG TABLE|0|0|4|FLAG TABLE|0|2
+021073|satelliteAltimeterInstrumentMode|flag|SATELLITE ALTIMETER INSTRUMENT MODE|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+021075|imageSpectrumIntensity|long|IMAGE SPECTRUM INTENSITY|Numeric|0|0|8|Numeric|0|3
+021076|representationOfIntensities|table|REPRESENTATION OF INTENSITIES|CODE TABLE|0|0|3|CODE TABLE|0|1
+021077|altitudeCorrectionIonosphere|double|ALTITUDE CORRECTION (IONOSPHERE)|m|3|0|14|m|3|5
+021078|altitudeCorrectionDryTroposphere|double|ALTITUDE CORRECTION (DRY TROPOSPHERE)|m|3|0|9|m|3|3
+021079|altitudeCorrectionWetTroposphere|double|ALTITUDE CORRECTION (WET TROPOSPHERE)|m|3|2000|10|m|3|4
+021080|altitudeCorrectionCalibrationConstant|double|ALTITUDE CORRECTION (CALIBRATION CONSTANT)|m|3|0|11|m|3|4
+021081|openLoopCorrectionHeightTimeLoop|double|OPEN LOOP CORRECTION (HEIGHT-TIME LOOP)|m|3|0|10|m|3|4
+021082|openLoopCorrectionAutoGainControl|double|OPEN LOOP CORRECTION (AUTO GAIN CONTROL)|dB|3|-3000|14|dB|3|5
+021083|warmTargetCalibration|long|WARM TARGET CALIBRATION|Numeric|0|0|16|Numeric|0|5
+021084|coldTargetCalibration|long|COLD TARGET CALIBRATION|Numeric|0|0|16|Numeric|0|5
+021085|atsrSeaSurfaceTemperatureAcrossTrackBandNumber|long|ATSR SEA-SURFACE TEMPERATURE ACROSS-TRACK BAND NUMBER|Numeric|0|0|4|Numeric|0|2
+021086|numberOfPixelsInNadirOnlyAverage|long|NUMBER OF PIXELS IN NADIR ONLY, AVERAGE|Numeric|0|0|9|Numeric|0|3
+021087|numberOfPixelsInDualViewAverage|long|NUMBER OF PIXELS IN DUAL VIEW, AVERAGE|Numeric|0|0|9|Numeric|0|3
+021088|wetBackscatter|double|WET BACKSCATTER|dB|2|-5000|13|dB|2|4
+021091|radarSignalDopplerSpectrum0thMoment|long|RADAR SIGNAL DOPPLER SPECTRUM 0TH MOMENT|dB|0|-100|8|dB|0|3
+021092|rassSignalDopplerSpectrum0thMomentReferringToRassSignal|long|RASS SIGNAL DOPPLER SPECTRUM 0TH MOMENT, REFERRING TO RASS SIGNAL|dB|0|-100|8|dB|0|3
+021093|kuBandPeakiness|long|KU BAND PEAKINESS|Numeric|3|0|16|Numeric|3|5
+021094|sBandPeakiness|long|S BAND PEAKINESS|Numeric|3|0|16|Numeric|3|5
+021101|numberOfVectorAmbiguities|long|NUMBER OF VECTOR AMBIGUITIES|Numeric|0|0|3|Numeric|0|1
+021102|indexOfSelectedWindVector|long|INDEX OF SELECTED WIND VECTOR|Numeric|0|0|3|Numeric|0|1
+021103|totalNumberOfSigma0Measurements|long|TOTAL NUMBER OF SIGMA-0 MEASUREMENTS|Numeric|0|0|5|Numeric|0|2
+021104|likelihoodComputedForSolution|long|LIKELIHOOD COMPUTED FOR SOLUTION|Numeric|3|-30000|15|Numeric|3|5
+021105|normalizedRadarCrossSection|double|NORMALIZED RADAR CROSS-SECTION|dB|2|-10000|14|dB|2|5
+021106|kpVarianceCoefficientAlpha|long|KP VARIANCE COEFFICIENT (ALPHA)|Numeric|3|0|14|Numeric|3|5
+021107|kpVarianceCoefficientBeta|long|KP VARIANCE COEFFICIENT (BETA)|Numeric|8|0|16|Numeric|8|5
+021109|seawindsWindVectorCellQuality|flag|SEAWINDS WIND VECTOR CELL QUALITY|FLAG TABLE|0|0|17|FLAG TABLE|0|6
+021110|numberOfInnerBeamSigma0ForwardOfSatellite|long|NUMBER OF INNER-BEAM SIGMA-0 (FORWARD OF SATELLITE)|Numeric|0|0|6|Numeric|0|2
+021111|numberOfOuterBeamSigma0ForwardOfSatellite|long|NUMBER OF OUTER-BEAM SIGMA-0 (FORWARD OF SATELLITE)|Numeric|0|0|6|Numeric|0|2
+021112|numberOfInnerBeamSigma0AftOfSatellite|long|NUMBER OF INNER-BEAM SIGMA-0 (AFT OF SATELLITE)|Numeric|0|0|6|Numeric|0|2
+021113|numberOfOuterBeamSigma0AftOfSatellite|long|NUMBER OF OUTER-BEAM SIGMA-0 (AFT OF SATELLITE)|Numeric|0|0|6|Numeric|0|2
+021114|kpVarianceCoefficientGamma|double|KP VARIANCE COEFFICIENT (GAMMA)|dB|3|-140000|18|dB|3|6
+021115|seawindsSigma0Quality|flag|SEAWINDS SIGMA-0 QUALITY|FLAG TABLE|0|0|17|FLAG TABLE|0|6
+021116|seawindsSigma0Mode|flag|SEAWINDS SIGMA-0 MODE|FLAG TABLE|0|0|17|FLAG TABLE|0|6
+021117|sigma0VarianceQualityControl|long|SIGMA-0 VARIANCE QUALITY CONTROL|Numeric|2|0|16|Numeric|2|5
+021118|attenuationCorrectionOnSigma0|double|ATTENUATION CORRECTION ON SIGMA-0|dB|2|-10000|14|dB|2|5
+021119|windScatterometerGeophysicalModelFunction|table|WIND SCATTEROMETER GEOPHYSICAL MODEL FUNCTION|CODE TABLE|0|0|6|CODE TABLE|0|2
+021120|probabilityOfRain|long|PROBABILITY OF RAIN|Numeric|3|0|10|Numeric|3|4
+021121|seawindsNofRainIndex|long|SEAWINDS NOF* RAIN INDEX|Numeric|0|0|8|Numeric|0|3
+021122|attenuationCorrectionOnSigma0FromTb|double|ATTENUATION CORRECTION ON SIGMA-0 (FROM TB)|dB|2|-10000|14|dB|2|5
+021123|seawindsNormalizedRadarCrossSection|double|SEAWINDS NORMALIZED RADAR CROSS-SECTION|dB|2|-30000|15|dB|2|5
+021128|numberOfValidPointsPerSecondUsedToDerivePreviousParameters|long|NUMBER OF VALID POINTS PER SECOND USED TO DERIVE PREVIOUS PARAMETERS|Numeric|0|0|8|Numeric|0|3
+021130|spectrumTotalEnergy|long|SPECTRUM TOTAL ENERGY|Numeric|6|0|28|Numeric|6|9
+021131|spectrumMaxEnergy|long|SPECTRUM MAX ENERGY|Numeric|6|0|28|Numeric|6|9
+021132|directionOfSpectrumMaxOnHigherResolutionGrid|double|DIRECTION OF SPECTRUM MAX ON HIGHER RESOLUTION GRID|deg|3|0|19|deg|3|6
+021133|wavelengthOfSpectrumMaxOnHigherResolutionGrid|double|WAVELENGTH OF SPECTRUM MAX ON HIGHER RESOLUTION GRID|m|3|0|29|m|3|9
+021134|rangeResolutionOfCressCovarianceSpectrum|double|RANGE RESOLUTION OF CRESS COVARIANCE SPECTRUM|rad/m|3|0|19|rad/m|3|6
+021135|realPartOfCrossSpectraPolarGridNumberOfBins|long|REAL PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS|Numeric|3|-524288|20|Numeric|3|7
+021136|imaginaryPartOfCrossSpectraPolarGridNumberOfBins|long|IMAGINARY PART OF CROSS SPECTRA POLAR GRID NUMBER OF BINS|Numeric|3|-524288|20|Numeric|3|7
+021137|kuBandCorrectedOceanBackscatterCoefficient|double|KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5
+021138|stdKuBandCorrectedOceanBackscatterCoefficient|double|STD KU BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5
+021139|kuBandNetInstrumentalCorrectionForAgc|double|KU BAND NET INSTRUMENTAL CORRECTION FOR AGC|dB|2|-2048|12|dB|2|4
+021140|sBandCorrectedOceanBackscatterCoefficient|double|S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5
+021141|stdSBandCorrectedOceanBackscatterCoefficient|double|STD S BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5
+021142|sBandNetInstrumentalCorrectionForAgc|double|S BAND NET INSTRUMENTAL CORRECTION FOR AGC|dB|2|-1024|11|dB|2|4
+021143|kuBandRainAttenuation|double|KU BAND RAIN ATTENUATION|dB|2|-1073741824|31|dB|2|10
+021144|altimeterRainFlag|flag|ALTIMETER RAIN FLAG|FLAG TABLE|0|0|2|FLAG TABLE|0|1
+021145|kuBandAutomaticGainControl|double|KU BAND AUTOMATIC GAIN CONTROL|dB|2|0|13|dB|2|4
+021146|rmsKuBandAutomaticGainControl|double|RMS KU BAND AUTOMATIC GAIN CONTROL|dB|2|0|8|dB|2|3
+021147|numberOfValidPointsForKuBandAutomaticGainControl|long|NUMBER OF VALID POINTS FOR KU BAND AUTOMATIC GAIN CONTROL|Numeric|0|0|5|Numeric|0|2
+021148|trailingEdgeVariationFlag|flag|TRAILING EDGE VARIATION FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+021150|beamCollocation|table|BEAM CO-LOCATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+021151|estimatedErrorInSigma0At40DegreesIncidenceAngle|double|ESTIMATED ERROR IN SIGMA-0 AT 40 DEGREES INCIDENCE ANGLE|dB|2|0|9|dB|2|3
+021152|slopeAt40DegreesIncidenceAngle|double|SLOPE AT 40 DEGREES INCIDENCE ANGLE|dB/deg|2|-80|7|dB/deg|2|2
+021153|estimatedErrorInSlopeAt40DegreesIncidenceAngle|double|ESTIMATED ERROR IN SLOPE AT 40 DEGREES INCIDENCE ANGLE|dB/deg|2|-40|6|dB/deg|2|2
+021154|soilMoistureSensitivity|double|SOIL MOISTURE SENSITIVITY|dB|2|0|12|dB|2|4
+021155|windVectorCellQuality|flag|WIND VECTOR CELL QUALITY|FLAG TABLE|0|0|24|FLAG TABLE|0|8
+021156|backscatterDistance|long|BACKSCATTER DISTANCE|Numeric|1|-4096|13|Numeric|1|4
+021157|lossPerUnitLengthOfAtmosphere|double|LOSS PER UNIT LENGTH OF ATMOSPHERE USED|dB/m|10|0|22|dB/m|10|7
+021158|ascatKpEstimateQuality|table|ASCAT KP ESTIMATE QUALITY|CODE TABLE|0|0|2|CODE TABLE|0|1
+021159|ascatSigma0Usability|table|ASCAT SIGMA-0 USABILITY|CODE TABLE|0|0|2|CODE TABLE|0|1
+021160|ascatUseOfSyntheticData|long|ASCAT USE OF SYNTHETIC DATA|Numeric|3|0|10|Numeric|3|4
+021161|ascatSyntheticDataQuantity|long|ASCAT SYNTHETIC DATA QUANTITY|Numeric|3|0|10|Numeric|3|4
+021162|ascatSatelliteOrbitAndAttitudeQuality|long|ASCAT SATELLITE ORBIT AND ATTITUDE QUALITY|Numeric|3|0|10|Numeric|3|4
+021163|ascatSolarArrayReflectionContamination|long|ASCAT SOLAR ARRAY REFLECTION CONTAMINATION|Numeric|3|0|10|Numeric|3|4
+021164|ascatTelemetryPresenceAndQuality|long|ASCAT TELEMETRY PRESENCE AND QUALITY|Numeric|3|0|10|Numeric|3|4
+021165|ascatExtrapolatedReferenceFunctionPresence|long|ASCAT EXTRAPOLATED REFERENCE FUNCTION PRESENCE|Numeric|3|0|10|Numeric|3|4
+021166|landFraction|long|LAND FRACTION|Numeric|3|0|10|Numeric|3|4
+021169|icePresenceIndicator|table|ICE PRESENCE INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1
+021170|cBandCorrectedOceanBackscatterCoefficient|double|C BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5
+021171|rmsCBandCorrectedOceanBackscatterCoefficient|double|RMS C BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5
+021172|cBandNetInstrumentalCorrectionForAgc|double|C BAND NET INSTRUMENTAL CORRECTION FOR AGC|dB|2|-2048|12|dB|2|4
+021173|cBandAutomaticGainControl|double|C BAND AUTOMATIC GAIN CONTROL|dB|2|0|13|dB|2|4
+021174|rmsCBandAutomaticGainControl|double|RMS C BAND AUTOMATIC GAIN CONTROL|dB|2|0|9|dB|2|3
+021175|numberOfValidPointsForCBandAutomaticGainControl|long|NUMBER OF VALID POINTS FOR C BAND AUTOMATIC GAIN CONTROL|Numeric|0|0|10|Numeric|0|4
+021176|highFrequencyVariabilityCorrection|double|HIGH FREQUENCY VARIABILITY CORRECTION|m|3|0|16|m|3|5
+021177|correctedOcogBackscatterCoefficient|double|CORRECTED OCOG* BACKSCATTER COEFFICIENT|dB|2|0|16|dB|2|5
+021178|stdOf20HzOcogBackscatterCoefficient|double|STD OF 20 HZ OCOG BACKSCATTER COEFFICIENT|dB|2|0|16|dB|2|5
+021179|numberOf20HzValidPointsForOcogBackscatterCoefficient|long|NUMBER OF 20 HZ VALID POINTS FOR OCOG BACKSCATTER COEFFICIENT|Numeric|0|0|16|Numeric|0|5
+021180|numberOf20HzValidPointsForOceanBackscatterCoefficient|long|NUMBER OF 20 HZ VALID POINTS FOR OCEAN BACKSCATTER COEFFICIENT|Numeric|0|0|8|Numeric|0|3
+021181|20HzOceanBackscatterCoefficient|double|20 HZ OCEAN BACKSCATTER COEFFICIENT|dB|2|0|16|dB|2|5
+021182|20HzKuBandPeakiness|long|20 HZ KU BAND PEAKINESS|Numeric|3|0|16|Numeric|3|5
+021183|specificBandCorrectedOceanBackscatterCoefficient|double|SPECIFIC BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5
+021184|stdSpecificBandCorrectedOceanBackscatterCoefficient|double|STD SPECIFIC BAND CORRECTED OCEAN BACKSCATTER COEFFICIENT|dB|2|-32768|16|dB|2|5
+021185|specificBandNetInstrumentalCorrectionForAgc|double|SPECIFIC BAND NET INSTRUMENTAL CORRECTION FOR AGC|dB|2|-2048|12|dB|2|4
+021186|specificBandAutomaticGainControl|double|SPECIFIC BAND AUTOMATIC GAIN CONTROL|dB|2|0|13|dB|2|4
+021187|rmsSpecificBandAutomaticGainControl|double|RMS SPECIFIC BAND AUTOMATIC GAIN CONTROL|dB|2|0|8|dB|2|3
+021188|numberOfValidPointsForSpecificBandAutomaticGainControl|long|NUMBER OF VALID POINTS FOR SPECIFIC BAND AUTOMATIC GAIN CONTROL|Numeric|0|0|7|Numeric|0|3
+022001|wavesDirection|long|DIRECTION OF WAVES|deg|0|0|9|deg|0|3
+022002|windWavesDirection|long|DIRECTION OF WIND WAVES|deg|0|0|9|deg|0|3
+022003|swellWavesDirection|long|DIRECTION OF SWELL WAVES|deg|0|0|9|deg|0|3
+022004|currentDirection|long|DIRECTION OF CURRENT|deg|0|0|9|deg|0|3
+022005|seaSurfaceCurrentDirection|long|DIRECTION OF SEA-SURFACE CURRENT|deg|0|0|9|deg|0|3
+022011|periodOfWaves|long|PERIOD OF WAVES|s|0|0|6|s|0|2
+022012|periodOfWindWaves|long|PERIOD OF WIND WAVES|s|0|0|6|s|0|2
+022013|periodOfSwellWaves|long|PERIOD OF SWELL WAVES|s|0|0|6|s|0|2
+022021|heightOfWaves|double|HEIGHT OF WAVES|m|1|0|10|m|1|4
+022022|heightOfWindWaves|double|HEIGHT OF WIND WAVES|m|1|0|10|m|1|4
+022023|heightOfSwellWaves|double|HEIGHT OF SWELL WAVES|m|1|0|10|m|1|4
+022025|standardDeviationWaveHeight|double|STANDARD DEVIATION WAVE HEIGHT|m|2|0|10|m|2|4
+022026|standardDeviationOfSignificantWaveHeight|double|STANDARD DEVIATION OF SIGNIFICANT WAVE HEIGHT|m|2|0|10|m|2|4
+022031|speedOfCurrent|double|SPEED OF CURRENT|m/s|2|0|13|m/s|2|4
+022032|speedOfSeaSurfaceCurrent|double|SPEED OF SEA-SURFACE CURRENT|m/s|2|0|13|m/s|2|4
+022035|tidalElevationWithRespectToLocalChartDatum|double|TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM|m|2|0|14|m|2|4
+022036|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|2|0|14|m|2|4
+022037|tidalElevationWithRespectToNationalLandDatum|double|TIDAL ELEVATION WITH RESPECT TO NATIONAL LAND DATUM|m|3|-10000|15|m|3|5
+022038|tidalElevationWithRespectToLocalChartDatum|double|TIDAL ELEVATION WITH RESPECT TO LOCAL CHART DATUM|m|3|-10000|15|m|3|5
+022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|13|m|3|4
+022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
+022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022046|seaIceFraction|long|SEA ICE FRACTION|Numeric|2|0|7|Numeric|2|3
+022049|seaSurfaceTemperature|double|SEA-SURFACE TEMPERATURE|K|2|0|15|K|2|5
+022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
+022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
+022056|directionOfProfile|table|DIRECTION OF PROFILE|CODE TABLE|0|0|2|CODE TABLE|0|1
+022059|seaSurfaceSalinity|double|SEA-SURFACE SALINITY|0/00|2|0|14|0/00|2|5
+022060|lagrangianDrifterDrogueStatus|table|LAGRANGIAN DRIFTER DROGUE STATUS|CODE TABLE|0|0|3|CODE TABLE|0|1
+022061|seaState|table|STATE OF THE SEA|CODE TABLE|0|0|4|CODE TABLE|0|2
+022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
+022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
+022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE/SALINITY PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
+022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
+022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
+022070|significantWaveHeight|double|SIGNIFICANT WAVE HEIGHT|m|2|0|13|m|2|4
+022071|spectralPeakWavePeriod|double|SPECTRAL PEAK WAVE PERIOD|s|1|0|9|s|1|3
+022072|spectralPeakWaveLength|long|SPECTRAL PEAK WAVELENGTH|m|0|0|13|m|0|4
+022073|maximumWaveHeight|double|MAXIMUM WAVE HEIGHT|m|2|0|13|m|2|4
+022074|averageWavePeriod|double|AVERAGE WAVE PERIOD|s|1|0|9|s|1|3
+022075|averageWaveLength|long|AVERAGE WAVELENGTH|m|0|0|13|m|0|4
+022076|directionFromWhichDominantWavesAreComing|long|DIRECTION FROM WHICH DOMINANT WAVES ARE COMING|deg|0|0|9|deg|0|3
+022077|directionalSpreadOfDominantWave|long|DIRECTIONAL SPREAD OF DOMINANT WAVE|deg|0|0|9|deg|0|3
+022078|durationOfWaveRecord|long|DURATION OF WAVE RECORD|s|0|0|12|s|0|4
+022079|lengthOfWaveRecord|long|LENGTH OF WAVE RECORD|m|0|0|16|m|0|5
+022080|wavebandCentralFrequency|double|WAVEBAND CENTRAL FREQUENCY|Hz|3|0|10|Hz|3|4
+022081|wavebandCentralWaveNumber|double|WAVEBAND CENTRAL WAVE NUMBER|/m|5|0|13|/m|5|4
+022082|maximumNonDirectionalSpectralWaveDensity|double|MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY|m2 s|2|0|20|m2 s|2|7
+022083|maximumNonDirectionalSpectralWaveNumber|double|MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE NUMBER|m3|2|0|20|m3|2|7
+022084|bandContainingMaximumNonDirectionalSpectralWaveDensity|long|BAND CONTAINING MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY|Numeric|0|0|7|Numeric|0|3
+022085|spectralWaveDensityRatio|long|SPECTRAL WAVE DENSITY RATIO|Numeric|0|0|7|Numeric|0|3
+022086|meanDirectionFromWhichWavesAreComing|long|MEAN DIRECTION FROM WHICH WAVES ARE COMING|deg|0|0|9|deg|0|3
+022087|principalDirectionFromWhichWavesAreComing|long|PRINCIPAL DIRECTION FROM WHICH WAVES ARE COMING|deg|0|0|9|deg|0|3
+022088|firstNormalizedPolarCoordinateFromFourierCoefficients|long|FIRST NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS|Numeric|2|0|7|Numeric|2|3
+022089|secondNormalizedPolarCoordinateFromFourierCoefficients|long|SECOND NORMALIZED POLAR COORDINATE FROM FOURIER COEFFICIENTS|Numeric|2|0|7|Numeric|2|3
+022090|nonDirectionalSpectralEstimateByWaveFrequency|double|NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY|m2 s|2|0|20|m2 s|2|7
+022091|nonDirectionalSpectralEstimateByWaveNumber|double|NON-DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER|m3|2|0|20|m3|2|7
+022092|directionalSpectralEstimateByWaveFrequency|double|DIRECTIONAL SPECTRAL ESTIMATE BY WAVE FREQUENCY|m2 rad-1 s|2|0|20|m2 rad-1 s|2|7
+022093|directionalSpectralEstimateByWaveNumber|double|DIRECTIONAL SPECTRAL ESTIMATE BY WAVE NUMBER|m4|2|0|20|m4|2|7
+022094|totalNumberOfWaveBands|long|TOTAL NUMBER OF WAVE BANDS|Numeric|0|0|7|Numeric|0|3
+022095|directionalSpreadOfIndividualWaves|long|DIRECTIONAL SPREAD OF INDIVIDUAL WAVES|deg|0|0|8|deg|0|3
+022096|spectralBandWidth|double|SPECTRAL BAND WIDTH|/s|3|0|4|/s|3|2
+022097|meanWavelength731MOfImageSpectrumAtLowWaveNumbers|long|MEAN WAVELENGTH > 731 M OF IMAGE SPECTRUM AT LOW WAVE NUMBERS|m|0|0|14|m|0|5
+022098|wavelengthSpreadWavelength731MAtLowWaveNumbers|long|WAVELENGTH SPREAD (WAVELENGTH > 731 M) AT LOW WAVE NUMBERS|m|0|0|14|m|0|5
+022099|meanDirectionAtLowWaveNumbersWavelength731M|long|MEAN DIRECTION AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)|deg|0|0|9|deg|0|3
+022100|directionSpreadAtLowWaveNumbersWavelength731M|long|DIRECTION SPREAD AT LOW WAVE NUMBERS (WAVELENGTH > 731 M)|deg|0|0|9|deg|0|3
+022101|totalEnergyWavelength731mAtLowWaveNumbers|long|TOTAL ENERGY (WAVELENGTH > 731M) AT LOW WAVE NUMBERS|Numeric|0|0|31|Numeric|0|10
+022102|scaledMaximumNonDirectionalSpectralWaveDensityByFrequency|long|SCALED MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY FREQUENCY|m2 s|0|0|14|m2 s|0|5
+022103|scaledMaximumNonDirectionalSpectralWaveDensityByWavenumber|long|SCALED MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVENUMBER|m3|0|0|14|m3|0|5
+022104|scaledNonDirectionalSpectralWaveDensityByFrequency|long|SCALED NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY FREQUENCY|m2 s|0|0|14|m2 s|0|5
+022105|scaledNonDirectionalSpectralWaveDensityByWavenumber|long|SCALED NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVENUMBER|m3|0|0|14|m3|0|5
+022106|scaledDirectionalSpectralWaveDensityByFrequency|long|SCALED DIRECTIONAL SPECTRAL WAVE DENSITY BY FREQUENCY|m2 rad-1 s|0|0|14|m2 rad-1 s|0|5
+022107|scaledDirectionalSpectralWaveDensityByWavenumber|long|SCALED DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVENUMBER|m4|0|0|14|m4|0|5
+022108|spectralWaveDensityRatio|long|SPECTRAL WAVE DENSITY RATIO|%|0|0|7|%|0|3
+022120|tideStationAutomatedWaterLevelCheck|table|TIDE STATION AUTOMATED WATER LEVEL CHECK|CODE TABLE|0|0|5|CODE TABLE|0|2
+022121|tideStationManualWaterLevelCheck|table|TIDE STATION MANUAL WATER LEVEL CHECK|CODE TABLE|0|0|5|CODE TABLE|0|2
+022122|automatedMeteorologicalDataCheck|table|TIDE STATION AUTOMATED METEOROLOGICAL DATA CHECK|CODE TABLE|0|0|5|CODE TABLE|0|2
+022123|tideStationManualMeteorologicalDataCheck|table|TIDE STATION MANUAL METEOROLOGICAL DATA CHECK|CODE TABLE|0|0|5|CODE TABLE|0|2
+022130|numberOfValidPointsForSpecificBand|long|NUMBER OF VALID POINTS FOR SPECIFIC BAND|Numeric|0|0|10|Numeric|0|4
+022131|rmsSpecificBandSignificantWaveHeight|double|RMS SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
+022132|numberOfValidPointsForSpecificBandSignificantWaveHeight|long|NUMBER OF VALID POINTS FOR SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|Numeric|0|0|10|Numeric|0|4
+022133|specificBandNetInstrumentCorrectionForSignificantWaveHeight|double|SPECIFIC BAND NET INSTRUMENT CORRECTION FOR SIGNIFICANT WAVE HEIGHT|m|3|-1000|11|m|3|4
+022134|numberOfValidPointsForSpecificBandBackscatter|long|NUMBER OF VALID POINTS FOR SPECIFIC BAND BACKSCATTER|Numeric|0|0|10|Numeric|0|4
+022141|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|2|0|15|K|2|5
+022142|squareOfSignificantWaveHeight|double|SQUARE OF SIGNIFICANT WAVE HEIGHT|m2|3|-33554432|26|m2|3|8
+022143|stdOf20HzSwhSquared|double|STD OF 20 HZ SWH SQUARED|m2|3|-8388608|24|m2|3|8
+022144|numberOf20HzValidPointsForSwhSquared|long|NUMBER OF 20 HZ VALID POINTS FOR SWH SQUARED|Numeric|0|0|9|Numeric|0|3
+022145|stdOf20HzOceanRange|double|STD OF 20 HZ OCEAN RANGE|m|3|-33554432|31|m|3|10
+022146|ocogRange|double|OCOG RANGE|m|3|0|31|m|3|10
+022147|stdOf20HzOcogRange|double|STD OF 20 HZ OCOG RANGE|m|3|-8388608|31|m|3|10
+022148|numberOf20HzValidPointsForOceanRange|long|NUMBER OF 20 HZ VALID POINTS FOR OCEAN RANGE|Numeric|0|0|9|Numeric|0|3
+022149|20HzSignificantWaveHeightSquared|double|20 HZ SIGNIFICANT WAVE HEIGHT SQUARED|m2|3|-33554432|26|m2|3|8
+022150|numberOf18HzValidPointsForKuBand|long|NUMBER OF 18 HZ VALID POINTS FOR KU BAND|Numeric|0|0|10|Numeric|0|4
+022151|kuBandOceanRange|double|KU BAND OCEAN RANGE|m|3|0|31|m|3|10
+022152|stdOf18HzKuBandOceanRange|double|STD OF 18 HZ KU BAND OCEAN RANGE|m|3|0|16|m|3|5
+022153|numberOf18HzValidPointsForSBand|long|NUMBER OF 18 HZ VALID POINTS FOR S BAND|Numeric|0|0|10|Numeric|0|4
+022154|sBandOceanRange|double|S BAND OCEAN RANGE|m|3|0|31|m|3|10
+022155|stdOf18HzSBandOceanRange|double|STD OF 18 HZ S BAND OCEAN RANGE|m|3|0|16|m|3|5
+022156|kuBandSignificantWaveHeight|double|KU BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
+022157|stdOf18HzKuBandOceanRange|double|STD OF 18 HZ KU BAND OCEAN RANGE|m|3|0|16|m|3|5
+022158|sBandSignificantWaveHeight|double|S BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
+022159|stdOf18HzSBandSignificantWaveHeight|double|STD OF 18 HZ S BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
+022160|normalizedInverseWaveAge|long|NORMALIZED INVERSE WAVE AGE|Numeric|6|0|21|Numeric|6|7
+022161|waveSpectra|double|WAVE SPECTRA|m4|4|0|27|m4|4|9
+022162|rmsOf20HzKuBandOceanRange|double|RMS OF 20 HZ KU BAND OCEAN RANGE|m|3|0|16|m|3|5
+022163|numberOf20HzValidPointsForKuBand|long|NUMBER OF 20HZ VALID POINTS FOR KU BAND|Numeric|0|0|10|Numeric|0|4
+022164|rms20HzKuBandSignificantWaveHeight|double|RMS 20 HZ KU BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
+022165|numberOf20HzValidPointsForKuBandSignificantWaveHeight|long|NUMBER OF 20 HZ VALID POINTS FOR KU BAND SIGNIFICANT WAVE HEIGHT|Numeric|0|0|10|Numeric|0|4
+022166|kuBandNetInstrumentalCorrectionForSignificantWaveHeight|double|KU BAND NET INSTRUMENTAL CORRECTION FOR SIGNIFICANT WAVE HEIGHT|m|3|-1000|11|m|3|4
+022167|numberOfValidPointsForKuBandBackscatter|long|NUMBER OF VALID POINTS FOR KU BAND BACKSCATTER|Numeric|0|0|10|Numeric|0|4
+022168|cBandOceanRange|double|C BAND OCEAN RANGE|m|3|0|31|m|3|10
+022169|rmsOfCBandOceanRange|double|RMS OF C BAND OCEAN RANGE|m|3|0|16|m|3|5
+022170|numberOf20HzValidPointsForCBand|long|NUMBER OF 20 HZ VALID POINTS FOR C BAND|Numeric|0|0|10|Numeric|0|4
+022171|cBandSignificantWaveHeight|double|C BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
+022172|rms20HzCBandSignificantWaveHeight|double|RMS 20 HZ C BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
+022173|numberOf20HzValidPointsForCBandSignificantWaveHeight|long|NUMBER OF 20 HZ VALID POINTS FOR C BAND SIGNIFICANT WAVE HEIGHT|Numeric|0|0|10|Numeric|0|4
+022174|cBandNetInstrumentalCorrectionForSignificantWaveHeight|double|C BAND NET INSTRUMENTAL CORRECTION FOR SIGNIFICANT WAVE HEIGHT|m|3|-1000|11|m|3|4
+022175|numberOfValidPointsForCBandBackscatter|long|NUMBER OF VALID POINTS FOR C BAND BACKSCATTER|Numeric|0|0|10|Numeric|0|4
+022177|heightOfXbtOrXctdLauncher|long|HEIGHT OF XBT/XCTD LAUNCHER|m|0|0|6|m|0|3
+022178|xbtOrXctdLauncherType|table|XBT/XCTD LAUNCHER TYPE|CODE TABLE|0|0|8|CODE TABLE|0|3
+022182|waterColumnHeight|double|WATER COLUMN HEIGHT|m|3|0|23|m|3|7
+022184|waterColumnHeightDeviationFromReferenceValue|double|WATER COLUMN HEIGHT DEVIATION FROM THE REFERENCE VALUE|m|3|-2000|12|m|3|4
+022185|bprTransmissionCount|long|BPR TRANSMISSION COUNT|Numeric|0|0|10|Numeric|0|3
+022186|directionFromWhichWavesAreComing|long|DIRECTION FROM WHICH WAVES ARE COMING|deg|0|0|9|deg|0|3
+022187|directionalSpreadOfWaves|long|DIRECTIONAL SPREAD OF WAVE|deg|0|0|9|deg|0|3
+022188|oceanographicDissolvedOxygen|double|DISSOLVED OXYGEN|umol/kg|3|0|19|umol/kg|3|6
+022189|specificBandOceanRange|double|SPECIFIC BAND OCEAN RANGE|m|3|0|31|m|3|10
+022190|specificBandSignificantWaveHeight|double|SPECIFIC BAND SIGNIFICANT WAVE HEIGHT|m|3|0|16|m|3|5
+022191|rmsOfSpecificBandOceanRange|double|RMS OF SPECIFIC BAND OCEAN RANGE|m|4|0|16|m|4|5
+023001|accidentEarlyNotificationArticleApplicable|table|ACCIDENT EARLY NOTIFICATION - ARTICLE APPLICABLE|CODE TABLE|0|0|3|CODE TABLE|0|1
+023002|facilityInvolvedInIncident|table|ACTIVITY OR FACILITY INVOLVED IN INCIDENT|CODE TABLE|0|0|5|CODE TABLE|0|2
+023003|releaseType|table|TYPE OF RELEASE|CODE TABLE|0|0|3|CODE TABLE|0|1
+023004|countermeasuresTakenNearBorder|table|COUNTERMEASURES TAKEN NEAR BORDER|CODE TABLE|0|0|3|CODE TABLE|0|1
+023005|causeOfIncident|table|CAUSE OF INCIDENT|CODE TABLE|0|0|2|CODE TABLE|0|1
+023006|incidentSituation|table|INCIDENT SITUATION|CODE TABLE|0|0|3|CODE TABLE|0|1
+023007|characteristicsOfRelease|table|CHARACTERISTICS OF RELEASE|CODE TABLE|0|0|3|CODE TABLE|0|1
+023008|stateOfCurrentRelease|table|STATE OF CURRENT RELEASE|CODE TABLE|0|0|2|CODE TABLE|0|1
+023009|stateOfExpectedRelease|table|STATE OF EXPECTED RELEASE|CODE TABLE|0|0|2|CODE TABLE|0|1
+023016|possibilityOfSignificantChemicalToxicHealthEffect|table|POSSIBILITY OF SIGNIFICANT CHEMICAL TOXIC HEALTH EFFECT|CODE TABLE|0|0|2|CODE TABLE|0|1
+023017|flowDischargeOfMajorRecipient|double|FLOW DISCHARGE OF MAJOR RECIPIENT|m3/s|6|0|20|m3/s|6|7
+023018|releaseBehaviourOverTime|table|RELEASE BEHAVIOUR OVER TIME|CODE TABLE|0|0|3|CODE TABLE|0|1
+023019|actualReleaseHeight|long|ACTUAL RELEASE HEIGHT|m|0|-15000|17|m|0|6
+023021|effectiveReleaseHeight|long|EFFECTIVE RELEASE HEIGHT|m|0|-15000|17|m|0|6
+023022|distanceOfReleasePointOrSiteOfIncident|long|DISTANCE OF RELEASE POINT OR SITE OF INCIDENT|m|0|0|24|m|0|8
+023023|mainTransportSpeedInAtmosphere|double|MAIN TRANSPORT SPEED IN THE ATMOSPHERE|m/s|1|0|12|m/s|1|4
+023024|mainTransportSpeedInWater|double|MAIN TRANSPORT SPEED IN WATER|m/s|2|0|13|m/s|2|4
+023025|mainTransportSpeedInGroundWater|double|MAIN TRANSPORT SPEED IN GROUND WATER|m/s|2|0|13|m/s|2|4
+023027|mainTransportDirectionInTheAtmosphere|long|MAIN TRANSPORT DIRECTION IN THE ATMOSPHERE|deg|0|0|9|deg|0|3
+023028|mainTransportDirectionInWater|long|MAIN TRANSPORT DIRECTION IN WATER|deg|0|0|9|deg|0|3
+023029|mainTransportDirectionInGroundWater|long|MAIN TRANSPORT DIRECTION IN GROUND WATER|deg|0|0|9|deg|0|3
+023031|possibilityPlume|table|POSSIBILITY THAT PLUME WILL ENCOUNTER PRECIPITATION IN STATE IN WHICH INCIDENT OCCURRED|CODE TABLE|0|0|2|CODE TABLE|0|1
+023032|plumeWillEncounterChangeInWindDirectionAndOrOrSpeedFlag|table|PLUME WILL ENCOUNTER CHANGE IN WIND DIRECTION AND/OR SPEED FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1
+023040|flowDischargeRiver|double|FLOW DISCHARGE - RIVER|m3/s|1|0|22|m3/s|1|7
+023041|flowDischargeWell|double|FLOW DISCHARGE - WELL|m3/s|3|0|16|m3/s|3|5
+024001|estimateOfAmountOfRadioactivityReleasedUpToSpecifiedTime|long|ESTIMATE OF AMOUNT OF RADIOACTIVITY RELEASED UP TO SPECIFIED TIME|Bq|-11|0|28|Bq|-11|9
+024002|estimatedMaximumPotentialRelease|long|ESTIMATED MAXIMUM POTENTIAL RELEASE|Bq|-11|0|28|Bq|-11|9
+024003|compositionOfRelease|table|COMPOSITION OF RELEASE|CODE TABLE|0|0|5|CODE TABLE|0|2
+024004|elementName|string|ELEMENT NAME|CCITT IA5|0|0|16|Character|0|2
+024005|isotopeMass|long|ISOTOPE MASS|Numeric|0|0|9|Numeric|0|3
+024011|dose|double|DOSE|mSv|2|0|32|mSv|2|10
+024012|trajectoryDoseDefinedLocationAndExpectedTimeOfArrival|double|TRAJECTORY DOSE (DEFINED LOCATION AND EXPECTED TIME OF ARRIVAL)|mSv|2|0|32|mSv|2|10
+024013|gammaDoseInAirAlongMainTransportPathDefinedLocationAndTimePeriod|double|GAMMA DOSE IN AIR ALONG THE MAIN TRANSPORT PATH (DEFINED LOCATION AND TIME PERIOD)|mSv|2|0|32|mSv|2|10
+024014|gammaRadiationDoseRate|double|GAMMA RADIATION DOSE RATE|nSv/h|1|0|14|nSv/h|1|4
+024021|airConcentrationOfNamedIsotopeTypeIncludingGrossBeta|double|AIR CONCENTRATION (OF NAMED ISOTOPE TYPE INCLUDING GROSS BETA)|Bq m-3|2|0|32|Bq m-3|2|10
+024022|concentrationInPrecipitationOfNamedIsotopeType|double|CONCENTRATION IN PRECIPITATION (OF NAMED ISOTOPE TYPE)|Bq/l|2|0|32|Bq/l|2|10
+024023|pulseRateOfBetaRadiation|double|PULSE RATE OF BETA RADIATION|/s|1|0|14|/s|1|4
+024024|pulseRateOfGammaRadiation|double|PULSE RATE OF GAMMA RADIATION|/s|1|0|14|/s|1|4
+025001|rangeGateLength|long|RANGE-GATE LENGTH|m|-1|0|6|m|-1|2
+025002|numberOfGatesAveraged|long|NUMBER OF GATES AVERAGED|Numeric|0|0|4|Numeric|0|2
+025003|numberOfIntegratedPulses|long|NUMBER OF INTEGRATED PULSES|Numeric|0|0|8|Numeric|0|3
+025004|echoProcessing|table|ECHO PROCESSING|CODE TABLE|0|0|2|CODE TABLE|0|1
+025005|echoIntegration|table|ECHO INTEGRATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+025006|zToRConversion|table|Z TO R CONVERSION|CODE TABLE|0|0|3|CODE TABLE|0|1
+025007|zToRConversionFactor|long|Z TO R CONVERSION FACTOR|Numeric|0|0|12|Numeric|0|4
+025008|zToRConversionExponent|long|Z TO R CONVERSION EXPONENT|Numeric|2|0|9|Numeric|2|3
+025009|calibrationMethod|flag|CALIBRATION METHOD|FLAG TABLE|0|0|4|FLAG TABLE|0|2
+025010|clutterTreatment|table|CLUTTER TREATMENT|CODE TABLE|0|0|4|CODE TABLE|0|2
+025011|groundOccultationCorrectionScreening|table|GROUND OCCULTATION CORRECTION (SCREENING)|CODE TABLE|0|0|2|CODE TABLE|0|1
+025012|rangeAttenuationCorrection|table|RANGE ATTENUATION CORRECTION|CODE TABLE|0|0|2|CODE TABLE|0|1
+025013|brightBandCorrection|flag|BRIGHT-BAND CORRECTION|FLAG TABLE|0|0|2|FLAG TABLE|0|1
+025014|azimuthClutterCutOff|long|AZIMUTH CLUTTER CUT-OFF|Numeric|0|0|12|Numeric|0|4
+025015|radomeAttenuationCorrection|flag|RADOME ATTENUATION CORRECTION|FLAG TABLE|0|0|2|FLAG TABLE|0|1
+025016|clearAirAttenuationCorrection|double|CLEAR-AIR ATTENUATION CORRECTION|dB/m|5|0|6|dB/m|5|2
+025017|precipitationAttenuationCorrection|flag|PRECIPITATION ATTENUATION CORRECTION|FLAG TABLE|0|0|2|FLAG TABLE|0|1
+025018|aToZLawForAttenuationFactor|long|A TO Z LAW FOR ATTENUATION FACTOR|Numeric|7|0|6|Numeric|7|2
+025019|aToZLawForAttenuationExponent|long|A TO Z LAW FOR ATTENUATION EXPONENT|Numeric|2|0|7|Numeric|2|3
+025020|meanSpeedEstimation|table|MEAN SPEED ESTIMATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+025021|windComputationEnhancement|flag|WIND COMPUTATION ENHANCEMENT|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+025022|ghrsstRejectionFlag|flag|GHRSST* REJECTION FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+025023|ghrsstConfidenceFlag|flag|GHRSST CONFIDENCE FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+025024|ghrsstDataQuality|table|GHRSST DATA QUALITY|CODE TABLE|0|0|4|CODE TABLE|0|2
+025025|batteryVoltage|double|BATTERY VOLTAGE|V|1|0|9|V|1|3
+025026|batteryVoltageLargeRange|double|BATTERY VOLTAGE (LARGE RANGE)|V|1|0|12|V|1|4
+025028|operatorOrManufacturerDefinedParameter|long|OPERATOR OR MANUFACTURER DEFINED PARAMETER|Numeric|1|-16384|15|Numeric|1|5
+025029|calibrationMethod|flag|CALIBRATION METHOD|FLAG TABLE|0|0|6|FLAG TABLE|0|2
+025030|runningMeanSeaSurfaceTemperatureUsage|table|RUNNING MEAN SEA-SURFACE TEMPERATURE USAGE|CODE TABLE|0|0|2|CODE TABLE|0|1
+025031|nwpGeneratedVerticalProfileThinningMethod|table|NWP-GENERATED VERTICAL PROFILE THINNING METHOD|CODE TABLE|0|0|3|CODE TABLE|0|1
+025032|windProfilerModeInformation|table|WIND PROFILER MODE INFORMATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+025033|windProfilerSubmodeInformation|table|WIND PROFILER SUBMODE INFORMATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+025034|windProfilerQualityControlTestResults|flag|WIND PROFILER QUALITY CONTROL TEST RESULTS|FLAG TABLE|0|0|4|FLAG TABLE|0|2
+025035|decisionMethodForPolarity|table|DECISION METHOD FOR POLARITY|CODE TABLE|0|0|3|CODE TABLE|0|1
+025036|atmosphericsLocationMethod|table|ATMOSPHERICS LOCATION METHOD|CODE TABLE|0|0|4|CODE TABLE|0|2
+025037|sstBias|double|SST BIAS|K|2|-127|8|K|2|3
+025038|differenceBetweenSstAndAnalysis|double|DIFFERENCE BETWEEN SST AND ANALYSIS|K|1|-127|8|K|1|3
+025040|co2WindProductDerivation|table|CO2 WIND PRODUCT DERIVATION|CODE TABLE|0|0|4|CODE TABLE|0|2
+025041|movingPlatformDirectionReportingMethod|table|MOVING PLATFORM DIRECTION REPORTING METHOD|CODE TABLE|0|0|2|CODE TABLE|0|1
+025042|movingPlatformSpeedReportingMethod|table|MOVING PLATFORM SPEED REPORTING METHOD|CODE TABLE|0|0|2|CODE TABLE|0|1
+025043|waveSamplingIntervalTime|double|WAVE SAMPLING INTERVAL (TIME)|s|4|0|15|s|4|5
+025044|waveSamplingIntervalSpace|double|WAVE SAMPLING INTERVAL (SPACE)|m|2|0|14|m|2|5
+025045|hirsChannelCombination|flag|HIRS CHANNEL COMBINATION|FLAG TABLE|0|0|21|FLAG TABLE|0|7
+025046|msuChannelCombination|flag|MSU CHANNEL COMBINATION|FLAG TABLE|0|0|5|FLAG TABLE|0|2
+025047|ssuChannelCombination|flag|SSU CHANNEL COMBINATION|FLAG TABLE|0|0|4|FLAG TABLE|0|2
+025048|amsuAChannelCombination|flag|AMSU-A CHANNEL COMBINATION|FLAG TABLE|0|0|16|FLAG TABLE|0|6
+025049|amsuBChannelCombination|flag|AMSU-B CHANNEL COMBINATION|FLAG TABLE|0|0|6|FLAG TABLE|0|2
+025050|principalComponentScore|long|PRINCIPAL COMPONENT SCORE|Numeric|4|-131072|18|Numeric|4|6
+025051|avhrrChannelCombination|flag|AVHRR CHANNEL COMBINATION|FLAG TABLE|0|0|7|FLAG TABLE|0|3
+025052|log10OfPrincipalComponentsNormalizedFitToData|long|LOG10 OF PRINCIPAL COMPONENTS NORMALIZED FIT TO DATA|Numeric|4|0|15|Numeric|4|5
+025053|observationQuality|flag|OBSERVATION QUALITY|FLAG TABLE|0|0|12|FLAG TABLE|0|4
+025054|ssmisSubframeIdNumber|long|SSMIS SUBFRAME ID NUMBER|Numeric|0|0|5|Numeric|0|2
+025055|multiplexerHousekeeping|double|MULTIPLEXER HOUSEKEEPING|K|2|0|16|K|2|5
+025060|softwareIdentification|long|SOFTWARE IDENTIFICATION|Numeric|0|0|14|Numeric|0|5
+025061|softwareVersionNumber|string|SOFTWARE IDENTIFICATION AND VERSION NUMBER|CCITT IA5|0|0|96|Character|0|12
+025062|databaseIdentification|long|DATABASE IDENTIFICATION|Numeric|0|0|14|Numeric|0|5
+025063|SystemIdentifier|table|CENTRAL PROCESSOR OR SYSTEM IDENTIFIER|CODE TABLE|0|0|8|CODE TABLE|0|3
+025065|orientationCorrectionAzimuth|double|ORIENTATION CORRECTION (AZIMUTH)|deg|2|-1000|11|deg|2|4
+025066|orientationCorrectionElevation|double|ORIENTATION CORRECTION (ELEVATION)|deg|2|-1000|11|deg|2|4
+025067|radiosondeReleasePointPressureCorrection|long|RADIOSONDE RELEASE POINT PRESSURE CORRECTION|Pa|0|-8000|14|Pa|0|4
+025068|numberOfArchiveRecomputes|long|NUMBER OF ARCHIVE RECOMPUTES|Numeric|0|0|7|Numeric|0|3
+025069|flightLevelPressureCorrections|flag|FLIGHT LEVEL PRESSURE CORRECTIONS|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+025070|majorFrameCount|long|MAJOR FRAME COUNT|Numeric|0|0|4|Numeric|0|2
+025071|frameCount|long|FRAME COUNT|Numeric|0|0|5|Numeric|0|2
+025075|satelliteAntennaCorrectionsVersionNumber|long|SATELLITE ANTENNA CORRECTIONS VERSION NUMBER|Numeric|0|0|5|Numeric|0|2
+025076|log10OfTemperatureRadianceCentralWaveNumberForAtovs|double|LOG10 OF (TEMPERATURE-RADIANCE CENTRAL WAVE NUMBER) FOR ATOVS|log (m-1)|8|0|30|log (m-1)|8|10
+025077|bandwidthCorrectionCoefficient1ForAtovs|long|BANDWIDTH CORRECTION COEFFICIENT 1 FOR ATOVS|Numeric|5|-100000|18|Numeric|5|7
+025078|bandwidthCorrectionCoefficient2ForAtovs|long|BANDWIDTH CORRECTION COEFFICIENT 2 FOR ATOVS|Numeric|5|0|17|Numeric|5|6
+025079|albedoRadianceSolarFilteredIrradianceForAtovs|double|ALBEDO-RADIANCE SOLAR FILTERED IRRADIANCE FOR ATOVS|W m-2|4|0|24|W m-2|4|8
+025080|albedoRadianceEquivalentFilterWidthForAtovs|double|ALBEDO-RADIANCE EQUIVALENT FILTER WIDTH FOR ATOVS|m|10|0|14|m|10|5
+025081|incidenceAngle|double|INCIDENCE ANGLE|deg|3|0|17|deg|3|6
+025082|azimuthAngle|double|AZIMUTH ANGLE|deg|3|0|19|deg|3|6
+025083|faradayRotationalAngle|double|FARADAY ROTATIONAL ANGLE|deg|3|0|19|deg|3|6
+025084|geometricRotationalAngle|double|GEOMETRIC ROTATIONAL ANGLE|deg|5|0|26|deg|5|8
+025085|fractionOfClearPixelsInHirsFov|long|FRACTION OF CLEAR PIXELS IN HIRS FOV|Numeric|0|0|7|Numeric|0|3
+025086|depthCorrectionIndicator|table|DEPTH CORRECTION INDICATOR|CODE TABLE|0|0|2|CODE TABLE|0|1
+025090|orbitStateFlag|table|ORBIT STATE FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2
+025091|structureConstantOfRefractionIndexCn2|double|STRUCTURE CONSTANT OF THE REFRACTION INDEX (CN2)|dB|3|-18192|13|dB|3|5
+025092|acousticPropagationVelocity|double|ACOUSTIC PROPAGATION VELOCITY|m/s|2|28000|14|m/s|2|5
+025093|rassComputationCorrection|flag|RASS COMPUTATION CORRECTION|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+025095|altimeterStateFlag|flag|ALTIMETER STATE FLAG|FLAG TABLE|0|0|2|FLAG TABLE|0|1
+025096|radiometerStateFlag|flag|RADIOMETER STATE FLAG|FLAG TABLE|0|0|5|FLAG TABLE|0|2
+025097|threeDimensionalErrorEstimateOfNavigatorOrbit|table|THREE-DIMENSIONAL ERROR ESTIMATE OF THE NAVIGATOR ORBIT|CODE TABLE|0|0|4|CODE TABLE|0|2
+025098|altimeterDataQualityFlag|flag|ALTIMETER DATA QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+025099|altimeterCorrectionQualityFlag|flag|ALTIMETER CORRECTION QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+025100|xbtOrXctdFallRateEquationCoefficientA|long|XBT/XCTD FALL RATE EQUATION COEFFICIENT A|Numeric|5|0|20|Numeric|5|6
+025101|xbtOrXctdFallRateEquationCoefficientB|long|XBT/XCTD FALL RATE EQUATION COEFFICIENT B|Numeric|5|-500000|21|Numeric|5|6
+025102|numberOfMissingLinesExcludingDataGaps|long|NUMBER OF MISSING LINES EXCLUDING DATA GAPS|Numeric|0|0|8|Numeric|0|3
+025103|numberOfDirectionalBins|long|NUMBER OF DIRECTIONAL BINS|Numeric|0|0|8|Numeric|0|3
+025104|numberOfWavelengthBins|long|NUMBER OF WAVELENGTH BINS|Numeric|0|0|8|Numeric|0|3
+025105|firstDirectionalBin|double|FIRST DIRECTIONAL BIN|deg|3|0|19|deg|3|6
+025106|directionalBinStep|double|DIRECTIONAL BIN STEP|deg|3|0|19|deg|3|6
+025107|firstWavelengthBin|double|FIRST WAVELENGTH BIN|m|3|0|29|m|3|9
+025108|lastWavelengthBin|double|LAST WAVELENGTH BIN|m|3|0|29|m|3|9
+025110|imageProcessingSummary|flag|IMAGE PROCESSING SUMMARY|FLAG TABLE|0|0|10|FLAG TABLE|0|4
+025111|numberOfInputDataGaps|long|NUMBER OF INPUT DATA GAPS|Numeric|0|0|8|Numeric|0|3
+025112|bandSpecificAltimeterDataQualityFlag|flag|BAND SPECIFIC ALTIMETER DATA QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+025113|bandSpecificAltimeterCorrectionQualityFlag|flag|BAND SPECIFIC ALTIMETER CORRECTION QUALITY FLAG|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+025120|ra2L2ProcessingFlag|table|RA2-L2-PROCESSING FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1
+025121|ra2L2ProcessingQuality|long|RA2-L2-PROCESSING QUALITY|%|0|0|7|%|0|3
+025122|hardwareConfigurationForRf|table|HARDWARE CONFIGURATION FOR RF|CODE TABLE|0|0|2|CODE TABLE|0|1
+025123|hardwareConfigurationForHpa|table|HARDWARE CONFIGURATION FOR HPA|CODE TABLE|0|0|2|CODE TABLE|0|1
+025124|mwrL2ProcessingFlag|table|MWR-L2-PROCESSING FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1
+025125|mwrL2ProcessingQuality|long|MWR-L2-PROCESSING QUALITY|%|0|0|7|%|0|3
+025126|modelDryTroposphericCorrection|double|MODEL DRY TROPOSPHERIC CORRECTION|m|3|-32768|16|m|3|5
+025127|invertedBarometerCorrection|double|INVERTED BAROMETER CORRECTION|m|3|-32768|16|m|3|5
+025128|modelWetTroposphericCorrection|double|MODEL WET TROPOSPHERIC CORRECTION|m|3|-32768|16|m|3|5
+025129|mwrDerivedWetTroposphericCorrection|double|MWR DERIVED WET TROPOSPHERIC CORRECTION|m|3|-32768|16|m|3|5
+025130|ra2IonosphericCorrectionOnKuBand|double|RA2 IONOSPHERIC CORRECTION ON KU BAND|m|3|-32768|16|m|3|5
+025131|ionosphericCorrectionFromDorisOnKuBand|double|IONOSPHERIC CORRECTION FROM DORIS ON KU BAND|m|3|-32768|16|m|3|5
+025132|ionosphericCorrectionFromModelOnKuBand|double|IONOSPHERIC CORRECTION FROM MODEL ON KU BAND|m|3|-32768|16|m|3|5
+025133|seaStateBiasCorrectionOnKuBand|double|SEA STATE BIAS CORRECTION ON KU BAND|m|3|-32768|16|m|3|5
+025134|ra2IonosphericCorrectionOnSBand|double|RA2 IONOSPHERIC CORRECTION ON S BAND|m|3|-32768|16|m|3|5
+025135|ionosphericCorrectionFromDorisOnSBand|double|IONOSPHERIC CORRECTION FROM DORIS ON S BAND|m|3|-32768|16|m|3|5
+025136|ionosphericCorrectionFromModelOnSBand|double|IONOSPHERIC CORRECTION FROM MODEL ON S BAND|m|3|-32768|16|m|3|5
+025137|seaStateBiasCorrectionOnSBand|double|SEA STATE BIAS CORRECTION ON S BAND|m|3|-32768|16|m|3|5
+025138|averageSignalToNoiseRatio|long|AVERAGE SIGNAL-TO-NOISE RATIO|Numeric|0|-2048|12|Numeric|0|4
+025140|startChannel|long|START CHANNEL|Numeric|0|0|14|Numeric|0|5
+025141|endChannel|long|END CHANNEL|Numeric|0|0|14|Numeric|0|5
+025142|channelScaleFactor|long|CHANNEL SCALE FACTOR|Numeric|0|0|6|Numeric|0|2
+025143|linearCoefficient|long|LINEAR COEFFICIENT|Numeric|6|-5000000|24|Numeric|6|8
+025150|methodOfTropicalCycloneIntensityAnalysisUsingSatelliteData|table|METHOD OF TROPICAL CYCLONE INTENSITY ANALYSIS USING SATELLITE DATA|CODE TABLE|0|0|4|CODE TABLE|0|2
+025160|kuBandNetInstrumentalCorrection|double|KU BAND NET INSTRUMENTAL CORRECTION|m|4|-120000|18|m|4|6
+025161|cBandNetInstrumentalCorrection|double|C BAND NET INSTRUMENTAL CORRECTION|m|4|-120000|18|m|4|6
+025162|seaStateBiasCorrectionOnCBand|double|SEA STATE BIAS CORRECTION ON C BAND|m|4|-6000|13|m|4|4
+025163|altimeterIonosphericCorrectionOnKuBand|double|ALTIMETER IONOSPHERIC CORRECTION ON KU BAND|m|3|-32768|16|m|3|5
+025164|radiometerWetTroposphericCorrection|double|RADIOMETER WET TROPOSPHERIC CORRECTION|m|4|-5000|13|m|4|4
+025165|ionosphericCorrectionFromModelOnSpecificBand|double|IONOSPHERIC CORRECTION FROM MODEL ON SPECIFIC BAND|m|4|-32768|16|m|4|5
+025166|seaStateBiasCorrectionOnSpecificBand|double|SEA STATE BIAS CORRECTION ON SPECIFIC BAND|m|4|-32768|16|m|4|5
+025167|specificBandNetInstrumentalCorrection|double|SPECIFIC BAND NET INSTRUMENTAL CORRECTION|m|4|-120000|18|m|4|6
+025170|samplingIntervalTime|long|SAMPLING INTERVAL (TIME)|s|0|0|10|s|0|4
+025171|sampleAveragingPeriod|long|SAMPLE AVERAGING PERIOD|s|0|0|10|s|0|4
+025172|numberOfSamples|long|NUMBER OF SAMPLES|Numeric|0|0|10|Numeric|0|4
+025174|smosInformationFlag|flag|SMOS INFORMATION FLAG|FLAG TABLE|0|0|14|FLAG TABLE|0|5
+025175|modifiedResidual|long|MODIFIED RESIDUAL|Numeric|2|0|13|Numeric|2|4
+025180|lrmPercent|double|LRM* PER CENT|%|2|0|16|%|2|5
+025181|l2ProcessingFlag|table|L2 PROCESSING FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1
+025182|l1ProcessingFlag|table|L1 PROCESSING FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1
+025183|l1ProcessingQuality|double|L1 PROCESSING QUALITY|%|2|0|14|%|2|5
+025184|l2ProductStatus|table|L2 PRODUCT STATUS|CODE TABLE|0|0|2|CODE TABLE|0|1
+025187|confidenceFlag|table|CONFIDENCE FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2
+026001|principalTimeOfDailyReadingInUtcOfMaximumTemperature|double|PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE|h|1|0|12|h|1|3
+026002|principalTimeOfDailyReadingInUtcOfMinimumTemperature|double|PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE|h|1|0|12|h|1|3
+026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
+026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
+026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
+026021|nonCoordinateYear|long|YEAR|a|0|0|12|a|0|4
+026022|nonCoordinateMonth|long|MONTH|mon|0|0|4|mon|0|2
+026023|nonCoordinateDay|long|DAY|d|0|0|6|d|0|2
+026030|measurementIntegrationTime|double|MEASUREMENT INTEGRATION TIME|s|2|0|8|s|2|3
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
+027020|satelliteLocationCounter|long|SATELLITE LOCATION COUNTER|Numeric|0|0|16|Numeric|0|5
+027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
+027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
+027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
+028031|DistanceFromEarthCentreInDirection90DegreesEast|double|IN DIRECTION 90 DEGREES EAST, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
+029001|projectionType|table|PROJECTION TYPE|CODE TABLE|0|0|3|CODE TABLE|0|1
+029002|coordinateGridType|table|COORDINATE GRID TYPE|CODE TABLE|0|0|3|CODE TABLE|0|1
+030001|pixelValue4Bits|long|PIXEL VALUE (4 BITS)|Numeric|0|0|4|Numeric|0|2
+030002|pixelValue8Bits|long|PIXEL VALUE (8 BITS)|Numeric|0|0|8|Numeric|0|3
+030004|pixelValue16Bits|long|PIXEL VALUE (16 BITS)|Numeric|0|0|16|Numeric|0|5
+030010|numberOfGridPoints|long|NUMBER OF GRID POINTS|Numeric|0|0|13|Numeric|0|4
+030021|numberOfPixelsPerRow|long|NUMBER OF PIXELS PER ROW|Numeric|0|0|12|Numeric|0|4
+030022|numberOfPixelsPerColumn|long|NUMBER OF PIXELS PER COLUMN|Numeric|0|0|12|Numeric|0|4
+030031|pictureType|table|PICTURE TYPE|CODE TABLE|0|0|4|CODE TABLE|0|2
+030032|combinationWithOtherData|flag|COMBINATION WITH OTHER DATA|FLAG TABLE|0|0|16|FLAG TABLE|0|6
+030033|numberOfBinsAlongRadial|long|NUMBER OF BINS ALONG THE RADIAL|Numeric|0|0|12|Numeric|0|4
+030034|numberOfAzimuths|long|NUMBER OF AZIMUTHS|Numeric|0|0|12|Numeric|0|4
+031000|shortDelayedDescriptorReplicationFactor|long|SHORT DELAYED DESCRIPTOR REPLICATION FACTOR|Numeric|0|0|1|NA|0|0
+031001|delayedDescriptorReplicationFactor|long|DELAYED DESCRIPTOR REPLICATION FACTOR|Numeric|0|0|8|NA|0|0
+031002|extendedDelayedDescriptorReplicationFactor|long|EXTENDED DELAYED DESCRIPTOR REPLICATION FACTOR|Numeric|0|0|16|NA|0|0
+031011|delayedDescriptorAndDataRepetitionFactor|long|DELAYED DESCRIPTOR AND DATA REPETITION FACTOR|Numeric|0|0|8|NA|0|0
+031012|extendedDelayedDescriptorAndDataRepetitionFactor|long|EXTENDED DELAYED DESCRIPTOR AND DATA REPETITION FACTOR|Numeric|0|0|16|NA|0|0
+031021|associatedFieldSignificance|table|ASSOCIATED FIELD SIGNIFICANCE|CODE TABLE|0|0|6|NA|0|0
+031031|dataPresentIndicator|flag|DATA PRESENT INDICATOR|FLAG TABLE|0|0|1|NA|0|0
+033002|qualityInformation|table|QUALITY INFORMATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+033003|qualityInformation|table|QUALITY INFORMATION|CODE TABLE|0|0|3|CODE TABLE|0|1
+033005|qualityInformationAwsData|flag|QUALITY INFORMATION (AWS DATA)|FLAG TABLE|0|0|30|FLAG TABLE|0|10
+033006|internalMeasurementStatusInformationAws|table|INTERNAL MEASUREMENT STATUS INFORMATION (AWS)|CODE TABLE|0|0|3|CODE TABLE|0|1
+033007|percentConfidence|long|PER CENT CONFIDENCE|%|0|0|7|%|0|3
+033015|dataQualityCheckIndicator|table|DATA QUALITY-CHECK INDICATOR|CODE TABLE|0|0|6|CODE TABLE|0|2
+033020|qualityControlIndicationOfFollowingValue|table|QUALITY CONTROL INDICATION OF FOLLOWING VALUE|CODE TABLE|0|0|3|CODE TABLE|0|1
+033021|qualityOfFollowingValue|table|QUALITY OF FOLLOWING VALUE|CODE TABLE|0|0|2|CODE TABLE|0|1
+033022|qualityOfBuoySatelliteTransmission|table|QUALITY OF BUOY SATELLITE TRANSMISSION|CODE TABLE|0|0|2|CODE TABLE|0|1
+033023|qualityOfBuoyLocation|table|QUALITY OF BUOY LOCATION|CODE TABLE|0|0|2|CODE TABLE|0|1
+033024|stationElevationQualityMarkForMobileStations|table|STATION ELEVATION QUALITY MARK (FOR MOBILE STATIONS)|CODE TABLE|0|0|4|CODE TABLE|0|2
+033025|acarsInterpolatedValuesIndicator|table|ACARS INTERPOLATED VALUES INDICATOR|CODE TABLE|0|0|3|CODE TABLE|0|1
+033026|moistureQuality|table|MOISTURE QUALITY|CODE TABLE|0|0|6|CODE TABLE|0|2
+033027|locationQualityClassRangeOfRadiusOf66Confidence|table|LOCATION QUALITY CLASS (RANGE OF RADIUS OF 66 % CONFIDENCE)|CODE TABLE|0|0|3|CODE TABLE|0|1
+033028|snapshotOverallQuality|table|SNAPSHOT OVERALL QUALITY|CODE TABLE|0|0|3|CODE TABLE|0|1
+033030|scanLineStatusFlagsForAtovs|flag|SCAN LINE STATUS FLAGS FOR ATOVS|FLAG TABLE|0|0|24|FLAG TABLE|0|8
+033031|scanLineQualityFlagsForAtovs|flag|SCAN LINE QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|24|FLAG TABLE|0|8
+033032|channelQualityFlagsForAtovs|flag|CHANNEL QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|24|FLAG TABLE|0|8
+033033|fieldOfViewQualityFlagsForAtovs|flag|FIELD OF VIEW QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|24|FLAG TABLE|0|8
+033035|qualityControl|table|MANUAL/AUTOMATIC QUALITY CONTROL|CODE TABLE|0|0|4|CODE TABLE|0|2
+033036|nominalConfidenceThreshold|long|NOMINAL CONFIDENCE THRESHOLD|%|0|0|7|%|0|3
+033037|windCorrelationError|flag|WIND CORRELATION ERROR|FLAG TABLE|0|0|20|FLAG TABLE|0|7
+033038|qualityFlagsForGroundBasedGnssData|flag|QUALITY FLAGS FOR GROUND-BASED GNSS DATA|FLAG TABLE|0|0|10|FLAG TABLE|0|4
+033039|radioOccultationDataQualityFlags|flag|QUALITY FLAGS FOR RADIO OCCULTATION DATA|FLAG TABLE|0|0|16|FLAG TABLE|0|6
+033040|confidenceInterval|long|CONFIDENCE INTERVAL|%|0|0|7|%|0|3
+033041|attributeOfFollowingValue|table|ATTRIBUTE OF FOLLOWING VALUE|CODE TABLE|0|0|2|CODE TABLE|0|1
+033042|typeOfLimitRepresentedByFollowingValue|table|TYPE OF LIMIT REPRESENTED BY FOLLOWING VALUE|CODE TABLE|0|0|3|CODE TABLE|0|1
+033043|astConfidence|flag|AST CONFIDENCE|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+033044|asarQualityInformation|flag|ASAR QUALITY INFORMATION|FLAG TABLE|0|0|15|FLAG TABLE|0|5
+033045|probabilityOfFollowingEvent|long|PROBABILITY OF FOLLOWING EVENT|%|0|0|7|%|0|3
+033046|conditionalProbability|long|CONDITIONAL PROBABILITY OF FOLLOWING EVENT WITH RESPECT TO SPECIFIED CONDITIONING EVENT|%|0|0|7|%|0|3
+033047|measurementConfidenceData|flag|MEASUREMENT CONFIDENCE DATA|FLAG TABLE|0|0|31|FLAG TABLE|0|11
+033048|confidenceMeasureOfSarInversion|table|CONFIDENCE MEASURE OF SAR INVERSION|CODE TABLE|0|0|2|CODE TABLE|0|1
+033049|confidenceMeasureOfWindRetrieval|table|CONFIDENCE MEASURE OF WIND RETRIEVAL|CODE TABLE|0|0|2|CODE TABLE|0|1
+033050|globalGtsppQualityFlag|table|GLOBAL GTSPP QUALITY FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2
+033052|sBandOceanRetrackingQuality|flag|S BAND OCEAN RETRACKING QUALITY|FLAG TABLE|0|0|21|FLAG TABLE|0|7
+033053|kuBandOceanRetrackingQuality|flag|KU BAND OCEAN RETRACKING QUALITY|FLAG TABLE|0|0|21|FLAG TABLE|0|7
+033060|gqisFlagQual|table|GQISFLAGQUAL - INDIVIDUAL IASI-SYSTEM QUALITY FLAG|CODE TABLE|0|0|2|CODE TABLE|0|1
+033061|gqisQualIndex|long|GQISQUALINDEX - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE (CONTRIBUTIONS FROM SPECTRAL AND RADIOMETRIC CALIBRATION)|%|0|0|7|%|0|3
+033062|gqisQualIndexLoc|long|GQISQUALINDEXLOC - INDICATOR FOR GEOMETRIC QUALITY INDEX|%|0|0|7|%|0|3
+033063|gqisQualIndexRad|long|GQISQUALINDEXRAD - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE (CONTRIBUTIONS FROM RADIOMETRIC CALIBRATION)|%|0|0|7|%|0|3
+033064|gqisQualIndexSpect|long|GQISQUALINDEXSPECT - INDICATOR FOR INSTRUMENT NOISE PERFORMANCE (CONTRIBUTIONS FROM SPECTRAL CALIBRATION)|%|0|0|7|%|0|3
+033065|gqisSysTecQual|long|GQISSYSTECSONDQUAL - OUTPUT OF SYSTEM TEC (TECHNICAL EXPERTISE CENTRE) QUALITY FUNCTION|Numeric|0|0|24|Numeric|0|8
+033070|totalOzoneQuality|table|TOTAL OZONE QUALITY|CODE TABLE|0|0|4|CODE TABLE|0|2
+033071|profileOzoneQuality|table|PROFILE OZONE QUALITY|CODE TABLE|0|0|4|CODE TABLE|0|2
+033072|ozoneError|table|OZONE ERROR|CODE TABLE|0|0|5|CODE TABLE|0|2
+033075|scanLevelQualityFlags|flag|SCAN-LEVEL QUALITY FLAGS|FLAG TABLE|0|0|13|FLAG TABLE|0|5
+033076|calibrationQualityFlags|flag|CALIBRATION QUALITY FLAGS|FLAG TABLE|0|0|9|FLAG TABLE|0|3
+033077|fieldOfViewQualityFlags|flag|FIELD-OF-VIEW QUALITY FLAGS|FLAG TABLE|0|0|19|FLAG TABLE|0|7
+033078|geolocationQuality|table|GEOLOCATION QUALITY|CODE TABLE|0|0|4|CODE TABLE|0|2
+033079|granuleLevelQualityFlags|flag|GRANULE LEVEL QUALITY FLAGS|FLAG TABLE|0|0|16|FLAG TABLE|0|6
+033080|scanLevelQualityFlags|flag|SCAN LEVEL QUALITY FLAGS|FLAG TABLE|0|0|20|FLAG TABLE|0|7
+033081|channelDataQualityFlags|flag|CHANNEL DATA QUALITY FLAGS|FLAG TABLE|0|0|12|FLAG TABLE|0|4
+033082|geolocationQualityFlags|flag|GEOLOCATION QUALITY FLAGS|FLAG TABLE|0|0|16|FLAG TABLE|0|6
+033083|radianceDataQualityFlags|flag|RADIANCE DATA QUALITY FLAGS|FLAG TABLE|0|0|16|FLAG TABLE|0|6
+033084|pixelLevelQualityFlags|flag|PIXEL LEVEL QUALITY FLAGS|FLAG TABLE|0|0|16|FLAG TABLE|0|6
+033085|aerosolOpticalThicknessQualityFlags|flag|AEROSOL OPTICAL THICKNESS QUALITY FLAGS|FLAG TABLE|0|0|18|FLAG TABLE|0|6
+033086|qualityOfPixelLevelRetrieval|table|QUALITY OF PIXEL LEVEL RETRIEVAL|CODE TABLE|0|0|3|CODE TABLE|0|1
+033087|extentOfSatelliteWithinSouthAtlanticAnomalyBasedOnClimatologicalData|table|EXTENT OF SATELLITE WITHIN SOUTH ATLANTIC ANOMALY (BASED ON CLIMATOLOGICAL DATA)|CODE TABLE|0|0|4|CODE TABLE|0|1
+033088|ozoneTotalColumnQualityFlag|flag|OZONE TOTAL COLUMN QUALITY FLAG|FLAG TABLE|0|0|18|FLAG TABLE|0|6
+033089|noiseEquivalentDeltaTemperatureNedtQualityIndicatorsForWarmTargetCalibration|double|NOISE EQUIVALENT DELTA TEMPERATURE (NEDT) QUALITY INDICATORS FOR WARM TARGET CALIBRATION|K|2|0|12|K|2|4
+033090|nedtQualityIndicatorsForColdTargetCalibration|double|NEDT QUALITY INDICATORS FOR COLD TARGET CALIBRATION|K|2|0|12|K|2|4
+033091|nedtQualityIndicatorsForOverallCalibration|double|NEDT QUALITY INDICATORS FOR OVERALL CALIBRATION|K|2|0|12|K|2|4
+035000|fmAndRegionalCodeNumber|table|FM AND REGIONAL CODE NUMBER|CODE TABLE|0|0|10|CODE TABLE|0|3
+035001|timeFrameForMonitoring|table|TIME FRAME FOR MONITORING|CODE TABLE|0|0|3|CODE TABLE|0|1
+035011|numberOfReportsActuallyReceived|long|NUMBER OF REPORTS ACTUALLY RECEIVED|Numeric|0|0|14|Numeric|0|4
+035021|bulletinBeingMonitoredTtaaii|string|BULLETIN BEING MONITORED (TTAAII)|CCITT IA5|0|0|48|Character|0|6
+035022|bulletinBeingMonitoredYygggg|string|BULLETIN BEING MONITORED (YYGGGG)|CCITT IA5|0|0|48|Character|0|6
+035023|bulletinBeingMonitoredCccc|string|BULLETIN BEING MONITORED (CCCC)|CCITT IA5|0|0|32|Character|0|4
+035024|bulletinBeingMonitoredBbb|string|BULLETIN BEING MONITORED (BBB)|CCITT IA5|0|0|24|Character|0|3
+035030|discrepanciesInAvailabilityOfExpectedData|table|DISCREPANCIES IN THE AVAILABILITY OF EXPECTED DATA|CODE TABLE|0|0|4|CODE TABLE|0|1
+035031|qualifierOnMonitoringResults|table|QUALIFIER ON MONITORING RESULTS|CODE TABLE|0|0|7|CODE TABLE|0|2
+035032|causeOfMissingData|table|CAUSE OF MISSING DATA|CODE TABLE|0|0|4|CODE TABLE|0|1
+035033|observationAndCollectionDeficiencies|table|OBSERVATION AND COLLECTION DEFICIENCIES|CODE TABLE|0|0|7|CODE TABLE|0|2
+035034|statisticalTrendsForAvailabilityOfDataDuringSurveyPeriods|table|STATISTICAL TRENDS FOR AVAILABILITY OF DATA (DURING THE SURVEY PERIOD(S))|CODE TABLE|0|0|3|CODE TABLE|0|1
+035035|reasonForTermination|table|REASON FOR TERMINATION|CODE TABLE|0|0|5|CODE TABLE|0|2
+040001|surfaceSoilMoisture|double|SURFACE SOIL MOISTURE (MS)|%|1|0|10|%|1|4
+040002|estimatedErrorInSurfaceSoilMoisture|double|ESTIMATED ERROR IN SURFACE SOIL MOISTURE|%|1|0|10|%|1|4
+040003|meanSurfaceSoilMoisture|long|MEAN SURFACE SOIL MOISTURE|Numeric|3|0|10|Numeric|3|4
+040004|rainFallDetection|long|RAIN FALL DETECTION|Numeric|3|0|10|Numeric|3|4
+040005|soilMoistureCorrectionFlag|flag|SOIL MOISTURE CORRECTION FLAG|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+040006|soilMoistureProcessingFlag|flag|SOIL MOISTURE PROCESSING FLAG|FLAG TABLE|0|0|16|FLAG TABLE|0|6
+040007|soilMoistureQuality|double|SOIL MOISTURE QUALITY|%|1|0|10|%|1|4
+040008|frozenLandSurfaceFraction|double|FROZEN LAND SURFACE FRACTION|%|1|0|10|%|1|4
+040009|inundationAndWetlandFraction|double|INUNDATION AND WETLAND FRACTION|%|1|0|10|%|1|4
+040010|topographicComplexity|double|TOPOGRAPHIC COMPLEXITY|%|1|0|10|%|1|4
+040011|interpolationFlag|flag|INTERPOLATION FLAG|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+040012|radiometerDataQualityFlag|flag|RADIOMETER DATA QUALITY FLAG|FLAG TABLE|0|0|8|FLAG TABLE|0|3
+040013|radiometerBrightnessTemperatureInterpretationFlag|table|RADIOMETER BRIGHTNESS TEMPERATURE INTERPRETATION FLAG|CODE TABLE|0|0|3|CODE TABLE|0|1
+040014|highFrequencyFluctuationsOfSeaSurfaceTopographyCorrection|double|HIGH-FREQUENCY FLUCTUATIONS OF THE SEA-SURFACE TOPOGRAPHY CORRECTION|m|4|-3000|13|m|4|4
+040015|normalizedDifferentialVegetationIndex|long|NORMALIZED DIFFERENTIAL VEGETATION INDEX (NDVI)|Numeric|2|-100|8|Numeric|2|3
+040016|residualRmsInBand|long|RESIDUAL RMS IN BAND|Numeric|3|0|14|Numeric|3|5
+040017|nonNormalizedPrincipalComponentScore|long|NON-NORMALIZED PRINCIPAL COMPONENT SCORE|Numeric|0|-1073741824|31|Numeric|0|10
+040018|averageOfImagerMeasurements|double|GIACAVGIMAGIIS - AVERAGE OF IMAGER MEASUREMENTS|W m-2 sr-1 m|6|0|24|W m-2 sr-1 m|6|8
+040019|giacvarimagiisVarianceOfImagerMeasurements|double|GIACVARIMAGIIS - VARIANCE OF IMAGER MEASUREMENTS|W m-2 sr-1 m|6|0|24|W m-2 sr-1 m|6|8
+040020|gqisFlagQualDetailed|flag|GQISFLAGQUALDETAILED - QUALITY FLAG FOR THE SYSTEM|FLAG TABLE|0|0|17|FLAG TABLE|0|6
+040021|fractionOfWeightedAvhrrPixelInIasiFovCoveredWithSnowOrIce|long|FRACTION OF WEIGHTED AVHRR PIXEL IN IASI FOV COVERED WITH SNOW/ICE|%|0|0|7|%|0|3
+040022|numberOfMissingBadOrFailedAvhrrPixels|long|NUMBER OF MISSING, BAD OR FAILED AVHRR PIXELS|Numeric|0|0|7|Numeric|0|3
+040023|auxiliaryAltimeterStateFlags|flag|AUXILIARY ALTIMETER STATE FLAGS|FLAG TABLE|0|0|5|FLAG TABLE|0|2
+040024|meteorologicalMapAvailability|table|METEOROLOGICAL MAP AVAILABILITY|CODE TABLE|0|0|3|CODE TABLE|0|1
+040025|interpolationFlagForMeanDiurnalTide|table|INTERPOLATION FLAG FOR MEAN DIURNAL TIDE|CODE TABLE|0|0|2|CODE TABLE|0|1
+040026|scoreQuantizationFactor|long|SCORE QUANTIZATION FACTOR|Numeric|2|0|16|Numeric|2|5
+040027|sunGlintAngle|double|SUN GLINT ANGLE|deg|2|-18000|16|deg|2|5
+040028|gmiQualityFlag|table|GMI QUALITY FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2
+040029|horizontalObservationIntegrationLength|long|HORIZONTAL OBSERVATION INTEGRATION LENGTH|m|0|0|26|m|0|8
+040030|horizontalLineOfSightWind|double|HORIZONTAL LINE OF SIGHT WIND|m/s|2|-32767|16|m/s|2|5
+040031|errorEstimateOfHorizontalLineOfSightWind|double|ERROR ESTIMATE OF HORIZONTAL LINE OF SIGHT WIND|m/s|2|0|15|m/s|2|5
+040032|derivativeWindToPressure|double|DERIVATIVE WIND TO PRESSURE|m s-1 Pa-1|3|-100000|18|m s-1 Pa-1|3|6
+040033|derivativeWindToTemperature|double|DERIVATIVE WIND TO TEMPERATURE|m s-1 K-1|3|-100000|18|m s-1 K-1|3|6
+040034|derivativeWindToBackscatterRatio|double|DERIVATIVE WIND TO BACKSCATTER RATIO|m/s|3|-200000|19|m/s|3|6
+040035|satelliteRange|long|SATELLITE RANGE|m|0|380000|18|m|0|6
+040036|lidarL2bClassificationType|table|LIDAR L2B CLASSIFICATION TYPE|CODE TABLE|0|0|4|CODE TABLE|0|2
+040037|backscatterRatio|long|BACKSCATTER RATIO|Numeric|3|500|20|Numeric|3|7
diff --git a/definitions/bufr/tables/0/wmo/26/sequence.def b/definitions/bufr/tables/0/wmo/26/sequence.def
new file mode 100644
index 0000000..69b3b56
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/26/sequence.def
@@ -0,0 +1,946 @@
+"300002" = [  000002, 000003 ]
+"300003" = [  000010, 000011, 000012 ]
+"300004" = [  300003, 000013, 000014, 000015, 000016, 000017, 000018, 000019, 000020 ]
+"300010" = [  300003, 101000, 031001, 000030 ]
+"300015" = [  000030, 102000, 031002, 000024, 000025 ]
+"300016" = [  000030, 102000, 031001, 000026, 000027 ]
+"301001" = [  001001, 001002 ]
+"301002" = [  001003, 001004, 001005 ]
+"301003" = [  001011, 001012, 001013 ]
+"301004" = [  001001, 001002, 001015, 002001 ]
+"301005" = [  001035, 001034 ]
+"301011" = [  004001, 004002, 004003 ]
+"301012" = [  004004, 004005 ]
+"301013" = [  004004, 004005, 004006 ]
+"301014" = [  102002, 301011, 301012 ]
+"301021" = [  005001, 006001 ]
+"301022" = [  005001, 006001, 007001 ]
+"301023" = [  005002, 006002 ]
+"301024" = [  005002, 006002, 007001 ]
+"301025" = [  301023, 004003, 301012 ]
+"301026" = [  301021, 004003, 004003, 004004, 004004, 004005, 004005 ]
+"301027" = [  008007, 101000, 031001, 301028, 008007 ]
+"301028" = [  008040, 033042, 007010, 101000, 031002, 301023, 019007, 008040 ]
+"301029" = [  001018, 002001, 301011 ]
+"301030" = [  001018, 002001, 301011, 301024 ]
+"301031" = [  301001, 002001, 301011, 301012, 301022 ]
+"301032" = [  301001, 002001, 301011, 301012, 301024 ]
+"301033" = [  001005, 002001, 301011, 301012, 301021 ]
+"301034" = [  001005, 002001, 301011, 301012, 301023 ]
+"301035" = [  001005, 001012, 001013, 002001, 301011, 301012, 301023 ]
+"301036" = [  301003, 002001, 301011, 301012, 301023 ]
+"301037" = [  301001, 002011, 002012, 301011, 301012, 301022 ]
+"301038" = [  301001, 002011, 002012, 301011, 301012, 301024 ]
+"301039" = [  301003, 002011, 002012, 301011, 301012, 301023 ]
+"301040" = [  301003, 002011, 002012, 301011, 301012, 301024 ]
+"301041" = [  001007, 002021, 002022, 301011, 301012 ]
+"301042" = [  301041, 301021 ]
+"301043" = [  001007, 002023, 301011, 301013, 301021 ]
+"301044" = [  001007, 002024, 301011, 301013, 301021 ]
+"301045" = [  301011, 301012, 201138, 202131, 004006, 201000, 202000, 304030, 304031 ]
+"301046" = [  001007, 001012, 002048, 021119, 025060, 202124, 002026, 002027, 202000, 005040
+               ]
+"301047" = [  001007, 025060, 001033, 001034, 001012, 301045, 002021, 301011, 301012, 201138,
+               202131, 004006, 201000, 202000, 301023 ]
+"301048" = [  002104, 002121, 002113, 002026, 002027, 002111, 002140, 202127, 001013, 202126,
+               007001, 202000, 025010, 021064 ]
+"301049" = [  002111, 002112, 021062, 021063, 021065 ]
+"301051" = [  001006, 002061, 301011, 301012, 301021, 008004 ]
+"301055" = [  001005, 002001, 301011, 301012, 301021, 001012, 001014 ]
+"301058" = [  301011, 301012, 201152, 202135, 004006, 202000, 201000, 301021, 020111, 020112,
+               020113, 020114, 020115, 020116, 020117, 020118, 020119, 025035, 020121, 020122,
+               020123, 020124, 025175, 020023, 025063, 202136, 201136, 002121, 201000, 202000,
+               025061, 002184, 002189, 025036, 101000, 031002, 301059 ]
+"301059" = [  301021, 007030, 007032 ]
+"301062" = [  101000, 031001, 301001 ]
+"301065" = [  001006, 001008, 002001, 002002, 002005, 002062, 002070, 002065 ]
+"301066" = [  301011, 301013, 301023, 007004, 002064, 008004 ]
+"301070" = [  002143, 002142, 002144 ]
+"301071" = [  001007, 001031, 002020, 002028, 002029 ]
+"301072" = [  301071, 301011, 301013, 301021 ]
+"301074" = [  002143, 002142, 002145, 002146 ]
+"301075" = [  301001, 001015, 301024, 008021, 301011, 301012 ]
+"301076" = [  002011, 002143, 002142 ]
+"301089" = [  001101, 001102 ]
+"301090" = [  301004, 301011, 301012, 301021, 007030, 007031 ]
+"301091" = [  002180, 002181, 002182, 002183, 002184, 002179, 002186, 002187, 002188, 002189
+               ]
+"301092" = [  001011, 001003, 002001, 301011, 301012, 301021, 007030, 007031, 033024 ]
+"301093" = [  301036, 007030, 007031 ]
+"301110" = [  301001, 001011, 002011, 002014, 002003 ]
+"301111" = [  301001, 001011, 002011, 002013, 002014, 002003 ]
+"301112" = [  001006, 002011, 002013, 002014, 002003 ]
+"301113" = [  008021, 301011, 301013 ]
+"301114" = [  301021, 007030, 007031, 007007, 033024 ]
+"301120" = [  301001, 001094, 002011, 301121 ]
+"301121" = [  008041, 301122, 301021, 007031, 007007 ]
+"301122" = [  301011, 301012, 201135, 202130, 004006, 202000, 201000 ]
+"301123" = [  102002, 008041, 001062, 301001, 001094, 002011, 001018, 001095, 025061, 025068,
+               001082, 001083, 001081, 002067, 002066, 002014, 025067, 025065, 025066, 002095,
+               002096, 002097, 002016, 002083, 002080, 002081, 001093, 002084, 002085, 002086,
+               002082, 008041, 301011 ]
+"301125" = [  001033, 001034, 025060, 001007, 002019, 001012 ]
+"301126" = [  001087, 001015, 002149, 301011, 301012, 301021 ]
+"301128" = [  001081, 001082, 001083, 001095, 002015, 002016, 002017, 002066, 002067, 002080,
+               002081, 002082, 002083, 002084, 002085, 002086, 002095, 002096, 002097, 002103,
+               002191, 025061, 035035 ]
+"302001" = [  010004, 010051, 010061, 010063 ]
+"302002" = [  010004, 007004, 010003, 010061, 010063 ]
+"302003" = [  011011, 011012, 012004, 012006, 013003, 020001, 020003, 020004, 020005 ]
+"302004" = [  020010, 008002, 020011, 020013, 020012, 020012, 020012 ]
+"302005" = [  008002, 020011, 020012, 020013 ]
+"302006" = [  010004, 010051, 010062, 010063 ]
+"302011" = [  302001, 302003, 302004 ]
+"302012" = [  302002, 302003, 302004 ]
+"302013" = [  302006, 302003, 101000, 031001, 302005 ]
+"302021" = [  022001, 022011, 022021 ]
+"302022" = [  022002, 022012, 022022 ]
+"302023" = [  022003, 022013, 022023 ]
+"302024" = [  302022, 101002, 302023 ]
+"302031" = [  302001, 010062, 007004, 010009 ]
+"302032" = [  007032, 012101, 012103, 013003 ]
+"302033" = [  007032, 020001 ]
+"302034" = [  007032, 013023 ]
+"302035" = [  302032, 302033, 302034, 007032, 302004, 101000, 031001, 302005 ]
+"302036" = [  105000, 031001, 008002, 020011, 020012, 020014, 020017 ]
+"302037" = [  020062, 013013, 012113 ]
+"302038" = [  020003, 004024, 020004, 020005 ]
+"302039" = [  004024, 014031 ]
+"302040" = [  007032, 102002, 004024, 013011 ]
+"302041" = [  007032, 004024, 004024, 012111, 004024, 004024, 012112 ]
+"302042" = [  007032, 002002, 008021, 004025, 011001, 011002, 008021, 103002, 004025, 011043,
+               011041 ]
+"302043" = [  302038, 101002, 302039, 302040, 302041, 302042, 007032 ]
+"302044" = [  004024, 002004, 013033 ]
+"302045" = [  004024, 014002, 014004, 014016, 014028, 014029, 014030 ]
+"302046" = [  004024, 004024, 012049 ]
+"302047" = [  102003, 008002, 020054 ]
+"302048" = [  005021, 007021, 020012, 005021, 007021 ]
+"302049" = [  008002, 020011, 020013, 020012, 020012, 020012, 008002 ]
+"302050" = [  008041, 005021, 007005, 202130, 006021, 202000, 008041, 201131, 202129, 002115,
+               010004, 002115, 013003, 202000, 201000, 002115, 011001, 011002, 002115, 102002,
+               012101, 004024, 002115, 012103, 012102, 101003, 020012, 020011, 020013, 101002,
+               020003 ]
+"302051" = [  010004, 010051, 007004, 010003, 012004, 012051, 012016, 012017, 013004, 102004,
+               008051, 008020 ]
+"302052" = [  007032, 007033, 012101, 002039, 012102, 012103, 013003 ]
+"302053" = [  007032, 007033, 020001 ]
+"302054" = [  302052, 302053, 007033, 302034, 007032, 302004, 101000, 031001, 302005 ]
+"302055" = [  020031, 020032, 020033, 020034, 020035, 020036, 020037, 020038 ]
+"302056" = [  002038, 007063, 022043, 007063 ]
+"302057" = [  302056, 302021, 302024 ]
+"302058" = [  007032, 007033, 004024, 004024, 012111, 004024, 004024, 012112 ]
+"302059" = [  007032, 007033, 002002, 008021, 004025, 011001, 011002, 008021, 103002, 004025,
+               011043, 011041 ]
+"302060" = [  302038, 302040, 302058, 302059 ]
+"302064" = [  007032, 007033, 002002, 008021, 004025, 011001, 011002, 008021, 103000, 031001,
+               004025, 011043, 011041 ]
+"302066" = [  020023, 020024, 020027, 020054, 020023, 020027, 020054, 020025, 020026, 020027,
+               020040, 020066, 020027, 020021, 020067, 020027 ]
+"302067" = [  001023, 004025, 002177, 101000, 031001, 020003, 103000, 031001, 005021, 020001,
+               005021, 101000, 031000, 302056, 103000, 031000, 033041, 020058, 022061, 101000,
+               031000, 302022, 101000, 031001, 302023, 104000, 031001, 020054, 020137, 020012,
+               020090, 103000, 031001, 020054, 020137, 020136, 004025, 013012, 004025, 011042,
+               104000, 031001, 008021, 004025, 011042, 008021, 115000, 031001, 008021, 004015,
+               008021, 004025, 011001, 011002, 008021, 004015, 008021, 004025, 011001, 011002,
+               008021, 004025, 004015, 103000, 031001, 004025, 004025, 020003, 110000, 031001,
+               004025, 004025, 005021, 005021, 020054, 020024, 020025, 020026, 020027, 020063
+               ]
+"302069" = [  007032, 007033, 033041, 020001 ]
+"302070" = [  007032, 007033, 011001, 011002, 011043, 011041, 011016, 011017 ]
+"302071" = [  007032, 007033, 008021, 004025, 011001, 011002, 008021, 103002, 004025, 011043,
+               011041, 004025, 011016, 011017 ]
+"302072" = [  007032, 007033, 012101, 012103, 013003 ]
+"302073" = [  020010, 105004, 008002, 020011, 020012, 033041, 020013 ]
+"302074" = [  020003, 004025, 020004, 020005 ]
+"302075" = [  008021, 004025, 013055, 013058, 008021 ]
+"302076" = [  020021, 020022, 026020, 020023, 020024, 020025, 020026 ]
+"302077" = [  007032, 007033, 004025, 012111, 012112, 007032, 004025, 012112 ]
+"302078" = [  002176, 020062, 002177, 013013 ]
+"302079" = [  007032, 002175, 002178, 004025, 013011 ]
+"302080" = [  002185, 004025, 013033 ]
+"302081" = [  004025, 014031 ]
+"302082" = [  004025, 014002, 014004, 014016, 014028, 014029, 014030 ]
+"302083" = [  004025, 008023, 010004, 011001, 011002, 012101, 013003, 008023 ]
+"302084" = [  302031, 302072, 103000, 031000, 101005, 307063, 007061, 101000, 031000, 302069,
+               007032, 007033, 105000, 031000, 020031, 020032, 002038, 022043, 302021, 101000,
+               031000, 302078, 012113, 101000, 031000, 302004, 105000, 031001, 008002, 020011,
+               020012, 033041, 020013, 302036, 101000, 031000, 302047, 008002, 101000, 031000,
+               302048 ]
+"302085" = [  105000, 031000, 020003, 103002, 004024, 020004, 020005, 101000, 031000, 302175,
+               102000, 031000, 004025, 302076, 102000, 031000, 004025, 013059, 007032, 007033,
+               008021, 004025, 011001, 011002, 008021, 103003, 004025, 011043, 011041, 004025,
+               011016, 011017, 302077, 007033, 302041, 106000, 031000, 007032, 002175, 002178,
+               102005, 004024, 013011, 007032, 103000, 031000, 002185, 101002, 302044, 102000,
+               031000, 101002, 302039, 102000, 031000, 101002, 302045, 101000, 031000, 302046,
+               101000, 031000, 302083 ]
+"302089" = [  020101, 020102, 020103, 020104, 020105, 020106, 020107, 020108 ]
+"302090" = [  002038, 007063, 022045 ]
+"302091" = [  020001, 004024, 013011 ]
+"302175" = [  008021, 004025, 013155, 013058, 008021 ]
+"303001" = [  007003, 011001, 011002 ]
+"303002" = [  007004, 011001, 011002 ]
+"303003" = [  007004, 010003, 012001, 012003 ]
+"303004" = [  007004, 010003, 012001, 012003, 011001, 011002 ]
+"303011" = [  007003, 008001, 011001, 011002 ]
+"303012" = [  007004, 008001, 011001, 011002 ]
+"303013" = [  007004, 008001, 010003, 012001, 013003, 011001, 011002 ]
+"303014" = [  007004, 008001, 010003, 012001, 012003, 011001, 011002 ]
+"303021" = [  007004, 007004, 204007, 031021 ]
+"303022" = [  303021, 010003, 204000 ]
+"303023" = [  303021, 012001, 204000 ]
+"303024" = [  303021, 013016, 204000 ]
+"303025" = [  002025, 204007, 031021, 012063, 204000 ]
+"303026" = [  007004, 008003, 204007, 031021, 012001, 204000 ]
+"303027" = [  007004, 204007, 031021, 010003, 204000 ]
+"303031" = [  007004, 008003, 007021, 007022, 008012, 012061 ]
+"303032" = [  020011, 020016 ]
+"303033" = [  020010, 020016 ]
+"303040" = [  008041, 004025, 004026, 301021, 301122, 201131, 202129, 025069, 007004, 013003,
+               202000, 201000, 002013, 012101, 010009, 102002, 008040, 035035 ]
+"303041" = [  002152, 002023, 007004, 011001, 011002, 002153, 002154, 012071 ]
+"303050" = [  004086, 008042, 007004, 005015, 006015, 011001, 011002 ]
+"303051" = [  004086, 008042, 007004, 005015, 006015, 011061, 011062 ]
+"303052" = [  004086, 008042, 007009, 005015, 006015, 011001, 011002 ]
+"303053" = [  004086, 008042, 007009, 005015, 006015, 011061, 011062 ]
+"303054" = [  004086, 008042, 007004, 010009, 005015, 006015, 012101, 012103, 011001, 011002
+               ]
+"303055" = [  004086, 008042, 007009, 005015, 006015, 012101, 013009, 012103, 011001, 011002
+               ]
+"304001" = [  008003, 010004, 012001, 011001, 011002 ]
+"304002" = [  008003, 010004, 011001, 011002 ]
+"304003" = [  008003, 012001 ]
+"304004" = [  008003, 010004, 020010, 012001 ]
+"304005" = [  002024, 007004, 007004, 013003 ]
+"304006" = [  014001, 014001, 014003 ]
+"304011" = [  002163, 002164, 008012, 007024, 002057, 008021, 004001, 004002, 004003, 004004,
+               008021, 004024, 110004, 008021, 004004, 004005, 004006, 008021, 004004, 004005,
+               004006, 011001, 011002, 103010, 002163, 007004, 012001 ]
+"304030" = [  027031, 028031, 010031 ]
+"304031" = [  001041, 001042, 001043 ]
+"304032" = [  002153, 002154, 020081, 020082, 020012 ]
+"304033" = [  002152, 002166, 002167, 002153, 002154, 012075, 012076, 012063 ]
+"304034" = [  102004, 027001, 028001, 007022, 005043, 020010, 020016, 033003, 010040 ]
+"304035" = [  002153, 002154, 012063, 008001, 012063, 008001, 012063, 008001, 008003, 012063,
+               008003, 012063, 008003, 012063, 008003 ]
+"304036" = [  020082, 008012, 020082, 008012, 020081, 008003, 020081, 008003, 020081, 008003,
+               020081, 008003 ]
+"304037" = [  002153, 002154, 012063, 008011, 012063, 008011, 012063, 008011, 008003, 012063,
+               008003, 012063, 008003, 012063 ]
+"305001" = [  011001, 011002, 013060, 013071 ]
+"305002" = [  301012, 012001, 013003, 014051, 013060, 013072, 013080, 013081, 013082, 013083,
+               013084 ]
+"305003" = [  301012, 004065, 101000, 031001, 305001 ]
+"305004" = [  301030, 305002, 305003 ]
+"305006" = [  013072, 013082, 013019, 012001, 013073, 013060 ]
+"305007" = [  301029, 301012, 004065, 101000, 031001, 305006 ]
+"305008" = [  305006, 012030 ]
+"305009" = [  301029, 301012, 004065, 101000, 031001, 305008 ]
+"305010" = [  305008, 002091, 002091 ]
+"305011" = [  301029, 301012, 004065, 101000, 031001, 305010 ]
+"305016" = [  014021, 007004, 013003, 011002, 011001, 011041, 011043 ]
+"305017" = [  013080, 013081, 013083, 013085, 013084 ]
+"305018" = [  301029, 301012, 004065, 103000, 031001, 305008, 305016, 305017 ]
+"306001" = [  002032, 102000, 031001, 007062, 022042 ]
+"306002" = [  002031, 022004, 022031 ]
+"306003" = [  002002, 011011, 011012, 012004 ]
+"306004" = [  002032, 002033, 103000, 031001, 007062, 022043, 022062 ]
+"306005" = [  002031, 103000, 031001, 007062, 022004, 022031 ]
+"306006" = [  306003, 306002, 022063 ]
+"306007" = [  001012, 001014, 306008, 004024, 027003, 028003 ]
+"306008" = [  002034, 002035, 002036 ]
+"306011" = [  301021, 001075, 002147, 301011, 301013 ]
+"306012" = [  002007, 008015, 008032, 306029 ]
+"306013" = [  306012, 301011, 301013, 022120, 022121, 004015, 004065, 102000, 031001, 022038,
+               022040 ]
+"306014" = [  306012, 301011, 301013, 022120, 022121, 004015, 004065, 101000, 031001, 022038
+               ]
+"306016" = [  301011, 301013, 010004, 010051, 302032, 007032, 002002, 008021, 004025, 011001,
+               011002, 004025, 011043, 011041, 025026, 012060 ]
+"306017" = [  002032, 008034, 106000, 031002, 007065, 008080, 033050, 022045, 008080, 033050,
+               008034 ]
+"306018" = [  002032, 008034, 109000, 031002, 007065, 008080, 033050, 022045, 008080, 033050,
+               022064, 008080, 033050, 008034 ]
+"306019" = [  001075, 301011, 301012, 022042, 022120, 022121, 004015, 004065 ]
+"306020" = [  001075, 301011, 301012, 022042, 022120, 022121, 004075, 004065 ]
+"306021" = [  001075, 301011, 301012, 022122, 022123, 012001, 303002 ]
+"306022" = [  001075, 301011, 301012, 022038, 022039 ]
+"306023" = [  001015, 301023, 301011, 301012, 022038, 022039, 022120, 022121 ]
+"306024" = [  306020, 102006, 022038, 022039 ]
+"306025" = [  306019, 102006, 022038, 022039 ]
+"306027" = [  001005, 001052, 002047, 301011, 301013 ]
+"306028" = [  306027, 301011, 301013, 301021 ]
+"306029" = [  025170, 025171, 025172 ]
+"306030" = [  306027, 306029, 111000, 031001, 033002, 301011, 301013, 025025, 025025, 025026,
+               022185, 004015, 004065, 101004, 022182 ]
+"306031" = [  306027, 306029, 001053, 033002, 301011, 301013, 301011, 301013, 022185, 022182,
+               004016, 004066, 101000, 031001, 022184 ]
+"306033" = [  002033, 007063, 022064 ]
+"306034" = [  002031, 003010, 002040, 022005, 022032 ]
+"306035" = [  112000, 031002, 007062, 008080, 033050, 007065, 008080, 033050, 022043, 008080,
+               033050, 022064, 008080, 033050 ]
+"306036" = [  112000, 031002, 007062, 008080, 033050, 007065, 008080, 033050, 022031, 008080,
+               033050, 022004, 008080, 033050 ]
+"306037" = [  109000, 031002, 007062, 008080, 033050, 007065, 008080, 033050, 022188, 008080,
+               033050 ]
+"306038" = [  010004, 010051, 007033, 012101, 012103, 013003, 007033, 008021, 004025, 011001,
+               011002, 008021, 004025, 011041, 004025, 007033, 002005, 007063, 022049 ]
+"306039" = [  022078, 022070, 022073, 022074, 022071, 022076, 022077 ]
+"306040" = [  022078, 022082, 106000, 031001, 022080, 022069, 022086, 022087, 022088, 022089
+               ]
+"306041" = [  002032, 102000, 031001, 007062, 022043 ]
+"306042" = [  002169, 007033, 008021, 004025, 011001, 011002 ]
+"307001" = [  301031, 302011 ]
+"307002" = [  301032, 302011 ]
+"307003" = [  307001, 101000, 031001, 302005 ]
+"307004" = [  307002, 101000, 031001, 302005 ]
+"307005" = [  307001, 101004, 302005 ]
+"307006" = [  307002, 101004, 302005 ]
+"307007" = [  301031, 302012 ]
+"307008" = [  301032, 302012 ]
+"307009" = [  301031, 302013 ]
+"307011" = [  001063, 002001, 301011, 301012, 301024, 007006, 011001, 011016, 011017, 011002,
+               011041, 007006, 012001, 012003, 010052, 020009 ]
+"307012" = [  103000, 031001, 008023, 005021, 020001 ]
+"307013" = [  106000, 031001, 001064, 008014, 020061, 008014, 020061, 020018 ]
+"307014" = [  101000, 031001, 020019 ]
+"307015" = [  101000, 031001, 302005, 020002 ]
+"307016" = [  101000, 031001, 020020 ]
+"307017" = [  101000, 031001, 011070 ]
+"307018" = [  008016, 102000, 031001, 008017, 301012, 104000, 031001, 007006, 011001, 011002,
+               011041, 020009, 101000, 031001, 020001, 307014 ]
+"307020" = [  307011, 307014, 307016 ]
+"307021" = [  307011, 307012, 307013, 307014, 307015, 307016, 307017, 307018, 307015 ]
+"307022" = [  001015, 301011, 301012, 301022, 008021, 004025, 010004, 012001, 013003, 033038,
+               008022, 106025, 002020, 001050, 005021, 007021, 015031, 015032, 008060, 015033,
+               015034, 008060, 015033, 015034, 015035, 201131, 202129, 013016, 202000, 201000,
+               015011 ]
+"307030" = [  015001, 015002 ]
+"307031" = [  008022, 008023, 015001, 008023, 015001, 008023, 015002 ]
+"307041" = [  301001, 001015, 301024, 301011, 301012, 301070, 307030 ]
+"307042" = [  301001, 001015, 301024, 301011, 301012, 008021, 004025, 301070, 307031 ]
+"307043" = [  301001, 001015, 301024, 301011, 301012, 301074, 307030 ]
+"307044" = [  301001, 001015, 301024, 301011, 301012, 008021, 004025, 301074, 307031 ]
+"307045" = [  001063, 008079, 002001, 301011, 301012, 301023, 007030, 007031, 007032, 011001,
+               011016, 011017, 008054, 011083, 011084, 011002, 008054, 011085, 011086, 011041,
+               008054, 007032, 012023, 012024, 007032, 010052, 020009 ]
+"307046" = [  020060, 102000, 031001, 005021, 020059 ]
+"307047" = [  105000, 031001, 008002, 020011, 020012, 020013, 020092, 020002, 020091 ]
+"307048" = [  008016, 102000, 031001, 008017, 301012, 112000, 031000, 007032, 011001, 008054,
+               011083, 011084, 011002, 008054, 011085, 011086, 011041, 008054, 007032, 020009,
+               101000, 031000, 020060, 307014, 307047 ]
+"307049" = [  102000, 031000, 022043, 022021 ]
+"307050" = [  101000, 031000, 020085, 102000, 031001, 001064, 020085, 105000, 031001, 001064,
+               020086, 020087, 020088, 020089 ]
+"307051" = [  307045, 307046, 307013, 307014, 307047, 307016, 307017, 307049, 307050, 101000,
+               031001, 307048 ]
+"307052" = [  001063, 008039, 301011, 301012, 008079, 008039, 301011, 301012, 008039, 301011,
+               301012, 301023, 007030, 007031 ]
+"307053" = [  007032, 011001, 008054, 011083, 011084, 011002, 008054, 011085, 011086, 011041,
+               008054, 007032, 020009, 020060, 307014, 307047 ]
+"307054" = [  007032, 008039, 004003, 004004, 008023, 012023, 008039, 004003, 004004, 008023,
+               012023, 008023, 007032 ]
+"307055" = [  033045, 008016, 008039, 004003, 301012, 008039, 004003, 301012, 307053 ]
+"307056" = [  307052, 307053, 307054, 101000, 031001, 307055 ]
+"307060" = [  007061, 012030 ]
+"307061" = [  301031, 101005, 307060 ]
+"307062" = [  301032, 101005, 307060 ]
+"307063" = [  007061, 012130 ]
+"307071" = [  301090, 004074, 004023, 008023, 010004, 010051, 007004, 010009, 007032, 012101,
+               002051, 004051, 012118, 004052, 012119, 013004, 008023, 012151, 007032, 102005,
+               008050, 008020, 014032, 014033, 008050, 008020, 102018, 008052, 008022, 007032,
+               008053, 004003, 012152, 008053, 004003, 012153, 008053, 004003, 008023, 012101,
+               008053, 004003, 008023, 012101, 008023, 007032, 002002, 008053, 004003, 011046,
+               008053, 004003, 004004, 004023, 007032, 013060, 013051, 004053, 008050, 008020,
+               102006, 008052, 008022, 008053, 004003, 013052, 007032 ]
+"307072" = [  004001, 004001, 004002, 004003, 004004, 004074, 004022, 008023, 010004, 010051,
+               007004, 010009, 007032, 012101, 002051, 004051, 012118, 004052, 012119, 013004,
+               012151, 007032, 014032, 008023, 004001, 004001, 004002, 004003, 004004, 004022,
+               007032, 008023, 013060, 004053, 008023, 102008, 008050, 008020 ]
+"307073" = [  307071, 307072 ]
+"307074" = [  301001, 004001, 004002, 301021, 007030, 007032, 112000, 031001, 004003, 004004,
+               004024, 102003, 008023, 012101, 008023, 004004, 004024, 013060, 013012, 013013
+               ]
+"307076" = [  301090, 004074, 004023, 008023, 010004, 010051, 007004, 010009, 007032, 012101,
+               002051, 004051, 012118, 004052, 012119, 013004, 008023, 012151, 007032, 102005,
+               008050, 008020, 014032, 014033, 008050, 008020, 102018, 008052, 008022, 007032,
+               008053, 004003, 012152, 008053, 004003, 012153, 008053, 004003, 008023, 012101,
+               008053, 004003, 008023, 012101, 008023, 007032, 002002, 008053, 004003, 011046,
+               008053, 004003, 004004, 004074, 004023, 007032, 013060, 013051, 004053, 008050,
+               008020, 102006, 008052, 008022, 008053, 004003, 013052, 007032 ]
+"307077" = [  004001, 004001, 004002, 004003, 004004, 004074, 004022, 008023, 010004, 010051,
+               007004, 010009, 007032, 012101, 002051, 004051, 012118, 004052, 012119, 013004,
+               012151, 007032, 014032, 008023, 004001, 004001, 004002, 004003, 004004, 004074,
+               004022, 007032, 008023, 013060, 004053, 008023, 102008, 008050, 008020 ]
+"307078" = [  307076, 307077 ]
+"307079" = [  301090, 302031, 302035, 302036, 101000, 031000, 302047, 008002, 101000, 031000,
+               302048, 302037, 102000, 031000, 022061, 020058, 101000, 031000, 302056, 101000,
+               031000, 302055, 302043, 302044, 101000, 031001, 302045, 101000, 031000, 302046
+               ]
+"307080" = [  301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 302043, 302044,
+               101002, 302045, 302046 ]
+"307081" = [  301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 012122, 013056,
+               013057, 020101, 020102, 020103, 020104, 020105, 020106, 020107, 020108, 302043,
+               302044, 101002, 302045, 302046 ]
+"307082" = [  301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 012121, 012122,
+               302043, 302044, 101002, 302045, 302046 ]
+"307083" = [  301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 012122, 302043,
+               302044, 101002, 302045, 302046 ]
+"307084" = [  301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 020055, 101000,
+               031001, 205001, 302043, 302044, 101002, 302045, 302046 ]
+"307086" = [  301090, 302031, 302035, 302036, 008002, 302037, 302066, 302043, 302044, 101002,
+               302045 ]
+"307087" = [  301001, 002001, 301011, 301012, 301023, 007030, 007031, 302001, 010062, 007004,
+               010009, 007032, 012101, 012103, 013003, 007032, 020001, 302004, 101000, 031001,
+               302005 ]
+"307088" = [  020003, 004024, 020004, 020005, 004024, 002004, 013033, 102002, 004024, 014031,
+               102002, 004024, 013011, 007032, 004024, 012111, 004024, 012112, 007032, 002002,
+               008021, 004025, 011001, 011002, 008021 ]
+"307089" = [  307087, 307088 ]
+"307090" = [  301092, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 302043, 302044,
+               101002, 302045, 302046 ]
+"307091" = [  301089, 301090, 008010, 301091, 302001, 007004, 010009, 302072, 103000, 031000,
+               101005, 307063, 007061, 101000, 031000, 302069, 007032, 007033, 105000, 031000,
+               020031, 020032, 002038, 022043, 302021, 101000, 031000, 302078, 101000, 031000,
+               302073, 101000, 031000, 302074, 101000, 031000, 302175, 102000, 031000, 004025,
+               302076, 302071, 302077, 007033, 101000, 031000, 302079, 007032, 101000, 031000,
+               302080, 101000, 031000, 302081, 101000, 031000, 302082, 102000, 031000, 004025,
+               013059, 101000, 031000, 302083, 033005, 033006 ]
+"307096" = [  301090, 301089, 008010, 301091, 302084, 302085, 033005, 033006 ]
+"307101" = [  301089, 001019, 002001, 301011, 301012, 301021, 007030, 007032, 012101, 007032,
+               002177, 020062, 013013 ]
+"307102" = [  301089, 001018, 001015, 001104, 001105, 001106, 003017, 003018, 003019, 301011,
+               301012, 301021, 007030, 007032, 012101, 012103, 013003, 007032, 020001, 109000,
+               031001, 003016, 012128, 102000, 031001, 007061, 012129, 007061, 013116, 020138,
+               004025, 020024, 013055, 020021, 013011, 007032, 008021, 004025, 011001, 011002,
+               008021, 004025, 011043, 011041, 033005 ]
+"307182" = [  301090, 302031, 302035, 302036, 302047, 008002, 302048, 302037, 012120, 012122,
+               302043, 302044, 101002, 302045, 302046 ]
+"308001" = [  301033, 302011, 022042 ]
+"308002" = [  301034, 302011, 022042 ]
+"308003" = [  301035, 302011, 022042 ]
+"308004" = [  301036, 302011, 022042 ]
+"308005" = [  308004, 302024 ]
+"308006" = [  010004, 010061, 010063, 011001, 011002, 012004, 013003, 022042 ]
+"308007" = [  301055, 302011, 007062, 022042 ]
+"308009" = [  301093, 302001, 302054, 008002, 302055, 302057, 302060 ]
+"308010" = [  001011, 113000, 031001, 301011, 301012, 301021, 004080, 022049, 004080, 022059,
+               004080, 022005, 002042, 022032, 002042, 004080 ]
+"308011" = [  001011, 002001, 301011, 301012, 301023, 007030, 007031, 004074, 004023, 008023,
+               010051, 007032, 007033, 012101, 013004, 007032, 007033, 302056, 008023, 004003,
+               004004, 004023, 007032, 013060, 013051, 004053, 007032 ]
+"308012" = [  004001, 004001, 004002, 004003, 004004, 004074, 004022, 008023, 010051, 007032,
+               007033, 012101, 013004, 007032, 007033, 302056, 008023, 004001, 004001, 004002,
+               004003, 004004, 004022, 007032, 008023, 013060, 004053, 008023 ]
+"308013" = [  308011, 308012 ]
+"308015" = [  001003, 001020, 001005, 001011, 001007, 001001, 001002, 002044, 002045, 301011,
+               301012, 301021, 022063, 022076, 022077, 022094, 025043, 022078, 105002, 002046,
+               022070, 022071, 022073, 022074, 127000, 031001, 002046, 008090, 022102, 008090,
+               022084, 120000, 031001, 022080, 022108, 022086, 022087, 022088, 022089, 105000,
+               031001, 008090, 022104, 008090, 022186, 022187, 105000, 031001, 008090, 022106,
+               008090, 022186, 022187 ]
+"308016" = [  001003, 001020, 001005, 001011, 001007, 001001, 001002, 002044, 002045, 301011,
+               301012, 301021, 022063, 022076, 022077, 022094, 025044, 022079, 105002, 002046,
+               022070, 022072, 022073, 022075, 127000, 031001, 002046, 008090, 022103, 008090,
+               022084, 120000, 031001, 022081, 022108, 022086, 022087, 022088, 022089, 105000,
+               031001, 008090, 022105, 008090, 022186, 022187, 105000, 031001, 008090, 022107,
+               008090, 022186, 022187 ]
+"308021" = [  001011, 002001, 301011, 301012, 301023, 007030, 007031, 004074, 004023, 008023,
+               010051, 007032, 007033, 012101, 013004, 007032, 007033, 302056, 008023, 004003,
+               004004, 004074, 004023, 007032, 013060, 013051, 004053, 007032 ]
+"308022" = [  004001, 004001, 004002, 004003, 004004, 004074, 004022, 008023, 010051, 007032,
+               007033, 012101, 013004, 007032, 007033, 302056, 008023, 004001, 004001, 004002,
+               004003, 004004, 004074, 004022, 007032, 008023, 013060, 004053, 008023 ]
+"308023" = [  308021, 308022 ]
+"309001" = [  301037, 101000, 031001, 303011 ]
+"309002" = [  301038, 101000, 031001, 303011 ]
+"309003" = [  301037, 101000, 031001, 303012 ]
+"309004" = [  301038, 101000, 031001, 303012 ]
+"309005" = [  301037, 302004, 101000, 031001, 303013 ]
+"309006" = [  301038, 302004, 101000, 031001, 303013 ]
+"309007" = [  301037, 302004, 101000, 031001, 303014 ]
+"309008" = [  301038, 302004, 101000, 031001, 303014 ]
+"309011" = [  301039, 101000, 031001, 303011 ]
+"309012" = [  301039, 101000, 031001, 303012 ]
+"309013" = [  301039, 302004, 101000, 031001, 303013 ]
+"309014" = [  301039, 302004, 101000, 031001, 303014 ]
+"309015" = [  301040, 101000, 031001, 303011 ]
+"309016" = [  301040, 101000, 031001, 303012 ]
+"309017" = [  301040, 302004, 101000, 031001, 303013 ]
+"309018" = [  301040, 302004, 101000, 031001, 303014 ]
+"309019" = [  301031, 002003, 101000, 031001, 303011 ]
+"309020" = [  301031, 002003, 104000, 031001, 007003, 011003, 011004, 011005 ]
+"309030" = [  015004, 015005, 104000, 031001, 004015, 008006, 007004, 015003 ]
+"309031" = [  015004, 015005, 104000, 031001, 004025, 008006, 007004, 015003 ]
+"309040" = [  301075, 301076, 309030 ]
+"309041" = [  307041, 301075, 301076, 309030 ]
+"309042" = [  307042, 301075, 301076, 309030 ]
+"309043" = [  307043, 301075, 301076, 309030 ]
+"309044" = [  307044, 301075, 301076, 309030 ]
+"309045" = [  301075, 301076, 309031 ]
+"309046" = [  307041, 301075, 301076, 309031 ]
+"309047" = [  307042, 301075, 301076, 309031 ]
+"309048" = [  307043, 301075, 301076, 309031 ]
+"309049" = [  307044, 301075, 301076, 309031 ]
+"309050" = [  301110, 301113, 301114, 101000, 031002, 303050, 101000, 031001, 303051 ]
+"309051" = [  301110, 301113, 301114, 101000, 031002, 303052, 101000, 031001, 303053 ]
+"309052" = [  301111, 301113, 301114, 302049, 022043, 101000, 031002, 303054, 101000, 031001,
+               303051 ]
+"309053" = [  301112, 301113, 301114, 101000, 031002, 303054, 101000, 031001, 303051 ]
+"309054" = [  301001, 001011, 301011, 301012, 301021, 007030, 007031, 007007, 004023, 004059,
+               115000, 031001, 008001, 008023, 007004, 010009, 012101, 012103, 008023, 011001,
+               011002, 008023, 011019, 008050, 008020, 008050, 008020 ]
+"309055" = [  301111, 025061, 001081, 001082, 002067, 002095, 002096, 002097, 002081, 002082,
+               002084, 002191, 301113, 301114, 010004, 302032, 007032, 002002, 011001, 011002,
+               007032, 020003, 302049, 022043, 101000, 031002, 303055 ]
+"309060" = [  301123, 301121, 302050, 303040 ]
+"309061" = [  301120, 008041, 301122, 201131, 202129, 025069, 007004, 202000, 201000, 033007,
+               033035, 033015, 013009, 033007, 033035, 033015, 002013, 012101, 033007, 033035,
+               033015 ]
+"309062" = [  301120, 008041, 301122, 005001, 033035, 033015, 006001, 033035, 033015, 007007,
+               033035, 033015, 011003, 033035, 033015, 011004, 033035, 033015, 033007 ]
+"309063" = [  301120, 008041, 301122, 005001, 033035, 033015, 006001, 033035, 033015, 007007,
+               033035, 033015, 011003, 033035, 033015, 011004, 033035, 033015, 033007 ]
+"309064" = [  301120, 008041, 301122, 201131, 202129, 104002, 025069, 007004, 033035, 033015,
+               013003, 033035, 033015, 202000, 201000, 104002, 002013, 012101, 033035, 033015,
+               012103, 033035, 033015, 010009, 033035, 033015 ]
+"309065" = [  301120, 008041, 301122, 005001, 033035, 033015, 006001, 033035, 033015, 007007,
+               033035, 033015, 011003, 033035, 033015, 011004, 033035, 033015 ]
+"309066" = [  301120, 008041, 301122, 008040, 201131, 202129, 025069, 007004, 013003, 202000,
+               201000, 002013, 012101, 012103, 010009, 010007, 011002, 011001 ]
+"309070" = [  001035, 001032, 001015, 001063, 301001, 301011, 301012, 301021, 207001, 010001,
+               207000, 008086, 007030, 025031, 008021, 004014, 010004, 010051, 010009, 020010,
+               013095, 128000, 031002, 113000, 031000, 008086, 007004, 011001, 011002, 012101,
+               012102, 012103, 010009, 103000, 031000, 011021, 011022, 011005, 104000, 031000,
+               008086, 007006, 011001, 011002, 105000, 031000, 008086, 007006, 012101, 012102,
+               012103 ]
+"309071" = [  301001, 002014, 002003, 301113, 301114, 301023, 007030, 007007, 103000, 031001,
+               007009, 011001, 011002 ]
+"310001" = [  301042, 303031, 303032, 101026, 303025 ]
+"310002" = [  301042, 303031, 303032, 101009, 303023 ]
+"310003" = [  301042, 303031, 303032, 101006, 303023 ]
+"310004" = [  301042, 303031, 303032, 101003, 303024 ]
+"310005" = [  301042, 303031, 303033, 101000, 031001, 303025 ]
+"310006" = [  301042, 303031, 303033, 101000, 031001, 303023 ]
+"310007" = [  301042, 303031, 303033, 101000, 031001, 303024 ]
+"310008" = [  310011, 101019, 310012, 002150, 025079, 025080, 033032, 014045 ]
+"310009" = [  310011, 101015, 310012 ]
+"310010" = [  310011, 101005, 310012 ]
+"310011" = [  008070, 001033, 001034, 008070, 001033, 001034, 001007, 002048, 005040, 025075,
+               201133, 005041, 201000, 005043, 025070, 033030, 033031, 004001, 004002, 004003,
+               004004, 004005, 202131, 201138, 004006, 201000, 202000, 005001, 006001, 202126,
+               007001, 202000, 007024, 005021, 007025, 005022, 033033, 002151, 012064, 002151,
+               012064, 002151, 012064, 002151, 012064 ]
+"310012" = [  002150, 025076, 025077, 025078, 033032, 201132, 202129, 012063, 202000, 201000
+               ]
+"310013" = [  001007, 005040, 004001, 004002, 004003, 004004, 004005, 004006, 005001, 006001,
+               007025, 005043, 025085, 201131, 202129, 002150, 008023, 008072, 014027, 008072,
+               014027, 002150, 008023, 008072, 014027, 008072, 014027, 002150, 008023, 008072,
+               014027, 008072, 014027, 202000, 201000, 201132, 202129, 002150, 008023, 008072,
+               012063, 008072, 012063, 002150, 008023, 008072, 012063, 008072, 012063, 008023,
+               008072, 012063, 008072, 012063, 002150, 008023, 008072, 012063, 008072, 012063,
+               202000, 201000 ]
+"310014" = [  301072, 303041, 304011 ]
+"310015" = [  301072, 007024, 010002, 303041, 101003, 304032, 002152, 002024, 007004, 007004,
+               013003, 101003, 304033 ]
+"310016" = [  301072, 007024, 010002, 303041, 101012, 304032, 002152, 002024, 007004, 007004,
+               013003, 101012, 304033 ]
+"310018" = [  001007, 005040, 004001, 004043, 004004, 004005, 004006, 207002, 026030, 207000,
+               005002, 006002, 033072, 007025, 005022, 207002, 015001, 207000, 008003, 207001,
+               010004, 207000, 008003, 008003, 033042, 207001, 007004, 207000, 207002, 015001,
+               207000, 008003, 207002, 020081, 207000, 020065, 008029, 207004, 015030, 207000,
+               008075 ]
+"310019" = [  001007, 002019, 301011, 301013, 301023, 007025, 008021, 007025, 008021, 007025,
+               008021, 008029, 005040, 008075, 008003, 010004, 008003, 207002, 015001, 207000,
+               033070, 015030, 207002, 020081, 207000, 008003, 033042, 007004, 207002, 015001,
+               207000, 008003, 113021, 007004, 007004, 207002, 008021, 015005, 008021, 015005,
+               033007, 207000, 008026, 101020, 025143, 008026, 008043, 109015, 007004, 008090,
+               207006, 015008, 207000, 008090, 207002, 033007, 207000, 008043, 033071, 108008,
+               202124, 201107, 002071, 201000, 202000, 207002, 020081, 207000 ]
+"310020" = [  310022, 301011, 301013, 301021, 304034, 310021 ]
+"310021" = [  108000, 031001, 201131, 202129, 007004, 007004, 202000, 201000, 015020, 010002
+               ]
+"310022" = [  001007, 002019, 001033, 002172 ]
+"310023" = [  301072, 030021, 030022, 008012, 007024, 007025, 010002, 101012, 304032, 105002,
+               002152, 002024, 007004, 007004, 013003, 101012, 304033 ]
+"310024" = [  301072, 030021, 030022, 008012, 007024, 007025, 010002, 101003, 304032, 105002,
+               002152, 002024, 007004, 007004, 013003, 101003, 304033 ]
+"310025" = [  001007, 008021, 004001, 004002, 004003, 004004, 004005, 201138, 202131, 004006,
+               202000, 201000, 201132, 005041, 201000, 201129, 005043, 201000, 005002, 006002,
+               013040, 020029, 104024, 005042, 012163, 021083, 021084, 115003, 004001, 004002,
+               004003, 201142, 202131, 004026, 202000, 201000, 005001, 006001, 201138, 202129,
+               007001, 202000, 201000, 008021, 004001, 004002, 004003, 004004, 004005, 005040,
+               101003, 012070, 025054, 101004, 025055, 008007, 104028, 005002, 006002, 002111,
+               005021 ]
+"310026" = [  310022, 025060, 008021, 301011, 301012, 201138, 202131, 004006, 202000, 201000,
+               033039, 033007, 304030, 304031, 002020, 001050, 202127, 304030, 202000, 304031,
+               201133, 202131, 004016, 202000, 201000, 301021, 304030, 010035, 005021, 010036,
+               113000, 031002, 301021, 005021, 108000, 031001, 002121, 007040, 015037, 008023,
+               201125, 015037, 201000, 008023, 033007, 108000, 031002, 007007, 015036, 008023,
+               201123, 015036, 201000, 008023, 033007, 116000, 031002, 007009, 010004, 012001,
+               013001, 008023, 201120, 010004, 201000, 201122, 012001, 201000, 201123, 013001,
+               201000, 008023, 033007, 008003, 007009, 010004, 008023, 201120, 010004, 201000,
+               008023, 033007 ]
+"310027" = [  301071, 301011, 301013, 301021, 030021, 030022, 010002, 304036, 002152, 002167,
+               101011, 304035 ]
+"310028" = [  301071, 301011, 301013, 301021, 030021, 030022, 010002, 304036, 002152, 002167,
+               101011, 304037 ]
+"310029" = [  110000, 031001, 201138, 202130, 007004, 007004, 202000, 201000, 015020, 010002,
+               012101, 013098 ]
+"310030" = [  310022, 301011, 301013, 301021, 304034, 310029 ]
+"310050" = [  310051, 310052, 101000, 031002, 310053, 101004, 310054, 020010, 310052, 101015,
+               310053, 310052, 101005, 310053 ]
+"310051" = [  001007, 005040, 201133, 005041, 201000, 201132, 025070, 201000, 202126, 007001,
+               202000, 007025, 005022, 102009, 002151, 012064 ]
+"310052" = [  002019, 301011, 301012, 202131, 201138, 004006, 201000, 202000, 301021, 007024,
+               005021, 005043 ]
+"310053" = [  201134, 005042, 201000, 025076, 033032, 012163 ]
+"310054" = [  201134, 005042, 201000, 025076, 033032, 201131, 202129, 102002, 008023, 014027,
+               008023, 202000, 201000 ]
+"310055" = [  310051, 310052, 102020, 025076, 025052, 101000, 031002, 025050 ]
+"310060" = [  001007, 001033, 002019, 002020, 301011, 301012, 207003, 004006, 207000, 304030,
+               301021, 007024, 005021, 007025, 005022, 008075, 201133, 005041, 201000, 005045,
+               005043, 005040, 010001, 201129, 007002, 201000, 202127, 201125, 021166, 201000,
+               202000, 008012, 020010, 020014, 002165, 033075, 107003, 008076, 006029, 006029,
+               025140, 025141, 033076, 033077, 008076, 033078, 033003, 104000, 031002, 201133,
+               005042, 201000, 014044 ]
+"310061" = [  001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000,
+               005040, 005041, 005043, 033079, 033080, 033078, 301021, 201129, 007002, 201000,
+               007024, 005021, 007025, 005022, 025075, 111000, 031002, 005042, 202131, 002153,
+               002154, 202000, 002104, 012066, 012163, 012158, 012159, 033081 ]
+"310062" = [  001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000,
+               005040, 201133, 005041, 005043, 201000, 008076, 033082, 301021, 201129, 007002,
+               201000, 007024, 005021, 007025, 005022, 008072, 008029, 105000, 031002, 005042,
+               002155, 033083, 014043, 015042 ]
+"310063" = [  001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000,
+               005040, 201133, 005041, 005043, 201000, 033082, 301021, 201129, 007002, 201000,
+               007024, 005021, 007025, 005022, 008075, 008013, 008072, 033084, 007062, 033086,
+               022043, 007062, 007062, 033086, 022043 ]
+"310064" = [  001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000,
+               005040, 201133, 005041, 005043, 201000, 033082, 301021, 201129, 007002, 201000,
+               007024, 005021, 007025, 005022, 008075, 008029, 008046, 033085, 033086, 015049,
+               033086, 102011, 002155, 015062 ]
+"310065" = [  001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000,
+               005040, 033082, 301021, 201129, 007002, 201000, 007024, 005021, 007025, 005022,
+               008075, 033071, 033070, 020021, 015045, 015046, 008065, 033087, 008003, 010004,
+               008003, 207002, 015001, 207000, 105012, 010040, 010004, 207003, 015005, 207000,
+               008046, 107019, 010040, 010004, 008090, 207006, 015008, 207000, 008090 ]
+"310066" = [  001007, 001033, 001034, 002019, 002020, 301011, 301012, 207003, 004006, 207000,
+               005040, 033082, 301021, 201129, 007002, 201000, 007024, 005021, 007025, 005022,
+               008075, 020081, 207004, 015030, 207000, 020065, 015041, 033086, 033087, 033088,
+               008003, 207001, 007004, 207000, 008003, 207002, 015001, 207000, 008003, 033042,
+               207001, 007004, 207000, 207002, 015001, 207000, 008003, 001032, 207002, 015001,
+               207000 ]
+"311001" = [  301051, 007002, 012001, 011001, 011002, 011031, 011032, 011033, 020041 ]
+"311002" = [  301065, 301066, 311003, 311004 ]
+"311003" = [  010070, 011001, 011002, 012001, 013002 ]
+"311004" = [  101000, 031000, 011034, 101000, 031000, 011035, 101000, 031000, 011075, 101000,
+               031000, 011076, 101000, 031000, 033025, 101000, 031000, 033026 ]
+"311005" = [  001008, 001023, 301021, 301011, 301013, 007010, 008009, 011001, 011002, 011031,
+               011036, 012101, 033025 ]
+"311006" = [  007010, 011001, 011002, 002064, 012101, 012103 ]
+"311007" = [  007010, 301021, 011001, 011002, 002064, 012101, 012103 ]
+"311008" = [  001008, 301011, 301013, 301021, 008004, 101000, 031001, 311006 ]
+"311009" = [  001008, 301011, 301013, 301021, 008004, 101000, 031001, 311007 ]
+"311010" = [  001008, 001023, 001006, 001110, 001111, 001112, 204002, 031021, 301011, 301013,
+               301021, 007010, 010053, 008009, 011001, 011002, 002064, 011100, 011101, 011102,
+               011103, 011104, 012101, 002170, 201144, 202133, 013002, 202000, 201000, 201135,
+               202130, 013003, 202000, 201000, 101000, 031000, 012103, 033026, 101000, 031000,
+               020042, 103000, 031000, 020043, 020044, 020045, 101000, 031000, 033025, 103000,
+               031001, 011075, 011076, 011039, 102000, 031000, 011037, 011077, 103000, 031000,
+               011034, 011035, 011036, 204000, 119000, 031001, 301011, 301013, 301021, 007007,
+               011105, 204007, 031021, 011076, 011075, 204000, 011106, 011107, 011108, 011109,
+               012101, 011001, 201130, 011084, 201000 ]
+"311011" = [  001023, 008004, 301011, 301013, 005002, 006002, 007004, 011001, 011002, 012101,
+               106000, 031001, 008046, 201139, 202126, 015026, 202000, 201000, 106000, 031001,
+               008046, 201138, 202130, 015026, 202000, 201000, 015052, 015053, 015054, 015055,
+               007004, 007004, 013099, 013100, 013101 ]
+"312001" = [  301043, 304001 ]
+"312002" = [  301043, 304002 ]
+"312003" = [  301042, 304003 ]
+"312004" = [  301042, 304004 ]
+"312005" = [  301042, 020014 ]
+"312006" = [  301044, 304005 ]
+"312007" = [  301042, 304006 ]
+"312010" = [  001007, 005040, 002021, 005041, 004001, 004043 ]
+"312011" = [  202131, 201149, 004006, 201000, 202126, 010002, 202000, 005043, 005053 ]
+"312012" = [  202129, 201132, 101019, 012063, 201000, 202000 ]
+"312013" = [  005042, 202129, 201135, 012063, 201000, 202000 ]
+"312014" = [  312010, 312011, 105056, 301023, 005042, 005052, 312012, 312013 ]
+"312015" = [  109011, 301023, 005042, 005052, 202129, 201132, 101004, 012063, 202000, 201000
+               ]
+"312016" = [  312010, 312011, 312015 ]
+"312017" = [  109008, 301023, 005042, 005052, 202129, 201132, 101003, 012063, 202000, 201000
+               ]
+"312018" = [  312010, 312011, 312017 ]
+"312019" = [  301047, 301048, 015015, 029002, 021076, 106012, 201129, 006030, 201000, 102012,
+               005030, 021075, 021066 ]
+"312020" = [  301047, 301048, 015015, 029002, 021076, 104012, 006030, 102012, 005030, 021075,
+               021066 ]
+"312021" = [  301047, 101003, 301049, 011012, 011011, 021067 ]
+"312022" = [  301047, 008022, 011012, 011050, 022070, 022026, 312041, 010050, 021068, 021071,
+               021072, 021073, 312042, 021062, 015011 ]
+"312023" = [  301047, 103003, 008022, 012061, 022050, 021069, 021085 ]
+"312024" = [  312020, 008060, 008022, 008060, 008022, 025014, 022101, 022097, 022098, 022099,
+               022100 ]
+"312025" = [  312019, 008060, 008022, 008060, 008022, 025014, 022101, 022097, 022098, 022099,
+               022100 ]
+"312026" = [  301046, 301011, 301013, 301023, 312031, 101004, 312030, 021110, 301023, 321027,
+               021111, 301023, 321027, 021112, 301023, 321027, 021113, 301023, 321027 ]
+"312027" = [  301047, 105009, 301023, 007021, 012061, 007021, 012061, 021085, 021070 ]
+"312028" = [  301046, 301011, 301013, 301023, 008025, 201136, 004006, 201000, 312031, 312032,
+               101004, 312030, 101002, 312033, 021110, 301023, 321028, 021111, 301023, 321028,
+               021112, 301023, 321028, 021113, 301023, 321028 ]
+"312030" = [  201130, 202129, 011012, 202000, 201000, 011052, 201135, 202130, 011011, 202000,
+               201000, 011053, 021104 ]
+"312031" = [  005034, 006034, 021109, 011081, 011082, 021101, 021102, 021103 ]
+"312032" = [  021120, 021121, 013055, 021122 ]
+"312033" = [  002104, 008022, 012063, 012065 ]
+"312041" = [  201141, 202130, 007001, 201000, 202000 ]
+"312042" = [  021077, 021078, 021079, 021080, 021081, 021082 ]
+"312045" = [  001007, 002019, 001096, 025061, 005040, 301011, 301013, 301021, 007002, 012180,
+               012181, 012182, 012183, 012184, 012185, 002174, 021086, 012186, 021087, 012187,
+               033043 ]
+"312050" = [  001007, 002019, 001096, 025061, 005040, 301011, 301013, 301021, 007025, 005022,
+               010080, 027080, 008003, 007004, 013093, 008003, 201131, 202129, 007004, 007004,
+               202000, 201000, 013095 ]
+"312051" = [  001007, 002019, 001096, 025061, 005040, 008075, 301011, 301013, 301021, 001012,
+               201131, 001013, 201000, 010032, 010033, 010034, 007002, 008012, 025110, 025111,
+               025102, 002104, 025103, 025104, 025105, 025106, 025107, 025108, 002111, 002121,
+               002026, 002027, 021130, 021131, 021132, 021133, 021064, 025014, 021134, 107018,
+               005030, 105024, 201130, 006030, 201000, 021135, 021136, 033044 ]
+"312052" = [  001007, 002019, 001096, 025061, 005040, 025120, 025121, 025124, 025125, 025122,
+               025123, 301011, 301013, 301021, 007002, 002119, 033047, 010081, 010082, 010083,
+               010084, 002116, 002117, 002118, 002156, 002157, 014055, 022150, 022151, 022152,
+               022153, 022154, 022155, 022156, 022157, 022158, 022159, 021137, 021138, 021139,
+               021140, 021141, 021142, 010085, 010086, 010087, 010088, 010089, 010090, 010091,
+               010092, 010093, 011002, 025126, 025127, 025128, 025129, 025130, 025131, 025132,
+               025133, 025134, 025135, 025136, 025137, 013096, 013097, 011095, 011096, 012188,
+               012189, 002158, 002159, 033052, 033053, 021143, 021144 ]
+"312053" = [  001007, 002019, 001096, 025061, 005040, 008075, 301011, 301013, 301021, 001012,
+               201131, 001013, 201000, 010032, 010033, 010034, 007002, 008012, 025110, 025111,
+               025102, 002104, 025103, 025104, 025105, 025106, 025107, 025108, 011001, 011002,
+               022160, 025138, 201130, 202129, 022021, 202000, 201000, 033048, 033049, 002026,
+               002027, 021130, 021131, 021132, 021133, 025014, 106036, 005030, 104024, 201130,
+               006030, 201000, 022161, 033044 ]
+"312055" = [  005033, 005040, 006034, 010095, 021157 ]
+"312056" = [  025060, 001032, 011082, 011081, 020095, 020096, 021155, 201133, 021101, 021102,
+               201000 ]
+"312057" = [  201130, 202129, 011012, 202000, 201000, 201131, 202129, 011011, 202000, 201000,
+               021156, 021104 ]
+"312058" = [  301125, 301011, 301013, 301021, 312055, 021150, 101003, 321030 ]
+"312059" = [  312056, 101000, 031001, 312057 ]
+"312060" = [  025060, 025062, 040001, 040002, 021062, 021151, 021152, 021153, 021154, 021062,
+               021088, 040003, 040004, 040005, 040006, 040007, 020065, 040008, 040009, 040010
+               ]
+"312061" = [  312058, 312060, 312059 ]
+"312070" = [  001007, 002019, 001144, 001124, 030010, 301011, 301013, 301021, 007012, 015012,
+               012165, 012166, 012167, 012168, 027010, 028010, 002099, 013048, 025081, 025082,
+               025083, 025084, 012080, 012081, 012082, 025174, 033028 ]
+"312071" = [  001007, 002019, 002139, 001096, 001040, 025061, 005040, 005044, 008075, 008077,
+               004001, 004002, 004003, 004004, 004005, 004006, 005001, 006001, 010081, 022156,
+               022142, 101020, 022149, 022143, 022144, 021137, 101020, 021181, 021138, 021180,
+               021177, 021178, 021179, 010079, 010085, 010086, 010087, 010089, 010090, 010091,
+               010092, 010093, 011097, 021093, 101020, 021182, 033053, 022151, 022145, 022148,
+               022146, 022147, 025126, 025128, 025127, 021176, 025132, 025133, 025182, 025183,
+               025180, 025184, 025181, 033080 ]
+"313009" = [  021001, 101000, 031001, 021001 ]
+"313010" = [  021036, 101000, 031001, 021036 ]
+"313031" = [  006002, 006012, 101000, 031002, 030001 ]
+"313032" = [  005002, 005012, 101000, 031002, 313031 ]
+"313041" = [  006002, 110000, 031001, 104000, 031001, 006012, 101000, 031012, 030001, 006012,
+               101000, 031001, 030001 ]
+"313042" = [  005002, 005012, 101000, 031002, 313041 ]
+"313043" = [  006002, 005002, 005012, 112000, 031001, 110000, 031001, 104000, 031001, 006012,
+               101000, 031011, 030001, 006012, 101000, 031001, 030001 ]
+"315001" = [  001011, 301011, 301012, 301023, 306001 ]
+"315002" = [  001011, 301011, 301012, 301023, 306004 ]
+"315003" = [  001087, 001085, 001086, 002036, 002148, 002149, 022055, 022056, 022067, 301011,
+               301012, 301021, 008080, 033050, 109000, 031002, 007065, 008080, 033050, 022045,
+               008080, 033050, 022064, 008080, 033050 ]
+"315004" = [  001079, 001011, 001103, 001087, 001019, 001080, 005036, 001036, 001013, 001012,
+               301011, 301012, 301021, 007032, 007033, 002002, 011002, 011001, 007032, 007033,
+               012101, 012103, 007032, 007033, 302021, 002031, 002030, 022005, 022032, 022063,
+               008080, 033050, 022178, 022177, 022067, 008041, 026021, 026022, 026023, 022068,
+               025061, 008041, 008080, 002171, 302090, 002171, 002032, 315005 ]
+"315005" = [  106000, 031002, 007063, 008080, 033050, 022043, 008080, 033050 ]
+"315007" = [  301003, 001019, 001103, 001087, 001036, 001115, 001080, 005036, 301011, 301012,
+               301021, 001079, 001023, 022063, 101000, 031000, 302001, 101000, 031000, 302021,
+               101000, 031000, 302052, 101000, 031000, 302059, 022067, 002171, 302090, 306033,
+               306034, 002171, 022067, 002038, 022067, 022068, 002171, 002033, 002032, 022056,
+               003011, 306035, 107000, 031000, 002032, 003010, 002031, 002040, 022056, 003011,
+               306036, 104000, 031000, 002032, 003012, 003011, 306037 ]
+"315008" = [  301126, 306038, 101000, 031000, 302091, 101000, 031000, 302082, 101000, 031000,
+               306039, 101000, 031000, 306040, 102000, 031000, 002005, 306041, 102000, 031000,
+               002005, 306004, 101000, 031000, 306005 ]
+"315009" = [  001087, 001019, 002149, 008021, 301011, 301012, 301021, 208016, 001051, 208000,
+               002148, 001012, 001014, 033022, 033023, 033027, 025026, 002034, 022060, 007070,
+               002190, 008021, 301011, 301012, 002005, 022043, 002033, 022059, 008029, 013115,
+               103000, 031000, 002005, 306004, 002005, 010004, 010051, 102000, 031000, 007033,
+               012101, 101000, 031000, 306042, 101000, 031000, 306039 ]
+"316001" = [  301011, 004004, 301023, 001021, 002041, 019001, 010051, 019002, 019003, 019004
+               ]
+"316002" = [  008021, 004001, 004002, 004003, 004004, 004005, 001033, 008021, 004001, 004002,
+               004003, 004004, 004005, 007002, 007002 ]
+"316003" = [  110000, 031001, 008011, 008007, 104000, 031001, 005002, 006002, 010002, 011002,
+               008007, 008011 ]
+"316004" = [  111000, 031001, 008011, 008007, 007002, 007002, 102000, 031001, 005002, 006002,
+               011031, 008007, 008011 ]
+"316005" = [  108000, 031001, 008005, 008007, 005002, 006002, 001026, 019001, 008007, 008005
+               ]
+"316006" = [  112000, 031001, 008011, 008007, 007002, 007002, 102000, 031001, 005002, 006002,
+               020011, 020012, 008007, 008011 ]
+"316007" = [  110000, 031001, 008011, 008007, 104000, 031001, 005002, 006002, 019005, 019006,
+               008007, 008011 ]
+"316008" = [  111000, 031001, 008001, 008007, 008023, 103000, 031001, 005002, 006002, 010002,
+               008023, 008007, 008001 ]
+"316009" = [  111000, 031001, 008011, 008007, 007002, 007002, 102000, 031001, 005002, 006002,
+               020041, 008007, 008011 ]
+"316010" = [  107000, 031001, 008011, 008007, 001022, 005002, 006002, 008007, 008011 ]
+"316011" = [  117000, 031001, 008011, 001022, 008007, 102000, 031001, 005002, 006002, 008021,
+               004001, 004002, 004003, 004004, 004005, 020090, 008021, 008007, 008011 ]
+"316020" = [  001033, 001025, 001027, 301011, 301012 ]
+"316021" = [  301023, 002041, 019001, 019007, 019005, 019006, 019008, 008005, 010004, 008005,
+               010004, 019007, 008005, 008021, 004075, 011040, 019007, 105004, 005021, 005021,
+               102002, 019003, 019004 ]
+"316022" = [  001032, 002041, 019001, 019010, 118000, 031001, 008021, 004014, 008005, 301023,
+               019005, 019006, 010004, 011041, 008021, 004075, 011040, 019008, 105004, 005021,
+               005021, 102002, 019003, 019004 ]
+"316026" = [  316020, 316021 ]
+"316027" = [  316020, 316022 ]
+"316030" = [  301014, 001037, 010064, 008019, 001062, 008019, 001065, 008019, 001062, 008019
+               ]
+"316031" = [  008021, 301011, 301012, 301027, 019005, 019006, 020028, 008021 ]
+"316032" = [  008021, 301011, 301012, 301027, 008021 ]
+"316033" = [  008021, 301011, 301012, 101000, 031001, 301027, 008021 ]
+"316034" = [  008079, 316030, 008011, 001022, 008007, 301023, 008007, 020090, 316031, 101000,
+               031000, 316032, 101000, 031001, 316033, 008011, 008079 ]
+"316035" = [  008079, 316030, 008011, 020023, 020021, 020008, 316031, 008011, 008079 ]
+"316036" = [  008079, 316030, 008011, 001027, 316031, 101000, 031000, 316032, 101000, 031001,
+               316033, 008011, 008079 ]
+"316037" = [  008079, 316030, 008011, 011031, 316031, 008011, 008079 ]
+"316038" = [  008079, 316030, 008011, 020041, 020021, 316031, 008011, 008079 ]
+"316039" = [  008079, 316030, 008011, 020024, 316031, 008011, 008079 ]
+"316040" = [  316030, 008079, 301014, 001037, 010064, 008079 ]
+"316050" = [  301001, 301011, 301012, 002160, 008005, 005002, 006002, 008005, 019100, 019005,
+               019006, 019101, 019102, 019103, 019104, 019105 ]
+"316052" = [  301005, 301011, 301012, 001007, 025150, 122000, 031001, 001027, 019150, 019106,
+               008005, 005002, 006002, 008005, 019107, 019005, 019006, 019108, 019109, 019110,
+               019111, 019112, 019113, 019114, 019115, 019116, 019117, 019118, 019119 ]
+"316060" = [  301011, 301012, 005002, 006002, 019005, 019006, 005002, 006002, 005002, 006002,
+               004074, 020048, 011041, 013055 ]
+"316061" = [  301011, 301012, 005002, 006002, 019005, 019006, 102000, 031001, 005002, 006002,
+               102000, 031001, 005002, 006002, 004074, 020048, 011041, 013055 ]
+"316071" = [  301014, 101000, 031002, 316075, 101000, 031002, 316076 ]
+"316072" = [  301014, 101000, 031002, 316077, 101000, 031002, 316078, 101000, 031002, 316079
+               ]
+"316073" = [  301014, 101000, 031002, 316080, 101000, 031002, 316081 ]
+"316074" = [  001039, 008021, 301014, 301027, 008021 ]
+"316075" = [  008079, 008041, 316074, 020006, 033042, 020013, 033042, 020001, 020025, 020026,
+               008041, 008079 ]
+"316076" = [  008079, 008041, 316074, 020006, 020025, 020026, 008041, 008079 ]
+"316077" = [  008079, 008011, 316074, 011031, 008011, 008079 ]
+"316078" = [  008079, 008041, 316074, 033042, 011012, 008041, 008079 ]
+"316079" = [  008079, 008011, 316074, 020023, 020024, 008011, 008079 ]
+"316080" = [  008079, 008011, 316074, 020041, 008011, 008079 ]
+"316081" = [  008079, 008041, 316074, 008041, 008079 ]
+"318001" = [  301025, 024011 ]
+"318003" = [  301026, 024005, 024004, 024021 ]
+"318004" = [  301025, 004023, 013011, 024005, 024004, 024022 ]
+"321001" = [  002101, 002114, 002105, 002106, 002107, 002121 ]
+"321003" = [  021051, 021014, 021017, 021030 ]
+"321004" = [  301031, 002003, 101000, 031001, 321003 ]
+"321005" = [  025004, 002121, 002122, 002123, 002124, 002125, 002126, 002127, 002128, 002129,
+               002130, 002131 ]
+"321006" = [  025001, 025002, 025003, 025005 ]
+"321007" = [  025009, 025010, 025011, 025012, 025013, 025015, 025016, 025017 ]
+"321008" = [  025006, 025007, 025008 ]
+"321009" = [  025018, 025019 ]
+"321010" = [  002101, 007002, 002102, 002103, 002104, 002105, 002106, 002107, 002108, 002109,
+               002110, 002132, 002133 ]
+"321011" = [  030031, 030032, 029002 ]
+"321012" = [  101000, 031001, 002135 ]
+"321021" = [  002003, 002101, 201130, 002106, 201000, 201132, 202130, 002121, 202000, 201000,
+               201133, 202129, 025001, 202000, 201000 ]
+"321022" = [  007007, 204001, 031021, 011001, 204000, 011002, 204001, 031021, 011006, 204000,
+               021030 ]
+"321023" = [  007007, 021091, 021030, 202129, 021014, 201129, 021017, 202000, 201000 ]
+"321024" = [  007007, 204001, 031021, 012007, 011006, 204000, 021030 ]
+"321025" = [  007007, 021091, 021030, 202129, 021014, 201129, 021017, 202000, 201000, 021092,
+               021030, 025092, 201129, 202129, 021017, 202000, 201000 ]
+"321026" = [  007007, 204001, 031021, 012007, 025091, 011071, 011072, 011073, 011074, 204000
+               ]
+"321027" = [  021118, 202129, 201132, 002112, 201000, 201131, 002111, 201000, 202000, 002104,
+               021105, 021106, 021107, 021114, 021115, 021116, 008018, 021117 ]
+"321028" = [  021118, 202129, 201132, 002112, 201000, 201131, 002111, 201000, 202000, 002104,
+               021123, 021106, 021107, 021114, 021115, 021116, 008018, 021117 ]
+"321030" = [  008085, 202129, 201131, 002111, 201000, 202000, 002134, 021062, 021063, 021158,
+               021159, 021160, 021161, 021162, 021163, 021164, 021165, 021166 ]
+"322028" = [  001007, 002019, 004001, 004002, 004003, 004004, 004005, 004006, 005001, 006001,
+               027001, 028001, 027001, 028001, 027001, 028001, 027001, 028001, 010001, 014019,
+               007025, 010080, 005023, 020010, 008003, 007004, 014026, 020014, 013093, 105000,
+               031001, 007004, 007004, 008043, 008044, 015021 ]
+"340001" = [  001007, 001031, 002019, 002020, 004001, 004002, 004003, 004004, 004005, 202131,
+               201138, 004006, 201000, 202000, 005001, 006001, 007024, 005021, 007025, 005022,
+               005043, 005040, 201133, 005041, 201000, 201132, 025070, 201000, 202126, 007001,
+               202000, 033060, 033061, 033062, 033063, 033064, 033065, 101010, 340002, 101087,
+               340003, 002019, 025051, 101007, 340004 ]
+"340002" = [  025140, 025141, 025142 ]
+"340003" = [  104100, 201136, 005042, 201000, 014046 ]
+"340004" = [  005060, 005061, 025085, 105006, 005042, 025142, 014047, 025142, 014048 ]
+"340005" = [  001007, 002019, 001096, 025061, 005044, 005040, 001030, 004001, 004002, 004003,
+               004004, 004005, 004007, 005001, 006001, 008029, 008074, 008077, 040011, 025097,
+               025095, 025098, 025099, 021144, 025096, 040012, 040013, 021169, 022151, 022162,
+               022163, 025160, 025133, 022156, 022164, 022165, 022166, 021137, 021138, 022167,
+               021139, 021118, 021145, 021146, 021147, 022168, 022169, 022170, 025161, 025162,
+               022171, 022172, 022173, 022174, 021170, 021171, 022175, 021172, 021118, 021173,
+               021174, 021175, 002153, 012063, 002153, 012063, 002153, 012063, 013090, 013091,
+               007002, 011097, 011098, 007002, 011095, 011096, 010096, 010081, 010082, 010083,
+               010101, 025132, 025163, 025126, 025128, 025164, 010085, 010097, 010086, 010087,
+               010092, 010088, 010089, 010098, 010099, 010090, 010100, 010093, 025127, 040014
+               ]
+"340007" = [  001007, 001031, 002019, 002020, 004001, 004002, 004003, 004004, 004005, 202131,
+               201138, 004006, 201000, 202000, 005001, 006001, 007024, 005021, 007025, 005022,
+               005043, 005040, 201133, 005041, 201000, 201132, 025070, 201000, 202126, 007001,
+               202000, 103003, 025140, 025141, 033060, 033061, 033062, 033063, 033064, 033065,
+               040020, 101010, 340002, 101087, 340003, 002019, 025051, 101007, 340004, 020081,
+               008029, 020083, 008029, 040018, 040019, 040021, 040022 ]
+"340008" = [  001007, 001031, 002019, 002020, 004001, 004002, 004003, 004004, 004005, 202131,
+               201138, 004006, 201000, 202000, 005001, 006001, 007024, 005021, 007025, 005022,
+               005043, 005040, 201133, 005041, 201000, 201132, 025070, 201000, 202126, 007001,
+               202000, 103003, 025140, 025141, 033060, 033061, 033062, 033063, 033064, 033065,
+               040020, 101010, 340002, 104000, 031002, 201136, 005042, 201000, 014046, 108003,
+               025140, 025141, 040026, 040016, 025062, 101000, 031002, 040017, 002019, 025051,
+               101007, 340004, 020081, 008029, 020083, 008029, 040018, 040019, 040021, 040022
+               ]
+"340009" = [  001007, 001031, 002019, 002020, 301011, 301013, 005040, 201136, 005041, 201000,
+               025071, 005001, 005001, 006001, 006001, 107064, 106032, 008012, 008013, 008065,
+               008072, 013039, 040015 ]
+"340010" = [  001007, 002019, 001096, 025061, 005044, 005040, 001030, 004001, 004002, 004003,
+               004004, 004005, 004007, 005001, 006001, 008029, 008074, 008077, 040011, 025097,
+               025095, 025098, 025099, 021144, 025096, 040012, 040013, 021169, 040023, 040024,
+               040025, 022151, 022162, 022163, 025160, 025133, 022156, 022164, 022165, 022166,
+               021137, 021138, 022167, 021139, 021118, 021145, 021146, 021147, 022168, 022169,
+               022170, 025161, 025162, 022171, 022172, 022173, 022174, 021170, 021171, 022175,
+               021172, 021118, 021173, 021174, 021175, 002153, 012063, 002153, 012063, 002153,
+               012063, 013090, 013091, 007002, 011097, 011098, 007002, 011095, 011096, 010096,
+               010081, 010082, 010083, 010101, 025132, 025163, 025126, 025128, 025164, 010085,
+               010097, 010086, 010087, 010092, 010088, 010089, 010098, 010099, 010090, 010100,
+               010093, 025127, 040014, 010102 ]
+"340011" = [  001007, 002019, 001096, 025061, 005044, 005040, 001030, 004001, 004002, 004003,
+               004004, 004005, 004007, 005001, 006001, 008029, 008077, 040011, 025097, 025112,
+               025113, 021148, 021169, 040024, 040025, 002153, 022189, 022191, 022130, 025167,
+               025166, 022190, 022131, 022132, 022133, 021183, 021184, 022134, 021185, 021118,
+               021186, 021187, 021188, 002153, 012063, 002153, 012063, 013090, 013160, 007002,
+               011097, 007002, 011095, 011096, 010096, 010081, 010082, 010083, 010101, 002153,
+               025165, 025126, 025128, 025164, 010085, 010086, 010087, 010092, 010088, 010089,
+               010098, 010099, 010090, 010100, 010093, 025127, 040014, 010102 ]
+"340012" = [  001007, 002019, 008091, 005001, 006001, 007002, 005063, 005064, 005066, 005041,
+               005067, 301011, 301012, 004007, 008091, 005001, 006001, 107000, 031001, 005042,
+               002153, 002104, 040028, 007024, 040027, 012063 ]
+"340013" = [  001007, 002019, 001033, 001034, 004001, 004002, 004003, 004004, 004005, 004007,
+               005068, 005070, 005069, 040036, 008091, 005001, 006001, 004016, 008091, 005001,
+               006001, 004016, 008091, 005001, 006001, 004016, 008091, 007071, 005021, 007021,
+               040035, 008091, 007071, 005021, 007021, 040035, 008091, 007071, 005021, 007021,
+               040035, 040029, 040030, 040031, 025187, 010004, 012001, 040037, 040032, 040033,
+               040034 ]
diff --git a/definitions/bufr/tables/0/wmo/6/element.table b/definitions/bufr/tables/0/wmo/6/element.table
index 8317e8a..0204d49 100644
--- a/definitions/bufr/tables/0/wmo/6/element.table
+++ b/definitions/bufr/tables/0/wmo/6/element.table
@@ -251,11 +251,11 @@
 008070|tovsOrAtovsProductQualifier|table|TOVS/ATOVS PRODUCT QUALIFIER|CODE TABLE|0|0|4|NA|0|0
 008072|pixelType|table|PIXEL(S) TYPE|CODE TABLE|0|0|3|NA|0|0
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|NA|0|0
-010002|height|long|HEIGHT|m|-1|-40|16|NA|0|0
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|NA|0|0
-010004|pressure|long|PRESSURE|Pa|-1|0|14|NA|0|0
-010007|height|long|HEIGHT|m|0|-1000|17|NA|0|0
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|NA|0|0
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|NA|0|0
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|NA|0|0
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|NA|0|0
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|NA|0|0
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|NA|0|0
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE , DISTANCE FROM THE EARTH CENTRE|m|2|-1073741824|31|NA|0|0
 010040|numberOfRetrievedLayers|long|NUMBER OF RETRIEVED LAYERS|Numeric|0|0|10|NA|0|0
 010050|standardDeviationAltitude|double|STANDARD DEVIATION ALTITUDE|m|2|0|16|NA|0|0
@@ -528,8 +528,8 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION(SURGE OF OFFSET)|m|3|-5000|12|NA|0|0
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OF OFFSET)|m|3|-5000|14|NA|0|0
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE(15-DAY RUNNING MEAN)|K|1|0|12|NA|0|0
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|NA|0|0
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|NA|0|0
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|NA|0|0
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|NA|0|0
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|NA|0|0
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA SURFACE TEMPERATURE|K|2|0|8|NA|0|0
 022061|seaState|table|STATE OF THE SEA|CODE TABLE|0|0|4|NA|0|0
@@ -660,14 +660,14 @@
 026001|principalTimeOfDailyReadingInUtcOfMaximumTemperature|double|PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE|h|1|0|12|NA|0|0
 026002|principalTimeOfDailyReadingInUtcOfMinimumTemperature|double|PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE|h|1|0|12|NA|0|0
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|NA|0|0
-027001|latitude|double|LATITUDE(HIGH ACCURACY)|deg|5|-9000000|25|NA|0|0
-027002|latitude|double|LATITUDE(COARSE ACCURACY)|deg|2|-9000|15|NA|0|0
+027001|nonCoordinateLatitude|double|LATITUDE(HIGH ACCURACY)|deg|5|-9000000|25|NA|0|0
+027002|nonCoordinateLatitude|double|LATITUDE(COARSE ACCURACY)|deg|2|-9000|15|NA|0|0
 027003|alternateLatitude|double|ALTERNATE LATITUDE|deg|2|-9000|15|NA|0|0
 027020|satelliteLocationCounter|long|SATELLITE LOCATION COUNTER|Numeric|0|0|16|NA|0|0
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|NA|0|0
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|NA|0|0
-028001|longitude|double|LONGITUDE(HIGH ACCURACY)|deg|5|-18000000|26|NA|0|0
-028002|longitude|double|LONGITUDE(COARSE ACCURACY)|deg|2|-18000|16|NA|0|0
+028001|nonCoordinateLongitude|double|LONGITUDE(HIGH ACCURACY)|deg|5|-18000000|26|NA|0|0
+028002|nonCoordinateLongitude|double|LONGITUDE(COARSE ACCURACY)|deg|2|-18000|16|NA|0|0
 028003|alternateLongitude|double|ALTERNATE LONGITUDE|deg|2|-18000|16|NA|0|0
 028031|DistanceFromEarthCentreInDirection90DegreesEast|double|IN DIRECTION OF 90 DEGREES EAST,DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|NA|0|0
 029001|projectionType|table|PROJECTION TYPE|CODE TABLE|0|0|3|NA|0|0
diff --git a/definitions/bufr/tables/0/wmo/7/element.table b/definitions/bufr/tables/0/wmo/7/element.table
index cc9082d..b390929 100644
--- a/definitions/bufr/tables/0/wmo/7/element.table
+++ b/definitions/bufr/tables/0/wmo/7/element.table
@@ -77,7 +77,7 @@
 001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
 001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
 001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
 002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
@@ -391,12 +391,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -940,10 +940,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
 022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
@@ -954,8 +954,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1183,8 +1183,8 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1192,8 +1192,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/8/element.table b/definitions/bufr/tables/0/wmo/8/element.table
index cc9082d..b390929 100644
--- a/definitions/bufr/tables/0/wmo/8/element.table
+++ b/definitions/bufr/tables/0/wmo/8/element.table
@@ -77,7 +77,7 @@
 001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
 001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
 001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
 002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
@@ -391,12 +391,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -940,10 +940,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
 022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
@@ -954,8 +954,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1183,8 +1183,8 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1192,8 +1192,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/0/wmo/9/element.table b/definitions/bufr/tables/0/wmo/9/element.table
index cc9082d..b390929 100644
--- a/definitions/bufr/tables/0/wmo/9/element.table
+++ b/definitions/bufr/tables/0/wmo/9/element.table
@@ -77,7 +77,7 @@
 001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
 001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
 001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
 002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
@@ -391,12 +391,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -940,10 +940,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
 022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
@@ -954,8 +954,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1183,8 +1183,8 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1192,8 +1192,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/3/local/1/98/0/element.table b/definitions/bufr/tables/3/local/1/98/0/element.table
index 550619f..f80a82c 100644
--- a/definitions/bufr/tables/3/local/1/98/0/element.table
+++ b/definitions/bufr/tables/3/local/1/98/0/element.table
@@ -62,7 +62,7 @@
 008223|landOrIceSurfaceFlag|flag|LAND/ICE SURFACE FLAG|FLAG TABLE|0|0|7|FLAG TABLE|0|3
 008224|landOrSeaFraction|long|LAND/SEA FRACTION|Numeric|3|0|10|Numeric|3|4
 008225|ghrsstSurfaceType|flag|GHRSST SURFACE TYPE|FLAG TABLE|0|0|5|FLAG TABLE|0|2
-010195|height|double|HEIGHT(HIGH ACCURACY)|m|1|-4096|20|NA|0|0
+010195|nonCoordinateHeight|double|HEIGHT(HIGH ACCURACY)|m|1|-4096|20|NA|0|0
 010196|solarZenithAngle|double|SOLAR ZENITH ANGLE|deg|2|-9000|15|NA|0|0
 010197|anemometerHeight|long|ANEMOMETER HEIGHT|m|0|0|9|NA|0|0
 010200|surfacePressureSpGrib|long|SURFACE PRESSURE ( SP GRIB )|Pa|-1|0|14|NA|0|0
@@ -213,9 +213,9 @@
 025205|channelQualityFlagsForAtovs|flag|CHANNEL QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|31|NA|0|0
 025206|fovQualityFlagsForAtovs|flag|FOV QUALITY FLAGS FOR ATOVS|FLAG TABLE|0|0|31|NA|0|0
 025207|compassAzimuthAngle|double|COMPASS AZIMUTH ANGLE|deg|2|0|16|NA|0|0
-026193|year|long|YEAR|a|0|0|12|NA|0|0
-026194|month|long|MONTH|mon|0|0|4|NA|0|0
-026195|day|long|DAY|d|0|0|6|NA|0|0
+026193|nonCoordinateYear|long|YEAR|a|0|0|12|NA|0|0
+026194|nonCoordinateMonth|long|MONTH|mon|0|0|4|NA|0|0
+026195|nonCoordinateDay|long|DAY|d|0|0|6|NA|0|0
 026196|hour|long|HOUR|h|0|0|5|NA|0|0
 026197|minute|long|MINUTE|min|0|0|6|NA|0|0
 026198|second|long|SECOND|s|0|0|6|NA|0|0
diff --git a/definitions/bufr/tables/3/wmo/11/element.table b/definitions/bufr/tables/3/wmo/11/element.table
index 0771118..48cc791 100644
--- a/definitions/bufr/tables/3/wmo/11/element.table
+++ b/definitions/bufr/tables/3/wmo/11/element.table
@@ -77,7 +77,7 @@
 001095|observerIdentification|string|OBSERVER IDENTIFICATION|CCITT IA5|0|0|32|Character|0|4
 001096|stationAcquisition|string|STATION ACQUISITION|CCITT IA5|0|0|160|Character|0|20
 001101|stateIdentifier|table|STATE IDENTIFIER|CODE TABLE|0|0|10|CODE TABLE|0|3
-001102|stationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
+001102|nationalStationNumber|long|NATIONAL STATION IDENTIFIER|Numeric|0|0|30|Numeric|0|9
 001124|gridPointIdentifier|long|GRID POINT IDENTIFIER|Numeric|0|0|24|Numeric|0|8
 001144|snapshotIdentifier|long|SNAPSHOT IDENTIFIER|Numeric|0|0|31|Numeric|0|10
 002001|stationType|table|TYPE OF STATION|CODE TABLE|0|0|2|CODE TABLE|0|1
@@ -391,12 +391,12 @@
 008085|beamIdentifier|table|BEAM IDENTIFIER|CODE TABLE|0|0|3|CODE TABLE|0|1
 008090|decimalScaleOfFollowingSignificands|long|DECIMAL SCALE|Numeric|0|-127|8|Numeric|0|3
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|m|0|5
-010002|height|long|HEIGHT|m|-1|-40|16|m|-1|5
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
-010004|pressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
-010007|height|long|HEIGHT|m|0|-1000|17|m|0|6
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
-010009|geopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|m|-1|5
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|m2 s-2|-1|6
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|Pa|-1|5
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|m|0|6
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|m2 s-2|0|7
+010009|nonCoordinateGeopotentialHeight|long|GEOPOTENTIAL HEIGHT|gpm|0|-1000|17|gpm|0|5
 010010|minimumPressureReducedToMeanSeaLevel|long|MINIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010011|maximumPressureReducedToMeanSeaLevel|long|MAXIMUM PRESSURE REDUCED TO MEAN SEA LEVEL|Pa|-1|0|14|Pa|-1|5
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE, DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|m|2|10
@@ -940,10 +940,10 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|12|m|3|4
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OR OFFSET)|m|3|-5000|14|m|3|5
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE (15-DAY RUNNING MEAN)|K|1|0|12|K|1|4
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|K|1|4
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|K|2|5
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|m/s|1|5
-022045|waterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
+022045|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|3|0|19|K|3|6
 022049|seaSurfaceTemperature|double|SEA SURFACE TEMPERATURE|K|2|0|15|K|2|5
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA-SURFACE TEMPERATURE|K|2|0|8|K|2|3
 022055|floatCycleNumber|long|FLOAT CYCLE NUMBER|Numeric|0|0|10|Numeric|0|3
@@ -954,8 +954,8 @@
 022062|salinity|double|SALINITY|0/00|2|0|14|0/00|2|5
 022063|totalWaterDepth|long|TOTAL WATER DEPTH|m|0|0|14|m|0|5
 022064|salinity|double|SALINITY|0/00|3|0|17|0/00|3|6
-022065|waterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
-022066|waterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
+022065|oceanographicWaterPressure|long|WATER PRESSURE|Pa|-3|0|17|Pa|-3|6
+022066|oceanographicWaterConductivity|double|WATER CONDUCTIVITY|S/m|6|0|26|S/m|6|8
 022067|instrumentTypeForWaterTemperatureOrSalinityProfileMeasurement|table|INSTRUMENT TYPE FOR WATER TEMPERATURE PROFILE MEASUREMENT|CODE TABLE|0|0|10|CODE TABLE|0|4
 022068|waterTemperatureProfileRecorderTypes|table|WATER TEMPERATURE PROFILE RECORDER TYPES|CODE TABLE|0|0|7|CODE TABLE|0|3
 022069|spectralWaveDensity|double|SPECTRAL WAVE DENSITY|m2/Hz|3|0|22|m2/Hz|3|7
@@ -1183,8 +1183,8 @@
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|min|0|4
 026010|hoursIncluded|flag|HOURS INCLUDED|FLAG TABLE|0|0|26|FLAG TABLE|0|9
 026020|durationOfPrecipitation|long|DURATION OF PRECIPITATION|min|0|0|11|min|0|4
-027001|latitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
-027002|latitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
+027001|nonCoordinateLatitude|double|LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
+027002|nonCoordinateLatitude|double|LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027003|alternateLatitude|double|ALTERNATE LATITUDE (COARSE ACCURACY)|deg|2|-9000|15|deg|2|4
 027004|alternateLatitude|double|ALTERNATE LATITUDE (HIGH ACCURACY)|deg|5|-9000000|25|deg|5|7
 027010|footprintAxis1|long|FOOTPRINT AXIS 1|m|-1|0|14|m|-1|5
@@ -1192,8 +1192,8 @@
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|Numeric|0|5
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|m|2|10
 027080|viewingAzimuthAngle|double|VIEWING AZIMUTH ANGLE|deg|2|0|16|deg|0|5
-028001|longitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
-028002|longitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
+028001|nonCoordinateLongitude|double|LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
+028002|nonCoordinateLongitude|double|LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028003|alternateLongitude|double|ALTERNATE LONGITUDE (COARSE ACCURACY)|deg|2|-18000|16|deg|2|5
 028004|alternateLongitude|double|ALTERNATE LONGITUDE (HIGH ACCURACY)|deg|5|-18000000|26|deg|5|8
 028010|footprintAxis2|long|FOOTPRINT AXIS 2|m|-1|0|14|m|-1|5
diff --git a/definitions/bufr/tables/3/wmo/6/element.table b/definitions/bufr/tables/3/wmo/6/element.table
index 8317e8a..0204d49 100644
--- a/definitions/bufr/tables/3/wmo/6/element.table
+++ b/definitions/bufr/tables/3/wmo/6/element.table
@@ -251,11 +251,11 @@
 008070|tovsOrAtovsProductQualifier|table|TOVS/ATOVS PRODUCT QUALIFIER|CODE TABLE|0|0|4|NA|0|0
 008072|pixelType|table|PIXEL(S) TYPE|CODE TABLE|0|0|3|NA|0|0
 010001|heightOfLandSurface|long|HEIGHT OF LAND SURFACE|m|0|-400|15|NA|0|0
-010002|height|long|HEIGHT|m|-1|-40|16|NA|0|0
-010003|geopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|NA|0|0
-010004|pressure|long|PRESSURE|Pa|-1|0|14|NA|0|0
-010007|height|long|HEIGHT|m|0|-1000|17|NA|0|0
-010008|geopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|NA|0|0
+010002|nonCoordinateHeight|long|HEIGHT|m|-1|-40|16|NA|0|0
+010003|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|-1|-400|17|NA|0|0
+010004|nonCoordinatePressure|long|PRESSURE|Pa|-1|0|14|NA|0|0
+010007|nonCoordinateHeight|long|HEIGHT|m|0|-1000|17|NA|0|0
+010008|nonCoordinateGeopotential|long|GEOPOTENTIAL|m2 s-2|0|-10000|20|NA|0|0
 010031|DistanceFromEarthCentreInDirectionOfNorthPole|double|IN DIRECTION OF THE NORTH POLE , DISTANCE FROM THE EARTH CENTRE|m|2|-1073741824|31|NA|0|0
 010040|numberOfRetrievedLayers|long|NUMBER OF RETRIEVED LAYERS|Numeric|0|0|10|NA|0|0
 010050|standardDeviationAltitude|double|STANDARD DEVIATION ALTITUDE|m|2|0|16|NA|0|0
@@ -528,8 +528,8 @@
 022039|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION(SURGE OF OFFSET)|m|3|-5000|12|NA|0|0
 022040|meteorologicalResidualTidalElevationSurgeOrOffset|double|METEOROLOGICAL RESIDUAL TIDAL ELEVATION (SURGE OF OFFSET)|m|3|-5000|14|NA|0|0
 022041|seaSurfaceTemperature15DayRunningMean|double|SEA-SURFACE TEMPERATURE(15-DAY RUNNING MEAN)|K|1|0|12|NA|0|0
-022042|waterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|NA|0|0
-022043|waterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|NA|0|0
+022042|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|1|0|12|NA|0|0
+022043|oceanographicWaterTemperature|double|SEA/WATER TEMPERATURE|K|2|0|15|NA|0|0
 022044|soundVelocity|double|SOUND VELOCITY|m/s|1|0|14|NA|0|0
 022050|standardDeviationSeaSurfaceTemperature|double|STANDARD DEVIATION SEA SURFACE TEMPERATURE|K|2|0|8|NA|0|0
 022061|seaState|table|STATE OF THE SEA|CODE TABLE|0|0|4|NA|0|0
@@ -660,14 +660,14 @@
 026001|principalTimeOfDailyReadingInUtcOfMaximumTemperature|double|PRINCIPAL TIME OF DAILY READING IN UTC OF MAXIMUM TEMPERATURE|h|1|0|12|NA|0|0
 026002|principalTimeOfDailyReadingInUtcOfMinimumTemperature|double|PRINCIPAL TIME OF DAILY READING IN UTC OF MINIMUM TEMPERATURE|h|1|0|12|NA|0|0
 026003|timeDifference|long|TIME DIFFERENCE|min|0|-1440|12|NA|0|0
-027001|latitude|double|LATITUDE(HIGH ACCURACY)|deg|5|-9000000|25|NA|0|0
-027002|latitude|double|LATITUDE(COARSE ACCURACY)|deg|2|-9000|15|NA|0|0
+027001|nonCoordinateLatitude|double|LATITUDE(HIGH ACCURACY)|deg|5|-9000000|25|NA|0|0
+027002|nonCoordinateLatitude|double|LATITUDE(COARSE ACCURACY)|deg|2|-9000|15|NA|0|0
 027003|alternateLatitude|double|ALTERNATE LATITUDE|deg|2|-9000|15|NA|0|0
 027020|satelliteLocationCounter|long|SATELLITE LOCATION COUNTER|Numeric|0|0|16|NA|0|0
 027021|satelliteSublocationDimension|long|SATELLITE SUBLOCATION DIMENSION|Numeric|0|0|16|NA|0|0
 027031|DistanceFromEarthCentreInDirectionOf0DegreesLongitude|double|IN DIRECTION OF 0 DEGREES LONGITUDE, DISTANCE FROM THE EARTH'S C|m|2|-1073741824|31|NA|0|0
-028001|longitude|double|LONGITUDE(HIGH ACCURACY)|deg|5|-18000000|26|NA|0|0
-028002|longitude|double|LONGITUDE(COARSE ACCURACY)|deg|2|-18000|16|NA|0|0
+028001|nonCoordinateLongitude|double|LONGITUDE(HIGH ACCURACY)|deg|5|-18000000|26|NA|0|0
+028002|nonCoordinateLongitude|double|LONGITUDE(COARSE ACCURACY)|deg|2|-18000|16|NA|0|0
 028003|alternateLongitude|double|ALTERNATE LONGITUDE|deg|2|-18000|16|NA|0|0
 028031|DistanceFromEarthCentreInDirection90DegreesEast|double|IN DIRECTION OF 90 DEGREES EAST,DISTANCE FROM THE EARTH'S CENTRE|m|2|-1073741824|31|NA|0|0
 029001|projectionType|table|PROJECTION TYPE|CODE TABLE|0|0|3|NA|0|0
diff --git a/definitions/check_grib_defs.pl b/definitions/check_grib_defs.pl
index 27984f6..f4ec150 100755
--- a/definitions/check_grib_defs.pl
+++ b/definitions/check_grib_defs.pl
@@ -1,4 +1,15 @@
-#!/usr/local/share/perl
+#!/usr/bin/env perl
+
+#
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+#
 
 #########################################################################################
 # Load in the definition files for GRIB "concepts" and check:
@@ -173,14 +184,17 @@ sub process {
             # Users will set parameters by shortname or ID
             if ($filename eq 'paramId.def' || $filename eq 'shortName.def') {
                 # The 'typeOfSecondFixedSurface' key has side effects and can change the scale values/factors!
-                # So make sure it comes BEFORE the scale keys! i.e. if we find a scale key then our map should have
-                # the typeOf key since it came before
-                if ($key =~ /scale.*OfSecondFixedSurface/ && !exists($map2{'typeOfSecondFixedSurface'})) {
+                # So make sure it comes BEFORE the scale keys! So if we come across this key ensure none of
+                # scale keys came before it
+                if ( $key =~ /typeOfSecondFixedSurface/ && 
+                    (exists($map2{'scaleFactorOfFirstFixedSurface'}) ||
+                     exists($map2{'scaledValueOfFirstFixedSurface'}) ||
+                     exists($map2{'scaleFactorOfSecondFixedSurface'}) ||
+                     exists($map2{'scaledValueOfSecondFixedSurface'})) )
+                {
                     print "File: $filename, line: $lineNum: TypeOfSurface problem (GRIB-229): Please check: $desc\n";
-                    #$error = 1;
-                }
-                if ($key =~ /typeOfSecondFixedSurface/ && exists($map2{'typeOfFirstFixedSurface'})) {
-                    print "File: $filename, line: $lineNum: Potential TypeOfSurface problem (GRIB-229): Please check: $desc\n";
+                    #print "DUMP,\t", Data::Dumper->Dump([\%map2], [" "]);
+                    $error = 1;
                 }
             }
             $map2{$key} = $val;
diff --git a/definitions/grib1/2.0.1.table b/definitions/grib1/2.0.1.table
index 4a94b8a..70df87f 100644
--- a/definitions/grib1/2.0.1.table
+++ b/definitions/grib1/2.0.1.table
@@ -110,7 +110,7 @@
 110 110 None Secondary wave period s
 111 111 None Net short-wave radiation flux (surface) W m**-2
 112 112 None Net long-wave radiation flux (surface) W m**-2
-113 113 None Net short-wave radiationflux(atmosph.top) W m**-2
+113 113 None Net short-wave radiation flux(atmosph.top) W m**-2
 114 114 None Net long-wave radiation flux(atmosph.top) W m**-2
 115 115 None Long-wave radiation flux W m**-2
 116 116 None Short-wave radiation flux W m**-2
diff --git a/definitions/grib1/2.0.2.table b/definitions/grib1/2.0.2.table
index 48b7b84..4091acf 100644
--- a/definitions/grib1/2.0.2.table
+++ b/definitions/grib1/2.0.2.table
@@ -110,7 +110,7 @@
 110 110 None Secondary wave period s
 111 111 None Net short-wave radiation flux (surface) W m**-2
 112 112 None Net long-wave radiation flux (surface) W m**-2
-113 113 None Net short-wave radiationflux(atmosph.top) W m**-2
+113 113 None Net short-wave radiation flux(atmosph.top) W m**-2
 114 114 None Net long-wave radiation flux(atmosph.top) W m**-2
 115 115 None Long-wave radiation flux W m**-2
 116 116 None Short-wave radiation flux W m**-2
diff --git a/definitions/grib1/2.0.3.table b/definitions/grib1/2.0.3.table
index 4a94b8a..70df87f 100644
--- a/definitions/grib1/2.0.3.table
+++ b/definitions/grib1/2.0.3.table
@@ -110,7 +110,7 @@
 110 110 None Secondary wave period s
 111 111 None Net short-wave radiation flux (surface) W m**-2
 112 112 None Net long-wave radiation flux (surface) W m**-2
-113 113 None Net short-wave radiationflux(atmosph.top) W m**-2
+113 113 None Net short-wave radiation flux(atmosph.top) W m**-2
 114 114 None Net long-wave radiation flux(atmosph.top) W m**-2
 115 115 None Long-wave radiation flux W m**-2
 116 116 None Short-wave radiation flux W m**-2
diff --git a/definitions/grib1/2.128.table b/definitions/grib1/2.128.table
index ed1bac7..7d0b076 100644
--- a/definitions/grib1/2.128.table
+++ b/definitions/grib1/2.128.table
@@ -245,7 +245,7 @@
 245 245 FLSR Forecast log of surface roughness for heat - -
 246 246 CLWC Cloud liquid water content kg kg**-1 -
 247 247 CIWC Cloud ice water content kg kg**-1 -
-248 248 CC Cloud cover (0 - 1) -
+248 248 CC Fraction of cloud cover (0 - 1) -
 249 249 AIW Accumulated ice water tendency (-1 to 1) -
 250 250 ICE Ice age 1,0 0 first-year, 1 multi-year
 251 251 ATTE Adiabatic tendency of temperature K -
diff --git a/definitions/grib1/2.82.253.table b/definitions/grib1/2.82.253.table
index d5805fa..885e300 100644
--- a/definitions/grib1/2.82.253.table
+++ b/definitions/grib1/2.82.253.table
@@ -105,7 +105,7 @@
 110 swp SWP Secondary wave period s
 111 nswrs NSWRS Net short-wave radiation flux (surface) J m**-2
 112 nlwrs NLWRS Net long-wave radiation flux (surface) J m**-2
-113 nswrt NSWRT Net short-wave radiationflux(atmosph.top) J m**-2
+113 nswrt NSWRT Net short-wave radiation flux(atmosph.top) J m**-2
 114 nlwrt NLWRT Net long-wave radiation flux(atmosph.top) J m**-2
 115 lwavr LWAVR Long wave radiation flux J m**-2
 116 swavr SWAVR Short wave radiation flux J m**-2
diff --git a/definitions/grib1/2.98.128.table b/definitions/grib1/2.98.128.table
index ab40978..a226d0d 100644
--- a/definitions/grib1/2.98.128.table
+++ b/definitions/grib1/2.98.128.table
@@ -245,7 +245,7 @@
 245 flsr Forecast logarithm of surface roughness for heat ()
 246 clwc Cloud liquid water content (kg kg**-1)
 247 ciwc Cloud ice water content (kg kg**-1)
-248 cc Cloud cover ((0 - 1))
+248 cc Fraction of cloud cover ((0 - 1))
 249 aiw Accumulated ice water tendency ((-1 to 1))
 250 ice Ice age ((0 - 1))
 251 atte Adiabatic tendency of temperature (K)
diff --git a/definitions/grib1/2.98.174.table b/definitions/grib1/2.98.174.table
index bede8ca..2a4facb 100644
--- a/definitions/grib1/2.98.174.table
+++ b/definitions/grib1/2.98.174.table
@@ -25,6 +25,7 @@
 90 90 - Top outgoing solar radiation (J m**-2)
 94 94 - Mean sea surface temperature (K)
 95 95 - 1.5m specific humidity (kg kg**-1)
+96 96 - 2m specific humidity (kg kg**-1)
 97 97 SIST Sea-ice Snow Thickness (m)
 98 98 SIT Sea-ice thickness (m)
 99 99 - Liquid water potential temperature (K)
diff --git a/definitions/grib1/2.98.230.table b/definitions/grib1/2.98.230.table
index 18d1d23..8ec456e 100644
--- a/definitions/grib1/2.98.230.table
+++ b/definitions/grib1/2.98.230.table
@@ -7,6 +7,7 @@
 44 44 ESVAR Snow evaporation (variable resolution) (kg m**-2)
 45 45 SMLTVAR Snowmelt (variable resolution) (kg m**-2)
 46 46 SDURVAR Solar duration (variable resolution) (s)
+47 47 DSRPVAR Direct solar radiation (variable resolution) (J m**-2)
 50 50 LSPFVAR Large-scale precipitation fraction (variable resolution) (s)
 57 57 UVBVAR Downward UV radiation at the surface (variable resolution) (J m**-2)
 58 58 PARVAR Photosynthetically active radiation at the surface (variable resolution) (J m**-2)
diff --git a/definitions/grib1/6.table b/definitions/grib1/6.table
index 211e6fb..f7e0644 100644
--- a/definitions/grib1/6.table
+++ b/definitions/grib1/6.table
@@ -21,4 +21,4 @@
 70 70 Stretched Spherical Harmonic coefficients
 80 80 Stretched and rotated Spherical Harmonic
 90 sv Space view perspective or orthographic grid
-193 193 Quasi-regular latitude/longitude
\ No newline at end of file
+193 193 Quasi-regular latitude/longitude
diff --git a/definitions/grib1/boot.def b/definitions/grib1/boot.def
index 906cc84..a852fba 100644
--- a/definitions/grib1/boot.def
+++ b/definitions/grib1/boot.def
@@ -2,7 +2,7 @@
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-# 
+#
 # In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
diff --git a/definitions/grib1/cfVarName.def b/definitions/grib1/cfVarName.def
index 4915f88..f6c336e 100644
--- a/definitions/grib1/cfVarName.def
+++ b/definitions/grib1/cfVarName.def
@@ -152,16 +152,6 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'lcc' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'mcc' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'btmp' = {
 	 table2Version = 3 ;
@@ -617,7 +607,7 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'p3113' = {
 	 table2Version = 3 ;
 	 indicatorOfParameter = 113 ;
@@ -863,16 +853,6 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'lcc' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'mcc' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'btmp' = {
 	 table2Version = 2 ;
@@ -1313,7 +1293,7 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'p3113' = {
 	 table2Version = 2 ;
 	 indicatorOfParameter = 113 ;
@@ -1559,16 +1539,6 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'lcc' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'mcc' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'btmp' = {
 	 table2Version = 1 ;
@@ -2009,7 +1979,7 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'p3113' = {
 	 table2Version = 1 ;
 	 indicatorOfParameter = 113 ;
diff --git a/definitions/grib1/grid_definition_13.def b/definitions/grib1/grid_definition_13.def
index 64a991c..d3bfa70 100644
--- a/definitions/grib1/grid_definition_13.def
+++ b/definitions/grib1/grid_definition_13.def
@@ -11,4 +11,5 @@
 # grib 1 -> 2
 constant gridDefinitionTemplateNumber     = 30;
 
-template commonBlock "grib1/grid_definition_lambert.def";
\ No newline at end of file
+template commonBlock "grib1/grid_definition_lambert.def";
+
diff --git a/definitions/grib1/local.34.def b/definitions/grib1/local.34.def
index 2203d98..4370a16 100644
--- a/definitions/grib1/local.34.def
+++ b/definitions/grib1/local.34.def
@@ -2,3 +2,5 @@ label "JMA - extension";
 # Japanese Meteorological Agency
 codetable[1] localDefinitionNumber 'grib1/localDefinitionNumber.34.table' = 1 : dump;
 template  localDefinition  "grib1/local.34.[localDefinitionNumber:l].def";
+
+template_nofail marsKeywords "mars/grib.[stream:s].[type:s].def";
diff --git a/definitions/grib1/local.85.def b/definitions/grib1/local.85.def
new file mode 100644
index 0000000..8773735
--- /dev/null
+++ b/definitions/grib1/local.85.def
@@ -0,0 +1,24 @@
+transient defaultFaFieldName = "";
+transient defaultFaLevelName = "";
+transient defaultFaModelName = "";
+
+concept ls.faFieldName (defaultFaFieldName,"faFieldName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy;
+concept ls.faLevelName (defaultFaLevelName,"faLevelName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy;
+concept ls.faModelName (defaultFaModelName,"faModelName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy;
+
+transient LSTCUM = 0;
+transient ZLMULT = 1.;
+transient ZLBASE = 0.;
+
+# For compatibility with GRIB2 templates
+
+transient  CLNOMA  = "";
+transient  INGRIB  =  0;
+transient  LLCOSP  =  0;
+transient  INBITS  =  0;
+
+# Scaling factor
+
+transient  FMULTM  = 1;
+transient  FMULTE  = 0;
+
diff --git a/definitions/grib1/local/edzw/2.0.3.table b/definitions/grib1/local/edzw/2.0.3.table
index a4f9a0d..efa3bd1 100755
--- a/definitions/grib1/local/edzw/2.0.3.table
+++ b/definitions/grib1/local/edzw/2.0.3.table
@@ -110,7 +110,7 @@
 110 110 None Secondary wave period s
 111 111 None Net short-wave radiation flux (surface) W m**-2
 112 112 None Net long-wave radiation flux (surface) W m**-2
-113 113 None Net short-wave radiationflux(atmosph.top) W m**-2
+113 113 None Net short-wave radiation flux(atmosph.top) W m**-2
 114 114 None Net long-wave radiation flux(atmosph.top) W m**-2
 115 115 None Long-wave radiation flux W m**-2
 116 116 None Short-wave radiation flux W m**-2
diff --git a/definitions/grib1/localConcepts/ecmf/cfVarName.def b/definitions/grib1/localConcepts/ecmf/cfVarName.def
index bee4437..4bb0fe3 100644
--- a/definitions/grib1/localConcepts/ecmf/cfVarName.def
+++ b/definitions/grib1/localConcepts/ecmf/cfVarName.def
@@ -2024,7 +2024,7 @@
 	 table2Version = 128 ;
 	 indicatorOfParameter = 247 ;
 	}
-#Cloud cover
+#Fraction of cloud cover
 'cc' = {
 	 table2Version = 128 ;
 	 indicatorOfParameter = 248 ;
@@ -3674,6 +3674,11 @@
 	 table2Version = 174 ;
 	 indicatorOfParameter = 52 ;
 	}
+#2m specific humidity
+'p174096' = {
+	 table2Version = 174 ;
+	 indicatorOfParameter = 96 ;
+	}
 #Sea-ice Snow Thickness
 'sist' = {
 	 table2Version = 174 ;
@@ -9255,15 +9260,20 @@
 	 indicatorOfParameter = 20 ;
 	}
 #Total sky direct solar radiation at surface (variable resolution)
-'p230021' = {
+'fdirvar' = {
 	 table2Version = 230 ;
 	 indicatorOfParameter = 21 ;
 	}
 #Clear-sky direct solar radiation at surface (variable resolution)
-'p230022' = {
+'cdirvar' = {
 	 table2Version = 230 ;
 	 indicatorOfParameter = 22 ;
 	}
+#Direct solar radiation (variable resolution)
+'dsrpvar' = {
+	 table2Version = 230 ;
+	 indicatorOfParameter = 47 ;
+	}
 #Large-scale precipitation fraction (variable resolution)
 'lspfvar' = {
 	 table2Version = 230 ;
@@ -9330,127 +9340,127 @@
 	 indicatorOfParameter = 251 ;
 	}
 #Mean surface runoff rate
-'p235020' = {
+'msror' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 20 ;
 	}
 #Mean sub-surface runoff rate
-'p235021' = {
+'mssror' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 21 ;
 	}
 #Mean surface photosynthetically active radiation flux, clear sky
-'p235022' = {
+'msparfcs' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 22 ;
 	}
 #Mean snow evaporation rate
-'p235023' = {
+'mser' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 23 ;
 	}
 #Mean snowmelt rate
-'p235024' = {
+'msmr' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 24 ;
 	}
 #Mean magnitude of turbulent surface stress
-'p235025' = {
+'mmtss' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 25 ;
 	}
 #Mean large-scale precipitation fraction
-'p235026' = {
+'mlspf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 26 ;
 	}
 #Mean surface downward UV radiation flux
-'p235027' = {
+'msdwuvrf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 27 ;
 	}
 #Mean surface photosynthetically active radiation flux
-'p235028' = {
+'msparf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 28 ;
 	}
 #Mean large-scale precipitation rate
-'p235029' = {
+'mlspr' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 29 ;
 	}
 #Mean convective precipitation rate
-'p235030' = {
+'mcpr' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 30 ;
 	}
 #Mean snowfall rate
-'p235031' = {
+'msr' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 31 ;
 	}
 #Mean boundary layer dissipation
-'p235032' = {
+'mbld' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 32 ;
 	}
 #Mean surface sensible heat flux
-'p235033' = {
+'msshf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 33 ;
 	}
 #Mean surface latent heat flux
-'p235034' = {
+'mslhf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 34 ;
 	}
 #Mean surface downward short-wave radiation flux
-'p235035' = {
+'msdwswrf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 35 ;
 	}
 #Mean surface downward long-wave radiation flux
-'p235036' = {
+'msdwlwrf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 36 ;
 	}
 #Mean surface net short-wave radiation flux
-'p235037' = {
+'msnswrf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 37 ;
 	}
 #Mean surface net long-wave radiation flux
-'p235038' = {
+'msnlwrf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 38 ;
 	}
 #Mean top net short-wave radiation flux
-'p235039' = {
+'mtnswrf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 39 ;
 	}
 #Mean top net long-wave radiation flux
-'p235040' = {
+'mtnlwrf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 40 ;
 	}
 #Mean eastward turbulent surface stress
-'p235041' = {
+'metss' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 41 ;
 	}
 #Mean northward turbulent surface stress
-'p235042' = {
+'mntss' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 42 ;
 	}
 #Mean evaporation rate
-'p235043' = {
+'mer' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 43 ;
 	}
 #Sunshine duration fraction
-'p235044' = {
+'sdf' = {
 	 table2Version = 235 ;
 	 indicatorOfParameter = 44 ;
 	}
diff --git a/definitions/grib1/localConcepts/ecmf/name.def b/definitions/grib1/localConcepts/ecmf/name.def
index 3f4ef1c..5c7d6c8 100644
--- a/definitions/grib1/localConcepts/ecmf/name.def
+++ b/definitions/grib1/localConcepts/ecmf/name.def
@@ -2024,8 +2024,8 @@
 	 table2Version = 128 ;
 	 indicatorOfParameter = 247 ;
 	}
-#Cloud cover
-'Cloud cover' = {
+#Fraction of cloud cover
+'Fraction of cloud cover' = {
 	 table2Version = 128 ;
 	 indicatorOfParameter = 248 ;
 	}
@@ -3674,6 +3674,11 @@
 	 table2Version = 174 ;
 	 indicatorOfParameter = 52 ;
 	}
+#2m specific humidity
+'2m specific humidity' = {
+	 table2Version = 174 ;
+	 indicatorOfParameter = 96 ;
+	}
 #Sea-ice Snow Thickness
 'Sea-ice Snow Thickness' = {
 	 table2Version = 174 ;
@@ -9264,6 +9269,11 @@
 	 table2Version = 230 ;
 	 indicatorOfParameter = 22 ;
 	}
+#Direct solar radiation (variable resolution)
+'Direct solar radiation (variable resolution)' = {
+	 table2Version = 230 ;
+	 indicatorOfParameter = 47 ;
+	}
 #Large-scale precipitation fraction (variable resolution)
 'Large-scale precipitation fraction (variable resolution)' = {
 	 table2Version = 230 ;
diff --git a/definitions/grib1/localConcepts/ecmf/paramId.def b/definitions/grib1/localConcepts/ecmf/paramId.def
index 0e996da..fcdf1df 100644
--- a/definitions/grib1/localConcepts/ecmf/paramId.def
+++ b/definitions/grib1/localConcepts/ecmf/paramId.def
@@ -2024,7 +2024,7 @@
 	 table2Version = 128 ;
 	 indicatorOfParameter = 247 ;
 	}
-#Cloud cover
+#Fraction of cloud cover
 '248' = {
 	 table2Version = 128 ;
 	 indicatorOfParameter = 248 ;
@@ -3674,6 +3674,11 @@
 	 table2Version = 174 ;
 	 indicatorOfParameter = 52 ;
 	}
+#2m specific humidity
+'174096' = {
+	 table2Version = 174 ;
+	 indicatorOfParameter = 96 ;
+	}
 #Sea-ice Snow Thickness
 '174097' = {
 	 table2Version = 174 ;
@@ -9264,6 +9269,11 @@
 	 table2Version = 230 ;
 	 indicatorOfParameter = 22 ;
 	}
+#Direct solar radiation (variable resolution)
+'230047' = {
+	 table2Version = 230 ;
+	 indicatorOfParameter = 47 ;
+	}
 #Large-scale precipitation fraction (variable resolution)
 '230050' = {
 	 table2Version = 230 ;
diff --git a/definitions/grib1/localConcepts/ecmf/shortName.def b/definitions/grib1/localConcepts/ecmf/shortName.def
index a4f2466..ab11242 100644
--- a/definitions/grib1/localConcepts/ecmf/shortName.def
+++ b/definitions/grib1/localConcepts/ecmf/shortName.def
@@ -2024,7 +2024,7 @@
 	 table2Version = 128 ;
 	 indicatorOfParameter = 247 ;
 	}
-#Cloud cover
+#Fraction of cloud cover
 'cc' = {
 	 table2Version = 128 ;
 	 indicatorOfParameter = 248 ;
@@ -3674,6 +3674,11 @@
 	 table2Version = 174 ;
 	 indicatorOfParameter = 52 ;
 	}
+#2m specific humidity
+'~' = {
+	 table2Version = 174 ;
+	 indicatorOfParameter = 96 ;
+	}
 #Sea-ice Snow Thickness
 'sist' = {
 	 table2Version = 174 ;
@@ -9264,6 +9269,11 @@
 	 table2Version = 230 ;
 	 indicatorOfParameter = 22 ;
 	}
+#Direct solar radiation (variable resolution)
+'dsrpvar' = {
+	 table2Version = 230 ;
+	 indicatorOfParameter = 47 ;
+	}
 #Large-scale precipitation fraction (variable resolution)
 'lspfvar' = {
 	 table2Version = 230 ;
diff --git a/definitions/grib1/localConcepts/ecmf/units.def b/definitions/grib1/localConcepts/ecmf/units.def
index b5143da..738a2c1 100644
--- a/definitions/grib1/localConcepts/ecmf/units.def
+++ b/definitions/grib1/localConcepts/ecmf/units.def
@@ -2024,7 +2024,7 @@
 	 table2Version = 128 ;
 	 indicatorOfParameter = 247 ;
 	}
-#Cloud cover
+#Fraction of cloud cover
 '(0 - 1)' = {
 	 table2Version = 128 ;
 	 indicatorOfParameter = 248 ;
@@ -3674,6 +3674,11 @@
 	 table2Version = 174 ;
 	 indicatorOfParameter = 52 ;
 	}
+#2m specific humidity
+'kg kg**-1' = {
+	 table2Version = 174 ;
+	 indicatorOfParameter = 96 ;
+	}
 #Sea-ice Snow Thickness
 'm' = {
 	 table2Version = 174 ;
@@ -3825,12 +3830,12 @@
 	 indicatorOfParameter = 118 ;
 	}
 #Mean altitude of maximum injection
-'m above sea level' = {
+'m' = {
 	 table2Version = 210 ;
 	 indicatorOfParameter = 119 ;
 	}
 #Altitude of plume top
-'m above sea level' = {
+'m' = {
 	 table2Version = 210 ;
 	 indicatorOfParameter = 120 ;
 	}
@@ -4020,7 +4025,7 @@
 	 indicatorOfParameter = 241 ;
 	}
 #Altitude of plume bottom
-'m above sea level' = {
+'m' = {
 	 table2Version = 210 ;
 	 indicatorOfParameter = 242 ;
 	}
@@ -4105,12 +4110,12 @@
 	 indicatorOfParameter = 118 ;
 	}
 #Altitude of emitter
-'m above sea level' = {
+'m' = {
 	 table2Version = 211 ;
 	 indicatorOfParameter = 119 ;
 	}
 #Altitude of plume top
-'m above sea level' = {
+'m' = {
 	 table2Version = 211 ;
 	 indicatorOfParameter = 120 ;
 	}
@@ -9025,22 +9030,22 @@
 	 indicatorOfParameter = 48 ;
 	}
 #Instantaneous total lightning density
-'flashes/km2/day' = {
+'flashes km**-2 day**-1' = {
 	 table2Version = 228 ;
 	 indicatorOfParameter = 50 ;
 	}
 #Averaged total lightning density
-'flashes/km2/day' = {
+'flashes km**-2 day**-1' = {
 	 table2Version = 228 ;
 	 indicatorOfParameter = 51 ;
 	}
 #Instantaneous cloud-to-ground lightning density
-'flashes/km2/day' = {
+'flashes km**-2 day**-1' = {
 	 table2Version = 228 ;
 	 indicatorOfParameter = 52 ;
 	}
 #Averaged cloud-to-ground lightning density
-'flashes/km2/day' = {
+'flashes km**-2 day**-1' = {
 	 table2Version = 228 ;
 	 indicatorOfParameter = 53 ;
 	}
@@ -9264,6 +9269,11 @@
 	 table2Version = 230 ;
 	 indicatorOfParameter = 22 ;
 	}
+#Direct solar radiation (variable resolution)
+'J m**-2' = {
+	 table2Version = 230 ;
+	 indicatorOfParameter = 47 ;
+	}
 #Large-scale precipitation fraction (variable resolution)
 's' = {
 	 table2Version = 230 ;
@@ -11725,7 +11735,7 @@
 	 indicatorOfParameter = 229 ;
 	}
 #Mean wave direction
-'degrees' = {
+'Degree true' = {
 	 table2Version = 140 ;
 	 indicatorOfParameter = 230 ;
 	}
@@ -12360,12 +12370,12 @@
 	 indicatorOfParameter = 202 ;
 	}
 #Bias in the zonal pressure gradient (applied)
-'Pa**m-1' = {
+'Pa m**-1' = {
 	 table2Version = 151 ;
 	 indicatorOfParameter = 203 ;
 	}
 #Bias in the meridional pressure gradient (applied)
-'Pa**m-1' = {
+'Pa m**-1' = {
 	 table2Version = 151 ;
 	 indicatorOfParameter = 204 ;
 	}
diff --git a/definitions/grib1/localConcepts/edzw/name.def b/definitions/grib1/localConcepts/edzw/name.def
index 31fdf11..9bb9e9b 100755
--- a/definitions/grib1/localConcepts/edzw/name.def
+++ b/definitions/grib1/localConcepts/edzw/name.def
@@ -1,4 +1,4 @@
-# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-02-03 10:04
+# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-06-03 11:40
 #paramId: 500000
 #Pressure (S) (not reduced)
 'Pressure (S) (not reduced)' = {
@@ -8975,3 +8975,17 @@
 	 indicatorOfParameter = 196 ;
 	}
 
+#paramId: 503286
+#Impervious (paved or sealed) surface fraction
+'Impervious (paved or sealed) surface fraction' = {
+	 table2Version = 202 ;
+	 indicatorOfParameter = 33 ;
+	}
+
+#paramId: 503287
+#Antropogenic heat flux (e.g. urban heating, traffic)
+'Antropogenic heat flux (e.g. urban heating, traffic)' = {
+	 table2Version = 202 ;
+	 indicatorOfParameter = 34 ;
+	}
+
diff --git a/definitions/grib1/localConcepts/edzw/paramId.def b/definitions/grib1/localConcepts/edzw/paramId.def
index 5eba042..23fa920 100755
--- a/definitions/grib1/localConcepts/edzw/paramId.def
+++ b/definitions/grib1/localConcepts/edzw/paramId.def
@@ -1,4 +1,4 @@
-# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE,do not edit! 2016-02-03 10:04
+# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE,do not edit! 2016-06-03 11:40
 #paramId: 500000
 #Pressure (S) (not reduced)
 '500000' = {
@@ -8975,3 +8975,17 @@
 	 indicatorOfParameter = 196 ;
 	}
 
+#paramId: 503286
+#Impervious (paved or sealed) surface fraction
+'503286' = {
+	 table2Version = 202 ;
+	 indicatorOfParameter = 33 ;
+	}
+
+#paramId: 503287
+#Antropogenic heat flux (e.g. urban heating, traffic)
+'503287' = {
+	 table2Version = 202 ;
+	 indicatorOfParameter = 34 ;
+	}
+
diff --git a/definitions/grib1/localConcepts/edzw/shortName.def b/definitions/grib1/localConcepts/edzw/shortName.def
index 2e9be9d..3fc0356 100755
--- a/definitions/grib1/localConcepts/edzw/shortName.def
+++ b/definitions/grib1/localConcepts/edzw/shortName.def
@@ -1,4 +1,4 @@
-# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-02-03 10:04
+# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-06-03 11:40
 #paramId: 500000
 #Pressure (S) (not reduced)
 'PS' = {
@@ -8975,3 +8975,17 @@
 	 indicatorOfParameter = 196 ;
 	}
 
+#paramId: 503286
+#Impervious (paved or sealed) surface fraction
+'FR_PAVED' = {
+	 table2Version = 202 ;
+	 indicatorOfParameter = 33 ;
+	}
+
+#paramId: 503287
+#Antropogenic heat flux (e.g. urban heating, traffic)
+'AHF' = {
+	 table2Version = 202 ;
+	 indicatorOfParameter = 34 ;
+	}
+
diff --git a/definitions/grib1/localConcepts/edzw/units.def b/definitions/grib1/localConcepts/edzw/units.def
index e0b5ef3..a35694a 100755
--- a/definitions/grib1/localConcepts/edzw/units.def
+++ b/definitions/grib1/localConcepts/edzw/units.def
@@ -1,4 +1,4 @@
-# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-02-03 10:04
+# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-06-03 11:40
 #paramId: 500000
 #Pressure (S) (not reduced)
 'Pa' = {
@@ -8975,3 +8975,17 @@
 	 indicatorOfParameter = 196 ;
 	}
 
+#paramId: 503286
+#Impervious (paved or sealed) surface fraction
+'Proportion' = {
+	 table2Version = 202 ;
+	 indicatorOfParameter = 33 ;
+	}
+
+#paramId: 503287
+#Antropogenic heat flux (e.g. urban heating, traffic)
+'W m-2' = {
+	 table2Version = 202 ;
+	 indicatorOfParameter = 34 ;
+	}
+
diff --git a/definitions/grib1/localConcepts/kwbc/name.def b/definitions/grib1/localConcepts/kwbc/name.def
index 704ff9a..a49d424 100644
--- a/definitions/grib1/localConcepts/kwbc/name.def
+++ b/definitions/grib1/localConcepts/kwbc/name.def
@@ -1,2 +1,2 @@
 'Snow Depth' = { table2Version=128; indicatorOfParameter =141; }
-
+'V-component of ice drift' = { table2Version=174; indicatorOfParameter =96; }
diff --git a/definitions/grib1/localConcepts/kwbc/paramId.def b/definitions/grib1/localConcepts/kwbc/paramId.def
index 9dbc6d6..ce22a00 100644
--- a/definitions/grib1/localConcepts/kwbc/paramId.def
+++ b/definitions/grib1/localConcepts/kwbc/paramId.def
@@ -1,2 +1,2 @@
 '260056' = { table2Version=128; indicatorOfParameter =141; }
-
+'3096' = { table2Version=174; indicatorOfParameter =96; }
diff --git a/definitions/grib1/localConcepts/kwbc/shortName.def b/definitions/grib1/localConcepts/kwbc/shortName.def
index f0835a6..0089a58 100644
--- a/definitions/grib1/localConcepts/kwbc/shortName.def
+++ b/definitions/grib1/localConcepts/kwbc/shortName.def
@@ -1,2 +1,2 @@
 'sd' = { table2Version=128; indicatorOfParameter =141; }
-
+'vice' = { table2Version=174; indicatorOfParameter =96; }
diff --git a/definitions/grib1/localConcepts/kwbc/units.def b/definitions/grib1/localConcepts/kwbc/units.def
index 024d497..a717120 100644
--- a/definitions/grib1/localConcepts/kwbc/units.def
+++ b/definitions/grib1/localConcepts/kwbc/units.def
@@ -1,2 +1,2 @@
 'm of water equivalent' = { table2Version=128; indicatorOfParameter =141; }
-
+'m s**-1' = { table2Version=174; indicatorOfParameter =96; }
diff --git a/definitions/grib1/localConcepts/lfpw/faFieldName.def b/definitions/grib1/localConcepts/lfpw/faFieldName.def
new file mode 100644
index 0000000..1a57959
--- /dev/null
+++ b/definitions/grib1/localConcepts/lfpw/faFieldName.def
@@ -0,0 +1,572 @@
+'CLPMHAUT.MOD.XFU' = {
+  indicatorOfParameter                               =             165;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'CLPMOCON.MOD.XFU' = {
+  indicatorOfParameter                               =             166;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'CLSHUMI.RELATIVE' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  indicatorOfParameter                               =              52;
+  indicatorOfTypeOfLevel                             =             105;
+  level                                              =               2;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'CLSMAXI.TEMPERAT' = {
+  indicatorOfParameter                               =              15;
+  indicatorOfTypeOfLevel                             =             105;
+  level                                              =               2;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               2;
+}
+'CLSMINI.TEMPERAT' = {
+  indicatorOfParameter                               =              16;
+  indicatorOfTypeOfLevel                             =             105;
+  level                                              =               2;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               2;
+}
+'CLSTEMPERATURE' = {
+  indicatorOfParameter                               =              11;
+  indicatorOfTypeOfLevel                             =             105;
+  level                                              =               2;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'CLSU.RAF.MOD.XFU' = {
+  indicatorOfParameter                               =             163;
+  indicatorOfTypeOfLevel                             =             105;
+  level                                              =              10;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'CLSVENT.MERIDIEN' = {
+  indicatorOfParameter                               =              34;
+  indicatorOfTypeOfLevel                             =             105;
+  level                                              =              10;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'CLSVENT.ZONAL' = {
+  indicatorOfParameter                               =              33;
+  indicatorOfTypeOfLevel                             =             105;
+  level                                              =              10;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'CLSV.RAF.MOD.XFU' = {
+  indicatorOfParameter                               =             164;
+  indicatorOfTypeOfLevel                             =             105;
+  level                                              =              10;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'CLOUD_FRAC' = {
+  indicatorOfParameter                               =              36;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'HUMI_RELAT' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  indicatorOfParameter                               =              52;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'PRESSURE' = {
+  indicatorOfParameter                               =               1;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'RAD_LIQUID' = {
+  indicatorOfParameter                               =              32;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'RAD_SOLID_' = {
+  indicatorOfParameter                               =             247;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               0;
+}
+'TEMPERATUR' = {
+  indicatorOfParameter                               =              11;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'TKE' = {
+  indicatorOfParameter                               =              37;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'VENT_MERID' = {
+  indicatorOfParameter                               =              34;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'VENT_ZONAL' = {
+  indicatorOfParameter                               =              33;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'ISOT_ALTIT' = {
+  indicatorOfParameter                               =               8;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               0;
+}
+'MSLPRESSURE' = {
+  indicatorOfParameter                               =               2;
+  indicatorOfTypeOfLevel                             =             102;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'ABS_VORTIC' = {
+  indicatorOfParameter                               =              41;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'GEOPOTENTI' = {
+  indicatorOfParameter                               =               6;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'POT_VORTIC' = {
+  indicatorOfParameter                               =               4;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'THETA_PRIM' = {
+  indicatorOfParameter                               =              14;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'VITESSE_VE' = {
+  indicatorOfParameter                               =              39;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'DIVERGENCE' = {
+  indicatorOfParameter                               =              44;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'PROFRESERV.EAU' = {
+  bottomLevel                                        =             250;
+  indicatorOfParameter                               =             153;
+  indicatorOfTypeOfLevel                             =             112;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+  topLevel                                           =               0;
+}
+'PROFRESERV.GLACE' = {
+  bottomLevel                                        =             250;
+  indicatorOfParameter                               =             152;
+  indicatorOfTypeOfLevel                             =             112;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+  topLevel                                           =               0;
+}
+'PROFTEMPERATURE' = {
+  indicatorOfParameter                               =              11;
+  indicatorOfTypeOfLevel                             =             111;
+  level                                              =              10;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SOMMFLU.RAY.SOLA' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             113;
+  indicatorOfTypeOfLevel                             =               8;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'SOMMFLU.RAY.THER' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             114;
+  indicatorOfTypeOfLevel                             =               8;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'SURFCAPE.MOD.XFU' = {
+  indicatorOfParameter                               =             154;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'SURFCAPE.POS.F00' = {
+  indicatorOfParameter                               =             160;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFFLU.CHA.SENS' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             122;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'SURFFLU.LAT.MTOT' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             121;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'SURFFLU.MTOTA.NE' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =              57;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFFLU.RAY.SOLA' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             111;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'SURFFLU.RAY.THER' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             112;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'SURFISOTPW0.MALT' = {
+  indicatorOfParameter                               =               8;
+  indicatorOfTypeOfLevel                             =              20;
+  level                                              =           27315;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               0;
+}
+'SURFNEBUL.BASSE' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  indicatorOfParameter                               =              73;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFNEBUL.CONVEC' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  indicatorOfParameter                               =              72;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFNEBUL.HAUTE' = {
+  indicatorOfParameter                               =              75;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFNEBUL.MOYENN' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  indicatorOfParameter                               =              74;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFNEBUL.TOTALE' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  indicatorOfParameter                               =              71;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFPREC.EAU.CON' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =              63;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFPREC.EAU.GEC' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =              62;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFPREC.NEI.CON' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =              78;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFPREC.NEI.GEC' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =              79;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFPRESSION' = {
+  indicatorOfParameter                               =               1;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFRAYT.LUNE.DE' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             158;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFRAYT_SOLA_DE' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             105;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             149;
+  timeRangeIndicator                                 =               4;
+}
+'SURFRAYT_SOL_CL' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             168;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'SURFRAYT_THER_CL' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             169;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'SURFRAYT_THER_DE' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             104;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             149;
+  timeRangeIndicator                                 =               4;
+}
+'SURFRESERV.EAU' = {
+  bottomLevel                                        =               1;
+  indicatorOfParameter                               =             153;
+  indicatorOfTypeOfLevel                             =             112;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+  topLevel                                           =               0;
+}
+'SURFRESERV.GLACE' = {
+  bottomLevel                                        =               1;
+  indicatorOfParameter                               =             152;
+  indicatorOfTypeOfLevel                             =             112;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+  topLevel                                           =               0;
+}
+'SURFRESERV.NEIGE' = {
+  indicatorOfParameter                               =              65;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFTEMPERATURE' = {
+  indicatorOfParameter                               =              11;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFTENS.TOTA.ME' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             131;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFTENS.TOTA.ZO' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             130;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFTOT.WAT.VAPO' = {
+  indicatorOfParameter                               =             167;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'ABS_VORTICIT' = {
+  indicatorOfParameter                               =              41;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'GEOPOTENTIEL' = {
+  indicatorOfParameter                               =               6;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'TEMPE_POTENT' = {
+  indicatorOfParameter                               =              13;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'VENT_MERIDIE' = {
+  indicatorOfParameter                               =              34;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'C002_METEOSAT_09' = {
+  indicatorOfParameter                               =               1;
+  indicatorOfTypeOfLevel                             =             100;
+  level                                              =              62;
+  table2Version                                      =             129;
+  timeRangeIndicator                                 =               0;
+}
+'C006_METEOSAT_09' = {
+  indicatorOfParameter                               =               1;
+  indicatorOfTypeOfLevel                             =             100;
+  level                                              =             108;
+  table2Version                                      =             129;
+  timeRangeIndicator                                 =               0;
+}
+'EDR' = {
+  indicatorOfParameter                               =             135;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               0;
+}
+'SURFISOTPW1.MALT' = {
+  indicatorOfParameter                               =               8;
+  indicatorOfTypeOfLevel                             =              20;
+  level                                              =           27315;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               0;
+}
+'SURFACCGRAUPEL' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =              29;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               4;
+}
+'SURFACCNEIGE' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =              99;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               4;
+}
+'SURFACCPLUIE' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             150;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =               2;
+  timeRangeIndicator                                 =               4;
+}
+'SURFDIAGHAIL' = {
+  indicatorOfParameter                               =             248;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'SURFREFLECT.MAX' = {
+  indicatorOfParameter                               =             217;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'CLOUD_WATE' = {
+  indicatorOfParameter                               =              32;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'GRAUPEL' = {
+  indicatorOfParameter                               =              35;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'ICE_CRYSTA' = {
+  indicatorOfParameter                               =             247;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               0;
+}
+'RAIN' = {
+  indicatorOfParameter                               =              33;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'SNOW' = {
+  indicatorOfParameter                               =              34;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'SIM_REFLEC' = {
+  indicatorOfParameter                               =              31;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'THETA_VIRT' = {
+  indicatorOfParameter                               =              38;
+  table2Version                                      =             159;
+  timeRangeIndicator                                 =               0;
+}
+'VERT.VELOC' = {
+  indicatorOfParameter                               =              40;
+  table2Version                                      =               1;
+  timeRangeIndicator                                 =               0;
+}
+'SURFRAYT_DIR_SUR' = {
+  LSTCUM                                             =               1;
+  indicatorOfParameter                               =             137;
+  indicatorOfTypeOfLevel                             =               1;
+  level                                              =               0;
+  table2Version                                      =             128;
+  timeRangeIndicator                                 =               4;
+}
+'default' = {
+  indicatorOfParameter                               =             255;
+  table2Version                                      =             255;
+}
diff --git a/definitions/grib1/localConcepts/lfpw/faLevelName.def b/definitions/grib1/localConcepts/lfpw/faLevelName.def
new file mode 100644
index 0000000..8abf7e8
--- /dev/null
+++ b/definitions/grib1/localConcepts/lfpw/faLevelName.def
@@ -0,0 +1,36 @@
+'H' = {
+  indicatorOfParameter                               =             255;
+  indicatorOfTypeOfLevel                             =             105;
+  table2Version                                      =             255;
+}
+'P' = {
+  ZLMULT                                             =   1.0000000e-02;
+  indicatorOfParameter                               =             255;
+  indicatorOfTypeOfLevel                             =             100;
+  table2Version                                      =             255;
+}
+'V' = {
+  ZLMULT                                             =   1.0000000e+02;
+  indicatorOfParameter                               =             255;
+  indicatorOfTypeOfLevel                             =             117;
+  table2Version                                      =             255;
+}
+'KT' = {
+  ZLBASE                                             =   1.5000000e+01;
+  ZLMULT                                             =   1.0000000e+02;
+  indicatorOfParameter                               =             255;
+  indicatorOfTypeOfLevel                             =             115;
+  table2Version                                      =             255;
+}
+'KB' = {
+  ZLBASE                                             =   1.5000000e+01;
+  ZLMULT                                             =   1.0000000e+02;
+  indicatorOfParameter                               =             255;
+  indicatorOfTypeOfLevel                             =             115;
+  table2Version                                      =             255;
+}
+'default' = {
+  indicatorOfParameter                               =             255;
+  indicatorOfTypeOfLevel                             =             255;
+  table2Version                                      =             255;
+}
diff --git a/definitions/grib1/localConcepts/lfpw/faModelName.def b/definitions/grib1/localConcepts/lfpw/faModelName.def
new file mode 100644
index 0000000..31b9ed0
--- /dev/null
+++ b/definitions/grib1/localConcepts/lfpw/faModelName.def
@@ -0,0 +1,9 @@
+'arpege-france-oper-forecast-production' = { generatingProcessIdentifier = 211; }
+'arpege-france-oper-forecast-assim'      = { generatingProcessIdentifier =  12; }
+'arpege-france-dble-forecast-production' = { generatingProcessIdentifier = 212; }
+'arpege-france-dble-forecast-assim'      = { generatingProcessIdentifier =  22; }
+'arome-france-oper-6'                    = { generatingProcessIdentifier = 204; }
+'arome-france-oper-1'                    = { generatingProcessIdentifier = 213; }
+'arome-france-dble-6'                    = { generatingProcessIdentifier = 209; }
+'arome-france-dble-1'                    = { generatingProcessIdentifier = 210; }
+'default'                                = { generatingProcessIdentifier = 255; }
diff --git a/definitions/grib1/localConcepts/rjtd/cfVarName.def b/definitions/grib1/localConcepts/rjtd/cfVarName.def
index 384e949..baf0821 100644
--- a/definitions/grib1/localConcepts/rjtd/cfVarName.def
+++ b/definitions/grib1/localConcepts/rjtd/cfVarName.def
@@ -829,7 +829,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'nlwrt' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 113 ;
diff --git a/definitions/grib1/localConcepts/rjtd/name.def b/definitions/grib1/localConcepts/rjtd/name.def
index 1384f26..6be149d 100644
--- a/definitions/grib1/localConcepts/rjtd/name.def
+++ b/definitions/grib1/localConcepts/rjtd/name.def
@@ -829,8 +829,8 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
-'Net short-wave radiationflux(atmosph.top)' = {
+#Net short-wave radiation flux(atmosph.top)
+'Net short-wave radiation flux(atmosph.top)' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 113 ;
 	}
diff --git a/definitions/grib1/localConcepts/rjtd/paramId.def b/definitions/grib1/localConcepts/rjtd/paramId.def
index 1f34813..d118500 100644
--- a/definitions/grib1/localConcepts/rjtd/paramId.def
+++ b/definitions/grib1/localConcepts/rjtd/paramId.def
@@ -829,7 +829,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 '3113' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 113 ;
diff --git a/definitions/grib1/localConcepts/rjtd/shortName.def b/definitions/grib1/localConcepts/rjtd/shortName.def
index 9e30092..299432f 100644
--- a/definitions/grib1/localConcepts/rjtd/shortName.def
+++ b/definitions/grib1/localConcepts/rjtd/shortName.def
@@ -105,7 +105,7 @@
 	 indicatorOfParameter = 229 ;
 	}
 #Snow depth
-'sd' = {
+'sde' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 66 ;
 	}
@@ -829,7 +829,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'nswrt' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 113 ;
diff --git a/definitions/grib1/localConcepts/rjtd/units.def b/definitions/grib1/localConcepts/rjtd/units.def
index ff4173b..4b562a5 100644
--- a/definitions/grib1/localConcepts/rjtd/units.def
+++ b/definitions/grib1/localConcepts/rjtd/units.def
@@ -195,7 +195,7 @@
 	 indicatorOfParameter = 146 ;
 	}
 #Total ozone
-'Dobson' = {
+'DU' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 10 ;
 	}
@@ -829,7 +829,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'W m**-2' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 113 ;
diff --git a/definitions/grib1/localConcepts/sbsj/units.def b/definitions/grib1/localConcepts/sbsj/units.def
index 740b665..ba33b88 100644
--- a/definitions/grib1/localConcepts/sbsj/units.def
+++ b/definitions/grib1/localConcepts/sbsj/units.def
@@ -75,17 +75,17 @@
 	 indicatorOfParameter = 19 ;
 	}
 #Radar spectra(1)
-'non-dim' = {
+'dimensionless' = {
 	 table2Version = 254 ;
 	 indicatorOfParameter = 21 ;
 	}
 #Radar spectra(2)
-'non-dim' = {
+'dimensionless' = {
 	 table2Version = 254 ;
 	 indicatorOfParameter = 22 ;
 	}
 #Radar spectra(3)
-'non-dim' = {
+'dimensionless' = {
 	 table2Version = 254 ;
 	 indicatorOfParameter = 23 ;
 	}
@@ -105,17 +105,17 @@
 	 indicatorOfParameter = 27 ;
 	}
 #Wave spectra(1)
-'non-dim' = {
+'dimensionless' = {
 	 table2Version = 254 ;
 	 indicatorOfParameter = 28 ;
 	}
 #Wave spectra(2)
-'non-dim' = {
+'dimensionless' = {
 	 table2Version = 254 ;
 	 indicatorOfParameter = 29 ;
 	}
 #Wave spectra(3)
-'non-dim' = {
+'dimensionless' = {
 	 table2Version = 254 ;
 	 indicatorOfParameter = 30 ;
 	}
diff --git a/definitions/grib1/name.def b/definitions/grib1/name.def
index 9e3b121..aa119b5 100644
--- a/definitions/grib1/name.def
+++ b/definitions/grib1/name.def
@@ -152,16 +152,6 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'Low cloud cover' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'Medium cloud cover' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'Brightness temperature' = {
 	 table2Version = 3 ;
@@ -617,8 +607,8 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
-'Net short-wave radiationflux(atmosph.top)' = {
+#Net short-wave radiation flux(atmosph.top)
+'Net short-wave radiation flux(atmosph.top)' = {
 	 table2Version = 3 ;
 	 indicatorOfParameter = 113 ;
 	}
@@ -863,16 +853,6 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'Low cloud cover' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'Medium cloud cover' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'Brightness temperature' = {
 	 table2Version = 2 ;
@@ -1313,8 +1293,8 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
-'Net short-wave radiationflux(atmosph.top)' = {
+#Net short-wave radiation flux(atmosph.top)
+'Net short-wave radiation flux(atmosph.top)' = {
 	 table2Version = 2 ;
 	 indicatorOfParameter = 113 ;
 	}
@@ -1559,16 +1539,6 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'Low cloud cover' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'Medium cloud cover' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'Brightness temperature' = {
 	 table2Version = 1 ;
@@ -2009,8 +1979,8 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
-'Net short-wave radiationflux(atmosph.top)' = {
+#Net short-wave radiation flux(atmosph.top)
+'Net short-wave radiation flux(atmosph.top)' = {
 	 table2Version = 1 ;
 	 indicatorOfParameter = 113 ;
 	}
diff --git a/definitions/grib1/paramId.def b/definitions/grib1/paramId.def
index 1310dcd..5db4caf 100644
--- a/definitions/grib1/paramId.def
+++ b/definitions/grib1/paramId.def
@@ -152,16 +152,6 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'186' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'187' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 '194' = {
 	 table2Version = 3 ;
@@ -617,7 +607,7 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 '3113' = {
 	 table2Version = 3 ;
 	 indicatorOfParameter = 113 ;
@@ -863,16 +853,6 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'186' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'187' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 '194' = {
 	 table2Version = 2 ;
@@ -1313,7 +1293,7 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 '3113' = {
 	 table2Version = 2 ;
 	 indicatorOfParameter = 113 ;
@@ -1559,16 +1539,6 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'186' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'187' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 '194' = {
 	 table2Version = 1 ;
@@ -2009,7 +1979,7 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 '3113' = {
 	 table2Version = 1 ;
 	 indicatorOfParameter = 113 ;
diff --git a/definitions/grib1/shortName.def b/definitions/grib1/shortName.def
index 85a79d7..6e60178 100644
--- a/definitions/grib1/shortName.def
+++ b/definitions/grib1/shortName.def
@@ -152,16 +152,6 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'lcc' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'mcc' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'btmp' = {
 	 table2Version = 3 ;
@@ -183,7 +173,7 @@
 	 indicatorOfParameter = 62 ;
 	}
 #Snow depth
-'sd' = {
+'sde' = {
 	 table2Version = 3 ;
 	 indicatorOfParameter = 66 ;
 	}
@@ -617,7 +607,7 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'nswrt' = {
 	 table2Version = 3 ;
 	 indicatorOfParameter = 113 ;
@@ -863,16 +853,6 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'lcc' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'mcc' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'btmp' = {
 	 table2Version = 2 ;
@@ -894,7 +874,7 @@
 	 indicatorOfParameter = 62 ;
 	}
 #Snow depth
-'sd' = {
+'sde' = {
 	 table2Version = 2 ;
 	 indicatorOfParameter = 66 ;
 	}
@@ -1313,7 +1293,7 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'nswrt' = {
 	 table2Version = 2 ;
 	 indicatorOfParameter = 113 ;
@@ -1559,16 +1539,6 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'lcc' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'mcc' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'btmp' = {
 	 table2Version = 1 ;
@@ -1590,7 +1560,7 @@
 	 indicatorOfParameter = 62 ;
 	}
 #Snow depth
-'sd' = {
+'sde' = {
 	 table2Version = 1 ;
 	 indicatorOfParameter = 66 ;
 	}
@@ -2009,7 +1979,7 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'nswrt' = {
 	 table2Version = 1 ;
 	 indicatorOfParameter = 113 ;
diff --git a/definitions/grib1/units.def b/definitions/grib1/units.def
index 049b12d..7bb2a40 100644
--- a/definitions/grib1/units.def
+++ b/definitions/grib1/units.def
@@ -152,16 +152,6 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'(0 - 1)' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'(0 - 1)' = {
-	 table2Version = 3 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'K' = {
 	 table2Version = 3 ;
@@ -617,7 +607,7 @@
 	 table2Version = 3 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'W m**-2' = {
 	 table2Version = 3 ;
 	 indicatorOfParameter = 113 ;
@@ -863,16 +853,6 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'(0 - 1)' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'(0 - 1)' = {
-	 table2Version = 2 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'K' = {
 	 table2Version = 2 ;
@@ -1313,7 +1293,7 @@
 	 table2Version = 2 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'W m**-2' = {
 	 table2Version = 2 ;
 	 indicatorOfParameter = 113 ;
@@ -1559,16 +1539,6 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Low cloud cover
-'(0 - 1)' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 73 ;
-	}
-#Medium cloud cover
-'(0 - 1)' = {
-	 table2Version = 1 ;
-	 indicatorOfParameter = 74 ;
-	}
 #Brightness temperature
 'K' = {
 	 table2Version = 1 ;
@@ -2009,7 +1979,7 @@
 	 table2Version = 1 ;
 	 indicatorOfParameter = 112 ;
 	}
-#Net short-wave radiationflux(atmosph.top)
+#Net short-wave radiation flux(atmosph.top)
 'W m**-2' = {
 	 table2Version = 1 ;
 	 indicatorOfParameter = 113 ;
diff --git a/definitions/grib2/centre.table b/definitions/grib2/centre.table
new file mode 100644
index 0000000..c5b43af
--- /dev/null
+++ b/definitions/grib2/centre.table
@@ -0,0 +1,149 @@
+# COMMON CODE TABLE C-11: Originating/generating centres
+0 0 WMO Secretariat
+1 ammc Melbourne (WMC)
+2 2 Melbourne (WMC)
+4 rums Moscow (WMC)
+5 5 Moscow (WMC)
+7 kwbc US National Weather Service - NCEP (WMC)
+8 8 US National Weather Service - NWSTG (WMC)
+9 9 US National Weather Service - Other (WMC)
+10 10 Cairo (RSMC/RAFC)
+12 12 Dakar (RSMC/RAFC)
+14 14 Nairobi (RSMC/RAFC)
+16 16 Atananarivo (RSMC)
+18 18 Tunis-Casablanca (RSMC)
+20 20 Las Palmas (RAFC)
+21 21 Algiers (RSMC)
+22 22 Lagos (RSMC)
+24 fapr Pretoria (RSMC)
+26 26 Khabarovsk (RSMC)
+28 28 New Delhi (RSMC/RAFC)
+30 30 Novosibirsk (RSMC)
+32 32 Tashkent (RSMC)
+33 33 Jeddah (RSMC)
+34 rjtd Japanese Meteorological Agency - Tokyo (RSMC)
+36 36 Bankok
+37 37 Ulan Bator
+38 babj Beijing (RSMC)
+40 rksl Seoul
+41 41 Buenos Aires (RSMC/RAFC)
+43 43 Brasilia (RSMC/RAFC)
+45 45 Santiago
+46 sbsj Brasilian Space Agency - INPE
+51 51 Miami (RSMC/RAFC)
+52 52 National Hurricane Center, Miami
+53 53 Canadian Meteorological Service - Montreal (RSMC)
+54 cwao Canadian Meteorological Service - Montreal (RSMC)
+55 55 San Francisco
+57 57 U.S. Air Force - Global Weather Center
+58 fnmo US Navy - Fleet Numerical Oceanography Center
+59 59 NOAA Forecast Systems Lab, Boulder CO
+60 60 National Center for Atmospheric Research (NCAR), Boulder, CO
+64 64 Honolulu
+65 65 Darwin (RSMC)
+67 67 Melbourne (RSMC)
+69 69 Wellington (RSMC/RAFC)
+74 egrr U.K. Met Office - Exeter
+76 76 Moscow (RSMC/RAFC)
+78 edzw Offenbach (RSMC)
+80 cnmc Rome (RSMC)
+82 eswi Norrkoping
+84 lfpw French Weather Service - Toulouse
+85 lfpw French Weather Service - Toulouse
+86 efkl Helsinki
+87 87 Belgrade
+88 enmi Oslo
+89 89 Prague
+90 90 Episkopi
+91 91 Ankara
+92 92 Frankfurt/Main (RAFC)
+93 93 London (WAFC)
+94 ekmi Copenhagen
+95 95 Rota
+96 96 Athens
+97 97 European Space Agency (ESA)
+98 ecmf European Centre for Medium-Range Weather Forecasts
+99 99 DeBilt, Netherlands
+#100 to 109 Reserved for centres in Region I which are not in the list above
+110 110 Hong-Kong
+#111 to 133 Reserved for centres in Region II which are not in the list above
+#134 to 153 Reserved for centres in Region I which are not listed above
+#154 to 159 Reserved for centres in Region III which are not in the list above
+160 160 US NOAA/NESDIS
+# 161 to 185 Reserved for centres in Region IV which are not in the list above
+# 186 to 198 Reserved for centres in Region I which are not listed above
+# 199 to 209 Reserved for centres in Region V which are not in the list above
+195 wiix Indonesia (NMC)
+210 210  Frascati (ESA/ESRIN)
+211 211  Lannion
+212 212  Lisboa
+213 213  Reykjavik
+214 lemm INM
+215 lssw Zurich
+216 216  Service ARGOS Toulouse
+217 217 Bratislava
+218 habp Budapest
+219 219 Ljubljana
+220 220 Warsaw
+221 221 Zagreb
+222 222 Albania (NMC)
+223 223 Armenia (NMC)
+224 lowm Austria
+227 ebum Belgium (NMC)
+228 228 Bosnia and Herzegovina (NMC)
+229 229 Bulgaria (NMC)
+230 230 Cyprus (NMC)
+231 231 Estonia (NMC)
+232 232 Georgia (NMC)
+233 eidb Dublin
+234 234 Israel (NMC)
+235 ingv INGV
+239 crfc CERFAX
+240 240 Malta (NMC)
+241 241 Monaco
+242 242 Romania (NMC)
+244 vuwien VUWien
+245 knmi KNMI
+246 ifmk IfM-Kiel
+247 hadc Hadley Centre
+250 cosmo COnsortium for Small scale MOdelling (COSMO)
+251 251 Meteorological Cooperation on Operational NWP (MetCoOp)
+252 mpim Max Planck Institute for Meteorology (MPI-M)
+254 eums EUMETSAT Operation Centre
+255 consensus Consensus
+256 256 Angola (NMC)
+257 257 Benin (NMC)
+258 258 Botswana (NMC)
+259 259 Burkina Faso (NMC)
+260 260 Burundi (NMC)
+261 261 Cameroon (NMC)
+262 262 Cabo Verde (NMC)
+263 263 Central African Republic (NMC)
+264 264 Chad (NMC)
+265 265 Comoros (NMC)
+266 266 Democratic Republic of the Congo (NMC)
+267 267 Djibouti (NMC)
+268 268 Eritrea (NMC)
+269 269 Ethiopia (NMC)
+270 270 Gabon (NMC)
+271 271 Gambia (NMC)
+272 272 Ghana (NMC)
+273 273 Guinea (NMC)
+274 274 Guinea-Bissau (NMC)
+275 275 Lesotho (NMC)
+276 276 Liberia (NMC)
+277 277 Malawi (NMC)
+278 278 Mali (NMC)
+279 279 Mauritania (NMC)
+280 280 Namibia (NMC)
+281 281 Nigeria (NMC)
+282 282 Rwanda (NMC)
+283 283 Sao Tome and Principe (NMC)
+284 284 Sierra Leone (NMC)
+285 285 Somalia (NMC)
+286 286 Sudan (NMC)
+287 287 Swaziland (NMC)
+288 288 Togo (NMC)
+289 289 Zambia (NMC)
+
+65535 65535 Missing value
diff --git a/definitions/grib2/cfName.def b/definitions/grib2/cfName.def
index af58766..08a610c 100644
--- a/definitions/grib2/cfName.def
+++ b/definitions/grib2/cfName.def
@@ -116,15 +116,15 @@
 	 parameterCategory = 4 ;
 	 typeOfStatisticalProcessing = 1 ;
 	}
-#Surface thermal radiation
-'surface_net_upward_shortwave_flux' = {
+#Surface net thermal radiation
+'surface_net_upward_longwave_flux' = {
 	 discipline = 0 ;
 	 parameterNumber = 5 ;
 	 typeOfFirstFixedSurface = 1 ;
 	 parameterCategory = 5 ;
 	 typeOfStatisticalProcessing = 1 ;
 	}
-#Top thermal radiation
+#Top net thermal radiation
 'toa_outgoing_longwave_flux' = {
 	 discipline = 0 ;
 	 parameterNumber = 5 ;
@@ -132,3 +132,31 @@
 	 parameterCategory = 5 ;
 	 typeOfStatisticalProcessing = 1 ;
 }
+#Surface solar radiation downwards
+'surface_downwelling_shortwave_flux_in_air' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 7 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Surface net solar radiation
+'surface_net_downward_shortwave_flux' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 9 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Eastward turbulent surface stress
+'surface_downward_eastward_stress' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 38 ;
+	}
+#Northward turbulent surface stress
+'surface_downward_northward_stress' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 37 ;
+}
diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def
index 562d9c9..538cd03 100644
--- a/definitions/grib2/cfVarName.def
+++ b/definitions/grib2/cfVarName.def
@@ -24,6 +24,17 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	}
+#10 metre wind gust since previous post-processing
+'fg10' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 22 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 is_uerra = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	}
 #Specific rain water content
 'crwc' = {
 	 discipline = 0 ;
@@ -70,6 +81,28 @@
 	 parameterCategory = 2 ;
 	 parameterNumber = 37 ;
 	}
+#Maximum temperature at 2 metres since previous post-processing
+'mx2t' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 is_uerra = 1 ;
+	}
+#Minimum temperature at 2 metres since previous post-processing
+'mn2t' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 typeOfStatisticalProcessing = 3 ;
+	 is_uerra = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	}
 #Ozone mass mixing ratio
 'o3' = {
 	 discipline = 0 ;
@@ -88,7 +121,7 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 84 ;
 	}
-#Cloud cover
+#Fraction of cloud cover
 'cc' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
@@ -103,16 +136,35 @@
 	 typeOfStatisticalProcessing = 1 ;
 	}
 #Snow depth
-'sd' = {
+'sde' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 11 ;
 	}
+#Low cloud cover
+'lcc' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 3 ;
+	}
+#Medium cloud cover
+'mcc' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 4 ;
+	}
+#High cloud cover
+'hcc' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 5 ;
+	}
 #10 metre wind gust in the last 3 hours
 'fg310' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 22 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
 	 scaledValueOfFirstFixedSurface = 10 ;
@@ -156,6 +208,24 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 27 ;
 	}
+#Unbalanced component of specific humidity
+'ucq' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 118 ;
+	}
+#Unbalanced component of specific cloud liquid water content
+'ucclwc' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 119 ;
+	}
+#Unbalanced component of specific cloud ice water content
+'ucciwc' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 120 ;
+	}
 #Soil moisture top 20 cm
 'sm20' = {
 	 discipline = 2 ;
@@ -400,6 +470,15 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 9 ;
 	}
+#Surface air relative humidity
+'r2' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	}
 #Apparent temperature
 'aptmp' = {
 	 discipline = 0 ;
@@ -412,6 +491,129 @@
 	 parameterCategory = 4 ;
 	 parameterNumber = 2 ;
 	}
+#Cloud cover
+'ccl' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 22 ;
+	}
+#Evaporation rate
+'evarate' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	}
+#Evaporation
+'eva' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#10 metre wind direction
+'wdir10' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	}
+#Direct short wave radiation flux
+'dirswrf' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	}
+#Diffuse short wave radiation flux
+'difswrf' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 14 ;
+	}
+#Time-integrated surface direct short wave radiation flux
+'tidirswrf' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Soil temperature
+'sot' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 18 ;
+	}
+#Downward short-wave radiation flux, clear sky
+'dswrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	}
+#Upward short-wave radiation flux, clear sky
+'uswrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	}
+#Downward long-wave radiation flux, clear sky
+'dlwrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	}
+#Soil heat flux
+'sohf' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 26 ;
+	}
+#Percolation rate
+'percr' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	}
+#Soil depth
+'sod' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 27 ;
+	}
+#Accumulated surface downward short-wave radiation flux, clear sky
+'adswrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Accumulated surface upward short-wave radiation flux, clear sky
+'auswrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
+#Accumulated surface downward long-wave radiation flux, clear sky
+'adlwrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
+#Percolation
+'perc' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 177 ;
+	}
 #Cloudy brightness temperature
 'clbt' = {
          discipline = 3 ;
@@ -544,6 +746,12 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 3 ;
 	}
+#Wind direction
+'wdir' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	}
 #Significant height of combined wind waves and swell
 'swh' = {
 	 discipline = 10 ;
@@ -641,6 +849,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfStatisticalProcessing = 2 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -653,6 +862,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 typeOfStatisticalProcessing = 3 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -868,475 +1078,475 @@
 	 typeOfFirstFixedSurface = 1 ;
 	}
 #Latent heat net flux
-'p260002' = {
+'lhtfl' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 10 ;
 	}
 #Sensible heat net flux
-'p260003' = {
+'shtfl' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 11 ;
 	}
 #Heat index
-'p260004' = {
+'heatx' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 12 ;
 	}
 #Wind chill factor
-'p260005' = {
+'wcf' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 13 ;
 	}
 #Minimum dew point depression
-'p260006' = {
+'mindpd' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 14 ;
 	}
 #Snow phase change heat flux
-'p260007' = {
+'snohf' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 16 ;
 	}
 #Vapor pressure
-'p260008' = {
+'vapp' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 4 ;
 	}
 #Large scale precipitation (non-convective)
-'p260009' = {
+'ncpcp' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 9 ;
 	}
 #Snowfall rate water equivalent
-'p260010' = {
+'srweq' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 12 ;
 	}
 #Convective snow
-'p260011' = {
+'snoc' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 14 ;
 	}
 #Large scale snow
-'p260012' = {
+'snol' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 15 ;
 	}
 #Snow age
-'p260013' = {
+'snoag' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 17 ;
 	}
 #Absolute humidity
-'p260014' = {
+'absh' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 18 ;
 	}
 #Precipitation type
-'p260015' = {
+'ptype' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 19 ;
 	}
 #Integrated liquid water
-'p260016' = {
+'iliqw' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 20 ;
 	}
 #Condensate
-'p260017' = {
+'tcond' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 21 ;
 	}
 #Cloud mixing ratio
-'p260018' = {
+'clwmr' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 22 ;
 	}
 #Ice water mixing ratio
-'p260019' = {
+'icmr' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 23 ;
 	}
 #Rain mixing ratio
-'p260020' = {
+'rwmr' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 24 ;
 	}
 #Snow mixing ratio
-'p260021' = {
+'snmr' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 25 ;
 	}
 #Horizontal moisture convergence
-'p260022' = {
+'mconv' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 26 ;
 	}
 #Maximum relative humidity
-'p260023' = {
+'maxrh' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 27 ;
 	}
 #Maximum absolute humidity
-'p260024' = {
+'maxah' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 28 ;
 	}
 #Total snowfall
-'p260025' = {
+'asnow' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 29 ;
 	}
 #Precipitable water category
-'p260026' = {
+'pwcat' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 30 ;
 	}
 #Hail
-'p260027' = {
+'hail' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 31 ;
 	}
 #Graupel (snow pellets)
-'p260028' = {
+'grle' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 32 ;
 	}
 #Categorical rain
-'p260029' = {
+'crain' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 33 ;
 	}
 #Categorical freezing rain
-'p260030' = {
+'cfrzr' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 34 ;
 	}
 #Categorical ice pellets
-'p260031' = {
+'cicep' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 35 ;
 	}
 #Categorical snow
-'p260032' = {
+'csnow' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 36 ;
 	}
 #Convective precipitation rate
-'p260033' = {
+'cprat' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 37 ;
 	}
 #Horizontal moisture divergence
-'p260034' = {
+'mdiv' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 38 ;
 	}
 #Percent frozen precipitation
-'p260035' = {
+'cpofp' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 39 ;
 	}
 #Potential evaporation
-'p260036' = {
+'pevap' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 40 ;
 	}
 #Potential evaporation rate
-'p260037' = {
+'pevpr' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 41 ;
 	}
 #Snow cover
-'p260038' = {
+'snowc' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 42 ;
 	}
 #Rain fraction of total cloud water
-'p260039' = {
+'frain' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 43 ;
 	}
 #Rime factor
-'p260040' = {
+'rime' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 44 ;
 	}
 #Total column integrated rain
-'p260041' = {
+'tcolr' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 45 ;
 	}
 #Total column integrated snow
-'p260042' = {
+'tcols' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 46 ;
 	}
 #Large scale water precipitation (non-convective)
-'p260043' = {
+'lswp' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 47 ;
 	}
 #Convective water precipitation
-'p260044' = {
+'cwp' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 48 ;
 	}
 #Total water precipitation
-'p260045' = {
+'twatp' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 49 ;
 	}
 #Total snow precipitation
-'p260046' = {
+'tsnowp' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 50 ;
 	}
 #Total column water (Vertically integrated total water (vapour + cloud water/ice))
-'p260047' = {
+'tcwat' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 51 ;
 	}
 #Total precipitation rate
-'p260048' = {
+'tprate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 52 ;
 	}
 #Total snowfall rate water equivalent
-'p260049' = {
+'tsrwe' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 53 ;
 	}
 #Large scale precipitation rate
-'p260050' = {
+'lsprate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 54 ;
 	}
 #Convective snowfall rate water equivalent
-'p260051' = {
+'csrwe' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 55 ;
 	}
 #Large scale snowfall rate water equivalent
-'p260052' = {
+'lssrwe' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 56 ;
 	}
 #Total snowfall rate
-'p260053' = {
+'tsrate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 57 ;
 	}
 #Convective snowfall rate
-'p260054' = {
+'csrate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 58 ;
 	}
 #Large scale snowfall rate
-'p260055' = {
+'lssrate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 59 ;
 	}
 #Water equivalent of accumulated snow depth
-'p260056' = {
+'sdwe' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 13 ;
 	}
 #Total column integrated water vapour
-'p260057' = {
+'tciwv' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 64 ;
 	}
 #Rain precipitation rate
-'p260058' = {
+'rprate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 65 ;
 	}
 #Snow precipitation rate
-'p260059' = {
+'sprate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 66 ;
 	}
 #Freezing rain precipitation rate
-'p260060' = {
+'fprate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 67 ;
 	}
 #Ice pellets precipitation rate
-'p260061' = {
+'iprate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 68 ;
 	}
 #Momentum flux, u component
-'p260062' = {
+'uflx' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 17 ;
 	}
 #Momentum flux, v component
-'p260063' = {
+'vflx' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 18 ;
 	}
 #Maximum wind speed
-'p260064' = {
+'maxgust' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 21 ;
 	}
 #Wind speed (gust)
-'p260065' = {
+'gust' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 22 ;
 	}
 #u-component of wind (gust)
-'p260066' = {
+'ugust' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 23 ;
 	}
 #v-component of wind (gust)
-'p260067' = {
+'vgust' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 24 ;
 	}
 #Vertical speed shear
-'p260068' = {
+'vwsh' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 25 ;
 	}
 #Horizontal momentum flux
-'p260069' = {
+'mflx' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 26 ;
 	}
 #U-component storm motion
-'p260070' = {
+'ustm' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 27 ;
 	}
 #V-component storm motion
-'p260071' = {
+'vstm' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 28 ;
 	}
 #Drag coefficient
-'p260072' = {
+'cd' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 29 ;
 	}
 #Frictional velocity
-'p260073' = {
+'fricv' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 30 ;
 	}
 #Pressure reduced to MSL
-'p260074' = {
+'prmsl' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 1 ;
 	}
 #Geometric height
-'p260075' = {
+'dist' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 6 ;
 	}
 #Altimeter setting
-'p260076' = {
+'alts' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 11 ;
 	}
 #Thickness
-'p260077' = {
+'thick' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 12 ;
 	}
 #Pressure altitude
-'p260078' = {
+'presalt' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 13 ;
 	}
 #Density altitude
-'p260079' = {
+'denalt' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 14 ;
 	}
 #5-wave geopotential height
-'p260080' = {
+'wavh5' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 15 ;
@@ -1354,7 +1564,7 @@
 	 parameterNumber = 17 ;
 	}
 #Planetary boundary layer height
-'p260083' = {
+'hpbl' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 18 ;
@@ -1366,211 +1576,211 @@
 	 parameterNumber = 19 ;
 	}
 #Standard deviation of sub-grid scale orography
-'p260085' = {
+'sdsgso' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 20 ;
 	}
 #Net short-wave radiation flux (top of atmosphere)
-'p260086' = {
+'nswrt' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 1 ;
 	}
 #Downward short-wave radiation flux
-'p260087' = {
+'dswrf' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 7 ;
 	}
 #Upward short-wave radiation flux
-'p260088' = {
+'uswrf' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 8 ;
 	}
 #Net short wave radiation flux
-'p260089' = {
+'nswrf' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 9 ;
 	}
 #Photosynthetically active radiation
-'p260090' = {
+'photar' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 10 ;
 	}
 #Net short-wave radiation flux, clear sky
-'p260091' = {
+'nswrfcs' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 11 ;
 	}
 #Downward UV radiation
-'p260092' = {
+'dwuvr' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 12 ;
 	}
 #UV index (under clear sky)
-'p260093' = {
+'uviucs' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 50 ;
 	}
 #UV index 
-'p260094' = {
+'uvi' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 51 ;
 	}
 #Net long wave radiation flux (surface)
-'p260095' = {
+'nlwrs' = {
 	 discipline = 0 ;
 	 parameterCategory = 5 ;
 	 parameterNumber = 0 ;
 	}
 #Net long wave radiation flux (top of atmosphere)
-'p260096' = {
+'nlwrt' = {
 	 discipline = 0 ;
 	 parameterCategory = 5 ;
 	 parameterNumber = 1 ;
 	}
 #Downward long-wave radiation flux
-'p260097' = {
+'dlwrf' = {
 	 discipline = 0 ;
 	 parameterCategory = 5 ;
 	 parameterNumber = 3 ;
 	}
 #Upward long-wave radiation flux
-'p260098' = {
+'ulwrf' = {
 	 discipline = 0 ;
 	 parameterCategory = 5 ;
 	 parameterNumber = 4 ;
 	}
 #Net long wave radiation flux
-'p260099' = {
+'nlwrf' = {
 	 discipline = 0 ;
 	 parameterCategory = 5 ;
 	 parameterNumber = 5 ;
 	}
 #Net long-wave radiation flux, clear sky
-'p260100' = {
+'nlwrcs' = {
 	 discipline = 0 ;
 	 parameterCategory = 5 ;
 	 parameterNumber = 6 ;
 	}
 #Cloud Ice
-'p260101' = {
+'cice' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 0 ;
 	}
 #Cloud water
-'p260102' = {
+'cwat' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 6 ;
 	}
 #Cloud amount
-'p260103' = {
+'cdca' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 7 ;
 	}
 #Cloud type
-'p260104' = {
+'cdct' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 8 ;
 	}
 #Thunderstorm maximum tops
-'p260105' = {
+'tmaxt' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 9 ;
 	}
 #Thunderstorm coverage
-'p260106' = {
+'thunc' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 10 ;
 	}
 #Cloud base
-'p260107' = {
+'cdcb' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 11 ;
 	}
 #Cloud top
-'p260108' = {
+'cdct' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 12 ;
 	}
 #Ceiling
-'p260109' = {
+'ceil' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 13 ;
 	}
 #Non-convective cloud cover
-'p260110' = {
+'cdlyr' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 14 ;
 	}
 #Cloud work function
-'p260111' = {
+'cwork' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 15 ;
 	}
 #Convective cloud efficiency
-'p260112' = {
+'cuefi' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 16 ;
 	}
 #Total condensate
-'p260113' = {
+'tcond' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 17 ;
 	}
 #Total column-integrated cloud water
-'p260114' = {
+'tcolw' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 18 ;
 	}
 #Total column-integrated cloud ice
-'p260115' = {
+'tcoli' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 19 ;
 	}
 #Total column-integrated condensate
-'p260116' = {
+'tcolc' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 20 ;
 	}
 #Ice fraction of total condensate
-'p260117' = {
+'fice' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 21 ;
 	}
 #Cloud ice mixing ratio
-'p260118' = {
+'cdcimr' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 23 ;
 	}
 #Sunshine
-'p260119' = {
+'suns' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 24 ;
@@ -1588,7 +1798,7 @@
 	 parameterNumber = 2 ;
 	}
 #KO index
-'p260122' = {
+'kox' = {
 	 discipline = 0 ;
 	 parameterCategory = 7 ;
 	 parameterNumber = 3 ;
@@ -1600,229 +1810,229 @@
 	 parameterNumber = 4 ;
 	}
 #Sweat index
-'p260124' = {
+'sx' = {
 	 discipline = 0 ;
 	 parameterCategory = 7 ;
 	 parameterNumber = 5 ;
 	}
 #Storm relative helicity
-'p260125' = {
+'hlcy' = {
 	 discipline = 0 ;
 	 parameterCategory = 7 ;
 	 parameterNumber = 8 ;
 	}
 #Energy helicity index
-'p260126' = {
+'ehlx' = {
 	 discipline = 0 ;
 	 parameterCategory = 7 ;
 	 parameterNumber = 9 ;
 	}
 #Surface lifted index
-'p260127' = {
+'lftx' = {
 	 discipline = 0 ;
 	 parameterCategory = 7 ;
 	 parameterNumber = 10 ;
 	}
 #Best (4-layer) lifted index
-'p260128' = {
+'lftx4' = {
 	 discipline = 0 ;
 	 parameterCategory = 7 ;
 	 parameterNumber = 11 ;
 	}
 #Aerosol type
-'p260129' = {
+'aerot' = {
 	 discipline = 0 ;
 	 parameterCategory = 13 ;
 	 parameterNumber = 0 ;
 	}
 #Total ozone
-'p260130' = {
+'tozne' = {
 	 discipline = 0 ;
 	 parameterCategory = 14 ;
 	 parameterNumber = 0 ;
 	}
 #Total column integrated ozone
-'p260132' = {
+'tcioz' = {
 	 discipline = 0 ;
 	 parameterCategory = 14 ;
 	 parameterNumber = 2 ;
 	}
 #Base spectrum width
-'p260133' = {
+'bswid' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 0 ;
 	}
 #Base reflectivity
-'p260134' = {
+'bref' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 1 ;
 	}
 #Base radial velocity
-'p260135' = {
+'brvel' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 2 ;
 	}
 #Vertically-integrated liquid
-'p260136' = {
+'veril' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 3 ;
 	}
 #Layer-maximum base reflectivity
-'p260137' = {
+'lmaxbr' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 4 ;
 	}
 #Precipitation
-'p260138' = {
+'prec' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 5 ;
 	}
 #Air concentration of Caesium 137
-'p260139' = {
+'acces' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 0 ;
 	}
 #Air concentration of Iodine 131
-'p260140' = {
+'aciod' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 1 ;
 	}
 #Air concentration of radioactive pollutant
-'p260141' = {
+'acradp' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 2 ;
 	}
 #Ground deposition of Caesium 137
-'p260142' = {
+'gdces' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 3 ;
 	}
 #Ground deposition of Iodine 131
-'p260143' = {
+'gdiod' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 4 ;
 	}
 #Ground deposition of radioactive pollutant
-'p260144' = {
+'gdradp' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 5 ;
 	}
 #Time-integrated air concentration of caesium pollutant
-'p260145' = {
+'tiaccp' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 6 ;
 	}
 #Time-integrated air concentration of iodine pollutant
-'p260146' = {
+'tiacip' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 7 ;
 	}
 #Time-integrated air concentration of radioactive pollutant
-'p260147' = {
+'tiacrp' = {
 	 discipline = 0 ;
 	 parameterCategory = 18 ;
 	 parameterNumber = 8 ;
 	}
 #Volcanic ash
-'p260148' = {
+'volash' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 4 ;
 	}
 #Icing top
-'p260149' = {
+'icit' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 5 ;
 	}
 #Icing base
-'p260150' = {
+'icib' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 6 ;
 	}
 #Icing
-'p260151' = {
+'ici' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 7 ;
 	}
 #Turbulence top
-'p260152' = {
+'turbt' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 8 ;
 	}
 #Turbulence base
-'p260153' = {
+'turbb' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 9 ;
 	}
 #Turbulence
-'p260154' = {
+'turb' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 10 ;
 	}
 #Turbulent kinetic energy
-'p260155' = {
+'tke' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 11 ;
 	}
 #Planetary boundary layer regime
-'p260156' = {
+'pblreg' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 12 ;
 	}
 #Contrail intensity
-'p260157' = {
+'conti' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 13 ;
 	}
 #Contrail engine type
-'p260158' = {
+'contet' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 14 ;
 	}
 #Contrail top
-'p260159' = {
+'contt' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 15 ;
 	}
 #Contrail base
-'p260160' = {
+'contb' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 16 ;
 	}
 #Maximum snow albedo
-'p260161' = {
+'mxsalb' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 17 ;
 	}
 #Snow free albedo
-'p260162' = {
+'snfalb' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 18 ;
@@ -1840,7 +2050,7 @@
 	 parameterNumber = 21 ;
 	}
 #Clear air turbulence (CAT)
-'p260165' = {
+'cat' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 22 ;
@@ -1852,427 +2062,427 @@
 	 parameterNumber = 23 ;
 	}
 #Arbitrary text string
-'p260167' = {
+'var190m0' = {
 	 discipline = 0 ;
 	 parameterCategory = 190 ;
 	 parameterNumber = 0 ;
 	}
 #Seconds prior to initial reference time (defined in Section 1)
-'p260168' = {
+'tsec' = {
 	 discipline = 0 ;
 	 parameterCategory = 191 ;
 	 parameterNumber = 0 ;
 	}
 #Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the ref
-'p260169' = {
+'ffldg' = {
 	 discipline = 1 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
 	}
 #Flash flood runoff (Encoded as an accumulation over a floating subinterval of time)
-'p260170' = {
+'ffldro' = {
 	 discipline = 1 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 1 ;
 	}
 #Remotely sensed snow cover
-'p260171' = {
+'rssc' = {
 	 discipline = 1 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 2 ;
 	}
 #Elevation of snow covered terrain
-'p260172' = {
+'esct' = {
 	 discipline = 1 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 3 ;
 	}
 #Snow water equivalent percent of normal
-'p260173' = {
+'swepon' = {
 	 discipline = 1 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 4 ;
 	}
 #Baseflow-groundwater runoff
-'p260174' = {
+'bgrun' = {
 	 discipline = 1 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 5 ;
 	}
 #Storm surface runoff
-'p260175' = {
+'ssrun' = {
 	 discipline = 1 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 6 ;
 	}
 #Conditional percent precipitation amount fractile for an overall period (Encoded as an accumulation)
-'p260176' = {
+'cppop' = {
 	 discipline = 1 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 0 ;
 	}
 #Percent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over th
-'p260177' = {
+'pposp' = {
 	 discipline = 1 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 1 ;
 	}
 #Probability of 0.01 inch of precipitation (POP)
-'p260178' = {
+'pop' = {
 	 discipline = 1 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 2 ;
 	}
 #Land cover (1=land, 0=sea)
-'p260179' = {
+'land' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
 	}
 #Vegetation
-'p260180' = {
+'veg' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 4 ;
 	}
 #Water runoff
-'p260181' = {
+'watr' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 5 ;
 	}
 #Evapotranspiration
-'p260182' = {
+'evapt' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 6 ;
 	}
 #Model terrain height
-'p260183' = {
+'mterh' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 7 ;
 	}
 #Land use
-'p260184' = {
+'landu' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 8 ;
 	}
 #Volumetric soil moisture content
-'p260185' = {
+'soilw' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 9 ;
 	}
 #Ground heat flux
-'p260186' = {
+'gflux' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 10 ;
 	}
 #Moisture availability
-'p260187' = {
+'mstav' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 11 ;
 	}
 #Exchange coefficient
-'p260188' = {
+'sfexc' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 12 ;
 	}
 #Plant canopy surface water
-'p260189' = {
+'cnwat' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 13 ;
 	}
 #Blackadar mixing length scale
-'p260190' = {
+'bmixl' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 14 ;
 	}
 #Canopy conductance
-'p260191' = {
+'ccond' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 15 ;
 	}
 #Minimal stomatal resistance
-'p260192' = {
+'rsmin' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 16 ;
 	}
 #Solar parameter in canopy conductance
-'p260193' = {
+'rcs' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 18 ;
 	}
 #Temperature parameter in canopy conductance
-'p260194' = {
+'rct' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 19 ;
 	}
 #Soil moisture parameter in canopy conductance
-'p260195' = {
+'rcsol' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 20 ;
 	}
 #Humidity parameter in canopy conductance
-'p260196' = {
+'rcq' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 21 ;
 	}
 #Column-integrated soil water
-'p260197' = {
+'cisoilw' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 23 ;
 	}
 #Heat flux
-'p260198' = {
+'hflux' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 24 ;
 	}
 #Volumetric soil moisture
-'p260199' = {
+'vsw' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 25 ;
 	}
 #Volumetric wilting point
-'p260200' = {
+'vwiltm' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 27 ;
 	}
 #Upper layer soil temperature
-'p260201' = {
+'uplst' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 1 ;
 	}
 #Upper layer soil moisture
-'p260202' = {
+'uplsm' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 2 ;
 	}
 #Lower layer soil moisture
-'p260203' = {
+'lowlsm' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 3 ;
 	}
 #Bottom layer soil temperature
-'p260204' = {
+'botlst' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 4 ;
 	}
 #Liquid volumetric soil moisture (non-frozen)
-'p260205' = {
+'soill' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 5 ;
 	}
 #Number of soil layers in root zone
-'p260206' = {
+'rlyrs' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 6 ;
 	}
 #Transpiration stress-onset (soil moisture)
-'p260207' = {
+'smref' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 7 ;
 	}
 #Direct evaporation cease (soil moisture)
-'p260208' = {
+'smdry' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 8 ;
 	}
 #Soil porosity
-'p260209' = {
+'poros' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 9 ;
 	}
 #Liquid volumetric soil moisture (non-frozen)
-'p260210' = {
+'liqvsm' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 10 ;
 	}
 #Volumetric transpiration stress-onset (soil moisture)
-'p260211' = {
+'voltso' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 11 ;
 	}
 #Transpiration stress-onset (soil moisture)
-'p260212' = {
+'transo' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 12 ;
 	}
 #Volumetric direct evaporation cease (soil moisture)
-'p260213' = {
+'voldec' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 13 ;
 	}
 #Direct evaporation cease (soil moisture)
-'p260214' = {
+'direc' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 14 ;
 	}
 #Soil porosity
-'p260215' = {
+'soilp' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 15 ;
 	}
 #Volumetric saturation of soil moisture
-'p260216' = {
+'vsosm' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 16 ;
 	}
 #Saturation of soil moisture
-'p260217' = {
+'satosm' = {
 	 discipline = 2 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 17 ;
 	}
 #Estimated precipitation
-'p260218' = {
+'estp' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 0 ;
 	}
 #Instantaneous rain rate
-'p260219' = {
+'irrate' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 1 ;
 	}
 #Cloud top height
-'p260220' = {
+'ctoph' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 2 ;
 	}
 #Cloud top height quality indicator
-'p260221' = {
+'ctophqi' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 3 ;
 	}
 #Estimated u component of wind 
-'p260222' = {
+'estu' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 4 ;
 	}
 #Estimated v component of wind
-'p260223' = {
+'estv' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 5 ;
 	}
 #Number of pixels used
-'p260224' = {
+'npixu' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 6 ;
 	}
 #Solar zenith angle
-'p260225' = {
+'solza' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 7 ;
 	}
 #Relative azimuth angle
-'p260226' = {
+'raza' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 8 ;
 	}
 #Reflectance in 0.6 micron channel
-'p260227' = {
+'rfl06' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 9 ;
 	}
 #Reflectance in 0.8 micron channel
-'p260228' = {
+'rfl08' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 10 ;
 	}
 #Reflectance in 1.6 micron channel
-'p260229' = {
+'rfl16' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 11 ;
 	}
 #Reflectance in 3.9 micron channel
-'p260230' = {
+'rfl39' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 12 ;
 	}
 #Atmospheric divergence
-'p260231' = {
+'atmdiv' = {
 	 discipline = 3 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 13 ;
 	}
 #Direction of wind waves
-'p260232' = {
+'wvdir' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 4 ;
 	}
 #Primary wave direction
-'p260233' = {
+'dirpw' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 10 ;
 	}
 #Primary wave mean period
-'p260234' = {
+'perpw' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 11 ;
 	}
 #Secondary wave mean period
-'p260235' = {
+'persw' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 13 ;
 	}
 #Current direction
-'p260236' = {
+'dirc' = {
 	 discipline = 10 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 0 ;
 	}
 #Current speed
-'p260237' = {
+'spc' = {
 	 discipline = 10 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 1 ;
@@ -2284,379 +2494,379 @@
 	 parameterNumber = 9 ;
 	}
 #Ice temperature
-'p260239' = {
+'ist' = {
 	 discipline = 10 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 8 ;
 	}
 #Deviation of sea level from mean
-'p260240' = {
+'dslm' = {
 	 discipline = 10 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 1 ;
 	}
 #Seconds prior to initial reference time (defined in Section 1)
-'p260241' = {
+'tsec' = {
 	 discipline = 10 ;
 	 parameterCategory = 191 ;
 	 parameterNumber = 0 ;
 	}
 #Albedo
-'p260509' = {
+'al' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 1 ;
 	}
 #Pressure tendency
-'p3003' = {
+'ptend' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 2 ;
 	}
 #ICAO Standard Atmosphere reference height
-'p3005' = {
+'icaht' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 3 ;
 	}
 #Geometrical height
-'p3008' = {
+'h' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 6 ;
 	}
 #Standard deviation of height
-'p3009' = {
+'hstdv' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 7 ;
 	}
 #Maximum temperature
-'p3015' = {
+'tmax' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 4 ;
 	}
 #Minimum temperature
-'p3016' = {
+'tmin' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 5 ;
 	}
 #Dew point temperature
-'p3017' = {
+'dpt' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 6 ;
 	}
 #Lapse rate
-'p3019' = {
+'lapr' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 8 ;
 	}
 #Visibility
-'p3020' = {
+'vis' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 0 ;
 	}
 #Radar spectra (1)
-'p3021' = {
+'rdsp1' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 6 ;
 	}
 #Radar spectra (2)
-'p3022' = {
+'rdsp2' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 7 ;
 	}
 #Radar spectra (3)
-'p3023' = {
+'rdsp3' = {
 	 discipline = 0 ;
 	 parameterCategory = 15 ;
 	 parameterNumber = 8 ;
 	}
 #Parcel lifted index (to 500 hPa)
-'p3024' = {
+'pli' = {
 	 discipline = 0 ;
 	 parameterCategory = 7 ;
 	 parameterNumber = 0 ;
 	}
 #Temperature anomaly
-'p3025' = {
+'ta' = {
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 9 ;
 	}
 #Pressure anomaly
-'p3026' = {
+'presa' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 8 ;
 	}
 #Geopotential height anomaly
-'p3027' = {
+'gpa' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 9 ;
 	}
 #Wave spectra (1)
-'p3028' = {
+'wvsp1' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
 	}
 #Wave spectra (2)
-'p3029' = {
+'wvsp2' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 1 ;
 	}
 #Wave spectra (3)
-'p3030' = {
+'wvsp3' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 2 ;
 	}
 #Montgomery stream Function
-'p3037' = {
+'mntsf' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 6 ;
 	}
 #Sigma coordinate vertical velocity
-'p3038' = {
+'sgcvv' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 7 ;
 	}
 #Absolute vorticity
-'p3041' = {
+'absv' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 10 ;
 	}
 #Absolute divergence
-'p3042' = {
+'absd' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 11 ;
 	}
 #Vertical u-component shear
-'p3045' = {
+'vucsh' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 15 ;
 	}
 #Vertical v-component shear
-'p3046' = {
+'vvcsh' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 16 ;
 	}
 #U-component of current 
-'p3049' = {
+'ucurr' = {
 	 discipline = 10 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 2 ;
 	}
 #V-component of current 
-'p3050' = {
+'vcurr' = {
 	 discipline = 10 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 3 ;
 	}
 #Precipitable water
-'p3054' = {
+'pwat' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 3 ;
 	}
 #Saturation deficit
-'p3056' = {
+'satd' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 5 ;
 	}
 #Precipitation rate
-'p3059' = {
+'prate' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 7 ;
 	}
 #Thunderstorm probability
-'p3060' = {
+'tstm' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 2 ;
 	}
 #Convective precipitation (water)
-'p3063' = {
+'acpcp' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 10 ;
 	}
 #Mixed layer depth
-'p3067' = {
+'mld' = {
 	 discipline = 0 ;
 	 parameterCategory = 19 ;
 	 parameterNumber = 3 ;
 	}
 #Transient thermocline depth
-'p3068' = {
+'tthdp' = {
 	 discipline = 10 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 2 ;
 	}
 #Main thermocline depth
-'p3069' = {
+'mthd' = {
 	 discipline = 10 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 0 ;
 	}
 #Main thermocline anomaly
-'p3070' = {
+'mtha' = {
 	 discipline = 10 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 1 ;
 	}
 #Best lifted index (to 500 hPa)
-'p3077' = {
+'bli' = {
 	 discipline = 0 ;
 	 parameterCategory = 7 ;
 	 parameterNumber = 1 ;
 	}
 #Soil moisture content
-'p3086' = {
+'ssw' = {
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 3 ;
 	}
 #Salinity
-'p3088' = {
+'s' = {
 	 discipline = 10 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 3 ;
 	}
 #Density
-'p3089' = {
+'den' = {
 	 discipline = 0 ;
 	 parameterCategory = 3 ;
 	 parameterNumber = 10 ;
 	}
 #Ice thickness
-'p3092' = {
+'icetk' = {
 	 discipline = 10 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 1 ;
 	}
 #Direction of ice drift
-'p3093' = {
+'diced' = {
 	 discipline = 10 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 2 ;
 	}
 #Speed of ice drift
-'p3094' = {
+'siced' = {
 	 discipline = 10 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 3 ;
 	}
 #U-component of ice drift
-'p3095' = {
+'uice' = {
 	 discipline = 10 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 4 ;
 	}
 #V-component of ice drift
-'p3096' = {
+'vice' = {
 	 discipline = 10 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 5 ;
 	}
 #Ice growth rate
-'p3097' = {
+'iceg' = {
 	 discipline = 10 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 6 ;
 	}
 #Ice divergence
-'p3098' = {
+'iced' = {
 	 discipline = 10 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 7 ;
 	}
 #Snow melt
-'p3099' = {
+'snom' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 16 ;
 	}
 #Significant height of wind waves
-'p3102' = {
+'shww' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 5 ;
 	}
 #Mean period of wind waves
-'p3103' = {
+'mpww' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 6 ;
 	}
 #Direction of swell waves
-'p3104' = {
+'swdir' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 7 ;
 	}
 #Significant height of swell waves
-'p3105' = {
+'swell' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 8 ;
 	}
 #Mean period of swell waves
-'p3106' = {
+'swper' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 9 ;
 	}
 #Secondary wave direction
-'p3109' = {
+'dirsw' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 12 ;
 	}
 #Net short-wave radiation flux (surface)
-'p3111' = {
+'nswrs' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 0 ;
 	}
 #Global radiation flux
-'p3117' = {
+'grad' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 3 ;
 	}
 #Radiance (with respect to wave number)
-'p3119' = {
+'lwrad' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 5 ;
 	}
 #Radiance (with respect to wave length)
-'p3120' = {
+'swrad' = {
 	 discipline = 0 ;
 	 parameterCategory = 4 ;
 	 parameterNumber = 6 ;
 	}
 #Wind mixing energy
-'p3126' = {
+'wmixe' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 19 ;
diff --git a/definitions/grib2/grib2LocalSectionNumber.85.table b/definitions/grib2/grib2LocalSectionNumber.85.table
new file mode 100644
index 0000000..d0f5e6b
--- /dev/null
+++ b/definitions/grib2/grib2LocalSectionNumber.85.table
@@ -0,0 +1,3 @@
+0 0  Empty local section 
+1 1  FA section is present
+255 255 MISSING
diff --git a/definitions/grib2/local.85.0.def b/definitions/grib2/local.85.0.def
new file mode 100644
index 0000000..193a2b1
--- /dev/null
+++ b/definitions/grib2/local.85.0.def
@@ -0,0 +1 @@
+label "empty section";
diff --git a/definitions/grib2/local.85.1.def b/definitions/grib2/local.85.1.def
new file mode 100644
index 0000000..c85e4d3
--- /dev/null
+++ b/definitions/grib2/local.85.1.def
@@ -0,0 +1,29 @@
+transient defaultFaFieldName = "";
+transient defaultFaLevelName = "";
+transient defaultFaModelName = "";
+
+concept faFieldName (defaultFaFieldName,"faFieldName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy;
+concept faLevelName (defaultFaLevelName,"faLevelName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy;
+concept faModelName (defaultFaModelName,"faModelName.def",conceptsMasterDir,conceptsLocalDirAll) : no_copy;
+
+# 0 = Accumulation or time range from last event
+# 1 = Accumulation or time range from the start 
+transient LSTCUM = 0;
+
+# Scaling factor for levels
+transient ZLMULT = 1.;
+# Base value for levels
+transient ZLBASE = 0.;
+
+# Name in FA
+ascii[16]     CLNOMA : dump;
+# Encoding method
+unsigned[8]   INGRIB : dump;
+# Spectral/grid-point
+unsigned[8]   LLCOSP : dump;
+# Number of bits used to encode each value
+unsigned[8]   INBITS : dump;
+
+# FA scaling factor
+signed[8]     FMULTM = 1 : dump;
+signed[8]     FMULTE = 0 : dump;
diff --git a/definitions/grib2/local.85.2.def b/definitions/grib2/local.85.2.def
new file mode 100644
index 0000000..58fe1d8
--- /dev/null
+++ b/definitions/grib2/local.85.2.def
@@ -0,0 +1,5 @@
+# Hollow grid-point fields used for AROME coupling
+
+include "grib2/local.85.1.def";
+
+unsigned[8]   ICPLSIZE : dump;
diff --git a/definitions/grib2/local.85.def b/definitions/grib2/local.85.def
new file mode 100644
index 0000000..c660795
--- /dev/null
+++ b/definitions/grib2/local.85.def
@@ -0,0 +1,3 @@
+alias localDefinitionNumber=grib2LocalSectionNumber;
+template  localSection  "grib2/local.[centreForLocal:l].[grib2LocalSectionNumber:l].def";
+position offsetAfterLocalSection;
diff --git a/definitions/grib2/local.98.500.def b/definitions/grib2/local.98.500.def
index 087095f..3fa593b 100755
--- a/definitions/grib2/local.98.500.def
+++ b/definitions/grib2/local.98.500.def
@@ -41,7 +41,7 @@ codetable[2] instrument "grib2/tables/local/ecmf/obstat.5.0.table";
 
 codetable[2] dataStream "grib2/tables/local/ecmf/obstat.6.0.table";
 
-#   include "grib2/template.4.horizontal.def"
+#  include "grib2/template.4.horizontal.def"
 
 codetable[2] observationDiagnostic "grib2/tables/local/ecmf/obstat.9.0.table";
 
diff --git a/definitions/grib2/local/edzw/2.0.3.table b/definitions/grib2/local/edzw/2.0.3.table
index a4f9a0d..efa3bd1 100755
--- a/definitions/grib2/local/edzw/2.0.3.table
+++ b/definitions/grib2/local/edzw/2.0.3.table
@@ -110,7 +110,7 @@
 110 110 None Secondary wave period s
 111 111 None Net short-wave radiation flux (surface) W m**-2
 112 112 None Net long-wave radiation flux (surface) W m**-2
-113 113 None Net short-wave radiationflux(atmosph.top) W m**-2
+113 113 None Net short-wave radiation flux(atmosph.top) W m**-2
 114 114 None Net long-wave radiation flux(atmosph.top) W m**-2
 115 115 None Long-wave radiation flux W m**-2
 116 116 None Short-wave radiation flux W m**-2
diff --git a/definitions/grib2/localConcepts/ecmf/cfName.def b/definitions/grib2/localConcepts/ecmf/cfName.def
index ed89ec5..7b670f3 100644
--- a/definitions/grib2/localConcepts/ecmf/cfName.def
+++ b/definitions/grib2/localConcepts/ecmf/cfName.def
@@ -49,3 +49,99 @@
 	 parameterNumber = 1 ;
 	 parameterCategory = 0 ;
 }
+#Total column water vapour
+'lwe_thickness_of_atmosphere_water_vapor_content' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 137 ;
+	}
+#Soil temperature level 1
+'surface_temperature' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 139 ;
+	}
+#Soil wetness level 1
+'lwe_thickness_of_soil_moisture_content' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 140 ;
+	}
+#Snow depth
+'lwe_thickness_of_surface_snow_amount' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 11 ;
+	}
+#Large-scale precipitation
+'lwe_thickness_of_large_scale_precipitation_amount' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 142 ;
+	}
+#Convective precipitation
+'lwe_thickness_of_convective_precipitation_amount' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 10 ;
+	}
+#Snowfall
+'lwe_thickness_of_snowfall_amount' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 144 ;
+	}
+#Tendency of surface pressure
+'tendency_of_surface_air_pressure' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 158 ;
+	}
+#Total cloud cover
+'cloud_area_fraction' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 164 ;
+	}
+#Albedo
+'surface_albedo' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 174 ;
+	}
+#Top net solar radiation
+'toa_net_upward_shortwave_flux' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 178 ;
+	}
+#Evaporation
+'lwe_thickness_of_water_evaporation_amount' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 182 ;
+	}
+#Convective cloud cover
+'convective_cloud_area_fraction' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 185 ;
+	}
+#Surface net solar radiation, clear sky
+'surface_net_downward_shortwave_flux_assuming_clear_sky' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 210 ;
+	}
+#Surface net thermal radiation, clear sky
+'surface_net_downward_longwave_flux_assuming_clear_sky' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 211 ;
+	}
+#Temperature of snow layer
+'snow_temperature' = {
+	 discipline = 192 ;
+	 parameterCategory = 128 ;
+	 parameterNumber = 238 ;
+	}
diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def
index 8d453fd..a85b2b3 100644
--- a/definitions/grib2/localConcepts/ecmf/cfVarName.def
+++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def
@@ -293,12 +293,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 48 ;
 	}
-#10 metre wind gust since previous post-processing
-'fg10' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 49 ;
-	}
 #Large-scale precipitation fraction
 'lspf' = {
 	 discipline = 192 ;
@@ -980,18 +974,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 200 ;
 	}
-#Maximum temperature at 2 metres since previous post-processing
-'mx2t' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 201 ;
-	}
-#Minimum temperature at 2 metres since previous post-processing
-'mn2t' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 202 ;
-	}
 #Precipitation analysis weights
 'paw' = {
 	 discipline = 192 ;
@@ -9149,24 +9131,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 48 ;
 	}
-#Unbalanced component of specific humidity
-'ucq' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 54 ;
-	}
-#Unbalanced component of specific cloud liquid water content
-'ucclwc' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 55 ;
-	}
-#Unbalanced component of specific cloud ice water content
-'ucciwc' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 56 ;
-	}
 #Total column rain water
 'tcrw' = {
 	 discipline = 192 ;
@@ -9251,30 +9215,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 255 ;
 	}
-#Flood alert levels
-'flal' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 10 ;
-	}
-#Maximum discharge in 15 day forecast
-'mxcq15d' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 19 ;
-	}
-#Maximum rain in 24 hours over the 15 day forecast
-'mxtp24h15d' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 23 ;
-	}
-#Accumulated precipitation over the 15 day forecast
-'acctp15d' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 27 ;
-	}
 #Stream function gradient
 'strfgrd' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def
index f9f1827..3141ac5 100644
--- a/definitions/grib2/localConcepts/ecmf/name.def
+++ b/definitions/grib2/localConcepts/ecmf/name.def
@@ -293,12 +293,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 48 ;
 	}
-#10 metre wind gust since previous post-processing
-'10 metre wind gust since previous post-processing' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 49 ;
-	}
 #Large-scale precipitation fraction
 'Large-scale precipitation fraction' = {
 	 discipline = 192 ;
@@ -980,18 +974,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 200 ;
 	}
-#Maximum temperature at 2 metres since previous post-processing
-'Maximum temperature at 2 metres since previous post-processing' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 201 ;
-	}
-#Minimum temperature at 2 metres since previous post-processing
-'Minimum temperature at 2 metres since previous post-processing' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 202 ;
-	}
 #Precipitation analysis weights
 'Precipitation analysis weights' = {
 	 discipline = 192 ;
@@ -9149,24 +9131,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 48 ;
 	}
-#Unbalanced component of specific humidity
-'Unbalanced component of specific humidity' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 54 ;
-	}
-#Unbalanced component of specific cloud liquid water content
-'Unbalanced component of specific cloud liquid water content' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 55 ;
-	}
-#Unbalanced component of specific cloud ice water content
-'Unbalanced component of specific cloud ice water content' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 56 ;
-	}
 #Total column rain water
 'Total column rain water' = {
 	 discipline = 192 ;
@@ -9251,30 +9215,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 255 ;
 	}
-#Flood alert levels
-'Flood alert levels' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 10 ;
-	}
-#Maximum discharge in 15 day forecast
-'Maximum discharge in 15 day forecast' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 19 ;
-	}
-#Maximum rain in 24 hours over the 15 day forecast
-'Maximum rain in 24 hours over the 15 day forecast' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 23 ;
-	}
-#Accumulated precipitation over the 15 day forecast
-'Accumulated precipitation over the 15 day forecast' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 27 ;
-	}
 #Stream function gradient
 'Stream function gradient' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def
index 32c01cb..7ff7d1c 100644
--- a/definitions/grib2/localConcepts/ecmf/paramId.def
+++ b/definitions/grib2/localConcepts/ecmf/paramId.def
@@ -293,12 +293,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 48 ;
 	}
-#10 metre wind gust since previous post-processing
-'49' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 49 ;
-	}
 #Large-scale precipitation fraction
 '50' = {
 	 discipline = 192 ;
@@ -980,18 +974,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 200 ;
 	}
-#Maximum temperature at 2 metres since previous post-processing
-'201' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 201 ;
-	}
-#Minimum temperature at 2 metres since previous post-processing
-'202' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 202 ;
-	}
 #Precipitation analysis weights
 '204' = {
 	 discipline = 192 ;
@@ -9149,24 +9131,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 48 ;
 	}
-#Unbalanced component of specific humidity
-'228054' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 54 ;
-	}
-#Unbalanced component of specific cloud liquid water content
-'228055' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 55 ;
-	}
-#Unbalanced component of specific cloud ice water content
-'228056' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 56 ;
-	}
 #Total column rain water
 '228089' = {
 	 discipline = 192 ;
@@ -9251,30 +9215,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 255 ;
 	}
-#Flood alert levels
-'240010' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 10 ;
-	}
-#Maximum discharge in 15 day forecast
-'240019' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 19 ;
-	}
-#Maximum rain in 24 hours over the 15 day forecast
-'240023' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 23 ;
-	}
-#Accumulated precipitation over the 15 day forecast
-'240027' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 27 ;
-	}
 #Stream function gradient
 '129001' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def
index eed93cf..ae34c9a 100644
--- a/definitions/grib2/localConcepts/ecmf/shortName.def
+++ b/definitions/grib2/localConcepts/ecmf/shortName.def
@@ -293,12 +293,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 48 ;
 	}
-#10 metre wind gust since previous post-processing
-'10fg' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 49 ;
-	}
 #Large-scale precipitation fraction
 'lspf' = {
 	 discipline = 192 ;
@@ -980,18 +974,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 200 ;
 	}
-#Maximum temperature at 2 metres since previous post-processing
-'mx2t' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 201 ;
-	}
-#Minimum temperature at 2 metres since previous post-processing
-'mn2t' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 202 ;
-	}
 #Precipitation analysis weights
 'paw' = {
 	 discipline = 192 ;
@@ -9149,24 +9131,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 48 ;
 	}
-#Unbalanced component of specific humidity
-'ucq' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 54 ;
-	}
-#Unbalanced component of specific cloud liquid water content
-'ucclwc' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 55 ;
-	}
-#Unbalanced component of specific cloud ice water content
-'ucciwc' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 56 ;
-	}
 #Total column rain water
 'tcrw' = {
 	 discipline = 192 ;
@@ -9251,30 +9215,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 255 ;
 	}
-#Flood alert levels
-'flal' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 10 ;
-	}
-#Maximum discharge in 15 day forecast
-'mxcq15d' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 19 ;
-	}
-#Maximum rain in 24 hours over the 15 day forecast
-'mxtp24h15d' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 23 ;
-	}
-#Accumulated precipitation over the 15 day forecast
-'acctp15d' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 27 ;
-	}
 #Stream function gradient
 'strfgrd' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def
index a1f0d63..25665b3 100644
--- a/definitions/grib2/localConcepts/ecmf/units.def
+++ b/definitions/grib2/localConcepts/ecmf/units.def
@@ -293,12 +293,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 48 ;
 	}
-#10 metre wind gust since previous post-processing
-'m s**-1' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 49 ;
-	}
 #Large-scale precipitation fraction
 's' = {
 	 discipline = 192 ;
@@ -980,18 +974,6 @@
 	 parameterCategory = 128 ;
 	 parameterNumber = 200 ;
 	}
-#Maximum temperature at 2 metres since previous post-processing
-'K' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 201 ;
-	}
-#Minimum temperature at 2 metres since previous post-processing
-'K' = {
-	 discipline = 192 ;
-	 parameterCategory = 128 ;
-	 parameterNumber = 202 ;
-	}
 #Precipitation analysis weights
 '~' = {
 	 discipline = 192 ;
@@ -2988,13 +2970,13 @@
 	 parameterNumber = 79 ;
 	}
 #Mean altitude of maximum injection
-'m above sea level' = {
+'m' = {
 	 discipline = 192 ;
 	 parameterCategory = 210 ;
 	 parameterNumber = 119 ;
 	}
 #Altitude of plume top
-'m above sea level' = {
+'m' = {
 	 discipline = 192 ;
 	 parameterCategory = 210 ;
 	 parameterNumber = 120 ;
@@ -3156,7 +3138,7 @@
 	 parameterNumber = 230 ;
 	}
 #Altitude of plume bottom
-'m above sea level' = {
+'m' = {
 	 discipline = 192 ;
 	 parameterCategory = 210 ;
 	 parameterNumber = 242 ;
@@ -3252,13 +3234,13 @@
 	 parameterNumber = 56 ;
 	}
 #Altitude of emitter
-'m above sea level' = {
+'m' = {
 	 discipline = 192 ;
 	 parameterCategory = 211 ;
 	 parameterNumber = 119 ;
 	}
 #Altitude of plume top
-'m above sea level' = {
+'m' = {
 	 discipline = 192 ;
 	 parameterCategory = 211 ;
 	 parameterNumber = 120 ;
@@ -9149,24 +9131,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 48 ;
 	}
-#Unbalanced component of specific humidity
-'kg kg**-1' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 54 ;
-	}
-#Unbalanced component of specific cloud liquid water content
-'kg kg**-1' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 55 ;
-	}
-#Unbalanced component of specific cloud ice water content
-'kg kg**-1' = {
-	 discipline = 192 ;
-	 parameterCategory = 228 ;
-	 parameterNumber = 56 ;
-	}
 #Total column rain water
 'kg m**-2' = {
 	 discipline = 192 ;
@@ -9251,30 +9215,6 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 255 ;
 	}
-#Flood alert levels
-'Integer' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 10 ;
-	}
-#Maximum discharge in 15 day forecast
-'m**3 s**-1' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 19 ;
-	}
-#Maximum rain in 24 hours over the 15 day forecast
-'m' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 23 ;
-	}
-#Accumulated precipitation over the 15 day forecast
-'m' = {
-	 discipline = 192 ;
-	 parameterCategory = 240 ;
-	 parameterNumber = 27 ;
-	}
 #Stream function gradient
 'm**2 s**-1' = {
 	 discipline = 192 ;
@@ -12544,13 +12484,13 @@
 	 parameterNumber = 202 ;
 	}
 #Bias in the zonal pressure gradient (applied)
-'Pa**m-1' = {
+'Pa m**-1' = {
 	 discipline = 192 ;
 	 parameterCategory = 151 ;
 	 parameterNumber = 203 ;
 	}
 #Bias in the meridional pressure gradient (applied)
-'Pa**m-1' = {
+'Pa m**-1' = {
 	 discipline = 192 ;
 	 parameterCategory = 151 ;
 	 parameterNumber = 204 ;
diff --git a/definitions/grib2/localConcepts/edzw/name.def b/definitions/grib2/localConcepts/edzw/name.def
index 6118b4c..0e26f67 100755
--- a/definitions/grib2/localConcepts/edzw/name.def
+++ b/definitions/grib2/localConcepts/edzw/name.def
@@ -1,4 +1,4 @@
-# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-02-03 10:04
+# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-06-03 11:40
 #paramId: 500000
 #Pressure (S) (not reduced)
 'Pressure (S) (not reduced)' = {
@@ -1933,7 +1933,6 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	 typeOfFirstFixedSurface = 107 ;
-	 unitsFactor = 100 ;
 	}
 
 #paramId: 500302
@@ -6134,6 +6133,536 @@
 	 parameterNumber = 42 ;
 	}
 
+#paramId: 503229
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 1
+'Prognostic mass mixing ratio of volcanic ash particles for bin number 1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503230
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 2
+'Prognostic mass mixing ratio of volcanic ash particles for bin number 2' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503231
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 3
+'Prognostic mass mixing ratio of volcanic ash particles for bin number 3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503232
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 4
+'Prognostic mass mixing ratio of volcanic ash particles for bin number 4' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 4 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503233
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 5
+'Prognostic mass mixing ratio of volcanic ash particles for bin number 5' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 5 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503234
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 6
+'Prognostic mass mixing ratio of volcanic ash particles for bin number 6' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 6 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503235
+#Modal prognostic mass mixing ratio of volcanic ash particles (fine mode)
+'Modal prognostic mass mixing ratio of volcanic ash particles (fine mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503236
+#Modal prognostic mass mixing ratio of volcanic ash particles (medium mode)
+'Modal prognostic mass mixing ratio of volcanic ash particles (medium mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503237
+#Modal prognostic mass mixing ratio of volcanic ash particles (coarse mode)
+'Modal prognostic mass mixing ratio of volcanic ash particles (coarse mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503238
+#Modal prognostic specific number concentration of volcanic ash particles (fine mode)
+'Modal prognostic specific number concentration of volcanic ash particles (fine mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503239
+#Modal prognostic specific number concentration of volcanic ash particles (medium mode)
+'Modal prognostic specific number concentration of volcanic ash particles (medium mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503240
+#Modal prognostic specific number concentration of volcanic ash particles (coarse mode)
+'Modal prognostic specific number concentration of volcanic ash particles (coarse mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503241
+#Modal prognostic mass mixing ratio of mineral dust particles (fine mode)
+'Modal prognostic mass mixing ratio of mineral dust particles (fine mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503242
+#Modal prognostic mass mixing ratio of mineral dust particles (medium mode)
+'Modal prognostic mass mixing ratio of mineral dust particles (medium mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503243
+#Modal prognostic mass mixing ratio of mineral dust particles (coarse mode)
+'Modal prognostic mass mixing ratio of mineral dust particles (coarse mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503244
+#Modal prognostic specific number concentration  of mineral dust particles (fine mode)
+'Modal prognostic specific number concentration  of mineral dust particles (fine mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503245
+#Modal prognostic specific number concentration  of mineral dust particles (medium mode)
+'Modal prognostic specific number concentration  of mineral dust particles (medium mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503246
+#Modal prognostic specific number concentration  of mineral dust particles (coarsemode)
+'Modal prognostic specific number concentration  of mineral dust particles (coarsemode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503247
+#Modal prognostic mass mixing ratio of sea salt particles (fine mode)
+'Modal prognostic mass mixing ratio of sea salt particles (fine mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503248
+#Modal prognostic mass mixing ratio of sea salt particles (medium mode)
+'Modal prognostic mass mixing ratio of sea salt particles (medium mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503249
+#Modal prognostic mass mixing ratio of sea salt particles (coarse mode)
+'Modal prognostic mass mixing ratio of sea salt particles (coarse mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503250
+#Modal prognostic specific number concentration of sea salt particles (fine mode)
+'Modal prognostic specific number concentration of sea salt particles (fine mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503251
+#Modal prognostic specific number concentration of sea salt particles (medium mode)
+'Modal prognostic specific number concentration of sea salt particles (medium mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503252
+#Modal prognostic specific number concentration of sea salt particles (coarse mode)
+'Modal prognostic specific number concentration of sea salt particles (coarse mode)' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503253
+#Prognostic specific activity concentration of Caesium 137
+'Prognostic specific activity concentration of Caesium 137' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30172 ;
+	}
+
+#paramId: 503254
+#Prognostic specific activity concentration of Iodine 131 aerosol
+'Prognostic specific activity concentration of Iodine 131 aerosol' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30141 ;
+	}
+
+#paramId: 503255
+#Prognostic specific activity concentration of Tellurium 132
+'Prognostic specific activity concentration of Tellurium 132' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30129 ;
+	}
+
+#paramId: 503256
+#Prognostic specific activity concentration of Zirconium 95
+'Prognostic specific activity concentration of Zirconium 95' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30079 ;
+	}
+
+#paramId: 503257
+#Prognostic specific activity concentration of Xenon 133
+'Prognostic specific activity concentration of Xenon 133' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30161 ;
+	}
+
+#paramId: 503258
+#Prognostic specific activity concentration of Iodine 131 elementary gaseous
+'Prognostic specific activity concentration of Iodine 131 elementary gaseous' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30138 ;
+	}
+
+#paramId: 503259
+#Prognostic specific activity concentration of Iodine 131 organic bounded
+'Prognostic specific activity concentration of Iodine 131 organic bounded' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30139 ;
+	}
+
+#paramId: 503260
+#Prognostic specific activity concentration of Barium 140
+'Prognostic specific activity concentration of Barium 140' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30175 ;
+	}
+
+#paramId: 503261
+#Prognostic specific activity concentration of Ruthenium 103
+'Prognostic specific activity concentration of Ruthenium 103' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30102 ;
+	}
+
+#paramId: 503262
+#Diagnostic total mass concentration of volcanic ash
+'Diagnostic total mass concentration of volcanic ash' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 0 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503263
+#Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200
+'Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 101325 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 46500 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503265
+#Diagnostic total column of mass concentration of volcanic ash
+'Diagnostic total column of mass concentration of volcanic ash' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 1 ;
+	 typeOfFirstFixedSurface = 10 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503266
+#Diagnostic height of model layer with maximal total mass concentration of volcanic ash
+'Diagnostic height of model layer with maximal total mass concentration of volcanic ash' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 62 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503267
+#Diagnostic volcanic ash optical depth
+'Diagnostic volcanic ash optical depth' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62025 ;
+	}
+
+#paramId: 503268
+#Diagnostic mineral dust optical depth
+'Diagnostic mineral dust optical depth' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62001 ;
+	}
+
+#paramId: 503269
+#Diagnostic sea salt optical depth
+'Diagnostic sea salt optical depth' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62008 ;
+	}
+
+#paramId: 503270
+#Diagnostic vmaximum activity concentration of radionuclides in a layer
+'Diagnostic vmaximum activity concentration of radionuclides in a layer' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 15 ;
+	}
+
+#paramId: 503273
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL200-FL350
+'Diagnostic maximum total mass concentration of volcanic ash in layer FL200-FL350' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 46500 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 24000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503274
+#Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200
+'Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 101325 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 70000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503275
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL350-FL550
+'Diagnostic maximum total mass concentration of volcanic ash in layer FL350-FL550' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 24000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 9100 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503276
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL100-FL245
+'Diagnostic maximum total mass concentration of volcanic ash in layer FL100-FL245' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 70000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 38500 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503277
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL245-FL390
+'Diagnostic maximum total mass concentration of volcanic ash in layer FL245-FL390' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 38500 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 20000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503278
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL390-FL530
+'Diagnostic maximum total mass concentration of volcanic ash in layer FL390-FL530' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 20000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503279
+#Diagnostic maximum total mass concentration of volcanic ash in a layer
+'Diagnostic maximum total mass concentration of volcanic ash in a layer' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503280
+#Aerosol optical depth
+'Aerosol optical depth' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	}
+
 #paramId: 500092
 #Solar radiation heating rate
 'Solar radiation heating rate' = {
@@ -10833,3 +11362,52 @@
 	 parameterNumber = 202 ;
 	}
 
+#paramId: 503282
+#Diagnostic total column of activity concentration of radionuclides
+'Diagnostic total column of activity concentration of radionuclides' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 192 ;
+	 typeOfFirstFixedSurface = 10 ;
+	}
+
+#paramId: 503283
+#Liquid water potential temperature variance
+'Liquid water potential temperature variance' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 0 ;
+	}
+
+#paramId: 503284
+#Total water specific humidity variance
+'Total water specific humidity variance' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 1 ;
+	}
+
+#paramId: 503285
+#Liquid water potential temperature - total water specific humidity covariance
+'Liquid water potential temperature - total water specific humidity covariance' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 2 ;
+	}
+
+#paramId: 503286
+#Impervious (paved or sealed) surface fraction
+'Impervious (paved or sealed) surface fraction' = {
+	 discipline = 2 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 196 ;
+	}
+
+#paramId: 503287
+#Antropogenic heat flux (e.g. urban heating, traffic)
+'Antropogenic heat flux (e.g. urban heating, traffic)' = {
+	 discipline = 2 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 197 ;
+	}
+
diff --git a/definitions/grib2/localConcepts/edzw/paramId.def b/definitions/grib2/localConcepts/edzw/paramId.def
index 6827f59..d76ff24 100755
--- a/definitions/grib2/localConcepts/edzw/paramId.def
+++ b/definitions/grib2/localConcepts/edzw/paramId.def
@@ -1,4 +1,4 @@
-# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-02-03 10:04
+# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-06-03 11:40
 #paramId: 500000
 #Pressure (S) (not reduced)
 '500000' = {
@@ -2603,7 +2603,6 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	 typeOfFirstFixedSurface = 107 ;
-	 unitsFactor = 100 ;
 	}
 
 #paramId: 500302
@@ -11372,3 +11371,582 @@
 	 parameterNumber = 202 ;
 	}
 
+#paramId: 503229
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 1
+'503229' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503230
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 2
+'503230' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503231
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 3
+'503231' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503232
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 4
+'503232' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 4 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503233
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 5
+'503233' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 5 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503234
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 6
+'503234' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 6 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503235
+#Modal prognostic mass mixing ratio of volcanic ash particles (fine mode)
+'503235' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503236
+#Modal prognostic mass mixing ratio of volcanic ash particles (medium mode)
+'503236' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503237
+#Modal prognostic mass mixing ratio of volcanic ash particles (coarse mode)
+'503237' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503238
+#Modal prognostic specific number concentration of volcanic ash particles (fine mode)
+'503238' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503239
+#Modal prognostic specific number concentration of volcanic ash particles (medium mode)
+'503239' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503240
+#Modal prognostic specific number concentration of volcanic ash particles (coarse mode)
+'503240' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503241
+#Modal prognostic mass mixing ratio of mineral dust particles (fine mode)
+'503241' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503242
+#Modal prognostic mass mixing ratio of mineral dust particles (medium mode)
+'503242' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503243
+#Modal prognostic mass mixing ratio of mineral dust particles (coarse mode)
+'503243' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503244
+#Modal prognostic specific number concentration  of mineral dust particles (fine mode)
+'503244' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503245
+#Modal prognostic specific number concentration  of mineral dust particles (medium mode)
+'503245' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503246
+#Modal prognostic specific number concentration  of mineral dust particles (coarsemode)
+'503246' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503247
+#Modal prognostic mass mixing ratio of sea salt particles (fine mode)
+'503247' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503248
+#Modal prognostic mass mixing ratio of sea salt particles (medium mode)
+'503248' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503249
+#Modal prognostic mass mixing ratio of sea salt particles (coarse mode)
+'503249' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503250
+#Modal prognostic specific number concentration of sea salt particles (fine mode)
+'503250' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503251
+#Modal prognostic specific number concentration of sea salt particles (medium mode)
+'503251' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503252
+#Modal prognostic specific number concentration of sea salt particles (coarse mode)
+'503252' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503253
+#Prognostic specific activity concentration of Caesium 137
+'503253' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30172 ;
+	}
+
+#paramId: 503254
+#Prognostic specific activity concentration of Iodine 131 aerosol
+'503254' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30141 ;
+	}
+
+#paramId: 503255
+#Prognostic specific activity concentration of Tellurium 132
+'503255' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30129 ;
+	}
+
+#paramId: 503256
+#Prognostic specific activity concentration of Zirconium 95
+'503256' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30079 ;
+	}
+
+#paramId: 503257
+#Prognostic specific activity concentration of Xenon 133
+'503257' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30161 ;
+	}
+
+#paramId: 503258
+#Prognostic specific activity concentration of Iodine 131 elementary gaseous
+'503258' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30138 ;
+	}
+
+#paramId: 503259
+#Prognostic specific activity concentration of Iodine 131 organic bounded
+'503259' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30139 ;
+	}
+
+#paramId: 503260
+#Prognostic specific activity concentration of Barium 140
+'503260' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30175 ;
+	}
+
+#paramId: 503261
+#Prognostic specific activity concentration of Ruthenium 103
+'503261' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30102 ;
+	}
+
+#paramId: 503262
+#Diagnostic total mass concentration of volcanic ash
+'503262' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 0 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503263
+#Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200
+'503263' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 101325 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 46500 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503265
+#Diagnostic total column of mass concentration of volcanic ash
+'503265' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 1 ;
+	 typeOfFirstFixedSurface = 10 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503266
+#Diagnostic height of model layer with maximal total mass concentration of volcanic ash
+'503266' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 62 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503267
+#Diagnostic volcanic ash optical depth
+'503267' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62025 ;
+	}
+
+#paramId: 503268
+#Diagnostic mineral dust optical depth
+'503268' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62001 ;
+	}
+
+#paramId: 503269
+#Diagnostic sea salt optical depth
+'503269' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62008 ;
+	}
+
+#paramId: 503270
+#Diagnostic vmaximum activity concentration of radionuclides in a layer
+'503270' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 15 ;
+	}
+
+#paramId: 503273
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL200-FL350
+'503273' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 46500 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 24000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503274
+#Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200
+'503274' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 101325 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 70000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503275
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL350-FL550
+'503275' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 24000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 9100 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503276
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL100-FL245
+'503276' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 70000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 38500 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503277
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL245-FL390
+'503277' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 38500 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 20000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503278
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL390-FL530
+'503278' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 20000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503279
+#Diagnostic maximum total mass concentration of volcanic ash in a layer
+'503279' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503280
+#Aerosol optical depth
+'503280' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	}
+
+#paramId: 503282
+#Diagnostic total column of activity concentration of radionuclides
+'503282' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 192 ;
+	 typeOfFirstFixedSurface = 10 ;
+	}
+
+#paramId: 503283
+#Liquid water potential temperature variance
+'503283' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 0 ;
+	}
+
+#paramId: 503284
+#Total water specific humidity variance
+'503284' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 1 ;
+	}
+
+#paramId: 503285
+#Liquid water potential temperature - total water specific humidity covariance
+'503285' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 2 ;
+	}
+
+#paramId: 503286
+#Impervious (paved or sealed) surface fraction
+'503286' = {
+	 discipline = 2 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 196 ;
+	}
+
+#paramId: 503287
+#Antropogenic heat flux (e.g. urban heating, traffic)
+'503287' = {
+	 discipline = 2 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 197 ;
+	}
+
diff --git a/definitions/grib2/localConcepts/edzw/shortName.def b/definitions/grib2/localConcepts/edzw/shortName.def
index ed29ce7..4312316 100755
--- a/definitions/grib2/localConcepts/edzw/shortName.def
+++ b/definitions/grib2/localConcepts/edzw/shortName.def
@@ -1,4 +1,4 @@
-# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-02-03 10:04
+# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-06-03 11:40
 #paramId: 500000
 #Pressure (S) (not reduced)
 'PS' = {
@@ -1933,7 +1933,6 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	 typeOfFirstFixedSurface = 107 ;
-	 unitsFactor = 100 ;
 	}
 
 #paramId: 500302
@@ -6134,6 +6133,536 @@
 	 parameterNumber = 42 ;
 	}
 
+#paramId: 503229
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 1
+'ASH1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503230
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 2
+'ASH2' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503231
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 3
+'ASH3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503232
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 4
+'ASH4' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 4 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503233
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 5
+'ASH5' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 5 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503234
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 6
+'ASH6' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 6 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503235
+#Modal prognostic mass mixing ratio of volcanic ash particles (fine mode)
+'ASHA' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503236
+#Modal prognostic mass mixing ratio of volcanic ash particles (medium mode)
+'ASHB' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503237
+#Modal prognostic mass mixing ratio of volcanic ash particles (coarse mode)
+'ASHC' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503238
+#Modal prognostic specific number concentration of volcanic ash particles (fine mode)
+'ASHA0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503239
+#Modal prognostic specific number concentration of volcanic ash particles (medium mode)
+'ASHB0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503240
+#Modal prognostic specific number concentration of volcanic ash particles (coarse mode)
+'ASHC0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503241
+#Modal prognostic mass mixing ratio of mineral dust particles (fine mode)
+'DUSTA' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503242
+#Modal prognostic mass mixing ratio of mineral dust particles (medium mode)
+'DUSTB' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503243
+#Modal prognostic mass mixing ratio of mineral dust particles (coarse mode)
+'DUSTC' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503244
+#Modal prognostic specific number concentration  of mineral dust particles (fine mode)
+'DUSTA0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503245
+#Modal prognostic specific number concentration  of mineral dust particles (medium mode)
+'DUSTB0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503246
+#Modal prognostic specific number concentration  of mineral dust particles (coarsemode)
+'DUSTC0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503247
+#Modal prognostic mass mixing ratio of sea salt particles (fine mode)
+'SEASA' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503248
+#Modal prognostic mass mixing ratio of sea salt particles (medium mode)
+'SEASB' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503249
+#Modal prognostic mass mixing ratio of sea salt particles (coarse mode)
+'SEASC' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503250
+#Modal prognostic specific number concentration of sea salt particles (fine mode)
+'SEASA0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503251
+#Modal prognostic specific number concentration of sea salt particles (medium mode)
+'SEASB0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503252
+#Modal prognostic specific number concentration of sea salt particles (coarse mode)
+'SEASC0' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503253
+#Prognostic specific activity concentration of Caesium 137
+'Cs_137' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30172 ;
+	}
+
+#paramId: 503254
+#Prognostic specific activity concentration of Iodine 131 aerosol
+'I_131a' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30141 ;
+	}
+
+#paramId: 503255
+#Prognostic specific activity concentration of Tellurium 132
+'Te_132' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30129 ;
+	}
+
+#paramId: 503256
+#Prognostic specific activity concentration of Zirconium 95
+'Zr_95' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30079 ;
+	}
+
+#paramId: 503257
+#Prognostic specific activity concentration of Xenon 133
+'Xe_133' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30161 ;
+	}
+
+#paramId: 503258
+#Prognostic specific activity concentration of Iodine 131 elementary gaseous
+'I_131g' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30138 ;
+	}
+
+#paramId: 503259
+#Prognostic specific activity concentration of Iodine 131 organic bounded
+'I_131o' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30139 ;
+	}
+
+#paramId: 503260
+#Prognostic specific activity concentration of Barium 140
+'Ba_140' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30175 ;
+	}
+
+#paramId: 503261
+#Prognostic specific activity concentration of Ruthenium 103
+'Ru_103' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30102 ;
+	}
+
+#paramId: 503262
+#Diagnostic total mass concentration of volcanic ash
+'ASH_TOTAL_MC' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 0 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503263
+#Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200
+'ASH_MAX_TOTAL_MC_SFC_200' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 101325 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 46500 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503265
+#Diagnostic total column of mass concentration of volcanic ash
+'ASH_TOTAL_MC_VI' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 1 ;
+	 typeOfFirstFixedSurface = 10 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503266
+#Diagnostic height of model layer with maximal total mass concentration of volcanic ash
+'ASH_HML_MAX' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 62 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503267
+#Diagnostic volcanic ash optical depth
+'AOD_ASH' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62025 ;
+	}
+
+#paramId: 503268
+#Diagnostic mineral dust optical depth
+'AOD_DUST' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62001 ;
+	}
+
+#paramId: 503269
+#Diagnostic sea salt optical depth
+'AOD_SEAS' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62008 ;
+	}
+
+#paramId: 503270
+#Diagnostic vmaximum activity concentration of radionuclides in a layer
+'RADIONUC_MAX_AC_LAYER' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 15 ;
+	}
+
+#paramId: 503273
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL200-FL350
+'ASH_MAX_TOTAL_MC_200_350' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 46500 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 24000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503274
+#Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200
+'ASH_MAX_TOTAL_MC_SFC_100' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 101325 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 70000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503275
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL350-FL550
+'ASH_MAX_TOTAL_MC_350_550' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 24000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 9100 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503276
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL100-FL245
+'ASH_MAX_TOTAL_MC_100_245' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 70000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 38500 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503277
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL245-FL390
+'ASH_MAX_TOTAL_MC_245_390' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 38500 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 20000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503278
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL390-FL530
+'ASH_MAX_TOTAL_MC_390_530' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 20000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503279
+#Diagnostic maximum total mass concentration of volcanic ash in a layer
+'ASH_MAX_TOTAL_MC_LAYER' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503280
+#Aerosol optical depth
+'AEROSOL_OPTICAL_DEPTH' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	}
+
 #paramId: 500092
 #Solar radiation heating rate
 'SOHR_RAD' = {
@@ -10833,3 +11362,52 @@
 	 parameterNumber = 202 ;
 	}
 
+#paramId: 503282
+#Diagnostic total column of activity concentration of radionuclides
+'RADIONUC_AC_VI' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 192 ;
+	 typeOfFirstFixedSurface = 10 ;
+	}
+
+#paramId: 503283
+#Liquid water potential temperature variance
+'THLTHLCOV' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 0 ;
+	}
+
+#paramId: 503284
+#Total water specific humidity variance
+'QTQTCOV' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 1 ;
+	}
+
+#paramId: 503285
+#Liquid water potential temperature - total water specific humidity covariance
+'THLQTCOV' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 2 ;
+	}
+
+#paramId: 503286
+#Impervious (paved or sealed) surface fraction
+'FR_PAVED' = {
+	 discipline = 2 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 196 ;
+	}
+
+#paramId: 503287
+#Antropogenic heat flux (e.g. urban heating, traffic)
+'AHF' = {
+	 discipline = 2 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 197 ;
+	}
+
diff --git a/definitions/grib2/localConcepts/edzw/units.def b/definitions/grib2/localConcepts/edzw/units.def
index f3e3504..8dbd96c 100755
--- a/definitions/grib2/localConcepts/edzw/units.def
+++ b/definitions/grib2/localConcepts/edzw/units.def
@@ -1,4 +1,4 @@
-# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-02-03 10:04
+# Automatically generated by get_definitions.sql from database PRJ_TDCFDOKU.GRIB_PARAMETER at MIRAKEL.DWD.DE, do not edit! 2016-06-03 11:40
 #paramId: 500000
 #Pressure (S) (not reduced)
 'Pa' = {
@@ -1933,7 +1933,6 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	 typeOfFirstFixedSurface = 107 ;
-	 unitsFactor = 100 ;
 	}
 
 #paramId: 500302
@@ -6134,6 +6133,536 @@
 	 parameterNumber = 42 ;
 	}
 
+#paramId: 503229
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 1
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503230
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 2
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503231
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 3
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503232
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 4
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 4 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503233
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 5
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 5 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503234
+#Prognostic mass mixing ratio of volcanic ash particles for bin number 6
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 6 ;
+	 typeOfDistributionFunction = 1 ;
+	}
+
+#paramId: 503235
+#Modal prognostic mass mixing ratio of volcanic ash particles (fine mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503236
+#Modal prognostic mass mixing ratio of volcanic ash particles (medium mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503237
+#Modal prognostic mass mixing ratio of volcanic ash particles (coarse mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503238
+#Modal prognostic specific number concentration of volcanic ash particles (fine mode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503239
+#Modal prognostic specific number concentration of volcanic ash particles (medium mode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503240
+#Modal prognostic specific number concentration of volcanic ash particles (coarse mode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62025 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503241
+#Modal prognostic mass mixing ratio of mineral dust particles (fine mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503242
+#Modal prognostic mass mixing ratio of mineral dust particles (medium mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503243
+#Modal prognostic mass mixing ratio of mineral dust particles (coarse mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62001 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503244
+#Modal prognostic specific number concentration  of mineral dust particles (fine mode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503245
+#Modal prognostic specific number concentration  of mineral dust particles (medium mode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503246
+#Modal prognostic specific number concentration  of mineral dust particles (coarsemode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62001 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503247
+#Modal prognostic mass mixing ratio of sea salt particles (fine mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503248
+#Modal prognostic mass mixing ratio of sea salt particles (medium mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503249
+#Modal prognostic mass mixing ratio of sea salt particles (coarse mode)
+'kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 2 ;
+	 constituentType = 62008 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503250
+#Modal prognostic specific number concentration of sea salt particles (fine mode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 1 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503251
+#Modal prognostic specific number concentration of sea salt particles (medium mode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 2 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503252
+#Modal prognostic specific number concentration of sea salt particles (coarse mode)
+'kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 60 ;
+	 constituentType = 62008 ;
+	 modeNumber = 3 ;
+	 typeOfDistributionFunction = 7 ;
+	}
+
+#paramId: 503253
+#Prognostic specific activity concentration of Caesium 137
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30172 ;
+	}
+
+#paramId: 503254
+#Prognostic specific activity concentration of Iodine 131 aerosol
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30141 ;
+	}
+
+#paramId: 503255
+#Prognostic specific activity concentration of Tellurium 132
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30129 ;
+	}
+
+#paramId: 503256
+#Prognostic specific activity concentration of Zirconium 95
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30079 ;
+	}
+
+#paramId: 503257
+#Prognostic specific activity concentration of Xenon 133
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30161 ;
+	}
+
+#paramId: 503258
+#Prognostic specific activity concentration of Iodine 131 elementary gaseous
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30138 ;
+	}
+
+#paramId: 503259
+#Prognostic specific activity concentration of Iodine 131 organic bounded
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30139 ;
+	}
+
+#paramId: 503260
+#Prognostic specific activity concentration of Barium 140
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30175 ;
+	}
+
+#paramId: 503261
+#Prognostic specific activity concentration of Ruthenium 103
+'Bq kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 14 ;
+	 constituentType = 30102 ;
+	}
+
+#paramId: 503262
+#Diagnostic total mass concentration of volcanic ash
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 0 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503263
+#Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 101325 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 46500 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503265
+#Diagnostic total column of mass concentration of volcanic ash
+'kg m-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 1 ;
+	 typeOfFirstFixedSurface = 10 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503266
+#Diagnostic height of model layer with maximal total mass concentration of volcanic ash
+'m' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 62 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503267
+#Diagnostic volcanic ash optical depth
+'Numeric' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62025 ;
+	}
+
+#paramId: 503268
+#Diagnostic mineral dust optical depth
+'Numeric' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62001 ;
+	}
+
+#paramId: 503269
+#Diagnostic sea salt optical depth
+'Numeric' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	 aerosolType = 62008 ;
+	}
+
+#paramId: 503270
+#Diagnostic vmaximum activity concentration of radionuclides in a layer
+'Bq m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 15 ;
+	}
+
+#paramId: 503273
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL200-FL350
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 46500 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 24000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503274
+#Diagnostic maximum total mass concentration of volcanic ash in layer SFC-FL200
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 101325 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 70000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503275
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL350-FL550
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 24000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 9100 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503276
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL100-FL245
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 70000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 38500 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503277
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL245-FL390
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 38500 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 20000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503278
+#Diagnostic maximum total mass concentration of volcanic ash in layer FL390-FL530
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 typeOfSecondFixedSurface = 100 ;
+	 scaleFactorOfSecondFixedSurface = 0 ;
+	 scaledValueOfSecondFixedSurface = 20000 ;
+	 typeOfFirstFixedSurface = 100 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10000 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503279
+#Diagnostic maximum total mass concentration of volcanic ash in a layer
+'kg m-3' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 61 ;
+	 constituentType = 62025 ;
+	}
+
+#paramId: 503280
+#Aerosol optical depth
+'Numeric' = {
+	 discipline = 0 ;
+	 parameterCategory = 20 ;
+	 parameterNumber = 102 ;
+	}
+
 #paramId: 500092
 #Solar radiation heating rate
 'K s-1' = {
@@ -10833,3 +11362,52 @@
 	 parameterNumber = 202 ;
 	}
 
+#paramId: 503282
+#Diagnostic total column of activity concentration of radionuclides
+'Bq m-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 18 ;
+	 parameterNumber = 192 ;
+	 typeOfFirstFixedSurface = 10 ;
+	}
+
+#paramId: 503283
+#Liquid water potential temperature variance
+'K2' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 0 ;
+	}
+
+#paramId: 503284
+#Total water specific humidity variance
+'kg2 kg-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 1 ;
+	}
+
+#paramId: 503285
+#Liquid water potential temperature - total water specific humidity covariance
+'K kg kg-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 198 ;
+	 parameterNumber = 2 ;
+	}
+
+#paramId: 503286
+#Impervious (paved or sealed) surface fraction
+'Proportion' = {
+	 discipline = 2 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 196 ;
+	}
+
+#paramId: 503287
+#Antropogenic heat flux (e.g. urban heating, traffic)
+'W m-2' = {
+	 discipline = 2 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 197 ;
+	}
+
diff --git a/definitions/grib2/localConcepts/kwbc/name.def b/definitions/grib2/localConcepts/kwbc/name.def
index d756593..4b9eff2 100644
--- a/definitions/grib2/localConcepts/kwbc/name.def
+++ b/definitions/grib2/localConcepts/kwbc/name.def
@@ -1613,6 +1613,24 @@
 	 parameterCategory = 255 ;
 	 parameterNumber = 255 ;
 	}
+#Sunshine Duration
+'Sunshine Duration' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 201 ;
+	}
+#Icing severity
+'Icing severity' = {
+	 discipline = 0 ;
+	 parameterCategory = 19 ;
+	 parameterNumber = 234 ;
+	}
+#Ventilation Rate
+'Ventilation Rate' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 224 ;
+	}
 #Convective inhibition
 'Convective inhibition' = {
 	 discipline = 0 ;
@@ -1631,15 +1649,3 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 8 ;
 	}
-#Sunshine Duration
-'Sunshine Duration' = {
-	 discipline = 0 ;
-	 parameterCategory = 6 ;
-	 parameterNumber = 201 ;
-	}
-#Ventilation Rate
-'Ventilation Rate' = {
-	 discipline = 0 ;
-	 parameterCategory = 2 ;
-	 parameterNumber = 224 ;
-	}
diff --git a/definitions/grib2/localConcepts/kwbc/paramId.def b/definitions/grib2/localConcepts/kwbc/paramId.def
index 513a83a..2ab9216 100644
--- a/definitions/grib2/localConcepts/kwbc/paramId.def
+++ b/definitions/grib2/localConcepts/kwbc/paramId.def
@@ -1613,6 +1613,24 @@
 	 parameterCategory = 255 ;
 	 parameterNumber = 255 ;
 	}
+#Sunshine Duration
+'7001292' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 201 ;
+	}
+#Icing severity
+'7001293' = {
+	 discipline = 0 ;
+	 parameterCategory = 19 ;
+	 parameterNumber = 234 ;
+	}
+#Ventilation Rate
+'7001353' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 224 ;
+	}
 #Convective inhibition
 '228001' = {
 	 discipline = 0 ;
@@ -1631,15 +1649,3 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 8 ;
 	}
-#Sunshine Duration
-'7001292' = {
-	 discipline = 0 ;
-	 parameterCategory = 6 ;
-	 parameterNumber = 201 ;
-	}
-#Ventilation Rate
-'7001353' = {
-	 discipline = 0 ;
-	 parameterCategory = 2 ;
-	 parameterNumber = 224 ;
-	}
diff --git a/definitions/grib2/localConcepts/kwbc/shortName.def b/definitions/grib2/localConcepts/kwbc/shortName.def
index 01b6974..448ff6a 100644
--- a/definitions/grib2/localConcepts/kwbc/shortName.def
+++ b/definitions/grib2/localConcepts/kwbc/shortName.def
@@ -1613,6 +1613,24 @@
 	 parameterCategory = 255 ;
 	 parameterNumber = 255 ;
 	}
+#Sunshine Duration
+'SUNSD' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 201 ;
+	}
+#Icing severity
+'ICSEV' = {
+	 discipline = 0 ;
+	 parameterCategory = 19 ;
+	 parameterNumber = 234 ;
+	}
+#Ventilation Rate
+'VRATE' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 224 ;
+	}
 #Convective inhibition
 'cin' = {
 	 discipline = 0 ;
@@ -1631,15 +1649,3 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 8 ;
 	}
-#Sunshine Duration
-'SUNSD' = {
-	 discipline = 0 ;
-	 parameterCategory = 6 ;
-	 parameterNumber = 201 ;
-	}
-#Ventilation Rate
-'VRATE' = {
-	 discipline = 0 ;
-	 parameterCategory = 2 ;
-	 parameterNumber = 224 ;
-	}
diff --git a/definitions/grib2/localConcepts/kwbc/units.def b/definitions/grib2/localConcepts/kwbc/units.def
index f986b31..3366ed1 100644
--- a/definitions/grib2/localConcepts/kwbc/units.def
+++ b/definitions/grib2/localConcepts/kwbc/units.def
@@ -474,13 +474,13 @@
 	 parameterNumber = 198 ;
 	}
 #Total Icing Potential Diagnostic
-'non-dim' = {
+'dimensionless' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 206 ;
 	}
 #Number concentration for ice particles
-'non-dim' = {
+'dimensionless' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 207 ;
@@ -642,49 +642,49 @@
 	 parameterNumber = 205 ;
 	}
 #Covariance between Temperature and Zonal Components of the wind.
-'K*ms-1' = {
+'K m s**-1' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 206 ;
 	}
 #Covariance between Temperature and Meridional Components of the wind.
-'K*ms-1' = {
+'K m s**-1' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 207 ;
 	}
 #Vertical Diffusion Zonal Acceleration
-'ms-2' = {
+'m s**-2' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 208 ;
 	}
 #Vertical Diffusion Meridional Acceleration
-'ms-2' = {
+'m s**-2' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 209 ;
 	}
 #Gravity wave drag zonal acceleration
-'ms-2' = {
+'m s**-2' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 210 ;
 	}
 #Gravity wave drag meridional acceleration
-'ms-2' = {
+'m s**-2' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 211 ;
 	}
 #Convective zonal momentum mixing acceleration
-'ms-2' = {
+'m s**-2' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 212 ;
 	}
 #Convective meridional momentum mixing acceleration
-'ms-2' = {
+'m s**-2' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 213 ;
@@ -978,7 +978,7 @@
 	 parameterNumber = 193 ;
 	}
 #Categorical Ozone Concentration
-'non-dim' = {
+'dimensionless' = {
 	 discipline = 0 ;
 	 parameterCategory = 14 ;
 	 parameterNumber = 194 ;
@@ -1044,7 +1044,7 @@
 	 parameterNumber = 196 ;
 	}
 #Lightning
-'non-dim' = {
+'dimensionless' = {
 	 discipline = 0 ;
 	 parameterCategory = 17 ;
 	 parameterNumber = 192 ;
@@ -1613,6 +1613,24 @@
 	 parameterCategory = 255 ;
 	 parameterNumber = 255 ;
 	}
+#Sunshine Duration
+'s' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 201 ;
+	}
+#Icing severity
+'Numeric' = {
+	 discipline = 0 ;
+	 parameterCategory = 19 ;
+	 parameterNumber = 234 ;
+	}
+#Ventilation Rate
+'m**2 s**-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 224 ;
+	}
 #Convective inhibition
 'J kg**-1' = {
 	 discipline = 0 ;
@@ -1631,15 +1649,3 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 8 ;
 }
-#Sunshine Duration
-'s' = {
-	 discipline = 0 ;
-	 parameterCategory = 6 ;
-	 parameterNumber = 201 ;
-	}
-#Ventilation Rate
-'m**2 s**-1' = {
-	 discipline = 0 ;
-	 parameterCategory = 2 ;
-	 parameterNumber = 224 ;
-	}
diff --git a/definitions/grib2/localConcepts/lfpw/faFieldName.def b/definitions/grib2/localConcepts/lfpw/faFieldName.def
new file mode 100644
index 0000000..73e1299
--- /dev/null
+++ b/definitions/grib2/localConcepts/lfpw/faFieldName.def
@@ -0,0 +1,1258 @@
+'CLOUD_FRACTI' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               7;
+}
+'CLOUD_WATER' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               6;
+}
+'FONC.COURANT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               4;
+}
+'GRAUPEL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              32;
+}
+'HUMI.SPECIFI' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =               0;
+}
+'ICE_CRYSTAL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              82;
+}
+'LIQUID_WATER' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              83;
+}
+'POT.VITESSE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               5;
+}
+'PRESS.DEPART' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               8;
+}
+'RAD_LIQUID_W' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              69;
+}
+'RAD_SOLID_WA' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              70;
+}
+'RAIN' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              85;
+}
+'RAYT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               5;
+  parameterNumber                                    =               5;
+}
+'RAYT_SOL_CL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =              11;
+}
+'RAYT_THER_CL' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               5;
+  parameterNumber                                    =               6;
+}
+'SNOW' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              86;
+}
+'SOLID_WATER' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              84;
+}
+'TEMPERATURE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               0;
+}
+'TKE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =              11;
+}
+'VENT_MERIDIE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               3;
+}
+'VENT_ZONAL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               2;
+}
+'VERTIC.DIVER' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              11;
+}
+'VITESSE_VERT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               8;
+}
+'WIND.U.PHYS' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               2;
+}
+'WIND.V.PHYS' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               3;
+}
+'ABS_VORTIC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              10;
+}
+'CLOUD_FRAC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               7;
+}
+'CLOUD_WATE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               6;
+}
+'GEOPOTENTI' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               5;
+}
+'GRAUPEL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              32;
+}
+'HUMI_RELAT' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =               1;
+}
+'ICE_CRYSTA' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              82;
+}
+'PRESSURE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               0;
+}
+'POT_VORTIC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              14;
+}
+'RAD_LIQUID' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              69;
+}
+'RAD_SOLID_' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              70;
+}
+'RAIN' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              85;
+}
+'SIM_REFLEC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              16;
+  parameterNumber                                    =               4;
+}
+'SNOW' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              86;
+}
+'TEMPERATUR' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               0;
+}
+'TEMPE_POTE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               2;
+}
+'THETA_PRIM' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               3;
+}
+'TKE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =              11;
+}
+'VENT_MERID' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               3;
+}
+'VENT_ZONAL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               2;
+}
+'ABS_VORTIC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              10;
+}
+'CLOUD_FRAC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               7;
+}
+'CLOUD_WATE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               6;
+}
+'DIVERGENCE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              11;
+}
+'EDR' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =              28;
+}
+'GEOPOTENTI' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               5;
+}
+'GRAUPEL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              32;
+}
+'HUMI_RELAT' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =               1;
+}
+'ICE_CRYSTA' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              82;
+}
+'POT_VORTIC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              14;
+}
+'RAD_LIQUID' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              69;
+}
+'RAD_SOLID_' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              70;
+}
+'RAIN' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              85;
+}
+'SIM_REFLEC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              16;
+  parameterNumber                                    =               4;
+}
+'SNOW' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              86;
+}
+'TEMPERATUR' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               0;
+}
+'THETA_PRIM' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               3;
+}
+'THETA_VIRT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =              15;
+}
+'TKE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =              11;
+}
+'VENT_MERID' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               3;
+}
+'VENT_ZONAL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               2;
+}
+'VERT.VELOC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               9;
+}
+'VITESSE_VE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               8;
+}
+'ABS_VORTICIT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              10;
+}
+'GEOPOTENTIEL' = {
+  FMULTM                                             = 101971621297793;
+  FMULTE                                             =             -15;
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               5;
+}
+'TEMPE_POTENT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               2;
+}
+'VENT_MERIDIE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               3;
+}
+'VENT_ZONAL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               2;
+}
+'SPECSURFGEOPOTEN' = {
+  FMULTM                                             = 101971621297793;
+  FMULTE                                             =             -15;
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               5;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFACCGRAUPEL' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              32;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFACCNEIGE' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              50;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFACCPLUIE' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              49;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFAEROS.LAND' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              13;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFAEROS.DESERT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              13;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFAEROS.SEA' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              13;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFAEROS.SOOT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              13;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFALBEDO' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =               1;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFALBEDO_NEIGE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =              19;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFALBEDO_HISTO' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFALBEDO.SOLNU' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =              18;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFALBEDO.VEG' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFA.OF.OZONE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              14;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFB.OF.OZONE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              14;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFC.OF.OZONE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              14;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFCAPE.MOD.XFU' = {
+  discipline                                         =               0;
+  level                                              =               0;
+  parameterCategory                                  =               7;
+  parameterNumber                                    =               6;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFCAPE.POS.F00' = {
+  discipline                                         =               0;
+  level                                              =               1;
+  parameterCategory                                  =               7;
+  parameterNumber                                    =               6;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFDIAGHAIL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              31;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFDENSIT.NEIGE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              61;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFEMISSIVITE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              19;
+  parameterNumber                                    =             218;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFEPAIS.SOL' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFET.GEOPOTENT' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFFL.CT_TURBUL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFFL.Q_TURBUL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFFL.U_TURBUL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFFL.V_TURBUL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFFLU.CHA.SENS' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =              11;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFFLU.LAT.MEVA' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              41;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFFLU.LAT.MSUB' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              62;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFFLU.MEVAP.EA' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              41;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFFLU.MSUBL.NE' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              62;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFFLU.RAY.SOLA' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =               9;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFFLU.RAY.THER' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               5;
+  parameterNumber                                    =               5;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFGEOPOTENTIEL' = {
+  FMULTM                                             = 101971621297793;
+  FMULTE                                             =             -15;
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               5;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFGZ0.THERM' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =             216;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFIND.FOLIAIRE' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =              28;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFIND.TERREMER' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               0;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFIND.VEG.DOMI' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFINSGRAUPEL' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              75;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFINSNEIGE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              66;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFINSPLUIE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              65;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFISOT0.MALTIT' = {
+  discipline                                         =               0;
+  level                                              =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               6;
+  typeOfFirstFixedSurface                            =              20;
+}
+'SURFISOTM10.MALT' = {
+  discipline                                         =               0;
+  level                                              =             -10;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               6;
+  typeOfFirstFixedSurface                            =              20;
+}
+'SURFISOTPW0.MALT' = {
+  discipline                                         =               0;
+  level                                              =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               6;
+  typeOfFirstFixedSurface                            =             107;
+}
+'SURFISOTPW1.MALT' = {
+  discipline                                         =               0;
+  level                                              =               1;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               6;
+  typeOfFirstFixedSurface                            =             107;
+}
+'SURFNEBUL.TOTALE' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               1;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFNEBUL.CONVEC' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               2;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFNEBUL.BASSE' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               3;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFNEBUL.MOYENN' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               4;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFNEBUL.HAUTE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               5;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFPREC.EAU.CON' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              48;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFPREC.EAU.GEC' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              47;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFPREC.NEI.CON' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              14;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFPREC.NEI.GEC' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              15;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFPRESSION' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              25;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFPROP.ARGILE' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFPROP.SABLE' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFPROP.VEGETAT' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               4;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRAYT_DIR_SUR' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =               7;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRAYT_SOL_CL' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =              11;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRAYT_SOLA_DE' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =               7;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFRAYT_THER_CL' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               5;
+  parameterNumber                                    =               6;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRAYT_THER_DE' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               5;
+  parameterNumber                                    =               3;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SURFRAYT.LUNE.DE' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRAYT.SOLAIRE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =               9;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRAYT.TERREST' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               5;
+  parameterNumber                                    =               5;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFREFLECT.MAX' = {
+  discipline                                         =               0;
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRES.EVAPOTRA' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               6;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRESERV.EAU' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              20;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRESERV.GLACE' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              22;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRESERV.INTER' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              20;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRESERV.NEIGE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              11;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFRESI.STO.MIN' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =              16;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFTEMPERATURE' = {
+  discipline                                         =               2;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              18;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFTENS.DMOG.ME' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              17;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFTENS.DMOG.ZO' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              16;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFTENS.TURB.ME' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              37;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFTENS.TURB.ZO' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              38;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFTOT.WAT.VAPO' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              64;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfSecondFixedSurface                           =               8;
+}
+'SURFVAR.GEOP.ANI' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              24;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFVAR.GEOP.DIR' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              21;
+  typeOfFirstFixedSurface                            =               1;
+}
+'SURFZ0.FOIS.G' = {
+  FMULTM                                             = 101971621297793;
+  FMULTE                                             =             -15;
+  discipline                                         =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'PROFRESERV.EAU' = {
+  discipline                                         =               2;
+  level                                              =             255;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              20;
+  typeOfFirstFixedSurface                            =             106;
+}
+'PROFRESERV.GLACE' = {
+  discipline                                         =               2;
+  level                                              =             255;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              22;
+  typeOfFirstFixedSurface                            =             106;
+}
+'PROFTEMPERATURE' = {
+  discipline                                         =               2;
+  level                                              =             255;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              18;
+  typeOfFirstFixedSurface                            =             106;
+}
+'PROFXRUISSELLEME' = {
+  discipline                                         =               2;
+  level                                              =             255;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               5;
+  typeOfFirstFixedSurface                            =             106;
+}
+'CLSHUMI.RELATIVE' = {
+  FMULTM                                             =               1;
+  FMULTE                                             =               2;
+  discipline                                         =               0;
+  level                                              =               2;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =               1;
+  typeOfFirstFixedSurface                            =             103;
+}
+'CLSHUMI.SPECIFIQ' = {
+  discipline                                         =               0;
+  level                                              =               2;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =               0;
+  typeOfFirstFixedSurface                            =             103;
+}
+'CLSMAXI.HUMI.REL' = {
+  discipline                                         =               0;
+  level                                              =               2;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =               1;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =             103;
+  typeOfStatisticalProcessing                        =               2;
+}
+'CLSMAXI.TEMPERAT' = {
+  discipline                                         =               0;
+  level                                              =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               0;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =             103;
+  typeOfStatisticalProcessing                        =               2;
+}
+'CLSMINI.HUMI.REL' = {
+  discipline                                         =               0;
+  level                                              =               2;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =               1;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =             103;
+  typeOfStatisticalProcessing                        =               3;
+}
+'CLSMINI.TEMPERAT' = {
+  discipline                                         =               0;
+  level                                              =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               0;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =             103;
+  typeOfStatisticalProcessing                        =               3;
+}
+'CLSTEMPERATURE' = {
+  discipline                                         =               0;
+  level                                              =               2;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =               0;
+  typeOfFirstFixedSurface                            =             103;
+}
+'CLSU.RAF.MOD.XFU' = {
+  discipline                                         =               0;
+  level                                              =              10;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              23;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =             103;
+  typeOfStatisticalProcessing                        =               0;
+}
+'CLSVENT.ZONAL' = {
+  discipline                                         =               0;
+  level                                              =              10;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               2;
+  typeOfFirstFixedSurface                            =             103;
+}
+'CLSVENT.MERIDIEN' = {
+  discipline                                         =               0;
+  level                                              =              10;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =               3;
+  typeOfFirstFixedSurface                            =             103;
+}
+'CLSV.RAF.MOD.XFU' = {
+  discipline                                         =               0;
+  level                                              =              10;
+  parameterCategory                                  =               2;
+  parameterNumber                                    =              24;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =             103;
+  typeOfStatisticalProcessing                        =               0;
+}
+'SOMMFLU.RAY.SOLA' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =               9;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               8;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SOMMFLU.RAY.THER' = {
+  LSTCUM                                             =               1;
+  discipline                                         =               0;
+  parameterCategory                                  =               5;
+  parameterNumber                                    =               5;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               8;
+  typeOfStatisticalProcessing                        =               1;
+}
+'SOMMRAYT.SOLAIRE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =               9;
+  typeOfFirstFixedSurface                            =               8;
+}
+'SOMMRAYT.TERREST' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               5;
+  parameterNumber                                    =               5;
+  typeOfFirstFixedSurface                            =               8;
+}
+'TOPRAYT_DIR_SOM' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               4;
+  parameterNumber                                    =               7;
+  typeOfFirstFixedSurface                            =               8;
+}
+'ATMONEBUL.TOTALE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               1;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'ATMONEBUL.CONVEC' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               2;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'ATMONEBUL.BASSE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               3;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'ATMONEBUL.MOYENN' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               4;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'ATMONEBUL.HAUTE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =               5;
+  productDefinitionTemplateNumber                    =               8;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfStatisticalProcessing                        =               1;
+}
+'CLPMHAUT.MOD.XFU' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              18;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfSecondFixedSurface                           =             255;
+}
+'CLPMOCON.MOD.XFU' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               1;
+  parameterNumber                                    =              26;
+  typeOfFirstFixedSurface                            =               1;
+  typeOfSecondFixedSurface                           =             255;
+}
+'CUF1PRESSURE' = {
+  discipline                                         =               0;
+  level                                              =               1;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               2;
+  typeOfFirstFixedSurface                            =               1;
+}
+'CUF2PRESSURE' = {
+  discipline                                         =               0;
+  level                                              =               2;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               2;
+  typeOfFirstFixedSurface                            =               1;
+}
+'GEOMASK.FPOS' = {
+  discipline                                         =               0;
+  parameterCategory                                  =             191;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'LAT_G_XY' = {
+  discipline                                         =               0;
+  parameterCategory                                  =             191;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'LATGAUSS' = {
+  discipline                                         =               0;
+  parameterCategory                                  =             191;
+  parameterNumber                                    =               1;
+  typeOfFirstFixedSurface                            =               1;
+}
+'LON_G_XY' = {
+  discipline                                         =               0;
+  parameterCategory                                  =             191;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'LONGAUSS' = {
+  discipline                                         =               0;
+  parameterCategory                                  =             191;
+  parameterNumber                                    =               2;
+  typeOfFirstFixedSurface                            =               1;
+}
+'MAP_FACTOR' = {
+  discipline                                         =               0;
+  parameterCategory                                  =             191;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'MESHGAUSS' = {
+  discipline                                         =               0;
+  parameterCategory                                  =             191;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'MSLPRESSURE' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =               1;
+  typeOfFirstFixedSurface                            =             101;
+}
+'RELATEMPERATURE' = {
+  discipline                                         =               2;
+  level                                              =             255;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =              18;
+  typeOfFirstFixedSurface                            =             106;
+}
+'RELAPROP.RMAX.EA' = {
+  discipline                                         =               2;
+  level                                              =             255;
+  parameterCategory                                  =               3;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =             106;
+}
+'SIM_REFLECT.MAX' = {
+  discipline                                         =               0;
+  parameterCategory                                  =              16;
+  parameterNumber                                    =               4;
+  typeOfFirstFixedSurface                            =              10;
+}
+'SUNSHI._DURATION' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               6;
+  parameterNumber                                    =              33;
+  typeOfFirstFixedSurface                            =               1;
+}
+'THETAPWP_FLUX' = {
+  discipline                                         =               0;
+  parameterCategory                                  =               0;
+  parameterNumber                                    =             255;
+  typeOfFirstFixedSurface                            =               1;
+}
+'default' = {
+  discipline                                         =             255;
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+}
diff --git a/definitions/grib2/localConcepts/lfpw/faLevelName.def b/definitions/grib2/localConcepts/lfpw/faLevelName.def
new file mode 100644
index 0000000..b56a6db
--- /dev/null
+++ b/definitions/grib2/localConcepts/lfpw/faLevelName.def
@@ -0,0 +1,63 @@
+'S' = {
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+  scaleFactorOfFirstFixedSurface                     =               0;
+  scaledValueOfFirstFixedSurface                     =               0;
+  typeOfFirstFixedSurface                            =             119;
+  typeOfSecondFixedSurface                           =             255;
+}
+'H' = {
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+  scaleFactorOfFirstFixedSurface                     =               0;
+  scaledValueOfFirstFixedSurface                     =               0;
+  typeOfFirstFixedSurface                            =             103;
+  typeOfSecondFixedSurface                           =             255;
+}
+'P' = {
+  ZLMULT                                             =   1.0000000e-02;
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+  scaleFactorOfFirstFixedSurface                     =               0;
+  scaledValueOfFirstFixedSurface                     =               0;
+  typeOfFirstFixedSurface                            =             100;
+  typeOfSecondFixedSurface                           =             255;
+}
+'V' = {
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+  scaleFactorOfFirstFixedSurface                     =               0;
+  scaledValueOfFirstFixedSurface                     =               0;
+  typeOfFirstFixedSurface                            =             109;
+  typeOfSecondFixedSurface                           =             255;
+}
+'T' = {
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+  scaleFactorOfFirstFixedSurface                     =               0;
+  scaledValueOfFirstFixedSurface                     =               0;
+  typeOfFirstFixedSurface                            =              20;
+  typeOfSecondFixedSurface                           =             255;
+}
+'KT' = {
+  ZLBASE                                             =   1.5000000e-01;
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+  scaleFactorOfFirstFixedSurface                     =               0;
+  scaledValueOfFirstFixedSurface                     =               0;
+  typeOfFirstFixedSurface                            =              20;
+  typeOfSecondFixedSurface                           =             255;
+}
+'KB' = {
+  ZLBASE                                             =   1.5000000e-01;
+  parameterCategory                                  =             255;
+  parameterNumber                                    =             255;
+  scaleFactorOfFirstFixedSurface                     =               0;
+  scaledValueOfFirstFixedSurface                     =               0;
+  typeOfFirstFixedSurface                            =              20;
+  typeOfSecondFixedSurface                           =             255;
+}
+'default' = {
+  typeOfFirstFixedSurface                            =             255;
+  typeOfSecondFixedSurface                           =             255;
+}
diff --git a/definitions/grib2/localConcepts/lfpw/faModelName.def b/definitions/grib2/localConcepts/lfpw/faModelName.def
new file mode 100644
index 0000000..31b9ed0
--- /dev/null
+++ b/definitions/grib2/localConcepts/lfpw/faModelName.def
@@ -0,0 +1,9 @@
+'arpege-france-oper-forecast-production' = { generatingProcessIdentifier = 211; }
+'arpege-france-oper-forecast-assim'      = { generatingProcessIdentifier =  12; }
+'arpege-france-dble-forecast-production' = { generatingProcessIdentifier = 212; }
+'arpege-france-dble-forecast-assim'      = { generatingProcessIdentifier =  22; }
+'arome-france-oper-6'                    = { generatingProcessIdentifier = 204; }
+'arome-france-oper-1'                    = { generatingProcessIdentifier = 213; }
+'arome-france-dble-6'                    = { generatingProcessIdentifier = 209; }
+'arome-france-dble-1'                    = { generatingProcessIdentifier = 210; }
+'default'                                = { generatingProcessIdentifier = 255; }
diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def
index 6e41cdc..d0fed7a 100644
--- a/definitions/grib2/name.def
+++ b/definitions/grib2/name.def
@@ -24,6 +24,17 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	}
+#10 metre wind gust since previous post-processing
+'10 metre wind gust since previous post-processing' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 22 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 is_uerra = 1 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfStatisticalProcessing = 2 ;
+	}
 #Specific rain water content
 'Specific rain water content' = {
 	 discipline = 0 ;
@@ -70,6 +81,28 @@
 	 parameterCategory = 2 ;
 	 parameterNumber = 37 ;
 	}
+#Maximum temperature at 2 metres since previous post-processing
+'Maximum temperature at 2 metres since previous post-processing' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 is_uerra = 1 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfFirstFixedSurface = 103 ;
+	}
+#Minimum temperature at 2 metres since previous post-processing
+'Minimum temperature at 2 metres since previous post-processing' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfStatisticalProcessing = 3 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 is_uerra = 1 ;
+	}
 #Ozone mass mixing ratio
 'Ozone mass mixing ratio' = {
 	 discipline = 0 ;
@@ -88,8 +121,8 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 84 ;
 	}
-#Cloud cover
-'Cloud cover' = {
+#Fraction of cloud cover
+'Fraction of cloud cover' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
 	 parameterNumber = 32 ;
@@ -108,11 +141,30 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 11 ;
 	}
+#Low cloud cover
+'Low cloud cover' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 3 ;
+	}
+#Medium cloud cover
+'Medium cloud cover' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 4 ;
+	}
+#High cloud cover
+'High cloud cover' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 5 ;
+	}
 #10 metre wind gust in the last 3 hours
 '10 metre wind gust in the last 3 hours' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 22 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaledValueOfFirstFixedSurface = 10 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -156,6 +208,24 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 27 ;
 	}
+#Unbalanced component of specific humidity
+'Unbalanced component of specific humidity' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 118 ;
+	}
+#Unbalanced component of specific cloud liquid water content
+'Unbalanced component of specific cloud liquid water content' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 119 ;
+	}
+#Unbalanced component of specific cloud ice water content
+'Unbalanced component of specific cloud ice water content' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 120 ;
+	}
 #Soil moisture top 20 cm
 'Soil moisture top 20 cm' = {
 	 discipline = 2 ;
@@ -400,6 +470,15 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 9 ;
 	}
+#Surface air relative humidity
+'Surface air relative humidity' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 1 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	}
 #Apparent temperature
 'Apparent temperature' = {
 	 discipline = 0 ;
@@ -412,6 +491,129 @@
 	 parameterCategory = 4 ;
 	 parameterNumber = 2 ;
 	}
+#Cloud cover
+'Cloud cover' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 22 ;
+	}
+#Evaporation rate
+'Evaporation rate' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	}
+#Evaporation
+'Evaporation' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#10 metre wind direction
+'10 metre wind direction' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	}
+#Direct short wave radiation flux
+'Direct short wave radiation flux' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	}
+#Diffuse short wave radiation flux
+'Diffuse short wave radiation flux' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 14 ;
+	}
+#Time-integrated surface direct short wave radiation flux
+'Time-integrated surface direct short wave radiation flux' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Soil temperature
+'Soil temperature' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 18 ;
+	}
+#Downward short-wave radiation flux, clear sky
+'Downward short-wave radiation flux, clear sky' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	}
+#Upward short-wave radiation flux, clear sky
+'Upward short-wave radiation flux, clear sky' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	}
+#Downward long-wave radiation flux, clear sky
+'Downward long-wave radiation flux, clear sky' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	}
+#Soil heat flux
+'Soil heat flux' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 26 ;
+	}
+#Percolation rate
+'Percolation rate' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	}
+#Soil depth
+'Soil depth' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 27 ;
+	}
+#Accumulated surface downward short-wave radiation flux, clear sky
+'Accumulated surface downward short-wave radiation flux, clear sky' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Accumulated surface upward short-wave radiation flux, clear sky
+'Accumulated surface upward short-wave radiation flux, clear sky' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Accumulated surface downward long-wave radiation flux, clear sky
+'Accumulated surface downward long-wave radiation flux, clear sky' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Percolation
+'Percolation' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 177 ;
+	}
 #Cloudy brightness temperature
 'Cloudy brightness temperature' = {
          discipline = 3 ;
@@ -544,6 +746,12 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 3 ;
 	}
+#Wind direction
+'Wind direction' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	}
 #Significant height of combined wind waves and swell
 'Significant height of combined wind waves and swell' = {
 	 discipline = 10 ;
@@ -641,6 +849,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 typeOfStatisticalProcessing = 2 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -653,6 +862,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfStatisticalProcessing = 3 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def
index fece21a..b9e3a7f 100644
--- a/definitions/grib2/paramId.def
+++ b/definitions/grib2/paramId.def
@@ -24,6 +24,17 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	}
+#10 metre wind gust since previous post-processing
+'49' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 22 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 is_uerra = 1 ;
+	}
 #Specific rain water content
 '75' = {
 	 discipline = 0 ;
@@ -70,6 +81,28 @@
 	 parameterCategory = 2 ;
 	 parameterNumber = 37 ;
 	}
+#Maximum temperature at 2 metres since previous post-processing
+'201' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 is_uerra = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	}
+#Minimum temperature at 2 metres since previous post-processing
+'202' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 is_uerra = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 typeOfStatisticalProcessing = 3 ;
+	}
 #Ozone mass mixing ratio
 '203' = {
 	 discipline = 0 ;
@@ -88,7 +121,7 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 84 ;
 	}
-#Cloud cover
+#Fraction of cloud cover
 '248' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
@@ -108,11 +141,30 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 11 ;
 	}
+#Low cloud cover
+'3073' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 3 ;
+	}
+#Medium cloud cover
+'3074' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 4 ;
+	}
+#High cloud cover
+'3075' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 5 ;
+	}
 #10 metre wind gust in the last 3 hours
 '228028' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 22 ;
+	 is_uerra = 0 ;
 	 typeOfStatisticalProcessing = 2 ;
 	 lengthOfTimeRange = 3 ;
 	 indicatorOfUnitForTimeRange = 1 ;
@@ -156,6 +208,24 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 27 ;
 	}
+#Unbalanced component of specific humidity
+'228054' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 118 ;
+	}
+#Unbalanced component of specific cloud liquid water content
+'228055' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 119 ;
+	}
+#Unbalanced component of specific cloud ice water content
+'228056' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 120 ;
+	}
 #Soil moisture top 20 cm
 '228086' = {
 	 discipline = 2 ;
@@ -400,6 +470,15 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 9 ;
 	}
+#Surface air relative humidity
+'260242' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	}
 #Apparent temperature
 '260255' = {
 	 discipline = 0 ;
@@ -412,6 +491,129 @@
 	 parameterCategory = 4 ;
 	 parameterNumber = 2 ;
 	}
+#Cloud cover
+'260257' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 22 ;
+	}
+#Evaporation rate
+'260258' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	}
+#Evaporation
+'260259' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
+#10 metre wind direction
+'260260' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	}
+#Direct short wave radiation flux
+'260262' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	}
+#Diffuse short wave radiation flux
+'260263' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 14 ;
+	}
+#Time-integrated surface direct short wave radiation flux
+'260264' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
+#Soil temperature
+'260360' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 18 ;
+	}
+#Downward short-wave radiation flux, clear sky
+'260361' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	}
+#Upward short-wave radiation flux, clear sky
+'260362' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	}
+#Downward long-wave radiation flux, clear sky
+'260363' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	}
+#Soil heat flux
+'260364' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 26 ;
+	}
+#Percolation rate
+'260365' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	}
+#Soil depth
+'260367' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 27 ;
+	}
+#Accumulated surface downward short-wave radiation flux, clear sky
+'260423' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
+#Accumulated surface upward short-wave radiation flux, clear sky
+'260427' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Accumulated surface downward long-wave radiation flux, clear sky
+'260428' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
+#Percolation
+'260430' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	 typeOfFirstFixedSurface = 177 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
 #Cloudy brightness temperature
 '260510' = {
          discipline = 3 ;
@@ -544,6 +746,12 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 3 ;
 	}
+#Wind direction
+'3031' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	}
 #Significant height of combined wind waves and swell
 '140229' = {
 	 discipline = 10 ;
@@ -641,6 +849,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfStatisticalProcessing = 2 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -653,6 +862,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 typeOfStatisticalProcessing = 3 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -2734,11 +2944,11 @@
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 2 ;
-	 scaledValueOfFirstFixedSurface = 0 ;
 	 typeOfSecondFixedSurface = 106 ;
+	 typeOfFirstFixedSurface = 106 ;
+	 scaledValueOfFirstFixedSurface = 0 ;
 	 scaledValueOfSecondFixedSurface = 2 ;
 	 scaleFactorOfSecondFixedSurface = 1 ;
-	 typeOfFirstFixedSurface = 106 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
 	 is_tigge = 1 ;
 	}
diff --git a/definitions/grib2/products_uerra.def b/definitions/grib2/products_uerra.def
index 6ef4f14..8f64a3a 100644
--- a/definitions/grib2/products_uerra.def
+++ b/definitions/grib2/products_uerra.def
@@ -20,23 +20,22 @@ alias parameter.shortName=shortName;
 alias parameter.units=units;
 alias parameter.name=name;
 
-if(levtype is "sfc")
-{
-    unalias mars.levelist;
-}
-
 # Special UERRA rule for level type 103 'Specified height level above ground (m)'
 if(typeOfFirstFixedSurface == 103) {
-    # Exclude the parameters: 10u, 10v and 2t
-    if (paramId != 165 &&
-        paramId != 166 &&
-        paramId != 167)
-    {
+    # only the parameters above 10m
+    if (level > 10) {
         constant heightLevelName = 'hl';
         alias mars.levtype = heightLevelName;
+        # levelist was unaliased in template.4.horizontal.def so we must have it back
+        alias mars.levelist = level;
     }
 }
 
+if(typeOfFirstFixedSurface == 151 && typeOfSecondFixedSurface == 151) {
+    alias level = bottomLevel;
+    alias mars.levelist = level;
+}
+
 alias mars.expver = marsExpver;
 alias mars.class  = marsClass;
 alias mars.param = paramId;
@@ -50,13 +49,14 @@ if (section2Used == 1) {
     unalias mars.domain;                # No mars domain needed
 }
 
+# See GRIB-911 re typeOfProcessedData values in UERRA
 concept marsType {
 
    fc = {
-     typeOfProcessedData = 2;
+     typeOfProcessedData = 1;
    }
    "9" = {
-     typeOfProcessedData = 2;
+     typeOfProcessedData = 1;
    }
 
    an = {
diff --git a/definitions/grib2/section.1.def b/definitions/grib2/section.1.def
index e619bde..544d5e6 100644
--- a/definitions/grib2/section.1.def
+++ b/definitions/grib2/section.1.def
@@ -14,7 +14,7 @@ meta section1Pointer section_pointer(offsetSection1,section1Length,1);
 
 unsigned[1] numberOfSection = 1 :read_only;
 
-codetable[2] centre  'grib1/0.table' : dump,string_type;
+codetable[2] centre  'grib2/centre.table' : dump,string_type;
 alias identificationOfOriginatingGeneratingCentre=centre;
 meta centreDescription codetable_title(centre);
 
@@ -120,3 +120,8 @@ if ( ((section1Length > 21) or setCalendarId > 0) and deleteCalendarId == 0) {
   template calendarIdentification "grib2/template.1.[calendarIdentificationTemplateNumber:l].def";
 }
 
+concept is_uerra(zero) {
+   '1' = {productionStatusOfProcessedData=9;}
+   '1' = {productionStatusOfProcessedData=8;}
+   '0' = {dummy=1;}
+}
diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def
index ec69c11..9a2015a 100644
--- a/definitions/grib2/shortName.def
+++ b/definitions/grib2/shortName.def
@@ -24,6 +24,17 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	}
+#10 metre wind gust since previous post-processing
+'10fg' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 22 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 is_uerra = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	}
 #Specific rain water content
 'crwc' = {
 	 discipline = 0 ;
@@ -70,6 +81,28 @@
 	 parameterCategory = 2 ;
 	 parameterNumber = 37 ;
 	}
+#Maximum temperature at 2 metres since previous post-processing
+'mx2t' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 is_uerra = 1 ;
+	}
+#Minimum temperature at 2 metres since previous post-processing
+'mn2t' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 typeOfStatisticalProcessing = 3 ;
+	 is_uerra = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	}
 #Ozone mass mixing ratio
 'o3' = {
 	 discipline = 0 ;
@@ -88,7 +121,7 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 84 ;
 	}
-#Cloud cover
+#Fraction of cloud cover
 'cc' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
@@ -103,16 +136,35 @@
 	 typeOfStatisticalProcessing = 1 ;
 	}
 #Snow depth
-'sd' = {
+'sde' = {
 	 discipline = 0 ;
 	 parameterCategory = 1 ;
 	 parameterNumber = 11 ;
 	}
+#Low cloud cover
+'lcc' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 3 ;
+	}
+#Medium cloud cover
+'mcc' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 4 ;
+	}
+#High cloud cover
+'hcc' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 5 ;
+	}
 #10 metre wind gust in the last 3 hours
 '10fg3' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 22 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
 	 scaledValueOfFirstFixedSurface = 10 ;
@@ -156,6 +208,24 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 27 ;
 	}
+#Unbalanced component of specific humidity
+'ucq' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 118 ;
+	}
+#Unbalanced component of specific cloud liquid water content
+'ucclwc' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 119 ;
+	}
+#Unbalanced component of specific cloud ice water content
+'ucciwc' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 120 ;
+	}
 #Soil moisture top 20 cm
 'sm20' = {
 	 discipline = 2 ;
@@ -400,6 +470,15 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 9 ;
 	}
+#Surface air relative humidity
+'2r' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 1 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	}
 #Apparent temperature
 'aptmp' = {
 	 discipline = 0 ;
@@ -412,6 +491,129 @@
 	 parameterCategory = 4 ;
 	 parameterNumber = 2 ;
 	}
+#Cloud cover
+'ccl' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 22 ;
+	}
+#Evaporation rate
+'evarate' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	}
+#Evaporation
+'eva' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#10 metre wind direction
+'10wdir' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	}
+#Direct short wave radiation flux
+'dirswrf' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	}
+#Diffuse short wave radiation flux
+'difswrf' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 14 ;
+	}
+#Time-integrated surface direct short wave radiation flux
+'tidirswrf' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Soil temperature
+'sot' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 18 ;
+	}
+#Downward short-wave radiation flux, clear sky
+'dswrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	}
+#Upward short-wave radiation flux, clear sky
+'uswrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	}
+#Downward long-wave radiation flux, clear sky
+'dlwrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	}
+#Soil heat flux
+'sohf' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 26 ;
+	}
+#Percolation rate
+'percr' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	}
+#Soil depth
+'sod' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 27 ;
+	}
+#Accumulated surface downward short-wave radiation flux, clear sky
+'adswrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Accumulated surface upward short-wave radiation flux, clear sky
+'auswrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
+#Accumulated surface downward long-wave radiation flux, clear sky
+'adlwrf_cs' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
+#Percolation
+'perc' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 177 ;
+	}
 #Cloudy brightness temperature
 'clbt' = {
 	 discipline = 3 ;
@@ -544,6 +746,12 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 3 ;
 	}
+#Wind direction
+'wdir' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	}
 #Significant height of combined wind waves and swell
 'swh' = {
 	 discipline = 10 ;
@@ -641,6 +849,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 typeOfStatisticalProcessing = 2 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -653,6 +862,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfStatisticalProcessing = 3 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -2734,11 +2944,11 @@
 	 discipline = 2 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 2 ;
-	 scaledValueOfFirstFixedSurface = 0 ;
 	 typeOfSecondFixedSurface = 106 ;
+	 typeOfFirstFixedSurface = 106 ;
+	 scaledValueOfFirstFixedSurface = 0 ;
 	 scaledValueOfSecondFixedSurface = 2 ;
 	 scaleFactorOfSecondFixedSurface = 1 ;
-	 typeOfFirstFixedSurface = 106 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
 	 is_tigge = 1 ;
 	}
diff --git a/definitions/grib2/tables/1.0.table b/definitions/grib2/tables/1.0.table
index 9d2e109..126d78e 100644
--- a/definitions/grib2/tables/1.0.table
+++ b/definitions/grib2/tables/1.0.table
@@ -16,6 +16,7 @@
 14 14 Version implemented on 5 November 2014
 15 15 Version implemented on 6 May 2015
 16 16 Version implemented on 11 November 2015
-17 17 Pre-operational to be implemented by next amendment
-# 18-254 Future versions 
+17 17 Version implemented on 4 May 2016
+18 18 Pre-operational to be implemented by next amendment
+# 19-254 Future versions 
 255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used.
diff --git a/definitions/grib2/tables/17/0.0.table b/definitions/grib2/tables/17/0.0.table
new file mode 100644
index 0000000..b24c505
--- /dev/null
+++ b/definitions/grib2/tables/17/0.0.table
@@ -0,0 +1,10 @@
+# Code table 0.0 - Discipline of processed data in the GRIB message, number of GRIB Master table
+0 0 Meteorological products 
+1 1 Hydrological products 
+2 2 Land surface products 
+3 3 Space products 
+# 4-9 Reserved 
+10 10 Oceanographic products 
+# 11-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/1.0.table b/definitions/grib2/tables/17/1.0.table
new file mode 100644
index 0000000..d113439
--- /dev/null
+++ b/definitions/grib2/tables/17/1.0.table
@@ -0,0 +1,22 @@
+# Code table 1.0 - GRIB master tables version number
+0 0 Experimental 
+1 1 Version implemented on 7 November 2001 
+2 2 Version implemented on 4 November 2003 
+3 3 Version implemented on 2 November 2005 
+4 4 Version implemented on 7 November 2007 
+5 5 Version implemented on 4 November 2009 
+6 6 Version implemented on 15 September 2010 
+7 7 Version implemented on 4 May 2011 
+8 8 Version implemented on 2 November 2011 
+9 9 Version implemented on 2 May 2012 
+10 10 Version implemented on 7 November 2012 
+11 11 Version implemented on 8 May 2013 
+12 12 Version implemented on 14 November 2013 
+13 13 Version implemented on 7 May 2014 
+14 14 Version implemented on 5 November 2014 
+15 15 Version implemented on 6 May 2015 
+16 16 Version implemented on 11 November 2015 
+17 17 Version implemented on 4 May 2016
+18 18 Pre-operational to be implemented by next amendment
+# 19-254 Future versions 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/1.1.table b/definitions/grib2/tables/17/1.1.table
new file mode 100644
index 0000000..d50f8fd
--- /dev/null
+++ b/definitions/grib2/tables/17/1.1.table
@@ -0,0 +1,4 @@
+# Code table 1.1 - GRIB local tables version number
+0 0 Local tables not used. Only table entries and templates from the current master table are valid 
+# 1-254 Number of local tables version used 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/1.2.table b/definitions/grib2/tables/17/1.2.table
new file mode 100644
index 0000000..934b704
--- /dev/null
+++ b/definitions/grib2/tables/17/1.2.table
@@ -0,0 +1,8 @@
+# Code table 1.2 - Significance of reference time
+0 0 Analysis 
+1 1 Start of forecast 
+2 2 Verifying time of forecast 
+3 3 Observation time 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/1.3.table b/definitions/grib2/tables/17/1.3.table
new file mode 100644
index 0000000..0c95269
--- /dev/null
+++ b/definitions/grib2/tables/17/1.3.table
@@ -0,0 +1,14 @@
+# Code table 1.3 - Production status of data
+0 0 Operational products 
+1 1 Operational test products 
+2 2 Research products 
+3 3 Re-analysis products 
+4 4 THORPEX Interactive Grand Global Ensemble (TIGGE) 
+5 5 THORPEX Interactive Grand Global Ensemble test (TIGGE)
+6 6 S2S operational products 
+7 7 S2S test products 
+8 8 Uncertainties in Ensembles of Regional ReAnalyses project (UERRA)
+9 9 Uncertainties in Ensembles of Regional ReAnalyses project test (UERRA)
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/1.4.table b/definitions/grib2/tables/17/1.4.table
new file mode 100644
index 0000000..03203d8
--- /dev/null
+++ b/definitions/grib2/tables/17/1.4.table
@@ -0,0 +1,13 @@
+# Code table 1.4 - Type of data
+0 an Analysis products 
+1 fc Forecast products 
+2 af Analysis and forecast products 
+3 cf Control forecast products 
+4 pf Perturbed forecast products 
+5 cp Control and perturbed forecast products 
+6 sa Processed satellite observations 
+7 ra Processed radar observations 
+8 ep Event probability 
+# 9-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/17/1.5.table b/definitions/grib2/tables/17/1.5.table
new file mode 100644
index 0000000..b2cf9f0
--- /dev/null
+++ b/definitions/grib2/tables/17/1.5.table
@@ -0,0 +1,7 @@
+# Code table 1.5 - Identification template number
+0 0 Calendar definition 
+1 1 Paleontological offset 
+2 2 Calendar definition and paleontological offset 
+# 3-32767 Reserved 
+# 32768-65534 Reserved for local use 
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/17/1.6.table b/definitions/grib2/tables/17/1.6.table
new file mode 100644
index 0000000..5db9219
--- /dev/null
+++ b/definitions/grib2/tables/17/1.6.table
@@ -0,0 +1,8 @@
+# Code table 1.6 - Type of calendar
+0 0 Gregorian 
+1 1 360-day 
+2 2 365-day 
+3 3 Proleptic Gregorian 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/3.0.table b/definitions/grib2/tables/17/3.0.table
new file mode 100644
index 0000000..45187b8
--- /dev/null
+++ b/definitions/grib2/tables/17/3.0.table
@@ -0,0 +1,6 @@
+# Code table 3.0 - Source of grid definition
+0 0 Specified in Code table 3.1 
+1 1 Predetermined grid definition (Defined by originating centre)
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 A grid definition does not apply to this product 
diff --git a/definitions/grib2/tables/17/3.1.table b/definitions/grib2/tables/17/3.1.table
new file mode 100644
index 0000000..aa8d987
--- /dev/null
+++ b/definitions/grib2/tables/17/3.1.table
@@ -0,0 +1,47 @@
+# Code table 3.1 - Grid definition template number
+0 0 Latitude/longitude (Also called equidistant cylindrical, or Plate Carree)
+1 1 Rotated latitude/longitude
+2 2 Stretched latitude/longitude
+3 3 Stretched and rotated latitude/longitude
+4 4 Variable resolution latitude/longitude 
+5 5 Variable resolution rotated latitude/longitude 
+# 6-9 Reserved
+10 10 Mercator
+12 12 Transverse Mercator
+# 13-19 Reserved
+20 20 Polar stereographic projection (Can be south or north)
+# 21-29 Reserved 
+30 30 Lambert conformal (Can be secant or tangent, conical or bipolar)
+31 31 Albers equal area 
+# 32-39 Reserved 
+40 40 Gaussian latitude/longitude 
+41 41 Rotated Gaussian latitude/longitude 
+42 42 Stretched Gaussian latitude/longitude 
+43 43 Stretched and rotated Gaussian latitude/longitude 
+# 44-49 Reserved 
+50 50 Spherical harmonic coefficients 
+51 51 Rotated spherical harmonic coefficients 
+52 52 Stretched spherical harmonic coefficients 
+53 53 Stretched and rotated spherical harmonic coefficients 
+# 54-89 Reserved 
+90 90 Space view perspective or orthographic 
+# 91-99 Reserved 
+100 100 Triangular grid based on an icosahedron 
+101 101 General unstructured grid 
+# 102-109 Reserved 
+110 110 Equatorial azimuthal equidistant projection 
+# 111-119 Reserved 
+120 120 Azimuth-range projection 
+# 121-129 Reserved
+130 130 Irregular latitude/longitude grid
+# 131-139 Reserved
+140 140 Lambert azimuthal equal area projection 
+# 141-999 Reserved 
+1000 1000 Cross-section grid with points equally spaced on the horizontal 
+# 1001-1099 Reserved 
+1100 1100 Hovmoller diagram grid with points equally spaced on the horizontal 
+# 1101-1199 Reserved 
+1200 1200 Time section grid 
+# 1201-32767 Reserved 
+# 32768-65534 Reserved for local use 
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/17/3.10.table b/definitions/grib2/tables/17/3.10.table
new file mode 100644
index 0000000..afa8843
--- /dev/null
+++ b/definitions/grib2/tables/17/3.10.table
@@ -0,0 +1,8 @@
+# Flag table 3.10 - Scanning mode for one diamond
+1 0 Points scan in +i direction, i.e. from pole to Equator 
+1 1 Points scan in -i direction, i.e. from Equator to pole 
+2 0 Points scan in +j direction, i.e. from west to east 
+2 1 Points scan in -j direction, i.e. from east to west 
+3 0 Adjacent points in i direction are consecutive 
+3 1 Adjacent points in j direction are consecutive 
+# 4-8 Reserved 
diff --git a/definitions/grib2/tables/17/3.11.table b/definitions/grib2/tables/17/3.11.table
new file mode 100644
index 0000000..e516a2a
--- /dev/null
+++ b/definitions/grib2/tables/17/3.11.table
@@ -0,0 +1,7 @@
+# Code table 3.11 - Interpretation of list of numbers at end of section 3
+0 0 There is no appended list 
+1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows 
+2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row 
+3 3 Numbers define the actual latitudes for each row in the grid. The list of numbers are integer values of the valid latitudes in microdegrees (scaled by 10-6) or in unit equal to the ratio of the basic angle and the subdivisions number for each row, in the same order as specified in the scanning mode flag (bit no. 2) 
+# 4-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/3.15.table b/definitions/grib2/tables/17/3.15.table
new file mode 100644
index 0000000..331217e
--- /dev/null
+++ b/definitions/grib2/tables/17/3.15.table
@@ -0,0 +1,23 @@
+# Code table 3.15 - Physical meaning of vertical coordinate
+# 0-19 Reserved 
+20 20 Temperature (K)
+# 21-99 Reserved 
+100 100 Pressure (Pa)
+101 101 Pressure deviation from mean sea level (Pa)
+102 102 Altitude above mean sea level (m)
+103 103 Height above ground (m)
+104 104 Sigma coordinate 
+105 105 Hybrid coordinate 
+106 106 Depth below land surface (m)
+107 pt Potential temperature (theta) (K)
+108 108 Pressure deviation from ground to level (Pa)
+109 pv Potential vorticity (K m-2 kg-1 s-1)
+110 110 Geometrical height (m)
+111 111 Eta coordinate 
+112 112 Geopotential height (gpm)
+113 113 Logarithmic hybrid coordinate 
+# 114-159 Reserved 
+160 160 Depth below sea level (m)
+# 161-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/3.2.table b/definitions/grib2/tables/17/3.2.table
new file mode 100644
index 0000000..9238dc2
--- /dev/null
+++ b/definitions/grib2/tables/17/3.2.table
@@ -0,0 +1,14 @@
+# Code table 3.2 - Shape of the Earth
+0 0 Earth assumed spherical with radius = 6 367 470.0 m 
+1 1 Earth assumed spherical with radius specified (in m) by data producer 
+2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6 378 160.0 m, minor axis = 6 356 775.0 m, f = 1/297.0) 
+3 3 Earth assumed oblate spheroid with major and minor axes specified (in km) by data producer 
+4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6 378 137.0 m, minor axis = 6 356 752.314 m, f = 1/298.257 222 101) 
+5 5 Earth assumed represented by WGS84 (as used by ICAO since 1998) 
+6 6 Earth assumed spherical with radius of 6 371 229.0 m 
+7 7 Earth assumed oblate spheroid with major or minor axes specified (in m) by data producer 
+8 8 Earth model assumed spherical with radius of 6 371 200 m, but the horizontal datum of the resulting latitude/longitude field is the WGS84 reference frame 
+9 9 Earth represented by the Ordnance Survey Great Britain 1936 Datum, using the Airy 1830 Spheroid, the Greenwich meridian as 0 longitude, and the Newlyn datum as mean sea level, 0 height 
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/3.20.table b/definitions/grib2/tables/17/3.20.table
new file mode 100644
index 0000000..efbf08d
--- /dev/null
+++ b/definitions/grib2/tables/17/3.20.table
@@ -0,0 +1,6 @@
+# Code table 3.20 - Type of horizontal line
+0 0 Rhumb 
+1 1 Great circle 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/3.21.table b/definitions/grib2/tables/17/3.21.table
new file mode 100644
index 0000000..88dbb90
--- /dev/null
+++ b/definitions/grib2/tables/17/3.21.table
@@ -0,0 +1,8 @@
+# Code table 3.21 - Vertical dimension coordinate values definition
+0 0 Explicit coordinate values set 
+1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 
+# 2-10 Reserved 
+11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/3.3.table b/definitions/grib2/tables/17/3.3.table
new file mode 100644
index 0000000..5dd7c70
--- /dev/null
+++ b/definitions/grib2/tables/17/3.3.table
@@ -0,0 +1,9 @@
+# Flag table 3.3 - Resolution and component flags
+# 1-2 Reserved 
+3 0 i direction increments not given 
+3 1 i direction increments given 
+4 0 j direction increments not given 
+4 1 j direction increments given 
+5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions 
+5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates, respectively 
+# 6-8 Reserved - set to zero 
diff --git a/definitions/grib2/tables/17/3.4.table b/definitions/grib2/tables/17/3.4.table
new file mode 100644
index 0000000..897b813
--- /dev/null
+++ b/definitions/grib2/tables/17/3.4.table
@@ -0,0 +1,17 @@
+# Flag table 3.4 - Scanning mode
+1 0 Points of first row or column scan in the +i (+x) direction 
+1 1 Points of first row or column scan in the -i (-x) direction 
+2 0 Points of first row or column scan in the -j (-y) direction 
+2 1 Points of first row or column scan in the +j (+y) direction 
+3 0 Adjacent points in i (x) direction are consecutive 
+3 1 Adjacent points in j (y) direction is consecutive 
+4 0 All rows scan in the same direction 
+4 1 Adjacent rows scans in the opposite direction 
+5 0 Points within odd rows are not offset in i (x) direction 
+5 1 Points within odd rows are offset by Di/2 in i (x) direction 
+6 0 Points within even rows are not offset in i (x) direction 
+6 1 Points within even rows are offset by Di/2 in i (x) direction 
+7 0 Points are not offset in j (y) direction 
+7 1 Points are offset by Dj/2 in j (y) direction 
+8 0 Rows have Ni grid points and columns have Nj grid points 
+8 1 Rows have Ni grid points if points are not offset in i direction  Rows have Ni-1 grid points if points are offset by Di/2 in i direction  Columns have Nj grid points if points are not offset in j direction  Columns have Nj-1 grid points if points are offset by Dj/2 in j direction 
diff --git a/definitions/grib2/tables/17/3.5.table b/definitions/grib2/tables/17/3.5.table
new file mode 100644
index 0000000..eabdde8
--- /dev/null
+++ b/definitions/grib2/tables/17/3.5.table
@@ -0,0 +1,5 @@
+# Flag table 3.5 - Projection centre
+1 0 North Pole is on the projection plane 
+1 1 South Pole is on the projection plane 
+2 0 Only one projection centre is used 
+2 1 Projection is bipolar and symmetric 
diff --git a/definitions/grib2/tables/17/3.6.table b/definitions/grib2/tables/17/3.6.table
new file mode 100644
index 0000000..d381959
--- /dev/null
+++ b/definitions/grib2/tables/17/3.6.table
@@ -0,0 +1,2 @@
+# Code table 3.6 - Spectral data representation type
+1 1 see separate doc or pdf file
diff --git a/definitions/grib2/tables/17/3.7.table b/definitions/grib2/tables/17/3.7.table
new file mode 100644
index 0000000..0a7d6ef
--- /dev/null
+++ b/definitions/grib2/tables/17/3.7.table
@@ -0,0 +1,5 @@
+# Code table 3.7 - Spectral data representation mode
+0 0 Reserved 
+1 1 see separate doc or pdf file
+# 2-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/3.8.table b/definitions/grib2/tables/17/3.8.table
new file mode 100644
index 0000000..844e742
--- /dev/null
+++ b/definitions/grib2/tables/17/3.8.table
@@ -0,0 +1,7 @@
+# Code table 3.8 - Grid point position
+0 0 Grid points at triangle vertices 
+1 1 Grid points at centres of triangles 
+2 2 Grid points at midpoints of triangle sides 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/3.9.table b/definitions/grib2/tables/17/3.9.table
new file mode 100644
index 0000000..fd730bc
--- /dev/null
+++ b/definitions/grib2/tables/17/3.9.table
@@ -0,0 +1,4 @@
+# Flag table 3.9 - Numbering order of diamonds as seen from the corresponding pole
+1 0 Clockwise orientation 
+1 1 Anti-clockwise (i.e. counter-clockwise) orientation 
+# 2-8 Reserved 
diff --git a/definitions/grib2/tables/17/4.0.table b/definitions/grib2/tables/17/4.0.table
new file mode 100644
index 0000000..802eca6
--- /dev/null
+++ b/definitions/grib2/tables/17/4.0.table
@@ -0,0 +1,65 @@
+# Code table 4.0 - Product definition template number
+0 0 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time 
+1 1 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time 
+2 2 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer at a point in time 
+3 3 Derived forecasts based on a cluster of ensemble members over a rectangular area at a horizontal level or in a horizontal layer at a point in time 
+4 4 Derived forecasts based on a cluster of ensemble members over a circular area at a horizontal level or in a horizontal layer at a point in time 
+5 5 Probability forecasts at a horizontal level or in a horizontal layer at a point in time 
+6 6 Percentile forecasts at a horizontal level or in a horizontal layer at a point in time 
+7 7 Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time 
+8 8 Average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+9 9 Probability forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+10 10 Percentile forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+11 11 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
+12 12 Derived forecasts based on all ensemble members at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
+13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
+14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
+15 15 Average, accumulation, extreme values, or other statistically processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time 
+# 16-19 Reserved 
+20 20 Radar product 
+# 21-29 Reserved 
+30 30 Satellite product (deprecated) 
+31 31 Satellite product 
+32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data 
+33 33 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data 
+34 34 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data 
+# 35-39 Reserved 
+311 311 Satellite product auxiliary information
+40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents 
+41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents 
+42 42 Average, accumulation and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents 
+43 43 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents 
+44 44 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for aerosol 
+45 45 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for aerosol 
+46 46 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol 
+47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol
+48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol 
+# 49-50 Reserved 
+51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time 
+52 52 Reserved 
+53 53 Partitioned parameters at a horizontal level or in a horizontal layer at a point in time 
+54 54 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for partitioned parameters 
+55 55 Spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time 
+56 56 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters 
+57 57 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function 
+# 58-59 Reserved 
+60 60 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time 
+61 61 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval 
+# 62-90 Reserved 
+91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+# 92-253 Reserved 
+254 254 CCITT IA5 character string 
+# 255-999 Reserved 
+1000 1000 Cross-section of analysis and forecast at a point in time 
+1001 1001 Cross-section of averaged or otherwise statistically processed analysis or forecast over a range of time 
+1002 1002 Cross-section of analysis and forecast, averaged or otherwise statistically processed over latitude or longitude 
+# 1003-1099 Reserved 
+1100 1100 Hovmoller-type grid with no averaging or other statistical processing 
+1101 1101 Hovmoller-type grid with averaging or other statistical processing 
+50001 50001 Forecasting Systems with Variable Resolution in a point in time
+50011 50011 Forecasting Systems with Variable Resolution in a continous or non countinous time interval
+# 1102-32767 Reserved 
+# 32768-65534 Reserved for local use 
+40033 40033 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data
+40034 40034 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/17/4.1.0.table b/definitions/grib2/tables/17/4.1.0.table
new file mode 100644
index 0000000..04cfd78
--- /dev/null
+++ b/definitions/grib2/tables/17/4.1.0.table
@@ -0,0 +1,27 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Temperature 
+1 1 Moisture 
+2 2 Momentum 
+3 3 Mass 
+4 4 Short-wave radiation 
+5 5 Long-wave radiation 
+6 6 Cloud 
+7 7 Thermodynamic stability indices 
+8 8 Kinematic stability indices 
+9 9 Temperature probabilities 
+10 10 Moisture probabilities 
+11 11 Momentum probabilities 
+12 12 Mass probabilities 
+13 13 Aerosols 
+14 14 Trace gases (e.g. ozone, CO2) 
+15 15 Radar 
+16 16 Forecast radar imagery 
+17 17 Electrodynamics 
+18 18 Nuclear/radiology 
+19 19 Physical atmospheric properties 
+20 20 Atmospheric chemical constituents 
+# 21-189 Reserved 
+190 190 CCITT IA5 string 
+191 191 Miscellaneous 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.1.1.table b/definitions/grib2/tables/17/4.1.1.table
new file mode 100644
index 0000000..7b22b6f
--- /dev/null
+++ b/definitions/grib2/tables/17/4.1.1.table
@@ -0,0 +1,7 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Hydrology basic products 
+1 1 Hydrology probabilities 
+2 2 Inland water and sediment properties 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.1.10.table b/definitions/grib2/tables/17/4.1.10.table
new file mode 100644
index 0000000..a9b20eb
--- /dev/null
+++ b/definitions/grib2/tables/17/4.1.10.table
@@ -0,0 +1,10 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Waves 
+1 1 Currents 
+2 2 Ice 
+3 3 Surface properties 
+4 4 Subsurface properties 
+# 5-190 Reserved 
+191 191 Miscellaneous 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.1.192.table b/definitions/grib2/tables/17/4.1.192.table
new file mode 100644
index 0000000..c428aca
--- /dev/null
+++ b/definitions/grib2/tables/17/4.1.192.table
@@ -0,0 +1,4 @@
+#Discipline 192: ECMWF local parameters
+255 255 Missing
+
+
diff --git a/definitions/grib2/tables/17/4.1.2.table b/definitions/grib2/tables/17/4.1.2.table
new file mode 100644
index 0000000..5b488fe
--- /dev/null
+++ b/definitions/grib2/tables/17/4.1.2.table
@@ -0,0 +1,9 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Vegetation/biomass 
+1 1 Agri-/aquacultural special products 
+2 2 Transportation-related products 
+3 3 Soil products 
+4 4 Fire weather products 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.1.3.table b/definitions/grib2/tables/17/4.1.3.table
new file mode 100644
index 0000000..7bf60d4
--- /dev/null
+++ b/definitions/grib2/tables/17/4.1.3.table
@@ -0,0 +1,11 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Image format products 
+1 1 Quantitative products 
+2 2 Cloud properties 
+3 3 Flight rule conditions 
+4 4 Volcanic ash 
+5 5 Sea-surface temperature 
+6 6 Solar radiation 
+# 7-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.10.table b/definitions/grib2/tables/17/4.10.table
new file mode 100644
index 0000000..1a92baa
--- /dev/null
+++ b/definitions/grib2/tables/17/4.10.table
@@ -0,0 +1,16 @@
+# Code table 4.10 - Type of statistical processing
+0 avg Average 
+1 accum Accumulation 
+2 max Maximum 
+3 min Minimum 
+4 diff Difference (value at the end of time range minus value at the beginning) 
+5 rms Root mean square 
+6 sd Standard deviation 
+7 cov Covariance (temporal variance) 
+8 8 Difference (value at the start of time range minus value at the end) 
+9 ratio Ratio 
+10 10 Standardized anomaly 
+11 11 Summation 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/17/4.11.table b/definitions/grib2/tables/17/4.11.table
new file mode 100644
index 0000000..7f404c8
--- /dev/null
+++ b/definitions/grib2/tables/17/4.11.table
@@ -0,0 +1,10 @@
+# Code table 4.11 - Type of time intervals
+0 0 Reserved 
+1 1 Successive times processed have same forecast time, start time of forecast is incremented 
+2 2 Successive times processed have same start time of forecast, forecast time is incremented 
+3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant 
+4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant 
+5 5 Floating subinterval of time between forecast time and end of overall time interval 
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.12.table b/definitions/grib2/tables/17/4.12.table
new file mode 100644
index 0000000..03fd89b
--- /dev/null
+++ b/definitions/grib2/tables/17/4.12.table
@@ -0,0 +1,7 @@
+# Code table 4.12 - Operating mode
+0 0 Maintenance mode 
+1 1 Clear air 
+2 2 Precipitation 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.13.table b/definitions/grib2/tables/17/4.13.table
new file mode 100644
index 0000000..c92854e
--- /dev/null
+++ b/definitions/grib2/tables/17/4.13.table
@@ -0,0 +1,6 @@
+# Code table 4.13 - Quality control indicator
+0 0 No quality control applied 
+1 1 Quality control applied 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.14.table b/definitions/grib2/tables/17/4.14.table
new file mode 100644
index 0000000..a88cb93
--- /dev/null
+++ b/definitions/grib2/tables/17/4.14.table
@@ -0,0 +1,6 @@
+# Code table 4.14 - Clutter filter indicator
+0 0 No clutter filter used 
+1 1 Clutter filter used 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.15.table b/definitions/grib2/tables/17/4.15.table
new file mode 100644
index 0000000..2e5f3de
--- /dev/null
+++ b/definitions/grib2/tables/17/4.15.table
@@ -0,0 +1,11 @@
+# Code table 4.15 - Type of spatial processing used to arrive at given data value from the source data
+0 0 Data is calculated directly from the source grid with no interpolation 
+1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point 
+4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+# 7-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.192.table b/definitions/grib2/tables/17/4.192.table
new file mode 100644
index 0000000..e1fd915
--- /dev/null
+++ b/definitions/grib2/tables/17/4.192.table
@@ -0,0 +1,4 @@
+1 1 first
+2 2 second
+3 3 third
+4 4 fourth
diff --git a/definitions/grib2/tables/17/4.2.0.0.table b/definitions/grib2/tables/17/4.2.0.0.table
new file mode 100644
index 0000000..f24b883
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.0.table
@@ -0,0 +1,32 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Temperature (K)
+1 1 Virtual temperature (K)
+2 2 Potential temperature (K)
+3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K)
+4 4 Maximum temperature (K)
+5 5 Minimum temperature (K)
+6 6 Dewpoint temperature (K)
+7 7 Dewpoint depression (or deficit) (K)
+8 8 Lapse rate (K/m)
+9 9 Temperature anomaly (K)
+10 10 Latent heat net flux (W m-2)
+11 11 Sensible heat net flux (W m-2)
+12 12 Heat index (K)
+13 13 Wind chill factor (K)
+14 14 Minimum dewpoint depression (K)
+15 15 Virtual potential temperature (K)
+16 16 Snow phase change heat flux (W m-2)
+17 17 Skin temperature (K)
+18 18 Snow temperature (top of snow) (K)
+19 19 Turbulent transfer coefficient for heat (Numeric)
+20 20 Turbulent diffusion coefficient for heat (m2/s)
+21 21 Apparent temperature (K)
+22 22 Temperature tendency due to short-wave radiation (K s-1)
+23 23 Temperature tendency due to long-wave radiation (K s-1)
+24 24 Temperature tendency due to short-wave radiation, clear sky (K s-1)
+25 25 Temperature tendency due to long-wave radiation, clear sky (K s-1)
+26 26 Temperature tendency due to parameterization (K s-1)
+27 27 Wet-bulb temperature (K)
+# 28-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.1.table b/definitions/grib2/tables/17/4.2.0.1.table
new file mode 100644
index 0000000..490297d
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.1.table
@@ -0,0 +1,120 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Specific humidity (kg/kg)
+1 1 Relative humidity (%)
+2 2 Humidity mixing ratio (kg/kg)
+3 3 Precipitable water (kg m-2)
+4 4 Vapour pressure (Pa)
+5 5 Saturation deficit (Pa)
+6 6 Evaporation (kg m-2)
+7 7 Precipitation rate (kg m-2 s-1)
+8 8 Total precipitation (kg m-2)
+9 9 Large-scale precipitation (non-convective) (kg m-2)
+10 10 Convective precipitation (kg m-2)
+11 11 Snow depth (m)
+12 12 Snowfall rate water equivalent (kg m-2 s-1)
+13 13 Water equivalent of accumulated snow depth (kg m-2)
+14 14 Convective snow (kg m-2)
+15 15 Large-scale snow (kg m-2)
+16 16 Snow melt (kg m-2)
+17 17 Snow age (d)
+18 18 Absolute humidity (kg m-3)
+19 19 Precipitation type ((Code table 4.201))
+20 20 Integrated liquid water (kg m-2)
+21 21 Condensate (kg/kg)
+22 22 Cloud mixing ratio (kg/kg)
+23 23 Ice water mixing ratio (kg/kg)
+24 24 Rain mixing ratio (kg/kg)
+25 25 Snow mixing ratio (kg/kg)
+26 26 Horizontal moisture convergence (kg kg-1 s-1)
+27 27 Maximum relative humidity (%)
+28 28 Maximum absolute humidity (kg m-3)
+29 29 Total snowfall (m)
+30 30 Precipitable water category ((Code table 4.202))
+31 31 Hail (m)
+32 32 Graupel (snow pellets) (kg/kg)
+33 33 Categorical rain ((Code table 4.222))
+34 34 Categorical freezing rain ((Code table 4.222))
+35 35 Categorical ice pellets ((Code table 4.222))
+36 36 Categorical snow ((Code table 4.222))
+37 37 Convective precipitation rate (kg m-2 s-1)
+38 38 Horizontal moisture divergence (kg kg-1 s-1)
+39 39 Per cent frozen precipitation (%)
+40 40 Potential evaporation (kg m-2)
+41 41 Potential evaporation rate (W m-2)
+42 42 Snow cover (%)
+43 43 Rain fraction of total cloud water (Proportion)
+44 44 Rime factor (Numeric)
+45 45 Total column integrated rain (kg m-2)
+46 46 Total column integrated snow (kg m-2)
+47 47 Large scale water precipitation (non-convective) (kg m-2)
+48 48 Convective water precipitation (kg m-2)
+49 49 Total water precipitation (kg m-2)
+50 50 Total snow precipitation (kg m-2)
+51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2)
+52 52 Total precipitation rate (kg m-2 s-1)
+53 53 Total snowfall rate water equivalent (kg m-2 s-1)
+54 54 Large scale precipitation rate (kg m-2 s-1)
+55 55 Convective snowfall rate water equivalent (kg m-2 s-1)
+56 56 Large scale snowfall rate water equivalent (kg m-2 s-1)
+57 57 Total snowfall rate (m/s)
+58 58 Convective snowfall rate (m/s)
+59 59 Large scale snowfall rate (m/s)
+60 60 Snow depth water equivalent (kg m-2)
+61 61 Snow density (kg m-3)
+62 62 Snow evaporation (kg m-2)
+63 63 Reserved 
+64 64 Total column integrated water vapour (kg m-2)
+65 65 Rain precipitation rate (kg m-2 s-1)
+66 66 Snow precipitation rate (kg m-2 s-1)
+67 67 Freezing rain precipitation rate (kg m-2 s-1)
+68 68 Ice pellets precipitation rate (kg m-2 s-1)
+69 69 Total column integrated cloud water (kg m-2)
+70 70 Total column integrated cloud ice (kg m-2)
+71 71 Hail mixing ratio (kg/kg)
+72 72 Total column integrated hail (kg m-2)
+73 73 Hail precipitation rate (kg m-2 s-1)
+74 74 Total column integrated graupel (kg m-2)
+75 75 Graupel (snow pellets) precipitation rate (kg m-2 s-1)
+76 76 Convective rain rate (kg m-2 s-1)
+77 77 Large scale rain rate (kg m-2 s-1)
+78 78 Total column integrated water (all components including precipitation) (kg m-2)
+79 79 Evaporation rate (kg m-2 s-1)
+80 80 Total condensate (kg/kg)
+81 81 Total column-integrated condensate (kg m-2)
+82 82 Cloud ice mixing-ratio (kg/kg)
+83 83 Specific cloud liquid water content (kg/kg)
+84 84 Specific cloud ice water content (kg/kg)
+85 85 Specific rainwater content (kg/kg)
+86 86 Specific snow water content (kg/kg)
+# 87-89 Reserved 
+90 90 Total kinematic moisture flux (kg kg-1 m s-1)
+91 91 u-component (zonal) kinematic moisture flux (kg kg-1 m s-1)
+92 92 v-component (meridional) kinematic moisture flux (kg kg-1 m s-1)
+93 93 Relative humidity with respect to water (%)
+94 94 Relative humidity with respect to ice (%)
+95 95 Freezing or frozen precipitation rate (kg m-2 s-1)
+96 96 Mass density of rain (kg m-3)
+97 97 Mass density of snow (kg m-3)
+98 98 Mass density of graupel (kg m-3)
+99 99 Mass density of hail (kg m-3)
+100 100 Specific number concentration of rain (kg-1)
+101 101 Specific number concentration of snow (kg-1)
+102 102 Specific number concentration of graupel (kg-1)
+103 103 Specific number concentration of hail (kg-1)
+104 104 Number density of rain (m-3)
+105 105 Number density of snow (m-3)
+106 106 Number density of graupel (m-3)
+107 107 Number density of hail (m-3)
+108 108 Specific humidity tendency due to parameterization (kg kg-1 s-1)
+109 109 Mass density of liquid water coating on hail expressed as mass of liquid water per unit volume of air (kg m-3)
+110 110 Specific mass of liquid water coating on hail expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+111 111 Mass mixing ratio of liquid water coating on hail expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+112 112 Mass density of liquid water coating on graupel expressed as mass of liquid water per unit volume of air (kg m-3)
+113 113 Specific mass of liquid water coating on graupel expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+114 114 Mass mixing ratio of liquid water coating on graupel expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+115 115 Mass density of liquid water coating on snow expressed as mass of liquid water per unit volume of air (kg m-3)
+116 116 Specific mass of liquid water coating on snow expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+117 117 Mass mixing ratio of liquid water coating on snow expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+# 118-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.13.table b/definitions/grib2/tables/17/4.2.0.13.table
new file mode 100644
index 0000000..e9feb09
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.13.table
@@ -0,0 +1,5 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Aerosol type ((Code table 4.205))
+# 1-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.14.table b/definitions/grib2/tables/17/4.2.0.14.table
new file mode 100644
index 0000000..2158847
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.14.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Total ozone (DU)
+1 1 Ozone mixing ratio (kg/kg)
+2 2 Total column integrated ozone (DU)
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.15.table b/definitions/grib2/tables/17/4.2.0.15.table
new file mode 100644
index 0000000..dfbc4d1
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.15.table
@@ -0,0 +1,21 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Base spectrum width (m/s)
+1 1 Base reflectivity (dB)
+2 2 Base radial velocity (m/s)
+3 3 Vertically integrated liquid water (VIL) (kg m-2)
+4 4 Layer-maximum base reflectivity (dB)
+5 5 Precipitation (kg m-2)
+6 6 Radar spectra (1) (-)
+7 7 Radar spectra (2) (-)
+8 8 Radar spectra (3) (-)
+9 9 Reflectivity of cloud droplets (dB)
+10 10 Reflectivity of cloud ice (dB)
+11 11 Reflectivity of snow (dB)
+12 12 Reflectivity of rain (dB)
+13 13 Reflectivity of graupel (dB)
+14 14 Reflectivity of hail (dB)
+15 15 Hybrid scan reflectivity (dB)
+16 16 Hybrid scan reflectivity height (m)
+# 17-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.16.table b/definitions/grib2/tables/17/4.2.0.16.table
new file mode 100644
index 0000000..0c240a8
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.16.table
@@ -0,0 +1,10 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Equivalent radar reflectivity factor for rain (mm6 m-3)
+1 1 Equivalent radar reflectivity factor for snow (mm6 m-3)
+2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3)
+3 3 Echo top (m)
+4 4 Reflectivity (dB)
+5 5 Composite reflectivity (dB)
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.17.table b/definitions/grib2/tables/17/4.2.0.17.table
new file mode 100644
index 0000000..a679963
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.17.table
@@ -0,0 +1,3 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Lightning strike density (m-2 s-1)
+1 1 Lightning potential index (LPI) (J kg-1)
diff --git a/definitions/grib2/tables/17/4.2.0.18.table b/definitions/grib2/tables/17/4.2.0.18.table
new file mode 100644
index 0000000..9ae3539
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.18.table
@@ -0,0 +1,21 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Air concentration of caesium 137 (Bq m-3)
+1 1 Air concentration of iodine 131 (Bq m-3)
+2 2 Air concentration of radioactive pollutant (Bq m-3)
+3 3 Ground deposition of caesium 137 (Bq m-2)
+4 4 Ground deposition of iodine 131 (Bq m-2)
+5 5 Ground deposition of radioactive pollutant (Bq m-2)
+6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3)
+7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3)
+8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3)
+9 9 Reserved 
+10 10 Air concentration (Bq m-3)
+11 11 Wet deposition (Bq m-2)
+12 12 Dry deposition (Bq m-2)
+13 13 Total deposition (wet + dry) (Bq m-2)
+14 14 Specific activity concentration (Bq kg-1)
+15 15 Maximum of air concentration in layer (Bq m-3)
+16 16 Height of maximum air concentration (m)
+# 17-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.19.table b/definitions/grib2/tables/17/4.2.0.19.table
new file mode 100644
index 0000000..d2a4338
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.19.table
@@ -0,0 +1,36 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Visibility (m)
+1 1 Albedo (%)
+2 2 Thunderstorm probability (%)
+3 3 Mixed layer depth (m)
+4 4 Volcanic ash ((Code table 4.206))
+5 5 Icing top (m)
+6 6 Icing base (m)
+7 7 Icing ((Code table 4.207))
+8 8 Turbulence top (m)
+9 9 Turbulence base (m)
+10 10 Turbulence ((Code table 4.208))
+11 11 Turbulent kinetic energy (J/kg)
+12 12 Planetary boundary-layer regime ((Code table 4.209))
+13 13 Contrail intensity ((Code table 4.210))
+14 14 Contrail engine type ((Code table 4.211))
+15 15 Contrail top (m)
+16 16 Contrail base (m)
+17 17 Maximum snow albedo (%)
+18 18 Snow free albedo (%)
+19 19 Snow albedo (%)
+20 20 Icing (%)
+21 21 In-cloud turbulence (%)
+22 22 Clear air turbulence (CAT) (%)
+23 23 Supercooled large droplet probability (%)
+24 24 Convective turbulent kinetic energy (J/kg)
+25 25 Weather ((Code table 4.225))
+26 26 Convective outlook ((Code table 4.224))
+27 27 Icing scenario ((Code table 4.227))
+28 28 Mountain wave turbulence (eddy dissipation rate) (m2/3 s-1)
+29 29 Clear air turbulence (CAT) (m2/3 s-1)
+30 30 Eddy dissipation parameter (m2/3 s-1)
+31 31 Maximum of Eddy dissipation parameter in layer (m2/3 s-1)
+# 32-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.190.table b/definitions/grib2/tables/17/4.2.0.190.table
new file mode 100644
index 0000000..de621a9
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.190.table
@@ -0,0 +1,5 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Arbitrary text string (CCITT IA5)
+# 1-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.191.table b/definitions/grib2/tables/17/4.2.0.191.table
new file mode 100644
index 0000000..e3bba0e
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.191.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Seconds prior to initial reference time (defined in Section 1) (s)
+1 1 Geographical latitude (deg N)
+2 2 Geographical longitude (deg E)
+3 3 Days since last observation (d)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.2.table b/definitions/grib2/tables/17/4.2.0.2.table
new file mode 100644
index 0000000..8ebc751
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.2.table
@@ -0,0 +1,49 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Wind direction (from which blowing) (degree true)
+1 1 Wind speed (m/s)
+2 2 u-component of wind (m/s)
+3 3 v-component of wind (m/s)
+4 4 Stream function (m2/s)
+5 5 Velocity potential (m2/s)
+6 6 Montgomery stream function (m2 s-2)
+7 7 Sigma coordinate vertical velocity (/s)
+8 8 Vertical velocity (pressure) (Pa/s)
+9 9 Vertical velocity (geometric) (m/s)
+10 10 Absolute vorticity (/s)
+11 11 Absolute divergence (/s)
+12 12 Relative vorticity (/s)
+13 13 Relative divergence (/s)
+14 14 Potential vorticity (K m2 kg-1 s-1)
+15 15 Vertical u-component shear (/s)
+16 16 Vertical v-component shear (/s)
+17 17 Momentum flux, u-component (N m-2)
+18 18 Momentum flux, v-component (N m-2)
+19 19 Wind mixing energy (J)
+20 20 Boundary layer dissipation (W m-2)
+21 21 Maximum wind speed (m/s)
+22 22 Wind speed (gust) (m/s)
+23 23 u-component of wind (gust) (m/s)
+24 24 v-component of wind (gust) (m/s)
+25 25 Vertical speed shear (/s)
+26 26 Horizontal momentum flux (N m-2)
+27 27 u-component storm motion (m/s)
+28 28 v-component storm motion (m/s)
+29 29 Drag coefficient (Numeric)
+30 30 Frictional velocity (m/s)
+31 31 Turbulent diffusion coefficient for momentum (m2/s)
+32 32 Eta coordinate vertical velocity (/s)
+33 33 Wind fetch (m)
+34 34 Normal wind component (m/s)
+35 35 Tangential wind component (m/s)
+36 36 Amplitude function for Rossby wave envelope for meridional wind (m/s)
+37 37 Northward turbulent surface stress (N m-2 s)
+38 38 Eastward turbulent surface stress (N m-2 s)
+39 39 Eastward wind tendency due to parameterization (m s-2)
+40 40 Northward wind tendency due to parameterization (m s-2)
+41 41 u-component of geostrophic wind (m s-1)
+42 42 v-component of geostrophic wind (m s-1)
+43 43 Geostrophic wind direction (degree true)
+44 44 Geostrophic wind speed (m s-1)
+# 45-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.20.table b/definitions/grib2/tables/17/4.2.0.20.table
new file mode 100644
index 0000000..983539b
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.20.table
@@ -0,0 +1,46 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Mass density (concentration) (kg m-3)
+1 1 Column-integrated mass density (kg m-2)
+2 2 Mass mixing ratio (mass fraction in air) (kg/kg)
+3 3 Atmosphere emission mass flux (kg m-2 s-1)
+4 4 Atmosphere net production mass flux (kg m-2 s-1)
+5 5 Atmosphere net production and emission mass flux (kg m-2 s-1)
+6 6 Surface dry deposition mass flux (kg m-2 s-1)
+7 7 Surface wet deposition mass flux (kg m-2 s-1)
+8 8 Atmosphere re-emission mass flux (kg m-2 s-1)
+9 9 Wet deposition by large-scale precipitation mass flux (kg m-2 s-1)
+10 10 Wet deposition by convective precipitation mass flux (kg m-2 s-1)
+11 11 Sedimentation mass flux (kg m-2 s-1)
+12 12 Dry deposition mass flux (kg m-2 s-1)
+13 13 Transfer from hydrophobic to hydrophilic (kg kg-1 s-1)
+14 14 Transfer from SO2 (sulphur dioxide) to SO4 (sulphate) (kg kg-1 s-1)
+# 15-49 Reserved 
+50 50 Amount in atmosphere (mol)
+51 51 Concentration in air (mol m-3)
+52 52 Volume mixing ratio (fraction in air) (mol/mol)
+53 53 Chemical gross production rate of concentration (mol m-3 s-1)
+54 54 Chemical gross destruction rate of concentration (mol m-3 s-1)
+55 55 Surface flux (mol m-2 s-1)
+56 56 Changes of amount in atmosphere (mol/s)
+57 57 Total yearly average burden of the atmosphere (mol)
+58 58 Total yearly averaged atmospheric loss (mol/s)
+59 59 Aerosol number concentration (m-3)
+60 60 Aerosol specific number concentration (kg-1)
+61 61 Maximum of mass density in layer (kg m-3)
+62 62 Height of maximum mass density (m)
+# 63-99 Reserved 
+100 100 Surface area density (aerosol) (/m)
+101 101 Vertical visual range (m)
+102 102 Aerosol optical thickness (Numeric)
+103 103 Single scattering albedo (Numeric)
+104 104 Asymmetry factor (Numeric)
+105 105 Aerosol extinction coefficient (/m)
+106 106 Aerosol absorption coefficient (/m)
+107 107 Aerosol lidar backscatter from satellite (m-1 sr-1)
+108 108 Aerosol lidar backscatter from the ground (m-1 sr-1)
+109 109 Aerosol lidar extinction from satellite (/m)
+110 110 Aerosol lidar extinction from the ground (/m)
+111 111 Angstrom exponent (Numeric)
+# 112-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.3.table b/definitions/grib2/tables/17/4.2.0.3.table
new file mode 100644
index 0000000..c7c6359
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.3.table
@@ -0,0 +1,35 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Pressure (Pa)
+1 1 Pressure reduced to MSL (Pa)
+2 2 Pressure tendency (Pa/s)
+3 3 ICAO Standard Atmosphere Reference Height (m)
+4 4 Geopotential (m2 s-2)
+5 5 Geopotential height (gpm)
+6 6 Geometric height (m)
+7 7 Standard deviation of height (m)
+8 8 Pressure anomaly (Pa)
+9 9 Geopotential height anomaly (gpm)
+10 10 Density (kg m-3)
+11 11 Altimeter setting (Pa)
+12 12 Thickness (m)
+13 13 Pressure altitude (m)
+14 14 Density altitude (m)
+15 15 5-wave geopotential height (gpm)
+16 16 Zonal flux of gravity wave stress (N m-2)
+17 17 Meridional flux of gravity wave stress (N m-2)
+18 18 Planetary boundary layer height (m)
+19 19 5-wave geopotential height anomaly (gpm)
+20 20 Standard deviation of sub-grid scale orography (m)
+21 21 Angle of sub-gridscale orography (rad)
+22 22 Slope of sub-gridscale orography (Numeric)
+23 23 Gravity wave dissipation (W m-2)
+24 24 Anisotropy of sub-gridscale orography (Numeric)
+25 25 Natural logarithm of pressure in Pa (Numeric)
+26 26 Exner pressure (Numeric)
+27 27 Updraught mass flux (kg m-2 s-1)
+28 28 Downdraught mass flux (kg m-2 s-1)
+29 29 Updraught detrainment rate (kg m-3 s-1)
+30 30 Downdraught detrainment rate (kg m-3 s-1)
+# 31-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.4.table b/definitions/grib2/tables/17/4.2.0.4.table
new file mode 100644
index 0000000..0a5ded2
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.4.table
@@ -0,0 +1,24 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Net short-wave radiation flux (surface) (W m-2)
+1 1 Net short-wave radiation flux (top of atmosphere) (W m-2)
+2 2 Short-wave radiation flux (W m-2)
+3 3 Global radiation flux (W m-2)
+4 4 Brightness temperature (K)
+5 5 Radiance (with respect to wave number) (W m-1 sr-1)
+6 6 Radiance (with respect to wavelength) (W m-3 sr-1)
+7 7 Downward short-wave radiation flux (W m-2)
+8 8 Upward short-wave radiation flux (W m-2)
+9 9 Net short wave radiation flux (W m-2)
+10 10 Photosynthetically active radiation (W m-2)
+11 11 Net short-wave radiation flux, clear sky (W m-2)
+12 12 Downward UV radiation (W m-2)
+13 13 Direct short-wave radiation flux (W m-2)
+14 14 Diffuse short-wave radiation flux (W m-2)
+# 15-49 Reserved 
+50 50 UV index (under clear sky) (Numeric)
+51 51 UV index (Numeric)
+52 52 Downward short-wave radiation flux, clear sky (W m-2)
+53 53 Upward short-wave radiation flux, clear sky (W m-2)
+# 54-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.5.table b/definitions/grib2/tables/17/4.2.0.5.table
new file mode 100644
index 0000000..4550220
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.5.table
@@ -0,0 +1,13 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Net long-wave radiation flux (surface) (W m-2)
+1 1 Net long-wave radiation flux (top of atmosphere) (W m-2)
+2 2 Long-wave radiation flux (W m-2)
+3 3 Downward long-wave radiation flux (W m-2)
+4 4 Upward long-wave radiation flux (W m-2)
+5 5 Net long-wave radiation flux (W m-2)
+6 6 Net long-wave radiation flux, clear sky (W m-2)
+7 7 Brightness temperature (K)
+8 8 Downward long-wave radiation flux, clear sky (W m-2)
+# 9-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.6.table b/definitions/grib2/tables/17/4.2.0.6.table
new file mode 100644
index 0000000..1483d8c
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.6.table
@@ -0,0 +1,49 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Cloud ice (kg m-2)
+1 1 Total cloud cover (%)
+2 2 Convective cloud cover (%)
+3 3 Low cloud cover (%)
+4 4 Medium cloud cover (%)
+5 5 High cloud cover (%)
+6 6 Cloud water (kg m-2)
+7 7 Cloud amount (%)
+8 8 Cloud type ((Code table 4.203))
+9 9 Thunderstorm maximum tops (m)
+10 10 Thunderstorm coverage ((Code table 4.204))
+11 11 Cloud base (m)
+12 12 Cloud top (m)
+13 13 Ceiling (m)
+14 14 Non-convective cloud cover (%)
+15 15 Cloud work function (J/kg)
+16 16 Convective cloud efficiency (Proportion)
+17 17 Total condensate (kg/kg)
+18 18 Total column-integrated cloud water (kg m-2)
+19 19 Total column-integrated cloud ice (kg m-2)
+20 20 Total column-integrated condensate (kg m-2)
+21 21 Ice fraction of total condensate (Proportion)
+22 22 Cloud cover (%)
+23 23 Cloud ice mixing ratio (kg/kg)
+24 24 Sunshine (Numeric)
+25 25 Horizontal extent of cumulonimbus (CB) (%)
+26 26 Height of convective cloud base (m)
+27 27 Height of convective cloud top (m)
+28 28 Number of cloud droplets per unit mass of air (/kg)
+29 29 Number of cloud ice particles per unit mass of air (/kg)
+30 30 Number density of cloud droplets (m-3)
+31 31 Number density of cloud ice particles (m-3)
+32 32 Fraction of cloud cover (Numeric)
+33 33 Sunshine duration (s)
+34 34 Surface long-wave effective total cloudiness (Numeric)
+35 35 Surface short-wave effective total cloudiness (Numeric)
+36 36 Fraction of stratiform precipitation cover (Proportion)
+37 37 Fraction of convective precipitation cover (Proportion)
+38 38 Mass density of cloud droplets (kg m-3)
+39 39 Mass density of cloud ice (kg m-3)
+40 40 Mass density of convective cloud water droplets (kg m-3)
+# 41-46 Reserved 
+47 47 Volume fraction of cloud water droplets (Numeric)
+48 48 Volume fraction of cloud ice particles (Numeric)
+49 49 Volume fraction of cloud (ice and/or water) (Numeric)
+# 50-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.0.7.table b/definitions/grib2/tables/17/4.2.0.7.table
new file mode 100644
index 0000000..6d0d87a
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.0.7.table
@@ -0,0 +1,23 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Parcel lifted index (to 500 hPa) (K)
+1 1 Best lifted index (to 500 hPa) (K)
+2 2 K index (K)
+3 3 KO index (K)
+4 4 Total totals index (K)
+5 5 Sweat index (Numeric)
+6 6 Convective available potential energy (J/kg)
+7 7 Convective inhibition (J/kg)
+8 8 Storm relative helicity (J/kg)
+9 9 Energy helicity index (Numeric)
+10 10 Surface lifted index (K)
+11 11 Best (4-layer) lifted index (K)
+12 12 Richardson number (Numeric)
+13 13 Showalter index (K)
+14 14 Reserved 
+15 15 Updraught helicity (m2 s-2)
+16 16 Bulk Richardson number (Numeric)
+17 17 Gradient Richardson number (Numeric)
+18 18 Flux Richardson number (Numeric)
+# 19-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.1.0.table b/definitions/grib2/tables/17/4.2.1.0.table
new file mode 100644
index 0000000..e906af7
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.1.0.table
@@ -0,0 +1,21 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2)
+1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2)
+2 2 Remotely-sensed snow cover ((Code table 4.215))
+3 3 Elevation of snow-covered terrain ((Code table 4.216))
+4 4 Snow water equivalent per cent of normal (%)
+5 5 Baseflow-groundwater runoff (kg m-2)
+6 6 Storm surface runoff (kg m-2)
+7 7 Discharge from rivers or streams (m3/s)
+8 8 Groundwater upper storage (kg m-2)
+9 9 Groundwater lower storage (kg m-2)
+10 10 Side flow into river channel (m3 s-1 m-1)
+11 11 River storage of water (m3)
+12 12 Floodplain storage of water (m3)
+13 13 Depth of water on soil surface (kg m-2)
+14 14 Upstream accumulated precipitation (kg m-2)
+15 15 Upstream accumulated snow melt (kg m-2)
+16 16 Percolation rate (kg m-2 s-1)
+# 17-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.1.1.table b/definitions/grib2/tables/17/4.2.1.1.table
new file mode 100644
index 0000000..b488eb0
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.1.1.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Conditional per cent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2)
+1 1 Per cent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%)
+2 2 Probability of 0.01 inch of precipitation (POP) (%)
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.1.2.table b/definitions/grib2/tables/17/4.2.1.2.table
new file mode 100644
index 0000000..ec9b11d
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.1.2.table
@@ -0,0 +1,15 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Water depth (m)
+1 1 Water temperature (K)
+2 2 Water fraction (Proportion)
+3 3 Sediment thickness (m)
+4 4 Sediment temperature (K)
+5 5 Ice thickness (m)
+6 6 Ice temperature (K)
+7 7 Ice cover (Proportion)
+8 8 Land cover (0 = water, 1 = land) (Proportion)
+9 9 Shape factor with respect to salinity profile (-)
+10 10 Shape factor with respect to temperature profile in thermocline (-)
+11 11 Attenuation coefficient of water with respect to solar radiation (/m)
+12 12 Salinity (kg/kg)
+13 13 Cross-sectional area of flow in channel (m2)
diff --git a/definitions/grib2/tables/17/4.2.10.0.table b/definitions/grib2/tables/17/4.2.10.0.table
new file mode 100644
index 0000000..095f51b
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.10.0.table
@@ -0,0 +1,50 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Wave spectra (1) (-)
+1 1 Wave spectra (2) (-)
+2 2 Wave spectra (3) (-)
+3 3 Significant height of combined wind waves and swell (m)
+4 4 Direction of wind waves (degree true)
+5 5 Significant height of wind waves (m)
+6 6 Mean period of wind waves (s)
+7 7 Direction of swell waves (degree true)
+8 8 Significant height of swell waves (m)
+9 9 Mean period of swell waves (s)
+10 10 Primary wave direction (degree true)
+11 11 Primary wave mean period (s)
+12 12 Secondary wave direction (degree true)
+13 13 Secondary wave mean period (s)
+14 14 Direction of combined wind waves and swell (degree true)
+15 15 Mean period of combined wind waves and swell (s)
+16 16 Coefficient of drag with waves (-)
+17 17 Friction velocity (m/s)
+18 18 Wave stress (N m-2)
+19 19 Normalized wave stress (-)
+20 20 Mean square slope of waves (-)
+21 21 u-component surface Stokes drift (m/s)
+22 22 v-component surface Stokes drift (m/s)
+23 23 Period of maximum individual wave height (s)
+24 24 Maximum individual wave height (m)
+25 25 Inverse mean wave frequency (s)
+26 26 Inverse mean frequency of wind waves (s)
+27 27 Inverse mean frequency of total swell (s)
+28 28 Mean zero-crossing wave period (s)
+29 29 Mean zero-crossing period of wind waves (s)
+30 30 Mean zero-crossing period of total swell (s)
+31 31 Wave directional width (-)
+32 32 Directional width of wind waves (-)
+33 33 Directional width of total swell (-)
+34 34 Peak wave period (s)
+35 35 Peak period of wind waves (s)
+36 36 Peak period of total swell (s)
+37 37 Altimeter wave height (m)
+38 38 Altimeter corrected wave height (m)
+39 39 Altimeter range relative correction (-)
+40 40 10-metre neutral wind speed over waves (m/s)
+41 41 10-metre wind direction over waves (deg)
+42 42 Wave energy spectrum (m2 s rad-1)
+43 43 Kurtosis of the sea-surface elevation due to waves (-)
+44 44 Benjamin-Feir index (-)
+45 45 Spectral peakedness factor (/s)
+# 46-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.10.1.table b/definitions/grib2/tables/17/4.2.10.1.table
new file mode 100644
index 0000000..5959bfa
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.10.1.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Current direction (degree true)
+1 1 Current speed (m/s)
+2 2 u-component of current (m/s)
+3 3 v-component of current (m/s)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.10.191.table b/definitions/grib2/tables/17/4.2.10.191.table
new file mode 100644
index 0000000..524929e
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.10.191.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Seconds prior to initial reference time (defined in Section 1) (s)
+1 1 Meridional overturning stream function (m3/s)
+2 2 Reserved 
+3 3 Days since last observation (d)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.10.2.table b/definitions/grib2/tables/17/4.2.10.2.table
new file mode 100644
index 0000000..6797062
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.10.2.table
@@ -0,0 +1,17 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Ice cover (Proportion)
+1 1 Ice thickness (m)
+2 2 Direction of ice drift (degree true)
+3 3 Speed of ice drift (m/s)
+4 4 u-component of ice drift (m/s)
+5 5 v-component of ice drift (m/s)
+6 6 Ice growth rate (m/s)
+7 7 Ice divergence (/s)
+8 8 Ice temperature (K)
+9 9 Module of ice internal pressure (Pa m)
+10 10 Zonal vector component of vertically integrated ice internal pressure (Pa m)
+11 11 Meridional vector component of vertically integrated ice internal pressure (Pa m)
+12 12 Compressive ice strength (N/m)
+# 13-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.10.3.table b/definitions/grib2/tables/17/4.2.10.3.table
new file mode 100644
index 0000000..f951bbe
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.10.3.table
@@ -0,0 +1,6 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Water temperature (K)
+1 1 Deviation of sea level from mean (m)
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.10.4.table b/definitions/grib2/tables/17/4.2.10.4.table
new file mode 100644
index 0000000..54774f1
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.10.4.table
@@ -0,0 +1,18 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Main thermocline depth (m)
+1 1 Main thermocline anomaly (m)
+2 2 Transient thermocline depth (m)
+3 3 Salinity (kg/kg)
+4 4 Ocean vertical heat diffusivity (m2/s)
+5 5 Ocean vertical salt diffusivity (m2/s)
+6 6 Ocean vertical momentum diffusivity (m2/s)
+7 7 Bathymetry (m)
+# 8-10 Reserved 
+11 11 Shape factor with respect to salinity profile (-)
+12 12 Shape factor with respect to temperature profile in thermocline (-)
+13 13 Attenuation coefficient of water with respect to solar radiation (/m)
+14 14 Water depth (m)
+15 15 Water temperature (K)
+# 16-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.2.0.table b/definitions/grib2/tables/17/4.2.2.0.table
new file mode 100644
index 0000000..f11616d
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.2.0.table
@@ -0,0 +1,43 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Land cover (0 = sea, 1 = land) (Proportion)
+1 1 Surface roughness (m)
+2 2 Soil temperature (K)
+3 3 Soil moisture content (kg m-2)
+4 4 Vegetation (%)
+5 5 Water runoff (kg m-2)
+6 6 Evapotranspiration (kg-2 s-1)
+7 7 Model terrain height (m)
+8 8 Land use ((Code table 4.212))
+9 9 Volumetric soil moisture content (Proportion)
+10 10 Ground heat flux (W m-2)
+11 11 Moisture availability (%)
+12 12 Exchange coefficient (kg m-2 s-1)
+13 13 Plant canopy surface water (kg m-2)
+14 14 Blackadar's mixing length scale (m)
+15 15 Canopy conductance (m/s)
+16 16 Minimal stomatal resistance (s/m)
+17 17 Wilting point (Proportion)
+18 18 Solar parameter in canopy conductance (Proportion)
+19 19 Temperature parameter in canopy (Proportion)
+20 20 Humidity parameter in canopy conductance (Proportion)
+21 21 Soil moisture parameter in canopy conductance (Proportion)
+22 22 Soil moisture (kg m-3)
+23 23 Column-integrated soil water (kg m-2)
+24 24 Heat flux (W m-2)
+25 25 Volumetric soil moisture (m3 m-3)
+26 26 Wilting point (kg m-3)
+27 27 Volumetric wilting point (m3 m-3)
+28 28 Leaf area index (Numeric)
+29 29 Evergreen forest cover (Proportion)
+30 30 Deciduous forest cover (Proportion)
+31 31 Normalized differential vegetation index (NDVI) (Numeric)
+32 32 Root depth of vegetation (m)
+33 33 Water runoff and drainage (kg m-2)
+34 34 Surface water runoff (kg m-2)
+35 35 Tile class (Code table 4.243)
+36 36 Tile fraction (Proportion)
+37 37 Tile percentage (%)
+38 38 Soil volumetric ice content (water equivalent) (m3 m-3)
+# 39-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.2.3.table b/definitions/grib2/tables/17/4.2.2.3.table
new file mode 100644
index 0000000..447e4f9
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.2.3.table
@@ -0,0 +1,32 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Soil type ((Code table 4.213))
+1 1 Upper layer soil temperature (K)
+2 2 Upper layer soil moisture (kg m-3)
+3 3 Lower layer soil moisture (kg m-3)
+4 4 Bottom layer soil temperature (K)
+5 5 Liquid volumetric soil moisture (non-frozen) (Proportion)
+6 6 Number of soil layers in root zone (Numeric)
+7 7 Transpiration stress-onset (soil moisture) (Proportion)
+8 8 Direct evaporation cease (soil moisture) (Proportion)
+9 9 Soil porosity (Proportion)
+10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3)
+11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3)
+12 12 Transpiration stress-onset (soil moisture) (kg m-3)
+13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3)
+14 14 Direct evaporation cease (soil moisture) (kg m-3)
+15 15 Soil porosity (m3 m-3)
+16 16 Volumetric saturation of soil moisture (m3 m-3)
+17 17 Saturation of soil moisture (kg m-3)
+18 18 Soil temperature (K)
+19 19 Soil moisture (kg m-3)
+20 20 Column-integrated soil moisture (kg m-2)
+21 21 Soil ice (kg m-3)
+22 22 Column-integrated soil ice (kg m-2)
+23 23 Liquid water in snow pack (kg m-2)
+24 24 Frost index (K day-1)
+25 25 Snow depth at elevation bands (kg m-2)
+26 26 Soil heat flux (W m-2)
+27 27 Soil depth (m)
+# 28-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.2.4.table b/definitions/grib2/tables/17/4.2.2.4.table
new file mode 100644
index 0000000..bb54fac
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.2.4.table
@@ -0,0 +1,16 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Fire outlook (Code table 4.224)
+1 1 Fire outlook due to dry thunderstorm (Code table 4.224)
+2 2 Haines index (Numeric)
+3 3 Fire burned area (%)
+4 4 Fosberg index (Numeric)
+5 5 Forest Fire Weather Index (Canadian Forest Service) (Numeric)
+6 6 Fine Fuel Moisture Code (Canadian Forest Service) (Numeric)
+7 7 Duff Moisture Code (Canadian Forest Service) (Numeric)
+8 8 Drought Code (Canadian Forest Service) (Numeric)
+9 9 Initial Fire Spread Index (Canadian Forest Service) (Numeric)
+10 10 Fire Buildup Index (Canadian Forest Service) (Numeric)
+11 11 Fire Daily Severity Rating (Canadian Forest Service) (Numeric)
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.2.5.table b/definitions/grib2/tables/17/4.2.2.5.table
new file mode 100644
index 0000000..10fb689
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.2.5.table
@@ -0,0 +1,2 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+1 1 Glacier temperature (K)
diff --git a/definitions/grib2/tables/17/4.2.3.0.table b/definitions/grib2/tables/17/4.2.3.0.table
new file mode 100644
index 0000000..c0ffa29
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.3.0.table
@@ -0,0 +1,14 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Scaled radiance (Numeric)
+1 1 Scaled albedo (Numeric)
+2 2 Scaled brightness temperature (Numeric)
+3 3 Scaled precipitable water (Numeric)
+4 4 Scaled lifted index (Numeric)
+5 5 Scaled cloud top pressure (Numeric)
+6 6 Scaled skin temperature (Numeric)
+7 7 Cloud mask (Code table 4.217)
+8 8 Pixel scene type (Code table 4.218)
+9 9 Fire detection indicator (Code table 4.223)
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.3.1.table b/definitions/grib2/tables/17/4.2.3.1.table
new file mode 100644
index 0000000..8e0793f
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.3.1.table
@@ -0,0 +1,32 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Estimated precipitation (kg m-2)
+1 1 Instantaneous rain rate (kg m-2 s-1)
+2 2 Cloud top height (m)
+3 3 Cloud top height quality indicator (Code table 4.219)
+4 4 Estimated u-component of wind (m/s)
+5 5 Estimated v-component of wind (m/s)
+6 6 Number of pixel used (Numeric)
+7 7 Solar zenith angle (deg)
+8 8 Relative azimuth angle (deg)
+9 9 Reflectance in 0.6 micron channel (%)
+10 10 Reflectance in 0.8 micron channel (%)
+11 11 Reflectance in 1.6 micron channel (%)
+12 12 Reflectance in 3.9 micron channel (%)
+13 13 Atmospheric divergence (/s)
+14 14 Cloudy brightness temperature (K)
+15 15 Clear-sky brightness temperature (K)
+16 16 Cloudy radiance (with respect to wave number) (W m-1 sr-1)
+17 17 Clear-sky radiance (with respect to wave number) (W m-1 sr-1)
+18 18 Reserved 
+19 19 Wind speed (m/s)
+20 20 Aerosol optical thickness at 0.635 um
+21 21 Aerosol optical thickness at 0.810 um
+22 22 Aerosol optical thickness at 1.640 um
+23 23 Angstrom coefficient 
+# 24-26 Reserved 
+27 27 Bidirectional reflectance factor (Numeric)
+28 28 Brightness temperature (K)
+29 29 Scaled radiance (Numeric)
+# 30-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.2.3.2.table b/definitions/grib2/tables/17/4.2.3.2.table
new file mode 100644
index 0000000..191f352
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.3.2.table
@@ -0,0 +1,13 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Clear sky probability (%)
+1 1 Cloud top temperature (K)
+2 2 Cloud top pressure (Pa)
+3 3 Cloud type (Code table 4.218)
+4 4 Cloud phase (Code table 4.218)
+5 5 Cloud optical depth (Numeric)
+6 6 Cloud particle effective radius (m)
+7 7 Cloud liquid water path (kg m-2)
+8 8 Cloud ice water path (kg m-2)
+9 9 Cloud albedo (Numeric)
+10 10 Cloud emissivity (Numeric)
+11 11 Effective absorption optical depth ratio (Numeric)
diff --git a/definitions/grib2/tables/17/4.2.3.3.table b/definitions/grib2/tables/17/4.2.3.3.table
new file mode 100644
index 0000000..cb5c4b6
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.3.3.table
@@ -0,0 +1,4 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Probability of encountering marginal visual flight rule conditions (%)
+1 1 Probability of encountering low instrument flight rule conditions (%)
+2 2 Probability of encountering instrument flight rule conditions (%)
diff --git a/definitions/grib2/tables/17/4.2.3.4.table b/definitions/grib2/tables/17/4.2.3.4.table
new file mode 100644
index 0000000..f86d2d6
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.3.4.table
@@ -0,0 +1,10 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Volcanic ash probability (%)
+1 1 Volcanic ash cloud top temperature (K)
+2 2 Volcanic ash cloud top pressure (Pa)
+3 3 Volcanic ash cloud top height (m)
+4 4 Volcanic ash cloud emissivity (Numeric)
+5 5 Volcanic ash effective absorption optical depth ratio (Numeric)
+6 6 Volcanic ash cloud optical depth (Numeric)
+7 7 Volcanic ash column density (kg m-2)
+8 8 Volcanic ash particle effective radius (m)
diff --git a/definitions/grib2/tables/17/4.2.3.5.table b/definitions/grib2/tables/17/4.2.3.5.table
new file mode 100644
index 0000000..92a050d
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.3.5.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Interface sea-surface temperature (K)
+1 1 Skin sea-surface temperature (K)
+2 2 Sub-skin sea-surface temperature (K)
+3 3 Foundation sea-surface temperature (K)
+4 4 Estimated bias between sea-surface temperature and standard (K)
+5 5 Estimated standard deviation between sea surface temperature and standard (K)
diff --git a/definitions/grib2/tables/17/4.2.3.6.table b/definitions/grib2/tables/17/4.2.3.6.table
new file mode 100644
index 0000000..471beed
--- /dev/null
+++ b/definitions/grib2/tables/17/4.2.3.6.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Global solar irradiance (W m-2)
+1 1 Global solar exposure (J m-2)
+2 2 Direct solar irradiance (W m-2)
+3 3 Direct solar exposure (J m-2)
+4 4 Diffuse solar irradiance (W m-2)
+5 5 Diffuse solar exposure (J m-2)
diff --git a/definitions/grib2/tables/17/4.201.table b/definitions/grib2/tables/17/4.201.table
new file mode 100644
index 0000000..47f1b48
--- /dev/null
+++ b/definitions/grib2/tables/17/4.201.table
@@ -0,0 +1,15 @@
+# Code table 4.201 - Precipitation type
+0 0 Reserved 
+1 1 Rain 
+2 2 Thunderstorm 
+3 3 Freezing rain 
+4 4 Mixed/ice 
+5 5 Snow 
+6 6 Wet snow 
+7 7 Mixture of rain and snow 
+8 8 Ice pellets 
+9 9 Graupel 
+10 10 Hail 
+# 11-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.202.table b/definitions/grib2/tables/17/4.202.table
new file mode 100644
index 0000000..438502f
--- /dev/null
+++ b/definitions/grib2/tables/17/4.202.table
@@ -0,0 +1,4 @@
+# Code table 4.202 - Precipitable water category
+# 0-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.203.table b/definitions/grib2/tables/17/4.203.table
new file mode 100644
index 0000000..8a9aedf
--- /dev/null
+++ b/definitions/grib2/tables/17/4.203.table
@@ -0,0 +1,26 @@
+# Code table 4.203 - Cloud type
+0 0 Clear 
+1 1 Cumulonimbus 
+2 2 Stratus 
+3 3 Stratocumulus 
+4 4 Cumulus 
+5 5 Altostratus 
+6 6 Nimbostratus 
+7 7 Altocumulus 
+8 8 Cirrostratus 
+9 9 Cirrocumulus 
+10 10 Cirrus 
+11 11 Cumulonimbus - ground-based fog beneath the lowest layer 
+12 12 Stratus - ground-based fog beneath the lowest layer 
+13 13 Stratocumulus - ground-based fog beneath the lowest layer 
+14 14 Cumulus - ground-based fog beneath the lowest layer 
+15 15 Altostratus - ground-based fog beneath the lowest layer 
+16 16 Nimbostratus - ground-based fog beneath the lowest layer 
+17 17 Altocumulus - ground-based fog beneath the lowest layer 
+18 18 Cirrostratus - ground-based fog beneath the lowest layer 
+19 19 Cirrocumulus - ground-based fog beneath the lowest layer 
+20 20 Cirrus - ground-based fog beneath the lowest layer 
+# 21-190 Reserved 
+191 191 Unknown 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.204.table b/definitions/grib2/tables/17/4.204.table
new file mode 100644
index 0000000..4813729
--- /dev/null
+++ b/definitions/grib2/tables/17/4.204.table
@@ -0,0 +1,9 @@
+# Code table 4.204 - Thunderstorm coverage
+0 0 None 
+1 1 Isolated (1-2%) 
+2 2 Few (3-5%) 
+3 3 Scattered (6-45%) 
+4 4 Numerous (> 45%) 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.205.table b/definitions/grib2/tables/17/4.205.table
new file mode 100644
index 0000000..5b4484d
--- /dev/null
+++ b/definitions/grib2/tables/17/4.205.table
@@ -0,0 +1,6 @@
+# Code table 4.205 - Presence of aerosol
+0 0 Aerosol not present 
+1 1 Aerosol present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.206.table b/definitions/grib2/tables/17/4.206.table
new file mode 100644
index 0000000..02c3dfd
--- /dev/null
+++ b/definitions/grib2/tables/17/4.206.table
@@ -0,0 +1,6 @@
+# Code table 4.206 - Volcanic ash
+0 0 Not present 
+1 1 Present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.207.table b/definitions/grib2/tables/17/4.207.table
new file mode 100644
index 0000000..8ddb2e0
--- /dev/null
+++ b/definitions/grib2/tables/17/4.207.table
@@ -0,0 +1,10 @@
+# Code table 4.207 - Icing
+0 0 None 
+1 1 Light 
+2 2 Moderate 
+3 3 Severe 
+4 4 Trace 
+5 5 Heavy 
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.208.table b/definitions/grib2/tables/17/4.208.table
new file mode 100644
index 0000000..b83685a
--- /dev/null
+++ b/definitions/grib2/tables/17/4.208.table
@@ -0,0 +1,9 @@
+# Code table 4.208 - Turbulence
+0 0 None (smooth) 
+1 1 Light 
+2 2 Moderate 
+3 3 Severe 
+4 4 Extreme 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.209.table b/definitions/grib2/tables/17/4.209.table
new file mode 100644
index 0000000..cb76170
--- /dev/null
+++ b/definitions/grib2/tables/17/4.209.table
@@ -0,0 +1,9 @@
+# Code table 4.209 - Planetary boundary-layer regime
+0 0 Reserved 
+1 1 Stable 
+2 2 Mechanically driven turbulence 
+3 3 Forced convection 
+4 4 Free convection 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.210.table b/definitions/grib2/tables/17/4.210.table
new file mode 100644
index 0000000..524a6ca
--- /dev/null
+++ b/definitions/grib2/tables/17/4.210.table
@@ -0,0 +1,6 @@
+# Code table 4.210 - Contrail intensity
+0 0 Contrail not present 
+1 1 Contrail present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.211.table b/definitions/grib2/tables/17/4.211.table
new file mode 100644
index 0000000..098eb2d
--- /dev/null
+++ b/definitions/grib2/tables/17/4.211.table
@@ -0,0 +1,7 @@
+# Code table 4.211 - Contrail engine type
+0 0 Low bypass 
+1 1 High bypass 
+2 2 Non-bypass 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.212.table b/definitions/grib2/tables/17/4.212.table
new file mode 100644
index 0000000..1a085b8
--- /dev/null
+++ b/definitions/grib2/tables/17/4.212.table
@@ -0,0 +1,18 @@
+# Code table 4.212 - Land use
+0 0 Reserved 
+1 1 Urban land 
+2 2 Agriculture 
+3 3 Range land 
+4 4 Deciduous forest 
+5 5 Coniferous forest 
+6 6 Forest/wetland 
+7 7 Water 
+8 8 Wetlands 
+9 9 Desert 
+10 10 Tundra 
+11 11 Ice 
+12 12 Tropical forest 
+13 13 Savannah 
+# 14-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.213.table b/definitions/grib2/tables/17/4.213.table
new file mode 100644
index 0000000..c65784a
--- /dev/null
+++ b/definitions/grib2/tables/17/4.213.table
@@ -0,0 +1,16 @@
+# Code table 4.213 - Soil type
+0 0 Reserved 
+1 1 Sand 
+2 2 Loamy sand 
+3 3 Sandy loam 
+4 4 Silt loam 
+5 5 Organic (redefined) 
+6 6 Sandy clay loam 
+7 7 Silt clay loam 
+8 8 Clay loam 
+9 9 Sandy clay 
+10 10 Silty clay 
+11 11 Clay 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.215.table b/definitions/grib2/tables/17/4.215.table
new file mode 100644
index 0000000..034db72
--- /dev/null
+++ b/definitions/grib2/tables/17/4.215.table
@@ -0,0 +1,9 @@
+# Code table 4.215 - Remotely sensed snow coverage
+# 0-49 Reserved 
+50 50 No-snow/no-cloud 
+# 51-99 Reserved 
+100 100 Clouds 
+# 101-249 Reserved 
+250 250 Snow 
+# 251-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.216.table b/definitions/grib2/tables/17/4.216.table
new file mode 100644
index 0000000..fd785ef
--- /dev/null
+++ b/definitions/grib2/tables/17/4.216.table
@@ -0,0 +1,96 @@
+# Code table 4.216 - Elevation of snow-covered terrain
+# 0-90 Elevation in increments of 100 m 
+0 0  Elevation in increments of 100 m
+1 1  Elevation in increments of 100 m
+2 2  Elevation in increments of 100 m
+3 3  Elevation in increments of 100 m
+4 4  Elevation in increments of 100 m
+5 5  Elevation in increments of 100 m
+6 6  Elevation in increments of 100 m
+7 7  Elevation in increments of 100 m
+8 8  Elevation in increments of 100 m
+9 9  Elevation in increments of 100 m
+10 10  Elevation in increments of 100 m
+11 11  Elevation in increments of 100 m
+12 12  Elevation in increments of 100 m
+13 13  Elevation in increments of 100 m
+14 14  Elevation in increments of 100 m
+15 15  Elevation in increments of 100 m
+16 16  Elevation in increments of 100 m
+17 17  Elevation in increments of 100 m
+18 18  Elevation in increments of 100 m
+19 19  Elevation in increments of 100 m
+20 20  Elevation in increments of 100 m
+21 21  Elevation in increments of 100 m
+22 22  Elevation in increments of 100 m
+23 23  Elevation in increments of 100 m
+24 24  Elevation in increments of 100 m
+25 25  Elevation in increments of 100 m
+26 26  Elevation in increments of 100 m
+27 27  Elevation in increments of 100 m
+28 28  Elevation in increments of 100 m
+29 29  Elevation in increments of 100 m
+30 30  Elevation in increments of 100 m
+31 31  Elevation in increments of 100 m
+32 32  Elevation in increments of 100 m
+33 33  Elevation in increments of 100 m
+34 34  Elevation in increments of 100 m
+35 35  Elevation in increments of 100 m
+36 36  Elevation in increments of 100 m
+37 37  Elevation in increments of 100 m
+38 38  Elevation in increments of 100 m
+39 39  Elevation in increments of 100 m
+40 40  Elevation in increments of 100 m
+41 41  Elevation in increments of 100 m
+42 42  Elevation in increments of 100 m
+43 43  Elevation in increments of 100 m
+44 44  Elevation in increments of 100 m
+45 45  Elevation in increments of 100 m
+46 46  Elevation in increments of 100 m
+47 47  Elevation in increments of 100 m
+48 48  Elevation in increments of 100 m
+49 49  Elevation in increments of 100 m
+50 50  Elevation in increments of 100 m
+51 51  Elevation in increments of 100 m
+52 52  Elevation in increments of 100 m
+53 53  Elevation in increments of 100 m
+54 54  Elevation in increments of 100 m
+55 55  Elevation in increments of 100 m
+56 56  Elevation in increments of 100 m
+57 57  Elevation in increments of 100 m
+58 58  Elevation in increments of 100 m
+59 59  Elevation in increments of 100 m
+60 60  Elevation in increments of 100 m
+61 61  Elevation in increments of 100 m
+62 62  Elevation in increments of 100 m
+63 63  Elevation in increments of 100 m
+64 64  Elevation in increments of 100 m
+65 65  Elevation in increments of 100 m
+66 66  Elevation in increments of 100 m
+67 67  Elevation in increments of 100 m
+68 68  Elevation in increments of 100 m
+69 69  Elevation in increments of 100 m
+70 70  Elevation in increments of 100 m
+71 71  Elevation in increments of 100 m
+72 72  Elevation in increments of 100 m
+73 73  Elevation in increments of 100 m
+74 74  Elevation in increments of 100 m
+75 75  Elevation in increments of 100 m
+76 76  Elevation in increments of 100 m
+77 77  Elevation in increments of 100 m
+78 78  Elevation in increments of 100 m
+79 79  Elevation in increments of 100 m
+80 80  Elevation in increments of 100 m
+81 81  Elevation in increments of 100 m
+82 82  Elevation in increments of 100 m
+83 83  Elevation in increments of 100 m
+84 84  Elevation in increments of 100 m
+85 85  Elevation in increments of 100 m
+86 86  Elevation in increments of 100 m
+87 87  Elevation in increments of 100 m
+88 88  Elevation in increments of 100 m
+89 89  Elevation in increments of 100 m
+90 90  Elevation in increments of 100 m
+# 91-253 Reserved 
+254 254 Clouds 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.217.table b/definitions/grib2/tables/17/4.217.table
new file mode 100644
index 0000000..a445218
--- /dev/null
+++ b/definitions/grib2/tables/17/4.217.table
@@ -0,0 +1,8 @@
+# Code table 4.217 - Cloud mask type
+0 0 Clear over water 
+1 1 Clear over land 
+2 2 Cloud 
+3 3 No data 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.218.table b/definitions/grib2/tables/17/4.218.table
new file mode 100644
index 0000000..7e3a695
--- /dev/null
+++ b/definitions/grib2/tables/17/4.218.table
@@ -0,0 +1,44 @@
+# Code table 4.218 - Pixel scene type
+0 0 No scene identified 
+1 1 Green needle-leafed forest 
+2 2 Green broad-leafed forest 
+3 3 Deciduous needle-leafed forest 
+4 4 Deciduous broad-leafed forest 
+5 5 Deciduous mixed forest 
+6 6 Closed shrub-land 
+7 7 Open shrub-land 
+8 8 Woody savannah 
+9 9 Savannah 
+10 10 Grassland 
+11 11 Permanent wetland 
+12 12 Cropland 
+13 13 Urban 
+14 14 Vegetation/crops 
+15 15 Permanent snow/ice 
+16 16 Barren desert 
+17 17 Water bodies 
+18 18 Tundra 
+19 19 Warm liquid water cloud 
+20 20 Supercooled liquid water cloud 
+21 21 Mixed-phase cloud 
+22 22 Optically thin ice cloud 
+23 23 Optically thick ice cloud 
+24 24 Multilayered cloud 
+# 25-96 Reserved 
+97 97 Snow/ice on land 
+98 98 Snow/ice on water 
+99 99 Sun-glint 
+100 100 General cloud 
+101 101 Low cloud/fog/Stratus 
+102 102 Low cloud/Stratocumulus 
+103 103 Low cloud/unknown type 
+104 104 Medium cloud/Nimbostratus 
+105 105 Medium cloud/Altostratus 
+106 106 Medium cloud/unknown type 
+107 107 High cloud/Cumulus 
+108 108 High cloud/Cirrus 
+109 109 High cloud/unknown 
+110 110 Unknown cloud type 
+# 111-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.219.table b/definitions/grib2/tables/17/4.219.table
new file mode 100644
index 0000000..86df052
--- /dev/null
+++ b/definitions/grib2/tables/17/4.219.table
@@ -0,0 +1,8 @@
+# Code table 4.219 - Cloud top height quality indicator
+0 0 Nominal cloud top height quality 
+1 1 Fog in segment 
+2 2 Poor quality height estimation 
+3 3 Fog in segment and poor quality height estimation 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.220.table b/definitions/grib2/tables/17/4.220.table
new file mode 100644
index 0000000..93e841f
--- /dev/null
+++ b/definitions/grib2/tables/17/4.220.table
@@ -0,0 +1,6 @@
+# Code table 4.220 - Horizontal dimension processed
+0 0 Latitude 
+1 1 Longitude 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.221.table b/definitions/grib2/tables/17/4.221.table
new file mode 100644
index 0000000..8448533
--- /dev/null
+++ b/definitions/grib2/tables/17/4.221.table
@@ -0,0 +1,6 @@
+# Code table 4.221 - Treatment of missing data
+0 0 Not included 
+1 1 Extrapolated 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.222.table b/definitions/grib2/tables/17/4.222.table
new file mode 100644
index 0000000..57f1130
--- /dev/null
+++ b/definitions/grib2/tables/17/4.222.table
@@ -0,0 +1,6 @@
+# Code table 4.222 - Categorical result
+0 0 No 
+1 1 Yes 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.223.table b/definitions/grib2/tables/17/4.223.table
new file mode 100644
index 0000000..f0deb07
--- /dev/null
+++ b/definitions/grib2/tables/17/4.223.table
@@ -0,0 +1,5 @@
+# Code table 4.223 - Fire detection indicator
+0 0 No fire detected 
+1 1 Possible fire detected 
+2 2 Probable fire detected 
+3 3 Missing 
diff --git a/definitions/grib2/tables/17/4.224.table b/definitions/grib2/tables/17/4.224.table
new file mode 100644
index 0000000..e87cde4
--- /dev/null
+++ b/definitions/grib2/tables/17/4.224.table
@@ -0,0 +1,18 @@
+# Code table 4.224 - Categorical outlook
+0 0 No risk area 
+1 1 Reserved 
+2 2 General thunderstorm risk area 
+3 3 Reserved 
+4 4 Slight risk area 
+5 5 Reserved 
+6 6 Moderate risk area 
+7 7 Reserved 
+8 8 High risk area 
+# 9-10 Reserved 
+11 11 Dry thunderstorm (dry lightning) risk area 
+# 12-13 Reserved 
+14 14 Critical risk area 
+# 15-17 Reserved 
+18 18 Extremely critical risk area 
+# 19-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.225.table b/definitions/grib2/tables/17/4.225.table
new file mode 100644
index 0000000..9d933fd
--- /dev/null
+++ b/definitions/grib2/tables/17/4.225.table
@@ -0,0 +1,267 @@
+# Code table 4.225 - Weather (see FM 94 BUFR/FM 95 CREX Code table 0 20 003 - Present weather) 
+00 00 Cloud development not observed or not observable
+01 01 Clouds generally dissolving or becoming less developed
+02 02 State of sky on the whole unchanged
+03 03 Clouds generally forming or developing
+04 04 Visibility reduced by smoke, e.g. veldt or forest fires, industrial smoke or volcanic ashes
+05 05 Haze
+06 06 Widespread dust in suspension in the air, not raised by wind at or near the station at the time of observation
+07 07 Dust or sand raised by wind at or near the station at the time of observation, but no well developed dust whirl(s) or sand whirl(s), and no duststorm or sandstorm seen; or, in the case of sea stations and coastal stations, blowing spray at the station
+08 08 Well-developed dust whirl(s) or sand whirl(s) seen at or near the station during the preceding hour or at the same time of observation, but no duststorm or sandstorm
+09 09 Duststorm or sandstorm within sight at the time of observation, or at the station during the preceding hour
+10 10 Mist
+11 11 Patches
+12 12 More or less continuous
+13 13 Lightning visible, no thunder heard
+14 14 Precipitation within sight, not reaching the ground or the surface of the sea
+15 15 Precipitation within sight, reaching the ground or the surface of the sea, but distant, i.e. estimated to be more than 5 km from the station
+16 16 Precipitation within sight, reaching the ground or the surface of the sea, near to, but not at the station
+17 17 Thunderstorm, but no precipitation at the time of observation
+18 18 Squalls
+19 19 Funnel cloud(s)
+20 20 Drizzle (not freezing) or snow grains
+21 21 Rain (not freezing)
+22 22 Snow
+23 23 Rain and snow or ice pellets
+24 24 Freezing drizzle or freezing rain
+25 25 Shower(s) of rain
+26 26 Shower(s) of snow, or of rain and snow
+27 27 Shower(s) of hail, or of rain and hail
+28 28 Fog or ice fog
+29 29 Thunderstorm (with or without precipitation)
+30 30 Slight or moderate duststorm or sandstorm has decreased during the preceding hour
+31 31 Slight or moderate duststorm or sandstorm no appreciable change during the preceding hour
+32 32 Slight or moderate duststorm or sandstorm has begun or has increased during the preceding hour
+33 33 Severe duststorm or sandstorm has decreased during the preceding hour
+34 34 Severe duststorm or sandstorm no appreciable change during the preceding hour
+35 35 Severe duststorm or sandstorm has begun or has increased during the preceding hour
+36 36 Slight or moderate drifting snow generally low (below eye level)
+37 37 Heavy drifting snow generally low (below eye level)
+38 38 Slight or moderate blowing snow generally high (above eye level)
+39 39 Heavy blowing snow generally high (above eye level)
+40 40 Fog or ice fog at a distance at the time of observation, but not at the station during the preceding hour, the fog or ice fog extending to a level above that of the observer
+41 41 Fog or ice fog in patches
+42 42 Fog or ice fog, sky visible has become thinner during the preceding hour
+43 43 Fog or ice fog, sky invisible has become thinner during the preceding hour
+44 44 Fog or ice fog, sky visible no appreciable change during the preceding hour
+45 45 Fog or ice fog, sky invisible no appreciable change during the preceding hour
+46 46 Fog or ice fog, sky visible has begun or has become thicker during the preceding hour
+47 47 Fog or ice fog, sky invisible has begun or has become thicker during the preceding hour
+48 48 Fog, depositing rime, sky visible
+49 49 Fog, depositing rime, sky invisible
+50 50 Drizzle, not freezing, intermittent slight at time of observation
+51 51 Drizzle, not freezing, continuous slight at time of observation
+52 52 Drizzle, not freezing, intermittent moderate at time of observation
+53 53 Drizzle, not freezing, continuous moderate at time of observation
+54 54 Drizzle, not freezing, intermittent heavy (dense) at time of observation
+55 55 Drizzle, not freezing, continuous heavy (dense) at time of observation
+56 56 Drizzle, freezing, slight
+57 57 Drizzle, freezing, moderate or heavy (dense)
+58 58 Drizzle and rain, slight
+59 59 Drizzle and rain, moderate or heavy
+60 60 Rain, not freezing, intermittent slight at time of observation
+61 61 Rain, not freezing, continuous slight at time of observation
+62 62 Rain, not freezing, intermittent moderate at time of observation
+63 63 Rain, not freezing, continuous moderate at time of observation
+64 64 Rain, not freezing, intermittent heavy at time of observation
+65 65 Rain, not freezing, continuous heavy at time of observation
+66 66 Rain, freezing, slight
+67 67 Rain, freezing, moderate or heavy
+68 68 Rain or drizzle and snow, slight
+69 69 Rain or drizzle and snow, moderate or heavy
+70 70 Intermittent fall of snowflakes slight at time of observation
+71 71 Continuous fall of snowflakes slight at time of observation
+72 72 Intermittent fall of snowflakes moderate at time of observation
+73 73 Continuous fall of snowflakes moderate at time of observation
+74 74 Intermittent fall of snowflakes heavy at time of observation
+75 75 Continuous fall of snowflakes heavy at time of observation
+76 76 Diamond dust (with or without fog)
+77 77 Snow grains (with or without fog)
+78 78 Isolated star-like snow crystals (with or without fog)
+79 79 Ice pellets
+80 80 Rain shower(s), slight
+81 81 Rain shower(s), moderate or heavy
+82 82 Rain shower(s), violent
+83 83 Shower(s) of rain and snow mixed, slight
+84 84 Shower(s) of rain and snow mixed, moderate or heavy
+85 85 Snow shower(s), slight
+86 86 Snow shower(s), moderate or heavy
+87 87 Shower(s) of snow pellets or small hail, with or without rain or rain and snow mixed slight
+88 88 Shower(s) of snow pellets or small hail, with or without rain or rain and snow mixed moderate or heavy
+89 89 Shower(s) of hail, with or without rain or rain and snow mixed, not associated with thunder slight
+90 90 Shower(s) of hail, with or without rain or rain and snow mixed, not associated with thunder moderate or heavy
+91 91 Slight rain at time of observation
+92 92 Moderate or heavy rain at time of observation
+93 93 Slight snow, or rain and snow mixed or hail at time of observation
+94 94 Moderate or heavy snow, or rain and snow mixed or hail at time of observation
+95 95 Thunderstorm, slight or moderate, without hail, but with rain and/or snow at time of observation
+96 96 Thunderstorm, slight or moderate, with hail at time of observation
+97 97 Thunderstorm, heavy, without hail, but with rain and/or snow at time of observation
+98 98 Thunderstorm combined with duststorm or sandstorm at time of observation
+99 99 Thunderstorm, heavy, with hail at time of observation
+100 100 No significant weather observed
+101 101 Clouds generally dissolving or becoming less developed during the past hour
+102 102 State of sky on the whole unchanged during the past hour
+103 103 Clouds generally forming or developing during the past hour
+104 104 Haze or smoke, or dust in suspension in the air, visibility equal to, or greater than, 1 km
+105 105 Haze or smoke, or dust in suspension in the air, visibility less than 1 km
+#106-109 Reserved
+110 110 Mist
+111 111 Diamond dust
+112 112 Distant lightning
+#113-117 Reserved
+118 118 Squalls
+#119 Reserved
+120 120 Fog
+121 121 PRECIPITATION
+122 122 Drizzle (not freezing) or snow grains
+123 123 Rain (not freezing)
+124 124 Snow
+125 125 Freezing drizzle or freezing rain
+126 126 Thunderstorm (with or without precipitation)
+127 127 BLOWING OR DRIFTING SNOW OR SAND
+128 128 Blowing or drifting snow or sand, visibility equal to, or greater than, 1 km
+129 129 Blowing or drifting snow or sand, visibility less than 1 km
+130 130 FOG
+131 131 Fog or ice fog in patches
+132 132 Fog or ice fog, has become thinner during the past hour
+133 133 Fog or ice fog, no appreciable change during the past hour
+134 134 Fog or ice fog, has begun or become thicker during the past hour
+135 135 Fog, depositing rime
+#136-139 Reserved
+140 140 PRECIPITATION
+141 141 Precipitation, slight or moderate
+142 142 Precipitation, heavy
+143 143 Liquid precipitation, slight or moderate
+144 144 Liquid precipitation, heavy
+145 145 Solid precipitation, slight or moderate
+146 146 Solid precipitation, heavy
+147 147 Freezing precipitation, slight or moderate
+148 148 Freezing precipitation, heavy
+#149 Reserved
+150 150 DRIZZLE
+151 151 Drizzle, not freezing, slight
+152 152 Drizzle, not freezing, moderate
+153 153 Drizzle, not freezing, heavy
+154 154 Drizzle, freezing, slight
+155 155 Drizzle, freezing, moderate
+156 156 Drizzle, freezing, heavy
+157 157 Drizzle and rain, slight
+158 158 Drizzle and rain, moderate or heavy
+#159 Reserved
+160 160 RAIN
+161 161 Rain, not freezing, slight
+162 162 Rain, not freezing, moderate
+163 163 Rain, not freezing, heavy
+164 164 Rain, freezing, slight
+165 165 Rain, freezing, moderate
+166 166 Rain, freezing, heavy
+167 167 Rain (or drizzle) and snow, slight
+168 168 Rain (or drizzle) and snow, moderate or heavy
+#169 Reserved
+170 170 SNOW
+171 171 Snow, slight
+172 172 Snow, moderate
+173 173 Snow, heavy
+174 174 Ice pellets, slight
+175 175 Ice pellets, moderate
+176 176 Ice pellets, heavy
+177 177 Snow grains
+178 178 Ice crystals
+#179 Reserved
+180 180 SHOWER(S) OR INTERMITTENT PRECIPITATION
+181 181 Rain shower(s) or intermittent rain, slight
+182 182 Rain shower(s) or intermittent rain, moderate
+183 183 Rain shower(s) or intermittent rain, heavy
+184 184 Rain shower(s) or intermittent rain, violent
+185 185 Snow shower(s) or intermittent snow, slight
+186 186 Snow shower(s) or intermittent snow, moderate
+187 187 Snow shower(s) or intermittent snow, heavy
+#188 Reserved
+189 189 Hail
+190 190 THUNDERSTORM
+191 191 Thunderstorm, slight or moderate, with no precipitation
+192 192 Thunderstorm, slight or moderate, with rain showers and/or snow showers
+193 193 Thunderstorm, slight or moderate, with hail
+194 194 Thunderstorm, heavy, with no precipitation
+195 195 Thunderstorm, heavy, with rain showers and/or snow showers
+196 196 Thunderstorm, heavy, with hail
+#197-198 Reserved
+199 199 Tornado
+204 204 Volcanic ash suspended in the air aloft
+206 206 Thick dust haze, visibility less than 1 km
+207 207 Blowing spray at the station
+208 208 Drifting dust (sand)
+209 209 Wall of dust or sand in distance (like haboob)
+210 210 Snow haze
+211 211 Whiteout
+213 213 Lightning, cloud to surface
+#214-216 Not used
+217 217 Dry thunderstorm
+219 219 Tornado cloud (destructive) at or within sight of the station during preceding hour or at the time of observation
+220 220 Deposition of volcanic ash
+221 221 Deposition of dust or sand
+222 222 Deposition of dew
+223 223 Deposition of wet snow
+224 224 Deposition of soft rime
+225 225 Deposition of hard rime
+226 226 Deposition of hoar frost
+227 227 Deposition of glaze
+228 228 Deposition of ice crust (ice slick)
+230 230 Duststorm or sandstorm with temperature below 0 degrees
+239 239 Blowing snow, impossible to determine whether snow is falling or not
+241 241 Fog on sea
+242 242 Fog in valleys
+243 243 Arctic or Antarctic sea smoke
+244 244 Steam fog (sea, lake or river)
+245 245 Steam log (land)
+246 246 Fog over ice or snow cover
+247 247 Dense fog, visibility 60-90 m
+248 248 Dense fog, visibility 30-60 m
+249 249 Dense fog, visibility less than 30 m
+250 250 Drizzle, rate of fall - less than 0.10 mm h-1
+251 251 Drizzle, rate of fall - 0.10-0.19 mm h-1
+252 252 Drizzle, rate of fall - 0.20-0.39 mm h-1
+253 253 Drizzle, rate of fall - 0.40-0.79 mm h-1
+254 254 Drizzle, rate of fall - 0.80-1.59 mm h-1
+255 255 Drizzle, rate of fall - 1.60-3.19 mm h-1
+256 256 Drizzle, rate of fall - 3.20-6.39 mm h-1
+257 257 Drizzle, rate of fall - 6.4 mm h-1 or more
+259 259 Drizzle and snow
+260 260 Rain, rate of fall - less than 1.0 mm h-1
+261 261 Rain, rate of fall - 1.0-1.9 mm h-1
+262 262 Rain, rate of fall - 2.0-3.9 mm h-1
+263 263 Rain, rate of fall - 4.0-7.9 mm h-1
+264 264 Rain, rate of fall - 8.0-15.9 mm h-1
+265 265 Rain, rate of fall - 16.0-31.9 mm h-1
+266 266 Rain, rate of fall - 32.0-63.9 mm h-1
+267 267 Rain, rate of fall - 64.0 mm h-1 or more
+270 270 Snow, rate of fall - less than 1.0 cm h-1
+271 271 Snow, rate of fall - 1.0-1.9 cm h-1
+272 272 Snow, rate of fall - 2.0-3.9 cm h-1
+273 273 Snow, rate of fall - 4.0-7.9 cm h-1
+274 274 Snow, rate of fall - 8.0-15.9 cm h-1
+275 275 Snow, rate of fall - 16.0-31.9 cm h-1
+276 276 Snow, rate of fall - 32.0-63.9 cm h-1
+277 277 Snow, rate of fall - 64.0 cm h-1 or more
+278 278 Snow or ice crystal precipitation from a clear sky
+279 279 Wet snow, freezing on contact
+280 280 Precipitation of rain
+281 281 Precipitation of rain, freezing
+282 282 Precipitation of rain and snow mixed
+283 283 Precipitation of snow
+284 284 Precipitation of snow pellets or small hall
+285 285 Precipitation of snow pellets or small hail, with rain
+286 286 Precipitation of snow pellets or small hail, with rain and snow mixed
+287 287 Precipitation of snow pellets or small hail, with snow
+288 288 Precipitation of hail
+289 289 Precipitation of hail, with rain
+290 290 Precipitation of hall, with rain and snow mixed
+291 291 Precipitation of hail, with snow
+292 292 Shower(s) or thunderstorm over sea
+293 293 Shower(s) or thunderstorm over mountains
+#300-507 Reserved
+508 508 No significant phenomenon to report, present and past weather omitted
+509 509 No observation, data not available, present and past weather omitted
+510 510 Present and past weather missing, but expected
+511 511 Missing value
diff --git a/definitions/grib2/tables/17/4.227.table b/definitions/grib2/tables/17/4.227.table
new file mode 100644
index 0000000..27c7655
--- /dev/null
+++ b/definitions/grib2/tables/17/4.227.table
@@ -0,0 +1,9 @@
+# Code table 4.227 - Icing scenario (weather/cloud classification)
+0 0 None 
+1 1 General 
+2 2 Convective 
+3 3 Stratiform 
+4 4 Freezing 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/17/4.230.table b/definitions/grib2/tables/17/4.230.table
new file mode 100644
index 0000000..ab995d1
--- /dev/null
+++ b/definitions/grib2/tables/17/4.230.table
@@ -0,0 +1,423 @@
+# Code table 4.230 - Atmospheric chemical constituent type
+0 0 Ozone O3
+1 1 Water vapour H2O
+2 2 Methane CH4
+3 3 Carbon dioxide CO2
+4 4 Carbon monoxide CO
+5 5 Nitrogen dioxide NO2
+6 6 Nitrous oxide N2O
+7 7 Formaldehyde HCHO
+8 8 Sulphur dioxide SO2
+9 9 Ammonia NH3
+10 10 Ammonium NH4+
+11 11 Nitrogen monoxide NO
+12 12 Atomic oxygen O
+13 13 Nitrate radical NO3
+14 14 Hydroperoxyl radical HO2
+15 15 Dinitrogen pentoxide N2O5
+16 16 Nitrous acid HONO
+17 17 Nitric acid HNO3
+18 18 Peroxynitric acid HO2NO2
+19 19 Hydrogen peroxide H2O2
+20 20 Molecular hydrogen H
+21 21 Atomic nitrogen N
+22 22 Sulphate SO42-
+23 23 Radon Rn
+24 24 Elemental mercury Hg(0)
+25 25 Divalent mercury Hg2+
+26 26 Atomic chlorine Cl
+27 27 Chlorine monoxide ClO
+28 28 Dichlorine peroxide Cl2O2
+29 29 Hypochlorous acid HClO
+30 30 Chlorine nitrate ClONO2
+31 31 Chlorine dioxide ClO2
+32 32 Atomic bromine Br
+33 33 Bromine monoxide BrO
+34 34 Bromine chloride BrCl
+35 35 Hydrogen bromide HBr
+36 36 Hypobromous acid HBrO
+37 37 Bromine nitrate BrONO2
+38 38 Oxygen O2
+#39-9999 Reserved
+10000 10000 Hydroxyl radical OH
+10001 10001 Methyl peroxy radical CH3O2
+10002 10002 Methyl hydroperoxide CH3O2H
+10004 10004 Methanol CH3OH
+10005 10005 Formic acid CH3OOH
+10006 10006 Hydrogen cyanide HCN
+10007 10007 Aceto nitrile CH3CN
+10008 10008 Ethane C2H6
+10009 10009 Ethene (= Ethylene) C2H4
+10010 10010 Ethyne (= Acetylene) C2H2
+10011 10011 Ethanol C2H5OH
+10012 10012 Acetic acid C2H5OOH
+10013 10013 Peroxyacetyl nitrate CH3C(O)OONO2
+10014 10014 Propane C3H8
+10015 10015 Propene C3H6
+10016 10016 Butanes C4H10
+10017 10017 Isoprene C5H10
+10018 10018 Alpha pinene C10H16
+10019 10019 Beta pinene C10H16
+10020 10020 Limonene C10H16
+10021 10021 Benzene C6H6
+10022 10022 Toluene C7H8
+10023 10023 Xylene C8H10
+#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...)
+10500 10500 Dimethyl sulphide CH3SCH3 (DMS)
+#10501-20000 Reserved
+20001 20001 Hydrogen chloride
+20002 20002 CFC-11
+20003 20003 CFC-12
+20004 20004 CFC-113
+20005 20005 CFC-113a
+20006 20006 CFC-114
+20007 20007 CFC-115
+20008 20008 HCFC-22
+20009 20009 HCFC-141b
+20010 20010 HCFC-142b
+20011 20011 Halon-1202
+20012 20012 Halon-1211
+20013 20013 Halon-1301
+20014 20014 Halon-2402
+20015 20015 Methyl chloride (HCC-40)
+20016 20016 Carbon tetrachloride (HCC-10)
+20017 20017 HCC-140a CH3CCl3
+20018 20018 Methyl bromide (HBC-40B1)
+20019 20019 Hexachlorocyclohexane (HCH)
+20020 20020 Alpha hexachlorocyclohexane
+20021 20021 Hexachlorobiphenyl (PCB-153)
+#20022-29999 Reserved
+30000 30000 Radioactive pollutant (tracer, defined by originating centre)
+#30001-30009 Reserved
+30010 30010 Hydrogen H-3
+30011 30011 Hydrogen organic bounded H-3o
+30012 30012 Hydrogen inorganic H-3a
+30013 30013 Beryllium 7 Be-7
+30014 30014 Beryllium 10 Be-10
+30015 30015 Carbon 14 C-14
+30016 30016 Carbon 14 CO2 C-14CO2
+30017 30017 Carbon 14 other gases C-14og
+30018 30018 Nitrogen 13 N-13
+30019 30019 Nitrogen 16 N-16
+30020 30020 Fluorine 18 F-18
+30021 30021 Sodium 22 Na-22
+30022 30022 Phosphate 32 P-32
+30023 30023 Phosphate 33 P-33
+30024 30024 Sulphur 35 S-35
+30025 30025 Chlorine 36 Cl-36
+30026 30026 Potassium 40 K-40
+30027 30027 Argon 41 Ar-41
+30028 30028 Calcium 41 Ca-41
+30029 30029 Calcium 45 Ca-45
+30030 30030 Titanium 44 Ti-44
+30031 30031 Scandium 46 Sc-46
+30032 30032 Vanadium 48 V-48
+30033 30033 Vanadium 49 V-49
+30034 30034 Chrome 51 Cr-51
+30035 30035 Manganese 52 Mn-52
+30036 30036 Manganese 54 Mn-54
+30037 30037 Iron 55 Fe-55
+30038 30038 Iron 59 Fe-59
+30039 30039 Cobalt 56 Co-56
+30040 30040 Cobalt 57 Co-57
+30041 30041 Cobalt 58 Co-58
+30042 30042 Cobalt 60 Co-60
+30043 30043 Nickel 59 Ni-59
+30044 30044 Nickel 63 Ni-63
+30045 30045 Zinc 65 Zn-65
+30046 30046 Gallium 67 Ga-67
+30047 30047 Gallium 68 Ga-68
+30048 30048 Germanium 68 Ge-68
+30049 30049 Germanium 69 Ge-69
+30050 30050 Arsenic 73 As-73
+30051 30051 Selenium 75 Se-75
+30052 30052 Selenium 79 Se-79
+30053 30053 Rubidium 81 Rb-81
+30054 30054 Rubidium 83 Rb-83
+30055 30055 Rubidium 84 Rb-84
+30056 30056 Rubidium 86 Rb-86
+30057 30057 Rubidium 87 Rb-87
+30058 30058 Rubidium 88 Rb-88
+30059 30059 Krypton 85 Kr-85
+30060 30060 Krypton 85 metastable Kr-85m
+30061 30061 Krypton 87 Kr-87
+30062 30062 Krypton 88 Kr-88
+30063 30063 Krypton 89 Kr-89
+30064 30064 Strontium 85 Sr-85
+30065 30065 Strontium 89 Sr-89
+30066 30066 Strontium 89/90 Sr-8990
+30067 30067 Strontium 90 Sr-90
+30068 30068 Strontium 91 Sr-91
+30069 30069 Strontium 92 Sr-92
+30070 30070 Yttrium 87 Y-87
+30071 30071 Yttrium 88 Y-88
+30072 30072 Yttrium 90 Y-90
+30073 30073 Yttrium 91 Y-91
+30074 30074 Yttrium 91 metastable Y-91m
+30075 30075 Yttrium 92 Y-92
+30076 30076 Yttrium 93 Y-93
+30077 30077 Zirconium 89 Zr-89
+30078 30078 Zirconium 93 Zr-93
+30079 30079 Zirconium 95 Zr-95
+30080 30080 Zirconium 97 Zr-97
+30081 30081 Niobium 93 metastable Nb-93m
+30082 30082 Niobium 94 Nb-94
+30083 30083 Niobium 95 Nb-95
+30084 30084 Niobium 95 metastable Nb-95m
+30085 30085 Niobium 97 Nb-97
+30086 30086 Niobium 97 metastable Nb-97m
+30087 30087 Molybdenum 93 Mo-93
+30088 30088 Molybdenum 99 Mo-99
+30089 30089 Technetium 95 metastable Tc-95m
+30090 30090 Technetium 96 Tc-96
+30091 30091 Technetium 99 Tc-99
+30092 30092 Technetium 99 metastable Tc-99m
+30093 30093 Rhodium 99 Rh-99
+30094 30094 Rhodium 101 Rh-101
+30095 30095 Rhodium 102 metastable Rh-102m
+30096 30096 Rhodium 103 metastable Rh-103m
+30097 30097 Rhodium 105 Rh-105
+30098 30098 Rhodium 106 Rh-106
+30099 30099 Palladium 100 Pd-100
+30100 30100 Palladium 103 Pd-103
+30101 30101 Palladium 107 Pd-107
+30102 30102 Ruthenium 103 Ru-103
+30103 30103 Ruthenium 105 Ru-105
+30104 30104 Ruthenium 106 Ru-106
+30105 30105 Silver 108 metastable Ag-108m
+30106 30106 Silver 110 metastable Ag-110m
+30107 30107 Cadmium 109 Cd-109
+30108 30108 Cadmium 113 metastable Cd-113m
+30109 30109 Cadmium 115 metastable Cd-115m
+30110 30110 Indium 114 metastable In-114m
+30111 30111 Tin 113 Sn-113
+30112 30112 Tin 119 metastable Sn-119m
+30113 30113 Tin 121 metastable Sn-121m
+30114 30114 Tin 122 Sn-122
+30115 30115 Tin 123 Sn-123
+30116 30116 Tin 126 Sn-126
+30117 30117 Antimony 124 Sb-124
+30118 30118 Antimony 125 Sb-125
+30119 30119 Antimony 126 Sb-126
+30120 30120 Antimony 127 Sb-127
+30121 30121 Antimony 129 Sb-129
+30122 30122 Tellurium 123 metastable Te-123m
+30123 30123 Tellurium 125 metastable Te-125m
+30124 30124 Tellurium 127 Te-127
+30125 30125 Tellurium 127 metastable Te-127m
+30126 30126 Tellurium 129 Te-129
+30127 30127 Tellurium 129 metastable Te-129m
+30128 30128 Tellurium 131 metastable Te-131m
+30129 30129 Tellurium 132 Te-132
+30130 30130 Iodine 123 I-123
+30131 30131 Iodine 124 I-124
+30132 30132 Iodine 125 I-125
+30133 30133 Iodine 126 I-126
+30134 30134 Iodine 129 I-129
+30135 30135 Iodine 129 elementary gaseous I-129g
+30136 30136 Iodine 129 organic bounded I-129o
+30137 30137 Iodine 131 I-131
+30138 30138 Iodine 131 elementary gaseous I-131g
+30139 30139 Iodine 131 organic bounded I-131o
+30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go
+30141 30141 Iodine 131 aerosol I-131a
+30142 30142 Iodine 132 I-132
+30143 30143 Iodine 132 elementary gaseous I-132g
+30144 30144 Iodine 132 organic bounded I-132o
+30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go
+30146 30146 Iodine 132 aerosol I-132a
+30147 30147 Iodine 133 I-133
+30148 30148 Iodine 133 elementary gaseous I-133g
+30149 30149 Iodine 133 organic bounded I-133o
+30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go
+30151 30151 Iodine 133 aerosol I-133a
+30152 30152 Iodine 134 I-134
+30153 30153 Iodine 134 elementary gaseous I-134g
+30154 30154 Iodine 134 organic bounded I-134o
+30155 30155 Iodine 135 I-135
+30156 30156 Iodine 135 elementary gaseous I-135g
+30157 30157 Iodine 135 organic bounded I-135o
+30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go
+30159 30159 Iodine 135 aerosol I-135a
+30160 30160 Xenon 131 metastable Xe-131m
+30161 30161 Xenon 133 Xe-133
+30162 30162 Xenon 133 metastable Xe-133m
+30163 30163 Xenon 135 Xe-135
+30164 30164 Xenon 135 metastable Xe-135m
+30165 30165 Xenon 137 Xe-137
+30166 30166 Xenon 138 Xe-138
+30167 30167 Xenon sum of all Xenon isotopes Xe-sum
+30168 30168 Caesium 131 Cs-131
+30169 30169 Caesium 134 Cs-134
+30170 30170 Caesium 135 Cs-135
+30171 30171 Caesium 136 Cs-136
+30172 30172 Caesium 137 Cs-137
+30173 30173 Barium 133 Ba-133
+30174 30174 Barium 137 metastable Ba-137m
+30175 30175 Barium 140 Ba-140
+30176 30176 Cerium 139 Ce-139
+30177 30177 Cerium 141 Ce-141
+30178 30178 Cerium 143 Ce-143
+30179 30179 Cerium 144 Ce-144
+30180 30180 Lanthanum 140 La-140
+30181 30181 Lanthanum 141 La-141
+30182 30182 Praseodymium 143 Pr-143
+30183 30183 Praseodymium 144 Pr-144
+30184 30184 Praseodymium 144 metastable Pr-144m
+30185 30185 Samarium 145 Sm-145
+30186 30186 Samarium 147 Sm-147
+30187 30187 Samarium 151 Sm-151
+30188 30188 Neodymium 147 Nd-147
+30189 30189 Promethium 146 Pm-146
+30190 30190 Promethium 147 Pm-147
+30191 30191 Promethium 151 Pm-151
+30192 30192 Europium 152 Eu-152
+30193 30193 Europium 154 Eu-154
+30194 30194 Europium 155 Eu-155
+30195 30195 Gadolinium 153 Gd-153
+30196 30196 Terbium 160 Tb-160
+30197 30197 Holmium 166 metastable Ho-166m
+30198 30198 Thulium 170 Tm-170
+30199 30199 Ytterbium 169 Yb-169
+30200 30200 Hafnium 175 Hf-175
+30201 30201 Hafnium 181 Hf-181
+30202 30202 Tantalum 179 Ta-179
+30203 30203 Tantalum 182 Ta-182
+30204 30204 Rhenium 184 Re-184
+30205 30205 Iridium 192 Ir-192
+30206 30206 Mercury 203 Hg-203
+30207 30207 Thallium 204 Tl-204
+30208 30208 Thallium 207 Tl-207
+30209 30209 Thallium 208 Tl-208
+30210 30210 Thallium 209 Tl-209
+30211 30211 Bismuth 205 Bi-205
+30212 30212 Bismuth 207 Bi-207
+30213 30213 Bismuth 210 Bi-210
+30214 30214 Bismuth 211 Bi-211
+30215 30215 Bismuth 212 Bi-212
+30216 30216 Bismuth 213 Bi-213
+30217 30217 Bismuth 214 Bi-214
+30218 30218 Polonium 208 Po-208
+30219 30219 Polonium 210 Po-210
+30220 30220 Polonium 212 Po-212
+30221 30221 Polonium 213 Po-213
+30222 30222 Polonium 214 Po-214
+30223 30223 Polonium 215 Po-215
+30224 30224 Polonium 216 Po-216
+30225 30225 Polonium 218 Po-218
+30226 30226 Lead 209 Pb-209
+30227 30227 Lead 210 Pb-210
+30228 30228 Lead 211 Pb-211
+30229 30229 Lead 212 Pb-212
+30230 30230 Lead 214 Pb-214
+30231 30231 Astatine 217 At-217
+30232 30232 Radon 219 Rn-219
+30233 30233 Radon 220 Rn-220
+30234 30234 Radon 222 Rn-222
+30235 30235 Francium 221 Fr-221
+30236 30236 Francium 223 Fr-223
+30237 30237 Radium 223 Ra-223
+30238 30238 Radium 224 Ra-224
+30239 30239 Radium 225 Ra-225
+30240 30240 Radium 226 Ra-226
+30241 30241 Radium 228 Ra-228
+30242 30242 Actinium 225 Ac-225
+30243 30243 Actinium 227 Ac-227
+30244 30244 Actinium 228 Ac-228
+30245 30245 Thorium 227 Th-227
+30246 30246 Thorium 228 Th-228
+30247 30247 Thorium 229 Th-229
+30248 30248 Thorium 230 Th-230
+30249 30249 Thorium 231 Th-231
+30250 30250 Thorium 232 Th-232
+30251 30251 Thorium 234 Th-234
+30252 30252 Protactinium 231 Pa-231
+30253 30253 Protactinium 233 Pa-233
+30254 30254 Protactinium 234 metastable Pa-234m
+30255 30255 Uranium 232 U-232
+30256 30256 Uranium 233 U-233
+30257 30257 Uranium 234 U-234
+30258 30258 Uranium 235 U-235
+30259 30259 Uranium 236 U-236
+30260 30260 Uranium 237 U-237
+30261 30261 Uranium 238 U-238
+30262 30262 Plutonium 236 Pu-236
+30263 30263 Plutonium 238 Pu-238
+30264 30264 Plutonium 239 Pu-239
+30265 30265 Plutonium 240 Pu-240
+30266 30266 Plutonium 241 Pu-241
+30267 30267 Plutonium 242 Pu-242
+30268 30268 Plutonium 244 Pu-244
+30269 30269 Neptunium 237 Np-237
+30270 30270 Neptunium 238 Np-238
+30271 30271 Neptunium 239 Np-239
+30272 30272 Americium 241 Am-241
+30273 30273 Americium 242 Am-242
+30274 30274 Americium 242 metastable Am-242m
+30275 30275 Americium 243 Am-243
+30276 30276 Curium 242 Cm-242
+30277 30277 Curium 243 Cm-243
+30278 30278 Curium 244 Cm-244
+30279 30279 Curium 245 Cm-245
+30280 30280 Curium 246 Cm-246
+30281 30281 Curium 247 Cm-247
+30282 30282 Curium 248 Cm-248
+30283 30283 Curium 243/244 Cm-243244
+30284 30284 Plutonium 238/Americium 241 Pu-238Am-241
+30285 30285 Plutonium 239/240 Pu-239240
+30286 30286 Berkelium 249 Bk-249
+30287 30287 Californium 249 Cf-249
+30288 30288 Californium 250 Cf-250
+30289 30289 Californium 252 Cf-252
+30290 30290 Sum aerosol particulates SumAer
+30291 30291 Sum Iodine SumIod
+30292 30292 Sum noble gas SumNG
+30293 30293 Activation gas ActGas
+30294 30294 Cs-137 Equivalent EquCs137
+#30295-59999 Reserved
+60000 60000 HOx radical (OH+HO2)
+60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2)
+60002 60002 Passive Ozone
+60003 60003 NOx expressed as nitrogen NOx
+60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy
+60005 60005 Total inorganic chlorine Clx
+60006 60006 Total inorganic bromine Brx
+60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx
+60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx
+60009 60009 Lumped alkanes
+60010 60010 Lumped alkenes
+60011 60011 Lumped aromatic compounds
+60012 60012 Lumped terpenes
+60013 60013 Non-methane volatile organic compounds expressed as carbon
+60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon
+60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon
+60016 60016 Lumped oxygenated hydrocarbons
+60017 60017 NOx expressed as nitrogen dioxide (NO2)
+#60018-61999 Reserved
+62000 62000 Total aerosol
+62001 62001 Dust dry
+62002 62002 Water in ambient
+62003 62003 Ammonium dry
+62004 62004 Nitrate dry
+62005 62005 Nitric acid trihydrate
+62006 62006 Sulphate dry
+62007 62007 Mercury dry
+62008 62008 Sea salt dry
+62009 62009 Black carbon dry
+62010 62010 Particulate organic matter dry
+62011 62011 Primary particulate organic matter dry
+62012 62012 Secondary particulate organic matter dry
+62013 62013 Black carbon hydrophilic dry
+62014 62014 Black carbon hydrophobic dry
+62015 62015 Particulate organic matter hydrophilic dry
+62016 62016 Particulate organic matter hydrophobic dry
+62017 62017 Nitrate hydrophilic dry
+62018 62018 Nitrate hydrophobic dry
+#62019 Reserved
+62020 62020 Smoke - high absorption
+62021 62021 Smoke - low absorption
+62022 62022 Aerosol - high absorption
+62023 62023 Aerosol - low absorption
+62025 62025 Volcanic ash
+#62024-65534 Reserved
+65535 65535 Missing
diff --git a/definitions/grib2/tables/17/4.233.table b/definitions/grib2/tables/17/4.233.table
new file mode 100644
index 0000000..4feba8c
--- /dev/null
+++ b/definitions/grib2/tables/17/4.233.table
@@ -0,0 +1,423 @@
+# Code table 4.233 - Aerosol type
+0 0 Ozone O3
+1 1 Water vapour H2O
+2 2 Methane CH4
+3 3 Carbon dioxide CO2
+4 4 Carbon monoxide CO
+5 5 Nitrogen dioxide NO2
+6 6 Nitrous oxide N2O
+7 7 Formaldehyde HCHO
+8 8 Sulphur dioxide SO2
+9 9 Ammonia NH3
+10 10 Ammonium NH4+
+11 11 Nitrogen monoxide NO
+12 12 Atomic oxygen O
+13 13 Nitrate radical NO3
+14 14 Hydroperoxyl radical HO2
+15 15 Dinitrogen pentoxide N2O5
+16 16 Nitrous acid HONO
+17 17 Nitric acid HNO3
+18 18 Peroxynitric acid HO2NO2
+19 19 Hydrogen peroxide H2O2
+20 20 Molecular hydrogen H
+21 21 Atomic nitrogen N
+22 22 Sulphate SO42-
+23 23 Radon Rn
+24 24 Elemental mercury Hg(0)
+25 25 Divalent mercury Hg2+
+26 26 Atomic chlorine Cl
+27 27 Chlorine monoxide ClO
+28 28 Dichlorine peroxide Cl2O2
+29 29 Hypochlorous acid HClO
+30 30 Chlorine nitrate ClONO2
+31 31 Chlorine dioxide ClO2
+32 32 Atomic bromine Br
+33 33 Bromine monoxide BrO
+34 34 Bromine chloride BrCl
+35 35 Hydrogen bromide HBr
+36 36 Hypobromous acid HBrO
+37 37 Bromine nitrate BrONO2
+38 38 Oxygen O2
+#39-9999 Reserved
+10000 10000 Hydroxyl radical OH
+10001 10001 Methyl peroxy radical CH3O2
+10002 10002 Methyl hydroperoxide CH3O2H
+10004 10004 Methanol CH3OH
+10005 10005 Formic acid CH3OOH
+10006 10006 Hydrogen cyanide HCN
+10007 10007 Aceto nitrile CH3CN
+10008 10008 Ethane C2H6
+10009 10009 Ethene (= Ethylene) C2H4
+10010 10010 Ethyne (= Acetylene) C2H2
+10011 10011 Ethanol C2H5OH
+10012 10012 Acetic acid C2H5OOH
+10013 10013 Peroxyacetyl nitrate CH3C(O)OONO2
+10014 10014 Propane C3H8
+10015 10015 Propene C3H6
+10016 10016 Butanes C4H10
+10017 10017 Isoprene C5H10
+10018 10018 Alpha pinene C10H16
+10019 10019 Beta pinene C10H16
+10020 10020 Limonene C10H16
+10021 10021 Benzene C6H6
+10022 10022 Toluene C7H8
+10023 10023 Xylene C8H10
+#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...)
+10500 10500 Dimethyl sulphide CH3SCH3 (DMS)
+#10501-20000 Reserved
+20001 20001 Hydrogen chloride
+20002 20002 CFC-11
+20003 20003 CFC-12
+20004 20004 CFC-113
+20005 20005 CFC-113a
+20006 20006 CFC-114
+20007 20007 CFC-115
+20008 20008 HCFC-22
+20009 20009 HCFC-141b
+20010 20010 HCFC-142b
+20011 20011 Halon-1202
+20012 20012 Halon-1211
+20013 20013 Halon-1301
+20014 20014 Halon-2402
+20015 20015 Methyl chloride (HCC-40)
+20016 20016 Carbon tetrachloride (HCC-10)
+20017 20017 HCC-140a CH3CCl3
+20018 20018 Methyl bromide (HBC-40B1)
+20019 20019 Hexachlorocyclohexane (HCH)
+20020 20020 Alpha hexachlorocyclohexane
+20021 20021 Hexachlorobiphenyl (PCB-153)
+#20022-29999 Reserved
+30000 30000 Radioactive pollutant (tracer, defined by originating centre)
+#30001-30009 Reserved
+30010 30010 Hydrogen H-3
+30011 30011 Hydrogen organic bounded H-3o
+30012 30012 Hydrogen inorganic H-3a
+30013 30013 Beryllium 7 Be-7
+30014 30014 Beryllium 10 Be-10
+30015 30015 Carbon 14 C-14
+30016 30016 Carbon 14 CO2 C-14CO2
+30017 30017 Carbon 14 other gases C-14og
+30018 30018 Nitrogen 13 N-13
+30019 30019 Nitrogen 16 N-16
+30020 30020 Fluorine 18 F-18
+30021 30021 Sodium 22 Na-22
+30022 30022 Phosphate 32 P-32
+30023 30023 Phosphate 33 P-33
+30024 30024 Sulphur 35 S-35
+30025 30025 Chlorine 36 Cl-36
+30026 30026 Potassium 40 K-40
+30027 30027 Argon 41 Ar-41
+30028 30028 Calcium 41 Ca-41
+30029 30029 Calcium 45 Ca-45
+30030 30030 Titanium 44 Ti-44
+30031 30031 Scandium 46 Sc-46
+30032 30032 Vanadium 48 V-48
+30033 30033 Vanadium 49 V-49
+30034 30034 Chrome 51 Cr-51
+30035 30035 Manganese 52 Mn-52
+30036 30036 Manganese 54 Mn-54
+30037 30037 Iron 55 Fe-55
+30038 30038 Iron 59 Fe-59
+30039 30039 Cobalt 56 Co-56
+30040 30040 Cobalt 57 Co-57
+30041 30041 Cobalt 58 Co-58
+30042 30042 Cobalt 60 Co-60
+30043 30043 Nickel 59 Ni-59
+30044 30044 Nickel 63 Ni-63
+30045 30045 Zinc 65 Zn-65
+30046 30046 Gallium 67 Ga-67
+30047 30047 Gallium 68 Ga-68
+30048 30048 Germanium 68 Ge-68
+30049 30049 Germanium 69 Ge-69
+30050 30050 Arsenic 73 As-73
+30051 30051 Selenium 75 Se-75
+30052 30052 Selenium 79 Se-79
+30053 30053 Rubidium 81 Rb-81
+30054 30054 Rubidium 83 Rb-83
+30055 30055 Rubidium 84 Rb-84
+30056 30056 Rubidium 86 Rb-86
+30057 30057 Rubidium 87 Rb-87
+30058 30058 Rubidium 88 Rb-88
+30059 30059 Krypton 85 Kr-85
+30060 30060 Krypton 85 metastable Kr-85m
+30061 30061 Krypton 87 Kr-87
+30062 30062 Krypton 88 Kr-88
+30063 30063 Krypton 89 Kr-89
+30064 30064 Strontium 85 Sr-85
+30065 30065 Strontium 89 Sr-89
+30066 30066 Strontium 89/90 Sr-8990
+30067 30067 Strontium 90 Sr-90
+30068 30068 Strontium 91 Sr-91
+30069 30069 Strontium 92 Sr-92
+30070 30070 Yttrium 87 Y-87
+30071 30071 Yttrium 88 Y-88
+30072 30072 Yttrium 90 Y-90
+30073 30073 Yttrium 91 Y-91
+30074 30074 Yttrium 91 metastable Y-91m
+30075 30075 Yttrium 92 Y-92
+30076 30076 Yttrium 93 Y-93
+30077 30077 Zirconium 89 Zr-89
+30078 30078 Zirconium 93 Zr-93
+30079 30079 Zirconium 95 Zr-95
+30080 30080 Zirconium 97 Zr-97
+30081 30081 Niobium 93 metastable Nb-93m
+30082 30082 Niobium 94 Nb-94
+30083 30083 Niobium 95 Nb-95
+30084 30084 Niobium 95 metastable Nb-95m
+30085 30085 Niobium 97 Nb-97
+30086 30086 Niobium 97 metastable Nb-97m
+30087 30087 Molybdenum 93 Mo-93
+30088 30088 Molybdenum 99 Mo-99
+30089 30089 Technetium 95 metastable Tc-95m
+30090 30090 Technetium 96 Tc-96
+30091 30091 Technetium 99 Tc-99
+30092 30092 Technetium 99 metastable Tc-99m
+30093 30093 Rhodium 99 Rh-99
+30094 30094 Rhodium 101 Rh-101
+30095 30095 Rhodium 102 metastable Rh-102m
+30096 30096 Rhodium 103 metastable Rh-103m
+30097 30097 Rhodium 105 Rh-105
+30098 30098 Rhodium 106 Rh-106
+30099 30099 Palladium 100 Pd-100
+30100 30100 Palladium 103 Pd-103
+30101 30101 Palladium 107 Pd-107
+30102 30102 Ruthenium 103 Ru-103
+30103 30103 Ruthenium 105 Ru-105
+30104 30104 Ruthenium 106 Ru-106
+30105 30105 Silver 108 metastable Ag-108m
+30106 30106 Silver 110 metastable Ag-110m
+30107 30107 Cadmium 109 Cd-109
+30108 30108 Cadmium 113 metastable Cd-113m
+30109 30109 Cadmium 115 metastable Cd-115m
+30110 30110 Indium 114 metastable In-114m
+30111 30111 Tin 113 Sn-113
+30112 30112 Tin 119 metastable Sn-119m
+30113 30113 Tin 121 metastable Sn-121m
+30114 30114 Tin 122 Sn-122
+30115 30115 Tin 123 Sn-123
+30116 30116 Tin 126 Sn-126
+30117 30117 Antimony 124 Sb-124
+30118 30118 Antimony 125 Sb-125
+30119 30119 Antimony 126 Sb-126
+30120 30120 Antimony 127 Sb-127
+30121 30121 Antimony 129 Sb-129
+30122 30122 Tellurium 123 metastable Te-123m
+30123 30123 Tellurium 125 metastable Te-125m
+30124 30124 Tellurium 127 Te-127
+30125 30125 Tellurium 127 metastable Te-127m
+30126 30126 Tellurium 129 Te-129
+30127 30127 Tellurium 129 metastable Te-129m
+30128 30128 Tellurium 131 metastable Te-131m
+30129 30129 Tellurium 132 Te-132
+30130 30130 Iodine 123 I-123
+30131 30131 Iodine 124 I-124
+30132 30132 Iodine 125 I-125
+30133 30133 Iodine 126 I-126
+30134 30134 Iodine 129 I-129
+30135 30135 Iodine 129 elementary gaseous I-129g
+30136 30136 Iodine 129 organic bounded I-129o
+30137 30137 Iodine 131 I-131
+30138 30138 Iodine 131 elementary gaseous I-131g
+30139 30139 Iodine 131 organic bounded I-131o
+30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go
+30141 30141 Iodine 131 aerosol I-131a
+30142 30142 Iodine 132 I-132
+30143 30143 Iodine 132 elementary gaseous I-132g
+30144 30144 Iodine 132 organic bounded I-132o
+30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go
+30146 30146 Iodine 132 aerosol I-132a
+30147 30147 Iodine 133 I-133
+30148 30148 Iodine 133 elementary gaseous I-133g
+30149 30149 Iodine 133 organic bounded I-133o
+30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go
+30151 30151 Iodine 133 aerosol I-133a
+30152 30152 Iodine 134 I-134
+30153 30153 Iodine 134 elementary gaseous I-134g
+30154 30154 Iodine 134 organic bounded I-134o
+30155 30155 Iodine 135 I-135
+30156 30156 Iodine 135 elementary gaseous I-135g
+30157 30157 Iodine 135 organic bounded I-135o
+30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go
+30159 30159 Iodine 135 aerosol I-135a
+30160 30160 Xenon 131 metastable Xe-131m
+30161 30161 Xenon 133 Xe-133
+30162 30162 Xenon 133 metastable Xe-133m
+30163 30163 Xenon 135 Xe-135
+30164 30164 Xenon 135 metastable Xe-135m
+30165 30165 Xenon 137 Xe-137
+30166 30166 Xenon 138 Xe-138
+30167 30167 Xenon sum of all Xenon isotopes Xe-sum
+30168 30168 Caesium 131 Cs-131
+30169 30169 Caesium 134 Cs-134
+30170 30170 Caesium 135 Cs-135
+30171 30171 Caesium 136 Cs-136
+30172 30172 Caesium 137 Cs-137
+30173 30173 Barium 133 Ba-133
+30174 30174 Barium 137 metastable Ba-137m
+30175 30175 Barium 140 Ba-140
+30176 30176 Cerium 139 Ce-139
+30177 30177 Cerium 141 Ce-141
+30178 30178 Cerium 143 Ce-143
+30179 30179 Cerium 144 Ce-144
+30180 30180 Lanthanum 140 La-140
+30181 30181 Lanthanum 141 La-141
+30182 30182 Praseodymium 143 Pr-143
+30183 30183 Praseodymium 144 Pr-144
+30184 30184 Praseodymium 144 metastable Pr-144m
+30185 30185 Samarium 145 Sm-145
+30186 30186 Samarium 147 Sm-147
+30187 30187 Samarium 151 Sm-151
+30188 30188 Neodymium 147 Nd-147
+30189 30189 Promethium 146 Pm-146
+30190 30190 Promethium 147 Pm-147
+30191 30191 Promethium 151 Pm-151
+30192 30192 Europium 152 Eu-152
+30193 30193 Europium 154 Eu-154
+30194 30194 Europium 155 Eu-155
+30195 30195 Gadolinium 153 Gd-153
+30196 30196 Terbium 160 Tb-160
+30197 30197 Holmium 166 metastable Ho-166m
+30198 30198 Thulium 170 Tm-170
+30199 30199 Ytterbium 169 Yb-169
+30200 30200 Hafnium 175 Hf-175
+30201 30201 Hafnium 181 Hf-181
+30202 30202 Tantalum 179 Ta-179
+30203 30203 Tantalum 182 Ta-182
+30204 30204 Rhenium 184 Re-184
+30205 30205 Iridium 192 Ir-192
+30206 30206 Mercury 203 Hg-203
+30207 30207 Thallium 204 Tl-204
+30208 30208 Thallium 207 Tl-207
+30209 30209 Thallium 208 Tl-208
+30210 30210 Thallium 209 Tl-209
+30211 30211 Bismuth 205 Bi-205
+30212 30212 Bismuth 207 Bi-207
+30213 30213 Bismuth 210 Bi-210
+30214 30214 Bismuth 211 Bi-211
+30215 30215 Bismuth 212 Bi-212
+30216 30216 Bismuth 213 Bi-213
+30217 30217 Bismuth 214 Bi-214
+30218 30218 Polonium 208 Po-208
+30219 30219 Polonium 210 Po-210
+30220 30220 Polonium 212 Po-212
+30221 30221 Polonium 213 Po-213
+30222 30222 Polonium 214 Po-214
+30223 30223 Polonium 215 Po-215
+30224 30224 Polonium 216 Po-216
+30225 30225 Polonium 218 Po-218
+30226 30226 Lead 209 Pb-209
+30227 30227 Lead 210 Pb-210
+30228 30228 Lead 211 Pb-211
+30229 30229 Lead 212 Pb-212
+30230 30230 Lead 214 Pb-214
+30231 30231 Astatine 217 At-217
+30232 30232 Radon 219 Rn-219
+30233 30233 Radon 220 Rn-220
+30234 30234 Radon 222 Rn-222
+30235 30235 Francium 221 Fr-221
+30236 30236 Francium 223 Fr-223
+30237 30237 Radium 223 Ra-223
+30238 30238 Radium 224 Ra-224
+30239 30239 Radium 225 Ra-225
+30240 30240 Radium 226 Ra-226
+30241 30241 Radium 228 Ra-228
+30242 30242 Actinium 225 Ac-225
+30243 30243 Actinium 227 Ac-227
+30244 30244 Actinium 228 Ac-228
+30245 30245 Thorium 227 Th-227
+30246 30246 Thorium 228 Th-228
+30247 30247 Thorium 229 Th-229
+30248 30248 Thorium 230 Th-230
+30249 30249 Thorium 231 Th-231
+30250 30250 Thorium 232 Th-232
+30251 30251 Thorium 234 Th-234
+30252 30252 Protactinium 231 Pa-231
+30253 30253 Protactinium 233 Pa-233
+30254 30254 Protactinium 234 metastable Pa-234m
+30255 30255 Uranium 232 U-232
+30256 30256 Uranium 233 U-233
+30257 30257 Uranium 234 U-234
+30258 30258 Uranium 235 U-235
+30259 30259 Uranium 236 U-236
+30260 30260 Uranium 237 U-237
+30261 30261 Uranium 238 U-238
+30262 30262 Plutonium 236 Pu-236
+30263 30263 Plutonium 238 Pu-238
+30264 30264 Plutonium 239 Pu-239
+30265 30265 Plutonium 240 Pu-240
+30266 30266 Plutonium 241 Pu-241
+30267 30267 Plutonium 242 Pu-242
+30268 30268 Plutonium 244 Pu-244
+30269 30269 Neptunium 237 Np-237
+30270 30270 Neptunium 238 Np-238
+30271 30271 Neptunium 239 Np-239
+30272 30272 Americium 241 Am-241
+30273 30273 Americium 242 Am-242
+30274 30274 Americium 242 metastable Am-242m
+30275 30275 Americium 243 Am-243
+30276 30276 Curium 242 Cm-242
+30277 30277 Curium 243 Cm-243
+30278 30278 Curium 244 Cm-244
+30279 30279 Curium 245 Cm-245
+30280 30280 Curium 246 Cm-246
+30281 30281 Curium 247 Cm-247
+30282 30282 Curium 248 Cm-248
+30283 30283 Curium 243/244 Cm-243244
+30284 30284 Plutonium 238/Americium 241 Pu-238Am-241
+30285 30285 Plutonium 239/240 Pu-239240
+30286 30286 Berkelium 249 Bk-249
+30287 30287 Californium 249 Cf-249
+30288 30288 Californium 250 Cf-250
+30289 30289 Californium 252 Cf-252
+30290 30290 Sum aerosol particulates SumAer
+30291 30291 Sum Iodine SumIod
+30292 30292 Sum noble gas SumNG
+30293 30293 Activation gas ActGas
+30294 30294 Cs-137 Equivalent EquCs137
+#30295-59999 Reserved
+60000 60000 HOx radical (OH+HO2)
+60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2)
+60002 60002 Passive Ozone
+60003 60003 NOx expressed as nitrogen NOx
+60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy
+60005 60005 Total inorganic chlorine Clx
+60006 60006 Total inorganic bromine Brx
+60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx
+60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx
+60009 60009 Lumped alkanes
+60010 60010 Lumped alkenes
+60011 60011 Lumped aromatic compounds
+60012 60012 Lumped terpenes
+60013 60013 Non-methane volatile organic compounds expressed as carbon
+60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon
+60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon
+60016 60016 Lumped oxygenated hydrocarbons
+60017 60017 NOx expressed as nitrogen dioxide (NO2)
+#60018-61999 Reserved
+62000 62000 Total aerosol
+62001 62001 Dust dry
+62002 62002 Water in ambient
+62003 62003 Ammonium dry
+62004 62004 Nitrate dry
+62005 62005 Nitric acid trihydrate
+62006 62006 Sulphate dry
+62007 62007 Mercury dry
+62008 62008 Sea salt dry
+62009 62009 Black carbon dry
+62010 62010 Particulate organic matter dry
+62011 62011 Primary particulate organic matter dry
+62012 62012 Secondary particulate organic matter dry
+62013 62013 Black carbon hydrophilic dry
+62014 62014 Black carbon hydrophobic dry
+62015 62015 Particulate organic matter hydrophilic dry
+62016 62016 Particulate organic matter hydrophobic dry
+62017 62017 Nitrate hydrophilic dry
+62018 62018 Nitrate hydrophobic dry
+#62019 Reserved
+62020 62020 Smoke - high absorption
+62021 62021 Smoke - low absorption
+62022 62022 Aerosol - high absorption
+62023 62023 Aerosol - low absorption
+62025 62025 Volcanic ash
+#62024-65534 Reserved
+65535 65535 Missing
diff --git a/definitions/grib2/tables/17/4.234.table b/definitions/grib2/tables/17/4.234.table
new file mode 100644
index 0000000..816541c
--- /dev/null
+++ b/definitions/grib2/tables/17/4.234.table
@@ -0,0 +1,21 @@
+# Code table 4.234 - Canopy cover fraction (to be used as partitioned parameter in product definition template 4.53 or 4.54)
+1 1 Crops, mixed farming 
+2 2 Short grass 
+3 3 Evergreen needleleaf trees 
+4 4 Deciduous needleleaf trees 
+5 5 Deciduous broadleaf trees 
+6 6 Evergreen broadleaf trees 
+7 7 Tall grass 
+8 8 Desert 
+9 9 Tundra 
+10 10 Irrigated crops 
+11 11 Semidesert 
+12 12 Ice caps and glaciers 
+13 13 Bogs and marshes 
+14 14 Inland water 
+15 15 Ocean 
+16 16 Evergreen shrubs 
+17 17 Deciduous shrubs 
+18 18 Mixed forest 
+19 19 Interrupted forest 
+20 20 Water and land mixtures 
diff --git a/definitions/grib2/tables/17/4.236.table b/definitions/grib2/tables/17/4.236.table
new file mode 100644
index 0000000..fbe093c
--- /dev/null
+++ b/definitions/grib2/tables/17/4.236.table
@@ -0,0 +1,8 @@
+# Code table 4.236 - Soil texture fraction (to be used as partitioned parameter in product definition template 4.53 or 4.54)
+1 1 Coarse 
+2 2 Medium 
+3 3 Medium-fine 
+4 4 Fine 
+5 5 Very-fine 
+6 6 Organic 
+7 7 Tropical-organic 
diff --git a/definitions/grib2/tables/17/4.240.table b/definitions/grib2/tables/17/4.240.table
new file mode 100644
index 0000000..ca335fe
--- /dev/null
+++ b/definitions/grib2/tables/17/4.240.table
@@ -0,0 +1,12 @@
+# Code table 4.240 - Type of distribution function
+0 0 No specific distribution function given 
+1 1 Delta functions with spatially variable concentration and fixed diameters Dl (p1) in metre
+2 2 Delta functions with spatially variable concentration and fixed masses Ml (p1) in kg 
+3 3 Gaussian (normal) distribution with spatially variable concentration and fixed mean diameter Dl(p1) and variance(p2) 
+4 4 Gaussian (normal) distribution with spatially variable concentration, mean diameter and variance 
+5 5 Log-normal distribution with spatially variable number density, mean diameter and variance 
+6 6 Log-normal distribution with spatially variable number density, mean diameter and fixed variance(p1) 
+7 7 Log-normal distribution with spatially variable number density and mass density and fixed variance(p1) and fixed particle density(p2)
+# 8-49151 Reserved 
+# 49152-65534 Reserved for local use 
+65535 65535 Missing value 
diff --git a/definitions/grib2/tables/17/4.241.table b/definitions/grib2/tables/17/4.241.table
new file mode 100644
index 0000000..a037b4b
--- /dev/null
+++ b/definitions/grib2/tables/17/4.241.table
@@ -0,0 +1,9 @@
+# Code table 4.241 - Coverage attributes
+0 0 Undefined 
+1 1 Unmodified 
+2 2 Snow covered 
+3 3 Flooded 
+4 4 Ice covered 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/17/4.242.table b/definitions/grib2/tables/17/4.242.table
new file mode 100644
index 0000000..083f88c
--- /dev/null
+++ b/definitions/grib2/tables/17/4.242.table
@@ -0,0 +1,7 @@
+# Code table 4.242 - Tile classification
+0 0 Reserved 
+1 1 Land use classes according to ESA-GlobCover GCV2009 
+2 2 Land use classes according to European Commission-Global Land Cover Project GLC2000 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/17/4.243.table b/definitions/grib2/tables/17/4.243.table
new file mode 100644
index 0000000..b390533
--- /dev/null
+++ b/definitions/grib2/tables/17/4.243.table
@@ -0,0 +1,43 @@
+# Code table 4.243 - Tile class
+0 0 Reserved 
+1 1 Evergreen broadleaved forest 
+2 2 Deciduous broadleaved closed forest 
+3 3 Deciduous broadleaved open forest 
+4 4 Evergreen needle-leaf forest 
+5 5 Deciduous needle-leaf forest 
+6 6 Mixed leaf trees 
+7 7 Freshwater flooded trees 
+8 8 Saline water flooded trees 
+9 9 Mosaic tree/natural vegetation 
+10 10 Burnt tree cover 
+11 11 Evergreen shrubs closed-open 
+12 12 Deciduous shrubs closed-open 
+13 13 Herbaceous vegetation closed-open 
+14 14 Sparse herbaceous or grass 
+15 15 Flooded shrubs or herbaceous 
+16 16 Cultivated and managed areas 
+17 17 Mosaic crop/tree/natural vegetation 
+18 18 Mosaic crop/shrub/grass 
+19 19 Bare areas 
+20 20 Water 
+21 21 Snow and ice 
+22 22 Artificial surface 
+23 23 Ocean 
+24 24 Irrigated croplands 
+25 25 Rainfed croplands 
+26 26 Mosaic cropland (50-70%) - vegetation (20-50%) 
+27 27 Mosaic vegetation (50-70%) - cropland (20-50%) 
+28 28 Closed broadleaved evergreen forest 
+29 29 Closed needle-leaved evergreen forest 
+30 30 Open needle-leaved deciduous forest 
+31 31 Mixed broadleaved and needle-leaved forest 
+32 32 Mosaic shrubland (50-70%) - grassland (20-50%) 
+33 33 Mosaic grassland (50-70%) - shrubland (20-50%) 
+34 34 Closed to open shrubland 
+35 35 Sparse vegetation 
+36 36 Closed to open forest regularly flooded 
+37 37 Closed forest or shrubland permanently flooded 
+38 38 Closed to open grassland regularly flooded 
+39 39 Undefined 
+# 40-32767 Reserved 
+# 32768- Reserved for local use 
diff --git a/definitions/grib2/tables/17/4.3.table b/definitions/grib2/tables/17/4.3.table
new file mode 100644
index 0000000..f205ea0
--- /dev/null
+++ b/definitions/grib2/tables/17/4.3.table
@@ -0,0 +1,22 @@
+# Code table 4.3 - Type of generating process
+0 0 Analysis 
+1 1 Initialization 
+2 2 Forecast 
+3 3 Bias corrected forecast 
+4 4 Ensemble forecast 
+5 5 Probability forecast 
+6 6 Forecast error 
+7 7 Analysis error 
+8 8 Observation 
+9 9 Climatological 
+10 10 Probability-weighted forecast 
+11 11 Bias-corrected ensemble forecast 
+12 12 Post-processed analysis 
+13 13 Post-processed forecast 
+14 14 Nowcast 
+15 15 Hindcast 
+16 16 Physical retrieval 
+17 17 Regression analysis 
+# 18-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.4.table b/definitions/grib2/tables/17/4.4.table
new file mode 100644
index 0000000..7087ebd
--- /dev/null
+++ b/definitions/grib2/tables/17/4.4.table
@@ -0,0 +1,17 @@
+# Code table 4.4 - Indicator of unit of time range
+0 m Minute 
+1 h Hour 
+2 D Day 
+3 M Month 
+4 Y Year 
+5 10Y Decade (10 years) 
+6 30Y Normal (30 years) 
+7 C Century (100 years) 
+# 8-9 Reserved 
+10 3h 3 hours 
+11 6h 6 hours 
+12 12h 12 hours 
+13 s Second 
+# 14-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.5.table b/definitions/grib2/tables/17/4.5.table
new file mode 100644
index 0000000..357c15e
--- /dev/null
+++ b/definitions/grib2/tables/17/4.5.table
@@ -0,0 +1,67 @@
+# Code table 4.5 - Fixed surface types and units
+0 0 Reserved 
+1 sfc Ground or water surface (-)
+2 2 Cloud base level (-)
+3 3 Level of cloud tops (-)
+4 4 Level of 0 degree C isotherm (-)
+5 5 Level of adiabatic condensation lifted from the surface (-)
+6 6 Maximum wind level (-)
+7 7 Tropopause (-)
+8 sfc Nominal top of the atmosphere (-)
+9 9 Sea bottom (-)
+10 10 Entire atmosphere (-)
+11 11 Cumulonimbus (CB) base (m)
+12 12 Cumulonimbus (CB) top (m)
+13 13 Lowest level where vertically integrated cloud cover exceeds the specified percentage (cloud base for a given percentage cloud cover) (%)
+14 14 Level of free convection (LFC)
+15 15 Convective condensation level (CCL)
+16 16 Level of neutral buoyancy or equilibrium level (LNB)
+# 17-19 Reserved 
+20 20 Isothermal level (K)
+# 21-99 Reserved 
+100 pl Isobaric surface (Pa)
+101 sfc Mean sea level 
+102 102 Specific altitude above mean sea level (m)
+103 sfc Specified height level above ground (m)
+104 104 Sigma level (sigma value)
+105 ml Hybrid level (-)
+106 sfc Depth below land surface (m)
+107 pt Isentropic (theta) level (K)
+108 108 Level at specified pressure difference from ground to level (Pa)
+109 pv Potential vorticity surface (K m2 kg-1 s-1)
+110 110 Reserved 
+111 111 Eta level (-)
+112 112 Reserved 
+113 113 Logarithmic hybrid level 
+114 114 Snow level (Numeric)
+# 115-116 Reserved 
+117 117 Mixed layer depth (m)
+118 hhl Hybrid height level (-)
+119 hpl Hybrid pressure level (-)
+# 120-149 Reserved 
+150 150 Generalized vertical height coordinate 
+151 151 Soil level (Numeric)
+# 152-159 Reserved 
+160 160 Depth below sea level (m)
+161 161 Depth below water surface (m)
+162 162 Lake or river bottom (-)
+163 163 Bottom of sediment layer (-)
+164 164 Bottom of thermally active sediment layer (-)
+165 165 Bottom of sediment layer penetrated by thermal wave (-)
+166 166 Mixing layer (-)
+167 167 Bottom of root zone (-)
+# 168-173 Reserved 
+174 174 Top surface of ice on sea, lake or river
+175 175 Top surface of ice, under snow cover, on sea, lake or river
+176 176 Bottom surface (underside) ice on sea, lake or river
+177 177 Deep soil (of indefinite depth)
+178 178 Reserved
+179 179 Top surface of glacier ice and inland ice
+180 180 Deep inland or glacier ice (of indefinite depth)
+181 181 Grid tile land fraction as a model surface
+182 182 Grid tile water fraction as a model surface
+183 183 Grid tile ice fraction on sea, lake or river as a model surface
+184 184 Grid tile glacier ice and inland ice fraction as a model surface
+# 185-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.6.table b/definitions/grib2/tables/17/4.6.table
new file mode 100644
index 0000000..b2dfeb4
--- /dev/null
+++ b/definitions/grib2/tables/17/4.6.table
@@ -0,0 +1,9 @@
+# Code table 4.6 - Type of ensemble forecast
+0 0 Unperturbed high-resolution control forecast 
+1 1 Unperturbed low-resolution control forecast 
+2 2 Negatively perturbed forecast 
+3 3 Positively perturbed forecast 
+4 4 Multi-model forecast 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.7.table b/definitions/grib2/tables/17/4.7.table
new file mode 100644
index 0000000..e0de0e1
--- /dev/null
+++ b/definitions/grib2/tables/17/4.7.table
@@ -0,0 +1,14 @@
+# Code table 4.7 - Derived forecast
+0 0 Unweighted mean of all members 
+1 1 Weighted mean of all members 
+2 2 Standard deviation with respect to cluster mean 
+3 3 Standard deviation with respect to cluster mean, normalized 
+4 4 Spread of all members 
+5 5 Large anomaly index of all members 
+6 6 Unweighted mean of the cluster members 
+7 7 Interquartile range (range between the 25th and 75th quantile) 
+8 8 Minimum of all ensemble members 
+9 9 Maximum of all ensemble members 
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.8.table b/definitions/grib2/tables/17/4.8.table
new file mode 100644
index 0000000..ad88303
--- /dev/null
+++ b/definitions/grib2/tables/17/4.8.table
@@ -0,0 +1,6 @@
+# Code table 4.8 - Clustering method
+0 0 Anomaly correlation 
+1 1 Root mean square 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.9.table b/definitions/grib2/tables/17/4.9.table
new file mode 100644
index 0000000..5878b5a
--- /dev/null
+++ b/definitions/grib2/tables/17/4.9.table
@@ -0,0 +1,9 @@
+# Code table 4.9 - Probability type
+0 0 Probability of event below lower limit 
+1 1 Probability of event above upper limit 
+2 2 Probability of event between lower and upper limits (the range includes the lower limit but not the upper limit) 
+3 3 Probability of event above lower limit 
+4 4 Probability of event below upper limit 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/4.91.table b/definitions/grib2/tables/17/4.91.table
new file mode 100644
index 0000000..44cf25f
--- /dev/null
+++ b/definitions/grib2/tables/17/4.91.table
@@ -0,0 +1,16 @@
+# Code table 4.91 - Type of Interval
+0 0 Smaller than first limit 
+1 1 Greater than second limit 
+2 2 Between first and second limit. The range includes the first limit but not the second limit 
+3 3 Greater than first limit 
+4 4 Smaller than second limit 
+5 5 Smaller or equal first limit 
+6 6 Greater or equal second limit 
+7 7 Between first and second. The range includes the first limit and the second limit 
+8 8 Greater or equal first limit 
+9 9 Smaller or equal second limit 
+10 10 Between first and second limit. The range includes the second limit but not the first limit 
+11 11 Equal to first limit 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/17/5.0.table b/definitions/grib2/tables/17/5.0.table
new file mode 100644
index 0000000..cd61837
--- /dev/null
+++ b/definitions/grib2/tables/17/5.0.table
@@ -0,0 +1,24 @@
+# Code table 5.0 - Data representation template number
+0 0 Grid point data - simple packing 
+1 1 Matrix value at grid point - simple packing 
+2 2 Grid point data - complex packing 
+3 3 Grid point data - complex packing and spatial differencing 
+4 4 Grid point data - IEEE floating point data 
+6 6 Grid point data - simple packing with pre-processing
+40 40 Grid point data - JPEG 2000 code stream format 
+41 41 Grid point data - Portable Network Graphics (PNG) 
+# 42-49 Reserved 
+50 50 Spectral data - simple packing 
+51 51 Spherical harmonics data - complex packing 
+# 52-60 Reserved 
+61 61 Grid point data - simple packing with logarithm pre-processing 
+# 62-199 Reserved 
+200 200 Run length packing with level values 
+# 201-49151 Reserved 
+# 49152-65534 Reserved for local use 
+40000 40000 JPEG2000 Packing
+40010 40010 PNG pacling
+50000 50000 Sperical harmonics ieee packing
+50001 50001 Second order packing
+50002 50002 Second order packing
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/17/5.1.table b/definitions/grib2/tables/17/5.1.table
new file mode 100644
index 0000000..854330c
--- /dev/null
+++ b/definitions/grib2/tables/17/5.1.table
@@ -0,0 +1,6 @@
+# Code table 5.1 - Type of original field values
+0 0 Floating point 
+1 1 Integer 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/5.2.table b/definitions/grib2/tables/17/5.2.table
new file mode 100644
index 0000000..40586a1
--- /dev/null
+++ b/definitions/grib2/tables/17/5.2.table
@@ -0,0 +1,8 @@
+# Code table 5.2 - Matrix coordinate value function definition
+0 0 Explicit coordinate values set 
+1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 
+# 2-10 Reserved 
+11 11 Geometric coordinates f(1)=C1, f(n)=C2*f(n-1)
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/5.3.table b/definitions/grib2/tables/17/5.3.table
new file mode 100644
index 0000000..c3b7b30
--- /dev/null
+++ b/definitions/grib2/tables/17/5.3.table
@@ -0,0 +1,7 @@
+# Code table 5.3 - Matrix coordinate parameter
+1 1 Direction degrees true 
+2 2 Frequency (s-1) 
+3 3 Radial number (2pi/lambda) (m-1) 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/5.4.table b/definitions/grib2/tables/17/5.4.table
new file mode 100644
index 0000000..8121c18
--- /dev/null
+++ b/definitions/grib2/tables/17/5.4.table
@@ -0,0 +1,6 @@
+# Code table 5.4 - Group splitting method
+0 0 Row by row splitting 
+1 1 General group splitting 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/5.40.table b/definitions/grib2/tables/17/5.40.table
new file mode 100644
index 0000000..b9bad2c
--- /dev/null
+++ b/definitions/grib2/tables/17/5.40.table
@@ -0,0 +1,5 @@
+# Code table 5.40 - Type of compression
+0 0 Lossless 
+1 1 Lossy 
+# 2-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/5.40000.table b/definitions/grib2/tables/17/5.40000.table
new file mode 100644
index 0000000..1eef7c7
--- /dev/null
+++ b/definitions/grib2/tables/17/5.40000.table
@@ -0,0 +1,5 @@
+# Code Table 5.40: Type of Compression
+0 0 Lossless
+1 1 Lossy
+#2-254 Reserved
+255 255 Missing
diff --git a/definitions/grib2/tables/17/5.5.table b/definitions/grib2/tables/17/5.5.table
new file mode 100644
index 0000000..3ef3eb0
--- /dev/null
+++ b/definitions/grib2/tables/17/5.5.table
@@ -0,0 +1,7 @@
+# Code table 5.5 - Missing value management for complex packing
+0 0 No explicit missing values included within data values 
+1 1 Primary missing values included within data values 
+2 2 Primary and secondary missing values included within data values 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/5.50002.table b/definitions/grib2/tables/17/5.50002.table
new file mode 100644
index 0000000..10c243c
--- /dev/null
+++ b/definitions/grib2/tables/17/5.50002.table
@@ -0,0 +1,19 @@
+# second order packing modes table
+
+1 0 no boustrophedonic
+1 1 boustrophedonic
+2 0 Reserved
+2 1 Reserved
+3 0 Reserved
+3 1 Reserved
+4 0 Reserved
+4 1 Reserved
+5 0 Reserved
+5 1 Reserved
+6 0 Reserved
+6 1 Reserved
+7 0 Reserved
+7 1 Reserved
+8 0 Reserved
+8 1 Reserved
+
diff --git a/definitions/grib2/tables/17/5.6.table b/definitions/grib2/tables/17/5.6.table
new file mode 100644
index 0000000..6d51778
--- /dev/null
+++ b/definitions/grib2/tables/17/5.6.table
@@ -0,0 +1,7 @@
+# Code table 5.6 - Order of spatial differencing
+0 0 Reserved 
+1 1 First-order spatial differencing 
+2 2 Second-order spatial differencing 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/5.7.table b/definitions/grib2/tables/17/5.7.table
new file mode 100644
index 0000000..5ab7800
--- /dev/null
+++ b/definitions/grib2/tables/17/5.7.table
@@ -0,0 +1,7 @@
+# Code table 5.7 - Precision of floating-point numbers
+0 0 Reserved 
+1 1 IEEE 32-bit (I=4 in section 7) 
+2 2 IEEE 64-bit (I=8 in section 7) 
+3 3 IEEE 128-bit (I=16 in section 7) 
+# 4-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/17/6.0.table b/definitions/grib2/tables/17/6.0.table
new file mode 100644
index 0000000..2a29aa2
--- /dev/null
+++ b/definitions/grib2/tables/17/6.0.table
@@ -0,0 +1,6 @@
+# Code table 6.0 - Bit map indicator
+0 0 A bit map applies to this product and is specified in this Section 
+1 1  A bit map pre-determined by the originating/generating centre applies to this product and is not specified in this Section
+# 1-253 A bit map predetermined by the originating/generating centre applies to this product and is not specified in this Section 
+254 254 A bit map defined previously in the same GRIB message applies to this product 
+255 255 A bit map does not apply to this product 
diff --git a/definitions/grib2/tables/17/stepType.table b/definitions/grib2/tables/17/stepType.table
new file mode 100644
index 0000000..d88e441
--- /dev/null
+++ b/definitions/grib2/tables/17/stepType.table
@@ -0,0 +1,4 @@
+# CODE TABLE Step Type
+
+0 instant  Instant
+1 interval Interval
diff --git a/definitions/grib2/tables/5/4.2.10.191.table b/definitions/grib2/tables/5/4.2.10.191.table
index e69de29..fa81ada 100644
--- a/definitions/grib2/tables/5/4.2.10.191.table
+++ b/definitions/grib2/tables/5/4.2.10.191.table
@@ -0,0 +1 @@
+# empty file
diff --git a/definitions/grib2/template.3.110.def b/definitions/grib2/template.3.110.def
index 082e596..1b1902f 100644
--- a/definitions/grib2/template.3.110.def
+++ b/definitions/grib2/template.3.110.def
@@ -29,7 +29,7 @@ unsigned[4] longitudeOfTangencyPoint  : dump ;
 
 alias Lo1  = longitudeOfTangencyPoint;
 #  Resolution and component flag
-flags[1] resolutionAndComponentFlag 'grib2/tables/[tablesVersion]/3.3.table' : dump ;
+flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump ;
 
 #  Dx - X-direction grid length in units of 10 -3 m as measured at the point of the axis
 unsigned[4] Dx  : dump ;
diff --git a/definitions/grib2/template.3.140.def b/definitions/grib2/template.3.140.def
index e6cfc04..4a9cb9c 100644
--- a/definitions/grib2/template.3.140.def
+++ b/definitions/grib2/template.3.140.def
@@ -41,7 +41,7 @@ signed[4] centralLongitudeInMicrodegrees  : dump;
 alias centralLongitude=centralLongitudeInMicrodegrees;
 
 #  Resolution and component flag
-flags[1] resolutionAndComponentFlag 'grib2/tables/[tablesVersion]/3.3.table' : dump ;
+flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump ;
 
 #  Dx - X-direction grid length in millimetres
 unsigned[4] xDirectionGridLengthInMillimetres  : dump ;
diff --git a/definitions/grib2/template.3.20.def b/definitions/grib2/template.3.20.def
index c5d08df..050882d 100644
--- a/definitions/grib2/template.3.20.def
+++ b/definitions/grib2/template.3.20.def
@@ -37,7 +37,7 @@ alias Lo1 =  longitudeOfFirstGridPoint;
 
 #  Resolution and component flag
 # NOTE 1 NOT FOUND
-flags[1] resolutionAndComponentFlag 'grib2/tables/[tablesVersion]/3.3.table' : dump;
+flags[1] resolutionAndComponentFlags 'grib2/tables/[tablesVersion]/3.3.table' : dump;
 
 #  LaD - Latitude where Dx and Dy are specified
 signed[4] LaD  : edition_specific;
diff --git a/definitions/grib2/template.3.gaussian.def b/definitions/grib2/template.3.gaussian.def
index eb9760d..bf9040d 100755
--- a/definitions/grib2/template.3.gaussian.def
+++ b/definitions/grib2/template.3.gaussian.def
@@ -2,7 +2,7 @@
 #
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-# 
+#
 # In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
diff --git a/definitions/grib2/template.3.stretching.def b/definitions/grib2/template.3.stretching.def
index c52a067..8868c4f 100755
--- a/definitions/grib2/template.3.stretching.def
+++ b/definitions/grib2/template.3.stretching.def
@@ -24,4 +24,5 @@ meta  geography.longitudeOfStretchingPoleInDegrees
 unsigned[4] stretchingFactorScaled  : edition_specific,no_copy; 
 
 meta  geography.stretchingFactor
-      scale(stretchingFactorScaled,oneConstant,grib2divider) : dump;
\ No newline at end of file
+      scale(stretchingFactorScaled,oneConstant,grib2divider) : dump;
+
diff --git a/definitions/grib2/template.4.57.def b/definitions/grib2/template.4.57.def
new file mode 100644
index 0000000..38b15a9
--- /dev/null
+++ b/definitions/grib2/template.4.57.def
@@ -0,0 +1,13 @@
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+# TEMPLATE 4.57, analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function
+
+include "grib2/template.4.parameter_chemical_distribution.def";
+include "grib2/template.4.point_in_time.def";
+include "grib2/template.4.horizontal.def";
diff --git a/definitions/grib2/template.4.7.def b/definitions/grib2/template.4.7.def
index 401b687..a952a7c 100644
--- a/definitions/grib2/template.4.7.def
+++ b/definitions/grib2/template.4.7.def
@@ -10,5 +10,5 @@
 # TEMPLATE 4.7, Analysis or forecast error at a horizontal level or in a horizontal layer at a point in time
 # Same as 4.0 Should not be used
 
-include "grib2/template.4.0.def" 
+include "grib2/template.4.0.def"
 
diff --git a/definitions/grib2/template.4.eps.def b/definitions/grib2/template.4.eps.def
index 482b22d..7bcb6d4 100644
--- a/definitions/grib2/template.4.eps.def
+++ b/definitions/grib2/template.4.eps.def
@@ -20,11 +20,13 @@ alias number=perturbationNumber;
 unsigned[1] numberOfForecastsInEnsemble  : dump;
 alias totalNumber=numberOfForecastsInEnsemble;
 
-#  Rules for TIGGE and S2S
+#  Rules for TIGGE, S2S and UERRA
 if (productionStatusOfProcessedData == 4 ||
     productionStatusOfProcessedData == 5 ||
     productionStatusOfProcessedData == 6 ||
-    productionStatusOfProcessedData == 7)
+    productionStatusOfProcessedData == 7 ||
+    productionStatusOfProcessedData == 8 ||
+    productionStatusOfProcessedData == 9)
 {
     alias mars.number=perturbationNumber;
 }
diff --git a/definitions/grib2/template.4.parameter_chemical.def b/definitions/grib2/template.4.parameter_chemical.def
index 5a2b89c..94096ba 100644
--- a/definitions/grib2/template.4.parameter_chemical.def
+++ b/definitions/grib2/template.4.parameter_chemical.def
@@ -13,28 +13,27 @@ label "Parameter information";
 codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir): dump;
 
 #  Parameter number
-codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir)  : dump;
+codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump;
 meta parameterUnits codetable_units(parameterNumber) : dump;
 meta parameterName  codetable_title(parameterNumber) : dump;
 
 # Atmospheric chemical or physical constitutent type
-codetable[2] constituentType ('4.230.table',masterDir,localDir)  : dump;
+codetable[2] constituentType ('4.230.table',masterDir,localDir) : dump;
 
 #  Type of generating process
-codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir)  : dump;
+codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump;
 
-#  Background generating process identifier
-# (defined by originating centre)
+#  Background generating process identifier (defined by originating centre)
 unsigned[1] backgroundProcess = 255 : edition_specific;
 alias backgroundGeneratingProcessIdentifier=backgroundProcess;
 
 #  Analysis or forecast generating processes identifier
 # (defined by originating centre)
-unsigned[1] generatingProcessIdentifier  : dump;
+unsigned[1] generatingProcessIdentifier : dump;
 
 #  Hours of observational data cut-off after reference time
 # NOTE 1 NOT FOUND
-unsigned[2] hoursAfterDataCutoff = missing()  : edition_specific,can_be_missing;
+unsigned[2] hoursAfterDataCutoff = missing() : edition_specific,can_be_missing;
 alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff;
 
 #  Minutes of observational data cut-off after reference time
@@ -42,11 +41,10 @@ unsigned[1]  minutesAfterDataCutoff = missing() : edition_specific,can_be_missin
 alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
-codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
+codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump;
 codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
 
 #  Forecast time in units defined by indicatorOfUnitOfTimeRange
-unsigned[4] startStep  : dump;
+signed[4] startStep : dump;
 
 alias forecastTime=startStep;
-
diff --git a/definitions/grib2/template.4.parameter_chemical_distribution.def b/definitions/grib2/template.4.parameter_chemical_distribution.def
new file mode 100644
index 0000000..5bbf95f
--- /dev/null
+++ b/definitions/grib2/template.4.parameter_chemical_distribution.def
@@ -0,0 +1,65 @@
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+label "Parameter information";
+
+#  Parameter category
+codetable[1] parameterCategory ('4.1.[discipline:l].table',masterDir,localDir): dump;
+
+#  Parameter number
+codetable[1] parameterNumber ('4.2.[discipline:l].[parameterCategory:l].table',masterDir,localDir) : dump;
+meta parameterUnits codetable_units(parameterNumber) : dump;
+meta parameterName  codetable_title(parameterNumber) : dump;
+
+# Atmospheric chemical or physical constitutent type
+codetable[2] constituentType ('4.230.table',masterDir,localDir) : dump;
+
+# Number of mode(N) of distribution
+unsigned[2] numberOfModeOfDistribution : dump;
+
+# Mode number (l)
+unsigned[2] modeNumber : dump;
+
+# Type of distribution function
+codetable[2] typeOfDistributionFunction ('4.240.table',masterDir,localDir) : dump;
+
+# Number of following function parameters (Np), defined by type given in octet 18-19
+unsigned[1] numberOfDistributionFunctionParameters : dump;
+alias NP = numberOfDistributionFunctionParameters;
+
+listOfDistributionFunctionParameter list(numberOfDistributionFunctionParameters) {
+    signed[1]   scaleFactorOfDistributionFunctionParameter = missing() : can_be_missing,dump;
+    unsigned[4] scaledValueOfDistributionFunctionParameter = missing() : can_be_missing,dump;
+}
+
+#  Type of generating process
+codetable[1] typeOfGeneratingProcess ('4.3.table',masterDir,localDir) : dump;
+
+#  Background generating process identifier (defined by originating centre)
+unsigned[1] backgroundProcess = 255 : edition_specific;
+alias backgroundGeneratingProcessIdentifier=backgroundProcess;
+
+#  Analysis or forecast generating processes identifier
+# (defined by originating centre)
+unsigned[1] generatingProcessIdentifier : dump;
+
+#  Hours of observational data cut-off after reference time
+unsigned[2] hoursAfterDataCutoff = missing() : edition_specific,can_be_missing;
+alias hoursAfterReferenceTimeOfDataCutoff=hoursAfterDataCutoff;
+
+#  Minutes of observational data cut-off after reference time
+unsigned[1]  minutesAfterDataCutoff = missing() : edition_specific,can_be_missing;
+alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
+
+#  Indicator of unit of time range
+codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump;
+codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+
+#  Forecast time in units defined by previous octet (GRIB-29: supports negative forecast time)
+signed[4] forecastTime  : dump;
diff --git a/definitions/grib2/template.4.percentile.def b/definitions/grib2/template.4.percentile.def
index f020c31..8bf41bd 100755
--- a/definitions/grib2/template.4.percentile.def
+++ b/definitions/grib2/template.4.percentile.def
@@ -11,4 +11,4 @@ label "Percentile forecast";
 
 #  Percentile value
 # (from 100% to 0%)
-unsigned[1] percentileValue  : dump;
\ No newline at end of file
+unsigned[1] percentileValue  : dump;
diff --git a/definitions/grib2/template.5.40000.def b/definitions/grib2/template.5.40000.def
index 9a67b8d..442b06f 100644
--- a/definitions/grib2/template.5.40000.def
+++ b/definitions/grib2/template.5.40000.def
@@ -7,4 +7,5 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-include "grib2/template.5.40.def"
\ No newline at end of file
+include "grib2/template.5.40.def"
+
diff --git a/definitions/grib2/template.7.1.def b/definitions/grib2/template.7.1.def
index 3d20c9a..44cd932 100644
--- a/definitions/grib2/template.7.1.def
+++ b/definitions/grib2/template.7.1.def
@@ -39,4 +39,5 @@ meta unpackedError simple_packing_error(zero,binaryScaleFactor,decimalScaleFacto
 
 alias data.packedValues = codedValues;
 
-template statistics "common/statistics_grid.def";
\ No newline at end of file
+template statistics "common/statistics_grid.def";
+
diff --git a/definitions/grib2/template.7.40010.def b/definitions/grib2/template.7.40010.def
index 1071d0e..0674ce1 100644
--- a/definitions/grib2/template.7.40010.def
+++ b/definitions/grib2/template.7.40010.def
@@ -7,4 +7,5 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-include "grib2/template.7.41.def"
\ No newline at end of file
+include "grib2/template.7.41.def"
+
diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def
index 8760313..56d8cf4 100644
--- a/definitions/grib2/units.def
+++ b/definitions/grib2/units.def
@@ -24,6 +24,17 @@
 	 parameterCategory = 3 ;
 	 parameterNumber = 0 ;
 	}
+#10 metre wind gust since previous post-processing
+'m s**-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 22 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 is_uerra = 1 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfStatisticalProcessing = 2 ;
+	}
 #Specific rain water content
 'kg kg**-1' = {
 	 discipline = 0 ;
@@ -70,6 +81,28 @@
 	 parameterCategory = 2 ;
 	 parameterNumber = 37 ;
 	}
+#Maximum temperature at 2 metres since previous post-processing
+'K' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 is_uerra = 1 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfFirstFixedSurface = 103 ;
+	}
+#Minimum temperature at 2 metres since previous post-processing
+'K' = {
+	 discipline = 0 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 0 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfStatisticalProcessing = 3 ;
+	 typeOfFirstFixedSurface = 103 ;
+	 is_uerra = 1 ;
+	}
 #Ozone mass mixing ratio
 'kg kg**-1' = {
 	 discipline = 0 ;
@@ -88,7 +121,7 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 84 ;
 	}
-#Cloud cover
+#Fraction of cloud cover
 '(0 - 1)' = {
 	 discipline = 0 ;
 	 parameterCategory = 6 ;
@@ -108,11 +141,30 @@
 	 parameterCategory = 1 ;
 	 parameterNumber = 11 ;
 	}
+#Low cloud cover
+'%' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 3 ;
+	}
+#Medium cloud cover
+'%' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 4 ;
+	}
+#High cloud cover
+'%' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 5 ;
+	}
 #10 metre wind gust in the last 3 hours
 'm s**-1' = {
 	 discipline = 0 ;
 	 parameterCategory = 2 ;
 	 parameterNumber = 22 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaledValueOfFirstFixedSurface = 10 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -156,6 +208,24 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 27 ;
 	}
+#Unbalanced component of specific humidity
+'kg kg**-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 118 ;
+	}
+#Unbalanced component of specific cloud liquid water content
+'kg kg**-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 119 ;
+	}
+#Unbalanced component of specific cloud ice water content
+'kg kg**-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 120 ;
+	}
 #Soil moisture top 20 cm
 'kg m**-3' = {
 	 discipline = 2 ;
@@ -400,6 +470,15 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 9 ;
 	}
+#Surface air relative humidity
+'%' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 1 ;
+	 scaledValueOfFirstFixedSurface = 2 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	}
 #Apparent temperature
 'K' = {
 	 discipline = 0 ;
@@ -412,6 +491,129 @@
 	 parameterCategory = 4 ;
 	 parameterNumber = 2 ;
 	}
+#Cloud cover
+'%' = {
+	 discipline = 0 ;
+	 parameterCategory = 6 ;
+	 parameterNumber = 22 ;
+	}
+#Evaporation rate
+'kg m**-2 s**-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	}
+#Evaporation
+'kg m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#10 metre wind direction
+'Degree true' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	 scaledValueOfFirstFixedSurface = 10 ;
+	 scaleFactorOfFirstFixedSurface = 0 ;
+	 typeOfFirstFixedSurface = 103 ;
+	}
+#Direct short wave radiation flux
+'W m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	}
+#Diffuse short wave radiation flux
+'W m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 14 ;
+	}
+#Time-integrated surface direct short wave radiation flux
+'J m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 13 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Soil temperature
+'K' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 18 ;
+	}
+#Downward short-wave radiation flux, clear sky
+'W m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	}
+#Upward short-wave radiation flux, clear sky
+'W m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	}
+#Downward long-wave radiation flux, clear sky
+'W m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	}
+#Soil heat flux
+'W m**-2' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 26 ;
+	}
+#Percolation rate
+'kg m**-2 s**-1' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	}
+#Soil depth
+'m' = {
+	 discipline = 2 ;
+	 parameterCategory = 3 ;
+	 parameterNumber = 27 ;
+	}
+#Accumulated surface downward short-wave radiation flux, clear sky
+'J m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 52 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Accumulated surface upward short-wave radiation flux, clear sky
+'J m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 4 ;
+	 parameterNumber = 53 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Accumulated surface downward long-wave radiation flux, clear sky
+'J m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 5 ;
+	 parameterNumber = 8 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Percolation
+'kg m**-2' = {
+	 discipline = 1 ;
+	 parameterCategory = 0 ;
+	 parameterNumber = 16 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 177 ;
+	}
 #Cloudy brightness temperature
 'K' = {
 	 discipline = 3 ;
@@ -544,6 +746,12 @@
 	 parameterCategory = 0 ;
 	 parameterNumber = 3 ;
 	}
+#Wind direction
+'Degree true' = {
+	 discipline = 0 ;
+	 parameterCategory = 2 ;
+	 parameterNumber = 0 ;
+	}
 #Significant height of combined wind waves and swell
 'm' = {
 	 discipline = 10 ;
@@ -551,7 +759,7 @@
 	 parameterNumber = 3 ;
 	}
 #Mean wave direction
-'degrees' = {
+'Degree true' = {
 	 discipline = 10 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 14 ;
@@ -641,6 +849,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 typeOfStatisticalProcessing = 2 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -653,6 +862,7 @@
 	 discipline = 0 ;
 	 parameterCategory = 0 ;
 	 parameterNumber = 0 ;
+	 is_uerra = 0 ;
 	 typeOfStatisticalProcessing = 3 ;
 	 typeOfFirstFixedSurface = 103 ;
 	 scaleFactorOfFirstFixedSurface = 0 ;
@@ -1636,13 +1846,13 @@
 	 parameterNumber = 0 ;
 	}
 #Total ozone
-'Dobson' = {
+'DU' = {
 	 discipline = 0 ;
 	 parameterCategory = 14 ;
 	 parameterNumber = 0 ;
 	}
 #Total column integrated ozone
-'Dobson' = {
+'DU' = {
 	 discipline = 0 ;
 	 parameterCategory = 14 ;
 	 parameterNumber = 2 ;
diff --git a/definitions/mars/class.table b/definitions/mars/class.table
index 8887b79..4a11dbb 100644
--- a/definitions/mars/class.table
+++ b/definitions/mars/class.table
@@ -29,6 +29,7 @@
 28 j5 Japanese 55 year Reanalysis (JRA55)
 29 ur UERRA
 30 et CERA-SAT: ERA-CLIM2 coupled reanalysis of the satellite era
+31 c3 C3S: Copernicus Climate Change Service
 99 te Test
 100 at Austria
 101 be Belgium
diff --git a/definitions/mars/grib.enda.4i.def b/definitions/mars/grib.enda.4i.def
new file mode 100644
index 0000000..5dd97db
--- /dev/null
+++ b/definitions/mars/grib.enda.4i.def
@@ -0,0 +1,2 @@
+alias mars.number = perturbationNumber;
+alias mars.iteration = iterationNumber;
diff --git a/definitions/metar/boot.def b/definitions/metar/boot.def
index d6c3d13..8701e26 100644
--- a/definitions/metar/boot.def
+++ b/definitions/metar/boot.def
@@ -32,118 +32,118 @@ group identifier; non_alpha na;
 group g : dump; non_alpha na;
 
 if ( g is "COR" ) {
-		rename(g,cor);
-		alias isCorrection=one;
-		alias status=correction;
-		group g : dump; non_alpha na;
+    rename(g,cor);
+    alias isCorrection=one;
+    alias status=correction;
+    group g : dump; non_alpha na;
 }
 if (length(g) == 4) {
-		include "metar/cccc.def";
+    include "metar/cccc.def";
 } else {
-		if (g is "METAR") {
-				rename(g,metarTwice);
-				group g : dump; non_alpha na;
-				if (length(g) == 4) { include "metar/cccc.def"; }
-				else {
-						constant CCCC = "unknown";
-						constant coordinatesPresent = 0;
-				}
-		} else {
-				constant CCCC = "unknown";
-				constant coordinatesPresent = 0;
-		}
+        if (g is "METAR") {
+                rename(g,metarTwice);
+                group g : dump; non_alpha na;
+                if (length(g) == 4) { include "metar/cccc.def"; }
+                else {
+                    constant CCCC = "unknown";
+                    constant coordinatesPresent = 0;
+                }
+        } else {
+            constant CCCC = "unknown";
+            constant coordinatesPresent = 0;
+        }
 }
 
 alias ls.CCCC=CCCC;
 if (substr(g,6,1) is "Z" && is_integer(g,0,6) ) {
-		rename(g,YYGGgg);
-		modify YYGGgg : hidden;
-		group g : dump ; non_alpha na;
-		year=getenv("METAR_YEAR") : dump;
-		month=getenv("METAR_MONTH") : dump;
-		day = to_string(YYGGgg,0,2) : dump;
-		hour = to_string(YYGGgg,2,2) : dump;
-		minute = to_string(YYGGgg,4,2) : dump;
+    rename(g,YYGGgg);
+    modify YYGGgg : hidden;
+    group g : dump ; non_alpha na;
+    year=getenv("METAR_YEAR") : dump;
+    month=getenv("METAR_MONTH") : dump;
+    day = to_string(YYGGgg,0,2) : dump;
+    hour = to_string(YYGGgg,2,2) : dump;
+    minute = to_string(YYGGgg,4,2) : dump;
     meta dateTime  sprintf("%s-%s-%s %s:%s",year,month,day,hour,minute);
     alias ls.dateTime=dateTime;
 }
 
 
 if ( ! isCorrection && g is "COR" ) {
-		rename(g,cor);
-		alias status=correction;
-		alias isCorrection=one;
-		group g : dump; non_alpha na;
+    rename(g,cor);
+    alias status=correction;
+    alias isCorrection=one;
+    group g : dump; non_alpha na;
 }
 
 include "metar/wrong_delayed.def";
 
 if ( g is "NIL" ) {
-		rename(g,nil); group g : dump;
+        rename(g,nil); group g : dump;
 } else {
-		if (g is "AUTO") {
-				rename(g,auto);
-				alias isAuto=true;
-				group g : dump; non_alpha na;
-		}
-
-		include "metar/wind.def";
-		include "metar/horizontalVisibility.def";
-
-		if ( ! isCavok ) {
-				include "metar/present_weather.def";
-				include "metar/clouds.def";
-		}
-
-		include "metar/missing_field.def";
-		include "metar/temperature.def";
-		include "metar/qnh.def";
-		include "metar/colour.def";
-		include "metar/recent_weather.def";
-		include "metar/wind_shear.def";
-		include "metar/sea_state.def";
-		template runwayState "metar/runwayState.def";
-		include "metar/trend1.def";
-		include "metar/trend2.def";
-		include "metar/trend3.def";
-		include "metar/trend4.def";
+        if (g is "AUTO") {
+                rename(g,auto);
+                alias isAuto=true;
+                group g : dump; non_alpha na;
+        }
+
+        include "metar/wind.def";
+        include "metar/horizontalVisibility.def";
+
+        if ( ! isCavok ) {
+                include "metar/present_weather.def";
+                include "metar/clouds.def";
+        }
+
+        include "metar/missing_field.def";
+        include "metar/temperature.def";
+        include "metar/qnh.def";
+        include "metar/colour.def";
+        include "metar/recent_weather.def";
+        include "metar/wind_shear.def";
+        include "metar/sea_state.def";
+        template runwayState "metar/runwayState.def";
+        include "metar/trend1.def";
+        include "metar/trend2.def";
+        include "metar/trend3.def";
+        include "metar/trend4.def";
 
 }
 
 include "metar/remark.def";
 
 if (length(g) == 0) {
-		modify g : hidden;
+        modify g : hidden;
 } else {
-		if ( ! remarkPresent) {
-				rename(g,skippedGroup);
-				group g : dump; non_alpha na;
-				include "metar/colour.def";
-				include "metar/recent_weather.def";
-				include "metar/wind_shear.def";
-				include "metar/sea_state.def";
-				template runwayState "metar/runwayState.def";
-				include "metar/temperature.def";
-				include "metar/qnh.def";
-				if (!presentTrend1) {
-						include "metar/trend1.def";
-						include "metar/trend2.def";
-						include "metar/trend3.def";
-						include "metar/trend4.def";
-				}
-		}
-		include "metar/remark.def";
-		if ( ! remarkPresent) {
-				if ( length(g) == 0) {
-						modify g : hidden;
-				} else {
-						rename(g,unknownGroup) ;
-				}
-		}
-		group notDecoded("=") : dump;
-		if (remarkPresent) {
-				rename(notDecoded,remark);
-		}
+        if ( ! remarkPresent) {
+                rename(g,skippedGroup);
+                group g : dump; non_alpha na;
+                include "metar/colour.def";
+                include "metar/recent_weather.def";
+                include "metar/wind_shear.def";
+                include "metar/sea_state.def";
+                template runwayState "metar/runwayState.def";
+                include "metar/temperature.def";
+                include "metar/qnh.def";
+                if (!presentTrend1) {
+                        include "metar/trend1.def";
+                        include "metar/trend2.def";
+                        include "metar/trend3.def";
+                        include "metar/trend4.def";
+                }
+        }
+        include "metar/remark.def";
+        if ( ! remarkPresent) {
+                if ( length(g) == 0) {
+                        modify g : hidden;
+                } else {
+                        rename(g,unknownGroup) ;
+                }
+        }
+        group notDecoded("=") : dump;
+        if (remarkPresent) {
+                rename(notDecoded,remark);
+        }
 }
 ascii[1] endMark :read_only ;
 
@@ -155,4 +155,3 @@ meta md5Headers md5(startOfMessage,lengthOfMessage);
 
 alias ls.totalLength=totalLength;
 
-
diff --git a/definitions/metar/boot.flexible.def b/definitions/metar/boot.flexible.def
index 170cda6..9fe6764 100644
--- a/definitions/metar/boot.flexible.def
+++ b/definitions/metar/boot.flexible.def
@@ -32,114 +32,114 @@ group identifier; non_alpha na;
 group g : dump; non_alpha na;
 
 if ( g is "COR" ) {
-		rename(g,cor);
-		alias isCorrection=one;
-		alias status=correction;
-		group g : dump; non_alpha na;
+        rename(g,cor);
+        alias isCorrection=one;
+        alias status=correction;
+        group g : dump; non_alpha na;
 }
 if (length(g) == 4) {
-		include "metar/cccc.def";
+        include "metar/cccc.def";
 } else {
-		if (g is "METAR") {
-				rename(g,metarTwice);
-				group g : dump; non_alpha na;
-				if (length(g) == 4) { include "metar/cccc.def"; }
-				else {
-						constant CCCC = "unknown";
-						constant coordinatesPresent = 0;
-				}
-		} else {
-				constant CCCC = "unknown";
-				constant coordinatesPresent = 0;
-		}
+        if (g is "METAR") {
+                rename(g,metarTwice);
+                group g : dump; non_alpha na;
+                if (length(g) == 4) { include "metar/cccc.def"; }
+                else {
+                        constant CCCC = "unknown";
+                        constant coordinatesPresent = 0;
+                }
+        } else {
+                constant CCCC = "unknown";
+                constant coordinatesPresent = 0;
+        }
 }
 
 if (substr(g,6,1) is "Z" && is_integer(g,0,6) ) {
-		rename(g,YYGGgg);
-		modify YYGGgg : hidden;
-		group g : dump ; non_alpha na;
-		year=getenv("METAR_YEAR") : dump;
-		month=getenv("METAR_MONTH") : dump;
-		day = to_string(YYGGgg,0,2) : dump;
-		hour = to_string(YYGGgg,2,2) : dump;
-		minute = to_string(YYGGgg,4,2) : dump;
+        rename(g,YYGGgg);
+        modify YYGGgg : hidden;
+        group g : dump ; non_alpha na;
+        year=getenv("METAR_YEAR") : dump;
+        month=getenv("METAR_MONTH") : dump;
+        day = to_string(YYGGgg,0,2) : dump;
+        hour = to_string(YYGGgg,2,2) : dump;
+        minute = to_string(YYGGgg,4,2) : dump;
 }
 
 if ( ! isCorrection && g is "COR" ) {
-		rename(g,cor);
-		alias status=correction;
-		alias isCorrection=one;
-		group g : dump; non_alpha na;
+        rename(g,cor);
+        alias status=correction;
+        alias isCorrection=one;
+        group g : dump; non_alpha na;
 }
 
 include "metar/wrong_delayed.def";
 
 if ( g is "NIL" ) {
-		rename(g,nil); group g : dump;
+        rename(g,nil); group g : dump;
 } else {
-		if (g is "AUTO") {
-				rename(g,auto);
-				alias isAuto=true;
-				group g : dump; non_alpha na;
-		}
-
-		include "metar/wind.def";
-		include "metar/horizontalVisibility.def";
-
-		if ( ! isCavok ) {
-				include "metar/present_weather.def";
-				include "metar/clouds.def";
-		}
-
-		include "metar/missing_field.def";
-		include "metar/temperature.def";
-		include "metar/qnh.def";
-		include "metar/colour.def";
-		include "metar/recent_weather.def";
-		include "metar/wind_shear.def";
-		include "metar/sea_state.def";
-		template runwayState "metar/runwayState.def";
-		include "metar/trend1.def";
-		include "metar/trend2.def";
-		include "metar/trend3.def";
-		include "metar/trend4.def";
+        if (g is "AUTO") {
+                rename(g,auto);
+                alias isAuto=true;
+                group g : dump; non_alpha na;
+        }
+
+        include "metar/wind.def";
+        include "metar/horizontalVisibility.def";
+
+        if ( ! isCavok ) {
+                include "metar/present_weather.def";
+                include "metar/clouds.def";
+        }
+
+        include "metar/missing_field.def";
+        include "metar/temperature.def";
+        include "metar/qnh.def";
+        include "metar/colour.def";
+        include "metar/recent_weather.def";
+        include "metar/wind_shear.def";
+        include "metar/sea_state.def";
+        template runwayState "metar/runwayState.def";
+        include "metar/trend1.def";
+        include "metar/trend2.def";
+        include "metar/trend3.def";
+        include "metar/trend4.def";
 
 }
 
 include "metar/remark.def";
 
 if (length(g) == 0) {
-		modify g : hidden;
+        modify g : hidden;
 } else {
-		if ( ! remarkPresent) {
-				rename(g,skippedGroup);
-				group g : dump; non_alpha na;
-				include "metar/colour.def";
-				include "metar/recent_weather.def";
-				include "metar/wind_shear.def";
-				include "metar/sea_state.def";
-				template runwayState "metar/runwayState.def";
-				include "metar/temperature.def";
-				include "metar/qnh.def";
-				if (!presentTrend1) {
-						include "metar/trend1.def";
-						include "metar/trend2.def";
-						include "metar/trend3.def";
-						include "metar/trend4.def";
-				}
-		}
-		include "metar/remark.def";
-		if ( ! remarkPresent) {
-				if ( length(g) == 0) {
-						modify g : hidden;
-				} else {
-						rename(g,unknownGroup) ;
-				}
-		}
-		group notDecoded("=") : dump;
-		if (remarkPresent) {
-				rename(notDecoded,remark);
-		}
+        if ( ! remarkPresent) {
+                rename(g,skippedGroup);
+                group g : dump; non_alpha na;
+                include "metar/colour.def";
+                include "metar/recent_weather.def";
+                include "metar/wind_shear.def";
+                include "metar/sea_state.def";
+                template runwayState "metar/runwayState.def";
+                include "metar/temperature.def";
+                include "metar/qnh.def";
+                if (!presentTrend1) {
+                        include "metar/trend1.def";
+                        include "metar/trend2.def";
+                        include "metar/trend3.def";
+                        include "metar/trend4.def";
+                }
+        }
+        include "metar/remark.def";
+        if ( ! remarkPresent) {
+                if ( length(g) == 0) {
+                        modify g : hidden;
+                } else {
+                        rename(g,unknownGroup) ;
+                }
+        }
+        group notDecoded("=") : dump;
+        if (remarkPresent) {
+                rename(notDecoded,remark);
+        }
 }
 ascii[1] endMark :read_only ;
 
@@ -150,5 +150,3 @@ meta lengthOfMessage evaluate( endOfMessage-startOfMessage);
 meta md5Headers md5(startOfMessage,lengthOfMessage);
 
 alias ls.totalLength=totalLength;
-
-
diff --git a/definitions/metar/cccc.def b/definitions/metar/cccc.def
index 10bc07a..1701a05 100644
--- a/definitions/metar/cccc.def
+++ b/definitions/metar/cccc.def
@@ -1,12 +1,12 @@
     rename(g,CCCC);
-		modify CCCC : dump,json,xml;
+    modify CCCC : dump,json,xml;
     group g : dump ; non_alpha na;
     if (is_in_dict(CCCC,"metar/nsd_cccc.txt")) {
         constant coordinatesPresent=one : dump;
         latitudeSexagesimal=dict_search("metar/nsd_cccc.txt",CCCC,7) : string_type,hidden ;
         longitudeSexagesimal=dict_search("metar/nsd_cccc.txt",CCCC,8) : string_type,hidden ;
-				latitude = sexagesimal2decimal(latitudeSexagesimal) : dump,json;
-				longitude = sexagesimal2decimal(longitudeSexagesimal) : dump,json;
+        latitude = sexagesimal2decimal(latitudeSexagesimal) : dump,json;
+        longitude = sexagesimal2decimal(longitudeSexagesimal) : dump,json;
         elevation=dict_search("metar/nsd_cccc.txt",CCCC,11) : dump,json ;
         name=dict_search("metar/nsd_cccc.txt",CCCC,3) : string_type,dump,json ;
         country=dict_search("metar/nsd_cccc.txt",CCCC,5) : string_type,dump,json ;
diff --git a/definitions/metar/clouds.def b/definitions/metar/clouds.def
index 7f6237f..d046e22 100644
--- a/definitions/metar/clouds.def
+++ b/definitions/metar/clouds.def
@@ -3,60 +3,60 @@ if (substr(g,0,3) is "FEW" || substr(g,0,3) is "SCT" ||
 
     rename(g,clouds1);
     group g : dump; non_alpha na;
-		cloudsAbbreviation1=to_string(clouds1,0,3);
-		cloudsCode1=dict_search("metar/clouds.table",cloudsAbbreviation1,1);
-		cloudsTitle1=dict_search("metar/clouds.table",cloudsAbbreviation1,2) : string_type;
-		cloudsBaseCoded1=to_integer(clouds1,3,3);
-		meta cloudsBase1 evaluate(cloudsBaseCoded1 * 100 );
+    cloudsAbbreviation1=to_string(clouds1,0,3);
+    cloudsCode1=dict_search("metar/clouds.table",cloudsAbbreviation1,1);
+    cloudsTitle1=dict_search("metar/clouds.table",cloudsAbbreviation1,2) : string_type;
+    cloudsBaseCoded1=to_integer(clouds1,3,3);
+    meta cloudsBase1 evaluate(cloudsBaseCoded1 * 100 );
     if (substr(g,0,3) is "FEW" || substr(g,0,3) is "SCT" ||
         substr(g,0,3) is "BKN" || substr(g,0,3) is "OVC") {
           rename(g,clouds2);
           group g : dump; non_alpha na;
-				  cloudsAbbreviation2=to_string(clouds2,0,3);
-		      cloudsCode2=dict_search("metar/clouds.table",cloudsAbbreviation2,1);
-	      	cloudsTitle2=dict_search("metar/clouds.table",cloudsAbbreviation2,2) : string_type;
-		      cloudsBaseCoded2=to_integer(clouds2,3,3);
-				  meta cloudsBase2 evaluate(cloudsBaseCoded2 * 100 );
+          cloudsAbbreviation2=to_string(clouds2,0,3);
+          cloudsCode2=dict_search("metar/clouds.table",cloudsAbbreviation2,1);
+          cloudsTitle2=dict_search("metar/clouds.table",cloudsAbbreviation2,2) : string_type;
+          cloudsBaseCoded2=to_integer(clouds2,3,3);
+          meta cloudsBase2 evaluate(cloudsBaseCoded2 * 100 );
     }
     if (substr(g,0,3) is "FEW" || substr(g,0,3) is "SCT" ||
         substr(g,0,3) is "BKN" || substr(g,0,3) is "OVC") {
           rename(g,clouds3);
           group g : dump; non_alpha na;
-				  cloudsAbbreviation3=to_string(clouds3,0,3);
-		      cloudsCode3=dict_search("metar/clouds.table",cloudsAbbreviation3,1);
-	      	cloudsTitle3=dict_search("metar/clouds.table",cloudsAbbreviation3,2) : string_type;
-		      cloudsBaseCoded3=to_integer(clouds3,3,3);
-				  meta cloudsBase3 evaluate(cloudsBaseCoded3 * 100 );
+          cloudsAbbreviation3=to_string(clouds3,0,3);
+          cloudsCode3=dict_search("metar/clouds.table",cloudsAbbreviation3,1);
+          cloudsTitle3=dict_search("metar/clouds.table",cloudsAbbreviation3,2) : string_type;
+          cloudsBaseCoded3=to_integer(clouds3,3,3);
+          meta cloudsBase3 evaluate(cloudsBaseCoded3 * 100 );
     }
     if (substr(g,0,3) is "FEW" || substr(g,0,3) is "SCT" ||
         substr(g,0,3) is "BKN" || substr(g,0,3) is "OVC") {
           rename(g,clouds4);
           group g : dump; non_alpha na;
-				  cloudsAbbreviation4=to_string(clouds4,0,3);
-		      cloudsCode4=dict_search("metar/clouds.table",cloudsAbbreviation4,1);
-	      	cloudsTitle4=dict_search("metar/clouds.table",cloudsAbbreviation4,2) : string_type;
-		      cloudsBaseCoded4=to_integer(clouds4,3,3);
-				  meta cloudsBase4 evaluate(cloudsBaseCoded4 * 100 );
+          cloudsAbbreviation4=to_string(clouds4,0,3);
+          cloudsCode4=dict_search("metar/clouds.table",cloudsAbbreviation4,1);
+          cloudsTitle4=dict_search("metar/clouds.table",cloudsAbbreviation4,2) : string_type;
+          cloudsBaseCoded4=to_integer(clouds4,3,3);
+          meta cloudsBase4 evaluate(cloudsBaseCoded4 * 100 );
     }
 } else {
-		if ( g is "SKC"  || g is "CLR" ) {
-				rename(g,skyClear);
-				group g : dump; non_alpha na;
-		} else {
-				if ( substr(g,0,2) is "VV" && length(g)==5) {
-						rename(g,verticalVisibilityElement);
-						group g : dump; non_alpha na;
-						verticalVisibilityCoded=to_integer(verticalVisibilityElement,2,3);
-						meta verticalVisibility evaluate(verticalVisibilityCoded * 100);
-				}
-				if ( g is "NSC" ) {
-						rename(g,noSignificantClouds);
-						group g : dump; non_alpha na;
-				}
-				if ( g is "NCD" ) {
-						rename(g,noCloudsDetected);
-						group g : dump; non_alpha na;
-				}
-		}
+        if ( g is "SKC"  || g is "CLR" ) {
+                rename(g,skyClear);
+                group g : dump; non_alpha na;
+        } else {
+                if ( substr(g,0,2) is "VV" && length(g)==5) {
+                        rename(g,verticalVisibilityElement);
+                        group g : dump; non_alpha na;
+                        verticalVisibilityCoded=to_integer(verticalVisibilityElement,2,3);
+                        meta verticalVisibility evaluate(verticalVisibilityCoded * 100);
+                }
+                if ( g is "NSC" ) {
+                        rename(g,noSignificantClouds);
+                        group g : dump; non_alpha na;
+                }
+                if ( g is "NCD" ) {
+                        rename(g,noCloudsDetected);
+                        group g : dump; non_alpha na;
+                }
+        }
 }
 
diff --git a/eccodes.sublime-project b/eccodes.sublime-project
index b141dd9..e3f210b 100644
--- a/eccodes.sublime-project
+++ b/eccodes.sublime-project
@@ -7,12 +7,12 @@
     ], 
     "build_systems": [
         {
-            "working_dir": "${project_path}/../../build/grib_api", 
+            "working_dir": "${project_path}/../../build/eccodes", 
             "cmd": [
                 "make"
             ], 
             "file_regex": "([/\\w\\-\\.]+):(\\d+):(\\d+:)?", 
-            "name": "Build"
+            "name": "ecbuild"
         }
     ]
 }
diff --git a/eccodes_config.h.in b/eccodes_config.h.in
index d055a9c..21cd2b2 100644
--- a/eccodes_config.h.in
+++ b/eccodes_config.h.in
@@ -96,4 +96,15 @@
 
 #cmakedefine HAVE_NETCDF
 
+#cmakedefine HAVE_MEMFS
+
+#ifdef HAVE_MEMFS
+#undef ECCODES_DEFINITION_PATH
+#define ECCODES_DEFINITION_PATH "/MEMFS/definitions"
+#undef ECCODES_SAMPLES_PATH
+#define ECCODES_SAMPLES_PATH "/MEMFS/samples"
+#undef ECCODES_IFS_SAMPLES_PATH
+#define ECCODES_IFS_SAMPLES_PATH "/MEMFS/ifs_samples"
+#endif
+
 #endif /* eccodes_config_h */
diff --git a/examples/C/CMakeLists.txt b/examples/C/CMakeLists.txt
index feb50b9..e9b48ad 100644
--- a/examples/C/CMakeLists.txt
+++ b/examples/C/CMakeLists.txt
@@ -6,7 +6,7 @@ configure_file( include.ctest.sh.in  include.ctest.sh  @ONLY )
 execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/include.sh ${CMAKE_CURRENT_BINARY_DIR} )
 
 # Build the executables used by test scripts
-################################################
+########################################################################
 list( APPEND test_bins
       grib_nearest
       grib_set_bitmap
@@ -32,6 +32,7 @@ list( APPEND test_bins
       grib_iterator_bitmap
       large_grib1
       grib_clone
+      grib_copy_message
       grib_ensemble_index
       get_product_kind
       bufr_attributes
@@ -56,7 +57,7 @@ foreach( tool ${test_bins} )
 endforeach()
 
 # Now add each test (shell scripts)
-#################################################
+########################################################################
 list( APPEND tests
    grib_iterator
    grib_get_keys
@@ -67,6 +68,7 @@ list( APPEND tests
    grib_multi_write
    grib_precision
    grib_clone
+   grib_copy_message
    grib_set_pv
    grib_set_bitmap
    grib_list
@@ -90,19 +92,34 @@ list( APPEND tests
 )
 foreach( test ${tests} )
     ecbuild_add_test( TARGET eccodes_c_${test}
-                  TYPE       SCRIPT
-                  COMMAND    ${CMAKE_CURRENT_SOURCE_DIR}/${test}.sh
-                  TEST_DEPENDS eccodes_get_gribs eccodes_get_bufrs
+                      TYPE       SCRIPT
+                      COMMAND    ${CMAKE_CURRENT_SOURCE_DIR}/${test}.sh
+                      TEST_DEPENDS eccodes_download_gribs eccodes_download_bufrs
     )
 endforeach()
 
+########################################################################
+# Tests which are conditional
+if( ENABLE_EXTRA_TESTS AND HAVE_ECCODES_THREADS )
+    # This one only for POSIX threads
+    ecbuild_add_executable( TARGET    c_grib_pthreads
+                            NOINSTALL
+                            SOURCES   grib_pthreads.c
+                            LIBS      eccodes
+    )
+    ecbuild_add_test( TARGET eccodes_c_grib_pthreads
+                      TYPE       SCRIPT
+                      COMMAND    ${CMAKE_CURRENT_SOURCE_DIR}/grib_pthreads.sh
+    )
+endif()
+
 
-#############################################
+########################################################################
 # Tests with no script
-ecbuild_add_test( TARGET    eccodes_c_new_sample
-                  SOURCES   new_sample.c
-                  LIBS      eccodes
-                  ARGS      "out.grib"
-                  ENVIRONMENT "ECCODES_SAMPLES_PATH=${PROJECT_SOURCE_DIR}/samples" "ECCODES_DEFINITION_PATH=${PROJECT_SOURCE_DIR}/definitions"
+ecbuild_add_test(
+    TARGET    eccodes_c_new_sample
+    SOURCES   new_sample.c
+    LIBS      eccodes
+    ARGS      "out.grib"
+    ENVIRONMENT "ECCODES_SAMPLES_PATH=${PROJECT_SOURCE_DIR}/samples" "ECCODES_DEFINITION_PATH=${PROJECT_SOURCE_DIR}/definitions"
 )
-
diff --git a/examples/C/bufr_keys_iterator.c b/examples/C/bufr_keys_iterator.c
index aa77806..9dc9022 100644
--- a/examples/C/bufr_keys_iterator.c
+++ b/examples/C/bufr_keys_iterator.c
@@ -19,7 +19,6 @@
 
 #include "eccodes.h"
 
-#define MAX_KEY_LEN  255
 #define MAX_VAL_LEN  1024
 
 void usage(char* prog) {
@@ -40,11 +39,11 @@ int main(int argc,char* argv[])
     /* To skip certain keys use the combination of these flags:
 
        unsigned long key_iterator_filter_flags=
-            CODES_KEYS_ITERATOR_SKIP_READ_ONLY ||
-            CODES_KEYS_ITERATOR_SKIP_COMPUTED || 
-            CODES_KEYS_ITERATOR_SKIP_CODED ||
-            CODES_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC ||
-            CODES_KEYS_ITERATOR_SKIP_DUPLICATES ||
+            CODES_KEYS_ITERATOR_SKIP_READ_ONLY |
+            CODES_KEYS_ITERATOR_SKIP_COMPUTED |
+            CODES_KEYS_ITERATOR_SKIP_CODED |
+            CODES_KEYS_ITERATOR_SKIP_EDITION_SPECIFIC |
+            CODES_KEYS_ITERATOR_SKIP_DUPLICATES |
             CODES_KEYS_ITERATOR_SKIP_FUNCTION; */
 
     unsigned long key_iterator_filter_flags=CODES_KEYS_ITERATOR_ALL_KEYS;
diff --git a/examples/C/bufr_read_temp.c b/examples/C/bufr_read_temp.c
index f8592cb..e2ce7dc 100644
--- a/examples/C/bufr_read_temp.c
+++ b/examples/C/bufr_read_temp.c
@@ -95,7 +95,7 @@ int main(int argc,char* argv[])
         CODES_CHECK(codes_get_double_array(h,key_name,sigt_pres,&len),0);
 
         /* Get geopotential */
-        sprintf(key_name,"/verticalSoundingSignificance=4/geopotential");
+        sprintf(key_name,"/verticalSoundingSignificance=4/nonCoordinateGeopotential");
 
         /* Check the size*/
         CODES_CHECK(codes_get_size(h,key_name,&len),0);
diff --git a/examples/C/get_product_kind.sh b/examples/C/get_product_kind.sh
index adc108c..b2645c5 100755
--- a/examples/C/get_product_kind.sh
+++ b/examples/C/get_product_kind.sh
@@ -16,6 +16,6 @@ fTmp=${label}.tmp
 # Create a file containing both GRIB and BUFR messages
 cat ${data_dir}/sample.grib2 ${data_dir}/bufr/syno_multi.bufr >$fTmp
 
-${examples_dir}c_get_product_kind $fTmp >/dev/null 2>&1
+${examples_dir}c_get_product_kind $fTmp
 
 rm -f $fTmp
diff --git a/examples/C/grib_copy_message.c b/examples/C/grib_copy_message.c
new file mode 100644
index 0000000..d87a424
--- /dev/null
+++ b/examples/C/grib_copy_message.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+/*
+ * C Implementation: grib_copy_message
+ *
+ * Description: How to copy a GRIB message in memory
+ *
+ */
+#include <stdio.h>
+#include "eccodes.h"
+#include <assert.h>
+
+void usage(char *app)
+{
+    fprintf(stderr,"Usage is: %s input_file ouput_file\n", app);
+}
+
+int main(int argc, char *argv[])
+{
+    FILE *in = NULL;
+    codes_handle *source_handle = NULL;
+    int err = 0;
+
+    if (argc != 3) {
+        usage(argv[0]);
+        return 1;
+    }
+
+    in = fopen(argv[1],"r");
+
+    if (!in) {
+        perror("ERROR: unable to input file");
+        return 1;
+    }
+
+    /* loop over the GRIB messages in the source */
+    while ((source_handle = codes_handle_new_from_file(0, in, PRODUCT_GRIB, &err))!=NULL)
+    {
+        size_t totalLength = 0, size = 0;
+        const void* buffer = NULL;
+        codes_handle* new_handle = NULL;
+
+        CODES_CHECK(grib_get_message_size(source_handle,&totalLength),0);
+        buffer=(unsigned char*)malloc(totalLength*sizeof(char));
+
+        CODES_CHECK(codes_get_message(source_handle, &buffer, &size),0);
+        assert(size == totalLength);
+
+        new_handle = grib_handle_new_from_message(0, buffer, totalLength);
+
+        if (new_handle == NULL) {
+            perror("ERROR: could not create GRIB handle from message");
+            return 1;
+        }
+        CODES_CHECK(codes_set_long(new_handle, "hour", 18),0);
+        CODES_CHECK(codes_write_message(new_handle, argv[2], "w"),0);
+
+        codes_handle_delete(new_handle);
+        codes_handle_delete(source_handle);
+    }
+    fclose(in);
+
+    return 0;
+}
diff --git a/examples/C/grib_copy_message.sh b/examples/C/grib_copy_message.sh
new file mode 100755
index 0000000..2a7d94d
--- /dev/null
+++ b/examples/C/grib_copy_message.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+
+. ./include.sh
+
+TEMP=c_grib_copy_message.grib
+
+INPUT=${data_dir}/reduced_gaussian_pressure_level.grib1
+${examples_dir}c_grib_copy_message ${INPUT} ${TEMP}  > /dev/null
+${tools_dir}grib_compare -b hour ${INPUT} ${TEMP}
+
+INPUT=${data_dir}/sample.grib2
+${examples_dir}c_grib_copy_message ${INPUT} ${TEMP}  > /dev/null
+${tools_dir}grib_compare -b hour ${INPUT} ${TEMP}
+
+rm -f ${TEMP}
diff --git a/examples/C/grib_get_keys.sh b/examples/C/grib_get_keys.sh
index 1a8524a..d844e48 100755
--- a/examples/C/grib_get_keys.sh
+++ b/examples/C/grib_get_keys.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_get_keys > /dev/null
+${examples_dir}c_grib_get_keys
 
diff --git a/examples/C/grib_keys_iterator.c b/examples/C/grib_keys_iterator.c
index 90a9c96..afe4f9f 100644
--- a/examples/C/grib_keys_iterator.c
+++ b/examples/C/grib_keys_iterator.c
@@ -26,18 +26,18 @@
 
 #include "eccodes.h"
 
-#define MAX_KEY_LEN  255
 #define MAX_VAL_LEN  1024
 
 static void usage(char* progname);
 
 int main(int argc, char *argv[])
 {
-    /* To skip read only and not coded keys
-     unsigned long key_iterator_filter_flags=CODES_KEYS_ITERATOR_SKIP_READ_ONLY ||
-     CODES_KEYS_ITERATOR_SKIP_COMPUTED;
+    /* To skip read only and computed keys
+     unsigned long key_iterator_filter_flags=CODES_KEYS_ITERATOR_SKIP_READ_ONLY |
+                                             CODES_KEYS_ITERATOR_SKIP_COMPUTED;
      */
-    unsigned long key_iterator_filter_flags=CODES_KEYS_ITERATOR_ALL_KEYS;
+    unsigned long key_iterator_filter_flags = CODES_KEYS_ITERATOR_ALL_KEYS |
+                                              CODES_KEYS_ITERATOR_SKIP_DUPLICATES;
 
     /* Choose a namespace. E.g. "ls", "time", "parameter", "geography", "statistics" */
     char* name_space="ls";
diff --git a/examples/C/grib_keys_iterator.sh b/examples/C/grib_keys_iterator.sh
index 6f8b15f..38e16d0 100755
--- a/examples/C/grib_keys_iterator.sh
+++ b/examples/C/grib_keys_iterator.sh
@@ -13,3 +13,4 @@ ${examples_dir}c_grib_keys_iterator ${data_dir}/reduced_latlon_surface.grib1 > /
 
 ${examples_dir}c_grib_keys_iterator ${data_dir}/regular_gaussian_model_level.grib1 > /dev/null
 
+${examples_dir}c_grib_keys_iterator ${data_dir}/mixed.grib > /dev/null
diff --git a/examples/C/grib_list.sh b/examples/C/grib_list.sh
index ccd196d..b0a2277 100755
--- a/examples/C/grib_list.sh
+++ b/examples/C/grib_list.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_list > /dev/null
+${examples_dir}c_grib_list
 
diff --git a/examples/C/grib_precision.sh b/examples/C/grib_precision.sh
index 16f22a7..0318167 100755
--- a/examples/C/grib_precision.sh
+++ b/examples/C/grib_precision.sh
@@ -9,6 +9,6 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_precision > /dev/null
+${examples_dir}c_grib_precision
 
 rm -f out.precision.grib1
diff --git a/examples/C/grib_pthreads.c b/examples/C/grib_pthreads.c
new file mode 100644
index 0000000..5c08d2c
--- /dev/null
+++ b/examples/C/grib_pthreads.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <pthread.h>
+
+#include "eccodes.h"
+#define NUM_THREADS 4
+
+static void* process_grib(void* threadID)
+{
+    const long tid = (long)threadID;
+    size_t str_len = 20;
+    long indicatorOfUnitOfTimeRange = 1, step = 0;
+    char mystring[100];
+    double* values = NULL;
+    size_t values_len = 0;
+    double min=0,max=0;
+    double pv[4]={1,2,3,4};
+    const size_t pvsize=4;
+
+    codes_handle* h = codes_handle_new_from_samples(0, "regular_ll_pl_grib2");
+    assert(h);
+    printf("Thread %ld running\n", tid);
+
+    CODES_CHECK(codes_set_long(h,"indicatorOfUnitOfTimeRange", indicatorOfUnitOfTimeRange),0);
+    CODES_CHECK(codes_set_string(h,"indicatorOfUnitOfTimeRange", "s", &str_len),0);
+    CODES_CHECK(codes_set_string(h,"stepUnits", "s", &str_len),0);
+    CODES_CHECK(codes_set_long(h, "endStep", 86400), 0);
+    CODES_CHECK(codes_set_long(h,"centre", 80),0);
+
+    CODES_CHECK(codes_get_long(h,"endStep", &step),0);
+    CODES_CHECK(codes_get_string(h, "indicatorOfUnitOfTimeRange", mystring, &str_len),0);
+
+    CODES_CHECK(codes_set_long(h,"PVPresent", 1),0);
+    CODES_CHECK(codes_set_double_array(h, "pv", pv, pvsize),0);
+
+    CODES_CHECK(codes_get_size(h,"values",&values_len),0);
+    values = (double*)malloc(values_len*sizeof(double));
+    CODES_CHECK(codes_get_double_array(h, "values", values, &values_len),0);
+    free(values);
+
+    CODES_CHECK(codes_get_double(h, "min", &min),0);
+    CODES_CHECK(codes_get_double(h, "max", &max),0);
+
+    codes_handle_delete(h);
+    pthread_exit(NULL);
+}
+
+int main(int argc, char** argv)
+{
+    pthread_t threads[NUM_THREADS];
+    int error = 0;
+    long i = 0;
+    for( i=0; i<NUM_THREADS; ++i) {
+        printf("Creating thread %ld\n", i);
+        error = pthread_create(&threads[i], NULL, process_grib, (void *)i);
+        if (error) {
+            return 1;
+        }
+    }
+    pthread_exit(NULL);
+    return 0;
+}
diff --git a/examples/C/grib_pthreads.sh b/examples/C/grib_pthreads.sh
new file mode 100755
index 0000000..99d93ad
--- /dev/null
+++ b/examples/C/grib_pthreads.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+
+. ./include.sh
+
+for i in `seq 0 100`; do
+   ${examples_dir}c_grib_pthreads
+done
diff --git a/examples/C/grib_set_keys.sh b/examples/C/grib_set_keys.sh
index 35b3b62..c1d141e 100755
--- a/examples/C/grib_set_keys.sh
+++ b/examples/C/grib_set_keys.sh
@@ -9,6 +9,6 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_set_keys > /dev/null
+${examples_dir}c_grib_set_keys
 
 rm -f out.set.grib1
diff --git a/examples/C/new_sample.c b/examples/C/new_sample.c
index db38003..8e2379b 100644
--- a/examples/C/new_sample.c
+++ b/examples/C/new_sample.c
@@ -1,3 +1,13 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
 #include <eccodes.h>
 
 /* This code was generated automatically */
diff --git a/examples/C/set_missing.sh b/examples/C/set_missing.sh
index 2790343..6ed8036 100755
--- a/examples/C/set_missing.sh
+++ b/examples/C/set_missing.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}c_set_missing > /dev/null
+${examples_dir}c_set_missing
 rm -f out_surface_level.grib2
diff --git a/examples/F90/CMakeLists.txt b/examples/F90/CMakeLists.txt
index a16b176..29ba0be 100644
--- a/examples/F90/CMakeLists.txt
+++ b/examples/F90/CMakeLists.txt
@@ -10,6 +10,7 @@ execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_S
 list( APPEND tests
       grib_index
       copy_message
+      bufr_copy_message
       grib_get_keys
       get_data
       get_pl
@@ -25,7 +26,8 @@ list( APPEND tests
       set_missing
       grib_set_pv
       samples
-      count_messages
+      grib_count_messages
+      grib_count_messages_multi
       read_message
       read_from_file
       get_set_uuid
@@ -34,6 +36,7 @@ list( APPEND tests
       bufr_clone
       bufr_expanded
       bufr_get_keys
+      bufr_get_string_array
       bufr_keys_iterator
       bufr_read_header
       bufr_read_scatterometer
@@ -54,7 +57,7 @@ foreach( tool ${tests} )
                       CONDITION HAVE_FORTRAN
                       RESOURCES bufr_read_scatterometer_f.ref
                       COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/${tool}.sh
-                      TEST_DEPENDS eccodes_get_gribs eccodes_get_bufrs
+                      TEST_DEPENDS eccodes_download_gribs eccodes_download_bufrs
     )
 endforeach()
 
@@ -74,9 +77,16 @@ ecbuild_add_executable( TARGET    f_copy_namespace
                         LINKER_LANGUAGE Fortran
                         LIBS      eccodes_f90 eccodes
 )
-ecbuild_add_executable( TARGET    eccodes_f_set_gvc
+ecbuild_add_executable( TARGET    eccodes_f_grib_set_gvc
                         NOINSTALL
-                        SOURCES   set_gvc.f90
+                        SOURCES   grib_set_gvc.f90
+                        CONDITION HAVE_FORTRAN
+                        LINKER_LANGUAGE Fortran
+                        LIBS      eccodes_f90 eccodes
+)
+ecbuild_add_executable( TARGET    eccodes_f_grib_print_data_static
+                        NOINSTALL
+                        SOURCES   grib_print_data_static.f90
                         CONDITION HAVE_FORTRAN
                         LINKER_LANGUAGE Fortran
                         LIBS      eccodes_f90 eccodes
diff --git a/examples/F90/Makefile.am b/examples/F90/Makefile.am
index 8a70b6f..c83dd95 100644
--- a/examples/F90/Makefile.am
+++ b/examples/F90/Makefile.am
@@ -2,12 +2,17 @@
 AM_CFLAGS =  @WARN_PEDANTIC@ @WERROR@ @FORCE_32_CFLAGS@
 
 TESTS = copy_message.sh grib_get_keys.sh get_data.sh get_pl.sh get_pv.sh grib_keys_iterator.sh \
-        grib_nearest.sh grib_precision.sh grib_multi_write.sh grib_multi.sh grib_print_data.sh grib_set_keys.sh \
-        grib_set_bitmap.sh set_missing.sh grib_set_pv.sh samples.sh count_messages.sh read_message.sh \
-        read_from_file.sh grib_index.sh get_set_uuid.sh bufr_attributes.sh grib_clone.sh bufr_clone.sh \
-        bufr_expanded.sh bufr_get_keys.sh bufr_read_header.sh bufr_read_synop.sh \
-        bufr_set_keys.sh bufr_keys_iterator.sh bufr_subset.sh get_product_kind.sh bufr_read_temp.sh \
-				bufr_read_tropical_cyclone.sh bufr_read_scatterometer.sh
+        grib_nearest.sh grib_precision.sh grib_multi_write.sh grib_multi.sh \
+        grib_print_data.sh grib_set_keys.sh \
+        grib_set_bitmap.sh set_missing.sh grib_set_pv.sh samples.sh grib_count_messages.sh \
+        read_message.sh grib_count_messages_multi.sh \
+        read_from_file.sh grib_index.sh get_set_uuid.sh \
+        bufr_attributes.sh grib_clone.sh bufr_clone.sh \
+        bufr_expanded.sh bufr_get_keys.sh bufr_get_string_array.sh \
+        bufr_read_header.sh bufr_read_synop.sh \
+        bufr_set_keys.sh bufr_keys_iterator.sh bufr_subset.sh \
+        get_product_kind.sh bufr_read_temp.sh \
+        bufr_read_tropical_cyclone.sh bufr_read_scatterometer.sh
 
 noinst_PROGRAMS  = eccodes_f_grib_index \
                    eccodes_f_copy_message \
@@ -21,22 +26,25 @@ noinst_PROGRAMS  = eccodes_f_grib_index \
                    eccodes_f_grib_nearest \
                    eccodes_f_grib_precision \
                    eccodes_f_grib_print_data \
+                   eccodes_f_grib_print_data_static \
                    eccodes_f_grib_set_keys \
                    eccodes_f_grib_set_bitmap \
                    eccodes_f_set_missing \
                    eccodes_f_grib_set_pv \
                    eccodes_f_samples \
-                   eccodes_f_count_messages \
+                   eccodes_f_grib_count_messages \
+                   eccodes_f_grib_count_messages_multi \
                    eccodes_f_read_message \
                    eccodes_f_read_from_file \
                    eccodes_f_new_from_file \
                    eccodes_f_copy_namespace \
                    eccodes_f_get_set_uuid \
-                   eccodes_f_set_gvc \
+                   eccodes_f_grib_set_gvc \
                    eccodes_f_grib_clone \
                    eccodes_f_bufr_clone \
                    eccodes_f_bufr_expanded \
                    eccodes_f_bufr_get_keys \
+                   eccodes_f_bufr_get_string_array \
                    eccodes_f_bufr_read_header \
                    eccodes_f_bufr_read_synop \
                    eccodes_f_bufr_set_keys \
@@ -60,23 +68,26 @@ eccodes_f_grib_multi_SOURCES=grib_multi.f90
 eccodes_f_grib_nearest_SOURCES=grib_nearest.f90
 eccodes_f_grib_precision_SOURCES=grib_precision.f90
 eccodes_f_grib_print_data_SOURCES=grib_print_data.f90
+eccodes_f_grib_print_data_static_SOURCES=grib_print_data_static.f90
 eccodes_f_grib_set_keys_SOURCES=grib_set_keys.f90
 eccodes_f_grib_set_bitmap_SOURCES=grib_set_bitmap.f90
 eccodes_f_set_missing_SOURCES=set_missing.f90
 eccodes_f_grib_set_pv_SOURCES=grib_set_pv.f90
 eccodes_f_samples_SOURCES=samples.f90
-eccodes_f_count_messages_SOURCES=count_messages.f90
+eccodes_f_grib_count_messages_SOURCES=grib_count_messages.f90
+eccodes_f_grib_count_messages_multi_SOURCES=grib_count_messages_multi.f90
 eccodes_f_read_message_SOURCES=read_message.f90
 eccodes_f_read_from_file_SOURCES=read_from_file.f90
 eccodes_f_new_from_file_SOURCES=new_from_file.f90
 eccodes_f_copy_namespace_SOURCES=copy_namespace.f90
 eccodes_f_get_set_uuid_SOURCES=get_set_uuid.f90
-eccodes_f_set_gvc_SOURCES=set_gvc.f90
+eccodes_f_grib_set_gvc_SOURCES=grib_set_gvc.f90
 eccodes_f_grib_clone_SOURCES=grib_clone.f90
 eccodes_f_bufr_attributes_SOURCES=bufr_attributes.f90
 eccodes_f_bufr_clone_SOURCES=bufr_clone.f90
 eccodes_f_bufr_expanded_SOURCES=bufr_expanded.f90
 eccodes_f_bufr_get_keys_SOURCES=bufr_get_keys.f90
+eccodes_f_bufr_get_string_array_SOURCES=bufr_get_string_array.f90
 eccodes_f_bufr_keys_iterator_SOURCES=bufr_keys_iterator.f90
 eccodes_f_bufr_read_header_SOURCES=bufr_read_header.f90
 eccodes_f_bufr_read_scatterometer_SOURCES=bufr_read_scatterometer.f90
diff --git a/examples/F90/Makefile.in b/examples/F90/Makefile.in
index c8bdd0e..0bec8c7 100644
--- a/examples/F90/Makefile.in
+++ b/examples/F90/Makefile.in
@@ -87,18 +87,22 @@ noinst_PROGRAMS = eccodes_f_grib_index$(EXEEXT) \
 	eccodes_f_grib_multi$(EXEEXT) eccodes_f_grib_nearest$(EXEEXT) \
 	eccodes_f_grib_precision$(EXEEXT) \
 	eccodes_f_grib_print_data$(EXEEXT) \
+	eccodes_f_grib_print_data_static$(EXEEXT) \
 	eccodes_f_grib_set_keys$(EXEEXT) \
 	eccodes_f_grib_set_bitmap$(EXEEXT) \
 	eccodes_f_set_missing$(EXEEXT) eccodes_f_grib_set_pv$(EXEEXT) \
-	eccodes_f_samples$(EXEEXT) eccodes_f_count_messages$(EXEEXT) \
+	eccodes_f_samples$(EXEEXT) \
+	eccodes_f_grib_count_messages$(EXEEXT) \
+	eccodes_f_grib_count_messages_multi$(EXEEXT) \
 	eccodes_f_read_message$(EXEEXT) \
 	eccodes_f_read_from_file$(EXEEXT) \
 	eccodes_f_new_from_file$(EXEEXT) \
 	eccodes_f_copy_namespace$(EXEEXT) \
-	eccodes_f_get_set_uuid$(EXEEXT) eccodes_f_set_gvc$(EXEEXT) \
-	eccodes_f_grib_clone$(EXEEXT) eccodes_f_bufr_clone$(EXEEXT) \
-	eccodes_f_bufr_expanded$(EXEEXT) \
+	eccodes_f_get_set_uuid$(EXEEXT) \
+	eccodes_f_grib_set_gvc$(EXEEXT) eccodes_f_grib_clone$(EXEEXT) \
+	eccodes_f_bufr_clone$(EXEEXT) eccodes_f_bufr_expanded$(EXEEXT) \
 	eccodes_f_bufr_get_keys$(EXEEXT) \
+	eccodes_f_bufr_get_string_array$(EXEEXT) \
 	eccodes_f_bufr_read_header$(EXEEXT) \
 	eccodes_f_bufr_read_synop$(EXEEXT) \
 	eccodes_f_bufr_set_keys$(EXEEXT) \
@@ -156,6 +160,14 @@ eccodes_f_bufr_get_keys_LDADD = $(LDADD)
 eccodes_f_bufr_get_keys_DEPENDENCIES =  \
 	$(top_builddir)/fortran/libeccodes_f90.la \
 	$(top_builddir)/src/libeccodes.la
+am_eccodes_f_bufr_get_string_array_OBJECTS =  \
+	bufr_get_string_array.$(OBJEXT)
+eccodes_f_bufr_get_string_array_OBJECTS =  \
+	$(am_eccodes_f_bufr_get_string_array_OBJECTS)
+eccodes_f_bufr_get_string_array_LDADD = $(LDADD)
+eccodes_f_bufr_get_string_array_DEPENDENCIES =  \
+	$(top_builddir)/fortran/libeccodes_f90.la \
+	$(top_builddir)/src/libeccodes.la
 am_eccodes_f_bufr_keys_iterator_OBJECTS =  \
 	bufr_keys_iterator.$(OBJEXT)
 eccodes_f_bufr_keys_iterator_OBJECTS =  \
@@ -227,13 +239,6 @@ eccodes_f_copy_namespace_LDADD = $(LDADD)
 eccodes_f_copy_namespace_DEPENDENCIES =  \
 	$(top_builddir)/fortran/libeccodes_f90.la \
 	$(top_builddir)/src/libeccodes.la
-am_eccodes_f_count_messages_OBJECTS = count_messages.$(OBJEXT)
-eccodes_f_count_messages_OBJECTS =  \
-	$(am_eccodes_f_count_messages_OBJECTS)
-eccodes_f_count_messages_LDADD = $(LDADD)
-eccodes_f_count_messages_DEPENDENCIES =  \
-	$(top_builddir)/fortran/libeccodes_f90.la \
-	$(top_builddir)/src/libeccodes.la
 am_eccodes_f_get_data_OBJECTS = get_data.$(OBJEXT)
 eccodes_f_get_data_OBJECTS = $(am_eccodes_f_get_data_OBJECTS)
 eccodes_f_get_data_LDADD = $(LDADD)
@@ -271,6 +276,22 @@ eccodes_f_grib_clone_LDADD = $(LDADD)
 eccodes_f_grib_clone_DEPENDENCIES =  \
 	$(top_builddir)/fortran/libeccodes_f90.la \
 	$(top_builddir)/src/libeccodes.la
+am_eccodes_f_grib_count_messages_OBJECTS =  \
+	grib_count_messages.$(OBJEXT)
+eccodes_f_grib_count_messages_OBJECTS =  \
+	$(am_eccodes_f_grib_count_messages_OBJECTS)
+eccodes_f_grib_count_messages_LDADD = $(LDADD)
+eccodes_f_grib_count_messages_DEPENDENCIES =  \
+	$(top_builddir)/fortran/libeccodes_f90.la \
+	$(top_builddir)/src/libeccodes.la
+am_eccodes_f_grib_count_messages_multi_OBJECTS =  \
+	grib_count_messages_multi.$(OBJEXT)
+eccodes_f_grib_count_messages_multi_OBJECTS =  \
+	$(am_eccodes_f_grib_count_messages_multi_OBJECTS)
+eccodes_f_grib_count_messages_multi_LDADD = $(LDADD)
+eccodes_f_grib_count_messages_multi_DEPENDENCIES =  \
+	$(top_builddir)/fortran/libeccodes_f90.la \
+	$(top_builddir)/src/libeccodes.la
 am_eccodes_f_grib_get_keys_OBJECTS = grib_get_keys.$(OBJEXT)
 eccodes_f_grib_get_keys_OBJECTS =  \
 	$(am_eccodes_f_grib_get_keys_OBJECTS)
@@ -325,6 +346,14 @@ eccodes_f_grib_print_data_LDADD = $(LDADD)
 eccodes_f_grib_print_data_DEPENDENCIES =  \
 	$(top_builddir)/fortran/libeccodes_f90.la \
 	$(top_builddir)/src/libeccodes.la
+am_eccodes_f_grib_print_data_static_OBJECTS =  \
+	grib_print_data_static.$(OBJEXT)
+eccodes_f_grib_print_data_static_OBJECTS =  \
+	$(am_eccodes_f_grib_print_data_static_OBJECTS)
+eccodes_f_grib_print_data_static_LDADD = $(LDADD)
+eccodes_f_grib_print_data_static_DEPENDENCIES =  \
+	$(top_builddir)/fortran/libeccodes_f90.la \
+	$(top_builddir)/src/libeccodes.la
 am_eccodes_f_grib_set_bitmap_OBJECTS = grib_set_bitmap.$(OBJEXT)
 eccodes_f_grib_set_bitmap_OBJECTS =  \
 	$(am_eccodes_f_grib_set_bitmap_OBJECTS)
@@ -332,6 +361,12 @@ eccodes_f_grib_set_bitmap_LDADD = $(LDADD)
 eccodes_f_grib_set_bitmap_DEPENDENCIES =  \
 	$(top_builddir)/fortran/libeccodes_f90.la \
 	$(top_builddir)/src/libeccodes.la
+am_eccodes_f_grib_set_gvc_OBJECTS = grib_set_gvc.$(OBJEXT)
+eccodes_f_grib_set_gvc_OBJECTS = $(am_eccodes_f_grib_set_gvc_OBJECTS)
+eccodes_f_grib_set_gvc_LDADD = $(LDADD)
+eccodes_f_grib_set_gvc_DEPENDENCIES =  \
+	$(top_builddir)/fortran/libeccodes_f90.la \
+	$(top_builddir)/src/libeccodes.la
 am_eccodes_f_grib_set_keys_OBJECTS = grib_set_keys.$(OBJEXT)
 eccodes_f_grib_set_keys_OBJECTS =  \
 	$(am_eccodes_f_grib_set_keys_OBJECTS)
@@ -371,12 +406,6 @@ eccodes_f_samples_LDADD = $(LDADD)
 eccodes_f_samples_DEPENDENCIES =  \
 	$(top_builddir)/fortran/libeccodes_f90.la \
 	$(top_builddir)/src/libeccodes.la
-am_eccodes_f_set_gvc_OBJECTS = set_gvc.$(OBJEXT)
-eccodes_f_set_gvc_OBJECTS = $(am_eccodes_f_set_gvc_OBJECTS)
-eccodes_f_set_gvc_LDADD = $(LDADD)
-eccodes_f_set_gvc_DEPENDENCIES =  \
-	$(top_builddir)/fortran/libeccodes_f90.la \
-	$(top_builddir)/src/libeccodes.la
 am_eccodes_f_set_missing_OBJECTS = set_missing.$(OBJEXT)
 eccodes_f_set_missing_OBJECTS = $(am_eccodes_f_set_missing_OBJECTS)
 eccodes_f_set_missing_LDADD = $(LDADD)
@@ -415,6 +444,7 @@ SOURCES = $(eccodes_f_bufr_attributes_SOURCES) \
 	$(eccodes_f_bufr_clone_SOURCES) \
 	$(eccodes_f_bufr_expanded_SOURCES) \
 	$(eccodes_f_bufr_get_keys_SOURCES) \
+	$(eccodes_f_bufr_get_string_array_SOURCES) \
 	$(eccodes_f_bufr_keys_iterator_SOURCES) \
 	$(eccodes_f_bufr_read_header_SOURCES) \
 	$(eccodes_f_bufr_read_scatterometer_SOURCES) \
@@ -425,11 +455,12 @@ SOURCES = $(eccodes_f_bufr_attributes_SOURCES) \
 	$(eccodes_f_bufr_subset_SOURCES) \
 	$(eccodes_f_copy_message_SOURCES) \
 	$(eccodes_f_copy_namespace_SOURCES) \
-	$(eccodes_f_count_messages_SOURCES) \
 	$(eccodes_f_get_data_SOURCES) $(eccodes_f_get_pl_SOURCES) \
 	$(eccodes_f_get_product_kind_SOURCES) \
 	$(eccodes_f_get_pv_SOURCES) $(eccodes_f_get_set_uuid_SOURCES) \
 	$(eccodes_f_grib_clone_SOURCES) \
+	$(eccodes_f_grib_count_messages_SOURCES) \
+	$(eccodes_f_grib_count_messages_multi_SOURCES) \
 	$(eccodes_f_grib_get_keys_SOURCES) \
 	$(eccodes_f_grib_index_SOURCES) \
 	$(eccodes_f_grib_keys_iterator_SOURCES) \
@@ -438,17 +469,20 @@ SOURCES = $(eccodes_f_bufr_attributes_SOURCES) \
 	$(eccodes_f_grib_nearest_SOURCES) \
 	$(eccodes_f_grib_precision_SOURCES) \
 	$(eccodes_f_grib_print_data_SOURCES) \
+	$(eccodes_f_grib_print_data_static_SOURCES) \
 	$(eccodes_f_grib_set_bitmap_SOURCES) \
+	$(eccodes_f_grib_set_gvc_SOURCES) \
 	$(eccodes_f_grib_set_keys_SOURCES) \
 	$(eccodes_f_grib_set_pv_SOURCES) \
 	$(eccodes_f_new_from_file_SOURCES) \
 	$(eccodes_f_read_from_file_SOURCES) \
 	$(eccodes_f_read_message_SOURCES) $(eccodes_f_samples_SOURCES) \
-	$(eccodes_f_set_gvc_SOURCES) $(eccodes_f_set_missing_SOURCES)
+	$(eccodes_f_set_missing_SOURCES)
 DIST_SOURCES = $(eccodes_f_bufr_attributes_SOURCES) \
 	$(eccodes_f_bufr_clone_SOURCES) \
 	$(eccodes_f_bufr_expanded_SOURCES) \
 	$(eccodes_f_bufr_get_keys_SOURCES) \
+	$(eccodes_f_bufr_get_string_array_SOURCES) \
 	$(eccodes_f_bufr_keys_iterator_SOURCES) \
 	$(eccodes_f_bufr_read_header_SOURCES) \
 	$(eccodes_f_bufr_read_scatterometer_SOURCES) \
@@ -459,11 +493,12 @@ DIST_SOURCES = $(eccodes_f_bufr_attributes_SOURCES) \
 	$(eccodes_f_bufr_subset_SOURCES) \
 	$(eccodes_f_copy_message_SOURCES) \
 	$(eccodes_f_copy_namespace_SOURCES) \
-	$(eccodes_f_count_messages_SOURCES) \
 	$(eccodes_f_get_data_SOURCES) $(eccodes_f_get_pl_SOURCES) \
 	$(eccodes_f_get_product_kind_SOURCES) \
 	$(eccodes_f_get_pv_SOURCES) $(eccodes_f_get_set_uuid_SOURCES) \
 	$(eccodes_f_grib_clone_SOURCES) \
+	$(eccodes_f_grib_count_messages_SOURCES) \
+	$(eccodes_f_grib_count_messages_multi_SOURCES) \
 	$(eccodes_f_grib_get_keys_SOURCES) \
 	$(eccodes_f_grib_index_SOURCES) \
 	$(eccodes_f_grib_keys_iterator_SOURCES) \
@@ -472,13 +507,15 @@ DIST_SOURCES = $(eccodes_f_bufr_attributes_SOURCES) \
 	$(eccodes_f_grib_nearest_SOURCES) \
 	$(eccodes_f_grib_precision_SOURCES) \
 	$(eccodes_f_grib_print_data_SOURCES) \
+	$(eccodes_f_grib_print_data_static_SOURCES) \
 	$(eccodes_f_grib_set_bitmap_SOURCES) \
+	$(eccodes_f_grib_set_gvc_SOURCES) \
 	$(eccodes_f_grib_set_keys_SOURCES) \
 	$(eccodes_f_grib_set_pv_SOURCES) \
 	$(eccodes_f_new_from_file_SOURCES) \
 	$(eccodes_f_read_from_file_SOURCES) \
 	$(eccodes_f_read_message_SOURCES) $(eccodes_f_samples_SOURCES) \
-	$(eccodes_f_set_gvc_SOURCES) $(eccodes_f_set_missing_SOURCES)
+	$(eccodes_f_set_missing_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -896,12 +933,17 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AM_CFLAGS = @WARN_PEDANTIC@ @WERROR@ @FORCE_32_CFLAGS@
 TESTS = copy_message.sh grib_get_keys.sh get_data.sh get_pl.sh get_pv.sh grib_keys_iterator.sh \
-        grib_nearest.sh grib_precision.sh grib_multi_write.sh grib_multi.sh grib_print_data.sh grib_set_keys.sh \
-        grib_set_bitmap.sh set_missing.sh grib_set_pv.sh samples.sh count_messages.sh read_message.sh \
-        read_from_file.sh grib_index.sh get_set_uuid.sh bufr_attributes.sh grib_clone.sh bufr_clone.sh \
-        bufr_expanded.sh bufr_get_keys.sh bufr_read_header.sh bufr_read_synop.sh \
-        bufr_set_keys.sh bufr_keys_iterator.sh bufr_subset.sh get_product_kind.sh bufr_read_temp.sh \
-				bufr_read_tropical_cyclone.sh bufr_read_scatterometer.sh
+        grib_nearest.sh grib_precision.sh grib_multi_write.sh grib_multi.sh \
+        grib_print_data.sh grib_set_keys.sh \
+        grib_set_bitmap.sh set_missing.sh grib_set_pv.sh samples.sh grib_count_messages.sh \
+        read_message.sh grib_count_messages_multi.sh \
+        read_from_file.sh grib_index.sh get_set_uuid.sh \
+        bufr_attributes.sh grib_clone.sh bufr_clone.sh \
+        bufr_expanded.sh bufr_get_keys.sh bufr_get_string_array.sh \
+        bufr_read_header.sh bufr_read_synop.sh \
+        bufr_set_keys.sh bufr_keys_iterator.sh bufr_subset.sh \
+        get_product_kind.sh bufr_read_temp.sh \
+        bufr_read_tropical_cyclone.sh bufr_read_scatterometer.sh
 
 eccodes_f_grib_index_SOURCES = grib_index.f90
 eccodes_f_copy_message_SOURCES = copy_message.f90
@@ -915,23 +957,26 @@ eccodes_f_grib_multi_SOURCES = grib_multi.f90
 eccodes_f_grib_nearest_SOURCES = grib_nearest.f90
 eccodes_f_grib_precision_SOURCES = grib_precision.f90
 eccodes_f_grib_print_data_SOURCES = grib_print_data.f90
+eccodes_f_grib_print_data_static_SOURCES = grib_print_data_static.f90
 eccodes_f_grib_set_keys_SOURCES = grib_set_keys.f90
 eccodes_f_grib_set_bitmap_SOURCES = grib_set_bitmap.f90
 eccodes_f_set_missing_SOURCES = set_missing.f90
 eccodes_f_grib_set_pv_SOURCES = grib_set_pv.f90
 eccodes_f_samples_SOURCES = samples.f90
-eccodes_f_count_messages_SOURCES = count_messages.f90
+eccodes_f_grib_count_messages_SOURCES = grib_count_messages.f90
+eccodes_f_grib_count_messages_multi_SOURCES = grib_count_messages_multi.f90
 eccodes_f_read_message_SOURCES = read_message.f90
 eccodes_f_read_from_file_SOURCES = read_from_file.f90
 eccodes_f_new_from_file_SOURCES = new_from_file.f90
 eccodes_f_copy_namespace_SOURCES = copy_namespace.f90
 eccodes_f_get_set_uuid_SOURCES = get_set_uuid.f90
-eccodes_f_set_gvc_SOURCES = set_gvc.f90
+eccodes_f_grib_set_gvc_SOURCES = grib_set_gvc.f90
 eccodes_f_grib_clone_SOURCES = grib_clone.f90
 eccodes_f_bufr_attributes_SOURCES = bufr_attributes.f90
 eccodes_f_bufr_clone_SOURCES = bufr_clone.f90
 eccodes_f_bufr_expanded_SOURCES = bufr_expanded.f90
 eccodes_f_bufr_get_keys_SOURCES = bufr_get_keys.f90
+eccodes_f_bufr_get_string_array_SOURCES = bufr_get_string_array.f90
 eccodes_f_bufr_keys_iterator_SOURCES = bufr_keys_iterator.f90
 eccodes_f_bufr_read_header_SOURCES = bufr_read_header.f90
 eccodes_f_bufr_read_scatterometer_SOURCES = bufr_read_scatterometer.f90
@@ -1006,6 +1051,10 @@ eccodes_f_bufr_get_keys$(EXEEXT): $(eccodes_f_bufr_get_keys_OBJECTS) $(eccodes_f
 	@rm -f eccodes_f_bufr_get_keys$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_bufr_get_keys_OBJECTS) $(eccodes_f_bufr_get_keys_LDADD) $(LIBS)
 
+eccodes_f_bufr_get_string_array$(EXEEXT): $(eccodes_f_bufr_get_string_array_OBJECTS) $(eccodes_f_bufr_get_string_array_DEPENDENCIES) $(EXTRA_eccodes_f_bufr_get_string_array_DEPENDENCIES) 
+	@rm -f eccodes_f_bufr_get_string_array$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_bufr_get_string_array_OBJECTS) $(eccodes_f_bufr_get_string_array_LDADD) $(LIBS)
+
 eccodes_f_bufr_keys_iterator$(EXEEXT): $(eccodes_f_bufr_keys_iterator_OBJECTS) $(eccodes_f_bufr_keys_iterator_DEPENDENCIES) $(EXTRA_eccodes_f_bufr_keys_iterator_DEPENDENCIES) 
 	@rm -f eccodes_f_bufr_keys_iterator$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_bufr_keys_iterator_OBJECTS) $(eccodes_f_bufr_keys_iterator_LDADD) $(LIBS)
@@ -1046,10 +1095,6 @@ eccodes_f_copy_namespace$(EXEEXT): $(eccodes_f_copy_namespace_OBJECTS) $(eccodes
 	@rm -f eccodes_f_copy_namespace$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_copy_namespace_OBJECTS) $(eccodes_f_copy_namespace_LDADD) $(LIBS)
 
-eccodes_f_count_messages$(EXEEXT): $(eccodes_f_count_messages_OBJECTS) $(eccodes_f_count_messages_DEPENDENCIES) $(EXTRA_eccodes_f_count_messages_DEPENDENCIES) 
-	@rm -f eccodes_f_count_messages$(EXEEXT)
-	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_count_messages_OBJECTS) $(eccodes_f_count_messages_LDADD) $(LIBS)
-
 eccodes_f_get_data$(EXEEXT): $(eccodes_f_get_data_OBJECTS) $(eccodes_f_get_data_DEPENDENCIES) $(EXTRA_eccodes_f_get_data_DEPENDENCIES) 
 	@rm -f eccodes_f_get_data$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_get_data_OBJECTS) $(eccodes_f_get_data_LDADD) $(LIBS)
@@ -1074,6 +1119,14 @@ eccodes_f_grib_clone$(EXEEXT): $(eccodes_f_grib_clone_OBJECTS) $(eccodes_f_grib_
 	@rm -f eccodes_f_grib_clone$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_clone_OBJECTS) $(eccodes_f_grib_clone_LDADD) $(LIBS)
 
+eccodes_f_grib_count_messages$(EXEEXT): $(eccodes_f_grib_count_messages_OBJECTS) $(eccodes_f_grib_count_messages_DEPENDENCIES) $(EXTRA_eccodes_f_grib_count_messages_DEPENDENCIES) 
+	@rm -f eccodes_f_grib_count_messages$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_count_messages_OBJECTS) $(eccodes_f_grib_count_messages_LDADD) $(LIBS)
+
+eccodes_f_grib_count_messages_multi$(EXEEXT): $(eccodes_f_grib_count_messages_multi_OBJECTS) $(eccodes_f_grib_count_messages_multi_DEPENDENCIES) $(EXTRA_eccodes_f_grib_count_messages_multi_DEPENDENCIES) 
+	@rm -f eccodes_f_grib_count_messages_multi$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_count_messages_multi_OBJECTS) $(eccodes_f_grib_count_messages_multi_LDADD) $(LIBS)
+
 eccodes_f_grib_get_keys$(EXEEXT): $(eccodes_f_grib_get_keys_OBJECTS) $(eccodes_f_grib_get_keys_DEPENDENCIES) $(EXTRA_eccodes_f_grib_get_keys_DEPENDENCIES) 
 	@rm -f eccodes_f_grib_get_keys$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_get_keys_OBJECTS) $(eccodes_f_grib_get_keys_LDADD) $(LIBS)
@@ -1106,10 +1159,18 @@ eccodes_f_grib_print_data$(EXEEXT): $(eccodes_f_grib_print_data_OBJECTS) $(eccod
 	@rm -f eccodes_f_grib_print_data$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_print_data_OBJECTS) $(eccodes_f_grib_print_data_LDADD) $(LIBS)
 
+eccodes_f_grib_print_data_static$(EXEEXT): $(eccodes_f_grib_print_data_static_OBJECTS) $(eccodes_f_grib_print_data_static_DEPENDENCIES) $(EXTRA_eccodes_f_grib_print_data_static_DEPENDENCIES) 
+	@rm -f eccodes_f_grib_print_data_static$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_print_data_static_OBJECTS) $(eccodes_f_grib_print_data_static_LDADD) $(LIBS)
+
 eccodes_f_grib_set_bitmap$(EXEEXT): $(eccodes_f_grib_set_bitmap_OBJECTS) $(eccodes_f_grib_set_bitmap_DEPENDENCIES) $(EXTRA_eccodes_f_grib_set_bitmap_DEPENDENCIES) 
 	@rm -f eccodes_f_grib_set_bitmap$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_set_bitmap_OBJECTS) $(eccodes_f_grib_set_bitmap_LDADD) $(LIBS)
 
+eccodes_f_grib_set_gvc$(EXEEXT): $(eccodes_f_grib_set_gvc_OBJECTS) $(eccodes_f_grib_set_gvc_DEPENDENCIES) $(EXTRA_eccodes_f_grib_set_gvc_DEPENDENCIES) 
+	@rm -f eccodes_f_grib_set_gvc$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_set_gvc_OBJECTS) $(eccodes_f_grib_set_gvc_LDADD) $(LIBS)
+
 eccodes_f_grib_set_keys$(EXEEXT): $(eccodes_f_grib_set_keys_OBJECTS) $(eccodes_f_grib_set_keys_DEPENDENCIES) $(EXTRA_eccodes_f_grib_set_keys_DEPENDENCIES) 
 	@rm -f eccodes_f_grib_set_keys$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_grib_set_keys_OBJECTS) $(eccodes_f_grib_set_keys_LDADD) $(LIBS)
@@ -1134,10 +1195,6 @@ eccodes_f_samples$(EXEEXT): $(eccodes_f_samples_OBJECTS) $(eccodes_f_samples_DEP
 	@rm -f eccodes_f_samples$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_samples_OBJECTS) $(eccodes_f_samples_LDADD) $(LIBS)
 
-eccodes_f_set_gvc$(EXEEXT): $(eccodes_f_set_gvc_OBJECTS) $(eccodes_f_set_gvc_DEPENDENCIES) $(EXTRA_eccodes_f_set_gvc_DEPENDENCIES) 
-	@rm -f eccodes_f_set_gvc$(EXEEXT)
-	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_set_gvc_OBJECTS) $(eccodes_f_set_gvc_LDADD) $(LIBS)
-
 eccodes_f_set_missing$(EXEEXT): $(eccodes_f_set_missing_OBJECTS) $(eccodes_f_set_missing_DEPENDENCIES) $(EXTRA_eccodes_f_set_missing_DEPENDENCIES) 
 	@rm -f eccodes_f_set_missing$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(eccodes_f_set_missing_OBJECTS) $(eccodes_f_set_missing_LDADD) $(LIBS)
@@ -1468,9 +1525,9 @@ samples.sh.log: samples.sh
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
-count_messages.sh.log: count_messages.sh
-	@p='count_messages.sh'; \
-	b='count_messages.sh'; \
+grib_count_messages.sh.log: grib_count_messages.sh
+	@p='grib_count_messages.sh'; \
+	b='grib_count_messages.sh'; \
 	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
@@ -1482,6 +1539,13 @@ read_message.sh.log: read_message.sh
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+grib_count_messages_multi.sh.log: grib_count_messages_multi.sh
+	@p='grib_count_messages_multi.sh'; \
+	b='grib_count_messages_multi.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 read_from_file.sh.log: read_from_file.sh
 	@p='read_from_file.sh'; \
 	b='read_from_file.sh'; \
@@ -1538,6 +1602,13 @@ bufr_get_keys.sh.log: bufr_get_keys.sh
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
+bufr_get_string_array.sh.log: bufr_get_string_array.sh
+	@p='bufr_get_string_array.sh'; \
+	b='bufr_get_string_array.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
 bufr_read_header.sh.log: bufr_read_header.sh
 	@p='bufr_read_header.sh'; \
 	b='bufr_read_header.sh'; \
diff --git a/examples/F90/bufr_attributes.f90 b/examples/F90/bufr_attributes.f90
index d6ea995..f35dbd3 100644
--- a/examples/F90/bufr_attributes.f90
+++ b/examples/F90/bufr_attributes.f90
@@ -19,7 +19,7 @@ implicit none
 integer            :: ifile
 integer            :: iret
 integer            :: ibufr
-integer            :: i, count=0
+integer            :: count=0
 integer(kind=4)    :: iVal,conf 
 real(kind=8)       :: t2m
 character(len=32)   :: units, confUnits 
diff --git a/examples/F90/bufr_clone.f90 b/examples/F90/bufr_clone.f90
index 038f837..c372d70 100644
--- a/examples/F90/bufr_clone.f90
+++ b/examples/F90/bufr_clone.f90
@@ -16,46 +16,42 @@
 program bufr_clone
   use eccodes
   implicit none
-  integer                                       :: err,i,iret
-  integer                                       :: nx, ny
-  integer                                       :: infile,outfile
-  integer                                       :: ibufr_in
-  integer                                       :: ibufr_out
-  character(len=2)                              :: step
-  double precision, dimension(:,:), allocatable :: field2D
+  integer       :: i,iret
+  integer       :: infile,outfile
+  integer       :: ibufr_in
+  integer       :: ibufr_out
   
   !open source file 
   call codes_open_file(infile,'../../data/bufr/syno_multi.bufr','r')
-  
+
   ! open target file
   call codes_open_file(outfile,'bufr_clone_test_f.clone.bufr','w')
-  
+
   ! the first bufr message is loaded from file
   ! ibufr is the bufr id to be used in subsequent calls
   call codes_bufr_new_from_file(infile,ibufr_in,iret)
 
   ! create several clones of this message and alter them
   ! in different ways
-
   do i=1,3
-    
+
     ! clone the current handle
     call codes_clone(ibufr_in, ibufr_out)
 
     ! This is the place where you may wish to modify the clone 
     ! E.g. we change the bufrHeaderCentre 
     call codes_set(ibufr_out,'bufrHeaderCentre',222)
- 
+
     ! write cloned messages to a file
     call codes_write(ibufr_out,outfile)
-    
-    ! relase the clone's handle
+
+    ! release the clone's handle
     call codes_release(ibufr_out)
   end do  
-  
-! relase the sources 's handle
+
+  ! release the original handle
   call codes_release(ibufr_in)
-  
+
   call codes_close_file(infile)
   call codes_close_file(outfile)
 
diff --git a/examples/F90/bufr_copy_message.f90 b/examples/F90/bufr_copy_message.f90
new file mode 100644
index 0000000..1421997
--- /dev/null
+++ b/examples/F90/bufr_copy_message.f90
@@ -0,0 +1,56 @@
+! Copyright 2005-2016 ECMWF.
+!
+! This software is licensed under the terms of the Apache Licence Version 2.0
+! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+! 
+! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+!
+!
+!
+!  Description: how to copy a BUFR message in memory
+!
+!
+!
+program copy
+  use eccodes
+  implicit none
+  integer                            :: err, sub_centre
+  integer(kind=kindOfSize)           :: byte_size
+  integer                            :: infile,outfile
+  integer                            :: ibufr_in
+  integer                            :: ibufr_out
+  character(len=1), dimension(:), allocatable :: message
+  character(len=32)                  :: product_kind
+
+
+  call codes_open_file(infile,'../../data/bufr/syno_1.bufr', 'r')
+  call codes_open_file(outfile,'out.copy.bufr', 'w')
+
+  ! A new BUFR message is loaded from file
+  ! ibufr_in is the BUFR id to be used in subsequent calls
+  call codes_bufr_new_from_file(infile, ibufr_in)
+
+  call codes_get_message_size(ibufr_in, byte_size)
+  allocate(message(byte_size), stat=err)
+
+  call codes_copy_message(ibufr_in, message)
+
+  call codes_new_from_message(ibufr_out, message)
+
+  call codes_get(ibufr_out, 'kindOfProduct', product_kind)
+  write(*,*) 'kindOfProduct=',product_kind
+
+  sub_centre=80
+  call codes_set(ibufr_out,'bufrHeaderSubCentre', sub_centre)
+
+  ! Write message to a file
+  call codes_write(ibufr_out, outfile)
+
+  call codes_release(ibufr_out)
+  call codes_release(ibufr_in)
+  call codes_close_file(infile)
+  call codes_close_file(outfile)
+  deallocate(message)
+
+end program copy
diff --git a/examples/F90/bufr_copy_message.sh b/examples/F90/bufr_copy_message.sh
new file mode 100755
index 0000000..9d7c319
--- /dev/null
+++ b/examples/F90/bufr_copy_message.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+
+. ./include.sh
+
+INPUT="../../data/bufr/syno_1.bufr"
+OUTPUT=out.copy.bufr
+
+${examples_dir}eccodes_f_bufr_copy_message > /dev/null
+${tools_dir}/bufr_compare -b bufrHeaderSubCentre $INPUT $OUTPUT
+
+rm -f $OUTPUT
diff --git a/examples/F90/bufr_get_string_array.f90 b/examples/F90/bufr_get_string_array.f90
new file mode 100644
index 0000000..c822def
--- /dev/null
+++ b/examples/F90/bufr_get_string_array.f90
@@ -0,0 +1,68 @@
+!
+!Copyright 2005-2016 ECMWF.
+!
+! This software is licensed under the terms of the Apache Licence Version 2.0
+!which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+!
+! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+!
+!
+! FOTRAN 90 Implementation: bufr_get_string_array
+!
+! Description: how to get an array of strings from a BUFR message.
+ 
+program bufr_get_string_array
+use eccodes
+implicit none
+integer            :: ifile
+integer            :: iret,i,n
+integer            :: ibufr
+integer            :: strsize
+integer, parameter  :: max_strsize = 20
+character(len=max_strsize) , dimension(:),allocatable   :: stationOrSiteName 
+
+  call codes_open_file(ifile,'../../data/bufr/pgps_110.bufr','r')
+
+  call codes_bufr_new_from_file(ifile,ibufr,iret)
+
+
+  ! unpack the data values
+  call codes_set(ibufr,'unpack',1)
+
+  ! get the width of the strings which is te same for all of them
+  call codes_get(ibufr,'stationOrSiteName->width',strsize)
+
+  ! the width is given in bits
+  strsize=strsize/8
+
+  ! max_strsize has to be set to a value >= to the size of the strings that we are getting 
+  ! back from the call to codes_get_string_array
+  if (strsize > max_strsize) then
+    print *,'stationOrSiteName array dimension is ',max_strsize,' and should be ',strsize
+    call exit(1)
+  end if
+    
+  ! allocating the array of strings to be passed to codes_get_string_array is mandatory
+  call codes_get_size(ibufr,'stationOrSiteName',n)
+  allocate(stationOrSiteName(n))
+
+  ! passing an array of strings stationOrSiteName which must be allocated beforehand 
+  call codes_get_string_array(ibufr,'stationOrSiteName',stationOrSiteName)
+  do i=1,n
+    write(*,'(A)')trim(stationOrSiteName(i))
+  end do
+
+  !remember to deallocate 
+  deallocate(stationOrSiteName)
+    
+  ! release memory associated with bufr handle
+  ! ibufr won't be accessible any more from codes_release on
+  call codes_release(ibufr)
+
+  ! close file  
+  call codes_close_file(ifile)
+ 
+
+end program bufr_get_string_array
+
diff --git a/examples/F90/bufr_get_string_array.sh b/examples/F90/bufr_get_string_array.sh
new file mode 100755
index 0000000..cd06cf1
--- /dev/null
+++ b/examples/F90/bufr_get_string_array.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+
+. ./include.sh
+set -x
+#Define a common label for all the tmp files
+label="bufr_get_string_array_test_f"
+
+#Prepare tmp file
+fTmp=${label}.tmp.txt
+rm -f $fTmp | true
+
+#-----------------------------------------------------
+# Test get string array from a BUFR
+#----------------------------------------------------
+
+fRef=${data_dir}/bufr/get_string_array.ref
+
+REDIRECT=/dev/null
+
+#Write the values into a file and compare with reference
+${examples_dir}/eccodes_f_bufr_get_string_array > $fTmp
+
+#We compare output to the reference by ignoring the whitespaces 
+diff -w $fRef $fTmp
+
+#cat $fRes
+
+#Clean up
+rm -f ${fTmp} | true
+
+
+
diff --git a/examples/F90/bufr_read_synop.f90 b/examples/F90/bufr_read_synop.f90
index efdfb05..749b57e 100644
--- a/examples/F90/bufr_read_synop.f90
+++ b/examples/F90/bufr_read_synop.f90
@@ -26,7 +26,7 @@ integer            :: iret
 integer            :: ibufr
 integer            :: count=0
 integer(kind=4)    :: blockNumber,stationNumber 
-real(kind=8)       :: lat,lon,t2m,td2m,ws,wdir
+real(kind=8)       :: lat,t2m,td2m,ws,wdir
 integer(kind=4)    :: cloudAmount,cloudBaseHeight,lowCloud,midCloud,highCloud 
 
   call codes_open_file(ifile,'../../data/bufr/syno_multi.bufr','r')
diff --git a/examples/F90/bufr_read_temp.f90 b/examples/F90/bufr_read_temp.f90
index c057a65..94b118f 100644
--- a/examples/F90/bufr_read_temp.f90
+++ b/examples/F90/bufr_read_temp.f90
@@ -19,16 +19,14 @@ program bufr_read_temp
   use eccodes
   implicit none
   integer            :: ifile
-  integer            :: iret,ierr
+  integer            :: iret
   integer            :: ibufr
   integer            :: i, count=0
   integer(kind=4),dimension(:), allocatable  :: timePeriod,extendedVerticalSoundingSignificance
-  integer(kind=4)  :: blockNumber,stationNumber,numberOfLevels
-  character(len=30) :: str
+  integer(kind=4)  :: blockNumber,stationNumber
   real(kind=8),dimension(:), allocatable :: pressure,airTemperature,dewpointTemperature
   real(kind=8),dimension(:), allocatable :: geopotentialHeight,latitudeDisplacement,longitudeDisplacement
   real(kind=8),dimension(:), allocatable :: windDirection,windSpeed
-  character(len=128)   :: keyName
 
   call codes_open_file(ifile,'../../data/bufr/PraticaTemp.bufr','r')
 
@@ -41,7 +39,7 @@ program bufr_read_temp
     call codes_get(ibufr,'timePeriod',timePeriod)
     call codes_get(ibufr,'pressure',pressure)
     call codes_get(ibufr,'extendedVerticalSoundingSignificance',extendedVerticalSoundingSignificance)
-    call codes_get(ibufr,'geopotentialHeight',geopotentialHeight)
+    call codes_get(ibufr,'nonCoordinateGeopotentialHeight',geopotentialHeight)
     call codes_get(ibufr,'latitudeDisplacement',latitudeDisplacement)
     call codes_get(ibufr,'longitudeDisplacement',longitudeDisplacement)
     call codes_get(ibufr,'airTemperature',airTemperature)
diff --git a/examples/F90/bufr_read_temp.sh b/examples/F90/bufr_read_temp.sh
index c563159..ed1794e 100755
--- a/examples/F90/bufr_read_temp.sh
+++ b/examples/F90/bufr_read_temp.sh
@@ -23,7 +23,7 @@ rm -f $fTmp | true
 REDIRECT=/dev/null
 
 # Run the example
-${examples_dir}/eccodes_f_bufr_read_temp 2> $REDIRECT > $fTmp
+${examples_dir}/eccodes_f_bufr_read_temp > $fTmp
 
 #TODO: check the results
 
diff --git a/examples/F90/bufr_set_keys.f90 b/examples/F90/bufr_set_keys.f90
index 2435f91..a2a77e2 100644
--- a/examples/F90/bufr_set_keys.f90
+++ b/examples/F90/bufr_set_keys.f90
@@ -14,7 +14,7 @@
 program bufr_set_keys
   use eccodes
   implicit none
-  integer                                       :: err,i,iret
+  integer                                       :: iret
   integer                                       :: infile,outfile
   integer                                       :: ibufr
   integer                                       :: count=0
diff --git a/examples/F90/copy_message.f90 b/examples/F90/copy_message.f90
index e59731c..19f5e38 100644
--- a/examples/F90/copy_message.f90
+++ b/examples/F90/copy_message.f90
@@ -8,7 +8,7 @@
 !
 !
 !
-!  Description: how to copy a message in memory
+!  Description: how to copy a GRIB message in memory
 !
 !
 !
@@ -21,32 +21,34 @@ program copy
   integer                            :: igrib_in
   integer                            :: igrib_out
   character(len=1), dimension(:), allocatable :: message
+  character(len=32)                  :: product_kind
+
 
-  
   call codes_open_file(infile,'../../data/constant_field.grib1','r')
   call codes_open_file(outfile,'out.copy.grib1','w')
 
-  !     a new grib message is loaded from file
-  !     igrib is the grib id to be used in subsequent calls
-  call codes_grib_new_from_file(infile,igrib_in)
+  ! A new GRIB message is loaded from file
+  ! igrib_in is the GRIB id to be used in subsequent calls
+  call codes_grib_new_from_file(infile, igrib_in)
 
   call codes_get_message_size(igrib_in, byte_size)
   allocate(message(byte_size), stat=err)
 
-  call codes_copy_message(igrib_in,message)
+  call codes_copy_message(igrib_in, message)
 
   call codes_new_from_message(igrib_out, message)
 
+  call codes_get(igrib_out, 'kindOfProduct', product_kind)
+  write(*,*) 'kindOfProduct=',product_kind
+
   centre=80
-  call codes_set(igrib_out,"centre",centre)
+  call codes_set(igrib_out, 'centre', centre)
 
-!  write messages to a file
-  call codes_write(igrib_out,outfile)
+  ! Write message to a file
+  call codes_write(igrib_out, outfile)
 
   call codes_release(igrib_out)
-
   call codes_release(igrib_in)
-
   call codes_close_file(infile)
   call codes_close_file(outfile)
   deallocate(message)
diff --git a/examples/F90/copy_message.sh b/examples/F90/copy_message.sh
index 967ddbb..a924517 100755
--- a/examples/F90/copy_message.sh
+++ b/examples/F90/copy_message.sh
@@ -9,5 +9,10 @@
 
 . ./include.sh
 
+INPUT="../../data/constant_field.grib1"
+OUTPUT=out.copy.grib1
+
 ${examples_dir}eccodes_f_copy_message > /dev/null
-rm -f out.copy.grib1
+${tools_dir}/grib_compare -b centre $INPUT $OUTPUT
+
+rm -f $OUTPUT
diff --git a/examples/F90/count_messages.f90 b/examples/F90/count_messages.f90
deleted file mode 100644
index f056ad4..0000000
--- a/examples/F90/count_messages.f90
+++ /dev/null
@@ -1,110 +0,0 @@
-! Copyright 2005-2016 ECMWF.
-!
-! This software is licensed under the terms of the Apache Licence Version 2.0
-! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-! 
-! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
-! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
-!
-!  Description: count messages before processing
-!
-!
-program get
-  use eccodes
-  implicit none
-
-  integer                            ::  ifile
-  integer                            ::  iret
-  integer                            ::  n
-  integer                            ::  i
-  integer,dimension(:),allocatable   ::  igrib
-  real                               ::  latitudeOfFirstPointInDegrees
-  real                               ::  longitudeOfFirstPointInDegrees
-  real                               ::  latitudeOfLastPointInDegrees
-  real                               ::  longitudeOfLastPointInDegrees
-  integer                            ::  numberOfPointsAlongAParallel
-  integer                            ::  numberOfPointsAlongAMeridian
-  real, dimension(:), allocatable    ::  values
-  integer                            ::  numberOfValues
-  real                               ::  average,min_val, max_val
-
-  call codes_open_file(ifile, &
-       '../../data/tigge_pf_ecmwf.grib2','r')
-
-  ! count the messages in the file
-  call codes_count_in_file(ifile,n)
-  allocate(igrib(n))
-  igrib=-1
-
-  ! Load the messages from the file.
-  DO i=1,n
-     call codes_grib_new_from_file(ifile,igrib(i), iret)
-  END DO
-
-  ! we can close the file
-  call codes_close_file(ifile)
-
-  ! Loop on all the messages in memory
-  DO i=1,n
-     write(*,*) 'processing message number ',i
-     !     get as a integer
-     call codes_get(igrib(i),'Ni',numberOfPointsAlongAParallel)
-     write(*,*) 'numberOfPointsAlongAParallel=', &
-          numberOfPointsAlongAParallel
-
-     !     get as a integer
-     call codes_get(igrib(i),'Nj',numberOfPointsAlongAMeridian)
-     write(*,*) 'numberOfPointsAlongAMeridian=', &
-          numberOfPointsAlongAMeridian
-
-     !     get as a real
-     call codes_get(igrib(i), 'latitudeOfFirstGridPointInDegrees', &
-          latitudeOfFirstPointInDegrees)
-     write(*,*) 'latitudeOfFirstGridPointInDegrees=', &
-          latitudeOfFirstPointInDegrees
-
-     !     get as a real
-     call codes_get(igrib(i), 'longitudeOfFirstGridPointInDegrees', &
-          longitudeOfFirstPointInDegrees)
-     write(*,*) 'longitudeOfFirstGridPointInDegrees=', &
-          longitudeOfFirstPointInDegrees
-
-     !     get as a real
-     call codes_get(igrib(i), 'latitudeOfLastGridPointInDegrees', &
-          latitudeOfLastPointInDegrees)
-     write(*,*) 'latitudeOfLastGridPointInDegrees=', &
-          latitudeOfLastPointInDegrees
-
-     !     get as a real
-     call codes_get(igrib(i), 'longitudeOfLastGridPointInDegrees', &
-          longitudeOfLastPointInDegrees)
-     write(*,*) 'longitudeOfLastGridPointInDegrees=', &
-          longitudeOfLastPointInDegrees
-
-
-     !     get the size of the values array
-     call codes_get_size(igrib(i),'values',numberOfValues)
-     write(*,*) 'numberOfValues=',numberOfValues
-
-     allocate(values(numberOfValues), stat=iret)
-     !     get data values
-     call codes_get(igrib(i),'values',values)
-     call codes_get(igrib(i),'min',min_val) ! can also be obtained through minval(values)
-     call codes_get(igrib(i),'max',max_val) ! can also be obtained through maxval(values)
-     call codes_get(igrib(i),'average',average) ! can also be obtained through maxval(values)
-
-     write(*,*)'There are ',numberOfValues, &
-          ' average is ',average, &
-          ' min is ',  min_val, &
-          ' max is ',  max_val
-     write(*,*) '---------------------'
-     deallocate(values)
-  END DO
-
-  DO i=1,n
-    call codes_release(igrib(i))
-  END DO
-
-  deallocate(igrib)
-
-end program get
diff --git a/examples/F90/count_messages.sh b/examples/F90/count_messages.sh
deleted file mode 100755
index d21b2ad..0000000
--- a/examples/F90/count_messages.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-# Copyright 2005-2016 ECMWF.
-#
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-#
-# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
-# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
-
-. ./include.sh
-
-${examples_dir}eccodes_f_count_messages > /dev/null
diff --git a/examples/F90/get_data.f90 b/examples/F90/get_data.f90
index 542ec7a..1bdbb28 100644
--- a/examples/F90/get_data.f90
+++ b/examples/F90/get_data.f90
@@ -20,9 +20,8 @@ implicit none
   integer(4)        :: numberOfPoints
   logical            :: is_missing_value
   integer            :: count1=0, count2=0, bitmapPresent=0, bmp_len=0
-  character(len=256) :: filename
 
-!     Message identifier.
+  ! Message identifier.
   integer            :: igrib
 
   ifile=5
diff --git a/examples/F90/get_fortran.f90 b/examples/F90/get_fortran.f90
index 8930df9..9d54477 100644
--- a/examples/F90/get_fortran.f90
+++ b/examples/F90/get_fortran.f90
@@ -24,7 +24,6 @@ implicit none
   real(kind=8), dimension(:), allocatable         ::  values
   integer(kind = 4)                               ::  numberOfValues
   real(kind=8)                                    ::  average
-  character(len = 256)                            ::  error
 
   call codes_open_file(ifile, &
        '../../data/reduced_latlon_surface.grib1','r')
diff --git a/examples/F90/get_product_kind.f90 b/examples/F90/get_product_kind.f90
index fd072d9..0dd8607 100644
--- a/examples/F90/get_product_kind.f90
+++ b/examples/F90/get_product_kind.f90
@@ -19,7 +19,7 @@ implicit none
 integer            :: ifile
 integer            :: iret
 integer            :: ihandle
-integer            :: i, count=0
+integer            :: count=0
 character(len=32)  :: product_kind
 character(len=120) :: infile_name
 
diff --git a/examples/F90/grib_clone.f90 b/examples/F90/grib_clone.f90
index d1f454f..c9e5406 100644
--- a/examples/F90/grib_clone.f90
+++ b/examples/F90/grib_clone.f90
@@ -16,30 +16,29 @@
 program clone
   use eccodes
   implicit none
-  integer                                       :: err,i,iret
+  integer                                       :: err,i
   integer                                       :: nx, ny
   integer                                       :: infile,outfile
   integer                                       :: igrib_in
   integer                                       :: igrib_out
   character(len=2)                              :: step
-  double precision, dimension(:,:), allocatable :: field2D
+  real(kind=8), dimension(:,:), allocatable     :: field2D
   
   call codes_open_file(infile,'../../data/constant_field.grib1','r')
   call codes_open_file(outfile,'out.clone.grib1','w')
 
-  !     a new grib message is loaded from file
-  !     igrib is the grib id to be used in subsequent calls
+  ! A new GRIB message is loaded from file.
+  ! igrib is the GRIB id to be used in subsequent calls
   call codes_grib_new_from_file(infile,igrib_in)
 
-  call codes_get(igrib_in,"Ni", nx)
-  
-  call codes_get(igrib_in,"Nj",ny)
+  call codes_get(igrib_in,'Ni', nx)
+  call codes_get(igrib_in,'Nj', ny)
 
   allocate(field2D(nx,ny),stat=err)
 
   if (err .ne. 0) then
-     print*, 'Failed to allocate ', nx*ny, ' values'
-     STOP
+    print*, 'Failed to allocate ', nx*ny, ' values'
+    STOP
   end if
   ! clone the constant field to create 4 new GRIB messages
   do i=0,18,6
@@ -67,7 +66,7 @@ program clone
 contains
 !======================================
 subroutine generate_field(gfield2D)
- double precision, dimension(:,:) :: gfield2D
+ real(kind=8), dimension(:,:) :: gfield2D
 
  call random_number(gfield2D)
 end subroutine generate_field
diff --git a/examples/F90/grib_count_messages.f90 b/examples/F90/grib_count_messages.f90
new file mode 100644
index 0000000..63d6c15
--- /dev/null
+++ b/examples/F90/grib_count_messages.f90
@@ -0,0 +1,110 @@
+! Copyright 2005-2016 ECMWF.
+!
+! This software is licensed under the terms of the Apache Licence Version 2.0
+! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+! 
+! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+!
+!  Description: count messages before processing
+!
+!
+program get
+  use eccodes
+  implicit none
+
+  integer                            ::  ifile
+  integer                            ::  iret
+  integer                            ::  n
+  integer                            ::  i
+  integer,dimension(:),allocatable   ::  igrib
+  real                               ::  latitudeOfFirstPointInDegrees
+  real                               ::  longitudeOfFirstPointInDegrees
+  real                               ::  latitudeOfLastPointInDegrees
+  real                               ::  longitudeOfLastPointInDegrees
+  integer                            ::  numberOfPointsAlongAParallel
+  integer                            ::  numberOfPointsAlongAMeridian
+  real, dimension(:), allocatable    ::  values
+  integer                            ::  numberOfValues
+  real                               ::  average,min_val, max_val
+
+  call codes_open_file(ifile, &
+       '../../data/tigge_pf_ecmwf.grib2','r')
+
+  ! count the messages in the file
+  call codes_count_in_file(ifile,n)
+  allocate(igrib(n))
+  igrib=-1
+
+  ! Load the messages from the file.
+  DO i=1,n
+    call codes_grib_new_from_file(ifile,igrib(i), iret)
+  END DO
+
+  ! we can close the file
+  call codes_close_file(ifile)
+
+  ! Loop on all the messages in memory
+  DO i=1,n
+    write(*,*) 'processing message number ',i
+    !     get as a integer
+    call codes_get(igrib(i),'Ni',numberOfPointsAlongAParallel)
+    write(*,*) 'numberOfPointsAlongAParallel=', &
+          numberOfPointsAlongAParallel
+
+    !     get as a integer
+    call codes_get(igrib(i),'Nj',numberOfPointsAlongAMeridian)
+    write(*,*) 'numberOfPointsAlongAMeridian=', &
+          numberOfPointsAlongAMeridian
+
+    !     get as a real
+    call codes_get(igrib(i), 'latitudeOfFirstGridPointInDegrees', &
+         latitudeOfFirstPointInDegrees)
+    write(*,*) 'latitudeOfFirstGridPointInDegrees=', &
+          latitudeOfFirstPointInDegrees
+
+    !     get as a real
+    call codes_get(igrib(i), 'longitudeOfFirstGridPointInDegrees', &
+         longitudeOfFirstPointInDegrees)
+    write(*,*) 'longitudeOfFirstGridPointInDegrees=', &
+         longitudeOfFirstPointInDegrees
+
+    !     get as a real
+    call codes_get(igrib(i), 'latitudeOfLastGridPointInDegrees', &
+         latitudeOfLastPointInDegrees)
+    write(*,*) 'latitudeOfLastGridPointInDegrees=', &
+         latitudeOfLastPointInDegrees
+
+    !     get as a real
+    call codes_get(igrib(i), 'longitudeOfLastGridPointInDegrees', &
+         longitudeOfLastPointInDegrees)
+    write(*,*) 'longitudeOfLastGridPointInDegrees=', &
+         longitudeOfLastPointInDegrees
+
+
+    !     get the size of the values array
+    call codes_get_size(igrib(i),'values',numberOfValues)
+    write(*,*) 'numberOfValues=',numberOfValues
+
+    allocate(values(numberOfValues), stat=iret)
+    !     get data values
+    call codes_get(igrib(i),'values',values)
+    call codes_get(igrib(i),'min',min_val) ! can also be obtained through minval(values)
+    call codes_get(igrib(i),'max',max_val) ! can also be obtained through maxval(values)
+    call codes_get(igrib(i),'average',average) ! can also be obtained through maxval(values)
+
+    write(*,*)'There are ',numberOfValues, &
+          ' average is ',average, &
+          ' min is ',  min_val, &
+          ' max is ',  max_val
+    write(*,*) '---------------------'
+    deallocate(values)
+  END DO
+
+  DO i=1,n
+    call codes_release(igrib(i))
+  END DO
+
+  deallocate(igrib)
+
+end program get
diff --git a/examples/F90/grib_count_messages.sh b/examples/F90/grib_count_messages.sh
new file mode 100755
index 0000000..9c10975
--- /dev/null
+++ b/examples/F90/grib_count_messages.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+
+. ./include.sh
+
+${examples_dir}eccodes_f_grib_count_messages > /dev/null
diff --git a/examples/F90/grib_count_messages_multi.f90 b/examples/F90/grib_count_messages_multi.f90
new file mode 100644
index 0000000..f085681
--- /dev/null
+++ b/examples/F90/grib_count_messages_multi.f90
@@ -0,0 +1,34 @@
+! Copyright 2005-2016 ECMWF.
+!
+! This software is licensed under the terms of the Apache Licence Version 2.0
+! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+!
+! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+!
+!  Description: count messages in a file with GRIB2 multi-field messages
+!
+!
+program grib_count_messages_multi
+  use eccodes
+  implicit none
+
+  integer                            ::  ifile
+  character(len=100)                 ::  grib_file
+  integer                            ::  n,stat
+  character(len=1)                   ::  multi_flag
+
+  call getarg(1,multi_flag)
+  call getarg(2,grib_file)
+
+  if (multi_flag/="0") call codes_grib_multi_support_on()
+
+  call codes_open_file(ifile,grib_file,'r')
+
+  ! count the messages in the file
+  call codes_count_in_file(ifile,n,stat)
+
+  print *,n
+
+  call codes_close_file(ifile)
+end program grib_count_messages_multi
diff --git a/examples/F90/grib_count_messages_multi.sh b/examples/F90/grib_count_messages_multi.sh
new file mode 100755
index 0000000..351c8c1
--- /dev/null
+++ b/examples/F90/grib_count_messages_multi.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+
+. ./include.sh
+
+INPUT="../../data/multi.grib2"
+
+# Without multi-field support
+c=`${examples_dir}eccodes_f_grib_count_messages_multi 0 $INPUT | tr -d ' '`
+[ "$c" = "30" ]
+
+# With multi-field support (more messages should be counted)
+c=`${examples_dir}eccodes_f_grib_count_messages_multi 1 $INPUT | tr -d ' '`
+[ "$c" = "56" ]
diff --git a/examples/F90/grib_get_keys.f90 b/examples/F90/grib_get_keys.f90
index 1d7fb8d..ed175ac 100644
--- a/examples/F90/grib_get_keys.f90
+++ b/examples/F90/grib_get_keys.f90
@@ -27,9 +27,10 @@ program grib_get_keys
   integer                            ::  numberOfValues
   real                               ::  average,min_val, max_val
   integer                            ::  is_missing
+  character(len=10)                  ::  open_mode='r'
   
   call codes_open_file(ifile, &
-       '../../data/reduced_latlon_surface.grib1','r')
+       '../../data/reduced_latlon_surface.grib1', open_mode)
   
   ! Loop on all the messages in a file.
 
diff --git a/examples/F90/grib_index.f90 b/examples/F90/grib_index.f90
index 206f2de..67d0628 100644
--- a/examples/F90/grib_index.f90
+++ b/examples/F90/grib_index.f90
@@ -17,12 +17,11 @@ program index
   implicit none
   
   integer              :: iret
-  character(len = 256) :: error
-  integer,dimension(:),allocatable :: step,level,number
+  integer,dimension(:),allocatable           :: step,level,number
   character(len=20),dimension(:),allocatable :: shortName
-  integer                          :: ostep,olevel,onumber
-  character(len=20)                :: oshortName
-  integer                          :: shortNameSize,numberSize,levelSize,stepSize
+  integer              :: ostep,olevel,onumber
+  character(len=20)    :: oshortName
+  integer              :: shortNameSize,numberSize,levelSize,stepSize
   integer              :: i,j,k,l
   integer              :: idx,igrib,count1
   character(len=10)    :: index_file='index.idx'
diff --git a/examples/F90/grib_multi.f90 b/examples/F90/grib_multi.f90
index c8b1598..5e9b535 100644
--- a/examples/F90/grib_multi.f90
+++ b/examples/F90/grib_multi.f90
@@ -18,7 +18,6 @@ program multi
   implicit none
   
   integer              :: iret
-  character(len = 256) :: error
   integer(kind = 4)    :: step
   integer              :: ifile,igrib
 
diff --git a/examples/F90/grib_multi_write.f90 b/examples/F90/grib_multi_write.f90
index 6cc0e84..38cc7b5 100644
--- a/examples/F90/grib_multi_write.f90
+++ b/examples/F90/grib_multi_write.f90
@@ -18,7 +18,7 @@ program grib2_multi_write
   use eccodes
   implicit none
   integer                            :: infile,outfile
-  integer                            :: in_gribid,iret
+  integer                            :: in_gribid
   integer                            :: multi_gribid
   integer                            :: step,startsection
 
diff --git a/examples/F90/grib_print_data.f90 b/examples/F90/grib_print_data.f90
index e051e61..2a2ed61 100644
--- a/examples/F90/grib_print_data.f90
+++ b/examples/F90/grib_print_data.f90
@@ -23,19 +23,18 @@ integer(kind=4)    :: numPoints
 real(kind=8)       :: average
 real(kind=8)       :: the_max
 real(kind=8)       :: the_min
-character(len=256) :: error
 
-call codes_open_file(ifile, &
+  call codes_open_file(ifile, &
            '../../data/constant_field.grib1','r')
 
-! a new grib message is loaded from file
-! igrib is the grib id to be used in subsequent calls
+  ! A new GRIB message is loaded from file
+  ! igrib is the grib id to be used in subsequent calls
   call codes_grib_new_from_file(ifile,igrib)
 
-!  get the size of the values array
+  ! Get the size of the values array
   call codes_get_size(igrib,'values',numPoints)
 
-! get data values
+  ! Get data values
   print*, 'number of points ', numPoints
   allocate(values(numPoints), stat=iret)
 
diff --git a/examples/F90/grib_print_data.sh b/examples/F90/grib_print_data.sh
index c8015ac..d9bf013 100755
--- a/examples/F90/grib_print_data.sh
+++ b/examples/F90/grib_print_data.sh
@@ -9,4 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_print_data > /dev/null
+${examples_dir}eccodes_f_grib_print_data | grep '99200 *values found'
+${examples_dir}eccodes_f_grib_print_data_static | grep '99200 *values found'
diff --git a/examples/F90/grib_print_data_static.f90 b/examples/F90/grib_print_data_static.f90
new file mode 100644
index 0000000..4ba1c39
--- /dev/null
+++ b/examples/F90/grib_print_data_static.f90
@@ -0,0 +1,58 @@
+! Copyright 2005-2016 ECMWF.
+!
+! This software is licensed under the terms of the Apache Licence Version 2.0
+! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+! 
+! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+!
+!
+!  Description: prints all the data contained in a GRIB file.
+!               Using the old interface with a STATIC array
+!               rather than the new ALLOCATABLE array
+!
+!
+program print_data
+use grib_api
+implicit none
+integer            :: ifile
+integer            :: igrib
+integer            :: i
+real(kind=8), dimension(99200)       :: values_static
+integer(kind=4)    :: numPoints
+real(kind=8)       :: average
+real(kind=8)       :: the_max
+real(kind=8)       :: the_min
+
+  call grib_open_file(ifile, &
+           '../../data/constant_field.grib1','r')
+
+  ! A new GRIB message is loaded from file
+  ! igrib is the grib id to be used in subsequent calls
+  call grib_new_from_file(ifile,igrib)
+
+  ! Get the size of the values array
+  call grib_get_size(igrib,'values',numPoints)
+
+  ! Get data values
+  print*, 'number of points ', numPoints
+
+  call grib_get(igrib,'values',values_static)
+
+  do i=1,numPoints
+    write(*,*)'  ',i,values_static(i)
+  enddo
+
+  write(*,*)numPoints,' values found '
+
+  call grib_get(igrib,'max',the_max)
+  write(*,*) 'max=',the_max
+  call grib_get(igrib,'min',the_min)
+  write(*,*) 'min=',the_min
+  call grib_get(igrib,'average',average)
+  write(*,*) 'average=',average
+
+  call grib_release(igrib)
+  call grib_close_file(ifile)
+
+end program print_data
diff --git a/examples/F90/grib_set_gvc.f90 b/examples/F90/grib_set_gvc.f90
new file mode 100644
index 0000000..3d943c7
--- /dev/null
+++ b/examples/F90/grib_set_gvc.f90
@@ -0,0 +1,67 @@
+! Copyright 2005-2016 ECMWF.
+!
+! This software is licensed under the terms of the Apache Licence Version 2.0
+! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+! 
+! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+!
+!
+!
+!  Description: how to set keys for a grib2 file with
+!               a Generalized Vertical Height Coordinate
+!
+!
+program set
+  use eccodes
+  implicit none
+  integer              :: infile,outfile
+  integer              :: igrib
+
+  call codes_open_file(infile,  '../../data/sample.grib2','r')
+
+  call codes_open_file(outfile, 'out_gvc.grib2','w')
+
+  call codes_grib_new_from_file(infile,igrib)
+
+  ! Individual ensemble forecast
+  call codes_set(igrib,'productDefinitionTemplateNumber', 11)
+  
+  ! Select level type as Generalized Vertical Height Coordinate
+  call codes_set(igrib,'typeOfLevel', 'generalVertical')
+  
+  ! Now set keys specific to this level type
+  call codes_set(igrib,'nlev', 12.21)
+  call codes_set(igrib,'numberOfVGridUsed', 13.55)
+
+  ! check integrity of GRIB message
+  call check_settings(igrib)
+
+  ! write modified message to a file
+  call codes_write(igrib,outfile)
+
+  call codes_release(igrib)
+  call codes_close_file(infile)
+  call codes_close_file(outfile)
+
+contains
+
+!======================================
+subroutine check_settings(gribid)
+  implicit none
+  integer, intent(in) :: gribid
+  
+  integer(kind = 4) :: NV,typeOfFirstFixedSurface
+
+  call codes_get(gribid,'NV', NV)
+  if (NV /= 6) then
+    call codes_check(-2, 'NV_should_be_6', '')
+  end if
+
+  call codes_get(gribid,'typeOfFirstFixedSurface', typeOfFirstFixedSurface)
+  if (typeOfFirstFixedSurface /= 150) then
+    call codes_check(-2, 'typeOfFirstFixedSurface_should_be_150', '')
+  end if
+   
+end subroutine check_settings
+end program set
diff --git a/examples/F90/grib_set_keys.sh b/examples/F90/grib_set_keys.sh
index 92f6c20..8fc574f 100755
--- a/examples/F90/grib_set_keys.sh
+++ b/examples/F90/grib_set_keys.sh
@@ -11,7 +11,8 @@
 
 ${examples_dir}eccodes_f_grib_set_keys > /dev/null
 
-${examples_dir}eccodes_f_set_gvc > /dev/null
-[ -f out_gvc.grib2 ]
+${examples_dir}eccodes_f_grib_set_gvc > /dev/null
+res=`${tools_dir}/grib_get -p typeOfLevel,NV out_gvc.grib2`
+[ "$res" = "generalVertical 6" ]
 
 rm -f out.set.grib1 out_gvc.grib2
diff --git a/examples/F90/iterator_fortran.f90 b/examples/F90/iterator_fortran.f90
index 0aeebab..bb821cf 100644
--- a/examples/F90/iterator_fortran.f90
+++ b/examples/F90/iterator_fortran.f90
@@ -14,10 +14,8 @@ implicit none
   integer            :: iret,iter
   real(kind=8)       :: lat,lon,value,missingValue
   integer            :: n,flags
-  character(len=256) :: filename
-  character(len=256) :: error
 
-!     Message identifier.
+  ! Message identifier.
   integer            :: igrib
 
   ifile=5
@@ -25,30 +23,29 @@ implicit none
   call codes_open_file(ifile, &
        '../../data/regular_latlon_surface_constant.grib1','R')
 
-! Loop on all the messages in a file.
-
+  ! Loop on all the messages in a file.
   call codes_grib_new_from_file(ifile,igrib,iret)
 
   LOOP: DO WHILE (iret/=CODES_END_OF_FILE)
-! get as a real8
+      ! get as a real8
       call codes_get(igrib, &
            'missingValue',missingValue)
       write(*,*) 'missingValue=',missingValue
 
-! A new iterator on lat/lon/values is created from the message igrib
+      ! A new iterator on lat/lon/values is created from the message igrib
       flags = 0
       call grib_iterator_new(igrib,iter,flags)
 
       n = 0
-! Loop on all the lat/lon/values.
+      ! Loop on all the lat/lon/values.
       call grib_iterator_next(iter,lat,lon,value, iret)
       do while (iret .ne. 0)
-! You can now print lat and lon,
+         ! You can now print lat and lon,
          if ( value .eq. missingValue ) then
-! decide what to print if a missing value is found.
+           ! decide what to print if a missing value is found.
            write(*,*) "- ",n," - lat=",lat," lon=",lon," value=missing"
          else
-! or print the value if is not missing.
+           ! or print the value if is not missing.
            write(*,*) " ",n," lat=",lat," lon=",lon," value=",value
          endif
 
@@ -57,7 +54,7 @@ implicit none
          call grib_iterator_next(iter,lat,lon,value, iret)
       end do
 
-! At the end the iterator is deleted to free memory.
+  ! At the end the iterator is deleted to free memory.
   call grib_iterator_delete(iter)
   call codes_release(igrib)
 
@@ -65,7 +62,6 @@ implicit none
 
   end do LOOP
 
-
   call codes_close_file(ifile)
 
   end program iterator
diff --git a/examples/F90/keys_iterator_fortran.f90 b/examples/F90/keys_iterator_fortran.f90
index 713941d..bf22a2e 100644
--- a/examples/F90/keys_iterator_fortran.f90
+++ b/examples/F90/keys_iterator_fortran.f90
@@ -16,12 +16,12 @@
 program keys_iterator
   use eccodes
   implicit none
-  integer            :: kiter,ifile,igrib,iret
-  character(len=256) :: key
-  character(len=256) :: value
+  integer             :: kiter,ifile,igrib,iret
+  character(len=256)  :: key
+  character(len=256)  :: value
   character(len=2048) :: all
-  integer            :: len,strlen
-  integer            :: grib_count
+  integer             :: len
+  integer             :: grib_count
   len=256
 
   ifile=5
diff --git a/examples/F90/multi_fortran.f90 b/examples/F90/multi_fortran.f90
index 8e22baf..39e387c 100644
--- a/examples/F90/multi_fortran.f90
+++ b/examples/F90/multi_fortran.f90
@@ -18,45 +18,43 @@ program multi
   implicit none
   
   integer              :: iret
-  character(len = 256) :: error
   integer(kind = 4)    ::  parameterCategory,parameterNumber,discipline
   integer              :: ifile,igrib
 
-  call codes_open_file(ifile, &
-       '../../data/multi.grib2','r')
+  call codes_open_file(ifile, '../../data/multi.grib2','r')
 
-  !     turn on support for multi fields messages */
+  ! turn on support for multi fields messages */
   call codes_grib_multi_support_on()
 
-  !     turn off support for multi fields messages */
+  ! turn off support for multi fields messages */
   !call codes_grib_multi_support_off()
 
   call codes_grib_new_from_file(ifile,igrib)
-  !     Loop on all the messages in a file.
+  ! Loop on all the messages in a file.
 
   do while (igrib .ne. -1)
 
-  !     get as a integer*4
+  ! get as a integer*4
   call codes_get(igrib,'discipline',discipline)
   write(*,*) 'discipline=',discipline
 
-  !     get as a integer*4
+  ! get as a integer*4
   call codes_get(igrib,'parameterCategory', &
        parameterCategory)
   write(*,*) 'parameterCategory=',parameterCategory
 
-  !     get as a integer*4
+  ! get as a integer*4
   call codes_get(igrib,'parameterNumber', &
        parameterNumber)
   write(*,*) 'parameterNumber=',parameterNumber
 
   if ( discipline .eq. 0 .and. parameterCategory .eq. 2) then
-     if (parameterNumber .eq. 2) then
-        write(*,*) "-------- u -------"
-     endif
-     if (parameterNumber .eq. 3) then
-        write(*,*) "-------- v -------"
-     endif
+    if (parameterNumber .eq. 2) then
+      write(*,*) "-------- u -------"
+    endif
+    if (parameterNumber .eq. 3) then
+      write(*,*) "-------- v -------"
+    endif
   endif
 
   call codes_release(igrib)
diff --git a/examples/F90/new_from_file.f90 b/examples/F90/new_from_file.f90
index c421345..3fe1c6a 100644
--- a/examples/F90/new_from_file.f90
+++ b/examples/F90/new_from_file.f90
@@ -13,10 +13,9 @@
 program new_from_file
 use eccodes
   implicit none
-  integer            :: ifile
-  integer            :: iret
+  integer           :: ifile
+  integer           :: iret
   integer           :: count1=0
-  character(len=256) :: filename
 
 !     Message identifier.
   integer            :: igrib
diff --git a/examples/F90/print_data_fortran.f90 b/examples/F90/print_data_fortran.f90
index f1ec5b0..1eedb2e 100644
--- a/examples/F90/print_data_fortran.f90
+++ b/examples/F90/print_data_fortran.f90
@@ -16,21 +16,19 @@ program print_data_fortran
 use eccodes
 implicit none
 integer            :: ifile
-integer            :: iret
 integer            :: igrib
 integer            :: i
 real(kind=8), dimension(:), allocatable       :: values
 real(kind=8)       :: average
 real(kind=8)       :: max
 real(kind=8)       :: min
-character(len=256) :: error
 
-call codes_open_file(ifile, &
+  call codes_open_file(ifile, &
            '../../data/constant_field.grib1','r')
 
-!     a new grib message is loaded from file
-!     igrib is the grib id to be used in subsequent calls
-      call codes_grib_new_from_file(ifile,igrib)
+  ! A new grib message is loaded from file
+  ! igrib is the grib id to be used in subsequent calls
+  call codes_grib_new_from_file(ifile,igrib)
 
   call codes_get(igrib,'values',values)
 
diff --git a/examples/F90/samples.f90 b/examples/F90/samples.f90
index 818d6c8..ed7d5d3 100644
--- a/examples/F90/samples.f90
+++ b/examples/F90/samples.f90
@@ -14,13 +14,12 @@ program sample
   use eccodes
   implicit none  
   integer  :: err
-  integer  :: outfile, infile, datafile
+  integer  :: outfile, datafile
   integer  :: igribsample,igribclone,igribdata, size1
   integer  :: date1, startStep, endStep, table2Version, indicatorOfParameter
   integer  :: decimalPrecision
-  real     :: missingValue
   character(len=10) stepType
-  double precision, dimension(:), allocatable   :: v1,v2,v 
+  real(kind=8), dimension(:), allocatable   :: v1,v2,v 
 
   date1 = 20080104
   startStep = 0
diff --git a/examples/F90/set_fortran.f90 b/examples/F90/set_fortran.f90
index e054b9a..99ca099 100644
--- a/examples/F90/set_fortran.f90
+++ b/examples/F90/set_fortran.f90
@@ -12,16 +12,13 @@
 program set
   use eccodes
   implicit none
-  integer              :: err
+
   integer(kind = 4)    :: centre
   integer(kind = 4)    :: int_value
   character(len = 10)  :: string_value
   character(len = 20)  :: string_centre
-  integer              :: len
-  integer              :: size
   integer              :: infile,outfile
-  integer              :: igrib,iret
-  character(len = 256) :: error
+  integer              :: igrib
 
   infile=5
   outfile=6
@@ -32,24 +29,24 @@ program set
   call codes_open_file(outfile, &
        '../../data/out.grib1','w')
 
-  !     a new grib message is loaded from file
-  !     igrib is the grib id to be used in subsequent calls
+  ! A new grib message is loaded from file
+  ! igrib is the grib id to be used in subsequent calls
   call codes_grib_new_from_file(infile,igrib)
 
-  !     set centre as a long */
+  ! set centre as a long */
   centre=80
   call codes_set(igrib,'centre',centre)
 
-  !     get centre as a integer*4
+  ! get centre as a integer*4
   call codes_get(igrib,'centre',int_value)
   write(*,*) 'centre=',int_value
 
-  !     get centre as a string
+  ! get centre as a string
   call codes_get(igrib,'centre',string_value)
   string_centre='centre='//string_value
   write(*,*) string_centre
 
-  !     write modified message to a file
+  ! write modified message to a file
   call codes_write(igrib,outfile)
 
   call codes_release(igrib)
diff --git a/examples/F90/set_gvc.f90 b/examples/F90/set_gvc.f90
deleted file mode 100644
index 68a911c..0000000
--- a/examples/F90/set_gvc.f90
+++ /dev/null
@@ -1,68 +0,0 @@
-! Copyright 2005-2016 ECMWF.
-!
-! This software is licensed under the terms of the Apache Licence Version 2.0
-! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-! 
-! In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
-! virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
-!
-!
-!
-!  Description: how to set keys for a grib2 file with
-!               a Generalized Vertical Height Coordinate
-!
-!
-program set
-  use eccodes
-  implicit none
-  integer(kind = 4)    :: NV
-  integer              :: infile,outfile
-  integer              :: igrib
-
-  call codes_open_file(infile,  '../../data/sample.grib2','r')
-
-  call codes_open_file(outfile, 'out_gvc.grib2','w')
-
-  call codes_grib_new_from_file(infile,igrib)
-
-  ! Individual ensemble forecast
-  call codes_set(igrib,'productDefinitionTemplateNumber', 11)
-  
-  ! Select level type as Generalized Vertical Height Coordinate
-  call codes_set(igrib,'typeOfLevel', 'generalVertical')
-  
-  ! Now set keys specific to this level type
-  call codes_set(igrib,'nlev', 12.21)
-  call codes_set(igrib,'numberOfVGridUsed', 13.55)
-
-  ! check integrity of GRIB message
-  call check_settings(igrib)
-
-  ! write modified message to a file
-  call codes_write(igrib,outfile)
-
-  call codes_release(igrib)
-  call codes_close_file(infile)
-  call codes_close_file(outfile)
-
-contains
-
-!======================================
-subroutine check_settings(gribid)
-  implicit none
-  integer, intent(in) :: gribid
-  
-  integer(kind = 4) :: NV,typeOfFirstFixedSurface
-
-  call codes_get(gribid,'NV', NV)
-  if (NV /= 6) then
-    call codes_check(-2, 'NV_should_be_6', '')
-  end if
-
-  call codes_get(gribid,'typeOfFirstFixedSurface', typeOfFirstFixedSurface)
-  if (typeOfFirstFixedSurface /= 150) then
-    call codes_check(-2, 'typeOfFirstFixedSurface_should_be_150', '')
-  end if
-   
-end subroutine check_settings
-end program set
diff --git a/examples/F90/set_missing_fortran.f90 b/examples/F90/set_missing_fortran.f90
index 0e4f440..dee2951 100644
--- a/examples/F90/set_missing_fortran.f90
+++ b/examples/F90/set_missing_fortran.f90
@@ -12,12 +12,8 @@
 program set
   use eccodes
   implicit none
-  integer              :: err
-  integer              :: len
-  integer              :: size
   integer              :: infile,outfile
-  integer              :: igrib,iret
-  character(len = 256) :: error
+  integer              :: igrib
 
   infile=5
   outfile=6
diff --git a/examples/python/CMakeLists.txt b/examples/python/CMakeLists.txt
index b942b7f..23aa1d6 100644
--- a/examples/python/CMakeLists.txt
+++ b/examples/python/CMakeLists.txt
@@ -11,7 +11,7 @@ list( APPEND test_bins
    grib_keys_iterator
    grib_print_data
    grib_iterator
-   count_messages
+   grib_count_messages
 )
 
 foreach( tool ${test_bins} )
@@ -29,7 +29,7 @@ endforeach()
 #################################################
 list( APPEND tests
    grib_clone
-   count_messages
+   grib_count_messages
    grib_get_keys
    grib_index
    grib_iterator
@@ -65,7 +65,7 @@ foreach( test ${tests} )
                       COMMAND    ${CMAKE_CURRENT_SOURCE_DIR}/${test}.sh
                       CONDITION  HAVE_PYTHON
                       ENVIRONMENT PYTHON=${PYTHON_EXECUTABLE}
-                      TEST_DEPENDS eccodes_get_gribs eccodes_get_tigge_gribs eccodes_get_bufrs
+                      TEST_DEPENDS eccodes_download_gribs eccodes_download_tigge_gribs eccodes_download_bufrs
     )
 endforeach()
 
@@ -77,5 +77,5 @@ ecbuild_add_test( TARGET eccodes_p_bufr_encode_flight_test
                   CONDITION  HAVE_PYTHON
                   ENVIRONMENT PYTHON=${PYTHON_EXECUTABLE}
                   RESOURCES   flight_data.csv
-                  TEST_DEPENDS eccodes_get_bufrs
+                  TEST_DEPENDS eccodes_download_bufrs
 )
diff --git a/examples/python/Makefile.am b/examples/python/Makefile.am
index 18dc628..5e64304 100644
--- a/examples/python/Makefile.am
+++ b/examples/python/Makefile.am
@@ -2,7 +2,7 @@ if WITH_PYTHON
 AM_CFLAGS =  @WARN_PEDANTIC@ @WERROR@
 
 TESTS = grib_clone.sh \
-        count_messages.sh \
+        grib_count_messages.sh \
         grib_get_keys.sh \
         grib_index.sh \
         grib_iterator.sh \
@@ -32,18 +32,18 @@ TESTS = grib_clone.sh \
 
 TESTS_ENVIRONMENT = TOPBUILDDIR=$(top_builddir) PYTHON=$(PYTHON)
 
-noinst_PROGRAMS = p_grib_keys_iterator p_grib_print_data p_grib_iterator p_count_messages
+noinst_PROGRAMS = p_grib_keys_iterator p_grib_print_data p_grib_iterator p_grib_count_messages
 p_grib_keys_iterator_SOURCES = grib_keys_iterator.c
 p_grib_print_data_SOURCES = grib_print_data.c
 p_grib_iterator_SOURCES = grib_iterator.c
-p_count_messages_SOURCES = count_messages.c
+p_grib_count_messages_SOURCES = grib_count_messages.c
 INCLUDES =  -I$(top_builddir)/src
 LDADD = $(top_builddir)/src/libeccodes.la
 DEPENDENCIES = $(LDADD)
 
 EXTRA_DIST = $(TESTS) include.sh CMakeLists.txt include.ctest.sh.in \
              grib_clone.py \
-             count_messages.py \
+             grib_count_messages.py \
              grib_get_keys.py \
              grib_index.py \
              grib_iterator.py \
diff --git a/examples/python/Makefile.in b/examples/python/Makefile.in
index 52aa76d..a0b3707 100644
--- a/examples/python/Makefile.in
+++ b/examples/python/Makefile.in
@@ -81,7 +81,7 @@ host_triplet = @host@
 @WITH_PYTHON_TRUE at noinst_PROGRAMS = p_grib_keys_iterator$(EXEEXT) \
 @WITH_PYTHON_TRUE@	p_grib_print_data$(EXEEXT) \
 @WITH_PYTHON_TRUE@	p_grib_iterator$(EXEEXT) \
- at WITH_PYTHON_TRUE@	p_count_messages$(EXEEXT)
+ at WITH_PYTHON_TRUE@	p_grib_count_messages$(EXEEXT)
 subdir = examples/python
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
 	$(top_srcdir)/config/depcomp $(top_srcdir)/config/test-driver
@@ -98,12 +98,12 @@ CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 PROGRAMS = $(noinst_PROGRAMS)
-am__p_count_messages_SOURCES_DIST = count_messages.c
- at WITH_PYTHON_TRUE@am_p_count_messages_OBJECTS =  \
- at WITH_PYTHON_TRUE@	count_messages.$(OBJEXT)
-p_count_messages_OBJECTS = $(am_p_count_messages_OBJECTS)
-p_count_messages_LDADD = $(LDADD)
- at WITH_PYTHON_TRUE@p_count_messages_DEPENDENCIES =  \
+am__p_grib_count_messages_SOURCES_DIST = grib_count_messages.c
+ at WITH_PYTHON_TRUE@am_p_grib_count_messages_OBJECTS =  \
+ at WITH_PYTHON_TRUE@	grib_count_messages.$(OBJEXT)
+p_grib_count_messages_OBJECTS = $(am_p_grib_count_messages_OBJECTS)
+p_grib_count_messages_LDADD = $(LDADD)
+ at WITH_PYTHON_TRUE@p_grib_count_messages_DEPENDENCIES =  \
 @WITH_PYTHON_TRUE@	$(top_builddir)/src/libeccodes.la
 AM_V_lt = $(am__v_lt_ at AM_V@)
 am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -164,9 +164,9 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = $(p_count_messages_SOURCES) $(p_grib_iterator_SOURCES) \
+SOURCES = $(p_grib_count_messages_SOURCES) $(p_grib_iterator_SOURCES) \
 	$(p_grib_keys_iterator_SOURCES) $(p_grib_print_data_SOURCES)
-DIST_SOURCES = $(am__p_count_messages_SOURCES_DIST) \
+DIST_SOURCES = $(am__p_grib_count_messages_SOURCES_DIST) \
 	$(am__p_grib_iterator_SOURCES_DIST) \
 	$(am__p_grib_keys_iterator_SOURCES_DIST) \
 	$(am__p_grib_print_data_SOURCES_DIST)
@@ -587,7 +587,7 @@ top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 @WITH_PYTHON_TRUE at AM_CFLAGS = @WARN_PEDANTIC@ @WERROR@
 @WITH_PYTHON_TRUE at TESTS = grib_clone.sh \
- at WITH_PYTHON_TRUE@        count_messages.sh \
+ at WITH_PYTHON_TRUE@        grib_count_messages.sh \
 @WITH_PYTHON_TRUE@        grib_get_keys.sh \
 @WITH_PYTHON_TRUE@        grib_index.sh \
 @WITH_PYTHON_TRUE@        grib_iterator.sh \
@@ -619,13 +619,13 @@ top_srcdir = @top_srcdir@
 @WITH_PYTHON_TRUE at p_grib_keys_iterator_SOURCES = grib_keys_iterator.c
 @WITH_PYTHON_TRUE at p_grib_print_data_SOURCES = grib_print_data.c
 @WITH_PYTHON_TRUE at p_grib_iterator_SOURCES = grib_iterator.c
- at WITH_PYTHON_TRUE@p_count_messages_SOURCES = count_messages.c
+ at WITH_PYTHON_TRUE@p_grib_count_messages_SOURCES = grib_count_messages.c
 @WITH_PYTHON_TRUE at INCLUDES = -I$(top_builddir)/src
 @WITH_PYTHON_TRUE at LDADD = $(top_builddir)/src/libeccodes.la
 @WITH_PYTHON_TRUE at DEPENDENCIES = $(LDADD)
 @WITH_PYTHON_TRUE at EXTRA_DIST = $(TESTS) include.sh CMakeLists.txt include.ctest.sh.in \
 @WITH_PYTHON_TRUE@             grib_clone.py \
- at WITH_PYTHON_TRUE@             count_messages.py \
+ at WITH_PYTHON_TRUE@             grib_count_messages.py \
 @WITH_PYTHON_TRUE@             grib_get_keys.py \
 @WITH_PYTHON_TRUE@             grib_index.py \
 @WITH_PYTHON_TRUE@             grib_iterator.py \
@@ -698,9 +698,9 @@ clean-noinstPROGRAMS:
 	echo " rm -f" $$list; \
 	rm -f $$list
 
-p_count_messages$(EXEEXT): $(p_count_messages_OBJECTS) $(p_count_messages_DEPENDENCIES) $(EXTRA_p_count_messages_DEPENDENCIES) 
-	@rm -f p_count_messages$(EXEEXT)
-	$(AM_V_CCLD)$(LINK) $(p_count_messages_OBJECTS) $(p_count_messages_LDADD) $(LIBS)
+p_grib_count_messages$(EXEEXT): $(p_grib_count_messages_OBJECTS) $(p_grib_count_messages_DEPENDENCIES) $(EXTRA_p_grib_count_messages_DEPENDENCIES) 
+	@rm -f p_grib_count_messages$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(p_grib_count_messages_OBJECTS) $(p_grib_count_messages_LDADD) $(LIBS)
 
 p_grib_iterator$(EXEEXT): $(p_grib_iterator_OBJECTS) $(p_grib_iterator_DEPENDENCIES) $(EXTRA_p_grib_iterator_DEPENDENCIES) 
 	@rm -f p_grib_iterator$(EXEEXT)
@@ -720,7 +720,7 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/count_messages.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grib_count_messages.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grib_iterator.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grib_keys_iterator.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grib_print_data.Po at am__quote@
@@ -952,9 +952,9 @@ grib_clone.sh.log: grib_clone.sh
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
-count_messages.sh.log: count_messages.sh
-	@p='count_messages.sh'; \
-	b='count_messages.sh'; \
+grib_count_messages.sh.log: grib_count_messages.sh
+	@p='grib_count_messages.sh'; \
+	b='grib_count_messages.sh'; \
 	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
diff --git a/examples/python/binary_message.py b/examples/python/binary_message.py
index 34c5d1a..fbace39 100644
--- a/examples/python/binary_message.py
+++ b/examples/python/binary_message.py
@@ -41,11 +41,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_attributes.py b/examples/python/bufr_attributes.py
index 47c623d..5e6beaa 100644
--- a/examples/python/bufr_attributes.py
+++ b/examples/python/bufr_attributes.py
@@ -60,7 +60,7 @@ def example():
         key = 'airTemperatureAt2M'
         try:
             print '  %s: %s' % (key, codes_get(gid, key))
-        except CodesInternalError, err:
+        except CodesInternalError as err:
             print 'Error with key="%s" : %s' % (key, err.msg)
 
         # print the values of the attributes of the key. Attributes themselves
@@ -70,7 +70,7 @@ def example():
             key = 'airTemperatureAt2M' + "->" + attr
             try:
                 print '  %s: %s' % (key, codes_get(gid, key))
-            except CodesInternalError, err:
+            except CodesInternalError as err:
                 print 'Error with key="%s" : %s' % (key, err.msg)
 
         # ------------------------------------------------------------------
@@ -83,7 +83,7 @@ def example():
         key = 'airTemperatureAt2M->percentConfidence'
         try:
             print '  %s: %s' % (key, codes_get(gid, key))
-        except CodesInternalError, err:
+        except CodesInternalError as err:
             print 'Error with key="%s" : %s' % (key, err.msg)
 
         # print the values of the attributes of the key.
@@ -91,7 +91,7 @@ def example():
             key = 'airTemperatureAt2M->percentConfidence' + "->" + attr
             try:
                 print '  %s: %s' % (key, codes_get(gid, key))
-            except CodesInternalError, err:
+            except CodesInternalError as err:
                 print 'Error with key="%s" : %s' % (key, err.msg)
 
         cnt += 1
@@ -106,11 +106,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_clone.py b/examples/python/bufr_clone.py
index 8cac9d5..17dc894 100644
--- a/examples/python/bufr_clone.py
+++ b/examples/python/bufr_clone.py
@@ -68,7 +68,7 @@ def main():
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_encode_flight.py b/examples/python/bufr_encode_flight.py
index 0f2364e..3e473c5 100644
--- a/examples/python/bufr_encode_flight.py
+++ b/examples/python/bufr_encode_flight.py
@@ -76,7 +76,7 @@ def example(csvfile, input_filename, output_filename):
     codes_set_array(bufr, 'latitude', latitudes)
     codes_set_array(bufr, 'longitude', longitudes)
     codes_set_array(bufr, 'height', altitudes)
-    codes_set_array(bufr, 'pressure', pressures)
+    codes_set_array(bufr, 'nonCoordinatePressure', pressures)
     codes_set_array(bufr, 'windSpeed', windSpeeds)
     codes_set_array(bufr, 'windDirection', windDirections)
     codes_set_array(bufr, 'airTemperature', temperatures)
@@ -98,11 +98,11 @@ def main():
 
     try:
         example(csv_filename, input_filename, output_filename)
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_expanded.py b/examples/python/bufr_expanded.py
index 97303c3..0857af0 100644
--- a/examples/python/bufr_expanded.py
+++ b/examples/python/bufr_expanded.py
@@ -69,11 +69,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_get_keys.py b/examples/python/bufr_get_keys.py
index 5ed026a..7823d33 100644
--- a/examples/python/bufr_get_keys.py
+++ b/examples/python/bufr_get_keys.py
@@ -51,28 +51,28 @@ def example():
 
         try:
             print '  %s: %s' % (key, codes_get(gid, key))
-        except CodesInternalError, err:
+        except CodesInternalError as err:
             print 'Error with key="%s" : %s' % (key, err.msg)
 
         # Native type integer
         key = 'stationNumber'
         try:
             print '  %s: %s' % (key, codes_get(gid, key))
-        except CodesInternalError, err:
+        except CodesInternalError as err:
             print 'Error with key="%s" : %s' % (key, err.msg)
 
         # Native type float
         key = 'airTemperatureAt2M'
         try:
             print '  %s: %s' % (key, codes_get(gid, key))
-        except CodesInternalError, err:
+        except CodesInternalError as err:
             print 'Error with key="%s" : %s' % (key, err.msg)
 
         # Native type string
         key = 'typicalDate'
         try:
             print '  %s: %s' % (key, codes_get(gid, key))
-        except CodesInternalError, err:
+        except CodesInternalError as err:
             print 'Error with key="%s" : %s' % (key, err.msg)
 
         # --------------------------------
@@ -114,11 +114,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_keys_iterator.py b/examples/python/bufr_keys_iterator.py
index 12b8ab8..6818abb 100644
--- a/examples/python/bufr_keys_iterator.py
+++ b/examples/python/bufr_keys_iterator.py
@@ -77,11 +77,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_read_header.py b/examples/python/bufr_read_header.py
index 46af8b8..1ee9efc 100644
--- a/examples/python/bufr_read_header.py
+++ b/examples/python/bufr_read_header.py
@@ -56,7 +56,7 @@ def example():
         for key in keys:
             try:
                 print '  %s: %s' % (key, codes_get(gid, key))
-            except CodesInternalError, err:
+            except CodesInternalError as err:
                 print 'Error with key="%s" : %s' % (key, err.msg)
 
         cnt += 1
@@ -71,11 +71,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_read_scatterometer.py b/examples/python/bufr_read_scatterometer.py
index f4c1e2f..452b2cd 100644
--- a/examples/python/bufr_read_scatterometer.py
+++ b/examples/python/bufr_read_scatterometer.py
@@ -96,11 +96,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_read_synop.py b/examples/python/bufr_read_synop.py
index 4be3975..a26ea4d 100644
--- a/examples/python/bufr_read_synop.py
+++ b/examples/python/bufr_read_synop.py
@@ -77,7 +77,7 @@ def example():
         for key in keys:
             try:
                 print '  %s: %s' % (key, codes_get(gid, key))
-            except CodesInternalError, err:
+            except CodesInternalError as err:
                 print 'Error with key="%s" : %s' % (key, err.msg)
 
         cnt += 1
@@ -92,11 +92,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_read_temp.py b/examples/python/bufr_read_temp.py
index 2923686..c06e645 100644
--- a/examples/python/bufr_read_temp.py
+++ b/examples/python/bufr_read_temp.py
@@ -44,7 +44,7 @@ def example():
         timePeriod = codes_get_array(bufr, "timePeriod")
         pressure = codes_get_array(bufr, "pressure")
         extendedVerticalSoundingSignificance = codes_get_array(bufr, "extendedVerticalSoundingSignificance")
-        geopotentialHeight = codes_get_array(bufr, "geopotentialHeight")
+        geopotentialHeight = codes_get_array(bufr, "nonCoordinateGeopotentialHeight")
         latitudeDisplacement = codes_get_array(bufr, "latitudeDisplacement")
         longitudeDisplacement = codes_get_array(bufr, "longitudeDisplacement")
         airTemperature = codes_get_array(bufr, "airTemperature")
@@ -66,11 +66,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
         return 1
 if __name__ == "__main__":
     sys.exit(main())
diff --git a/examples/python/bufr_read_temp.sh b/examples/python/bufr_read_temp.sh
index e6970bc..e73491b 100755
--- a/examples/python/bufr_read_temp.sh
+++ b/examples/python/bufr_read_temp.sh
@@ -21,7 +21,7 @@ rm -f $fTmp
 REDIRECT=/dev/null
 
 # Run it. The path to the BUFR file is hardcoded in the example
-$PYTHON $examples_src/bufr_read_temp.py 2> $REDIRECT > $fTmp
+$PYTHON $examples_src/bufr_read_temp.py > $fTmp
 
 #TODO: check the results
 
diff --git a/examples/python/bufr_read_tropical_cyclone.py b/examples/python/bufr_read_tropical_cyclone.py
index fe3fbf8..b0466ae 100644
--- a/examples/python/bufr_read_tropical_cyclone.py
+++ b/examples/python/bufr_read_tropical_cyclone.py
@@ -62,7 +62,7 @@ def example():
             numberOfPeriods=numberOfPeriods+1
             try:
                 codes_get_array(gid,"#%d#timePeriod" %numberOfPeriods)
-            except CodesInternalError, err:
+            except CodesInternalError as err:
                 break
             #the numberOfPeriods includes the analysis (period=0)
 
@@ -192,11 +192,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_set_keys.py b/examples/python/bufr_set_keys.py
index 2aae846..3026dd0 100644
--- a/examples/python/bufr_set_keys.py
+++ b/examples/python/bufr_set_keys.py
@@ -58,7 +58,7 @@ def example():
         key = 'bufrHeaderCentre'
         try:
             print '  %s: %s' % (key, codes_set(gid, key, val))
-        except CodesInternalError, err:
+        except CodesInternalError as err:
             print 'Error with key="%s" : %s' % (key, err.msg)
 
         # check bufrHeaderCentre's value
@@ -79,11 +79,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/bufr_subset.py b/examples/python/bufr_subset.py
index 47601bb..1c81c67 100644
--- a/examples/python/bufr_subset.py
+++ b/examples/python/bufr_subset.py
@@ -74,11 +74,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/count_messages.c b/examples/python/count_messages.c
deleted file mode 100644
index 27df352..0000000
--- a/examples/python/count_messages.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2005-2016 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- *
- * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
- * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
- */
-
-/*
- * C Implementation: get
- *
- * Description: how to get values using keys.
- *
- *
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "grib_api.h"
-
-void usage(char* prog) {
-  printf("usage: %s filename\n",prog);
-  exit(1);
-}
-
-int main(int argc, char** argv) {
-  int err = 0;
-
-  size_t i = 0;
-  int nmsg = 0;
-
-  double latitudeOfFirstGridPointInDegrees;
-  double longitudeOfFirstGridPointInDegrees;
-  double latitudeOfLastGridPointInDegrees;
-  double longitudeOfLastGridPointInDegrees;
-
-  double jDirectionIncrementInDegrees;
-  double iDirectionIncrementInDegrees;
-
-  long numberOfPointsAlongAParallel;
-  long numberOfPointsAlongAMeridian;
-
-  size_t values_len= 0;
-  double average;
-  double min;
-  double max;
-
-  FILE* in = NULL;
-  char* filename;
-  grib_handle *h = NULL;
-
-  if (argc<2) usage(argv[0]);
-  filename=argv[1];
-
-  in = fopen(filename,"r");
-  if(!in) {
-    printf("ERROR: unable to open file %s\n",filename);
-    return 1;
-  }
-
-  while((h = grib_handle_new_from_file(0,in,&err)) != NULL) {
-
-    GRIB_CHECK(err,0);
-
-    nmsg++;
-    printf("processing message number %d\n",nmsg);
-
-    /* get as a long*/
-    GRIB_CHECK(grib_get_long(h,"Ni",&numberOfPointsAlongAParallel),0);
-    printf("Ni=%ld\n",numberOfPointsAlongAParallel);
-
-    /* get as a long*/
-    GRIB_CHECK(grib_get_long(h,"Nj",&numberOfPointsAlongAMeridian),0);
-    printf("Nj=%ld\n",numberOfPointsAlongAMeridian);
-
-    /* get as a double*/
-    GRIB_CHECK(grib_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0);
-    printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees);
-
-    /* get as a double*/
-    GRIB_CHECK(grib_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0);
-    printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees);
-
-    /* get as a double*/
-    GRIB_CHECK(grib_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0);
-    printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees);
-
-    /* get as a double*/
-    GRIB_CHECK(grib_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0);
-    printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees);
-
-    /* get as a double*/
-    GRIB_CHECK(grib_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0);
-    printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees);
-
-    /* get as a double*/
-    GRIB_CHECK(grib_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0);
-    printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees);
-
-    /* get as a double*/
-    GRIB_CHECK(grib_get_double(h,"average",&average),0);
-    GRIB_CHECK(grib_get_double(h,"min",&min),0);
-    GRIB_CHECK(grib_get_double(h,"max",&max),0);
-
-    /* get the size of the values array*/
-    GRIB_CHECK(grib_get_size(h,"values",&values_len),0);
-
-    printf("There are %d, average is %g, min is %g, max is %g\n",(int)values_len,average,min,max);
-
-    for (i=0;i<100;i++) printf("-");
-    printf("\n");
-
-    grib_handle_delete(h);
-
-  }
-
-  fclose(in);
-  return 0;
-}
diff --git a/examples/python/count_messages.py b/examples/python/count_messages.py
deleted file mode 100644
index 0ae7257..0000000
--- a/examples/python/count_messages.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#
-# Copyright 2005-2016 ECMWF.
-#
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-#
-# In applying this licence, ECMWF does not waive the privileges and immunities
-# granted to it by virtue of its status as an intergovernmental organisation
-# nor does it submit to any jurisdiction.
-#
-
-import traceback
-import sys
-
-from eccodes import *
-
-INPUT = '../../data/tigge_pf_ecmwf.grib2'
-VERBOSE = 1  # verbose error reporting
-
-
-def example():
-    f = open(INPUT)
-
-    mcount = codes_count_in_file(f)
-    gid_list = [codes_grib_new_from_file(f) for i in range(mcount)]
-
-    f.close()
-
-    keys = [
-        'Ni',
-        'Nj',
-        'latitudeOfFirstGridPointInDegrees',
-        'longitudeOfFirstGridPointInDegrees',
-        'latitudeOfLastGridPointInDegrees',
-        'longitudeOfLastGridPointInDegrees',
-        'jDirectionIncrementInDegrees',
-        'iDirectionIncrementInDegrees',
-    ]
-
-    for i in range(mcount):
-        gid = gid_list[i]
-
-        print "processing message number", i + 1
-
-        for key in keys:
-            print '%s=%g' % (key, codes_get(gid, key))
-
-        print 'There are %d, average is %g, min is %g, max is %g' % (
-            codes_get_size(gid, 'values'),
-            codes_get(gid, 'average'),
-            codes_get(gid, 'min'),
-            codes_get(gid, 'max')
-        )
-
-        print '-' * 100
-
-        codes_release(gid)
-
-
-def main():
-    try:
-        example()
-    except CodesInternalError, err:
-        if VERBOSE:
-            traceback.print_exc(file=sys.stderr)
-        else:
-            print >>sys.stderr, err.msg
-
-        return 1
-
-if __name__ == "__main__":
-    sys.exit(main())
diff --git a/examples/python/count_messages.sh b/examples/python/count_messages.sh
deleted file mode 100755
index 28df868..0000000
--- a/examples/python/count_messages.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-. ./include.sh
-
-TEMP1=temp1.$$
-TEMP2=temp2.$$
-
-$PYTHON $examples_src/count_messages.py 2> $TEMP1 > $TEMP1
-./p_count_messages ../../data/tigge_pf_ecmwf.grib2 2> $TEMP2 > $TEMP2
-
-diff $TEMP1 $TEMP2
-rm $TEMP1 $TEMP2 || true
diff --git a/examples/python/get_product_kind.py b/examples/python/get_product_kind.py
index 5ffe3fa..d633895 100644
--- a/examples/python/get_product_kind.py
+++ b/examples/python/get_product_kind.py
@@ -43,11 +43,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_clone.py b/examples/python/grib_clone.py
index 71885fa..179f141 100644
--- a/examples/python/grib_clone.py
+++ b/examples/python/grib_clone.py
@@ -26,6 +26,8 @@ def example():
 
     gid = codes_grib_new_from_file(fin)
 
+    assert codes_is_missing(gid, 'Ni') == False
+    assert codes_is_missing(gid, 'Nj') == False
     nx = codes_get(gid, 'Ni')
     ny = codes_get(gid, 'Nj')
 
@@ -49,11 +51,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_clone.sh b/examples/python/grib_clone.sh
index 0e09827..cab3d27 100755
--- a/examples/python/grib_clone.sh
+++ b/examples/python/grib_clone.sh
@@ -3,5 +3,5 @@
 . ./include.sh
 
 REDIRECT=/dev/null
-$PYTHON $examples_src/grib_clone.py 2> $REDIRECT > $REDIRECT
-rm -f out.clone.grib || true
+$PYTHON $examples_src/grib_clone.py
+rm -f out.clone.grib
diff --git a/examples/python/grib_count_messages.c b/examples/python/grib_count_messages.c
new file mode 100644
index 0000000..e76b402
--- /dev/null
+++ b/examples/python/grib_count_messages.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+/*
+ * C Implementation: get
+ *
+ * Description: how to get values using keys.
+ *
+ *
+ *
+ */
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "grib_api.h"
+
+static void usage(char* prog) {
+    printf("usage: %s filename\n",prog);
+    exit(1);
+}
+
+int main(int argc, char** argv) {
+    int err = 0;
+
+    size_t i = 0;
+    int nmsg = 0;
+
+    double latitudeOfFirstGridPointInDegrees;
+    double longitudeOfFirstGridPointInDegrees;
+    double latitudeOfLastGridPointInDegrees;
+    double longitudeOfLastGridPointInDegrees;
+
+    double jDirectionIncrementInDegrees;
+    double iDirectionIncrementInDegrees;
+
+    long numberOfPointsAlongAParallel;
+    long numberOfPointsAlongAMeridian;
+
+    size_t values_len= 0;
+    double average;
+    double min;
+    double max;
+
+    FILE* in = NULL;
+    char* filename;
+    grib_handle *h = NULL;
+
+    if (argc<2) usage(argv[0]);
+    filename=argv[1];
+
+    in = fopen(filename,"r");
+    if(!in) {
+        printf("ERROR: unable to open file %s\n",filename);
+        return 1;
+    }
+
+    while((h = grib_handle_new_from_file(0,in,&err)) != NULL) {
+
+        GRIB_CHECK(err,0);
+
+        nmsg++;
+        printf("processing message number %d\n",nmsg);
+
+        /* get as a long*/
+        GRIB_CHECK(grib_get_long(h,"Ni",&numberOfPointsAlongAParallel),0);
+        printf("Ni=%ld\n",numberOfPointsAlongAParallel);
+
+        /* get as a long*/
+        GRIB_CHECK(grib_get_long(h,"Nj",&numberOfPointsAlongAMeridian),0);
+        printf("Nj=%ld\n",numberOfPointsAlongAMeridian);
+
+        /* get as a double*/
+        GRIB_CHECK(grib_get_double(h,"latitudeOfFirstGridPointInDegrees",&latitudeOfFirstGridPointInDegrees),0);
+        printf("latitudeOfFirstGridPointInDegrees=%g\n",latitudeOfFirstGridPointInDegrees);
+
+        /* get as a double*/
+        GRIB_CHECK(grib_get_double(h,"longitudeOfFirstGridPointInDegrees",&longitudeOfFirstGridPointInDegrees),0);
+        printf("longitudeOfFirstGridPointInDegrees=%g\n",longitudeOfFirstGridPointInDegrees);
+
+        /* get as a double*/
+        GRIB_CHECK(grib_get_double(h,"latitudeOfLastGridPointInDegrees",&latitudeOfLastGridPointInDegrees),0);
+        printf("latitudeOfLastGridPointInDegrees=%g\n",latitudeOfLastGridPointInDegrees);
+
+        /* get as a double*/
+        GRIB_CHECK(grib_get_double(h,"longitudeOfLastGridPointInDegrees",&longitudeOfLastGridPointInDegrees),0);
+        printf("longitudeOfLastGridPointInDegrees=%g\n",longitudeOfLastGridPointInDegrees);
+
+        /* get as a double*/
+        GRIB_CHECK(grib_get_double(h,"jDirectionIncrementInDegrees",&jDirectionIncrementInDegrees),0);
+        printf("jDirectionIncrementInDegrees=%g\n",jDirectionIncrementInDegrees);
+
+        /* get as a double*/
+        GRIB_CHECK(grib_get_double(h,"iDirectionIncrementInDegrees",&iDirectionIncrementInDegrees),0);
+        printf("iDirectionIncrementInDegrees=%g\n",iDirectionIncrementInDegrees);
+
+        /* get as a double*/
+        GRIB_CHECK(grib_get_double(h,"average",&average),0);
+        GRIB_CHECK(grib_get_double(h,"min",&min),0);
+        GRIB_CHECK(grib_get_double(h,"max",&max),0);
+
+        /* get the size of the values array*/
+        GRIB_CHECK(grib_get_size(h,"values",&values_len),0);
+
+        printf("There are %d, average is %g, min is %g, max is %g\n",(int)values_len,average,min,max);
+
+        for (i=0;i<100;i++) printf("-");
+        printf("\n");
+
+        grib_handle_delete(h);
+
+    }
+
+    fclose(in);
+    return 0;
+}
diff --git a/examples/python/grib_count_messages.py b/examples/python/grib_count_messages.py
new file mode 100644
index 0000000..c124d78
--- /dev/null
+++ b/examples/python/grib_count_messages.py
@@ -0,0 +1,72 @@
+#
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+#
+
+import traceback
+import sys
+
+from eccodes import *
+
+INPUT = '../../data/tigge_pf_ecmwf.grib2'
+VERBOSE = 1  # verbose error reporting
+
+
+def example():
+    f = open(INPUT)
+
+    mcount = codes_count_in_file(f)
+    gid_list = [codes_grib_new_from_file(f) for i in range(mcount)]
+
+    f.close()
+
+    keys = [
+        'Ni',
+        'Nj',
+        'latitudeOfFirstGridPointInDegrees',
+        'longitudeOfFirstGridPointInDegrees',
+        'latitudeOfLastGridPointInDegrees',
+        'longitudeOfLastGridPointInDegrees',
+        'jDirectionIncrementInDegrees',
+        'iDirectionIncrementInDegrees',
+    ]
+
+    for i in range(mcount):
+        gid = gid_list[i]
+
+        print "processing message number", i + 1
+
+        for key in keys:
+            print '%s=%g' % (key, codes_get(gid, key))
+
+        print 'There are %d, average is %g, min is %g, max is %g' % (
+            codes_get_size(gid, 'values'),
+            codes_get(gid, 'average'),
+            codes_get(gid, 'min'),
+            codes_get(gid, 'max')
+        )
+
+        print '-' * 100
+
+        codes_release(gid)
+
+
+def main():
+    try:
+        example()
+    except CodesInternalError as err:
+        if VERBOSE:
+            traceback.print_exc(file=sys.stderr)
+        else:
+            sys.stderr.write(err.msg + '\n')
+
+        return 1
+
+if __name__ == "__main__":
+    sys.exit(main())
diff --git a/examples/python/grib_count_messages.sh b/examples/python/grib_count_messages.sh
new file mode 100755
index 0000000..9c14368
--- /dev/null
+++ b/examples/python/grib_count_messages.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+. ./include.sh
+
+TEMP1=temp1.$$
+TEMP2=temp2.$$
+
+$PYTHON $examples_src/grib_count_messages.py 2> $TEMP1 > $TEMP1
+./p_grib_count_messages ../../data/tigge_pf_ecmwf.grib2 2> $TEMP2 > $TEMP2
+
+diff $TEMP1 $TEMP2
+rm -f $TEMP1 $TEMP2
diff --git a/examples/python/grib_get_keys.py b/examples/python/grib_get_keys.py
index 4f9be72..86dc61e 100644
--- a/examples/python/grib_get_keys.py
+++ b/examples/python/grib_get_keys.py
@@ -36,7 +36,7 @@ def example():
         for key in keys:
             try:
                 print '  %s: %s' % (key, codes_get(gid, key))
-            except CodesInternalError, err:
+            except CodesInternalError as err:
                 print 'Error with key="%s" : %s' % (key, err.msg)
 
         print 'There are %d values, average is %f, min is %f, max is %f' % (
@@ -54,11 +54,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_index.py b/examples/python/grib_index.py
index 9db34bb..440ee2d 100644
--- a/examples/python/grib_index.py
+++ b/examples/python/grib_index.py
@@ -80,11 +80,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_iterator.c b/examples/python/grib_iterator.c
index bd92faf..965da6c 100644
--- a/examples/python/grib_iterator.c
+++ b/examples/python/grib_iterator.c
@@ -21,7 +21,7 @@
 
 #include "grib_api.h"  
 
-void usage(char* prog) {
+static void usage(const char* prog) {
 	printf("Usage: %s grib_file\n",prog);
 	exit(1);
 }
diff --git a/examples/python/grib_iterator.py b/examples/python/grib_iterator.py
index 241c489..e73102f 100644
--- a/examples/python/grib_iterator.py
+++ b/examples/python/grib_iterator.py
@@ -4,9 +4,8 @@
 # This software is licensed under the terms of the Apache Licence Version 2.0
 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
 #
-# In applying this licence, ECMWF does not waive the privileges and immunities
-# granted to it by virtue of its status as an intergovernmental organisation
-# nor does it submit to any jurisdiction.
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
 import traceback
@@ -55,11 +54,11 @@ def example(INPUT):
 def main():
     try:
         example(sys.argv[1])
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_iterator.sh b/examples/python/grib_iterator.sh
index 54c41de..74005e7 100755
--- a/examples/python/grib_iterator.sh
+++ b/examples/python/grib_iterator.sh
@@ -4,12 +4,17 @@
 
 TEMP1=temp1.$$
 TEMP2=temp2.$$
+TEMP3=temp3.$$
 
+# Input file with some missing data values
 FILE="${data_dir}/reduced_latlon_surface.grib1"
 $PYTHON $examples_src/grib_iterator.py $FILE 2> $TEMP1 > $TEMP1
-./p_grib_iterator $FILE        2> $TEMP2 > $TEMP2
+./p_grib_iterator $FILE                      2> $TEMP2 > $TEMP2
 diff $TEMP1 $TEMP2
 
+$PYTHON $examples_src/grib_iterator_bitmap.py $FILE 2> $TEMP3 > $TEMP3
+diff $TEMP1 $TEMP3
+
 
 # Polar stereographic
 FILE="${ECCODES_SAMPLES_PATH}/polar_stereographic_pl_grib2.tmpl"
@@ -17,5 +22,8 @@ $PYTHON $examples_src/grib_iterator.py $FILE 2> $TEMP1 > $TEMP1
 ./p_grib_iterator $FILE        2> $TEMP2 > $TEMP2
 diff $TEMP1 $TEMP2
 
+$PYTHON $examples_src/grib_iterator_bitmap.py $FILE 2> $TEMP3 > $TEMP3
+diff $TEMP1 $TEMP3
+
 
-rm $TEMP1 $TEMP2 || true
+rm $TEMP1 $TEMP2 $TEMP3 || true
diff --git a/examples/python/grib_iterator_bitmap.py b/examples/python/grib_iterator_bitmap.py
new file mode 100644
index 0000000..5979f03
--- /dev/null
+++ b/examples/python/grib_iterator_bitmap.py
@@ -0,0 +1,77 @@
+#
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+# Description: How to use an iterator on lat/lon/values and query the bitmap
+#              for missing values
+#              (rather than compare each value with the missingValue key)
+#
+import traceback
+import sys
+
+from eccodes import *
+
+VERBOSE = 1  # verbose error reporting
+
+
+def example(INPUT):
+    f = open(INPUT)
+
+    while 1:
+        gid = codes_grib_new_from_file(f)
+        if gid is None:
+            break
+
+        iterid = codes_grib_iterator_new(gid, 0)
+
+        bitmapPresent = codes_get(gid, 'bitmapPresent')
+        if bitmapPresent:
+            # Get the bitmap array which contains 0s and 1s
+            bitmap = codes_get_array(gid, 'bitmap', int)
+            # Do some sanity checking
+            assert len(bitmap) == codes_get_size(gid, 'values')
+            assert len(bitmap) == codes_get(gid, 'numberOfDataPoints')
+
+        i = 0
+        while 1:
+            result = codes_grib_iterator_next(iterid)
+            if not result:
+                break
+
+            [lat, lon, value] = result
+
+            sys.stdout.write("- %d - lat=%.6e lon=%.6e value=" % (i, lat, lon))
+
+            # Consult bitmap to see if the i'th value is missing
+            if bitmapPresent and bitmap[i] == 0:
+                print "missing"
+            else:
+                print "%.6f" % value
+
+            i += 1
+
+        codes_grib_iterator_delete(iterid)
+        codes_release(gid)
+
+    f.close()
+
+
+def main():
+    try:
+        example(sys.argv[1])
+    except CodesInternalError as err:
+        if VERBOSE:
+            traceback.print_exc(file=sys.stderr)
+        else:
+            sys.stderr.write(err.msg + '\n')
+
+        return 1
+
+if __name__ == "__main__":
+    sys.exit(main())
diff --git a/examples/python/grib_keys_iterator.py b/examples/python/grib_keys_iterator.py
index c838162..62b91b8 100644
--- a/examples/python/grib_keys_iterator.py
+++ b/examples/python/grib_keys_iterator.py
@@ -50,11 +50,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_multi_write.py b/examples/python/grib_multi_write.py
index 8b9a5a1..f8d61b0 100644
--- a/examples/python/grib_multi_write.py
+++ b/examples/python/grib_multi_write.py
@@ -42,11 +42,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_nearest.py b/examples/python/grib_nearest.py
index 9dc272b..ad27638 100644
--- a/examples/python/grib_nearest.py
+++ b/examples/python/grib_nearest.py
@@ -44,11 +44,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_print_data.c b/examples/python/grib_print_data.c
index 26d9e63..039be0b 100644
--- a/examples/python/grib_print_data.c
+++ b/examples/python/grib_print_data.c
@@ -20,7 +20,7 @@
 
 #include "grib_api.h"
 
-void usage(char* prog) {
+static void usage(char* prog) {
   printf("usage: %s filename\n",prog);
   exit(1);
 }
diff --git a/examples/python/grib_print_data.py b/examples/python/grib_print_data.py
index 98e0b52..f862bb8 100644
--- a/examples/python/grib_print_data.py
+++ b/examples/python/grib_print_data.py
@@ -38,11 +38,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_set_bitmap.py b/examples/python/grib_set_bitmap.py
index e56dac0..9ea9dcf 100644
--- a/examples/python/grib_set_bitmap.py
+++ b/examples/python/grib_set_bitmap.py
@@ -21,12 +21,22 @@ def example():
     fout = open(OUTPUT, 'w')
     gid = codes_grib_new_from_file(fin)
 
+    # The missingValue is not coded in the message.
+    # It is a value we define as a placeholder for a missing value
+    # at a point in the grid.
+    # It should be chosen so that it cannot be confused
+    # with a valid field value
     codes_set(gid, 'missingValue', MISSING)
+
     values = codes_get_values(gid)
+
+    # Enable bitmap
     codes_set(gid, 'bitmapPresent', 1)
+
     # Change some data values to be missing
     num_missing = 0
     for i in range(100):
+        # Set every other value to a missing value
         if i % 2 == 0:
             values[i] = MISSING
             num_missing += 1
@@ -34,8 +44,9 @@ def example():
 
     # Check counts of missing and non-missing values
     num_data = codes_get(gid, 'numberOfDataPoints', int)
-    assert(codes_get(gid, 'numberOfCodedValues', int) == num_data - num_missing)
-    assert(codes_get(gid, 'numberOfMissing', int) == num_missing)
+    assert num_data == len(values)
+    assert codes_get(gid, 'numberOfCodedValues', int) == num_data - num_missing
+    assert codes_get(gid, 'numberOfMissing', int) == num_missing
 
     codes_write(gid, fout)
     codes_release(gid)
@@ -46,7 +57,7 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
diff --git a/examples/python/grib_set_keys.py b/examples/python/grib_set_keys.py
index 24586d7..64c2a7b 100644
--- a/examples/python/grib_set_keys.py
+++ b/examples/python/grib_set_keys.py
@@ -63,11 +63,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/grib_set_pv.py b/examples/python/grib_set_pv.py
index 0361f36..bcf74d0 100644
--- a/examples/python/grib_set_pv.py
+++ b/examples/python/grib_set_pv.py
@@ -47,11 +47,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/gts_get_keys.py b/examples/python/gts_get_keys.py
index 6b2f8bb..e1237a9 100644
--- a/examples/python/gts_get_keys.py
+++ b/examples/python/gts_get_keys.py
@@ -47,7 +47,7 @@ def example():
         for key in keys:
             try:
                 print '  %s: %s' % (key, codes_get(gid, key))
-            except CodesInternalError, err:
+            except CodesInternalError as err:
                 print 'Error with key="%s" : %s' % (key, err.msg)
 
         cnt += 1
@@ -62,11 +62,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/keys_iterator_bufr.py b/examples/python/keys_iterator_bufr.py
index b57e0f4..36e49c9 100644
--- a/examples/python/keys_iterator_bufr.py
+++ b/examples/python/keys_iterator_bufr.py
@@ -50,11 +50,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/keys_iterator_gts.py b/examples/python/keys_iterator_gts.py
index 9744ca0..63e5860 100644
--- a/examples/python/keys_iterator_gts.py
+++ b/examples/python/keys_iterator_gts.py
@@ -47,7 +47,7 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
diff --git a/examples/python/metar_get_keys.py b/examples/python/metar_get_keys.py
index 9c7584b..f41fae9 100644
--- a/examples/python/metar_get_keys.py
+++ b/examples/python/metar_get_keys.py
@@ -48,7 +48,7 @@ def example():
         for key in keys:
             try:
                 print '  %s: %s' % (key, codes_get(gid, key))
-            except CodesInternalError, err:
+            except CodesInternalError as err:
                 print 'Error with key="%s" : %s' % (key, err.msg)
 
         cnt += 1
@@ -63,11 +63,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/samples.py b/examples/python/samples.py
index dbd5f05..c99e00d 100644
--- a/examples/python/samples.py
+++ b/examples/python/samples.py
@@ -75,11 +75,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/examples/python/set_missing.py b/examples/python/set_missing.py
index 675cbc9..91400e6 100644
--- a/examples/python/set_missing.py
+++ b/examples/python/set_missing.py
@@ -45,11 +45,11 @@ def example():
 def main():
     try:
         example()
-    except CodesInternalError, err:
+    except CodesInternalError as err:
         if VERBOSE:
             traceback.print_exc(file=sys.stderr)
         else:
-            print >>sys.stderr, err.msg
+            sys.stderr.write(err.msg + '\n')
 
         return 1
 
diff --git a/fortran/eccodes_f90_int.f90 b/fortran/eccodes_f90_int.f90
index 2a63abf..1b005c8 100644
--- a/fortran/eccodes_f90_int.f90
+++ b/fortran/eccodes_f90_int.f90
@@ -96,8 +96,8 @@
                      codes_get_real4, &
                      codes_get_real8, &
                      codes_get_string, &
-                     codes_get_int_array, &
                      codes_get_byte_array, &
+                     codes_get_int_array, &
                      codes_get_real4_array, &
                      codes_get_real8_array
   end interface codes_get
diff --git a/fortran/eccodes_f90_long_int.f90 b/fortran/eccodes_f90_long_int.f90
index 4c8fdd4..960f55f 100644
--- a/fortran/eccodes_f90_long_int.f90
+++ b/fortran/eccodes_f90_long_int.f90
@@ -100,8 +100,8 @@
                      codes_get_real4, &
                      codes_get_real8, &
                      codes_get_string, &
-                     codes_get_int_array, &
                      codes_get_byte_array, &
+                     codes_get_int_array, &
                      codes_get_real4_array, &
                      codes_get_real8_array
   end interface codes_get
diff --git a/fortran/eccodes_f90_tail.f90 b/fortran/eccodes_f90_tail.f90
index f516a92..10adf9d 100644
--- a/fortran/eccodes_f90_tail.f90
+++ b/fortran/eccodes_f90_tail.f90
@@ -828,28 +828,130 @@ subroutine codes_get_string ( gribid, key, value, status )
     call grib_get_string ( gribid, key, value, status )
 end subroutine codes_get_string
 
-!
+subroutine codes_get_string_array ( gribid, key, value, status )
+    integer(kind=kindOfInt),               intent(in)        :: gribid
+    character(len=*),      intent(in)                        :: key
+    character(len=*), dimension(:),allocatable,intent(inout) :: value
+    integer(kind=kindOfInt),optional, intent(out)            :: status
+
+    character                 :: cvalue(size(value)*len(value(0)))
+    integer(kind=kindOfInt)                            :: iret
+    integer(kind=kindOfInt)                            :: nb_values
+    integer(kind=kindOfInt)                            :: slen
+    integer(kind=kindOfInt)                            :: i,s,j
+
+    if (allocated(value) .eqv. .false.) then
+      iret=CODES_NULL_POINTER
+      if (present(status)) then
+        status = iret
+      else
+        call grib_check(iret,'grib_get',key)
+      endif
+    end if
+
+    nb_values=size(value)
+    slen=len(value(0))
+    iret=grib_f_get_string_array ( gribid, key, cvalue , nb_values, slen )
+    value=transfer(cvalue,value)
+
+    if (iret /= 0) then
+      call grib_f_write_on_fail(gribid)
+    endif
+    if (present(status)) then
+      status = iret
+    else
+      call grib_check(iret,'grib_get',key)
+    endif
+
+end subroutine codes_get_string_array 
+
+! Note: This function supports the allocatable array attribute
+! -------------------------------------------------------------
 subroutine codes_get_int_array ( gribid, key, value, status )
     integer(kind=kindOfInt),               intent(in)  :: gribid
-    character(len=*),      intent(in)  :: key
+    character(len=*),      intent(in)                  :: key
     integer(kind=kindOfInt), dimension(:),allocatable,intent(inout) :: value
     integer(kind=kindOfInt),optional, intent(out)      :: status
+
     integer(kind=kindOfInt)                            :: iret
     integer(kind=kindOfInt)                            :: nb_values
+    integer(kind=kindOfInt)                            :: size_value
+    integer(kind=kindOfInt)                            :: i
+
+    iret=grib_f_get_size_int(gribid,key,nb_values)
+    if (iret /= 0) then
+      call grib_f_write_on_fail(gribid)
+      if (present(status)) then
+        status = iret
+      else
+        call grib_check(iret,'grib_get',key)
+      endif
+      return
+    endif
+    if (allocated(value) .eqv. .false.) then
+      allocate(value(nb_values))
+    end if
+    size_value=size(value)
+    iret=grib_f_get_int_array ( gribid, key, value , nb_values )
+    if (iret==0 .and. nb_values==1 .and. size_value/=1) then
+      do i=2,size_value
+        value(i)=value(1)
+      enddo
+    endif
+  if (iret /= 0) then
+    call grib_f_write_on_fail(gribid)
+  endif
+    if (present(status)) then
+      status = iret
+    else
+      call grib_check(iret,'grib_get',key)
+    endif
 
-    call grib_get_int_array ( gribid, key, value, status )
 end subroutine codes_get_int_array 
 
-!
+
+! Note: This function supports the allocatable array attribute
+! -------------------------------------------------------------
 subroutine codes_get_long_array ( gribid, key, value, status )
     integer(kind=kindOfInt),               intent(in)  :: gribid
     character(len=*),      intent(in)  :: key
     integer(kind=kindOfLong), dimension(:),allocatable,intent(inout) :: value
     integer(kind=kindOfInt),optional, intent(out)      :: status
     integer(kind=kindOfInt)                            :: iret
+
     integer(kind=kindOfInt)                            :: nb_values
+    integer(kind=kindOfInt)                            :: size_value
+    integer(kind=kindOfInt)                            :: i
+
+    iret=grib_f_get_size_int(gribid,key,nb_values)
+    if (iret /= 0) then
+      call grib_f_write_on_fail(gribid)
+      if (present(status)) then
+         status = iret
+      else
+         call grib_check(iret,'grib_get',key)
+      endif
+      return
+    endif
+    if (allocated(value) .eqv. .false.) then
+      allocate(value(nb_values))
+    end if
+    size_value=size(value)
+    iret=grib_f_get_long_array ( gribid, key, value , nb_values )
+    if (iret==0 .and. nb_values==1 .and. size_value/=1) then
+      do i=2,size_value
+        value(i)=value(1)
+      enddo
+    endif
+    if (iret /= 0) then
+	  call grib_f_write_on_fail(gribid)
+	endif
+    if (present(status)) then
+      status = iret
+    else
+      call grib_check(iret,'grib_get',key)
+    endif
 
-    call grib_get_long_array ( gribid, key, value, status )
 end subroutine codes_get_long_array 
 
 !
@@ -861,24 +963,55 @@ subroutine codes_get_byte_array ( gribid, key, value, length, status )
     integer(kind=kindOfInt), optional,     intent(out) :: status
     integer(kind=kindOfInt)                            :: iret
     integer(kind=kindOfInt)                            :: nb_values
-    character                                          :: bytes(size(value))
 
     call grib_get_byte_array ( gribid, key, value, length, status )
 end subroutine codes_get_byte_array 
 
-!
+! Note: This function supports the allocatable array attribute
+! -------------------------------------------------------------
 subroutine codes_get_real4_array ( gribid, key, value, status)
     integer(kind=kindOfInt),                 intent(in)  :: gribid
     character(len=*),                        intent(in)  :: key
     real(kind = kindOfFloat), dimension(:),allocatable, intent(inout) :: value
     integer(kind=kindOfInt),optional,        intent(out) :: status
     integer(kind=kindOfInt)                              :: iret
-    integer(kind=kindOfInt)                              :: nb_values
 
-    call grib_get_real4_array ( gribid, key, value, status)
+    integer(kind=kindOfInt)                              :: nb_values
+    integer(kind=kindOfInt)                              :: size_value
+    integer(kind=kindOfInt)                              :: i
+
+    iret=grib_f_get_size_int(gribid,key,nb_values)
+    if (iret /= 0) then
+      call grib_f_write_on_fail(gribid)
+      if (present(status)) then
+         status = iret
+      else
+         call grib_check(iret,'grib_get',key)
+      endif
+      return
+    endif
+    if (allocated(value) .eqv. .false.) then
+      allocate(value(nb_values))
+    end if
+    size_value=size(value)
+    iret=grib_f_get_real4_array ( gribid, key, value , nb_values )
+    if (iret==0 .and. nb_values==1 .and. size_value/=1) then
+      do i=2,size_value
+        value(i)=value(1)
+      enddo
+    endif
+	if (iret /= 0) then
+	  call grib_f_write_on_fail(gribid)
+	endif
+    if (present(status)) then
+       status = iret
+    else
+       call grib_check(iret,'grib_get',key)
+    endif
 end subroutine codes_get_real4_array
 
-!
+! Note: This function supports the allocatable array attribute
+! -------------------------------------------------------------
 subroutine codes_get_real8_array ( gribid, key, value, status )
     integer(kind=kindOfInt),                   intent(in)  :: gribid
     character(len=*),                          intent(in)  :: key
@@ -887,7 +1020,37 @@ subroutine codes_get_real8_array ( gribid, key, value, status )
     integer(kind=kindOfInt)                                :: iret
     integer(kind=kindOfInt)                                :: nb_values
 
-    call grib_get_real8_array ( gribid, key, value, status )
+    integer(kind=kindOfInt)                                :: size_value
+    integer(kind=kindOfInt)                                :: i
+
+    iret=grib_f_get_size_int(gribid,key,nb_values)
+    if (iret /= 0) then
+      call grib_f_write_on_fail(gribid)
+      if (present(status)) then
+        status = iret
+      else
+        call grib_check(iret,'grib_get',key)
+      endif
+      return
+    endif
+    if (allocated(value) .eqv. .false.) then
+      allocate(value(nb_values))
+    end if
+    size_value=size(value)
+    iret=grib_f_get_real8_array ( gribid, key, value, nb_values )
+    if (iret==0 .and. nb_values==1 .and. size_value/=1) then
+      do i=2,size_value
+        value(i)=value(1)
+      enddo
+    endif
+    if (iret /= 0) then
+      call grib_f_write_on_fail(gribid)
+    endif
+    if (present(status)) then
+      status = iret
+    else
+      call grib_check(iret,'grib_get',key)
+    endif
 end subroutine codes_get_real8_array 
 
 !
@@ -1017,7 +1180,6 @@ subroutine codes_set_byte_array ( gribid, key, value, length, status )
     integer(kind=kindOfInt), optional,     intent(out) :: status
     integer(kind=kindOfInt)                            :: iret
     integer(kind=kindOfInt)                            :: nb_values
-    character                                          :: bytes(size(value))
 
     call grib_set_byte_array ( gribid, key, value, length, status )
 end subroutine codes_set_byte_array 
diff --git a/fortran/grib_api_externals.h b/fortran/grib_api_externals.h
index 2bbd914..7e76455 100644
--- a/fortran/grib_api_externals.h
+++ b/fortran/grib_api_externals.h
@@ -32,7 +32,8 @@ integer, external :: grib_f_get_int, grib_f_get_long,grib_f_get_int_array, &
                      grib_f_get_real8, grib_f_get_real8_array, &
                      grib_f_get_real4_element, grib_f_get_real8_element, &
                      grib_f_get_real4_elements, grib_f_get_real8_elements, &
-					 grib_f_get_string,grib_f_is_missing,grib_f_is_defined
+					           grib_f_get_string,grib_f_get_string_array, &
+                     grib_f_is_missing,grib_f_is_defined
 integer, external :: grib_f_new_from_index, &
                      grib_f_index_new_from_file, &
                      grib_f_index_add_file, &
diff --git a/fortran/grib_f90_tail.f90 b/fortran/grib_f90_tail.f90
index adaa4bd..8e67cc5 100644
--- a/fortran/grib_f90_tail.f90
+++ b/fortran/grib_f90_tail.f90
@@ -2048,35 +2048,15 @@
   !> @param status       GRIB_SUCCESS if OK, integer value on error
   subroutine grib_get_int_array ( gribid, key, value, status )
       integer(kind=kindOfInt),               intent(in)  :: gribid
-      character(len=*),      intent(in)  :: key
-      integer(kind=kindOfInt), dimension(:),allocatable,intent(inout) :: value
+      character(len=*),      intent(in)                  :: key
+      integer(kind=kindOfInt), dimension(:), intent(out) :: value
       integer(kind=kindOfInt),optional, intent(out)      :: status
 
       integer(kind=kindOfInt)                            :: iret
       integer(kind=kindOfInt)                            :: nb_values
-      integer(kind=kindOfInt)                            :: size_value
-      integer(kind=kindOfInt)                            :: i
 
-      iret=grib_f_get_size_int(gribid,key,nb_values)
-      if (iret /= 0) then
-        call grib_f_write_on_fail(gribid)
-        if (present(status)) then
-           status = iret
-        else
-           call grib_check(iret,'grib_get',key)
-        endif
-        return
-      endif
-      if (allocated(value) .eqv. .false.) then
-        allocate(value(nb_values))
-      end if
-      size_value=size(value)
+      nb_values = size(value)
       iret=grib_f_get_int_array ( gribid, key, value , nb_values )
-      if (iret==0 .and. nb_values==1 .and. size_value/=1) then
-        do i=2,size_value
-          value(i)=value(1)
-        enddo
-      endif
 	  if (iret /= 0) then
 	    call grib_f_write_on_fail(gribid)
 	  endif
@@ -2100,34 +2080,14 @@
   subroutine grib_get_long_array ( gribid, key, value, status )
     integer(kind=kindOfInt),               intent(in)  :: gribid
     character(len=*),      intent(in)  :: key
-    integer(kind = kindOfLong),dimension(:),allocatable,intent(inout) :: value
+    integer(kind = kindOfLong),dimension(:), intent(out) :: value
     integer(kind=kindOfInt),optional, intent(out)      :: status
     integer(kind=kindOfInt)                            :: iret
     integer(kind=kindOfInt)                            :: nb_values
-    integer(kind=kindOfInt)                            :: size_value
-    integer(kind=kindOfInt)                            :: i
 
-    iret=grib_f_get_size_int(gribid,key,nb_values)
-    if (iret /= 0) then
-      call grib_f_write_on_fail(gribid)
-      if (present(status)) then
-         status = iret
-      else
-         call grib_check(iret,'grib_get',key)
-      endif
-      return
-    endif
-    if (allocated(value) .eqv. .false.) then
-      allocate(value(nb_values))
-    end if
-    size_value=size(value)
+    nb_values = size(value)
     iret=grib_f_get_long_array ( gribid, key, value , nb_values )
-    if (iret==0 .and. nb_values==1 .and. size_value/=1) then
-      do i=2,size_value
-        value(i)=value(1)
-      enddo
-    endif
-    if (iret /= 0) then
+	if (iret /= 0) then
 	  call grib_f_write_on_fail(gribid)
 	endif
     if (present(status)) then
@@ -2188,40 +2148,20 @@
   subroutine grib_get_real4_array ( gribid, key, value, status )
       integer(kind=kindOfInt),                 intent(in)  :: gribid
       character(len=*),                        intent(in)  :: key
-      real(kind = kindOfFloat), dimension(:),allocatable,intent(inout) :: value
+      real(kind = kindOfFloat), dimension(:), intent(out)  :: value
       integer(kind=kindOfInt),optional,        intent(out) :: status
       integer(kind=kindOfInt)                              :: iret
       integer(kind=kindOfInt)                              :: nb_values
-      integer(kind=kindOfInt)                              :: size_value
-      integer(kind=kindOfInt)                                :: i
 
-      iret=grib_f_get_size_int(gribid,key,nb_values)
-      if (iret /= 0) then
-        call grib_f_write_on_fail(gribid)
-        if (present(status)) then
-           status = iret
-        else
-           call grib_check(iret,'grib_get',key)
-        endif
-        return
-      endif
-      if (allocated(value) .eqv. .false.) then
-        allocate(value(nb_values))
-      end if
-      size_value=size(value)
+      nb_values = size(value)
       iret=grib_f_get_real4_array ( gribid, key, value , nb_values )
-      if (iret==0 .and. nb_values==1 .and. size_value/=1) then
-        do i=2,size_value
-          value(i)=value(1)
-        enddo
-      endif
 	  if (iret /= 0) then
 	    call grib_f_write_on_fail(gribid)
 	  endif
       if (present(status)) then
-         status = iret
+        status = iret
       else
-         call grib_check(iret,'grib_get',key)
+        call grib_check(iret,'grib_get',key)
       endif
   end subroutine grib_get_real4_array
 
@@ -2238,36 +2178,16 @@
   subroutine grib_get_real8_array ( gribid, key, value, status )
       integer(kind=kindOfInt),                   intent(in)  :: gribid
       character(len=*),                          intent(in)  :: key
-      real(kind = kindOfDouble),dimension(:),allocatable,intent(inout) :: value
+      real(kind = kindOfDouble),dimension(:), intent(out) :: value
       integer(kind=kindOfInt),optional,          intent(out) :: status
       integer(kind=kindOfInt)                                :: iret
       integer(kind=kindOfInt)                                :: nb_values
-      integer(kind=kindOfInt)                                :: size_value
-      integer(kind=kindOfInt)                                :: i
 
-      iret=grib_f_get_size_int(gribid,key,nb_values)
-      if (iret /= 0) then
-        call grib_f_write_on_fail(gribid)
-        if (present(status)) then
-           status = iret
-        else
-           call grib_check(iret,'grib_get',key)
-        endif
-        return
-      endif
-      if (allocated(value) .eqv. .false.) then
-        allocate(value(nb_values))
-      end if
-      size_value=size(value)
+      nb_values = size(value)
       iret=grib_f_get_real8_array ( gribid, key, value, nb_values )
-      if (iret==0 .and. nb_values==1 .and. size_value/=1) then
-        do i=2,size_value
-          value(i)=value(1)
-        enddo
-      endif
-      if (iret /= 0) then
-        call grib_f_write_on_fail(gribid)
-      endif
+	  if (iret /= 0) then
+	    call grib_f_write_on_fail(gribid)
+	  endif
       if (present(status)) then
          status = iret
       else
diff --git a/fortran/grib_fortran.c b/fortran/grib_fortran.c
index 532264b..c2d2b4c 100644
--- a/fortran/grib_fortran.c
+++ b/fortran/grib_fortran.c
@@ -26,43 +26,43 @@
 #include <ctype.h>
 
 /* Have file ids distinct from grib ids, in order to be
-*  protected against user errors where a file id is given
-*  instead of a grib id or viceversa
-*/
+ *  protected against user errors where a file id is given
+ *  instead of a grib id or viceversa
+ */
 #define MIN_FILE_ID 50000
 
 #if GRIB_PTHREADS
- static pthread_once_t once  = PTHREAD_ONCE_INIT;
- static pthread_mutex_t handle_mutex = PTHREAD_MUTEX_INITIALIZER;
- static pthread_mutex_t index_mutex = PTHREAD_MUTEX_INITIALIZER;
- static pthread_mutex_t multi_handle_mutex = PTHREAD_MUTEX_INITIALIZER;
- static pthread_mutex_t iterator_mutex = PTHREAD_MUTEX_INITIALIZER;
- static pthread_mutex_t keys_iterator_mutex = PTHREAD_MUTEX_INITIALIZER;
-
- static void init() {
-   pthread_mutexattr_t attr;
-
-   pthread_mutexattr_init(&attr);
-   pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
-   pthread_mutex_init(&handle_mutex,&attr);
-   pthread_mutex_init(&index_mutex,&attr);
-   pthread_mutex_init(&multi_handle_mutex,&attr);
-   pthread_mutex_init(&iterator_mutex,&attr);
-   pthread_mutex_init(&keys_iterator_mutex,&attr);
-   pthread_mutexattr_destroy(&attr);
- }
+static pthread_once_t once  = PTHREAD_ONCE_INIT;
+static pthread_mutex_t handle_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t index_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t multi_handle_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t iterator_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t keys_iterator_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static void init() {
+    pthread_mutexattr_t attr;
+
+    pthread_mutexattr_init(&attr);
+    pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
+    pthread_mutex_init(&handle_mutex,&attr);
+    pthread_mutex_init(&index_mutex,&attr);
+    pthread_mutex_init(&multi_handle_mutex,&attr);
+    pthread_mutex_init(&iterator_mutex,&attr);
+    pthread_mutex_init(&keys_iterator_mutex,&attr);
+    pthread_mutexattr_destroy(&attr);
+}
 #elif GRIB_OMP_THREADS
- static int once = 0;
- static omp_nest_lock_t handle_mutex;
- static omp_nest_lock_t index_mutex;
- static omp_nest_lock_t multi_handle_mutex;
- static omp_nest_lock_t iterator_mutex;
- static omp_nest_lock_t keys_iterator_mutex;
-
- static void init()
- {
+static int once = 0;
+static omp_nest_lock_t handle_mutex;
+static omp_nest_lock_t index_mutex;
+static omp_nest_lock_t multi_handle_mutex;
+static omp_nest_lock_t iterator_mutex;
+static omp_nest_lock_t keys_iterator_mutex;
+
+static void init()
+{
     GRIB_OMP_CRITICAL(lock_fortran)
-    {
+            {
         if (once == 0)
         {
             omp_init_nest_lock(&handle_mutex);
@@ -72,8 +72,8 @@
             omp_init_nest_lock(&keys_iterator_mutex);
             once = 1;
         }
-    }
- }
+            }
+}
 #endif
 
 int GRIB_NULL=-1;
@@ -136,7 +136,8 @@ static l_grib_file*   file_set   = NULL;
 static l_grib_iterator* iterator_set = NULL;
 static l_grib_keys_iterator* keys_iterator_set = NULL;
 
-static char* cast_char(char* buf, char* fortstr,int len){
+static char* cast_char(char* buf, char* fortstr,int len)
+{
     char *p,*end;
     if (len == 0 || fortstr == NULL) return NULL;
     memcpy(buf,fortstr,len);
@@ -152,7 +153,8 @@ static char* cast_char(char* buf, char* fortstr,int len){
     return buf;
 }
 
-static void czstr_to_fortran(char* str,int len) {
+static void czstr_to_fortran(char* str,int len)
+{
     char *p,*end;
     p=str; end=str+len-1;
     while (*p != '\0' && p != end) p++;
@@ -160,14 +162,26 @@ static void czstr_to_fortran(char* str,int len) {
     *p=' ';
 }
 
-static void fort_char_clean(char* str,int len) {
+/*static void czstr_to_fortran_replace0(char* str,int len)
+{
+    char *p,*end;
+    p=str; end=str+len-1;
+    while (p != end) {
+      if (*p=='\0') *p=' ';
+      p++;
+    }
+}*/
+
+static void fort_char_clean(char* str,int len)
+{
     char *p,*end;
     p=str; end=str+len-1;
     while (p != end) *(p++)=' ';
     *p=' ';
 }
 
-static int push_file(FILE* f,char* buffer){
+static int push_file(FILE* f,char* buffer)
+{
     l_grib_file* current  = file_set;
     l_grib_file* previous = file_set;
     l_grib_file* the_new      = NULL;
@@ -175,6 +189,7 @@ static int push_file(FILE* f,char* buffer){
 
     if(!file_set){
         file_set = (l_grib_file*)malloc(sizeof(l_grib_file));
+        Assert(file_set);
         file_set->id   = myindex;
         file_set->f    = f;
         file_set->buffer =buffer;
@@ -196,6 +211,7 @@ static int push_file(FILE* f,char* buffer){
     }
 
     the_new = (l_grib_file*)malloc(sizeof(l_grib_file));
+    Assert(the_new);
     the_new->id   = myindex;
     the_new->f    = f;
     the_new->buffer    = buffer;
@@ -204,7 +220,8 @@ static int push_file(FILE* f,char* buffer){
     return myindex;
 }
 
-static void _push_handle(grib_handle *h,int *gid){
+static void _push_handle(grib_handle *h,int *gid)
+{
     l_grib_handle* current= handle_set;
     l_grib_handle* previous= handle_set;
     l_grib_handle* the_new= NULL;
@@ -226,6 +243,7 @@ static void _push_handle(grib_handle *h,int *gid){
 
     if(!handle_set){
         handle_set = (l_grib_handle*)malloc(sizeof(l_grib_handle));
+        Assert(handle_set);
         handle_set->id   = myindex;
         handle_set->h    = h;
         handle_set->next = NULL;
@@ -250,6 +268,7 @@ static void _push_handle(grib_handle *h,int *gid){
     }
 
     the_new = (l_grib_handle*)malloc(sizeof(l_grib_handle));
+    Assert(the_new);
     the_new->id   = myindex;
     the_new->h    = h;
     the_new->next = current;
@@ -259,7 +278,8 @@ static void _push_handle(grib_handle *h,int *gid){
     return;
 }
 
-static void _push_index(grib_index *h,int *gid){
+static void _push_index(grib_index *h,int *gid)
+{
     l_grib_index* current= index_set;
     l_grib_index* previous= index_set;
     l_grib_index* the_new= NULL;
@@ -281,6 +301,7 @@ static void _push_index(grib_index *h,int *gid){
 
     if(!index_set){
         index_set = (l_grib_index*)malloc(sizeof(l_grib_index));
+        Assert(index_set);
         index_set->id   = myindex;
         index_set->h    = h;
         index_set->next = NULL;
@@ -305,6 +326,7 @@ static void _push_index(grib_index *h,int *gid){
     }
 
     the_new = (l_grib_index*)malloc(sizeof(l_grib_index));
+    Assert(the_new);
     the_new->id   = myindex;
     the_new->h    = h;
     the_new->next = current;
@@ -314,7 +336,8 @@ static void _push_index(grib_index *h,int *gid){
     return;
 }
 
-static void _push_multi_handle(grib_multi_handle *h,int *gid){
+static void _push_multi_handle(grib_multi_handle *h,int *gid)
+{
     l_grib_multi_handle* current= multi_handle_set;
     l_grib_multi_handle* previous= multi_handle_set;
     l_grib_multi_handle* the_new= NULL;
@@ -336,6 +359,7 @@ static void _push_multi_handle(grib_multi_handle *h,int *gid){
 
     if(!multi_handle_set){
         multi_handle_set = (l_grib_multi_handle*)malloc(sizeof(l_grib_multi_handle));
+        Assert(multi_handle_set);
         multi_handle_set->id   = myindex;
         multi_handle_set->h    = h;
         multi_handle_set->next = NULL;
@@ -360,6 +384,7 @@ static void _push_multi_handle(grib_multi_handle *h,int *gid){
     }
 
     the_new = (l_grib_multi_handle*)malloc(sizeof(l_grib_multi_handle));
+    Assert(the_new);
     the_new->id   = myindex;
     the_new->h    = h;
     the_new->next = current;
@@ -369,31 +394,35 @@ static void _push_multi_handle(grib_multi_handle *h,int *gid){
     return;
 }
 
-static void push_handle(grib_handle *h,int *gid){
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&handle_mutex)
+static void push_handle(grib_handle *h,int *gid)
+{
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&handle_mutex);
     _push_handle(h,gid);
-    GRIB_MUTEX_UNLOCK(&handle_mutex)
+    GRIB_MUTEX_UNLOCK(&handle_mutex);
     return;
 }
 
-static void push_index(grib_index *h,int *gid){
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&index_mutex)
+static void push_index(grib_index *h,int *gid)
+{
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&index_mutex);
     _push_index(h,gid);
-    GRIB_MUTEX_UNLOCK(&index_mutex)
+    GRIB_MUTEX_UNLOCK(&index_mutex);
     return;
 }
 
-static void push_multi_handle(grib_multi_handle *h,int *gid){
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&multi_handle_mutex)
+static void push_multi_handle(grib_multi_handle *h,int *gid)
+{
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&multi_handle_mutex);
     _push_multi_handle(h,gid);
-    GRIB_MUTEX_UNLOCK(&multi_handle_mutex)
+    GRIB_MUTEX_UNLOCK(&multi_handle_mutex);
     return;
 }
 
-static int _push_iterator(grib_iterator *i){
+static int _push_iterator(grib_iterator *i)
+{
     l_grib_iterator* current  = iterator_set;
     l_grib_iterator* previous = iterator_set;
     l_grib_iterator* the_new      = NULL;
@@ -401,6 +430,7 @@ static int _push_iterator(grib_iterator *i){
 
     if(!iterator_set){
         iterator_set = (l_grib_iterator*)malloc(sizeof(l_grib_iterator));
+        Assert(iterator_set);
         iterator_set->id   = myindex;
         iterator_set->i    = i;
         iterator_set->next = NULL;
@@ -421,6 +451,7 @@ static int _push_iterator(grib_iterator *i){
     }
 
     the_new = (l_grib_iterator*)malloc(sizeof(l_grib_iterator));
+    Assert(the_new);
     the_new->id   = myindex;
     the_new->i    = i;
     the_new->next = current;
@@ -429,16 +460,18 @@ static int _push_iterator(grib_iterator *i){
     return myindex;
 }
 
-static int push_iterator(grib_iterator *i){
+static int push_iterator(grib_iterator *i)
+{
     int ret=0;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&iterator_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&iterator_mutex);
     ret=_push_iterator(i);
-    GRIB_MUTEX_UNLOCK(&iterator_mutex)
+    GRIB_MUTEX_UNLOCK(&iterator_mutex);
     return ret;
 }
 
-static int _push_keys_iterator(grib_keys_iterator *i){
+static int _push_keys_iterator(grib_keys_iterator *i)
+{
     l_grib_keys_iterator* current  = keys_iterator_set;
     l_grib_keys_iterator* previous = keys_iterator_set;
     l_grib_keys_iterator* the_new      = NULL;
@@ -446,6 +479,7 @@ static int _push_keys_iterator(grib_keys_iterator *i){
 
     if(!keys_iterator_set){
         keys_iterator_set = (l_grib_keys_iterator*)malloc(sizeof(l_grib_keys_iterator));
+        Assert(keys_iterator_set);
         keys_iterator_set->id   = myindex;
         keys_iterator_set->i    = i;
         keys_iterator_set->next = NULL;
@@ -467,6 +501,7 @@ static int _push_keys_iterator(grib_keys_iterator *i){
     if(!previous) return -1;
 
     the_new = (l_grib_keys_iterator*)malloc(sizeof(l_grib_keys_iterator));
+    Assert(the_new);
     the_new->id   = myindex;
     the_new->i    = i;
     the_new->next = current;
@@ -475,76 +510,81 @@ static int _push_keys_iterator(grib_keys_iterator *i){
     return myindex;
 }
 
-static int push_keys_iterator(grib_keys_iterator *i){
+static int push_keys_iterator(grib_keys_iterator *i)
+{
     int ret=0;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&keys_iterator_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex);
     ret=_push_keys_iterator(i);
-    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex)
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex);
     return ret;
 }
 
-static grib_handle* _get_handle(int handle_id){
+static grib_handle* _get_handle(int handle_id)
+{
     l_grib_handle* current= handle_set;
 
     while(current){
         if(current->id == handle_id) return current->h;
         current = current->next;
     }
-
     return NULL;
 }
 
-static grib_index* _get_index(int index_id){
+static grib_index* _get_index(int index_id)
+{
     l_grib_index* current= index_set;
 
     while(current){
         if(current->id == index_id) return current->h;
         current = current->next;
     }
-
     return NULL;
 }
 
-static grib_multi_handle* _get_multi_handle(int multi_handle_id){
+static grib_multi_handle* _get_multi_handle(int multi_handle_id)
+{
     l_grib_multi_handle* current= multi_handle_set;
 
     while(current){
         if(current->id == multi_handle_id) return current->h;
         current = current->next;
     }
-
     return NULL;
 }
 
-static grib_handle* get_handle(int handle_id){
+static grib_handle* get_handle(int handle_id)
+{
     grib_handle* h=NULL;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&handle_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&handle_mutex);
     h=_get_handle(handle_id);
-    GRIB_MUTEX_UNLOCK(&handle_mutex)
+    GRIB_MUTEX_UNLOCK(&handle_mutex);
     return h;
 }
 
-static grib_index* get_index(int index_id){
+static grib_index* get_index(int index_id)
+{
     grib_index* h=NULL;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&index_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&index_mutex);
     h=_get_index(index_id);
-    GRIB_MUTEX_UNLOCK(&index_mutex)
+    GRIB_MUTEX_UNLOCK(&index_mutex);
     return h;
 }
 
-static grib_multi_handle* get_multi_handle(int multi_handle_id){
+static grib_multi_handle* get_multi_handle(int multi_handle_id)
+{
     grib_multi_handle* h=NULL;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&multi_handle_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&multi_handle_mutex);
     h=_get_multi_handle(multi_handle_id);
-    GRIB_MUTEX_UNLOCK(&multi_handle_mutex)
+    GRIB_MUTEX_UNLOCK(&multi_handle_mutex);
     return h;
 }
 
-static FILE* get_file(int file_id){
+static FILE* get_file(int file_id)
+{
     l_grib_file* current  = file_set;
 
     if ( file_id < MIN_FILE_ID ) return NULL;
@@ -556,7 +596,8 @@ static FILE* get_file(int file_id){
     return NULL;
 }
 
-static grib_iterator* _get_iterator(int iterator_id){
+static grib_iterator* _get_iterator(int iterator_id)
+{
     l_grib_iterator* current  = iterator_set;
 
     while(current){
@@ -565,16 +606,19 @@ static grib_iterator* _get_iterator(int iterator_id){
     }
     return NULL;
 }
-static grib_iterator* get_iterator(int iterator_id){
+
+static grib_iterator* get_iterator(int iterator_id)
+{
     grib_iterator* i=NULL;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&iterator_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&iterator_mutex);
     i=_get_iterator(iterator_id);
-    GRIB_MUTEX_UNLOCK(&iterator_mutex)
+    GRIB_MUTEX_UNLOCK(&iterator_mutex);
     return i;
 }
 
-static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id){
+static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id)
+{
     l_grib_keys_iterator* current  = keys_iterator_set;
 
     while(current){
@@ -584,16 +628,18 @@ static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id){
     return NULL;
 }
 
-static grib_keys_iterator* get_keys_iterator(int keys_iterator_id){
+static grib_keys_iterator* get_keys_iterator(int keys_iterator_id)
+{
     grib_keys_iterator* i=NULL;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&keys_iterator_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex);
     i=_get_keys_iterator(keys_iterator_id);
-    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex)
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex);
     return i;
 }
 
-static int clear_file(int file_id){
+static int clear_file(int file_id)
+{
     l_grib_file* current = file_set;
     while(current){
         if(current->id == file_id){
@@ -607,8 +653,8 @@ static int clear_file(int file_id){
     return GRIB_INVALID_FILE;
 }
 
-static int _clear_handle(int handle_id){
-
+static int _clear_handle(int handle_id)
+{
     l_grib_handle* current  = handle_set;
     if (handle_id<0) return 0;
     while(current){
@@ -621,8 +667,8 @@ static int _clear_handle(int handle_id){
     return GRIB_SUCCESS;
 }
 
-static int _clear_index(int index_id){
-
+static int _clear_index(int index_id)
+{
     l_grib_index* current  = index_set;
 
     while(current){
@@ -638,8 +684,8 @@ static int _clear_index(int index_id){
     return GRIB_SUCCESS;
 }
 
-static int _clear_multi_handle(int multi_handle_id){
-
+static int _clear_multi_handle(int multi_handle_id)
+{
     l_grib_multi_handle* current  = multi_handle_set;
 
     while(current){
@@ -652,35 +698,38 @@ static int _clear_multi_handle(int multi_handle_id){
     return GRIB_SUCCESS;
 }
 
-static int clear_handle(int handle_id){
+static int clear_handle(int handle_id)
+{
     int ret=0;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&handle_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&handle_mutex);
     ret=_clear_handle(handle_id);
-    GRIB_MUTEX_UNLOCK(&handle_mutex)
+    GRIB_MUTEX_UNLOCK(&handle_mutex);
     return ret;
 }
 
-static int clear_index(int index_id){
+static int clear_index(int index_id)
+{
     int ret=0;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&index_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&index_mutex);
     ret=_clear_index(index_id);
-    GRIB_MUTEX_UNLOCK(&index_mutex)
+    GRIB_MUTEX_UNLOCK(&index_mutex);
     return ret;
 }
 
-static int clear_multi_handle(int multi_handle_id){
+static int clear_multi_handle(int multi_handle_id)
+{
     int ret=0;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&multi_handle_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&multi_handle_mutex);
     ret=_clear_multi_handle(multi_handle_id);
-    GRIB_MUTEX_UNLOCK(&multi_handle_mutex)
+    GRIB_MUTEX_UNLOCK(&multi_handle_mutex);
     return ret;
 }
 
-static int _clear_iterator(int iterator_id){
-
+static int _clear_iterator(int iterator_id)
+{
     l_grib_iterator* current  = iterator_set;
 
     while(current){
@@ -693,16 +742,18 @@ static int _clear_iterator(int iterator_id){
     return GRIB_INVALID_ITERATOR;
 }
 
-static int clear_iterator(int iterator_id){
+static int clear_iterator(int iterator_id)
+{
     int ret=0;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&iterator_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&iterator_mutex);
     ret=_clear_iterator(iterator_id);
-    GRIB_MUTEX_UNLOCK(&iterator_mutex)
+    GRIB_MUTEX_UNLOCK(&iterator_mutex);
     return ret;
 }
 
-static int _clear_keys_iterator(int keys_iterator_id){
+static int _clear_keys_iterator(int keys_iterator_id)
+{
 
     l_grib_keys_iterator* current  = keys_iterator_set;
 
@@ -716,12 +767,13 @@ static int _clear_keys_iterator(int keys_iterator_id){
     return GRIB_INVALID_KEYS_ITERATOR;
 }
 
-static int clear_keys_iterator(int keys_iterator_id){
+static int clear_keys_iterator(int keys_iterator_id)
+{
     int ret=0;
-    GRIB_MUTEX_INIT_ONCE(&once,&init)
-    GRIB_MUTEX_LOCK(&keys_iterator_mutex)
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex);
     ret=_clear_keys_iterator(keys_iterator_id);
-    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex)
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex);
     return ret;
 }
 
@@ -821,7 +873,7 @@ int grib_f_read_file(int* fid, char* buffer, size_t* nbytes) {
 int grib_f_open_file_(int* fid, char* name , char* op, int lname, int lop) {
     FILE* f = NULL;
     int ioerr=0;
-    char oper[8];
+    char oper[1024]; /* GRIB-576: open mode */
     char *p;
     char fname[1024];
     int ret=GRIB_SUCCESS;
@@ -2656,6 +2708,43 @@ int grib_f_set_real8_array(int* gid, char* key, double *val, int* size, int len)
 }
 
 /*****************************************************************************/
+int grib_f_get_string_array_(int* gid, char* key, char* val,int* nvals,int* slen,int len)
+{
+    grib_handle *h = get_handle(*gid);
+    int err = GRIB_SUCCESS;
+    size_t i;
+    char buf[1024];
+    size_t lsize = *nvals;
+    char** cval=0;
+    char* p=val;
+
+    if(!h) return  GRIB_INVALID_GRIB;
+
+    cval=(char**)grib_context_malloc_clear(h->context,sizeof(char*)*lsize);
+    err = grib_get_string_array(h, cast_char(buf,key,len), cval, &lsize);
+    if (err) return err;
+
+    if (strlen(cval[0])>*slen) err=GRIB_ARRAY_TOO_SMALL;
+
+    for (i=0;i<lsize;i++) {
+        strcpy(p,cval[i]);
+        czstr_to_fortran(p,*slen);
+        p+= *slen;
+    }
+    grib_context_free(h->context,cval);
+    /*remember to deallocate each string*/
+
+    return  err;
+}
+
+int grib_f_get_string_array__(int* gid, char* key, char* val,int* nvals,int* slen, int len){
+    return  grib_f_get_string_array_( gid,  key,  val,nvals,slen,len);
+}
+int grib_f_get_string_array(int* gid, char* key, char* val,int* nvals,int* slen, int len){
+    return  grib_f_get_string_array_( gid,  key,  val, nvals, slen, len);
+}
+
+/*****************************************************************************/
 int grib_f_get_string_(int* gid, char* key, char* val,int len, int len2){
 
     grib_handle *h = get_handle(*gid);
diff --git a/libtool b/libtool
index f652d08..d99b7d2 100755
--- a/libtool
+++ b/libtool
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 # libtool - Provide generalized library-building support services.
-# Generated automatically by config.status (eccodes) 0.13.0
+# Generated automatically by config.status (eccodes) 0.16.0
 # Libtool was configured on host costard:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 #
diff --git a/mars_tests/Makefile.am b/mars_tests/Makefile.am
deleted file mode 100755
index 7a8deb0..0000000
--- a/mars_tests/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-if WITH_MARS_TESTS
-     TESTS = ls.sh
-
-     noinst_PROGRAMS = 
-
-     LDADD = $(top_builddir)/src/libgrib_api.a $(EMOS_LIB)
-
-     INCLUDES   = -I$(top_builddir)/src
-
-     EXTRA_DIST = $(TESTS)
-
-endif   
diff --git a/mars_tests/include.sh b/mars_tests/include.sh
deleted file mode 100644
index 426cb75..0000000
--- a/mars_tests/include.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2005-2016 ECMWF.
-#
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-# 
-# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
-# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
-
-set -ea
-
-echo
-echo "TEST: $0"
-
-data_dir=""
-
-# save current working dir
-save=`pwd`
-
-if [ -z "${data_dir}" ]
-then
-  cd ../
-  cpath=`pwd`
-  ECCODES_DEFINITION_PATH=$cpath/definitions
-  export ECCODES_DEFINITION_PATH
-  ECCODES_SAMPLES_PATH=$cpath/samples
-  export ECCODES_SAMPLES_PATH
-  tools_dir=$cpath/tools/
-  tigge_dir=$cpath/tigge/
-  data_dir=$cpath/data
-  test_dir=$cpath/tests
-  def_dir=$cpath/definitions
-else
-  tools_dir=""
-  tigge_dir=""
-fi
-
-if [ -z "${GRIB_API_INCLUDE}" ]
-then 
-  GRIB_API_INCLUDE=`pwd`/src
-fi
-
-if [ -z "${GRIB_API_LIB}" ]
-then 
-  GRIB_API_LIB=`pwd`/src
-fi
-
-# go back to current working dir
-cd $save
-
-set -u
diff --git a/mars_tests/ls.sh b/mars_tests/ls.sh
deleted file mode 100755
index e0ecff6..0000000
--- a/mars_tests/ls.sh
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-# Copyright 2005-2016 ECMWF.
-#
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-# 
-# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
-# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
-
-. ./include.sh
-
-rm -f log | true
-workdir=`pwd`
-
-cd ${data_dir}
-infile=regular_gaussian_model_level.grib1
-
-${tools_dir}grib_ls -P count $infile > log
-${tools_dir}grib_ls -p count,step $infile >> log
-${tools_dir}grib_ls $infile >> log
-${tools_dir}grib_ls -l 0,0,1 $infile >> log
-${tools_dir}grib_get -l 0,0,1 $infile >> log
-${tools_dir}grib_get -p count,step $infile >> log
-${tools_dir}grib_get -P count $infile >> log
-
-files=" reduced_gaussian_lsm.grib1
-reduced_gaussian_model_level.grib1
-reduced_gaussian_model_level.grib2
-reduced_gaussian_pressure_level.grib1
-reduced_gaussian_pressure_level.grib2
-reduced_gaussian_pressure_level_constant.grib1
-reduced_gaussian_pressure_level_constant.grib2
-reduced_gaussian_sub_area.grib1
-reduced_gaussian_sub_area.grib2
-reduced_gaussian_surface.grib1
-reduced_gaussian_surface.grib2
-reduced_latlon_surface.grib1
-reduced_latlon_surface.grib2
-regular_gaussian_model_level.grib1
-regular_gaussian_model_level.grib2
-regular_gaussian_pressure_level.grib1
-regular_gaussian_pressure_level.grib2
-regular_gaussian_pressure_level_constant.grib1
-regular_gaussian_pressure_level_constant.grib2
-regular_gaussian_surface.grib1
-regular_gaussian_surface.grib2
-regular_latlon_surface.grib1
-regular_latlon_surface.grib2
-"
-
-for file in $files
-do 
-	echo $file >> log
-	${tools_dir}grib_ls -l 40,28 $file  | grep index | awk '{print $4;}' >> log
-done
-
-diff log ls.log 
-rm -f log
-
-cd $workdir
diff --git a/memfs.py b/memfs.py
new file mode 100755
index 0000000..7ac62b8
--- /dev/null
+++ b/memfs.py
@@ -0,0 +1,186 @@
+#!/usr/bin/env python
+from __future__ import print_function
+import os
+import re
+import sys
+
+assert len(sys.argv) > 2
+
+dirs = [os.path.realpath(x) for x in sys.argv[1:-1]]
+print(dirs)
+# exit(1)
+
+FILES = {}
+NAMES = []
+
+g = open(sys.argv[-1], "w")
+
+for directory in dirs:
+
+    # print("---->", directory)
+    dname = os.path.basename(directory)
+    NAMES.append(dname)
+
+    for dirname, _, files in os.walk(directory):
+        for name in files:
+            full = '%s/%s' % (dirname, name)
+            _, ext = os.path.splitext(full)
+            if ext not in ['.def', '.table', '.tmpl']:
+                continue
+
+            fname = full[full.find("/%s/" % (dname,)):]
+            #print("MEMFS add", fname)
+            name = re.sub(r'\W', '_', fname)
+
+            assert name not in FILES
+            FILES[name] = fname
+
+            print('static const unsigned char %s[] = {' % (name,), file=g)
+
+            with open(full) as f:
+                i = 0
+                for n in re.findall('..', f.read().encode("hex")):
+                    print("0x%s," % (n,), end="", file=g)
+                    i += 1
+                    if (i % 20) == 0:
+                        print("", file=g)
+
+            print('};', file=g)
+
+print("""
+#include "eccodes_config.h"
+#ifdef EC_HAVE_FMEMOPEN
+#define _GNU_SOURCE
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+
+struct entry {
+    const char* path;
+    const unsigned char* content;
+    size_t length;
+} entries[] = { """, file=g)
+
+items = [(v, k) for k, v in FILES.items()]
+
+for k, v in sorted(items):
+    print ('{"/MEMFS%s", &%s[0], sizeof(%s) / sizeof(%s[0]) },' % (k, v, v, v), file=g)
+
+
+print("""};
+
+#ifdef EC_HAVE_FUNOPEN
+
+typedef struct mem_file {
+    const char* buffer;
+    size_t size;
+    size_t pos;
+} mem_file;
+
+static int read_mem(void *data, char * buf, int len) {
+    mem_file* f = (mem_file*)data;
+    int n = len;
+
+    if(f->pos + n > f->size) {
+        n = f->size - f->pos;
+    }
+
+    memcpy(buf, f->buffer + f->pos, n);
+
+    f->pos += n;
+    return n;
+}
+
+static int write_mem(void* data, const char* buf, int len) {
+    mem_file* f = (mem_file*)data;
+    return -1;
+}
+
+static fpos_t seek_mem(void *data, fpos_t pos, int whence) {
+    mem_file* f = (mem_file*)data;
+
+    long newpos = 0;
+
+    switch (whence) {
+
+    case SEEK_SET:
+        newpos = (long)pos;
+        break;
+
+    case SEEK_CUR:
+        newpos = (long)f->pos + (long)pos;
+        break;
+
+    case SEEK_END:
+        newpos = (long)f->size -  (long)pos;
+        break;
+
+    default:
+        return -1;
+        break;
+  }
+
+  if(newpos < 0) { newpos = 0; }
+  if(newpos > f->size) { newpos = f->size; }
+
+  f->pos = newpos;
+  return newpos;
+
+}
+
+static int close_mem(void *data) {
+    mem_file* f = (mem_file*)data;
+    free(f);
+    return 0;
+}
+
+static FILE* fmemopen(const char* buffer, size_t size, const char* mode){
+    mem_file* f = (mem_file*)calloc(sizeof(mem_file), 1);
+    if(!f) return NULL;
+
+    f->buffer = buffer;
+    f->size = size;
+
+    return funopen(f, &read_mem, &write_mem, &seek_mem, &close_mem);
+
+}
+
+#endif
+
+static size_t entries_count = sizeof(entries)/sizeof(entries[0]);
+
+static const unsigned char* find(const char* path, size_t* length) {
+    size_t i;
+
+
+    for(i = 0; i < entries_count; i++) {
+
+        if(strcmp(path, entries[i].path) == 0) {
+            /*printf("Found in MEMFS %s\\n", path);*/
+            *length = entries[i].length;
+            return entries[i].content;
+        }
+    }
+
+    return NULL;
+
+}
+
+int codes_memfs_exists(const char* path) {
+    size_t dummy;
+    return find(path, &dummy) != NULL;
+}
+
+FILE* codes_memfs_open(const char* path) {
+    size_t size;
+    const unsigned char* mem = find(path, &size);
+    if(!mem) {
+        return NULL;
+    }
+    return fmemopen((void*)mem, size, "r");
+}
+
+""", file=g)
diff --git a/memfs/CMakeLists.txt b/memfs/CMakeLists.txt
new file mode 100644
index 0000000..7f9c466
--- /dev/null
+++ b/memfs/CMakeLists.txt
@@ -0,0 +1,18 @@
+add_custom_command(
+  OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/memfs.c
+  COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/memfs.py
+    ${PROJECT_SOURCE_DIR}/definitions
+    ${PROJECT_SOURCE_DIR}/samples
+    ${PROJECT_SOURCE_DIR}/ifs_samples
+    ${CMAKE_CURRENT_BINARY_DIR}/memfs.c
+  DEPENDS ${PROJECT_SOURCE_DIR}/memfs.py )
+
+set_source_files_properties( ${CMAKE_CURRENT_BINARY_DIR}/memfs.c PROPERTIES OBJECT_DEPENDS
+    "${PROJECT_SOURCE_DIR}/memfs.py"
+    # "${PROJECT_SOURCE_DIR}/memfs.py" ${definition_files}"
+    )
+
+ecbuild_add_library(TARGET    eccodes_memfs
+                    CONDITION HAVE_MEMFS
+                    SOURCES   ${CMAKE_CURRENT_BINARY_DIR}/memfs.c
+                    GENERATED ${CMAKE_CURRENT_BINARY_DIR}/memfs.c )
diff --git a/perl/GRIB-API/Makefile.PL b/perl/GRIB-API/Makefile.PL
index 7d676c2..9301912 100644
--- a/perl/GRIB-API/Makefile.PL
+++ b/perl/GRIB-API/Makefile.PL
@@ -5,7 +5,7 @@ use ExtUtils::MakeMaker;
 WriteMakefile(
     NAME              => 'GRIB::API',
    # Module version
-   'VERSION'   => '0.13.0',
+   'VERSION'   => '0.16.0',
 
    # Preprocessor defines
    'DEFINE' => '-DHAVE_CONFIG_H',     # e.g., '-DHAVE_SOMETHING'
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 271bbd2..48ab4d8 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -65,32 +65,39 @@ if( HAVE_PYTHON )
             include_directories( ${NUMPY_INCLUDE_DIRS} )
         endif()
 
-        # Invoke swig to generate the C wrapper
-        #  swig_add_module( gribapi_swig python grib_interface.h grib_interface.c gribapi_swig.i )
-        #  swig_link_libraries( gribapi_swig grib_api ${PYTHON_LIBRARIES} )
-
         ####### Do not invoke swig. Use our own generated C wrapper file ######
-        ecbuild_add_library(TARGET    _gribapi_swig
-                            TYPE SHARED
-                            NOINSTALL
-                            SOURCES   grib_interface.h grib_interface.c ${_swig_c_wrapper}
-                            LIBS      eccodes ${PYTHON_LIBRARIES} )
+        set( _gribapi_swig "_gribapi_swig${CMAKE_SHARED_LIBRARY_SUFFIX}" )
+        # Build the extension module for use in build tree with RPATH pointing to the build tree
+        add_custom_command( OUTPUT ${_gribapi_swig}
+                            COMMAND ${PYTHON_EXECUTABLE} setup.py build_ext --inplace -R ${CMAKE_BINARY_DIR}/lib
+                            DEPENDS grib_interface.h grib_interface.c ${_swig_c_wrapper} setup.py.in eccodes )
+        # Build the extension module as target for installation with RPATH pointing to the install prefix
+        add_custom_command( OUTPUT build/${_gribapi_swig}
+                            COMMAND ${PYTHON_EXECUTABLE} setup.py build_ext -b build -R ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}
+                            DEPENDS grib_interface.h grib_interface.c ${_swig_c_wrapper} setup.py.in eccodes )
+
+        #ecbuild_add_library(TARGET    _gribapi_swig
+        #                    TYPE SHARED
+        #                    NOINSTALL
+        #                    SOURCES   grib_interface.h grib_interface.c ${_swig_c_wrapper}
+        #                    LIBS      eccodes ${PYTHON_LIBRARIES} )
         # Don't use the lib prefix.  This is needed for the python case where a _modulename.so is generated
-        set_target_properties(_gribapi_swig PROPERTIES PREFIX "")
+        #set_target_properties(_gribapi_swig PROPERTIES PREFIX "")
 
         # Copy the wrapper python file to build area
         set( _swig_py  gribapi_swig.py )
         add_custom_command(
            OUTPUT ${_swig_py}
            COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${_swig_py_wrapper} ${CMAKE_CURRENT_BINARY_DIR}/${_swig_py}
-           DEPENDS _gribapi_swig
+           DEPENDS ${_gribapi_swig} build/${_gribapi_swig}
         )
         add_custom_target(copy_swig_py ALL DEPENDS ${_swig_py})
         #######################
 
-        install(TARGETS _gribapi_swig DESTINATION ${PYTHON_DEST_GRIBAPI} )
+        #install(TARGETS _gribapi_swig DESTINATION ${PYTHON_DEST_GRIBAPI} )
 
-        install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gribapi_swig.py  DESTINATION ${PYTHON_DEST_GRIBAPI})
+        #install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gribapi_swig.py  DESTINATION ${PYTHON_DEST_GRIBAPI})
+        install(FILES ${CMAKE_CURRENT_BINARY_DIR}/build/${_gribapi_swig} ${CMAKE_CURRENT_BINARY_DIR}/gribapi_swig.py  DESTINATION ${PYTHON_DEST_GRIBAPI})
         install(FILES gribapi.py DESTINATION ${PYTHON_DEST_GRIBAPI})
         install(FILES eccodes.py DESTINATION ${PYTHON_DEST_ECCODES})
         
diff --git a/python/Makefile.am b/python/Makefile.am
index 4157e9c..069fc8e 100644
--- a/python/Makefile.am
+++ b/python/Makefile.am
@@ -60,7 +60,7 @@ CLEANFILES = $(noinst_SCRIPTS) \
 			_gribapi_swig.so
 
 # Extra stuff to go into the distribution
-EXTRA_DIST = setup.py.in \
+EXTRA_DIST = setup.py.autotools.in \
 			grib_interface.h \
 			grib_interface.c \
 			gribapi_swig.i \
@@ -97,8 +97,8 @@ do_subst = sed -e 's,[@]LIB_JASPER[@],$(LIB_JASPER),g' \
 clean-local:
 	-rm -rf build
 
-setup.py: setup.py.in
-	$(do_subst) < setup.py.in > setup.py
+setup.py: setup.py.autotools.in
+	$(do_subst) < setup.py.autotools.in > setup.py
 
 gribapi_swig_wrap.c: swig_wrap_$(PYTHON_DATA_HANDLER).c
 	cp -f swig_wrap_$(PYTHON_DATA_HANDLER).c gribapi_swig_wrap.c
diff --git a/python/Makefile.in b/python/Makefile.in
index 2a1d3a4..8988e81 100644
--- a/python/Makefile.in
+++ b/python/Makefile.in
@@ -404,7 +404,7 @@ top_srcdir = @top_srcdir@
 @CREATING_SHARED_LIBS_TRUE@@WITH_PYTHON_TRUE at INCLUDES = $(PYTHON_INCLUDES) -I$(NUMPY_INCLUDE)
 
 # Extra stuff to go into the distribution
- at CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE at EXTRA_DIST = setup.py.in \
+ at CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE at EXTRA_DIST = setup.py.autotools.in \
 @CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE@			grib_interface.h \
 @CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE@			grib_interface.c \
 @CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE@			gribapi_swig.i \
@@ -855,8 +855,8 @@ uninstall-am: uninstall-pDATA uninstall-pkgpyexecDATA \
 @CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE at clean-local:
 @CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE@	-rm -rf build
 
- at CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE at setup.py: setup.py.in
- at CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE@	$(do_subst) < setup.py.in > setup.py
+ at CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE at setup.py: setup.py.autotools.in
+ at CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE@	$(do_subst) < setup.py.autotools.in > setup.py
 
 @CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE at gribapi_swig_wrap.c: swig_wrap_$(PYTHON_DATA_HANDLER).c
 @CREATING_SHARED_LIBS_FALSE@@WITH_PYTHON_TRUE@	cp -f swig_wrap_$(PYTHON_DATA_HANDLER).c gribapi_swig_wrap.c
diff --git a/python/grib_interface.h b/python/grib_interface.h
index 7638303..a5e9d84 100644
--- a/python/grib_interface.h
+++ b/python/grib_interface.h
@@ -34,6 +34,7 @@ int grib_c_new_from_file(FILE *f, int *gid, int headers_only);
 int grib_c_new_any_from_file(FILE *f, int headers_only,int *gid);
 int grib_c_new_bufr_from_file(FILE *f, int headers_only,int *gid);
 int grib_c_new_gts_from_file(FILE *f,int headers_only, int *gid);
+int grib_c_new_metar_from_file(FILE* f,int headers_only, int* gid);
 int grib_c_new_from_index(int *iid, int *gid);
 int grib_c_index_new_from_file(char *file, char *keys, int *gid);
 int grib_c_index_add_file(int* iid, char* file);
@@ -84,6 +85,7 @@ int grib_c_find_nearest_multiple(int *gid, int *is_lsm, double *inlats, double *
 int grib_c_get_real8_array(int *gid, char *key, double *val, int *size);
 int grib_c_set_real8_array(int *gid, char *key, double *val, int *size);
 int grib_c_get_string(int *gid, char *key, char *val, size_t *lsize);
+int grib_c_get_string_array(int* gid, char* key, char** val, size_t *lsize);
 int grib_c_set_string(int *gid, char *key, char *val, int len2);
 int grib_c_get_data_real4(int *gid, float *lats, float *lons, float *values, size_t *size);
 int grib_c_get_data_real8(int *gid, double *lats, double *lons, double *values, size_t *size);
diff --git a/python/gribapi.py b/python/gribapi.py
index 1f7fd58..fe30dd8 100644
--- a/python/gribapi.py
+++ b/python/gribapi.py
@@ -20,7 +20,7 @@ NumPy support can be disabled by using the '--disable-numpy' flag.
 
 @em Requirements:
 
-    - Python 2.5 or higher
+    - Python 2.6 or higher
     - NumPy
 
 """
diff --git a/python/setup.py.in b/python/setup.py.autotools.in
similarity index 100%
copy from python/setup.py.in
copy to python/setup.py.autotools.in
diff --git a/python/setup.py.in b/python/setup.py.in
index 4b4b43f..84d10ca 100644
--- a/python/setup.py.in
+++ b/python/setup.py.in
@@ -4,25 +4,26 @@ from distutils.core import setup, Extension
 import os,sys
 
 attdict = dict(
-   sources = ['gribapi_swig_wrap.c','grib_interface.c'],
+   sources = ['@CMAKE_CURRENT_SOURCE_DIR@/@_swig_c_wrapper@',
+              '@CMAKE_CURRENT_SOURCE_DIR@/grib_interface.c'],
    swig_opts = [],
-   include_dirs = ['.'],
-   library_dirs = ["%s/lib" % sys.prefix],
-   libraries = [],
+   include_dirs = ['.', '@CMAKE_CURRENT_BINARY_DIR@/../src', '@CMAKE_CURRENT_SOURCE_DIR@/../src'],
+   library_dirs = ['@CMAKE_BINARY_DIR@/lib'],
+   libraries = ['eccodes'],
    extra_objects = [],
-   extra_link_args = [],    # See GRIB-616
+   extra_link_args = []
 )
 
 add_attribute = lambda **args: [list.append(attdict[key],value) for key,value in args.items()]
 
 # assumes build_dir is same as source_dir -- not true for cmake builds
-build_dir = '@BUILD_DIR@'
-add_attribute(
-    include_dirs = os.path.join(build_dir,'src'),
-    extra_objects = os.path.join(build_dir, 'src', '.libs', 'libeccodes.a')
-)
+#build_dir = '@BUILD_DIR@'
+#add_attribute(
+#    include_dirs = os.path.join(build_dir,'src'),
+#    extra_objects = os.path.join(build_dir, 'src', '.libs', 'libeccodes.a')
+#)
 
-with_jasper = '@LIB_JASPER@'
+with_jasper = @HAVE_LIBJASPER@
 if with_jasper:
     jasper_dir = '@JASPER_DIR@'
     if jasper_dir and jasper_dir != 'system':
@@ -33,7 +34,7 @@ if with_jasper:
         )
     add_attribute(libraries = 'jasper')
 
-with_openjpeg = '@LIB_OPENJPEG@'
+with_openjpeg = @HAVE_LIBOPENJPEG@
 if with_openjpeg:
     openjpeg_dir = '@OPENJPEG_DIR@'
     if openjpeg_dir and openjpeg_dir != 'system':
@@ -45,12 +46,12 @@ if with_openjpeg:
     add_attribute(libraries = 'openjpeg')
 
 # assumes png is supplied by system paths -- may not be true
-png = '@LIB_PNG@'
+png = @HAVE_PNG@
 if png:
     add_attribute(libraries = 'png')
 
 
-with_aec = '@LIB_AEC@'
+with_aec = @HAVE_AEC@
 if with_aec:
     aec_dir = '@AEC_DIR@'
     if aec_dir and aec_dir != 'system':
@@ -74,13 +75,12 @@ if data_handler == "numpy":
     add_attribute(
         include_dirs = numpy_include,
     )
-
-gribapi_module = Extension('_gribapi_swig',**attdict)
+#gribapi_module = Extension('_gribapi_swig',**attdict)
 
 setup (name = 'gribapi',
-       version = '0.1',
+       version = '@ECCODES_VERSION_STR@',
        author      = 'ECMWF',
        description = """Grib API SWIG module""",
-       ext_modules = [gribapi_module],
+       ext_modules = [Extension('_gribapi_swig',**attdict)],
        py_modules = ['gribapi_swig','gribapi'],
       )
diff --git a/rpms/eccodes.pc b/rpms/eccodes.pc
index 3387121..770c242 100644
--- a/rpms/eccodes.pc
+++ b/rpms/eccodes.pc
@@ -6,7 +6,7 @@ libdir=${exec_prefix}/lib
 
 Name: eccodes
 Description: The eccodes library
-Version: 0.13.0
+Version: 0.16.0
 Cflags: -I${includedir}
 Libs: -L${libdir} -leccodes
 Libs.private: -L${libdir} -leccodes -lm -ljasper 
diff --git a/rpms/eccodes.spec b/rpms/eccodes.spec
index 7f1f914..b3d7a71 100644
--- a/rpms/eccodes.spec
+++ b/rpms/eccodes.spec
@@ -2,7 +2,7 @@
 Summary: The ECMWF ecCodes package is an application program interface accessible from C, FORTRAN and Python programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages.
 %define rel 1
 
-%define version 0.13.0
+%define version 0.16.0
 %define pkgname eccodes
 %define prefix /usr/local
 %define _prefix /usr/local
diff --git a/rpms/eccodes_f90.pc b/rpms/eccodes_f90.pc
index bc31dac..24e60e5 100644
--- a/rpms/eccodes_f90.pc
+++ b/rpms/eccodes_f90.pc
@@ -7,7 +7,7 @@ FC=gfortran
 
 Name: eccodes_f90
 Description: The eccodes library for Fortran 90
-Version: 0.13.0
+Version: 0.16.0
 Cflags: -I${prefix}/include
 Libs: -L${libdir} -leccodes_f90 -leccodes
 Libs.private: -L${libdir} -leccodes_f90 -leccodes -lm -ljasper 
diff --git a/share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake b/share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake
deleted file mode 100644
index 1e12d66..0000000
--- a/share/ecbuild/toolchains/ecmwf-XC30-Cray.cmake
+++ /dev/null
@@ -1,81 +0,0 @@
-####################################################################
-# COMPILER
-####################################################################
-
-include(CMakeForceCompiler)
-
-CMAKE_FORCE_C_COMPILER       ( cc  Cray )
-CMAKE_FORCE_CXX_COMPILER     ( CC  Cray )
-CMAKE_FORCE_Fortran_COMPILER ( ftn Cray )
-
-link_libraries("$ENV{CC_X86_64}/lib/x86-64/libcray-c++-rts.so")
-link_libraries("-lmpichf90_cray")
-link_libraries("-lmpichcxx_cray")
-
-set( ECBUILD_FIND_MPI OFF )
-set( ECBUILD_TRUST_FLAGS ON )
-
-####################################################################
-# FLAGS COMMON TO ALL BUILD TYPES
-####################################################################
-
-set( OMP_C_FLAGS             "-homp" )
-set( OMP_CXX_FLAGS           "-homp" )
-set( OMP_Fortran_FLAGS       "-homp" )
-
-set( OMPSTUBS_C_FLAGS        "-hnoomp" )
-set( OMPSTUBS_CXX_FLAGS      "-hnoomp" )
-set( OMPSTUBS_Fortran_FLAGS  "-hnoomp" )
-
-set( CMAKE_C_FLAGS       "" CACHE STRING "" FORCE )
-set( CMAKE_CXX_FLAGS     "" CACHE STRING "" FORCE )
-set( CMAKE_Fortran_FLAGS "-emf -rmoid" CACHE STRING "" FORCE )   # -emf activates .mods and uses lower case -rmoid produces a listing file
-
-####################################################################
-# RELEASE FLAGS
-####################################################################
-
-set( ECBUILD_C_FLAGS_RELEASE       "-O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG" )
-set( ECBUILD_CXX_FLAGS_RELEASE     "-O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG" )
-set( ECBUILD_Fortran_FLAGS_RELEASE "-O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG" )
-
-####################################################################
-# BIT REPRODUCIBLE FLAGS
-####################################################################
-
-set( ECBUILD_C_FLAGS_BIT        "-O1 -G2 -hflex_mp=conservative -hadd_paren -hfp1 -DNDEBUG" )
-set( ECBUILD_CXX_FLAGS_BIT      "-O1 -G2 -hflex_mp=conservative -hadd_paren -hfp1 -DNDEBUG" )
-set( ECBUILD_Fortran_FLAGS_BIT  "-O1 -G2 -hflex_mp=conservative -hadd_paren -hfp1 -DNDEBUG" )
-
-####################################################################
-# RELWITHDEBINFO FLAGS
-####################################################################
-
-set( ECBUILD_C_FLAGS_RELWITHDEBINFO        "-O2 -hfp1 -Gfast -DNDEBUG" )
-set( ECBUILD_CXX_FLAGS_RELWITHDEBINFO      "-O2 -hfp1 -Gfast -DNDEBUG" )
-set( ECBUILD_Fortran_FLAGS_RELWITHDEBINFO  "-O2 -hfp1 -Gfast -DNDEBUG" )
-
-####################################################################
-# DEBUG FLAGS
-####################################################################
-
-set( ECBUILD_C_FLAGS_DEBUG        "-O0 -G0" )
-set( ECBUILD_CXX_FLAGS_DEBUG      "-O0 -G0" )
-set( ECBUILD_Fortran_FLAGS_DEBUG  "-O0 -G0" )
-
-####################################################################
-# PRODUCTION FLAGS
-####################################################################
-
-set( ECBUILD_C_FLAGS_PRODUCTION        "-O2 -hfp1 -G2" )
-set( ECBUILD_CXX_FLAGS_PRODUCTION      "-O2 -hfp1 -G2" )
-set( ECBUILD_Fortran_FLAGS_PRODUCTION  "-O2 -hfp1 -G2" )
-
-####################################################################
-# LINK FLAGS
-####################################################################
-
-set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,loadmap -Wl,--as-needed -Ktrap=fp" )
-set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,loadmap -Wl,--as-needed -Ktrap=fp" )
-set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,loadmap -Wl,--as-needed -Ktrap=fp" )
-
diff --git a/share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake b/share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake
deleted file mode 100644
index 3c890d5..0000000
--- a/share/ecbuild/toolchains/ecmwf-XC30-GNU.cmake
+++ /dev/null
@@ -1,73 +0,0 @@
-####################################################################
-# COMPILER
-####################################################################
-
-include(CMakeForceCompiler)
-
-CMAKE_FORCE_C_COMPILER       ( cc  GNU )
-CMAKE_FORCE_CXX_COMPILER     ( CC  GNU )
-CMAKE_FORCE_Fortran_COMPILER ( ftn GNU )
-
-set( ECBUILD_FIND_MPI OFF )
-set( ECBUILD_TRUST_FLAGS ON )
-
-####################################################################
-# FLAGS COMMON TO ALL BUILD TYPES
-####################################################################
-
-set( OMP_C_FLAGS             "-fopenmp" )
-set( OMP_CXX_FLAGS           "-fopenmp" )
-set( OMP_Fortran_FLAGS       "-fopenmp" )
-
-set( CMAKE_C_FLAGS       "" CACHE STRING "" FORCE )
-set( CMAKE_CXX_FLAGS     "" CACHE STRING "" FORCE )
-set( CMAKE_Fortran_FLAGS "" CACHE STRING "" FORCE )
-
-####################################################################
-# RELEASE FLAGS
-####################################################################
-
-#set( ECBUILD_C_FLAGS_RELEASE       "-O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG" )
-#set( ECBUILD_CXX_FLAGS_RELEASE     "-O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG" )
-#set( ECBUILD_Fortran_FLAGS_RELEASE "-O3 -hfp3 -hscalar3 -hvector3 -DNDEBUG" )
-
-####################################################################
-# BIT REPRODUCIBLE FLAGS
-####################################################################
-
-set( ECBUILD_C_FLAGS_BIT        "-g -O2 -m64 -march=native -DNDEBUG" )
-set( ECBUILD_CXX_FLAGS_BIT      "-g -O2 -m64 -march=native -DNDEBUG" )
-set( ECBUILD_Fortran_FLAGS_BIT  "-g -O2 -m64 -march=native -DNDEBUG -fno-range-check -ffree-line-length-300 -fconvert=big-endian" )
-
-####################################################################
-# RELWITHDEBINFO FLAGS
-####################################################################
-
-#set( ECBUILD_C_FLAGS_RELWITHDEBINFO        "-O2 -hfp1 -Gfast -DNDEBUG" )
-#set( ECBUILD_CXX_FLAGS_RELWITHDEBINFO      "-O2 -hfp1 -Gfast -DNDEBUG" )
-#set( ECBUILD_Fortran_FLAGS_RELWITHDEBINFO  "-O2 -hfp1 -Gfast -DNDEBUG" )
-
-####################################################################
-# DEBUG FLAGS
-####################################################################
-
-#set( ECBUILD_C_FLAGS_DEBUG        "-O0 -G0" )
-#set( ECBUILD_CXX_FLAGS_DEBUG      "-O0 -G0" )
-#set( ECBUILD_Fortran_FLAGS_DEBUG  "-O0 -G0" )
-
-####################################################################
-# PRODUCTION FLAGS
-####################################################################
-
-#set( ECBUILD_C_FLAGS_PRODUCTION        "-O2 -hfp1 -G2" )
-#set( ECBUILD_CXX_FLAGS_PRODUCTION      "-O2 -hfp1 -G2" )
-#set( ECBUILD_Fortran_FLAGS_PRODUCTION  "-O2 -hfp1 -G2" )
-
-####################################################################
-# LINK FLAGS
-####################################################################
-
-set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,load.map -Wl,--as-needed" )
-set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,load.map -Wl,--as-needed" )
-set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,load.map -Wl,--as-needed" )
-
diff --git a/share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake b/share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake
deleted file mode 100644
index 485b122..0000000
--- a/share/ecbuild/toolchains/ecmwf-XC30-Intel.cmake
+++ /dev/null
@@ -1,76 +0,0 @@
-####################################################################
-# COMPILER
-####################################################################
-
-include(CMakeForceCompiler)
-
-CMAKE_FORCE_C_COMPILER       ( cc  Intel )
-CMAKE_FORCE_CXX_COMPILER     ( CC  Intel )
-CMAKE_FORCE_Fortran_COMPILER ( ftn Intel )
-
-set( ECBUILD_FIND_MPI OFF )
-set( ECBUILD_TRUST_FLAGS ON )
-
-####################################################################
-# FLAGS COMMON TO ALL BUILD TYPES
-####################################################################
-
-set( OMP_C_FLAGS             "-qopenmp -qopenmp-threadprivate=compat -qopenmp-report=2 -qopt-report-phase=vec,openmp" )
-set( OMP_CXX_FLAGS           "-qopenmp -qopenmp-threadprivate=compat -qopenmp-report=2 -qopt-report-phase=vec,openmp" )
-set( OMP_Fortran_FLAGS       " -openmp  -openmp-threadprivate=compat  -openmp-report=2  -opt-report-phase=vec,openmp" ) # -[q] is missing on purpose, ifort does not take -q as flag
-
-# for diagnostics:
-#  -diag-enable=vec -diag-file -Winline
-
-set( CMAKE_C_FLAGS       "-fp-speculation=strict -fp-model precise -traceback" CACHE STRING "" FORCE )
-set( CMAKE_CXX_FLAGS     "-fp-speculation=strict -fp-model precise -traceback" CACHE STRING "" FORCE )
-set( CMAKE_Fortran_FLAGS "-fp-speculation=strict -fp-model precise -convert big_endian -assume byterecl -traceback -fpe0" CACHE STRING "" FORCE )
-
-####################################################################
-# RELEASE FLAGS
-####################################################################
-
-#set( ECBUILD_C_FLAGS_RELEASE       "not implemented" )
-#set( ECBUILD_CXX_FLAGS_RELEASE     "not implemented" )
-#set( ECBUILD_Fortran_FLAGS_RELEASE "not implemented" )
-
-####################################################################
-# BIT REPRODUCIBLE FLAGS
-####################################################################
-
-set( ECBUILD_C_FLAGS_BIT        "-O2 -xAVX -finline-function -finline-limit=500" )
-set( ECBUILD_CXX_FLAGS_BIT      "-O2 -xAVX -finline-function -finline-limit=500" )
-set( ECBUILD_Fortran_FLAGS_BIT  "-O2 -xAVX -finline-function -finline-limit=500 -align array64byte" )
-
-####################################################################
-# RELWITHDEBINFO FLAGS
-####################################################################
-
-#set( ECBUILD_C_FLAGS_RELWITHDEBINFO        "not implemented" )
-#set( ECBUILD_CXX_FLAGS_RELWITHDEBINFO      "not implemented" )
-#set( ECBUILD_Fortran_FLAGS_RELWITHDEBINFO  "not implemented" )
-
-####################################################################
-# DEBUG FLAGS
-####################################################################
-
-set( ECBUILD_C_FLAGS_DEBUG        "-g -O0" )
-set( ECBUILD_CXX_FLAGS_DEBUG      "-g -O0" )
-set( ECBUILD_Fortran_FLAGS_DEBUG  "-g -O0" ) # ??? -align array64byte
-
-####################################################################
-# PRODUCTION FLAGS
-####################################################################
-
-#set( ECBUILD_C_FLAGS_PRODUCTION        "not implemented" )
-#set( ECBUILD_CXX_FLAGS_PRODUCTION      "not implemented" )
-#set( ECBUILD_Fortran_FLAGS_PRODUCTION  "not implemented" )
-
-####################################################################
-# LINK FLAGS
-####################################################################
-
-set( ECBUILD_C_LINK_FLAGS        "-Wl,-Map,load.map -Wl,--as-needed" )
-set( ECBUILD_CXX_LINK_FLAGS      "-Wl,-Map,load.map -Wl,--as-needed" )
-set( ECBUILD_Fortran_LINK_FLAGS  "-Wl,-Map,load.map -Wl,--as-needed" )
-
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2d36fcb..dfa25cd 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,3 +1,13 @@
+#
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+#
 list( APPEND grib_api_srcs
     grib_api.h
     eccodes.h
@@ -45,6 +55,7 @@ list( APPEND grib_api_srcs
     grib_vsarray.c
     grib_iarray.c
     grib_viarray.c
+    codes_memfs.c
     grib_accessor_class_array.c
     grib_accessor_class_assert.c
     grib_accessor_class_ascii.c
@@ -390,6 +401,11 @@ configure_file( eccodes_version.h.in eccodes_version.h @ONLY )
 #                    YACC_FLAGS  "-y"
 #                    DEPENDANT action.c )
 
+if(HAVE_MEMFS)
+    list(APPEND ECCODES_EXTRA_LIBRARIES eccodes_memfs)
+endif()
+
+
 ecbuild_add_library(TARGET    eccodes
                     SOURCES   grib_api_version.c
                               # griby.c gribl.c
diff --git a/src/Makefile.am b/src/Makefile.am
index c267b15..f2c7cb3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -354,6 +354,7 @@ libeccodes_la_prototypes= \
 	grib_util.c \
 	compile.c \
 	functions.c \
+	codes_memfs.c \
 	grib_api_version.c
 
 libeccodes_extra_prototypes = grib_bits_any_endian.c grib_bits_any_endian_simple.c
diff --git a/src/Makefile.in b/src/Makefile.in
index 342275e..bda1ab9 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -375,7 +375,7 @@ am__objects_1 = action.lo action_class_alias.lo action_class_gen.lo \
 	grib_iterator_class_latlon_reduced.lo \
 	grib_iterator_class_gen.lo grib_iterator_class_latlon.lo \
 	grib_iterator_class_regular.lo grib_expression.lo grib_util.lo \
-	compile.lo functions.lo grib_api_version.lo
+	compile.lo functions.lo codes_memfs.lo grib_api_version.lo
 am_libeccodes_la_OBJECTS = $(am__objects_1) eccodes.lo grib_yacc.lo \
 	grib_lex.lo md5.lo
 libeccodes_la_OBJECTS = $(am_libeccodes_la_OBJECTS)
@@ -986,6 +986,7 @@ libeccodes_la_prototypes = \
 	grib_util.c \
 	compile.c \
 	functions.c \
+	codes_memfs.c \
 	grib_api_version.c
 
 libeccodes_extra_prototypes = grib_bits_any_endian.c grib_bits_any_endian_simple.c
@@ -1155,6 +1156,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/action_class_when.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/action_class_while.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/action_class_write.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/codes_memfs.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/compile.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/eccodes.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/functions.Plo at am__quote@
diff --git a/src/action_class_concept.c b/src/action_class_concept.c
index 1548d30..ec0faac 100644
--- a/src/action_class_concept.c
+++ b/src/action_class_concept.c
@@ -171,12 +171,12 @@ grib_action* grib_action_create_concept( grib_context* context,
 
     a->concept     = concept;
     if (concept) {
-        grib_concept_value* c=concept;
+        grib_concept_value* conc_val=concept;
         grib_trie* index=grib_trie_new(context);
-        while (c) {
-            c->index=index;
-            grib_trie_insert_no_replace(index,c->name,c);
-            c=c->next;
+        while (conc_val) {
+            conc_val->index=index;
+            grib_trie_insert_no_replace(index,conc_val->name,conc_val);
+            conc_val=conc_val->next;
         }
     }
     act->name = grib_context_strdup_persistent(context,name);
diff --git a/src/action_class_hash_array.c b/src/action_class_hash_array.c
index 6cd3fc0..79649d9 100644
--- a/src/action_class_hash_array.c
+++ b/src/action_class_hash_array.c
@@ -97,189 +97,186 @@ static void init_class(grib_action_class* c)
 
 
 grib_action* grib_action_create_hash_array( grib_context* context,
-    const char* name,
-    grib_hash_array_value* hash_array,
-    const char* basename,const char* name_space,const char* defaultkey,
-    const char* masterDir,const char* localDir,const char* ecmfDir,int flags,int nofail )
+        const char* name,
+        grib_hash_array_value* hash_array,
+        const char* basename,const char* name_space,const char* defaultkey,
+        const char* masterDir,const char* localDir,const char* ecmfDir,int flags,int nofail )
 {
-  grib_action_hash_array* a=NULL ;
-  grib_action_class* c = grib_action_class_hash_array;
-  grib_action* act     = (grib_action*)grib_context_malloc_clear_persistent(context,c->size);
-  act->op              = grib_context_strdup_persistent(context,"hash_array");
-
-  act->cclass       = c;
-  a=(grib_action_hash_array*)act ;
-  act->context      = context;
-  act->flags        = flags;
-
-  if (name_space)
-    act->name_space  = grib_context_strdup_persistent(context,name_space);
-
-  if (basename) 
-    a->basename= grib_context_strdup_persistent(context,basename);
-  else a->basename=NULL;
- 
-  if (masterDir)
-    a->masterDir= grib_context_strdup_persistent(context,masterDir);
-  else a->masterDir=NULL;
-
-  if (localDir)
-    a->localDir= grib_context_strdup_persistent(context,localDir);
-  else a->localDir=NULL;
-
-  if (ecmfDir)
-    a->ecmfDir= grib_context_strdup_persistent(context,ecmfDir);
-  else a->ecmfDir=NULL;
-
-  if (defaultkey)
-    act->defaultkey = grib_context_strdup_persistent(context,defaultkey);
-
-  a->hash_array     = hash_array;
-  if (hash_array) {
-    grib_hash_array_value* c=hash_array;
-    grib_trie* index=grib_trie_new(context);
-    while (c) {
-      c->index=index;
-          grib_trie_insert_no_replace(index,c->name,c);
-      c=c->next;
+    grib_action_hash_array* a=NULL ;
+    grib_action_class* c = grib_action_class_hash_array;
+    grib_action* act     = (grib_action*)grib_context_malloc_clear_persistent(context,c->size);
+    act->op              = grib_context_strdup_persistent(context,"hash_array");
+
+    act->cclass       = c;
+    a=(grib_action_hash_array*)act ;
+    act->context      = context;
+    act->flags        = flags;
+
+    if (name_space)
+        act->name_space  = grib_context_strdup_persistent(context,name_space);
+
+    if (basename)
+        a->basename= grib_context_strdup_persistent(context,basename);
+    else a->basename=NULL;
+
+    if (masterDir)
+        a->masterDir= grib_context_strdup_persistent(context,masterDir);
+    else a->masterDir=NULL;
+
+    if (localDir)
+        a->localDir= grib_context_strdup_persistent(context,localDir);
+    else a->localDir=NULL;
+
+    if (ecmfDir)
+        a->ecmfDir= grib_context_strdup_persistent(context,ecmfDir);
+    else a->ecmfDir=NULL;
+
+    if (defaultkey)
+        act->defaultkey = grib_context_strdup_persistent(context,defaultkey);
+
+    a->hash_array = hash_array;
+    if (hash_array) {
+        grib_hash_array_value* ha=hash_array;
+        grib_trie* index=grib_trie_new(context);
+        while (ha) {
+            ha->index=index;
+            grib_trie_insert_no_replace(index,ha->name,ha);
+            ha=ha->next;
+        }
     }
-  }
-  act->name      = grib_context_strdup_persistent(context,name);
+    act->name = grib_context_strdup_persistent(context,name);
 
-  a->nofail=nofail;
+    a->nofail=nofail;
 
-  return act;
+    return act;
 }
 
 static void dump(grib_action* act, FILE* f, int lvl)
 {
-  int i = 0;
+    int i = 0;
 
-  for (i=0;i<lvl;i++)
-    grib_context_print(act->context,f,"     ");
+    for (i=0;i<lvl;i++)
+        grib_context_print(act->context,f,"     ");
 
-  printf("hash_array(%s) { ",act->name);
-  printf("\n");
+    printf("hash_array(%s) { ",act->name);
+    printf("\n");
 
-  for (i=0;i<lvl;i++)
-    grib_context_print(act->context,f,"     ");
-  printf("}\n");
+    for (i=0;i<lvl;i++)
+        grib_context_print(act->context,f,"     ");
+    printf("}\n");
 }
 
 
 static void destroy(grib_context* context,grib_action* act)
 {
-  grib_action_hash_array* self = (grib_action_hash_array*) act;
-
-  grib_hash_array_value * v = self->hash_array;
-  if (v) grib_trie_delete(v->index);
-  while(v)
-  {
-    grib_hash_array_value* n = v->next;
-    grib_hash_array_value_delete(context,v);
-    v = n;
-  }
-
-  grib_context_free_persistent(context, self->masterDir);
-  grib_context_free_persistent(context, self->localDir);
-  grib_context_free_persistent(context, self->ecmfDir);
-  grib_context_free_persistent(context, self->basename);
+    grib_action_hash_array* self = (grib_action_hash_array*) act;
+
+    grib_hash_array_value * v = self->hash_array;
+    if (v) grib_trie_delete(v->index);
+    while(v)
+    {
+        grib_hash_array_value* n = v->next;
+        grib_hash_array_value_delete(context,v);
+        v = n;
+    }
 
+    grib_context_free_persistent(context, self->masterDir);
+    grib_context_free_persistent(context, self->localDir);
+    grib_context_free_persistent(context, self->ecmfDir);
+    grib_context_free_persistent(context, self->basename);
 }
 
 grib_hash_array_value* get_hash_array(grib_handle* h,grib_action* a)
 {
-  char buf[1024]={0,};
-  char master[1024]={0,};
-  char local[1024]={0,};
-  char ecmf[1024]={0,};
-  char masterDir[1024]={0,};
-  size_t lenMasterDir=1024;
-  char localDir[1024]={0,};
-  size_t lenLocalDir=1024;
-  char ecmfDir[1024]={0,};
-  size_t lenEcmfDir=1024;
-  char key[1024]={0,};
-  char* full=0;
-  int id;
-  int err;
-  grib_action_hash_array* self=(grib_action_hash_array*)a;
-
-  grib_context* context=((grib_action*)self)->context;
-  grib_hash_array_value* c=NULL;
-
-  if (self->hash_array != NULL)
-    return self->hash_array;
-
-  Assert(self->masterDir);
-  grib_get_string(h,self->masterDir,masterDir,&lenMasterDir);
-
-  sprintf(buf,"%s/%s",masterDir,self->basename);
-
-  err=grib_recompose_name(h,NULL, buf, master,1);
-  if (err) {
-  	grib_context_log(context,GRIB_LOG_ERROR,
-		"unable to build name of directory %s",self->masterDir);
-	return NULL;
-  }
-
-  if (self->localDir) {
-    grib_get_string(h,self->localDir,localDir,&lenLocalDir);
-    sprintf(buf,"%s/%s",localDir,self->basename);
-    grib_recompose_name(h,NULL, buf, local,1);
-  }
-
-  if (self->ecmfDir) {
-    grib_get_string(h,self->ecmfDir,ecmfDir,&lenEcmfDir);
-    sprintf(buf,"%s/%s",ecmfDir,self->basename);
-    grib_recompose_name(h,NULL, buf, ecmf,1);
-  }
-
-  sprintf(key,"%s%s%s",master,local,ecmf);
-
-  id=grib_itrie_get_id(h->context->hash_array_index,key);
-  if ((c=h->context->hash_array[id])!=NULL) return c;
-
-  if (*local && (full=grib_context_full_defs_path(context,local))!=NULL) {
-    c=grib_parse_hash_array_file(context,full);
-    grib_context_log(h->context,GRIB_LOG_DEBUG,
-                     "Loading hash_array %s from %s",((grib_action*)self)->name,full);
-  } else if (*ecmf && (full=grib_context_full_defs_path(context,ecmf))!=NULL) {
-    c=grib_parse_hash_array_file(context,full);
+    char buf[1024]={0,};
+    char master[1024]={0,};
+    char local[1024]={0,};
+    char ecmf[1024]={0,};
+    char masterDir[1024]={0,};
+    size_t lenMasterDir=1024;
+    char localDir[1024]={0,};
+    size_t lenLocalDir=1024;
+    char ecmfDir[1024]={0,};
+    size_t lenEcmfDir=1024;
+    char key[1024]={0,};
+    char* full=0;
+    int id;
+    int err;
+    grib_action_hash_array* self=(grib_action_hash_array*)a;
+
+    grib_context* context=((grib_action*)self)->context;
+    grib_hash_array_value* c=NULL;
+
+    if (self->hash_array != NULL)
+        return self->hash_array;
+
+    Assert(self->masterDir);
+    grib_get_string(h,self->masterDir,masterDir,&lenMasterDir);
+
+    sprintf(buf,"%s/%s",masterDir,self->basename);
+
+    err=grib_recompose_name(h,NULL, buf, master,1);
+    if (err) {
+        grib_context_log(context,GRIB_LOG_ERROR,
+                "unable to build name of directory %s",self->masterDir);
+        return NULL;
+    }
+
+    if (self->localDir) {
+        grib_get_string(h,self->localDir,localDir,&lenLocalDir);
+        sprintf(buf,"%s/%s",localDir,self->basename);
+        grib_recompose_name(h,NULL, buf, local,1);
+    }
+
+    if (self->ecmfDir) {
+        grib_get_string(h,self->ecmfDir,ecmfDir,&lenEcmfDir);
+        sprintf(buf,"%s/%s",ecmfDir,self->basename);
+        grib_recompose_name(h,NULL, buf, ecmf,1);
+    }
+
+    sprintf(key,"%s%s%s",master,local,ecmf);
+
+    id=grib_itrie_get_id(h->context->hash_array_index,key);
+    if ((c=h->context->hash_array[id])!=NULL) return c;
+
+    if (*local && (full=grib_context_full_defs_path(context,local))!=NULL) {
+        c=grib_parse_hash_array_file(context,full);
+        grib_context_log(h->context,GRIB_LOG_DEBUG,
+                "Loading hash_array %s from %s",((grib_action*)self)->name,full);
+    } else if (*ecmf && (full=grib_context_full_defs_path(context,ecmf))!=NULL) {
+        c=grib_parse_hash_array_file(context,full);
+        grib_context_log(h->context,GRIB_LOG_DEBUG,
+                "Loading hash_array %s from %s",((grib_action*)self)->name,full);
+    }
+
+    full=grib_context_full_defs_path(context,master);
+
+    if(c) {
+        grib_hash_array_value* last=c;
+        while (last->next) last=last->next;
+        last->next=grib_parse_hash_array_file(context,full);
+    } else if (full) {
+        c=grib_parse_hash_array_file(context,full);
+    } else {
+        grib_context_log(context,GRIB_LOG_FATAL,
+                "unable to find definition file %s in %s:%s:%s\nDefinition files path=\"%s\"",
+                self->basename,master,ecmf,local,context->grib_definition_files_path);
+        return NULL;
+    }
+
     grib_context_log(h->context,GRIB_LOG_DEBUG,
-                     "Loading hash_array %s from %s",((grib_action*)self)->name,full);
-  }
-
-  full=grib_context_full_defs_path(context,master);
-
-  if(c) {
-    grib_hash_array_value* last=c;
-    while (last->next) last=last->next;
-    last->next=grib_parse_hash_array_file(context,full);
-  } else if (full) {
-    c=grib_parse_hash_array_file(context,full);
-  } else {
-    grib_context_log(context,GRIB_LOG_FATAL,
-        "unable to find definition file %s in %s:%s:%s\nDefinition files path=\"%s\"",
-        self->basename,master,ecmf,local,context->grib_definition_files_path);
-    return NULL;
-  }
-
-  grib_context_log(h->context,GRIB_LOG_DEBUG,
-                   "Loading hash_array %s from %s",((grib_action*)self)->name,full);
-
-  h->context->hash_array[id]=c;
-  if (c) {
-	  grib_trie* index=grib_trie_new(context);
-	  while (c) {
-		  c->index=index;
-		  grib_trie_insert_no_replace(index,c->name,c);
-		  c=c->next;
-	  }
-	
-  }
-
-  return h->context->hash_array[id];
-}
+            "Loading hash_array %s from %s",((grib_action*)self)->name,full);
+
+    h->context->hash_array[id]=c;
+    if (c) {
+        grib_trie* index=grib_trie_new(context);
+        while (c) {
+            c->index=index;
+            grib_trie_insert_no_replace(index,c->name,c);
+            c=c->next;
+        }
 
+    }
 
+    return h->context->hash_array[id];
+}
diff --git a/src/action_class_if.c b/src/action_class_if.c
index 97cfa06..499877b 100644
--- a/src/action_class_if.c
+++ b/src/action_class_if.c
@@ -96,12 +96,13 @@ static void init_class(grib_action_class* c)
 
 grib_action* grib_action_create_if( grib_context* context,
         grib_expression* expression,
-        grib_action* block_true,grib_action* block_false,int transient)
+        grib_action* block_true,grib_action* block_false,int transient,
+        int lineno, char* file_being_parsed)
 {
     char name[1024];
     grib_action_if* a ;
-    grib_action_class* c   = grib_action_class_if;
-    grib_action* act       = (grib_action*)grib_context_malloc_clear_persistent(context,c->size);
+    grib_action_class* c = grib_action_class_if;
+    grib_action* act     = (grib_action*)grib_context_malloc_clear_persistent(context,c->size);
     act->op              = grib_context_strdup_persistent(context,"section");
 
     act->cclass       = c;
@@ -119,6 +120,14 @@ grib_action* grib_action_create_if( grib_context* context,
         sprintf(name,"_if%p",(void*)a);
 
     act->name      = grib_context_strdup_persistent(context,name);
+    act->debug_info= NULL;
+    if (context->debug > 0 && file_being_parsed) {
+        /* Construct debug information showing definition file and line */
+        /* number of IF statement */
+        char debug_info[1024];
+        sprintf(debug_info, "File=%s line=%d", file_being_parsed, lineno);
+        act->debug_info= grib_context_strdup_persistent(context,debug_info);
+    }
 
     return act;
 }
@@ -296,10 +305,10 @@ static void destroy(grib_context* context,grib_action* act)
         f = nf;
     }
 
-
     grib_expression_free(context,a->expression);
 
     grib_context_free_persistent(context, act->name);
+    grib_context_free_persistent(context, act->debug_info);
     grib_context_free_persistent(context, act->op);
 }
 
diff --git a/src/action_class_section.c b/src/action_class_section.c
index b3a2805..2364f1e 100644
--- a/src/action_class_section.c
+++ b/src/action_class_section.c
@@ -107,9 +107,13 @@ static int notify_change(grib_action* act, grib_accessor * notified,
     grib_action* la        = NULL;
 
     if (h->context->debug > 0) {
+        char debug_str[1024] = {0,};
+        if (act->debug_info) {
+            sprintf(debug_str, " (%s)", act->debug_info);
+        }
         grib_context_log(h->context,
-                GRIB_LOG_DEBUG,"------------- SECTION action %s (%s) is triggered by [%s]",
-                act->name, notified->name, changed->name);
+                GRIB_LOG_DEBUG,"------------- SECTION action %s (%s) is triggered by [%s]%s",
+                act->name, notified->name, changed->name, debug_str);
     }
 
     la = grib_action_reparse(act,notified,&doit);
diff --git a/src/action_class_write.c b/src/action_class_write.c
index 3a980ce..608708e 100644
--- a/src/action_class_write.c
+++ b/src/action_class_write.c
@@ -154,6 +154,7 @@ static int execute(grib_action* act, grib_handle *h)
         size_t padding = a->padtomultiple - size % a->padtomultiple;
         /* printf("XXX padding=%d size=%d padtomultiple=%d\n",padding,size,a->padtomultiple); */
         zeros = (char*)calloc(padding, 1);
+        Assert(zeros);
         if (fwrite(zeros, 1, padding, of->handle) != padding) {
             grib_context_log(act->context, (GRIB_LOG_ERROR) | (GRIB_LOG_PERROR),
                     "Error writing to %s", filename);
@@ -192,5 +193,4 @@ static void destroy(grib_context* context,grib_action* act)
     grib_context_free_persistent(context, a->name);
     grib_context_free_persistent(context, act->name);
     grib_context_free_persistent(context, act->op);
-
 }
diff --git a/src/codes_memfs.c b/src/codes_memfs.c
new file mode 100644
index 0000000..c404c34
--- /dev/null
+++ b/src/codes_memfs.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+#include "grib_api_internal.h"
+
+#ifdef HAVE_MEMFS
+/* These two functions are implemented in the generated C file memfs.c in the build area */
+/* See the memfs.py Python generator */
+int codes_memfs_exists(const char* path);
+FILE* codes_memfs_open(const char* path);
+
+FILE* codes_fopen(const char* name, const char *mode)
+{
+    FILE *f;
+
+    if (strcmp(mode, "r") != 0) {
+        return fopen(name, mode);
+    }
+
+    f = codes_memfs_open(name); /* Load from memory */
+    if (f) {
+        return f;
+    }
+
+    return fopen(name, mode);
+}
+
+int codes_access(const char* name, int mode)
+{
+    if (mode != F_OK) {
+        return access(name, mode);
+    }
+
+    if (codes_memfs_exists(name)) { /* Check memory */
+        return 0;
+    }
+
+    return access(name, mode);
+}
+
+#else
+
+FILE* codes_fopen(const char* name, const char* mode)
+{
+    return fopen(name, mode);
+}
+
+int codes_access(const char* name, int mode)
+{
+    return access(name, mode);
+}
+
+#endif
diff --git a/src/compile.c b/src/compile.c
index 7044bc4..54bd6f2 100644
--- a/src/compile.c
+++ b/src/compile.c
@@ -18,7 +18,8 @@
 
 #define COMPILE_FLAGS(z) if(flags&z) { flags ^= ~z; fprintf(c->out,"%s%s",sep,#z);sep="|";  }
 
-void grib_compile_flags(grib_compiler* c,long flags) {
+void grib_compile_flags(grib_compiler* c,long flags)
+{
     char *sep = "";
 
     fprintf(c->out,"0x%ld",flags);
@@ -52,7 +53,6 @@ void grib_compile_flags(grib_compiler* c,long flags) {
     }
 }
 
-
 void grib_compile_action_branch(grib_action* a,grib_compiler* c, char* name)
 {
     int first = 1;
diff --git a/src/config.h b/src/config.h
index 60bcd32..bf20822 100644
--- a/src/config.h
+++ b/src/config.h
@@ -11,13 +11,13 @@
 #define ECCODES_CURRENT 1
 
 /* ecCodes version */
-#define ECCODES_MAIN_VERSION 0.13.0
+#define ECCODES_MAIN_VERSION 0.16.0
 
 /* ecCodes Major release */
 #define ECCODES_MAJOR_VERSION 0
 
 /* ecCodes Minor release */
-#define ECCODES_MINOR_VERSION 13
+#define ECCODES_MINOR_VERSION 16
 
 /* ecCodes Revision ABI version */
 #define ECCODES_REVISION 0
diff --git a/src/eccodes.c b/src/eccodes.c
index f2daa43..0015aec 100644
--- a/src/eccodes.c
+++ b/src/eccodes.c
@@ -17,6 +17,10 @@ char* codes_samples_path(const grib_context *c)
 {
     return grib_samples_path(c);
 }
+char* codes_definition_path(const grib_context *c)
+{
+    return grib_definition_path(c);
+}
 long codes_get_api_version(void)
 {
     return grib_get_api_version();
@@ -514,3 +518,11 @@ void codes_context_delete(grib_context* c)
 {
     grib_context_delete(c);
 }
+void codes_context_set_definitions_path(grib_context* c, const char* path)
+{
+    grib_context_set_definitions_path(c,path);
+}
+void codes_context_set_samples_path(grib_context* c, const char* path)
+{
+    grib_context_set_samples_path(c, path);
+}
diff --git a/src/eccodes.h b/src/eccodes.h
index 1c3dfcd..4e6d933 100644
--- a/src/eccodes.h
+++ b/src/eccodes.h
@@ -160,6 +160,7 @@ codes_index* codes_index_new(codes_context* c, const char* keys,int *err);
  * @param filename    : name of the file of messages to be indexed
  * @return            0 if OK, integer value on error
  */
+int codes_index_add_file(grib_index *index, const char *filename);
 int codes_index_write(codes_index *index, const char *filename);
 codes_index* codes_index_read(codes_context* c,const char* filename,int *err);
 
@@ -924,6 +925,22 @@ int codes_get_gribex_mode(codes_context* c);
 void codes_gribex_mode_off(codes_context* c);
 
 /**
+ * Sets the search path for definition files.
+ *
+ * @param c      : the context to be modified
+ * @param path   : the search path for definition files
+ */
+void codes_context_set_definitions_path(grib_context* c, const char* path);
+
+/**
+ * Sets the search path for sample files.
+ *
+ * @param c      : the context to be modified
+ * @param path   : the search path for sample files
+ */
+void codes_context_set_samples_path(grib_context* c, const char* path);
+
+/**
 *  Turn on support for multiple fields in single grib messages
 *
 * @param c            : the context to be modified
@@ -946,6 +963,7 @@ void codes_grib_multi_support_off(codes_context* c);
 void codes_grib_multi_support_reset_file(codes_context* c, FILE* f);
 
 char* codes_samples_path(const codes_context *c);
+char* codes_definition_path(const codes_context *c);
 /*! @} */
 
 /**
diff --git a/src/eccodes_version.h b/src/eccodes_version.h
index 7cd019c..eb1e85b 100644
--- a/src/eccodes_version.h
+++ b/src/eccodes_version.h
@@ -11,10 +11,10 @@
 #ifndef eccodes_version_H
 #define eccodes_version_H
 
-#define ECCODES_VERSION_STR      "0.13.0"
+#define ECCODES_VERSION_STR      "0.16.0"
 
 #define ECCODES_MAJOR_VERSION    0
-#define ECCODES_MINOR_VERSION    13
+#define ECCODES_MINOR_VERSION    16
 #define ECCODES_REVISION_VERSION 0
 #define ECCODES_VERSION (ECCODES_MAJOR_VERSION*10000+ECCODES_MINOR_VERSION*100+ECCODES_REVISION_VERSION)
 
diff --git a/src/grib_accessor.c b/src/grib_accessor.c
index cfff7b7..7fa1f3b 100644
--- a/src/grib_accessor.c
+++ b/src/grib_accessor.c
@@ -653,6 +653,7 @@ const char* grib_get_type_name(int type)
     return "unknown";
 }
 
+/*
 int grib_accessor_clear_attributes(grib_accessor* a)
 {
     int id;
@@ -661,6 +662,7 @@ int grib_accessor_clear_attributes(grib_accessor* a)
     }
     return 0;
 }
+*/
 
 int grib_accessor_add_attribute(grib_accessor* a,grib_accessor* attr,int nest_if_clash)
 {
diff --git a/src/grib_accessor_class.c b/src/grib_accessor_class.c
index e8c38da..105ac3a 100644
--- a/src/grib_accessor_class.c
+++ b/src/grib_accessor_class.c
@@ -65,7 +65,7 @@ static struct table_entry table[] =
 
 #define NUMBER(x) (sizeof(x)/sizeof(x[0]))
 
-grib_section*  grib_create_root_section(const grib_context *context, grib_handle *h)
+grib_section* grib_create_root_section(const grib_context *context, grib_handle *h)
 {
     char* fpath=0;
     grib_section*   s   = (grib_section*) grib_context_malloc_clear(context,sizeof(grib_section));
@@ -75,7 +75,11 @@ grib_section*  grib_create_root_section(const grib_context *context, grib_handle
     if(h->context->grib_reader == NULL) {
         if ((fpath=grib_context_full_defs_path(h->context,"boot.def"))==NULL) {
             grib_context_log(h->context,GRIB_LOG_FATAL,
-                    "Unable to find boot.def. Context path=%s", context->grib_definition_files_path);
+                    "Unable to find boot.def. Context path=%s\n"
+                    "\nPossible causes:\n"
+                    "- The software is not correctly installed\n"
+                    "- The environment variable ECCODES_DEFINITION_PATH is defined but incorrect\n",
+                    context->grib_definition_files_path);
         }
         grib_parse_file(h->context,fpath);
     }
@@ -83,15 +87,15 @@ grib_section*  grib_create_root_section(const grib_context *context, grib_handle
 
     s->h = h;
     s->aclength = NULL;
-    s->owner     = NULL;
+    s->owner    = NULL;
     s->block    = (grib_block_of_accessors*)
             grib_context_malloc_clear(context, sizeof(grib_block_of_accessors));
     grib_context_log(context, GRIB_LOG_DEBUG, "Creating root section");
     return s;
 }
 
-
-static GRIB_INLINE grib_accessor_class* get_class(grib_context* c,char* type) {
+static GRIB_INLINE grib_accessor_class* get_class(grib_context* c,char* type)
+{
     int i;
     grib_accessor_class** the_class=NULL;
 
@@ -105,6 +109,8 @@ static GRIB_INLINE grib_accessor_class* get_class(grib_context* c,char* type) {
             return *(table[i].cclass);
         }
     }
+    grib_context_log(c, GRIB_LOG_ERROR, "ecCodes Version: %s\nDefinition files path: %s\n",
+                    ECCODES_VERSION_STR, c->grib_definition_files_path);
     grib_context_log(c,GRIB_LOG_FATAL,"unable to create class %s",type);
     return NULL;
 }
@@ -259,7 +265,7 @@ int grib_section_adjust_sizes(grib_section* s,int update,int depth)
         /* grib_section_adjust_sizes(grib_get_sub_section(a),update,depth+1); */
         err = grib_section_adjust_sizes(a->sub_section,update,depth+1);
         if (err) return err;
-        grib_context_log(a->context,GRIB_LOG_DEBUG,"grib_section_adjust_sizes: %s %ld [len=%ld] (depth=%d)\n",a->name,(long)a->offset,(long)a->length,depth);
+        grib_context_log(a->context,GRIB_LOG_DEBUG,"grib_section_adjust_sizes: %s %ld [len=%ld] (depth=%d)",a->name,(long)a->offset,(long)a->length,depth);
 
         l = a->length;
 
@@ -308,7 +314,7 @@ int grib_section_adjust_sizes(grib_section* s,int update,int depth)
         }
 
         if(s->owner) {
-          grib_context_log(s->owner->context,GRIB_LOG_DEBUG,"grib_section_adjust_sizes: updating owner (%s->length old=%ld new=%ld)\n",s->owner->name,(long)s->owner->length,(long)length);
+          grib_context_log(s->owner->context,GRIB_LOG_DEBUG,"grib_section_adjust_sizes: updating owner (%s->length old=%ld new=%ld)",s->owner->name,(long)s->owner->length,(long)length);
           s->owner->length = length;
         }
         s->length = length;
diff --git a/src/grib_accessor_class_bufr_data_array.c b/src/grib_accessor_class_bufr_data_array.c
index 277334a..b20b13a 100644
--- a/src/grib_accessor_class_bufr_data_array.c
+++ b/src/grib_accessor_class_bufr_data_array.c
@@ -49,6 +49,9 @@
    MEMBERS    = int unpackMode
    MEMBERS    = int bitsToEndData
    MEMBERS    = grib_section* dataKeys
+   MEMBERS    = double* inputBitmap
+   MEMBERS    = int nInputBitmap
+   MEMBERS    = int iInputBitmap
    MEMBERS    = long* inputReplications
    MEMBERS    = int nInputReplications
    MEMBERS    = int iInputReplications
@@ -118,6 +121,9 @@ typedef struct grib_accessor_bufr_data_array {
 	int unpackMode;
 	int bitsToEndData;
 	grib_section* dataKeys;
+	double* inputBitmap;
+	int nInputBitmap;
+	int iInputBitmap;
 	long* inputReplications;
 	int nInputReplications;
 	int iInputReplications;
@@ -220,19 +226,11 @@ static void init_class(grib_accessor_class* c)
 
 static int process_elements(grib_accessor* a,int flag,long onlySubset,long startSubset,long endSubset);
 
-typedef int (*codec_element_proc) (grib_context* c,grib_accessor_bufr_data_array* self,int subsetIndex, grib_buffer* b,unsigned char* data,long *pos,int i,long elementIndex,grib_darray* dval,grib_sarray* sval); 
+typedef int (*codec_element_proc) (grib_context* c,grib_accessor_bufr_data_array* self,int subsetIndex, grib_buffer* b,unsigned char* data,long *pos,int i,bufr_descriptor* descriptor,long elementIndex,grib_darray* dval,grib_sarray* sval); 
 typedef int (*codec_replication_proc) (grib_context* c,grib_accessor_bufr_data_array* self,int subsetIndex,grib_buffer* buff,unsigned char* data,long *pos,int i,long elementIndex,grib_darray* dval,long* numberOfRepetitions);
 
 static int create_keys(grib_accessor* a,long onlySubset,long startSubset,long endSubset);
 
-static int can_be_missing(int descriptor,int width)
-{
-    int ret=1;
-    if (descriptor==31031 || descriptor==999999 ) ret=0;
-    if (width == 1) ret=0;
-    return ret;
-}
-
 static void restart_bitmap(grib_accessor_bufr_data_array *self)
 {
     self->bitmapCurrent=-1;
@@ -245,7 +243,8 @@ static int is_bitmap_start_defined(grib_accessor_bufr_data_array *self) { return
 
 int accessor_bufr_data_array_create_keys(grib_accessor* a,long onlySubset,long startSubset,long endSubset) { return create_keys(a,onlySubset,startSubset,endSubset); }
 
-int accessor_bufr_data_array_process_elements(grib_accessor* a,int flag,long onlySubset,long startSubset,long endSubset) {
+int accessor_bufr_data_array_process_elements(grib_accessor* a,int flag,long onlySubset,long startSubset,long endSubset)
+{
     return process_elements(a,flag,onlySubset,startSubset,endSubset);
 }
 
@@ -350,7 +349,6 @@ static long next_offset(grib_accessor* a)
     return a->offset;
 }
 
-
 static int compare(grib_accessor* a, grib_accessor* b)
 {
     return GRIB_NOT_IMPLEMENTED;
@@ -405,24 +403,25 @@ static int get_descriptors(grib_accessor* a)
     numberOfDescriptors=grib_bufr_descriptors_array_used_size(self->expanded);
     self->canBeMissing=(int*)grib_context_malloc_clear(c,numberOfDescriptors*sizeof(int));
     for (i=0;i<numberOfDescriptors;i++)
-        self->canBeMissing[i]=can_be_missing(self->expanded->v[i]->code,self->expanded->v[i]->width);
+        self->canBeMissing[i]=grib_bufr_descriptor_can_be_missing(self->expanded->v[i]);
 
     ret=grib_get_long(h,self->numberOfSubsetsName,&(self->numberOfSubsets));
+    if (ret != GRIB_SUCCESS) return ret;
     ret=grib_get_long(h,self->compressedDataName,&(self->compressedData));
 
     return ret;
 }
 
-static void decode_string_array(grib_context* c,unsigned char* data,long* pos, int i,
+static void decode_string_array(grib_context* c,unsigned char* data,long* pos, bufr_descriptor* bd,
         grib_accessor_bufr_data_array* self,int *err)
 {
     char* sval=0;
     int j,modifiedWidth,width;
     grib_sarray* sa=grib_sarray_new(c,self->numberOfSubsets,10);
 
-    modifiedWidth= self->expanded->v[i]->width;
-    /* modifiedReference= self->expanded->v[i]->reference; */
-    /*modifiedFactor= self->expanded->v[i]->factor;*/
+    modifiedWidth= bd->width;
+    /* modifiedReference= bd->reference; */
+    /*modifiedFactor= bd->factor;*/
 
     sval=(char*)grib_context_malloc_clear(c,modifiedWidth/8+1);
     *err=check_end_data(c,self,modifiedWidth);
@@ -450,7 +449,8 @@ static void decode_string_array(grib_context* c,unsigned char* data,long* pos, i
     grib_vsarray_push(c,self->stringValues,sa);
 }
 
-static grib_darray* decode_double_array(grib_context* c,unsigned char* data,long* pos,int i,
+static grib_darray* decode_double_array(grib_context* c,unsigned char* data,long* pos,
+        bufr_descriptor* bd,int canBeMissing,
         grib_accessor_bufr_data_array* self,int *err)
 {
     grib_darray* ret=NULL;
@@ -461,9 +461,9 @@ static grib_darray* decode_double_array(grib_context* c,unsigned char* data,long
 
     *err=0;
 
-    modifiedReference= self->expanded->v[i]->reference;
-    modifiedFactor= self->expanded->v[i]->factor;
-    modifiedWidth= self->expanded->v[i]->width;
+    modifiedReference= bd->reference;
+    modifiedFactor= bd->factor;
+    modifiedWidth= bd->width;
 
     *err=check_end_data(c,self,modifiedWidth+6);
     if (*err) return NULL;
@@ -477,7 +477,7 @@ static grib_darray* decode_double_array(grib_context* c,unsigned char* data,long
         if (*err) return NULL;
         for (j=0;j<self->numberOfSubsets;j++) {
             lval=grib_decode_unsigned_long(data,pos,localWidth);
-            if (grib_is_all_bits_one(lval,localWidth) && self->canBeMissing[i]) {
+            if (grib_is_all_bits_one(lval,localWidth) && canBeMissing) {
                 dval=GRIB_MISSING_DOUBLE;
             } else {
                 dval=((long)lval+localReference)*modifiedFactor;
@@ -485,18 +485,19 @@ static grib_darray* decode_double_array(grib_context* c,unsigned char* data,long
             grib_darray_push(c,ret,dval);
         }
     } else {
-        if (grib_is_all_bits_one(lval,modifiedWidth) && self->canBeMissing[i]) {
+        if (grib_is_all_bits_one(lval,modifiedWidth) && canBeMissing) {
             dval=GRIB_MISSING_DOUBLE;
         } else {
             dval=localReference*modifiedFactor;
         }
+        grib_context_log(c, GRIB_LOG_DEBUG," modifiedWidth=%ld lval=%ld dval=%g", modifiedWidth,lval,dval);
         grib_darray_push(c,ret,dval);
     }
 
     return ret;
 }
 
-static int encode_string_array(grib_context* c,grib_buffer* buff,long* pos, int i,
+static int encode_string_array(grib_context* c,grib_buffer* buff,long* pos, bufr_descriptor* bd,
         grib_accessor_bufr_data_array* self,grib_sarray* stringValues)
 {
     int err=0,end,start,n;
@@ -512,7 +513,7 @@ static int encode_string_array(grib_context* c,grib_buffer* buff,long* pos, int
     if (n>grib_sarray_used_size(stringValues))
         return GRIB_ARRAY_TOO_SMALL;
 
-    modifiedWidth= self->expanded->v[i]->width;
+    modifiedWidth= bd->width;
 
     grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+modifiedWidth);
     grib_encode_string(buff->data,pos,modifiedWidth/8,stringValues->v[0]);
@@ -529,7 +530,7 @@ static int encode_string_array(grib_context* c,grib_buffer* buff,long* pos, int
     return err;
 }
 
-static int encode_double_array(grib_context* c,grib_buffer* buff,long* pos,int i,
+static int encode_double_array(grib_context* c,grib_buffer* buff,long* pos, bufr_descriptor* bd,
         grib_accessor_bufr_data_array* self,grib_darray* dvalues)
 {
     int err=0;
@@ -538,22 +539,22 @@ static int encode_double_array(grib_context* c,grib_buffer* buff,long* pos,int i
     long localReference=0,localWidth=0,modifiedWidth,modifiedReference;
     long reference,allone;
     double localRange,modifiedFactor,inverseFactor;
-    size_t nvals,start,ii;
+    size_t start,ii;
+    int nvals = 0;
     double min,max,maxAllowed,minAllowed;
     double* v=NULL;
     int thereIsAMissing=0;
 
-    modifiedReference= self->expanded->v[i]->reference;
-    modifiedFactor= self->expanded->v[i]->factor;
-    inverseFactor= grib_power(self->expanded->v[i]->scale,10);
-    modifiedWidth= self->expanded->v[i]->width;
+    modifiedReference= bd->reference;
+    modifiedFactor= bd->factor;
+    inverseFactor= grib_power(bd->scale,10);
+    modifiedWidth= bd->width;
 
     maxAllowed=(grib_power(modifiedWidth,2)+modifiedReference)*modifiedFactor;
     minAllowed=modifiedReference*modifiedFactor;
 
-
     start=self->start;
-    nvals=self->end-self->start;
+    nvals=self->end - self->start;
     if (nvals<=0) return GRIB_NO_VALUES;
 
     v=dvalues->v;
@@ -657,7 +658,7 @@ static int encode_double_array(grib_context* c,grib_buffer* buff,long* pos,int i
     return err;
 }
 
-static int encode_double_value(grib_context* c,grib_buffer* buff,long* pos,int i,
+static int encode_double_value(grib_context* c,grib_buffer* buff,long* pos,bufr_descriptor* bd,
         grib_accessor_bufr_data_array* self,double value)
 {
     unsigned long lval;
@@ -666,9 +667,9 @@ static int encode_double_value(grib_context* c,grib_buffer* buff,long* pos,int i
     int modifiedWidth,modifiedReference;
     double modifiedFactor;
 
-    modifiedReference= self->expanded->v[i]->reference;
-    modifiedFactor= self->expanded->v[i]->factor;
-    modifiedWidth= self->expanded->v[i]->width;
+    modifiedReference= bd->reference;
+    modifiedFactor= bd->factor;
+    modifiedWidth= bd->width;
 
     grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+modifiedWidth);
     if (value==GRIB_MISSING_DOUBLE) {
@@ -684,21 +685,21 @@ static int encode_double_value(grib_context* c,grib_buffer* buff,long* pos,int i
     return err;
 }
 
-static int encode_string_value(grib_context* c,grib_buffer* buff,long* pos, int i,
+static int encode_string_value(grib_context* c,grib_buffer* buff,long* pos, bufr_descriptor* bd,
         grib_accessor_bufr_data_array* self,char* sval)
 {
     int err=0;
     int len;
 
-    len= self->expanded->v[i]->width / 8;
-    grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+self->expanded->v[i]->width);
+    len= bd->width / 8;
+    grib_buffer_set_ulength_bits(c,buff,buff->ulength_bits+bd->width);
 
     grib_encode_string(buff->data,pos,len,sval);
 
     return err;
 }
 
-static char* decode_string_value(grib_context* c,unsigned char* data,long* pos, int i,
+static char* decode_string_value(grib_context* c,unsigned char* data,long* pos, bufr_descriptor* bd,
         grib_accessor_bufr_data_array* self,int *err)
 {
     char* sval=0;
@@ -706,9 +707,9 @@ static char* decode_string_value(grib_context* c,unsigned char* data,long* pos,
 
     *err=0;
 
-    len= self->expanded->v[i]->width / 8;
+    len= bd->width / 8;
 
-    *err=check_end_data(c,self,self->expanded->v[i]->width);
+    *err=check_end_data(c,self,bd->width);
     if (*err) return NULL;
     sval=(char*)grib_context_malloc_clear(c,len+1);
     grib_decode_string(data,pos,len,sval);
@@ -718,7 +719,8 @@ static char* decode_string_value(grib_context* c,unsigned char* data,long* pos,
     return sval;
 }
 
-static double decode_double_value(grib_context* c,unsigned char* data,long* pos,int i,
+static double decode_double_value(grib_context* c,unsigned char* data,long* pos,
+        bufr_descriptor* bd,int canBeMissing,
         grib_accessor_bufr_data_array* self,int* err)
 {
     unsigned long lval;
@@ -728,14 +730,14 @@ static double decode_double_value(grib_context* c,unsigned char* data,long* pos,
 
     *err=0;
 
-    modifiedReference= self->expanded->v[i]->reference;
-    modifiedFactor= self->expanded->v[i]->factor;
-    modifiedWidth= self->expanded->v[i]->width;
+    modifiedReference= bd->reference;
+    modifiedFactor= bd->factor;
+    modifiedWidth= bd->width;
 
     *err=check_end_data(c,self,modifiedWidth);
     if (*err) return dval;
     lval=grib_decode_unsigned_long(data,pos,modifiedWidth);
-    if (grib_is_all_bits_one(lval,modifiedWidth) && self->canBeMissing[i]) {
+    if (grib_is_all_bits_one(lval,modifiedWidth) && canBeMissing) {
         dval=GRIB_MISSING_DOUBLE;
     } else {
         dval=((long)lval+modifiedReference)*modifiedFactor;
@@ -744,7 +746,8 @@ static double decode_double_value(grib_context* c,unsigned char* data,long* pos,
 }
 
 static int decode_element(grib_context* c,grib_accessor_bufr_data_array* self,int subsetIndex,
-        grib_buffer* b,unsigned char* data,long *pos,int i,long elementIndex,grib_darray* dval,grib_sarray* sval)
+        grib_buffer* b,unsigned char* data,long *pos,int i,bufr_descriptor* descriptor,long elementIndex,
+        grib_darray* dval,grib_sarray* sval)
 {
     grib_accessor* a=(grib_accessor*)self;
     grib_darray* dar=0;
@@ -753,25 +756,26 @@ static int decode_element(grib_context* c,grib_accessor_bufr_data_array* self,in
     char* csval=0;
     double cdval=0,x;
     int err=0;
+    bufr_descriptor* bd = descriptor==NULL ? self->expanded->v[i] : descriptor ;
 
     grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data decoding: -%ld- \tcode=%6.6ld width=%ld pos=%ld -> %ld",
-            i,self->expanded->v[i]->code,self->expanded->v[i]->width,(long)*pos,(long)(*pos-a->offset*8));
-    if (self->expanded->v[i]->type==BUFR_DESCRIPTOR_TYPE_STRING) {
+            i,bd->code,bd->width,(long)*pos,(long)(*pos-a->offset*8));
+    if (bd->type==BUFR_DESCRIPTOR_TYPE_STRING) {
         /* string */
         if (self->compressedData) {
-            decode_string_array(c,data,pos,i,self,&err);
+            decode_string_array(c,data,pos,bd,self,&err);
             index=grib_vsarray_used_size(self->stringValues);
             dar=grib_darray_new(c,self->numberOfSubsets,10);
             index=self->numberOfSubsets*(index-1);
             for (ii=1;ii<=self->numberOfSubsets;ii++) {
-                x=(index+ii)*1000+self->expanded->v[i]->width/8;
+                x=(index+ii)*1000+bd->width/8;
                 grib_darray_push(c,dar,x);
             }
             grib_vdarray_push(c,self->numericValues,dar);
         } else {
-            csval=decode_string_value(c,data,pos,i,self,&err);
+            csval=decode_string_value(c,data,pos,bd,self,&err);
             grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data decoding: \t %s = %s",
-                    self->expanded->v[i]->shortName,csval);
+                    bd->shortName,csval);
             sar=grib_sarray_push(c,sar,csval);
             grib_vsarray_push(c,self->stringValues,sar);
             stringValuesLen=grib_vsarray_used_size(self->stringValues);
@@ -779,18 +783,18 @@ static int decode_element(grib_context* c,grib_accessor_bufr_data_array* self,in
             for (ii=0;ii<stringValuesLen;ii++) {
                 index+=grib_sarray_used_size(self->stringValues->v[ii]);
             }
-            cdval=index*1000+self->expanded->v[i]->width / 8;
+            cdval=index*1000+bd->width / 8;
             grib_darray_push(c,dval,cdval);
         }
     } else {
         /* numeric or codetable or flagtable */
         if (self->compressedData) {
-            dar=decode_double_array(c,data,pos,i,self,&err);
+            dar=decode_double_array(c,data,pos,bd,self->canBeMissing[i],self,&err);
             grib_vdarray_push(c,self->numericValues,dar);
         } else {
-            cdval=decode_double_value(c,data,pos,i,self,&err);
+            cdval=decode_double_value(c,data,pos,bd,self->canBeMissing[i],self,&err);
             grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data decoding: \t %s = %g",
-                    self->expanded->v[i]->shortName,cdval);
+                    bd->shortName,cdval);
             grib_darray_push(c,dval,cdval);
         }
     }
@@ -815,7 +819,7 @@ static int decode_replication(grib_context* c,grib_accessor_bufr_data_array* sel
         width=grib_decode_unsigned_long(data,pos,6);
         if (width) {
             /* delayed replication number is not constant. NOT IMPLEMENTED */
-            Assert(0);
+            return GRIB_NOT_IMPLEMENTED;
         } else {
             *numberOfRepetitions=localReference*descriptors[i]->factor;
             grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data decoding: \tdelayed replication value=%ld",*numberOfRepetitions);
@@ -837,8 +841,30 @@ static int decode_replication(grib_context* c,grib_accessor_bufr_data_array* sel
     return err;
 }
 
+static int encode_new_bitmap(grib_context* c,grib_buffer* buff,long *pos,int idx,grib_accessor_bufr_data_array* self)
+{
+    grib_darray* doubleValues=NULL;
+    int err=0;
+    double cdval=0;
+    if (self->nInputBitmap>0) {
+        if (self->nInputBitmap < self->iInputBitmap)
+            return GRIB_ARRAY_TOO_SMALL;
+        cdval=self->inputBitmap[self->iInputBitmap++];
+    }
+    if (self->compressedData) {
+        doubleValues=grib_darray_new(c,1,1);
+        grib_darray_push(c,doubleValues,cdval);
+        err=encode_double_array(c,buff,pos,self->expanded->v[idx],self,doubleValues);
+        grib_darray_delete(c,doubleValues);
+    } else {
+        err=encode_double_value(c,buff,pos,self->expanded->v[idx],self,cdval);
+    }
+    return err;
+}
+
 static int encode_new_element(grib_context* c,grib_accessor_bufr_data_array* self,int subsetIndex,
-        grib_buffer* buff,unsigned char* data,long *pos,int i,long elementIndex,grib_darray* dval,grib_sarray* sval)
+        grib_buffer* buff,unsigned char* data,long *pos,int i,bufr_descriptor* descriptor,
+        long elementIndex,grib_darray* dval,grib_sarray* sval)
 {
     int ii;
     char* csval=0;
@@ -846,37 +872,39 @@ static int encode_new_element(grib_context* c,grib_accessor_bufr_data_array* sel
     double cdval=GRIB_MISSING_DOUBLE;
     int err=0;
     size_t slen;
+    bufr_descriptor* bd = descriptor==NULL ? self->expanded->v[i] : descriptor ;
 
     grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data encoding: \tcode=%6.6ld width=%ld pos=%ld ulength=%ld ulength_bits=%ld",
-            self->expanded->v[i]->code,self->expanded->v[i]->width,(long)*pos,buff->ulength,buff->ulength_bits);
-    if (self->expanded->v[i]->type==BUFR_DESCRIPTOR_TYPE_STRING) {
+            bd->code,bd->width,(long)*pos,buff->ulength,buff->ulength_bits);
+    if (bd->type==BUFR_DESCRIPTOR_TYPE_STRING) {
         /* string */
-        slen=self->expanded->v[i]->width/8;
+        slen=bd->width/8;
         csval=(char*)grib_context_malloc_clear(c,slen+1);
         for (ii=0;ii<slen;ii++) csval[ii]=missingChar;
         grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data encoding: \t %s = %s",
-                self->expanded->v[i]->shortName,csval);
+                bd->shortName,csval);
         if (self->compressedData) {
             grib_sarray* stringValues=grib_sarray_new(c,1,1);
             grib_sarray_push(c,stringValues,csval);
-            err=encode_string_array(c,buff,pos,i,self,stringValues);
+            err=encode_string_array(c,buff,pos,bd,self,stringValues);
             grib_sarray_delete_content(c,stringValues);
             grib_sarray_delete(c,stringValues);
         } else {
-            err=encode_string_value(c,buff,pos,i,self,csval);
+            err=encode_string_value(c,buff,pos,bd,self,csval);
         }
     } else {
         /* numeric or codetable or flagtable */
         grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data encoding: \t %s = %g",
-                self->expanded->v[i]->shortName,cdval);
-        if (self->expanded->v[i]->code==31031) cdval=0;
+                bd->shortName,cdval);
+        if (bd->code==31031)
+            return encode_new_bitmap(c,buff,pos,i,self);
         if (self->compressedData) {
             grib_darray* doubleValues=grib_darray_new(c,1,1);
             grib_darray_push(c,doubleValues,cdval);
-            err=encode_double_array(c,buff,pos,i,self,doubleValues);
+            err=encode_double_array(c,buff,pos,bd,self,doubleValues);
             grib_darray_delete(c,doubleValues);
         } else {
-            err=encode_double_value(c,buff,pos,i,self,cdval);
+            err=encode_double_value(c,buff,pos,bd,self,cdval);
         }
     }
     return err;
@@ -890,34 +918,34 @@ static int encode_new_replication(grib_context* c,grib_accessor_bufr_data_array*
     bufr_descriptor** descriptors=self->expanded->v;
 
     switch(descriptors[i]->code) {
-      case 31000:
+    case 31000:
         if (self->nInputShortReplications>=0) {
-          if (self->iInputShortReplications>=self->nInputShortReplications) {
-            grib_context_log(c,GRIB_LOG_FATAL,"array inputShortDelayedDescriptorReplicationFactor dimension too small");
-          }
-          repetitions=self->inputShortReplications[self->iInputShortReplications];
-          self->iInputShortReplications++;
+            if (self->iInputShortReplications>=self->nInputShortReplications) {
+                grib_context_log(c,GRIB_LOG_FATAL,"array inputShortDelayedDescriptorReplicationFactor dimension too small");
+            }
+            repetitions=self->inputShortReplications[self->iInputShortReplications];
+            self->iInputShortReplications++;
         }
         break;
-      case 31001:
+    case 31001:
         if (self->nInputReplications>=0) {
-          if (self->iInputReplications>=self->nInputReplications) {
-            grib_context_log(c,GRIB_LOG_FATAL,"array inputDelayedDescriptorReplicationFactor dimension too small");
-          }
-          repetitions=self->inputReplications[self->iInputReplications];
-          self->iInputReplications++;
+            if (self->iInputReplications>=self->nInputReplications) {
+                grib_context_log(c,GRIB_LOG_FATAL,"array inputDelayedDescriptorReplicationFactor dimension too small");
+            }
+            repetitions=self->inputReplications[self->iInputReplications];
+            self->iInputReplications++;
         }
         break;
-      case 31002:
+    case 31002:
         if (self->nInputExtendedReplications>=0) {
-          if (self->iInputExtendedReplications>=self->nInputExtendedReplications) {
-            grib_context_log(c,GRIB_LOG_FATAL,"array inputExtendedDelayedDescriptorReplicationFactor dimension too small");
-          }
-          repetitions=self->inputExtendedReplications[self->iInputExtendedReplications];
-          self->iInputExtendedReplications++;
+            if (self->iInputExtendedReplications>=self->nInputExtendedReplications) {
+                grib_context_log(c,GRIB_LOG_FATAL,"array inputExtendedDelayedDescriptorReplicationFactor dimension too small");
+            }
+            repetitions=self->inputExtendedReplications[self->iInputExtendedReplications];
+            self->iInputExtendedReplications++;
         }
         break;
-      default:
+    default:
         Assert(0);
     }
 
@@ -937,39 +965,41 @@ static int encode_new_replication(grib_context* c,grib_accessor_bufr_data_array*
 }
 
 static int encode_element(grib_context* c,grib_accessor_bufr_data_array* self,int subsetIndex,
-        grib_buffer* buff,unsigned char* data,long *pos,int i,long elementIndex,grib_darray* dval,grib_sarray* sval)
+        grib_buffer* buff,unsigned char* data,long *pos,int i,bufr_descriptor* descriptor,
+        long elementIndex,grib_darray* dval,grib_sarray* sval)
 {
     int idx,j;
     int err=0;
+    bufr_descriptor* bd = descriptor==NULL ? self->expanded->v[i] : descriptor ;
 
     grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data encoding: -%ld- \tcode=%6.6ld width=%ld pos=%ld ulength=%ld ulength_bits=%ld",
-            i,self->expanded->v[i]->code,self->expanded->v[i]->width,(long)*pos,buff->ulength,buff->ulength_bits);
-    if (self->expanded->v[i]->type==BUFR_DESCRIPTOR_TYPE_STRING) {
+            i,bd->code,bd->width,(long)*pos,buff->ulength,buff->ulength_bits);
+    if (bd->type==BUFR_DESCRIPTOR_TYPE_STRING) {
         /* string */
         /* grib_context_log(c, GRIB_LOG_DEBUG,"BUFR data encoding: \t %s = %s",
-                 self->expanded->v[i]->shortName,csval); */
+                 bd->shortName,csval); */
         if (self->compressedData) {
             idx=((int)self->numericValues->v[elementIndex]->v[0]/1000-1)/self->numberOfSubsets;
-            err=encode_string_array(c,buff,pos,i,self,self->stringValues->v[idx]);
+            err=encode_string_array(c,buff,pos,bd,self,self->stringValues->v[idx]);
         } else {
             idx=(int)self->numericValues->v[subsetIndex]->v[elementIndex]/1000-1;
-            err=encode_string_value(c,buff,pos,i,self,self->stringValues->v[idx]->v[0]);
+            err=encode_string_value(c,buff,pos,bd,self,self->stringValues->v[idx]->v[0]);
         }
     } else {
         /* numeric or codetable or flagtable */
         if (self->compressedData) {
-            err=encode_double_array(c,buff,pos,i,self,self->numericValues->v[elementIndex]);
+            err=encode_double_array(c,buff,pos,bd,self,self->numericValues->v[elementIndex]);
             if (err) {
                 grib_context_log(c,GRIB_LOG_ERROR,"encoding %s ( code=%6.6ld width=%ld scale=%g reference=%d )",
-                        self->expanded->v[i]->shortName, self->expanded->v[i]->code, self->expanded->v[i]->width,
-                        self->expanded->v[i]->scale, self->expanded->v[i]->reference);
+                        bd->shortName, bd->code, bd->width,
+                        bd->scale, bd->reference);
                 for (j=0;j<grib_darray_used_size(self->numericValues->v[elementIndex]);j++)
                     grib_context_log(c,GRIB_LOG_ERROR,"%g ",self->numericValues->v[elementIndex]->v[i]);
             }
         } else {
-            err=encode_double_value(c,buff,pos,i,self,self->numericValues->v[subsetIndex]->v[elementIndex]);
+            err=encode_double_value(c,buff,pos,bd,self,self->numericValues->v[subsetIndex]->v[elementIndex]);
             if (err) {
-                grib_context_log(c,GRIB_LOG_ERROR,"encoding %s=%g",self->expanded->v[i]->shortName,self->numericValues->v[subsetIndex]->v[elementIndex]);
+                grib_context_log(c,GRIB_LOG_ERROR,"encoding %s=%g",bd->shortName,self->numericValues->v[subsetIndex]->v[elementIndex]);
             }
         }
     }
@@ -986,7 +1016,7 @@ static int encode_replication(grib_context* c,grib_accessor_bufr_data_array* sel
         *numberOfRepetitions=self->numericValues->v[subsetIndex]->v[elementIndex];
     }
 
-    return encode_element(c,self,subsetIndex,buff,data,pos,i,elementIndex,dval,0);
+    return encode_element(c,self,subsetIndex,buff,data,pos,i,0,elementIndex,dval,0);
 }
 
 static int build_bitmap(grib_accessor_bufr_data_array *self,unsigned char* data,long* pos,int iel,grib_iarray* elementsDescriptorsIndex,int iBitmapOperator)
@@ -1002,10 +1032,23 @@ static int build_bitmap(grib_accessor_bufr_data_array *self,unsigned char* data,
     int err=0;
 
     switch (descriptors[iBitmapOperator]->code) {
+    case 223000:
     case 236000:
         cancel_bitmap(self);
-        while (descriptors[edi[iel]]->code>=100000) iel--;
+        while (descriptors[edi[iel]]->code>=100000 || iel==0) iel--;
         bitmapEndElementsDescriptorsIndex=iel;
+        /*looking for another bitmap and pointing before it.
+          This behaviour is not documented in the Manual on codes it is copied from BUFRDC
+          ECC-243
+        */
+        while (iel>0) {
+          while ( descriptors[edi[iel]]->code!=236000 && descriptors[edi[iel]]->code!=222000 && descriptors[edi[iel]]->code!=223000 && iel!=0) iel--;
+          if (iel!=0) {
+            while (descriptors[edi[iel]]->code>=100000 && iel!=0) iel--;
+            bitmapEndElementsDescriptorsIndex=iel;
+          }
+        }
+
         i=iBitmapOperator+1;
         if (descriptors[i]->code==101000)  {
             iDelayedReplication=iBitmapOperator+2;
@@ -1052,15 +1095,105 @@ static int build_bitmap(grib_accessor_bufr_data_array *self,unsigned char* data,
     return GRIB_SUCCESS;
 }
 
-static int get_next_bitmap_descriptor_index(grib_accessor_bufr_data_array *self,grib_iarray* elementsDescriptorsIndex,grib_darray* numericValues)
+static int build_bitmap_new_data(grib_accessor_bufr_data_array *self,unsigned char* data,long* pos,int iel,grib_iarray* elementsDescriptorsIndex,int iBitmapOperator)
+{
+    int bitmapSize=0,iDelayedReplication=0;
+    int i,bitmapEndElementsDescriptorsIndex;
+    long n;
+    grib_accessor* a=(grib_accessor*)self;
+    grib_context* c=a->context;
+    bufr_descriptor** descriptors=self->expanded->v;
+    long* edi=elementsDescriptorsIndex->v;
+    /* int iel=grib_iarray_used_size(elementsDescriptorsIndex)-1; */
+
+    switch (descriptors[iBitmapOperator]->code) {
+    case 236000:
+        cancel_bitmap(self);
+        while (descriptors[edi[iel]]->code>=100000) iel--;
+        bitmapEndElementsDescriptorsIndex=iel;
+        i=iBitmapOperator+1;
+        if (descriptors[i]->code==101000)  {
+            iDelayedReplication=iBitmapOperator+2;
+            switch (descriptors[iDelayedReplication]->code) {
+            case 31001:
+                bitmapSize=self->inputReplications[self->iInputReplications];
+                break;
+            case 31002:
+                bitmapSize=self->inputExtendedReplications[self->iInputExtendedReplications];
+                break;
+            default :
+                Assert(0);
+            }
+        } else if (descriptors[i]->code==31031){
+            bitmapSize=0;
+            while (descriptors[i]->code==31031) {bitmapSize++;i++;}
+        }
+        iel=bitmapEndElementsDescriptorsIndex;
+        n=bitmapSize-1;
+        while ( n>0 && iel>=0 ) {
+            if (descriptors[edi[iel]]->code<100000) n--;
+            iel--;
+        }
+        self->bitmapStartElementsDescriptorsIndex=iel;
+        restart_bitmap(self);
+        break;
+    default :
+        grib_context_log(c,GRIB_LOG_ERROR,"unsupported operator %d\n",
+                descriptors[iBitmapOperator]->code);
+        return GRIB_INTERNAL_ERROR;
+    }
+    return GRIB_SUCCESS;
+}
+
+static int get_next_bitmap_descriptor_index_new_bitmap(grib_accessor_bufr_data_array *self,grib_iarray* elementsDescriptorsIndex,int compressedData)
 {
     int i;
     bufr_descriptor** descriptors=self->expanded->v;
+
     self->bitmapCurrent++;
     self->bitmapCurrentElementsDescriptorsIndex++;
-    i=self->bitmapCurrent+self->bitmapStart;
+    i=self->bitmapCurrent;
 
     if (self->compressedData) {
+        DebugAssert(i<self->nInputBitmap);
+        while (self->inputBitmap[i]==1) {
+            self->bitmapCurrent++;
+            self->bitmapCurrentElementsDescriptorsIndex++;
+            while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code
+                    >100000)
+                self->bitmapCurrentElementsDescriptorsIndex++;
+            i++;
+        }
+    } else {
+        DebugAssert(i<self->nInputBitmap);
+        while (self->inputBitmap[i]==1) {
+            self->bitmapCurrent++;
+            self->bitmapCurrentElementsDescriptorsIndex++;
+            while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code
+                    >100000)
+                self->bitmapCurrentElementsDescriptorsIndex++;
+            i++;
+        }
+    }
+    while (descriptors[elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex]]->code
+            >100000)
+        self->bitmapCurrentElementsDescriptorsIndex++;
+    return elementsDescriptorsIndex->v[self->bitmapCurrentElementsDescriptorsIndex];
+}
+
+static int get_next_bitmap_descriptor_index(grib_accessor_bufr_data_array *self,grib_iarray* elementsDescriptorsIndex,grib_darray* numericValues)
+{
+    int i;
+    bufr_descriptor** descriptors=self->expanded->v;
+
+
+    if (self->compressedData) {
+        if (self->numericValues->n==0)
+            return get_next_bitmap_descriptor_index_new_bitmap(self,elementsDescriptorsIndex,1);
+
+        self->bitmapCurrent++;
+        self->bitmapCurrentElementsDescriptorsIndex++;
+        i=self->bitmapCurrent+self->bitmapStart;
         DebugAssert(i<self->numericValues->n);
         while (self->numericValues->v[i]->v[0]==1) {
             self->bitmapCurrent++;
@@ -1071,6 +1204,12 @@ static int get_next_bitmap_descriptor_index(grib_accessor_bufr_data_array *self,
             i++;
         }
     } else {
+        if (numericValues->n==0)
+            return get_next_bitmap_descriptor_index_new_bitmap(self,elementsDescriptorsIndex,0);
+
+        self->bitmapCurrent++;
+        self->bitmapCurrentElementsDescriptorsIndex++;
+        i=self->bitmapCurrent+self->bitmapStart;
         DebugAssert(i<numericValues->n);
         while (numericValues->v[i]==1) {
             self->bitmapCurrent++;
@@ -1125,6 +1264,8 @@ static grib_accessor* create_attribute_variable(char* name,grib_section* section
         grib_pack_double(a,&dval,&len);
         break;
     case GRIB_TYPE_STRING:
+        if (!sval) 
+            return NULL;
         len=strlen(sval);
         grib_pack_string(a,sval,&len);
         break;
@@ -1238,7 +1379,7 @@ static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_acce
         elementAccessor = grib_accessor_factory(section, &creator, 0, NULL);
         if (self->canBeMissing[idx]) elementAccessor->flags |= GRIB_ACCESSOR_FLAG_CAN_BE_MISSING;
         if (self->expanded->v[idx]->code == 31000 || self->expanded->v[idx]->code == 31001 || self->expanded->v[idx]->code == 31002)
-          elementAccessor->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY;
+            elementAccessor->flags |= GRIB_ACCESSOR_FLAG_READ_ONLY;
         accessor_bufr_data_element_set_index(elementAccessor,ide);
         accessor_bufr_data_element_set_descriptors(elementAccessor,self->expanded);
         accessor_bufr_data_element_set_elementsDescriptorsIndex(elementAccessor,self->elementsDescriptorsIndex);
@@ -1262,22 +1403,28 @@ static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_acce
         }
 
         attribute=create_attribute_variable("index",section,GRIB_TYPE_LONG,0,0,count,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         sprintf(code,"%06ld",self->expanded->v[idx]->code);
         attribute=create_attribute_variable("code",section,GRIB_TYPE_STRING,grib_context_strdup(a->context,code),0,0,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         attribute=create_attribute_variable("units",section,GRIB_TYPE_STRING,self->expanded->v[idx]->units,0,0,GRIB_ACCESSOR_FLAG_DUMP);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         attribute=create_attribute_variable("scale",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->scale,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         attribute=create_attribute_variable("reference",section,GRIB_TYPE_DOUBLE,0,self->expanded->v[idx]->reference,0,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         attribute=create_attribute_variable("width",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->width,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
         break;
     case 2:
@@ -1296,6 +1443,7 @@ static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_acce
             accessor_bufr_data_element_set_subsetNumber(elementAccessor,subset);
 
             attribute=create_attribute_variable("index",section,GRIB_TYPE_LONG,0,0,count,flags);
+            if (!attribute) return NULL;
             grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         } else {
@@ -1303,10 +1451,12 @@ static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_acce
             accessor_variable_set_type(elementAccessor,GRIB_TYPE_LONG);
 
             attribute=create_attribute_variable("index",section,GRIB_TYPE_LONG,0,0,count,flags);
+            if (!attribute) return NULL;
             grib_accessor_add_attribute(elementAccessor,attribute,0);
 
             sprintf(code,"%06ld",self->expanded->v[idx]->code);
             attribute=create_attribute_variable("code",section,GRIB_TYPE_STRING,code,0,0,flags);
+            if (!attribute) return NULL;
             grib_accessor_add_attribute(elementAccessor,attribute,0);
         }
         self->expanded->v[idx]->a=elementAccessor;
@@ -1325,22 +1475,28 @@ static grib_accessor* create_accessor_from_descriptor(grib_accessor* a,grib_acce
         accessor_bufr_data_element_set_subsetNumber(elementAccessor,subset);
 
         attribute=create_attribute_variable("index",section,GRIB_TYPE_LONG,0,0,count,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         sprintf(code,"%06ld",self->expanded->v[idx]->code);
         attribute=create_attribute_variable("code",section,GRIB_TYPE_STRING,code,0,0,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         attribute=create_attribute_variable("units",section,GRIB_TYPE_STRING,self->expanded->v[idx]->units,0,0,GRIB_ACCESSOR_FLAG_DUMP);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         attribute=create_attribute_variable("scale",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->scale,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         attribute=create_attribute_variable("reference",section,GRIB_TYPE_DOUBLE,0,self->expanded->v[idx]->reference,0,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
 
         attribute=create_attribute_variable("width",section,GRIB_TYPE_LONG,0,0,self->expanded->v[idx]->width,flags);
+        if (!attribute) return NULL;
         grib_accessor_add_attribute(elementAccessor,attribute,0);
         break;
     }
@@ -1376,6 +1532,7 @@ static GRIB_INLINE void reset_deeper_qualifiers(grib_accessor* significanceQuali
 typedef struct bitmap_s {
     grib_accessors_list* cursor;
     grib_accessors_list* referredElement;
+    grib_accessors_list* referredElementStart;
 } bitmap_s;
 
 static grib_accessor* get_element_from_bitmap(grib_accessor* a,bitmap_s* bitmap)
@@ -1406,7 +1563,7 @@ static GRIB_INLINE void reset_qualifiers(grib_accessor* significanceQualifierGro
     for (i=0;i<number_of_qualifiers;i++)
         significanceQualifierGroup[i]=0;
 }
- */
+*/
 
 static void grib_convert_to_attribute(grib_accessor* a)
 {
@@ -1418,39 +1575,40 @@ static void grib_convert_to_attribute(grib_accessor* a)
 
 static void set_subset_start_end(grib_accessor_bufr_data_array *self,long *onlySubset,long *startSubset,long *endSubset,long *ret_start,long *ret_end)
 {
-  if (*startSubset>0 && *endSubset>=*startSubset) {
-    *ret_start=*startSubset-1;
-    *ret_end= *endSubset;
-  } else if (*onlySubset>0) {
-    *ret_start=*onlySubset-1;
-    *ret_end= *onlySubset;
-  } else {
-    *ret_start=0;
-    *ret_end= self->numberOfSubsets;
-  }
-  self->start=*ret_start;
-  self->end=*ret_end;
-  if (self->compressedData==1) {
-    *ret_start=0;
-    *ret_end=1;
-  }
+    if (*startSubset>0 && *endSubset>=*startSubset) {
+        *ret_start=*startSubset-1;
+        *ret_end= *endSubset;
+    } else if (*onlySubset>0) {
+        *ret_start=*onlySubset-1;
+        *ret_end= *onlySubset;
+    } else {
+        *ret_start=0;
+        *ret_end= self->numberOfSubsets;
+    }
+    self->start=*ret_start;
+    self->end=*ret_end;
+    if (self->compressedData==1) {
+        *ret_start=0;
+        *ret_end=1;
+    }
 }
 
+static int bitmap_ref_skip(grib_accessors_list* al,int* err)
+{
+    grib_accessor* acode=NULL;
+    long code[1];
+    size_t l=1;
 
-static int bitmap_ref_skip(grib_accessors_list* al,int* err) {
-  grib_accessor* acode=NULL;
-  long code[1];
-  size_t l=1;
-
-  if (!al || !al->accessor) return 0;
+    if (!al || !al->accessor) return 0;
 
-  acode=grib_accessor_get_attribute(al->accessor,"code");
+    acode=grib_accessor_get_attribute(al->accessor,"code");
 
-  if (acode) *err=grib_unpack_long(acode,code,&l);
-  else return 1;
+    if (acode) *err=grib_unpack_long(acode,code,&l);
+    else return 1;
 
-  switch (code[0]) {
+    switch (code[0]) {
     case 222000:
+    case 223000:
     case 224000:
     case 225000:
     case 232000:
@@ -1460,21 +1618,40 @@ static int bitmap_ref_skip(grib_accessors_list* al,int* err) {
     case 31000:
     case 31001:
     case 31002:
-      return 1;
-  }
-  return 0;
+        return 1;
+    }
+    return 0;
+}
+
+static int bitmap_init(bitmap_s* bitmap,grib_accessors_list* bitmapStart,int bitmapSize,grib_accessors_list* lastAccessorInList)
+{
+    int ret=0,i;
+    bitmap->cursor=bitmapStart->next;
+    if (bitmap->referredElementStart!=NULL) {
+      bitmap->referredElement=bitmap->referredElementStart;
+      return ret;
+    }
+    bitmap->referredElement=bitmapStart;
+    while (bitmap_ref_skip(bitmap->referredElement,&ret)) bitmap->referredElement=bitmap->referredElement->prev;
+    for (i=1;i<bitmapSize;i++) {
+        if (bitmap->referredElement==NULL) return GRIB_INTERNAL_ERROR;
+        bitmap->referredElement=bitmap->referredElement->prev;
+    }
+    bitmap->referredElementStart=bitmap->referredElement;
+    return ret;
 }
 
-static int bitmap_init(bitmap_s* bitmap,grib_accessors_list* bitmapStart,int bitmapSize,grib_accessors_list* lastAccessorInList) {
-  int ret=0,i;
-  bitmap->cursor=bitmapStart->next;
-  bitmap->referredElement=bitmapStart;
-  while (bitmap_ref_skip(bitmap->referredElement,&ret)) bitmap->referredElement=bitmap->referredElement->prev;
-  for (i=1;i<bitmapSize;i++) {
-    if (bitmap->referredElement==NULL) return GRIB_INTERNAL_ERROR;
-    bitmap->referredElement=bitmap->referredElement->prev;
+static grib_accessor* accessor_or_attribute_with_same_name(grib_accessor* a,const char* name) {
+  if (grib_accessor_has_attributes(a)==0) {
+    return a;
+  } else {
+    grib_accessor* ok=a;
+    grib_accessor* next;
+    while ((next=grib_accessor_get_attribute(ok,name))!=NULL) {
+      ok=next;
+    }
+    return ok;
   }
-  return ret;
 }
 
 static int create_keys(grib_accessor* a,long onlySubset,long startSubset,long endSubset)
@@ -1517,12 +1694,11 @@ static int create_keys(grib_accessor* a,long onlySubset,long startSubset,long en
     /*int forceGroupClosure=0;*/
 
     creatorGroup.op         = "bufr_group";
-    creatorGroup.name="groupNumber";
+    creatorGroup.name       = "groupNumber";
     creatorGroup.name_space = "";
-    creatorGroup.flags     = GRIB_ACCESSOR_FLAG_DUMP;
+    creatorGroup.flags      = GRIB_ACCESSOR_FLAG_DUMP;
     creatorGroup.set        = 0;
 
-
     if (self->dataAccessors) {
         grib_accessors_list_delete(c,self->dataAccessors);
         /* grib_empty_section ( c,self->dataKeys ); */
@@ -1630,7 +1806,7 @@ static int create_keys(grib_accessor* a,long onlySubset,long startSubset,long en
                 dump=1;
                 bitmapSize[bitmapIndex]++;
                 bitmap.cursor=0;
-            } else if (descriptor->code == 222000 || descriptor->code == 224000 ) {
+            } else if (descriptor->code == 222000 || descriptor->code == 223000 || descriptor->code == 224000 || descriptor->code == 225000 ) {
                 bitmap.referredElement=NULL;
                 qualityPresent=1;
                 incrementBitmapIndex=1;
@@ -1676,15 +1852,21 @@ static int create_keys(grib_accessor* a,long onlySubset,long startSubset,long en
             }
             count++;
             elementAccessor=create_accessor_from_descriptor(a,associatedFieldAccessor,section,ide,iss,dump,count);
+            if (!elementAccessor) {
+                err = GRIB_DECODING_ERROR;
+                return err;
+            }
             associatedFieldAccessor=NULL;
             if (elementFromBitmap && self->unpackMode==CODES_BUFR_UNPACK_STRUCTURE) {
+              if (descriptor->code != 33007 && descriptor->code != 223255 ) {
                 grib_accessor* newAccessor=grib_accessor_clone(elementAccessor,section,&err);
                 newAccessor->parent=groupSection;
                 newAccessor->name=grib_context_strdup(c,elementFromBitmap->name);
                 grib_push_accessor(newAccessor,groupSection->block);
                 grib_accessors_list_push(self->dataAccessors,newAccessor);
+              }
 
-                err=grib_accessor_add_attribute(elementFromBitmap,elementAccessor,1);
+              err=grib_accessor_add_attribute(accessor_or_attribute_with_same_name(elementFromBitmap,elementAccessor->name),elementAccessor,1);
             } else if (elementAccessor) {
 
                 switch (descriptor->code) {
@@ -1703,6 +1885,8 @@ static int create_keys(grib_accessor* a,long onlySubset,long startSubset,long en
                 case 31021:
                     associatedFieldSignificanceAccessor=elementAccessor;
                     break;
+                case 33007:
+                    break;
                 default:
                     grib_push_accessor(elementAccessor,section->block);
                     grib_accessors_list_push(self->dataAccessors,elementAccessor);
@@ -1715,7 +1899,8 @@ static int create_keys(grib_accessor* a,long onlySubset,long startSubset,long en
     return err;
 }
 
-static void set_input_replications(grib_handle* h,grib_accessor_bufr_data_array *self) {
+static void set_input_replications(grib_handle* h,grib_accessor_bufr_data_array *self)
+{
     size_t nInputReplications;
     size_t nInputExtendedReplications;
     size_t nInputShortReplications;
@@ -1751,6 +1936,21 @@ static void set_input_replications(grib_handle* h,grib_accessor_bufr_data_array
     }
 }
 
+static void set_input_bitmap(grib_handle* h,grib_accessor_bufr_data_array *self)
+{
+    size_t nInputBitmap;
+    self->nInputBitmap=-1;
+    self->iInputBitmap=0;
+    if (grib_get_size(h,"inputDataPresentIndicator",&nInputBitmap)==0 && nInputBitmap!=0) {
+        if (self->inputBitmap) grib_context_free(h->context,self->inputBitmap);
+        self->inputBitmap=grib_context_malloc_clear(h->context,sizeof(long)*nInputBitmap);
+        grib_get_double_array(h,"inputDataPresentIndicator",self->inputBitmap,&nInputBitmap);
+        /* default-> no input bitmap*/
+        if (self->inputBitmap[0]<0) self->nInputBitmap=-1;
+        else self->nInputBitmap=nInputBitmap;
+    }
+}
+
 static int process_elements(grib_accessor* a,int flag,long onlySubset,long startSubset,long endSubset)
 {
     int err=0;
@@ -1776,6 +1976,7 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
     codec_element_proc codec_element;
     codec_replication_proc codec_replication;
     grib_accessor* dataAccessor=NULL;
+    bufr_descriptor* bd=0;
 
     grib_darray* dval = NULL;
     grib_sarray* sval = NULL;
@@ -1810,6 +2011,7 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
         codec_replication=&encode_new_replication;
 
         set_input_replications(h,self);
+        set_input_bitmap(h,self);
 
         break;
     case PROCESS_ENCODE:
@@ -1849,7 +2051,6 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
         self->elementsDescriptorsIndex=grib_viarray_new(c,100,100);
     }
 
-
     numberOfDescriptors=grib_bufr_descriptors_array_used_size(self->expanded);
 
     set_subset_start_end(self,&onlySubset,&startSubset,&endSubset,&start,&end);
@@ -1880,7 +2081,7 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
                     /* self->bitmapStart=grib_iarray_used_size(elementsDescriptorsIndex)-1; */
                     self->bitmapStart=elementIndex;
                 }
-                err=codec_element(c,self,iss,buffer,data,&pos,i,elementIndex,dval,sval);
+                err=codec_element(c,self,iss,buffer,data,&pos,i,0,elementIndex,dval,sval);
                 if (err) return err;
                 elementIndex++;
                 break;
@@ -1920,7 +2121,7 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
                 case 5:
                     descriptors[i]->width=descriptors[i]->Y*8;
                     descriptors[i]->type=BUFR_DESCRIPTOR_TYPE_STRING;
-                    err=codec_element(c,self,iss,buffer,data,&pos,i,elementIndex,dval,sval);
+                    err=codec_element(c,self,iss,buffer,data,&pos,i,0,elementIndex,dval,sval);
                     if (err) return err;
                     if (flag!=PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex,i);
                     elementIndex++;
@@ -1942,27 +2143,62 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
                     if (decoding) push_zero_element(self,dval);
                     elementIndex++;
                     break;
-                case 23:
-                    /* substituted values marker operator */
                 case 24:
                     /*first-order statistical values marker operator*/
                 case 32:
                     /*replaced/retained values marker operator*/
                     if (descriptors[i]->Y==255) {
                         index=get_next_bitmap_descriptor_index(self,elementsDescriptorsIndex,dval);
-                        err=codec_element(c,self,iss,buffer,data,&pos,index,elementIndex,dval,sval);
+                        err=codec_element(c,self,iss,buffer,data,&pos,index,0,elementIndex,dval,sval);
                         if (err) return err;
                         /* self->expanded->v[index] */
                         if (flag!=PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex,i);
                         elementIndex++;
                     } else {
                         if (flag!=PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex,i);
-                        if (decoding) push_zero_element(self,dval);
+                        if (decoding) { 
+                          push_zero_element(self,dval);
+                        }
+                        elementIndex++;
+                    }
+                    break;
+                case 23:
+                    if (descriptors[i]->Y==255) {
+                        index=get_next_bitmap_descriptor_index(self,elementsDescriptorsIndex,dval);
+                        err=codec_element(c,self,iss,buffer,data,&pos,index,0,elementIndex,dval,sval);
+                        if (err) return err;
+                        /* self->expanded->v[index] */
+                        if (flag!=PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex,i);
+                        elementIndex++;
+                    } else {
+                        if (flag!=PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex,i);
+                        if (decoding) {
+                          push_zero_element(self,dval);
+                          if (descriptors[i+1] && descriptors[i+1]->code!=236000 )
+                            build_bitmap(self,data,&pos,elementIndex,elementsDescriptorsIndex,i);
+                        }
                         elementIndex++;
                     }
                     break;
                 case 25:
                     /*difference statistical values marker operator*/
+                    if (descriptors[i]->Y==255) {
+                        index=get_next_bitmap_descriptor_index(self,elementsDescriptorsIndex,dval);
+                        bd=grib_bufr_descriptor_clone(self->expanded->v[index]);
+                        bd->reference=-grib_power(bd->width,2);
+                        bd->width++;
+
+                        err=codec_element(c,self,iss,buffer,data,&pos,index,bd,elementIndex,dval,sval);
+                        grib_bufr_descriptor_delete(bd);
+                        if (err) return err;
+                        /* self->expanded->v[index] */
+                        if (flag!=PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex,i);
+                        elementIndex++;
+                    } else {
+                        if (flag!=PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex,i);
+                        if (decoding) push_zero_element(self,dval);
+                        elementIndex++;
+                    }
                     break;
                 case 35:
                     /* cancel bitmap */
@@ -1975,12 +2211,15 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
                     break;
                 case 36:
                     /* bitmap */
-                    if (flag!=PROCESS_ENCODE) {
+                    if (flag==PROCESS_DECODE) {
                         grib_iarray_push(elementsDescriptorsIndex,i);
                         if (decoding) push_zero_element(self,dval);
                         build_bitmap(self,data,&pos,elementIndex,elementsDescriptorsIndex,i);
-                    } else {
+                    } else if (flag==PROCESS_ENCODE) {
                         restart_bitmap(self);
+                    } else if (flag==PROCESS_NEW_DATA) {
+                        grib_iarray_push(elementsDescriptorsIndex,i);
+                        build_bitmap_new_data(self,data,&pos,elementIndex,elementsDescriptorsIndex,i);
                     }
                     elementIndex++;
                     break;
@@ -2003,7 +2242,7 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
                 case 9:
                     /* associated field */
                     if (descriptors[i]->X==99 && descriptors[i]->Y==999) {
-                        err=codec_element(c,self,iss,buffer,data,&pos,i,elementIndex,dval,sval);
+                        err=codec_element(c,self,iss,buffer,data,&pos,i,0,elementIndex,dval,sval);
                         if (err) return err;
                         if (flag!=PROCESS_ENCODE) grib_iarray_push(elementsDescriptorsIndex,i);
                         elementIndex++;
@@ -2031,7 +2270,7 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
                             break;
                         } else {
                             if (ir>0)  {
-                                n[ir-1]-=numberOfElementsToRepeat[ir]+2;
+                                n[ir-1]-=numberOfElementsToRepeat[ir]+1;
                             }
                             i=startRepetition[ir]+numberOfElementsToRepeat[ir];
                             numberOfNestedRepetitions--;
diff --git a/src/grib_accessor_class_bufr_elements_table.c b/src/grib_accessor_class_bufr_elements_table.c
index 6426fa3..8315ba1 100644
--- a/src/grib_accessor_class_bufr_elements_table.c
+++ b/src/grib_accessor_class_bufr_elements_table.c
@@ -181,7 +181,7 @@ char** str_split(char* a_str, const char a_delim)
     count++;
 
     result = (char**)malloc(sizeof(char*) * count);
-
+    Assert(result);
     if (result)
     {
         size_t idx  = 0;
@@ -260,7 +260,7 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err)
         grib_context_log(c,GRIB_LOG_DEBUG,"using dictionary %s from file %s",self->dictionary,filename);
     }
 
-    f=fopen(filename,"r");
+    f=codes_fopen(filename,"r");
     if (!f) {*err=GRIB_IO_PROBLEM; return NULL;}
 
     dictionary=grib_trie_new(c);
@@ -273,7 +273,7 @@ static grib_trie* load_bufr_elements_table(grib_accessor* a, int* err)
     fclose(f);
 
     if (localFilename!=0) {
-        f=fopen(localFilename,"r");
+        f=codes_fopen(localFilename,"r");
         if (!f) {*err=GRIB_IO_PROBLEM; return NULL;}
 
         while(fgets(line,sizeof(line)-1,f)) {
diff --git a/src/grib_accessor_class_codeflag.c b/src/grib_accessor_class_codeflag.c
index 707e09a..67c4eeb 100644
--- a/src/grib_accessor_class_codeflag.c
+++ b/src/grib_accessor_class_codeflag.c
@@ -170,8 +170,7 @@ static int grib_get_codeflag(grib_accessor* a, long code, char* codename)
         return GRIB_FILE_NOT_FOUND;
     }
 
-    f=fopen(filename, "r");
-
+    f = codes_fopen(filename, "r");
     if (!f)
     {
         grib_context_log(a->context,(GRIB_LOG_WARNING)|(GRIB_LOG_PERROR),"Cannot open flag table %s",filename);
diff --git a/src/grib_accessor_class_codetable.c b/src/grib_accessor_class_codetable.c
index 23757bc..e67ff38 100644
--- a/src/grib_accessor_class_codetable.c
+++ b/src/grib_accessor_class_codetable.c
@@ -15,6 +15,34 @@
 #include "grib_api_internal.h"
 #include <ctype.h>
 
+#if GRIB_PTHREADS
+static pthread_once_t once  = PTHREAD_ONCE_INIT;
+static pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
+
+static void thread_init() {
+    pthread_mutexattr_t attr;
+    pthread_mutexattr_init(&attr);
+    pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
+    pthread_mutex_init(&mutex1,&attr);
+    pthread_mutexattr_destroy(&attr);
+}
+#elif GRIB_OMP_THREADS
+static int once = 0;
+static omp_nest_lock_t mutex1;
+
+static void thread_init()
+{
+    GRIB_OMP_CRITICAL(lock_grib_accessor_class_codetable_c)
+    {
+        if (once == 0)
+        {
+            omp_init_nest_lock(&mutex1);
+            once = 1;
+        }
+    }
+}
+#endif
+
 /*
  * strcasecmp is not in the C standard. However, it's defined by
  * 4.4BSD, POSIX.1-2001. So we use our own
@@ -163,7 +191,9 @@ static void init_class(grib_accessor_class* c)
 
 static int grib_load_codetable(grib_context* c,const char* filename,
         const char* recomposed_name,size_t size,grib_codetable* t);
-static void init(grib_accessor* a, const long len, grib_arguments* params) {
+
+static void init(grib_accessor* a, const long len, grib_arguments* params)
+{
     int n=0;
     grib_accessor_codetable* self  = (grib_accessor_codetable*)a;
     grib_action* act=(grib_action*)(a->creator);
@@ -183,7 +213,7 @@ static void init(grib_accessor* a, const long len, grib_arguments* params) {
         a->vvalue->length=len;
         if (act->default_value!=NULL) {
             const char* p = 0;
-            size_t len = 1;
+            size_t s_len = 1;
             long l;
             int ret=0;
             double d;
@@ -193,29 +223,29 @@ static void init(grib_accessor* a, const long len, grib_arguments* params) {
             switch(type) {
             case GRIB_TYPE_DOUBLE:
                 grib_expression_evaluate_double(grib_handle_of_accessor(a),expression,&d);
-                grib_pack_double(a,&d,&len);
+                grib_pack_double(a,&d,&s_len);
                 break;
 
             case GRIB_TYPE_LONG:
                 grib_expression_evaluate_long(grib_handle_of_accessor(a),expression,&l);
-                grib_pack_long(a,&l,&len);
+                grib_pack_long(a,&l,&s_len);
                 break;
 
             default:
-                len = sizeof(tmp);
-                p = grib_expression_evaluate_string(grib_handle_of_accessor(a),expression,tmp,&len,&ret);
+                s_len = sizeof(tmp);
+                p = grib_expression_evaluate_string(grib_handle_of_accessor(a),expression,tmp,&s_len,&ret);
                 if (ret != GRIB_SUCCESS) {
                     grib_context_log(a->context,GRIB_LOG_FATAL,
                             "unable to evaluate %s as string",a->name);
                 }
-                len = strlen(p)+1;
-                pack_string(a,p,&len);
+                s_len = strlen(p)+1;
+                pack_string(a,p,&s_len);
                 break;
             }
         }
-    } else
+    } else {
         a->length = len;
-
+    }
 }
 
 static int str_eq(const char* a, const char* b)
@@ -279,6 +309,9 @@ static grib_codetable* load_table(grib_accessor_codetable* self)
         localFilename=grib_context_full_defs_path(c,localRecomposed);
     }
 
+    GRIB_MUTEX_INIT_ONCE(&once,&thread_init);
+    GRIB_MUTEX_LOCK(&mutex1); /* GRIB-930 */
+
     /*printf("%s: Looking in cache: f=%s lf=%s\n", self->att.name, filename, localFilename);*/
     next=c->codetable;
     while(next) {
@@ -287,7 +320,8 @@ static grib_codetable* load_table(grib_accessor_codetable* self)
                         ((localFilename!=0 && next->filename[1]!=NULL)
                                 && strcmp(localFilename,next->filename[1]) ==0)) )
         {
-            return next;
+            t = next;
+            goto the_end;
         }
         /* Special case: see GRIB-735 */
         if (filename==NULL && localFilename!=NULL)
@@ -295,7 +329,8 @@ static grib_codetable* load_table(grib_accessor_codetable* self)
             if ( str_eq(localFilename, next->filename[0]) ||
                  str_eq(localFilename, next->filename[1]) )
             {
-                return next;
+                t = next;
+                goto the_end;
             }
         }
         next = next->next;
@@ -322,11 +357,14 @@ static grib_codetable* load_table(grib_accessor_codetable* self)
 
     if (t->filename[0]==NULL && t->filename[1]==NULL) {
         grib_context_free_persistent(c,t);
-        return NULL;
+        t = NULL;
+        goto the_end;
     }
 
-    return t;
+the_end:
+    GRIB_MUTEX_UNLOCK(&mutex1);
 
+    return t;
 }
 
 static int grib_load_codetable(grib_context* c,const char* filename,
@@ -337,7 +375,7 @@ static int grib_load_codetable(grib_context* c,const char* filename,
     int lineNumber = 0;
     grib_context_log(c,GRIB_LOG_DEBUG,"Loading code table from %s",filename);
 
-    f=fopen(filename, "r");
+    f = codes_fopen(filename, "r");
     if (!f) return GRIB_IO_PROBLEM;
 
     Assert(t!=NULL);
@@ -444,11 +482,10 @@ static int grib_load_codetable(grib_context* c,const char* filename,
     fclose(f);
 
     return 0;
-
 }
 
-
-void grib_codetable_delete(grib_context* c) {
+void grib_codetable_delete(grib_context* c)
+{
     grib_codetable* t = c->codetable;
 
     while(t)
@@ -470,10 +507,10 @@ void grib_codetable_delete(grib_context* c) {
         grib_context_free_persistent(c,t);
         t = s;
     }
-
 }
 
-static void dump(grib_accessor* a, grib_dumper* dumper) {
+static void dump(grib_accessor* a, grib_dumper* dumper)
+{
     grib_accessor_codetable* self  = (grib_accessor_codetable*)a;
     char comment[2048];
     grib_codetable* table;
@@ -532,7 +569,6 @@ static void dump(grib_accessor* a, grib_dumper* dumper) {
     strcat(comment,") ");
 
     grib_dump_long(dumper,a,comment);
-
 }
 
 static int unpack_string (grib_accessor* a, char* buffer, size_t *len)
@@ -566,7 +602,6 @@ static int unpack_string (grib_accessor* a, char* buffer, size_t *len)
 #endif
     }
 
-
     l = strlen(tmp) + 1;
 
     if(*len < l)
@@ -623,7 +658,7 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t *len)
         grib_action* act=(grib_action*)(a->creator);
         if (act->default_value!=NULL) {
             const char* p = 0;
-            size_t len = 1;
+            size_t s_len = 1;
             long l;
             int ret=0;
             double d;
@@ -633,24 +668,24 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t *len)
             switch(type) {
             case GRIB_TYPE_DOUBLE:
                 grib_expression_evaluate_double(grib_handle_of_accessor(a),expression,&d);
-                grib_pack_double(a,&d,&len);
+                grib_pack_double(a,&d,&s_len);
                 break;
 
             case GRIB_TYPE_LONG:
                 grib_expression_evaluate_long(grib_handle_of_accessor(a),expression,&l);
-                grib_pack_long(a,&l,&len);
+                grib_pack_long(a,&l,&s_len);
                 break;
 
             default:
-                len = sizeof(tmp);
-                p = grib_expression_evaluate_string(grib_handle_of_accessor(a),expression,tmp,&len,&ret);
+                s_len = sizeof(tmp);
+                p = grib_expression_evaluate_string(grib_handle_of_accessor(a),expression,tmp,&s_len,&ret);
                 if (ret != GRIB_SUCCESS) {
                     grib_context_log(a->context,GRIB_LOG_FATAL,
                             "unable to evaluate %s as string",a->name);
                     return ret;
                 }
-                len = strlen(p)+1;
-                pack_string(a,p,&len);
+                s_len = strlen(p)+1;
+                pack_string(a,p,&s_len);
                 break;
             }
             return GRIB_SUCCESS;
@@ -660,7 +695,8 @@ static int pack_string(grib_accessor* a, const char* buffer, size_t *len)
     return GRIB_ENCODING_ERROR;
 }
 
-static int pack_expression(grib_accessor* a, grib_expression *e){
+static int pack_expression(grib_accessor* a, grib_expression *e)
+{
     const char* cval;
     int ret=0;
     long lval=0;
@@ -691,7 +727,8 @@ static void destroy(grib_context* context,grib_accessor* a)
     }
 }
 
-static int  get_native_type(grib_accessor* a){
+static int get_native_type(grib_accessor* a)
+{
     int type=GRIB_TYPE_LONG;
     /*printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n",
          a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/
@@ -700,7 +737,7 @@ static int  get_native_type(grib_accessor* a){
     return type;
 }
 
-static int    unpack_long   (grib_accessor* a, long* val, size_t *len)
+static int unpack_long(grib_accessor* a, long* val, size_t *len)
 {
     grib_accessor_codetable* self = (grib_accessor_codetable*)a;
     long rlen = 0;
diff --git a/src/grib_accessor_class_concept.c b/src/grib_accessor_class_concept.c
index 005cfe4..0a51cf6 100644
--- a/src/grib_accessor_class_concept.c
+++ b/src/grib_accessor_class_concept.c
@@ -157,74 +157,74 @@ static void dump(grib_accessor* a, grib_dumper* dumper)
 }
 
 static int concept_condition_expression_true(grib_handle* h,grib_concept_condition* c) {
-  long lval;
-  double dval;
-  long lres=0;
-  double dres=0.0;
-  const char *cval;
-  char buf[80];
-  char tmp[80];
-  size_t len = sizeof(buf);
-  size_t size=sizeof(tmp);
-  int ok = 0;
-  int err=0;
-  int type       = grib_expression_native_type(h,c->expression);
-
-  switch(type)
-  {
+    long lval;
+    double dval;
+    long lres=0;
+    double dres=0.0;
+    const char *cval;
+    char buf[80];
+    char tmp[80];
+    size_t len = sizeof(buf);
+    size_t size=sizeof(tmp);
+    int ok = 0;
+    int err=0;
+    int type       = grib_expression_native_type(h,c->expression);
+
+    switch(type)
+    {
     case GRIB_TYPE_LONG:
-      grib_expression_evaluate_long(h,c->expression,&lres);
-      ok =  (grib_get_long(h,c->name,&lval) == GRIB_SUCCESS) &&
-        (lval == lres);
-      break;
+        grib_expression_evaluate_long(h,c->expression,&lres);
+        ok =  (grib_get_long(h,c->name,&lval) == GRIB_SUCCESS) &&
+                (lval == lres);
+        break;
 
     case GRIB_TYPE_DOUBLE:
-      grib_expression_evaluate_double(h,c->expression,&dres);
-      ok = (grib_get_double(h,c->name,&dval) == GRIB_SUCCESS) &&
-        (dval == dres);
-      break;
+        grib_expression_evaluate_double(h,c->expression,&dres);
+        ok = (grib_get_double(h,c->name,&dval) == GRIB_SUCCESS) &&
+                (dval == dres);
+        break;
 
     case GRIB_TYPE_STRING:
-      ok = (grib_get_string(h,c->name,buf,&len) == GRIB_SUCCESS) &&
+        ok = (grib_get_string(h,c->name,buf,&len) == GRIB_SUCCESS) &&
         ((cval = grib_expression_evaluate_string(h,c->expression,tmp,&size,&err)) != NULL) &&
         (err==0) && (strcmp(buf,cval) == 0);
-      break;
+        break;
 
     default:
-      /* TODO: */
-      break;
-  }
-  return ok;
+        /* TODO: */
+        break;
+    }
+    return ok;
 }
 
 static int concept_condition_iarray_true(grib_handle* h,grib_concept_condition* c) {
-  long *val;
-  size_t size=0,i;
-  int ret;
-  int err=0;
+    long *val;
+    size_t size=0,i;
+    int ret;
+    int err=0;
 
-  err=grib_get_size(h,c->name,&size);
-  if (err==0 || size!=grib_iarray_used_size(c->iarray)) return 0;
+    err=grib_get_size(h,c->name,&size);
+    if (err==0 || size!=grib_iarray_used_size(c->iarray)) return 0;
 
-  val=(long*)grib_context_malloc_clear(h->context,sizeof(long)*size);
+    val=(long*)grib_context_malloc_clear(h->context,sizeof(long)*size);
 
-  err=grib_get_long_array(h,c->name,val,&size);
-  if (err==0) return 0;
+    err=grib_get_long_array(h,c->name,val,&size);
+    if (err==0) return 0;
 
-  ret=1;
-  for (i=0;i<size;i++) {
-    if (val[i]!=c->iarray->v[i]) {
-      ret=0;
-      break;
+    ret=1;
+    for (i=0;i<size;i++) {
+        if (val[i]!=c->iarray->v[i]) {
+            ret=0;
+            break;
+        }
     }
-  }
 
-  return ret;
+    return ret;
 }
 
 static int concept_condition_true(grib_handle* h,grib_concept_condition* c) {
-  if (c->expression==NULL) return concept_condition_iarray_true(h,c);
-  else return concept_condition_expression_true(h,c);
+    if (c->expression==NULL) return concept_condition_iarray_true(h,c);
+    else return concept_condition_expression_true(h,c);
 }
 
 static const char* concept_evaluate(grib_accessor* a)
@@ -263,51 +263,53 @@ static const char* concept_evaluate(grib_accessor* a)
 
 #define MAX_NUM_CONCEPT_VALUES 40
 
-int concept_conditions_expression_apply(grib_handle* h,grib_concept_condition* e,grib_values* values,grib_sarray* sa,int* n) {
-  long lres=0;
-  double dres=0.0;
-  int count=*n;
-  size_t size;
-  int err=0;
+static int concept_conditions_expression_apply(grib_handle* h,grib_concept_condition* e,grib_values* values,grib_sarray* sa,int* n)
+{
+    long lres=0;
+    double dres=0.0;
+    int count=*n;
+    size_t size;
+    int err=0;
 
-  Assert(count<1024);
-  values[count].name = e->name;
+    Assert(count<1024);
+    values[count].name = e->name;
 
-  values[count].type = grib_expression_native_type(h,e->expression);
-  switch(values[count].type)
-  {
+    values[count].type = grib_expression_native_type(h,e->expression);
+    switch(values[count].type)
+    {
     case GRIB_TYPE_LONG:
-      grib_expression_evaluate_long(h,e->expression,&lres);
-      values[count].long_value = lres;
-      break;
+        grib_expression_evaluate_long(h,e->expression,&lres);
+        values[count].long_value = lres;
+        break;
     case GRIB_TYPE_DOUBLE:
-      grib_expression_evaluate_double(h,e->expression,&dres);
-      values[count].double_value = dres;
-      break;
+        grib_expression_evaluate_double(h,e->expression,&dres);
+        values[count].double_value = dres;
+        break;
     case GRIB_TYPE_STRING:
-      size = sizeof(sa->v[count]);
-      values[count].string_value = grib_expression_evaluate_string(h,e->expression,sa->v[count],&size,&err);
-      break;
+        size = sizeof(sa->v[count]);
+        values[count].string_value = grib_expression_evaluate_string(h,e->expression,sa->v[count],&size,&err);
+        break;
     default:
-      return GRIB_NOT_IMPLEMENTED;
-      break;
-  }
-  (*n)++;
-  return err;
+        return GRIB_NOT_IMPLEMENTED;
+        break;
+    }
+    (*n)++;
+    return err;
 }
 
-int concept_conditions_iarray_apply(grib_handle* h,grib_concept_condition* c) {
-  size_t size=grib_iarray_used_size(c->iarray);
-  return grib_set_long_array(h,c->name,c->iarray->v,size);
+static int concept_conditions_iarray_apply(grib_handle* h,grib_concept_condition* c)
+{
+    size_t size=grib_iarray_used_size(c->iarray);
+    return grib_set_long_array(h,c->name,c->iarray->v,size);
 }
 
-static int concept_conditions_apply(grib_handle* h,grib_concept_condition* c,grib_values* values,grib_sarray* sa,int* n) {
-  if (c->expression==NULL) return concept_conditions_iarray_apply(h,c);
-  else return concept_conditions_expression_apply(h,c,values,sa,n);
+static int concept_conditions_apply(grib_handle* h,grib_concept_condition* c,grib_values* values,grib_sarray* sa,int* n)
+{
+    if (c->expression==NULL) return concept_conditions_iarray_apply(h,c);
+    else return concept_conditions_expression_apply(h,c,values,sa,n);
 }
 
-static int
-cmpstringp(const void *p1, const void *p2)
+static int cmpstringp(const void *p1, const void *p2)
 {
     /* The actual arguments to this function are "pointers to
        pointers to char", but strcmp(3) arguments are "pointers
@@ -315,7 +317,7 @@ cmpstringp(const void *p1, const void *p2)
     return strcmp(* (char * const *) p1, * (char * const *) p2);
 }
 
-int grib_concept_apply(grib_accessor* a, const char* name)
+static int grib_concept_apply(grib_accessor* a, const char* name)
 {
     int err=0;
     int count = 0;
@@ -337,7 +339,7 @@ int grib_concept_apply(grib_accessor* a, const char* name)
     if (!c){
         err= nofail ? GRIB_SUCCESS : GRIB_CONCEPT_NO_MATCH;
         if (err) {
-            size_t i = 0, count = 0;
+            size_t i = 0, concept_count = 0;
             char* all_concept_vals[MAX_NUM_CONCEPT_VALUES] = {NULL,}; /* sorted array containing concept values */
             grib_concept_value* pCon = concepts;
 
@@ -350,13 +352,13 @@ int grib_concept_apply(grib_accessor* a, const char* name)
                 all_concept_vals[i++] = pCon->name;
                 pCon = pCon->next;
             }
-            count = i;
+            concept_count = i;
             /* Only print out all concepts if fewer than MAX_NUM_CONCEPT_VALUES.
              * Printing out all values for concepts like paramId would be silly! */
-            if (count < MAX_NUM_CONCEPT_VALUES) {
+            if (concept_count < MAX_NUM_CONCEPT_VALUES) {
                 fprintf(stderr, "Here are the possible values for concept %s:\n", act->name);
-                qsort(&all_concept_vals, count, sizeof(char*), cmpstringp);
-                for(i=0; i<count; ++i) {
+                qsort(&all_concept_vals, concept_count, sizeof(char*), cmpstringp);
+                for(i=0; i<concept_count; ++i) {
                     if (all_concept_vals[i]) {
                         int print_it = 1;
                         if (i>0 && strcmp(all_concept_vals[i], all_concept_vals[i-1]) == 0) {
@@ -527,4 +529,3 @@ static int compare(grib_accessor* a,grib_accessor* b)
 
     return retval;
 }
-
diff --git a/src/grib_accessor_class_data_2order_packing.c b/src/grib_accessor_class_data_2order_packing.c
index c8819ea..a9030d5 100644
--- a/src/grib_accessor_class_data_2order_packing.c
+++ b/src/grib_accessor_class_data_2order_packing.c
@@ -273,7 +273,6 @@ static unsigned char* bitmap_pop_line(unsigned char* bitmap,long* bitmap_len,int
 static int reverse_rows (unsigned long* data, long  len, long number_along_parallel,
         unsigned char* bitmap,long bitmap_len)
 {
-    long count = 0;
     long i = 0;
     long left = 0;
     long right = number_along_parallel-1;
@@ -282,6 +281,7 @@ static int reverse_rows (unsigned long* data, long  len, long number_along_paral
 
     if (bitmap_len==0) {
         /* NO BITMAP*/
+        long count = 0;
         inc=number_along_parallel;
         count = number_along_parallel;
 
@@ -337,7 +337,6 @@ static int reverse_rows (unsigned long* data, long  len, long number_along_paral
             data+=line_len;
             p=bitmap_pop_line(p,&bitmap_left_len,&bit_offset,number_along_parallel,&line_len);
         }
-
     }
 
     return 0;
@@ -782,7 +781,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
             !=GRIB_SUCCESS) {
         grib_context_log(a->context,GRIB_LOG_ERROR,
                 "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-        exit(GRIB_INTERNAL_ERROR);
+        return GRIB_INTERNAL_ERROR;
     }
 
     /*  the scale factor in Grib 1 is adjusted in gribex, for "normalization purpose" ... ?*/
diff --git a/src/grib_accessor_class_data_ccsds_packing.c b/src/grib_accessor_class_data_ccsds_packing.c
index 00f7d96..117e71a 100644
--- a/src/grib_accessor_class_data_ccsds_packing.c
+++ b/src/grib_accessor_class_data_ccsds_packing.c
@@ -424,7 +424,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
             !=GRIB_SUCCESS) {
         grib_context_log(a->context,GRIB_LOG_ERROR,
                          "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-        exit(GRIB_INTERNAL_ERROR);
+        return GRIB_INTERNAL_ERROR;
     }
 
     if(reference_value > min)
diff --git a/src/grib_accessor_class_data_complex_packing.c b/src/grib_accessor_class_data_complex_packing.c
index 5211998..2e85e5f 100644
--- a/src/grib_accessor_class_data_complex_packing.c
+++ b/src/grib_accessor_class_data_complex_packing.c
@@ -768,7 +768,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len) {
             !=GRIB_SUCCESS) {
         grib_context_log(a->context,GRIB_LOG_ERROR,
                 "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-        exit(GRIB_INTERNAL_ERROR);
+        return GRIB_INTERNAL_ERROR;
     }
     binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret);
 
@@ -776,7 +776,11 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len) {
         d=0;
         binary_scale_factor = 0;
         reference_value=0;
-
+    } else {
+        if (ret!=GRIB_SUCCESS) {
+            grib_context_log(a->context,GRIB_LOG_ERROR,"COMPLEX_PACKING : Cannot compute binary_scale_factor");
+            return ret;
+        }
     }
     s = grib_power(-binary_scale_factor,2);
 
diff --git a/src/grib_accessor_class_data_g1second_order_general_extended_packing.c b/src/grib_accessor_class_data_g1second_order_general_extended_packing.c
index 1cadde9..d3e5a3d 100644
--- a/src/grib_accessor_class_data_g1second_order_general_extended_packing.c
+++ b/src/grib_accessor_class_data_g1second_order_general_extended_packing.c
@@ -670,7 +670,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
             !=GRIB_SUCCESS) {
         grib_context_log(a->context,GRIB_LOG_ERROR,
                 "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-        exit(GRIB_INTERNAL_ERROR);
+        return GRIB_INTERNAL_ERROR;
     }
     if((ret = grib_set_double_internal(handle,self->reference_value, reference_value)) !=
             GRIB_SUCCESS)
@@ -689,6 +689,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
         return ret;
 
     binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret);
+    if (ret != GRIB_SUCCESS) return ret;
 
     if((ret = grib_set_long_internal(handle,self->binary_scale_factor, binary_scale_factor)) !=
             GRIB_SUCCESS)
@@ -1185,6 +1186,10 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
         }
     }
 
+    /* ECC-259: Set correct number of values */
+    ret=grib_set_long_internal(a->parent->h,self->number_of_values, *len);
+    if(ret) return ret;
+
     grib_buffer_replace(a, buffer, size,1,1);
 
     grib_context_free(a->context,buffer);
diff --git a/src/grib_accessor_class_data_g22order_packing.c b/src/grib_accessor_class_data_g22order_packing.c
index afb286c..e83a2e5 100644
--- a/src/grib_accessor_class_data_g22order_packing.c
+++ b/src/grib_accessor_class_data_g22order_packing.c
@@ -644,11 +644,12 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
             !=GRIB_SUCCESS) {
         grib_context_log(a->context,GRIB_LOG_ERROR,
                 "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-        exit(GRIB_INTERNAL_ERROR);
+        return GRIB_INTERNAL_ERROR;
     }
 
-    binary_scale_factor    = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&err);
-    divisor         = grib_power(-binary_scale_factor,2);
+    binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&err);
+    if (err != GRIB_SUCCESS) return err;
+    divisor = grib_power(-binary_scale_factor,2);
 
     for(i=0;i< n_vals;i++)
         sec_val[i] = (unsigned long)((((val[i]*d)-reference_value)*divisor)+0.5);
@@ -738,6 +739,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
 
     if((err = grib_set_long_internal(gh,self->orderOfSpatialDifferencing,0 )) != GRIB_SUCCESS)  return err;
     if((err = grib_set_long_internal(gh,self->numberOfOctetsExtraDescriptors,0 )) != GRIB_SUCCESS)  return err;
+    /* ECC-259: Set correct number of values */
+    if((err = grib_set_long_internal(gh,self->numberOfValues,*len )) != GRIB_SUCCESS)  return err;
 
     return GRIB_SUCCESS;
 }
diff --git a/src/grib_accessor_class_data_png_packing.c b/src/grib_accessor_class_data_png_packing.c
index 189e564..558899e 100644
--- a/src/grib_accessor_class_data_png_packing.c
+++ b/src/grib_accessor_class_data_png_packing.c
@@ -521,7 +521,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
             !=GRIB_SUCCESS) {
         grib_context_log(a->context,GRIB_LOG_ERROR,
                 "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-        exit(GRIB_INTERNAL_ERROR);
+        return GRIB_INTERNAL_ERROR;
     }
 
     if(reference_value > min)
@@ -642,8 +642,8 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
     bytes = bits8/8;
 
     rows = grib_context_buffer_malloc_clear(a->context,sizeof(png_bytep)*height);
-
-    rows  = malloc(height*sizeof(png_bytep));
+    /*rows  = malloc(height*sizeof(png_bytep));*/
+    Assert(rows);
     for (j=0;j<height;j++)
         rows[j] = &encoded[j*width*bytes];
 
diff --git a/src/grib_accessor_class_data_simple_packing.c b/src/grib_accessor_class_data_simple_packing.c
index 0699e01..68fd01b 100644
--- a/src/grib_accessor_class_data_simple_packing.c
+++ b/src/grib_accessor_class_data_simple_packing.c
@@ -676,6 +676,7 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
             }
 
             binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&err);
+            if(err) return err;
         }
     }
 
diff --git a/src/grib_accessor_class_dictionary.c b/src/grib_accessor_class_dictionary.c
index e7d109d..1a72c37 100644
--- a/src/grib_accessor_class_dictionary.c
+++ b/src/grib_accessor_class_dictionary.c
@@ -220,7 +220,7 @@ static grib_trie* load_dictionary(grib_context* c,grib_accessor* a, int* err)
         grib_context_log(c,GRIB_LOG_DEBUG,"using dictionary %s from file %s",self->dictionary,filename);
     }
 
-    f=fopen(filename,"r");
+    f=codes_fopen(filename,"r");
     if (!f) {*err=GRIB_IO_PROBLEM; return NULL;}
 
     dictionary=grib_trie_new(c);
@@ -240,7 +240,7 @@ static grib_trie* load_dictionary(grib_context* c,grib_accessor* a, int* err)
     fclose(f);
 
     if (localFilename!=0) {
-        f=fopen(localFilename,"r");
+        f=codes_fopen(localFilename,"r");
         if (!f) {*err=GRIB_IO_PROBLEM; return NULL;}
 
         while(fgets(line,sizeof(line)-1,f)) {
diff --git a/src/grib_accessor_class_expanded_descriptors.c b/src/grib_accessor_class_expanded_descriptors.c
index 8ac8628..19b3706 100644
--- a/src/grib_accessor_class_expanded_descriptors.c
+++ b/src/grib_accessor_class_expanded_descriptors.c
@@ -458,7 +458,7 @@ static size_t __expand(grib_accessor* a, bufr_descriptors_array* unexpanded, buf
     return size;
 }
 
-bufr_descriptors_array* do_expand(grib_accessor* a,bufr_descriptors_array* unexpanded,change_coding_params* ccp,int *err)
+static bufr_descriptors_array* do_expand(grib_accessor* a,bufr_descriptors_array* unexpanded,change_coding_params* ccp,int *err)
 {
     bufr_descriptors_array* expanded=NULL;
     grib_context* c=a->context;
diff --git a/src/grib_accessor_class_g1_increment.c b/src/grib_accessor_class_g1_increment.c
index 48f30de..d026b20 100644
--- a/src/grib_accessor_class_g1_increment.c
+++ b/src/grib_accessor_class_g1_increment.c
@@ -144,139 +144,139 @@ static void init_class(grib_accessor_class* c)
 
 static void init(grib_accessor* a,const long l, grib_arguments* c)
 {
-	grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a; 
-	int n = 0;
-	
-	self->directionIncrementGiven = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-	self->directionIncrement    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-	self->first = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-	self->last    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-	self->numberOfPoints    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a;
+    int n = 0;
+
+    self->directionIncrementGiven = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->directionIncrement    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->first = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->last    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->numberOfPoints    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
 }
 
 static int    unpack_double   (grib_accessor* a, double* val, size_t *len)
 {
-	grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a;
-	int ret = 0;
-
-	long directionIncrementGiven=0;
-	long directionIncrement;
-	double first = 0;
-	double last = 0;
-	long numberOfPoints = 0;
-
-	if(*len < 1)
-		ret = GRIB_ARRAY_TOO_SMALL;
-
-	if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,&directionIncrementGiven)) 
-					!= GRIB_SUCCESS)
-		return ret;
-	
-	if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrement,&directionIncrement)) 
-				!= GRIB_SUCCESS)
-		return ret;
-	
-	if((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first,&first)) != GRIB_SUCCESS)
-		return ret;
-	
-	if((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last,&last)) != GRIB_SUCCESS)
-		return ret;
-
-	if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&numberOfPoints))
-       != GRIB_SUCCESS)
-		return ret;
-	
-	if (!directionIncrementGiven || directionIncrement == GRIB_MISSING_LONG) {
-		*val = fabs(last-first)/(double)(numberOfPoints-1);
-	} else {
-		*val = (double)directionIncrement/1000.0;
-	} 
-	
+    grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a;
+    int ret = 0;
+
+    long directionIncrementGiven=0;
+    long directionIncrement;
+    double first = 0;
+    double last = 0;
+    long numberOfPoints = 0;
+
+    if(*len < 1)
+        ret = GRIB_ARRAY_TOO_SMALL;
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,&directionIncrementGiven))
+            != GRIB_SUCCESS)
+        return ret;
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrement,&directionIncrement))
+            != GRIB_SUCCESS)
+        return ret;
+
+    if((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first,&first)) != GRIB_SUCCESS)
+        return ret;
+
+    if((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last,&last)) != GRIB_SUCCESS)
+        return ret;
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&numberOfPoints))
+            != GRIB_SUCCESS)
+        return ret;
+
+    if (!directionIncrementGiven || directionIncrement == GRIB_MISSING_LONG) {
+        *val = fabs(last-first)/(double)(numberOfPoints-1);
+    } else {
+        *val = (double)directionIncrement/1000.0;
+    }
+
 #if 0
-	printf("unpack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld %s=%f\n",
-						self->directionIncrementGiven,directionIncrementGiven,
-						self->directionIncrement,directionIncrement,
-						self->last,last,
-						self->first,first,
-						self->numberOfPoints,numberOfPoints,
-						a->name,*val);
+    printf("unpack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld %s=%f\n",
+            self->directionIncrementGiven,directionIncrementGiven,
+            self->directionIncrement,directionIncrement,
+            self->last,last,
+            self->first,first,
+            self->numberOfPoints,numberOfPoints,
+            a->name,*val);
 #endif
-	if (ret == GRIB_SUCCESS) *len = 1;
-		
-	return ret;
+    if (ret == GRIB_SUCCESS) *len = 1;
+
+    return ret;
 } 
 
 
 static int pack_double(grib_accessor* a, const double* val, size_t *len)
 {
-	grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a;
-	int ret = 0;
-		long codedNumberOfPoints=0;
-	
-	long directionIncrementGiven=0;
-	long directionIncrement;
-	double first = 0;
-	double last = 0;
-	long numberOfPoints = 0;
-	double incrementInMillidegrees;
-	
-	ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first,&first);
-	if(ret != GRIB_SUCCESS) {
-		grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->first, ret);   
-		return ret;
-	}	
-	ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last,&last);
-	if(ret != GRIB_SUCCESS){
-		grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->last, ret);   
-		return ret;
-	}
-
-	if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,&directionIncrementGiven)) 
-					!= GRIB_SUCCESS){
-		grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->directionIncrementGiven, ret);   
-		return ret;
-	}	
-	
-	numberOfPoints = 1+rint(fabs((last-first) / *val));
-	
-	incrementInMillidegrees = *val * 1000;
-	if ((int)incrementInMillidegrees ==  incrementInMillidegrees ) {
-		directionIncrement=(int)incrementInMillidegrees;
-	} else {
-		directionIncrement=0xffffff;
-		directionIncrementGiven=0;
-	} 
-
-	ret = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,numberOfPoints);
-	if(ret )
-		grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->numberOfPoints, ret);
-	
-
-	grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&codedNumberOfPoints);
-	
-	
-		ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrement,directionIncrement);
-	if(ret )
-		grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->directionIncrement, ret);
-	
-		ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,directionIncrementGiven);
-	if(ret )
-		grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->directionIncrementGiven, ret);
+    grib_accessor_g1_increment* self = (grib_accessor_g1_increment*)a;
+    int ret = 0;
+    long codedNumberOfPoints=0;
+
+    long directionIncrementGiven=0;
+    long directionIncrement;
+    double first = 0;
+    double last = 0;
+    long numberOfPoints = 0;
+    double incrementInMillidegrees;
+
+    ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first,&first);
+    if(ret != GRIB_SUCCESS) {
+        grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->first, ret);
+        return ret;
+    }
+    ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last,&last);
+    if(ret != GRIB_SUCCESS){
+        grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->last, ret);
+        return ret;
+    }
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,&directionIncrementGiven))
+            != GRIB_SUCCESS){
+        grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont gather value for %s error %d \n", a->name, self->directionIncrementGiven, ret);
+        return ret;
+    }
+
+    numberOfPoints = 1+rint(fabs((last-first) / *val));
+
+    incrementInMillidegrees = *val * 1000;
+    if ((int)incrementInMillidegrees ==  incrementInMillidegrees ) {
+        directionIncrement=(int)incrementInMillidegrees;
+    } else {
+        directionIncrement=0xffffff;
+        directionIncrementGiven=0;
+    }
+
+    ret = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,numberOfPoints);
+    if(ret )
+        grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->numberOfPoints, ret);
+
+
+    grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&codedNumberOfPoints);
+
+
+    ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrement,directionIncrement);
+    if(ret )
+        grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->directionIncrement, ret);
+
+    ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,directionIncrementGiven);
+    if(ret )
+        grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannont pack value for %s error %d \n", a->name, self->directionIncrementGiven, ret);
 
 #if 0
-	printf("pack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld codedNumberOfPoints=%ld %s=%f\n",
-						self->directionIncrementGiven,directionIncrementGiven,
-						self->directionIncrement,directionIncrement,
-						self->last,last,
-						self->first,first,
-						self->numberOfPoints,numberOfPoints,
-						codedNumberOfPoints,
-						a->name,*val);
+    printf("pack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld codedNumberOfPoints=%ld %s=%f\n",
+            self->directionIncrementGiven,directionIncrementGiven,
+            self->directionIncrement,directionIncrement,
+            self->last,last,
+            self->first,first,
+            self->numberOfPoints,numberOfPoints,
+            codedNumberOfPoints,
+            a->name,*val);
 #endif
 
 
-	if (ret == GRIB_SUCCESS) *len = 1;
+    if (ret == GRIB_SUCCESS) *len = 1;
 
-	return ret;
+    return ret;
 }
 
diff --git a/src/grib_accessor_class_g2end_step.c b/src/grib_accessor_class_g2end_step.c
index 918d81b..143bb09 100644
--- a/src/grib_accessor_class_g2end_step.c
+++ b/src/grib_accessor_class_g2end_step.c
@@ -396,8 +396,6 @@ static int unpack_long(grib_accessor* a, long* val, size_t *len)
     } else {
         return unpack_multiple_time_ranges(a,val,len);
     }
-
-    return GRIB_SUCCESS;
 }
 
 #if 0
diff --git a/src/grib_accessor_class_g2grid.c b/src/grib_accessor_class_g2grid.c
index 976da67..6d60f8f 100644
--- a/src/grib_accessor_class_g2grid.c
+++ b/src/grib_accessor_class_g2grid.c
@@ -151,244 +151,230 @@ static void init_class(grib_accessor_class* c)
 
 static void init(grib_accessor* a,const long l, grib_arguments* c)
 {
-  grib_accessor_g2grid* self = (grib_accessor_g2grid*)a;
-  int n = 0;
-
-  self->latitude_first      = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->longitude_first     = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->latitude_last       = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->longitude_last      = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->i_increment         = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->j_increment         = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->basic_angle         = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->sub_division        = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-
-  a->flags |=
-    GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC |
-    GRIB_ACCESSOR_FLAG_READ_ONLY ;
-
+    grib_accessor_g2grid* self = (grib_accessor_g2grid*)a;
+    int n = 0;
+
+    self->latitude_first      = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->longitude_first     = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->latitude_last       = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->longitude_last      = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->i_increment         = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->j_increment         = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->basic_angle         = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->sub_division        = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+
+    a->flags |=
+            GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC |
+            GRIB_ACCESSOR_FLAG_READ_ONLY ;
 }
 
 static int value_count(grib_accessor* a,long* count)
 {
-  *count=6;
-  return 0;
+    *count=6;
+    return 0;
 }
 
-
 static int unpack_double(grib_accessor* a, double* val, size_t *len)
 {
-  grib_accessor_g2grid* self = (grib_accessor_g2grid*)a;
-  int ret = 0;
-
-  long basic_angle  = 0;
-  long sub_division = 0;
-  int n = 0;
-  long v[6];
-  int i;
-
-  if(*len < 6){
-    ret = GRIB_ARRAY_TOO_SMALL;
-    return ret;
-  }
-
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->basic_angle,&basic_angle)) != GRIB_SUCCESS)
-    return ret;
-
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_division,&sub_division)) != GRIB_SUCCESS)
-    return ret;
+    grib_accessor_g2grid* self = (grib_accessor_g2grid*)a;
+    int ret = 0;
 
+    long basic_angle  = 0;
+    long sub_division = 0;
+    int n = 0;
+    long v[6];
+    int i;
 
-  if(sub_division == GRIB_MISSING_LONG || sub_division == 0)
-    sub_division = 1000000;
+    if(*len < 6){
+        ret = GRIB_ARRAY_TOO_SMALL;
+        return ret;
+    }
 
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->basic_angle,&basic_angle)) != GRIB_SUCCESS)
+        return ret;
 
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->sub_division,&sub_division)) != GRIB_SUCCESS)
+        return ret;
 
-  if(basic_angle == 0)
-    basic_angle = 1;
 
-  n = 0;
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->latitude_first,&v[n++])) != GRIB_SUCCESS)
-    return ret;
+    if(sub_division == GRIB_MISSING_LONG || sub_division == 0)
+        sub_division = 1000000;
 
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->longitude_first,&v[n++])) != GRIB_SUCCESS)
-    return ret;
+    if(basic_angle == 0)
+        basic_angle = 1;
 
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->latitude_last,&v[n++])) != GRIB_SUCCESS)
-    return ret;
+    n = 0;
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->latitude_first,&v[n++])) != GRIB_SUCCESS)
+        return ret;
 
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->longitude_last,&v[n++])) != GRIB_SUCCESS)
-    return ret;
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->longitude_first,&v[n++])) != GRIB_SUCCESS)
+        return ret;
 
-  if(!self->i_increment)  v[n++] = GRIB_MISSING_LONG;
-  else
-    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->i_increment,&v[n++])) != GRIB_SUCCESS)
-      return ret;
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->latitude_last,&v[n++])) != GRIB_SUCCESS)
+        return ret;
 
-  if(!self->j_increment)  v[n++] = GRIB_MISSING_LONG;
-  else
-    if(self->j_increment)
-      if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->j_increment,&v[n++])) != GRIB_SUCCESS)
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->longitude_last,&v[n++])) != GRIB_SUCCESS)
         return ret;
 
-  for(i = 0 ; i < n ; i++)
-    if(v[i] == GRIB_MISSING_LONG)
-      val[i] = GRIB_MISSING_DOUBLE;
+    if(!self->i_increment)  v[n++] = GRIB_MISSING_LONG;
     else
-      val[i] = (double)v[i] / (double)sub_division * (double)basic_angle;
+        if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->i_increment,&v[n++])) != GRIB_SUCCESS)
+            return ret;
 
+    if(!self->j_increment)  v[n++] = GRIB_MISSING_LONG;
+    else
+        if(self->j_increment)
+            if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->j_increment,&v[n++])) != GRIB_SUCCESS)
+                return ret;
 
+    for(i = 0 ; i < n ; i++)
+        if(v[i] == GRIB_MISSING_LONG)
+            val[i] = GRIB_MISSING_DOUBLE;
+        else
+            val[i] = (double)v[i] / (double)sub_division * (double)basic_angle;
 
-  return GRIB_SUCCESS;
+    return GRIB_SUCCESS;
 }
 
 static long gcd(long a,long b)
 {
-  if(b>a)    return gcd(b,a);
-  if(b == 0) return a;
-  return gcd(b,a%b);
+    if(b>a)    return gcd(b,a);
+    if(b == 0) return a;
+    return gcd(b,a%b);
 }
 
 static long lcm(long a,long b)
 {
-  return a*b/gcd(a,b);
+    return a*b/gcd(a,b);
 }
 
-
 static int is_ok(const double* val,long v[6],double basic_angle,double sub_division)
 {
-  int i;
-  int ok = 1;
+    int i;
+    int ok = 1;
 
-  for(i = 0; i < 6 ; i++)
-  {
-    if(val[i] == GRIB_MISSING_DOUBLE)
-      v[i] = GRIB_MISSING_LONG;
-    else
+    for(i = 0; i < 6 ; i++)
     {
-      double d = (val[i] * sub_division) / basic_angle;
-      double e;
-      v[i]     = d;
-      e        = (v[i] * basic_angle) / sub_division ;
-
-      /* if(fabs(e - val[i]) >= 1e-6) */
-      if(fabs(e - val[i]) > 0)
-      {
-        /* printf("e=%g val=%g diff=%g\n",e,val[i],e-val[i]); */
-        ok = 0;
-      }
+        if(val[i] == GRIB_MISSING_DOUBLE)
+            v[i] = GRIB_MISSING_LONG;
+        else
+        {
+            double d = (val[i] * sub_division) / basic_angle;
+            double e;
+            d = round(d); /* GRIB-941 */
+            v[i]     = d;
+            e        = (v[i] * basic_angle) / sub_division ;
+
+            /* if(fabs(e - val[i]) >= 1e-6) */
+            if(fabs(e - val[i]) > 0)
+            {
+                /* printf("e=%g val=%g diff=%g\n",e,val[i],e-val[i]); */
+                ok = 0;
+            }
+        }
     }
-
-  }
-
-  return ok;
+    return ok;
 }
 
 static int trial(const double* val,long v[6],long* basic_angle,long* sub_division)
 {
-  int i = 0;
-  long ni, nj;
-
-  for(i = 0; i < 6 ; i++)
-    if(val[i] == GRIB_MISSING_DOUBLE)
-      return 0;
+    int i = 0;
+    long ni, nj;
 
-  if(val[4] == 0) return 0;
-  if(val[5] == 0) return 0;
+    for(i = 0; i < 6 ; i++)
+        if(val[i] == GRIB_MISSING_DOUBLE)
+            return 0;
 
+    if(val[4] == 0) return 0;
+    if(val[5] == 0) return 0;
 
-  ni = (long)(0.5+fabs((val[0] - val[2])/val[4])) + 1;
-  nj = (long)(0.5+fabs((val[1] - val[3])/val[5])) + 1;
+    ni = (long)(0.5+fabs((val[0] - val[2])/val[4])) + 1;
+    nj = (long)(0.5+fabs((val[1] - val[3])/val[5])) + 1;
 
-  *basic_angle  = 360;
-  *sub_division = lcm(ni,nj);
+    *basic_angle  = 360;
+    *sub_division = lcm(ni,nj);
 
 #if 0
-  printf("ni = %ld, nj = %ld , basic_angle=%ld sub_division = %ld\n",
-      ni,nj,
-      *basic_angle,*sub_division);
+    printf("ni = %ld, nj = %ld , basic_angle=%ld sub_division = %ld\n",
+            ni,nj,
+            *basic_angle,*sub_division);
 #endif
-  if(*sub_division < 0)
-    return 0;
+    if(*sub_division < 0)
+        return 0;
 
-  Assert(*sub_division >= 0);
-
-  return is_ok(val,v,*basic_angle,*sub_division);
+    Assert(*sub_division >= 0);
 
+    return is_ok(val,v,*basic_angle,*sub_division);
 }
 
 static int pack_double(grib_accessor* a, const double* val, size_t *len)
 {
-  grib_accessor_g2grid* self = (grib_accessor_g2grid*)a;
-  int ret;
-  long v[6];
-  int n;
-  long basic_angle;
-  long sub_division;
-
-  if(*len < 6){
-    ret = GRIB_ARRAY_TOO_SMALL;
-    return ret;
-  }
-
-  /* printf("pack_double %g %g %g %g %g %g\n",val[0],val[1],val[2],val[3],val[4],val[5]);*/
-
-  if(is_ok(val,v,1,1000000))
-  {
-    basic_angle = 1;
-    sub_division = 1000000;
-  }
-  else if(trial(val,v,&basic_angle,&sub_division))
-  {
-
-  }
-  else
-  {
-    basic_angle  = 1;
-    sub_division = 1000000;
-
-    if(!is_ok(val,v,basic_angle,sub_division))
-      grib_context_log(a->context,GRIB_LOG_DEBUG,"Grid cannot be coded with any loss of precision");
-  }
-
-  if(basic_angle == 1 && sub_division == 1000000)
-  {
-    basic_angle = 0;
-    sub_division = GRIB_MISSING_LONG;
-  }
-
-  if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->basic_angle,basic_angle)) != GRIB_SUCCESS)
-    return ret;
-
-  if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->sub_division,sub_division)) != GRIB_SUCCESS)
-    return ret;
-
-  n = 0;
-  if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->latitude_first,v[n++])) != GRIB_SUCCESS)
-    return ret;
-
-  if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->longitude_first,v[n++])) != GRIB_SUCCESS)
-    return ret;
-
-  if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->latitude_last,v[n++])) != GRIB_SUCCESS)
-    return ret;
-
-  if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->longitude_last,v[n++])) != GRIB_SUCCESS)
-    return ret;
-
-  if(!self->i_increment) n++;
-  else
-    if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->i_increment,v[n++])) != GRIB_SUCCESS)
-      return ret;
-
-  if(!self->j_increment) n++;
-  else
-    if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->j_increment,v[n++])) != GRIB_SUCCESS)
-      return ret;
-
-
-  return GRIB_SUCCESS;
-}
+    grib_accessor_g2grid* self = (grib_accessor_g2grid*)a;
+    int ret;
+    long v[6];
+    int n;
+    long basic_angle;
+    long sub_division;
+
+    if(*len < 6){
+        ret = GRIB_ARRAY_TOO_SMALL;
+        return ret;
+    }
+
+    /* printf("pack_double %g %g %g %g %g %g\n",val[0],val[1],val[2],val[3],val[4],val[5]);*/
+
+    if(is_ok(val,v,1,1000000))
+    {
+        basic_angle = 1;
+        sub_division = 1000000;
+    }
+    else if(trial(val,v,&basic_angle,&sub_division))
+    {
+
+    }
+    else
+    {
+        basic_angle  = 1;
+        sub_division = 1000000;
 
+        if(!is_ok(val,v,basic_angle,sub_division))
+            grib_context_log(a->context,GRIB_LOG_DEBUG,"Grid cannot be coded with any loss of precision");
+    }
+
+    if(basic_angle == 1 && sub_division == 1000000)
+    {
+        basic_angle = 0;
+        sub_division = GRIB_MISSING_LONG;
+    }
 
+    if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->basic_angle,basic_angle)) != GRIB_SUCCESS)
+        return ret;
+
+    if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->sub_division,sub_division)) != GRIB_SUCCESS)
+        return ret;
 
+    n = 0;
+    if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->latitude_first,v[n++])) != GRIB_SUCCESS)
+        return ret;
+
+    if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->longitude_first,v[n++])) != GRIB_SUCCESS)
+        return ret;
+
+    if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->latitude_last,v[n++])) != GRIB_SUCCESS)
+        return ret;
+
+    if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->longitude_last,v[n++])) != GRIB_SUCCESS)
+        return ret;
+
+    if(!self->i_increment) n++;
+    else
+        if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->i_increment,v[n++])) != GRIB_SUCCESS)
+            return ret;
+
+    if(!self->j_increment) n++;
+    else
+        if((ret = grib_set_long_internal(grib_handle_of_accessor(a), self->j_increment,v[n++])) != GRIB_SUCCESS)
+            return ret;
+
+    return GRIB_SUCCESS;
+}
diff --git a/src/grib_accessor_class_gen.c b/src/grib_accessor_class_gen.c
index e213fc8..6b87f52 100644
--- a/src/grib_accessor_class_gen.c
+++ b/src/grib_accessor_class_gen.c
@@ -139,7 +139,6 @@ static void init_class(grib_accessor_class* c)
 
 static void init(grib_accessor* a,const long len, grib_arguments* param)
 {
-
     grib_action* act=(grib_action*)(a->creator);
     if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) {
         a->length = 0;
@@ -149,7 +148,7 @@ static void init(grib_accessor* a,const long len, grib_arguments* param)
         a->vvalue->length=len;
         if (act->default_value!=NULL) {
             const char* p = 0;
-            size_t len = 1;
+            size_t s_len = 1;
             long l;
             int ret=0;
             double d;
@@ -159,23 +158,23 @@ static void init(grib_accessor* a,const long len, grib_arguments* param)
             switch(type) {
             case GRIB_TYPE_DOUBLE:
                 grib_expression_evaluate_double(grib_handle_of_accessor(a),expression,&d);
-                grib_pack_double(a,&d,&len);
+                grib_pack_double(a,&d,&s_len);
                 break;
 
             case GRIB_TYPE_LONG:
                 grib_expression_evaluate_long(grib_handle_of_accessor(a),expression,&l);
-                grib_pack_long(a,&l,&len);
+                grib_pack_long(a,&l,&s_len);
                 break;
 
             default:
-                len = sizeof(tmp);
-                p = grib_expression_evaluate_string(grib_handle_of_accessor(a),expression,tmp,&len,&ret);
+                s_len = sizeof(tmp);
+                p = grib_expression_evaluate_string(grib_handle_of_accessor(a),expression,tmp,&s_len,&ret);
                 if (ret != GRIB_SUCCESS) {
                     grib_context_log(a->context,GRIB_LOG_ERROR,"unable to evaluate %s as string",a->name);
                     Assert(0);
                 }
-                len = strlen(p)+1;
-                grib_pack_string(a,p,&len);
+                s_len = strlen(p)+1;
+                grib_pack_string(a,p,&s_len);
                 break;
             }
         }
@@ -186,21 +185,21 @@ static void init(grib_accessor* a,const long len, grib_arguments* param)
 
 static void dump(grib_accessor* a, grib_dumper* dumper)
 {
-  int type=grib_accessor_get_native_type(a);
+    int type=grib_accessor_get_native_type(a);
 
-  switch (type) {
+    switch (type) {
     case GRIB_TYPE_STRING:
         grib_dump_string(dumper,a,NULL);
-	    break;
+        break;
     case GRIB_TYPE_DOUBLE:
         grib_dump_double(dumper,a,NULL);
-	    break;
+        break;
     case GRIB_TYPE_LONG:
         grib_dump_long(dumper,a,NULL);
-	    break;
+        break;
     default:
         grib_dump_bytes(dumper,a,NULL);
-  }
+    }
 }
 
 static long next_offset(grib_accessor* a)
@@ -267,7 +266,8 @@ static int clear(grib_accessor* a)
     return GRIB_SUCCESS;
 }
 
-static int  unpack_long   (grib_accessor* a, long*  v, size_t *len){
+static int  unpack_long   (grib_accessor* a, long*  v, size_t *len)
+{
 
     if(a->cclass->unpack_double && a->cclass->unpack_double != &unpack_double)
     {
@@ -298,7 +298,8 @@ static int  unpack_long   (grib_accessor* a, long*  v, size_t *len){
     return GRIB_NOT_IMPLEMENTED;
 }
 
-static int unpack_double (grib_accessor* a, double*v, size_t *len){
+static int unpack_double (grib_accessor* a, double*v, size_t *len)
+{
 
     if(a->cclass->unpack_long && a->cclass->unpack_long != &unpack_long)
     {
@@ -329,7 +330,8 @@ static int unpack_double (grib_accessor* a, double*v, size_t *len){
     return GRIB_NOT_IMPLEMENTED;
 }
 
-static int unpack_string(grib_accessor*a , char*  v, size_t *len){
+static int unpack_string(grib_accessor*a , char*  v, size_t *len)
+{
 
     if(a->cclass->unpack_double && a->cclass->unpack_double != &unpack_double)
     {
@@ -356,20 +358,22 @@ static int unpack_string(grib_accessor*a , char*  v, size_t *len){
     return GRIB_NOT_IMPLEMENTED;
 }
 
-static int unpack_string_array(grib_accessor*a , char**  v, size_t *len){
-  int err=0;
-  size_t length=0;
+static int unpack_string_array(grib_accessor*a , char**  v, size_t *len)
+{
+    int err=0;
+    size_t length=0;
 
-  err= _grib_get_string_length(a,&length);
-  if (err) return err;
-  v[0]=(char*)grib_context_malloc_clear(a->context,length);
-  grib_unpack_string(a,v[0],&length);
-  *len=1;
+    err= _grib_get_string_length(a,&length);
+    if (err) return err;
+    v[0]=(char*)grib_context_malloc_clear(a->context,length);
+    grib_unpack_string(a,v[0],&length);
+    *len=1;
 
-  return err;
+    return err;
 }
 
-static int pack_expression(grib_accessor* a, grib_expression *e){
+static int pack_expression(grib_accessor* a, grib_expression *e)
+{
     size_t len = 1;
     long   lval;
     double   dval;
@@ -410,7 +414,8 @@ static int pack_expression(grib_accessor* a, grib_expression *e){
     return GRIB_NOT_IMPLEMENTED;
 }
 
-static int pack_long(grib_accessor* a, const long*  v, size_t *len){
+static int pack_long(grib_accessor* a, const long*  v, size_t *len)
+{
     grib_context* c=a->context;
     if(a->cclass->pack_double && a->cclass->pack_double != &pack_double)
     {
@@ -431,7 +436,8 @@ static int pack_long(grib_accessor* a, const long*  v, size_t *len){
     return GRIB_NOT_IMPLEMENTED;
 }
 
-static int pack_double(grib_accessor* a, const double *v, size_t *len){
+static int pack_double(grib_accessor* a, const double *v, size_t *len)
+{
     grib_context* c=a->context;
     if(a->cclass->pack_long && a->cclass->pack_long != &pack_long)
     {
@@ -451,8 +457,9 @@ static int pack_double(grib_accessor* a, const double *v, size_t *len){
     return GRIB_NOT_IMPLEMENTED;
 }
 
-static int pack_string_array(grib_accessor*a , const char**  v, size_t *len){
-	return GRIB_NOT_IMPLEMENTED;
+static int pack_string_array(grib_accessor*a , const char**  v, size_t *len)
+{
+    return GRIB_NOT_IMPLEMENTED;
 }
 
 static int pack_string(grib_accessor*a , const char*  v, size_t *len){
@@ -576,6 +583,6 @@ static int unpack_double_subarray(grib_accessor* a, double* val,size_t start,siz
 
 static grib_accessor* make_clone(grib_accessor* a,grib_section* s,int* err)
 {
-  *err=GRIB_NOT_IMPLEMENTED;
-  return NULL;
+    *err=GRIB_NOT_IMPLEMENTED;
+    return NULL;
 }
diff --git a/src/grib_accessor_class_latlon_increment.c b/src/grib_accessor_class_latlon_increment.c
index d3ee53a..32dc84f 100644
--- a/src/grib_accessor_class_latlon_increment.c
+++ b/src/grib_accessor_class_latlon_increment.c
@@ -148,68 +148,73 @@ static void init_class(grib_accessor_class* c)
 
 static void init(grib_accessor* a,const long l, grib_arguments* c)
 {
-  grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a;
-  int n = 0;
-
-  self->directionIncrementGiven = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->directionIncrement    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->scansPositively    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->first = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->last    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->numberOfPoints    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->angleMultiplier    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->angleDivisor   = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
-  self->isLongitude=grib_arguments_get_long(grib_handle_of_accessor(a), c,n++);
+    grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a;
+    int n = 0;
+
+    self->directionIncrementGiven = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->directionIncrement    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->scansPositively    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->first = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->last    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->numberOfPoints    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->angleMultiplier    = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->angleDivisor   = grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
+    self->isLongitude=grib_arguments_get_long(grib_handle_of_accessor(a), c,n++);
 }
 
 static int    unpack_double   (grib_accessor* a, double* val, size_t *len)
 {
-  grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a;
-  int ret = 0;
+    grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a;
+    int ret = 0;
 
-  long directionIncrementGiven=0;
-  long directionIncrement=0;
-  long angleDivisor=1;
-  long angleMultiplier=1;
-  double first = 0;
-  double last = 0;
-  long numberOfPoints = 0;
-  long scansPositively = 0;
+    long directionIncrementGiven=0;
+    long directionIncrement=0;
+    long angleDivisor=1;
+    long angleMultiplier=1;
+    double first = 0;
+    double last = 0;
+    long numberOfPoints = 0;
+    long scansPositively = 0;
 
-  if(*len < 1) return GRIB_ARRAY_TOO_SMALL;
+    if(*len < 1) return GRIB_ARRAY_TOO_SMALL;
 
     if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,&directionIncrementGiven)) != GRIB_SUCCESS)
-    return ret;
+        return ret;
 
     if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->scansPositively,&scansPositively)) != GRIB_SUCCESS)
-    return ret;
+        return ret;
 
     if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrement,&directionIncrement)) != GRIB_SUCCESS)
-    return ret;
+        return ret;
 
-  if((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first,&first)) != GRIB_SUCCESS)
-    return ret;
+    if((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first,&first)) != GRIB_SUCCESS)
+        return ret;
 
-  if((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last,&last)) != GRIB_SUCCESS)
-    return ret;
+    if((ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last,&last)) != GRIB_SUCCESS)
+        return ret;
 
     if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&numberOfPoints)) != GRIB_SUCCESS)
-    return ret;
+        return ret;
 
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleMultiplier,&angleMultiplier)) != GRIB_SUCCESS)
-    return ret;
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleMultiplier,&angleMultiplier)) != GRIB_SUCCESS)
+        return ret;
 
     if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleDivisor,&angleDivisor)) != GRIB_SUCCESS)
-    return ret;
+        return ret;
 
-  if (self->isLongitude) {
-    if (last < first && scansPositively) last+=360;
+    if (self->isLongitude) {
+        if (last < first && scansPositively) last+=360;
         /*if (last > first && !scansPositively) first-=360;*/
-  }
+    }
 
     if (!directionIncrementGiven && numberOfPoints != GRIB_MISSING_LONG)
     {
-        Assert(numberOfPoints>1);
+        if (numberOfPoints<2) {
+            /* We cannot compute the increment if we don't have enough points! */
+            grib_context_log(a->parent->h->context, GRIB_LOG_ERROR,
+                    "Cannot compute lat/lon increments. Not enough points!");
+            return GRIB_GEOCALCULUS_PROBLEM;
+        }
         if (!scansPositively) { /* scans negatively */
             if (first > last){
                 *val=(first-last)/(numberOfPoints-1);
@@ -231,16 +236,16 @@ static int    unpack_double   (grib_accessor* a, double* val, size_t *len)
     }
     else if (numberOfPoints == GRIB_MISSING_LONG)
     {
-    *val = GRIB_MISSING_DOUBLE;
+        *val = GRIB_MISSING_DOUBLE;
     }
     else
     {
-    Assert(angleDivisor!=0);
-    *val = (double)directionIncrement/angleDivisor*angleMultiplier;
-  }
+        Assert(angleDivisor!=0);
+        *val = (double)directionIncrement/angleDivisor*angleMultiplier;
+    }
 
 #if 0
-  printf("unpack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld %s=%f\n",
+    printf("unpack -- %s=%ld %s=%ld %s=%f %s=%f %s=%ld %s=%f\n",
             self->directionIncrementGiven,directionIncrementGiven,
             self->directionIncrement,directionIncrement,
             self->last,last,
@@ -248,82 +253,82 @@ static int    unpack_double   (grib_accessor* a, double* val, size_t *len)
             self->numberOfPoints,numberOfPoints,
             a->name,*val);
 #endif
-  if (ret == GRIB_SUCCESS) *len = 1;
+    if (ret == GRIB_SUCCESS) *len = 1;
 
-  return ret;
+    return ret;
 }
 
 static int pack_double(grib_accessor* a, const double* val, size_t *len)
 {
-  grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a;
-  int ret = 0;
-  long codedNumberOfPoints=0;
-
-  long directionIncrementGiven=0;
-  long directionIncrement=0;
-  long angleDivisor=1;
-  long angleMultiplier=1;
-  double first = 0;
-  double last = 0;
-  long numberOfPoints = 0;
-  /* long numberOfPointsInternal = 0; */
-  long scansPositively = 0;
-  double directionIncrementDouble=0;
-
-  ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first,&first);
-  if(ret != GRIB_SUCCESS) return ret;
-  
-  ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last,&last);
-  if(ret != GRIB_SUCCESS) return ret;
-
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,&directionIncrementGiven))
-          != GRIB_SUCCESS) return ret;
-
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&numberOfPoints)) != GRIB_SUCCESS) return ret;
-
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->scansPositively,&scansPositively))
-          != GRIB_SUCCESS) return ret;
-
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleMultiplier,&angleMultiplier)) != GRIB_SUCCESS) return ret;
-
-  if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleDivisor,&angleDivisor)) != GRIB_SUCCESS) return ret;
-
-  if (self->isLongitude) {
-    if (last < first && scansPositively) last+=360;
-    if (last > first && !scansPositively) first-=360;
-  }
-
-  if (*val == GRIB_MISSING_DOUBLE) {
-    directionIncrement=GRIB_MISSING_LONG;
-    directionIncrementGiven=1;
-    numberOfPoints=GRIB_MISSING_LONG;
-  } else {
-    /* numberOfPointsInternal = 1+rint(fabs((last-first) / *val)); */
-
-    directionIncrementDouble = rint (*val * (double)angleDivisor / (double)angleMultiplier);
-
-	directionIncrement=(long)directionIncrementDouble;
-    if (directionIncrement == 0 ) {
-      directionIncrement=GRIB_MISSING_LONG;
-      directionIncrementGiven=0;
+    grib_accessor_latlon_increment* self = (grib_accessor_latlon_increment*)a;
+    int ret = 0;
+    long codedNumberOfPoints=0;
+
+    long directionIncrementGiven=0;
+    long directionIncrement=0;
+    long angleDivisor=1;
+    long angleMultiplier=1;
+    double first = 0;
+    double last = 0;
+    long numberOfPoints = 0;
+    /* long numberOfPointsInternal = 0; */
+    long scansPositively = 0;
+    double directionIncrementDouble=0;
+
+    ret = grib_get_double_internal(grib_handle_of_accessor(a), self->first,&first);
+    if(ret != GRIB_SUCCESS) return ret;
+
+    ret = grib_get_double_internal(grib_handle_of_accessor(a), self->last,&last);
+    if(ret != GRIB_SUCCESS) return ret;
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,&directionIncrementGiven))
+            != GRIB_SUCCESS) return ret;
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&numberOfPoints)) != GRIB_SUCCESS) return ret;
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->scansPositively,&scansPositively))
+            != GRIB_SUCCESS) return ret;
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleMultiplier,&angleMultiplier)) != GRIB_SUCCESS) return ret;
+
+    if((ret = grib_get_long_internal(grib_handle_of_accessor(a), self->angleDivisor,&angleDivisor)) != GRIB_SUCCESS) return ret;
+
+    if (self->isLongitude) {
+        if (last < first && scansPositively) last+=360;
+        if (last > first && !scansPositively) first-=360;
     }
-  }
 
-  /*ret = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,numberOfPoints);
+    if (*val == GRIB_MISSING_DOUBLE) {
+        directionIncrement=GRIB_MISSING_LONG;
+        directionIncrementGiven=1;
+        numberOfPoints=GRIB_MISSING_LONG;
+    } else {
+        /* numberOfPointsInternal = 1+rint(fabs((last-first) / *val)); */
+
+        directionIncrementDouble = rint (*val * (double)angleDivisor / (double)angleMultiplier);
+
+        directionIncrement=(long)directionIncrementDouble;
+        if (directionIncrement == 0 ) {
+            directionIncrement=GRIB_MISSING_LONG;
+            directionIncrementGiven=0;
+        }
+    }
+
+    /*ret = grib_set_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,numberOfPoints);
   if(ret )
      grib_context_log(a->context, GRIB_LOG_ERROR, "Accessor %s cannot pack value for %s error %d \n", a->name, self->numberOfPoints, ret);
-    */
+     */
 
-  grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&codedNumberOfPoints);
+    grib_get_long_internal(grib_handle_of_accessor(a), self->numberOfPoints,&codedNumberOfPoints);
 
-  ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrement,directionIncrement);
-  if(ret ) return ret;
+    ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrement,directionIncrement);
+    if(ret ) return ret;
 
-  ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,directionIncrementGiven);
-  if(ret )return ret;
+    ret = grib_set_long_internal(grib_handle_of_accessor(a), self->directionIncrementGiven,directionIncrementGiven);
+    if(ret )return ret;
 
 #if 0
-  printf("pack -- %s=%ld %s=%ld \n ------- %s=%f %s=%f \n ------- %s=%ld codedNumberOfPoints=%ld %s=%f\n",
+    printf("pack -- %s=%ld %s=%ld \n ------- %s=%f %s=%f \n ------- %s=%ld codedNumberOfPoints=%ld %s=%f\n",
             self->directionIncrementGiven,directionIncrementGiven,
             self->directionIncrement,directionIncrement,
             self->last,last,
@@ -332,17 +337,17 @@ static int pack_double(grib_accessor* a, const double* val, size_t *len)
             codedNumberOfPoints,
             a->name,*val);
 #endif
-  if (ret == GRIB_SUCCESS) *len = 1;
+    if (ret == GRIB_SUCCESS) *len = 1;
 
-  return ret;
+    return ret;
 }
 
 static int is_missing(grib_accessor* a){
 
-  size_t len=1;
-  double val=0;
+    size_t len=1;
+    double val=0;
 
-  unpack_double(a, &val, &len);
+    unpack_double(a, &val, &len);
 
-  return (val == GRIB_MISSING_DOUBLE);
+    return (val == GRIB_MISSING_DOUBLE);
 }
diff --git a/src/grib_accessor_class_long.c b/src/grib_accessor_class_long.c
index e233cea..0f1899f 100644
--- a/src/grib_accessor_class_long.c
+++ b/src/grib_accessor_class_long.c
@@ -131,55 +131,55 @@ static void init_class(grib_accessor_class* c)
 
 
 
-static int  get_native_type(grib_accessor* a){
-  return GRIB_TYPE_LONG;
+static int  get_native_type(grib_accessor* a)
+{
+    return GRIB_TYPE_LONG;
 }
 
 static void dump(grib_accessor* a,grib_dumper* dumper)
 {
-  grib_dump_long(dumper,a,NULL);
+    grib_dump_long(dumper,a,NULL);
 }
 
+static int unpack_string(grib_accessor*a , char*  v, size_t *len)
+{
+    long val = 0;
+    size_t l = 1;
+    char repres[1024];
 
+    grib_unpack_long (a , &val, &l);
 
-static int unpack_string(grib_accessor*a , char*  v, size_t *len){
-
-  long val = 0;
-  size_t l = 1;
-  char repres[1024];
-
-  grib_unpack_long (a , &val, &l);
+    if ((val == GRIB_MISSING_LONG) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) )
+        sprintf(repres,"MISSING");
+    else
+        sprintf(repres,"%ld", val);
 
-  if ((val == GRIB_MISSING_LONG) && ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) )
-    sprintf(repres,"MISSING");
-  else
-    sprintf(repres,"%ld", val);
+    l = strlen(repres)+1;
 
-  l = strlen(repres)+1;
+    if(l >*len ){
+        grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_long : unpack_string : Buffer too small for %s ", a->name );
 
-  if(l >*len ){
-    grib_context_log(a->context, GRIB_LOG_ERROR, "grib_accessor_long : unpack_string : Buffer too small for %s ", a->name );
+        *len = l;
+        return GRIB_BUFFER_TOO_SMALL;
+    }
+    grib_context_log(a->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting long %s to string ", a->name);
 
     *len = l;
-    return GRIB_BUFFER_TOO_SMALL;
-  }
-  grib_context_log(a->context,GRIB_LOG_DEBUG, "grib_accessor_long: Casting long %s to string ", a->name);
-
-  *len = l;
-
-  strcpy(v,repres);
-  return GRIB_SUCCESS;
 
+    strcpy(v,repres);
+    return GRIB_SUCCESS;
 }
-static int pack_missing(grib_accessor* a){
 
-  size_t one = 1;
-  long value = GRIB_MISSING_LONG;
+static int pack_missing(grib_accessor* a)
+{
 
-  if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING)
-    return grib_pack_long(a,&value,&one);
+    size_t one = 1;
+    long value = GRIB_MISSING_LONG;
 
-  return GRIB_VALUE_CANNOT_BE_MISSING;
+    if(a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING)
+        return grib_pack_long(a,&value,&one);
+
+    return GRIB_VALUE_CANNOT_BE_MISSING;
 }
 
 
@@ -199,99 +199,100 @@ static int is_missing(grib_accessor* a){
 
   return 0;
 }
-*/
-
-static int unpack_double(grib_accessor* a, double* val,size_t *len){
-  size_t rlen = 0;
-  long count=0;
-  unsigned long i = 0;
-  long   *values = NULL;
-  long   oneval = 0;
-  int ret = GRIB_SUCCESS;
-
-  ret=grib_value_count(a,&count);
-  if (ret) return ret;
-  rlen=count;
-
-  if(*len < rlen)
-  {
-    grib_context_log(a->context, GRIB_LOG_ERROR, " wrong size for %s it contains %d values ", a->name , rlen);
-    *len = 0;
-    return GRIB_ARRAY_TOO_SMALL;
-  }
-
-  if(rlen == 1){
-    ret = grib_unpack_long(a,&oneval,&rlen);
-    if(ret != GRIB_SUCCESS) return ret;
-    *val =  oneval;
-    *len = 1;
-    return GRIB_SUCCESS;
-  }
-
-  values = (long*)grib_context_malloc(a->context,rlen*sizeof(long));
-  if(!values) return GRIB_INTERNAL_ERROR;
+ */
 
+static int unpack_double(grib_accessor* a, double* val,size_t *len)
+{
+    size_t rlen = 0;
+    long count=0;
+    unsigned long i = 0;
+    long   *values = NULL;
+    long   oneval = 0;
+    int ret = GRIB_SUCCESS;
+
+    ret=grib_value_count(a,&count);
+    if (ret) return ret;
+    rlen=count;
+
+    if(*len < rlen)
+    {
+        grib_context_log(a->context, GRIB_LOG_ERROR, " wrong size for %s it contains %d values ", a->name , rlen);
+        *len = 0;
+        return GRIB_ARRAY_TOO_SMALL;
+    }
+
+    if(rlen == 1){
+        ret = grib_unpack_long(a,&oneval,&rlen);
+        if(ret != GRIB_SUCCESS) return ret;
+        *val =  oneval;
+        *len = 1;
+        return GRIB_SUCCESS;
+    }
+
+    values = (long*)grib_context_malloc(a->context,rlen*sizeof(long));
+    if(!values) return GRIB_INTERNAL_ERROR;
+
+
+    ret = grib_unpack_long(a,values,&rlen);
+    if(ret != GRIB_SUCCESS){
+        grib_context_free(a->context,values);
+        return ret;
+    }
+    for(i=0; i< rlen;i++)
+        val[i] = values[i];
 
-  ret = grib_unpack_long(a,values,&rlen);
-  if(ret != GRIB_SUCCESS){
     grib_context_free(a->context,values);
-    return ret;
-  }
-  for(i=0; i< rlen;i++)
-    val[i] = values[i];
 
-  grib_context_free(a->context,values);
-
-  *len = rlen;
-  return GRIB_SUCCESS;
+    *len = rlen;
+    return GRIB_SUCCESS;
 }
 
-static int compare(grib_accessor* a,grib_accessor* b) {
-  int retval=0;
-  long *aval=0;
-  long *bval=0;
-  long count=0;
+static int compare(grib_accessor* a,grib_accessor* b)
+{
+    int retval=0;
+    long *aval=0;
+    long *bval=0;
+    long count=0;
 
-  size_t alen = 0;
-  size_t blen = 0;
-  int err=0;
+    size_t alen = 0;
+    size_t blen = 0;
+    int err=0;
 
-  err=grib_value_count(a,&count);
-  if (err) return err;
-  alen=count;
+    err=grib_value_count(a,&count);
+    if (err) return err;
+    alen=count;
 
-  err=grib_value_count(b,&count);
-  if (err) return err;
-  blen=count;
+    err=grib_value_count(b,&count);
+    if (err) return err;
+    blen=count;
 
-  if (alen != blen) return GRIB_COUNT_MISMATCH;
+    if (alen != blen) return GRIB_COUNT_MISMATCH;
 
-  aval=(long*)grib_context_malloc(a->context,alen*sizeof(long));
-  bval=(long*)grib_context_malloc(b->context,blen*sizeof(long));
+    aval=(long*)grib_context_malloc(a->context,alen*sizeof(long));
+    bval=(long*)grib_context_malloc(b->context,blen*sizeof(long));
 
-  grib_unpack_long(a,aval,&alen);
-  grib_unpack_long(b,bval,&blen);
+    grib_unpack_long(a,aval,&alen);
+    grib_unpack_long(b,bval,&blen);
 
-  retval = GRIB_SUCCESS;
-  while (alen != 0) {
-    if (*bval != *aval) retval = GRIB_LONG_VALUE_MISMATCH;
-    alen--;
-  }
+    retval = GRIB_SUCCESS;
+    while (alen != 0) {
+        if (*bval != *aval) retval = GRIB_LONG_VALUE_MISMATCH;
+        alen--;
+    }
 
-  grib_context_free(a->context,aval);
-  grib_context_free(b->context,bval);
+    grib_context_free(a->context,aval);
+    grib_context_free(b->context,bval);
 
-  return retval;
+    return retval;
 }
 
 static int pack_string(grib_accessor* a, const char* val, size_t *len)
 {
-  char* theEnd=NULL;
-  long v=strtol(val,&theEnd,10);
-  if (theEnd) {
-    grib_context_log(a->context,GRIB_LOG_ERROR,"trying to pack \"%s\" as long",val);
-    return GRIB_WRONG_TYPE;
-  }
-  return grib_pack_long( a,&v,len);
+    char* theEnd=NULL;
+    long v=strtol(val,&theEnd,10);
+    if (theEnd) {
+        grib_context_log(a->context,GRIB_LOG_ERROR,"trying to pack \"%s\" as long",val);
+        return GRIB_WRONG_TYPE;
+    }
+    return grib_pack_long( a,&v,len);
 }
-
diff --git a/src/grib_accessor_class_lookup.c b/src/grib_accessor_class_lookup.c
index 33ee573..79585b2 100644
--- a/src/grib_accessor_class_lookup.c
+++ b/src/grib_accessor_class_lookup.c
@@ -179,7 +179,7 @@ static void dump(grib_accessor* a,grib_dumper* dumper)
 
   msg[llen] = 0;
 
-  sprintf(buf,"%s %ld %ld-%ld",msg,v,(long)a->offset+self->loffset,(long)self->llength);
+  sprintf(buf,"%s %lu %ld-%ld", msg, v, (long)a->offset+self->loffset, (long)self->llength);
 
   grib_dump_long(dumper,a,buf);
 
diff --git a/src/grib_accessor_class_signed_bits.c b/src/grib_accessor_class_signed_bits.c
index 1ecc50d..57f0b21 100644
--- a/src/grib_accessor_class_signed_bits.c
+++ b/src/grib_accessor_class_signed_bits.c
@@ -179,7 +179,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper)
     grib_dump_long(dumper,a,NULL);
 }
 
-static int    unpack_long   (grib_accessor* a, long* val, size_t *len)
+static int unpack_long(grib_accessor* a, long* val, size_t *len)
 {
     grib_accessor_signed_bits* self = (grib_accessor_signed_bits*)a;
     int i;
@@ -203,7 +203,6 @@ static int    unpack_long   (grib_accessor* a, long* val, size_t *len)
     if (ret) return ret;
 
     if (numberOfBits==0) {
-        int i;
         for (i=0;i<rlen;i++) val[i]=0;
         return GRIB_SUCCESS;
     }
@@ -216,7 +215,7 @@ static int    unpack_long   (grib_accessor* a, long* val, size_t *len)
     return GRIB_SUCCESS;
 }
 
-static int    pack_long   (grib_accessor* a, const long* val, size_t *len)
+static int pack_long(grib_accessor* a, const long* val, size_t *len)
 {
     grib_accessor_signed_bits* self = (grib_accessor_signed_bits*)a;
     int ret = 0;
diff --git a/src/grib_accessor_class_smart_table.c b/src/grib_accessor_class_smart_table.c
index 2443aa8..d9be686 100644
--- a/src/grib_accessor_class_smart_table.c
+++ b/src/grib_accessor_class_smart_table.c
@@ -165,13 +165,11 @@ static pthread_once_t once  = PTHREAD_ONCE_INIT;
 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void thread_init() {
-  pthread_mutexattr_t attr;
-
-  pthread_mutexattr_init(&attr);
-  pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
-  pthread_mutex_init(&mutex,&attr);
-  pthread_mutexattr_destroy(&attr);
-
+    pthread_mutexattr_t attr;
+    pthread_mutexattr_init(&attr);
+    pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
+    pthread_mutex_init(&mutex,&attr);
+    pthread_mutexattr_destroy(&attr);
 }
 #elif GRIB_OMP_THREADS
 static int once = 0;
@@ -191,7 +189,7 @@ static void thread_init()
 #endif
 
 static int grib_load_smart_table(grib_context* c,const char* filename,
-           const char* recomposed_name,size_t size,grib_smart_table* t); 
+           const char* recomposed_name,size_t size,grib_smart_table* t);
 
 static void init(grib_accessor* a, const long len, grib_arguments* params) {
   int n=0;
@@ -313,7 +311,7 @@ static int grib_load_smart_table(grib_context* c,const char* filename,
 
   grib_context_log(c,GRIB_LOG_DEBUG,"Loading code table form %s",filename);
 
-  f=fopen(filename, "r");
+  f=codes_fopen(filename, "r");
   if (!f) return GRIB_IO_PROBLEM;
 
   Assert(t!=NULL);
diff --git a/src/grib_accessor_class_validity_time.c b/src/grib_accessor_class_validity_time.c
index ad2ebec..6159497 100644
--- a/src/grib_accessor_class_validity_time.c
+++ b/src/grib_accessor_class_validity_time.c
@@ -205,7 +205,6 @@ static int unpack_long(grib_accessor* a, long* val, size_t *len)
     long hours = 0, minutes=0, step_mins=0, tmp, tmp_hrs, tmp_mins;
 
     if (self->hours) {
-        long hours,minutes;
         if ((ret=grib_get_long_internal(grib_handle_of_accessor(a), self->hours,&hours))!=GRIB_SUCCESS) return ret;
         if ((ret=grib_get_long_internal(grib_handle_of_accessor(a), self->minutes,&minutes))!=GRIB_SUCCESS) return ret;
         *val=hours*100+minutes;
diff --git a/src/grib_api.h b/src/grib_api.h
index 999e846..4b57a59 100644
--- a/src/grib_api.h
+++ b/src/grib_api.h
@@ -438,12 +438,13 @@ grib_string_list* grib_util_get_mars_param(const char* param_id);
 * @param data_len    : the length of the message in number of bytes
 * @return            the new handle, NULL if the message is invalid or a problem is encountered
 */
-grib_handle* grib_handle_new_from_message(grib_context* c, void* data, size_t data_len);
+grib_handle* grib_handle_new_from_message(grib_context* c, const void* data, size_t data_len);
 
 /**
 *  Create a handle from a user message in memory. The message will not be freed at the end.
 *  The message will be copied as soon as a modification is needed.
 *  This function works also with multi field messages.
+*  Note: The data pointer argument may be modified
 *
 * @param c           : the context from which the handle will be created (NULL for default context)
 * @param data        : the actual message
@@ -1001,9 +1002,9 @@ typedef void  (*grib_print_proc)    (const grib_context* c, void* descriptor, co
 * Grib data read proc, format of a procedure referenced in the context that is used to read from a stream in a resource
 *
 * @param c             : the context where the read will apply
-* @param *ptr          : the resource
+* @param ptr          : the resource
 * @param size          : size to read
-* @param *stream       : the stream
+* @param stream       : the stream
 * @return              size read
 */
 typedef size_t  (*grib_data_read_proc) (const grib_context* c,void *ptr, size_t size, void *stream);
@@ -1012,9 +1013,9 @@ typedef size_t  (*grib_data_read_proc) (const grib_context* c,void *ptr, size_t
 * Grib data read write, format of a procedure referenced in the context that is used to write to a stream from a resource
 *
 * @param c             : the context where the write will apply
-* @param *ptr          : the resource
+* @param ptr          : the resource
 * @param size          : size to read
-* @param *stream       : the stream
+* @param stream       : the stream
 * @return              size written
 */
 typedef size_t  (*grib_data_write_proc)(const grib_context* c,const void *ptr, size_t size,  void *stream);
@@ -1023,7 +1024,7 @@ typedef size_t  (*grib_data_write_proc)(const grib_context* c,const void *ptr, s
 * Grib data tell, format of a procedure referenced in the context that is used to tell the current position in a stream
 *
 * @param c             : the context where the tell will apply
-* @param *stream       : the stream
+* @param stream       : the stream
 * @return              the position in the stream
 */
 typedef off_t    (*grib_data_tell_proc) (const grib_context* c, void *stream);
@@ -1036,7 +1037,7 @@ typedef off_t    (*grib_data_tell_proc) (const grib_context* c, void *stream);
 * @param whence        : If whence is set to SEEK_SET, SEEK_CUR, or SEEK_END,
                          the offset  is  relative  to  the start of the file,
              the current position indicator, or end-of-file, respectively.
-* @param *stream       : the stream
+* @param stream       : the stream
 * @return            0 if OK, integer value on error
 */
 typedef off_t    (*grib_data_seek_proc) (const grib_context* c, off_t offset, int whence, void *stream);
@@ -1045,7 +1046,7 @@ typedef off_t    (*grib_data_seek_proc) (const grib_context* c, off_t offset, in
 * Grib data eof, format of a procedure referenced in the context that is used to test end of file
 *
 * @param c             : the context where the tell will apply
-* @param *stream       : the stream
+* @param stream       : the stream
 * @return              the position in the stream
 */
 typedef int    (*grib_data_eof_proc) (const grib_context* c, void *stream);
@@ -1062,7 +1063,7 @@ grib_context*    grib_context_get_default(void);
 *
 * @param c           : the context to be deleted
 */
-void             grib_context_delete                     (grib_context* c);
+void             grib_context_delete(grib_context* c);
 
 /**
 *  Set the GTS header mode on.
@@ -1104,6 +1105,22 @@ int grib_get_gribex_mode ( grib_context* c);
 void grib_gribex_mode_off(grib_context* c);
 
 /**
+ * Sets the search path for definition files.
+ *
+ * @param c      : the context to be modified
+ * @param path   : the search path for definition files
+ */
+void grib_context_set_definitions_path(grib_context* c, const char* path);
+
+/**
+ * Sets the search path for sample files.
+ *
+ * @param c      : the context to be modified
+ * @param path   : the search path for sample files
+ */
+void grib_context_set_samples_path(grib_context* c, const char* path);
+
+/**
 *  Sets memory procedures of the context
 *
 * @param c           : the context to be modified
@@ -1174,6 +1191,7 @@ void grib_multi_support_off(grib_context* c);
 void grib_multi_support_reset_file(grib_context* c, FILE* f);
 
 char* grib_samples_path(const grib_context *c);
+char* grib_definition_path(const grib_context *c);
 /*! @} */
 
 /**
diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h
index ff52db4..3d40116 100644
--- a/src/grib_api_internal.h
+++ b/src/grib_api_internal.h
@@ -191,7 +191,7 @@ extern "C" {
 #include "grib_api.h"
 
 #define GRIB_UNKNOWN_VALUE   -9999.999
-#define GRIB_KEY_UNDEF	"undef"
+#define GRIB_KEY_UNDEF "undef"
 
 #define GRIB_HANDLE_BIG_ECMWF_GRIB1    1
 
@@ -250,7 +250,7 @@ typedef               struct     grib_action_class       grib_action_class;
 typedef               struct     grib_section            grib_section;
 typedef               struct     grib_packer             grib_packer;
 typedef               struct     grib_codetable          grib_codetable;
-typedef               struct     grib_smart_table          grib_smart_table;
+typedef               struct     grib_smart_table        grib_smart_table;
 
 typedef               struct     grib_accessor           grib_accessor;
 typedef               struct     grib_iterator_class     grib_iterator_class;
@@ -349,28 +349,28 @@ typedef  void  grib_expression_visit_proc                (void* udata, grib_expr
 
 
 struct grib_key_value_list {
-  const char* name;
-  int         type;
-  int         size;
-  long*       long_value;
-  double*     double_value;
-  grib_key_value_list* namespace_value;
-  char* string_value;
-  int         has_value;
-  int         error;
-  grib_key_value_list* next;
-} ;
+    const char* name;
+    int         type;
+    int         size;
+    long*       long_value;
+    double*     double_value;
+    grib_key_value_list* namespace_value;
+    char* string_value;
+    int         has_value;
+    int         error;
+    grib_key_value_list* next;
+};
 
 
 struct second_order_packed {
-  unsigned long nbits_per_widths;
-  unsigned long nbits_per_group_size;
-  size_t size_of_group_array;
-  size_t packed_byte_count;
-  unsigned long *array_of_group_size;
-  unsigned long *array_of_group_width;
-   long *array_of_group_refs;
-} ;
+    unsigned long  nbits_per_widths;
+    unsigned long  nbits_per_group_size;
+    size_t         size_of_group_array;
+    size_t         packed_byte_count;
+    unsigned long* array_of_group_size;
+    unsigned long* array_of_group_width;
+    long*          array_of_group_refs;
+};
 
 /**
 *  an grib_compression
@@ -379,7 +379,7 @@ struct second_order_packed {
 *  @see  grib_action_create_data
 */
 struct grib_packer {
-    const char* name;
+    const char*      name;
     grib_pack_proc   pack;     /** <  packing procedure                    */
     grib_unpack_proc unpack;   /** < unpacking procedure                    */
 };
@@ -392,11 +392,11 @@ typedef int (*grib_loader_init_accessor_proc)(grib_loader*,grib_accessor*,grib_a
 typedef int (*grib_loader_lookup_long_proc) (grib_context*,grib_loader*,const char* name, long* value);
 
 struct grib_loader {
-  void                          *data;
-  grib_loader_init_accessor_proc init_accessor;
-  grib_loader_lookup_long_proc   lookup_long;
-  int                            list_is_resized; /** will be true if we resize a list */
-  int  changing_edition;
+    void*                          data;
+    grib_loader_init_accessor_proc init_accessor;
+    grib_loader_lookup_long_proc   lookup_long;
+    int                            list_is_resized; /** will be true if we resize a list */
+    int                            changing_edition;
 };
 
 /**
@@ -407,35 +407,36 @@ struct grib_loader {
 */
 struct grib_action
 {
-    char                     *name;   /**  name of the definition statement            */
-    char                     *op;     /**  operator of the definition statement        */
-    char                     *name_space;   /**  namspace of the definition statement  */
-    grib_action              *next;   /**  next action in the list                     */
-    grib_action_class        *cclass; /**  link to the structure containing a specific behavior */
-    grib_context             *context;/**  Context                                     */
-    unsigned long            flags;
-    char                    *defaultkey; /** name of the key used as default if not found  */
-	grib_arguments*         default_value; /** default expression as in .def file */
-	char*					set;
-    /* If you had something, don't forget to update grib_action_compile */
+    char*               name;       /**  name of the definition statement */
+    char*               op;         /**  operator of the definition statement */
+    char*               name_space; /**  namespace of the definition statement */
+    grib_action*        next;       /**  next action in the list */
+    grib_action_class*  cclass;     /**  link to the structure containing a specific behaviour */
+    grib_context*       context;    /**  Context */
+    unsigned long       flags;
+    char*               defaultkey;   /** name of the key used as default if not found */
+    grib_arguments*     default_value; /** default expression as in .def file */
+    char*               set;
+    char*               debug_info;   /** purely for debugging and tracing */
+    /* If you add something, don't forget to update grib_action_compile */
 };
 
 typedef struct grib_accessors_list grib_accessors_list;
 
 struct grib_accessors_list {
-	grib_accessor* accessor;
-	grib_accessors_list* next;
-	grib_accessors_list* prev;
-  grib_accessors_list* last;
+    grib_accessor*       accessor;
+    grib_accessors_list* next;
+    grib_accessors_list* prev;
+    grib_accessors_list* last;
 };
 
 /* compile */
 
 typedef struct grib_compiler {
-    int   cnt;
-    int   max;
-    FILE *out;
-    const char *var;
+    int         cnt;
+    int         max;
+    FILE*       out;
+    const char* var;
 } grib_compiler;
 
 
@@ -454,41 +455,38 @@ typedef  int  (*action_execute_proc)              (grib_action* a,grib_handle*);
 
 /**
 *  an action_class
-*  Structure supporting the specific behavior of an action
+*  Structure supporting the specific behaviour of an action
 *
 *  @see  grib_action
 */
 struct grib_action_class
 {
-    grib_action_class          **super; /** < link to a more general behavior                         */
-    const char*                name;    /** < name of the behavior class                              */
-    size_t                     size;    /** < size in bytes of the structure                          */
+    grib_action_class**        super; /** < link to a more general behaviour */
+    const char*                name;    /** < name of the behaviour class */
+    size_t                     size;    /** < size in bytes of the structure */
 
-  int                        inited;
-  action_init_class_proc     init_class;
+    int                        inited;
+    action_init_class_proc     init_class;
 
     action_init_proc           init;
-    action_destroy_proc        destroy;
-                                        /** < destructor method to realease the memory    */
+    action_destroy_proc        destroy; /** < destructor method to release the memory */
 
-    grib_dump_proc             dump;    /** < dump method of the action                               */
-    grib_xref_proc             xref;    /** < dump method of the action                               */
-    action_create_accessors_handle_proc       create_accessor;
-                                        /** < method to create the corresponding accessor from a handle*/
-    action_notify_change_proc                      notify_change;
-                                        /** < method to create the corresponding accessor from a handle*/
+    grib_dump_proc             dump;    /** < dump method of the action  */
+    grib_xref_proc             xref;    /** < dump method of the action  */
+    action_create_accessors_handle_proc  create_accessor; /** < method to create the corresponding accessor from a handle*/
+    action_notify_change_proc            notify_change; /** < method to create the corresponding accessor from a handle*/
 
-  action_reparse_proc              reparse;
-  action_execute_proc              execute;
+    action_reparse_proc       reparse;
+    action_execute_proc       execute;
 
-    grib_compile_proc             compile;    /** < compile method of the action                               */
+    grib_compile_proc         compile;    /** < compile method of the action */
 };
 
 
 
 /**
 *  a buffer
-*  Structure containing the datas of a Grib
+*  Structure containing the data of a message
 */
 struct grib_buffer
 {
@@ -522,31 +520,31 @@ struct grib_virtual_value {
 
 struct grib_accessor
 {
-  const char             *name  ;     /** < name of the accessor                       */
-  const char*             name_space;  /** < namespace to which the accessor belongs    */
+  const char*            name  ;     /** < name of the accessor                       */
+  const char*            name_space;  /** < namespace to which the accessor belongs    */
   grib_context*          context;
   grib_handle*           h;
-  grib_action            *creator  ;  /** < action that created the accessor           */
+  grib_action*           creator  ;  /** < action that created the accessor           */
   long                   length ;     /** < byte length of the accessor                */
   long                   offset ;     /** < offset of the data in the buffer           */
-  grib_section           *parent;     /** < section to which the accessor is attached  */
-  grib_accessor          *next  ;     /** < next accessor in list                      */
-  grib_accessor          *previous;   /** < next accessor in list                      */
-  grib_accessor_class    *cclass;     /** < behavior of the accessor                   */
-  unsigned long           flags;      /** < Various flags                              */
-  grib_section*           sub_section;
-
-  const char*             all_names[MAX_ACCESSOR_NAMES]  ;   /** < name of the accessor  */
-  const char*             all_name_spaces[MAX_ACCESSOR_NAMES]; /** < namespace to which the accessor belongs    */
-  int                     dirty;
-
-  grib_accessor          *same;      /** < accessors with the same name */
+  grib_section*          parent;     /** < section to which the accessor is attached  */
+  grib_accessor*         next  ;     /** < next accessor in list                      */
+  grib_accessor*         previous;   /** < next accessor in list                      */
+  grib_accessor_class*   cclass;     /** < behavior of the accessor                   */
+  unsigned long          flags;      /** < Various flags                              */
+  grib_section*          sub_section;
+
+  const char*            all_names[MAX_ACCESSOR_NAMES]  ;   /** < name of the accessor  */
+  const char*            all_name_spaces[MAX_ACCESSOR_NAMES]; /** < namespace to which the accessor belongs    */
+  int                    dirty;
+
+  grib_accessor*         same;      /** < accessors with the same name */
   long                   loop;      /** < used in lists */
   long                   bufr_subset_number;    /** < bufr subset (bufr data accessors belong to different subsets)*/
   long                   bufr_group_number;     /** < used in bufr */
   grib_virtual_value*    vvalue;    /** < virtual value used when transient flag on **/
   const char*            set;
-  grib_accessor          *attributes[MAX_ACCESSOR_ATTRIBUTES]; /** < attributes are accessors */
+  grib_accessor*         attributes[MAX_ACCESSOR_ATTRIBUTES]; /** < attributes are accessors */
   grib_accessor*         parent_as_attribute;
 };
 
@@ -578,27 +576,27 @@ struct grib_accessor
 */
 struct grib_section
 {
-  grib_accessor                *owner;
-  grib_handle                  *h;         /** < Handles of all accessors and buffer  */
-  grib_accessor                *aclength;  /** < block of the length of the block     */
-  grib_block_of_accessors      *block;     /** < block                                */
-  grib_action                  *branch;    /** < branch that created the bolck        */
-  size_t                       length;
-  size_t                       padding;
+  grib_accessor*            owner;
+  grib_handle*              h;         /** < Handles of all accessors and buffer  */
+  grib_accessor*            aclength;  /** < block of the length of the block     */
+  grib_block_of_accessors*  block;     /** < block                                */
+  grib_action*              branch;    /** < branch that created the block        */
+  size_t                    length;
+  size_t                    padding;
 };
 
 
 
 struct grib_iterator_class{
-   grib_iterator_class**           super;
-   char* name;
-   size_t                         size;
+   grib_iterator_class**     super;
+   char*                     name;
+   size_t                    size;
 
-   int                            inited;
-   iterator_init_class_proc       init_class;
+   int                       inited;
+   iterator_init_class_proc  init_class;
 
-   iterator_init_proc             init;
-   iterator_destroy_proc        destroy;
+   iterator_init_proc        init;
+   iterator_destroy_proc     destroy;
 
    iterator_next_proc        next;
    iterator_previous_proc    previous;
@@ -651,16 +649,16 @@ typedef void (*dumper_footer_proc)      (grib_dumper*,grib_handle*);
 typedef void (*dumper_init_class_proc)  (grib_dumper_class*);
 
 struct grib_dumper {
-  FILE*            out;
-   unsigned long     option_flags;
-   void*             arg;
-   int               depth;
-   grib_handle       *handle;
-   grib_dumper_class *cclass;
+  FILE*               out;
+   unsigned long      option_flags;
+   void*              arg;
+   int                depth;
+   grib_handle*       handle;
+   grib_dumper_class* cclass;
  };
 
 struct grib_dumper_class {
-   grib_dumper_class**    super;
+   grib_dumper_class**      super;
    char*                    name;
    size_t                   size;
    int                      inited;
@@ -681,17 +679,17 @@ struct grib_dumper_class {
 };
 
 struct grib_iterator{
-   grib_arguments  *args;                   /**  args of iterator   */
-   grib_handle* h;
-   long        e;                           /**  current element    */
-   size_t     nv;                           /**  number of values   */
-   double*  data;                           /**  data values        */
+   grib_arguments* args;    /**  args of iterator   */
+   grib_handle*    h;
+   long            e;       /**  current element    */
+   size_t          nv;      /**  number of values   */
+   double*         data;    /**  data values        */
    grib_iterator_class* cclass;
-   unsigned long flags;
+   unsigned long  flags;
 };
 
 struct grib_nearest{
-   grib_arguments              *args;      /**  args of iterator   */
+   grib_arguments*             args;      /**  args of iterator   */
    grib_handle*                h;
    grib_context*               context;
    double*                     values;
@@ -704,7 +702,7 @@ struct grib_nearest{
 struct grib_box {
    grib_box_class*             cclass;
    grib_context*               context;
-   grib_arguments              *args;      
+   grib_arguments*             args;
    grib_handle*                h;
    unsigned long               flags;
    grib_points*                points;
@@ -731,18 +729,18 @@ typedef struct grib_itrie grib_itrie;
 
 
 struct grib_sarray {
-  char** v;
-  size_t size;
-  size_t n;
-  size_t incsize;
+  char**        v;
+  size_t        size;
+  size_t        n;
+  size_t        incsize;
   grib_context* context;
 } ;
 
 struct grib_darray {
-  double* v;
-  size_t size;
-  size_t n;
-  size_t incsize;
+  double*  v;
+  size_t   size;
+  size_t   n;
+  size_t   incsize;
   grib_context* context;
 } ;
 
@@ -817,10 +815,10 @@ struct bufr_descriptors_array {
 } ;
 
 struct codes_condition {
-  char* left;
-  int rightType;
-  char* rightString;
-  long rightLong;
+  char*  left;
+  int    rightType;
+  char*  rightString;
+  long   rightLong;
   double rightDouble;
 };
 
@@ -871,7 +869,7 @@ struct grib_multi_handle {
 
 struct grib_accessor_class
 {
-    grib_accessor_class             **super;
+    grib_accessor_class**           super;
     const char*                     name;
     size_t                          size;
 
@@ -950,11 +948,11 @@ typedef struct grib_hash_array_value grib_hash_array_value;
 
 struct grib_hash_array_value {
   grib_hash_array_value*   next;
-  char*                 name;
-  int                   type;
-  grib_iarray*          iarray;
-  grib_darray*          darray;
-  grib_trie*	        index;
+  char*             name;
+  int               type;
+  grib_iarray*      iarray;
+  grib_darray*      darray;
+  grib_trie*        index;
 };
 
 
@@ -980,7 +978,7 @@ struct grib_concept_value {
   grib_concept_value*          next;
   char*                        name;
   grib_concept_condition*      conditions;
-  grib_trie*		           index;
+  grib_trie*                   index;
 };
 
 /* ----------*/
@@ -991,10 +989,10 @@ struct grib_context
     int                             debug;
     int                             write_on_fail;
     int                             no_abort;
-	int 							io_buffer_size;
-	int 							no_big_group_split;
-	int 							no_spd;
-	int 							keep_matrix;
+    int                             io_buffer_size;
+    int                             no_big_group_split;
+    int                             no_spd;
+    int                             keep_matrix;
     char*                           grib_definition_files_path;
     char*                           grib_samples_path;
     char*                           grib_concept_path;
@@ -1048,9 +1046,9 @@ struct grib_context
     grib_string_list*                blacklist;
     int                             ieee_packing;
     int                             unpack;
-	FILE*                           log_stream;
-	grib_trie*                      classes;
-	grib_trie*                      lists;
+    FILE*                           log_stream;
+    grib_trie*                      classes;
+    grib_trie*                      lists;
 #if GRIB_PTHREADS
     pthread_mutex_t                 mutex;
 #elif GRIB_OMP_THREADS
@@ -1079,38 +1077,38 @@ typedef void        (*expression_destroy_proc) (grib_context*,grib_expression*e)
 typedef int        (*expression_native_type_proc)(grib_expression*,grib_handle*);
 
 struct grib_expression {
-	grib_expression_class* cclass;
+    grib_expression_class* cclass;
 };
 
 struct grib_expression_class {
-	
-	grib_expression_class **super;
-	const char *name;
-	size_t size;
-	int inited;
 
-	expression_class_init_proc init_class;
-	expression_init_proc init;
-	expression_destroy_proc destroy;
+    grib_expression_class** super;
+    const char*             name;
+    size_t                  size;
+    int                     inited;
+
+    expression_class_init_proc init_class;
+    expression_init_proc init;
+    expression_destroy_proc destroy;
 
 
-	expression_print_proc              print;
+    expression_print_proc              print;
     expression_compile_proc            compile;
-	expression_add_dependency_proc     add_dependency;
+    expression_add_dependency_proc     add_dependency;
 
-	expression_native_type_proc         native_type;
-	expression_get_name_proc			get_name;
+    expression_native_type_proc        native_type;
+    expression_get_name_proc           get_name;
 
-	expression_evaluate_long_proc      evaluate_long;
-	expression_evaluate_double_proc    evaluate_double;
-	expression_evaluate_string_proc    evaluate_string;
+    expression_evaluate_long_proc      evaluate_long;
+    expression_evaluate_double_proc    evaluate_double;
+    expression_evaluate_string_proc    evaluate_string;
 };
 
 
 struct grib_arguments {
-	struct grib_arguments *next;
-	grib_expression       *expression;
-	char value[80];
+    struct grib_arguments* next;
+    grib_expression*       expression;
+    char                   value[80];
 };
 
 
@@ -1247,31 +1245,36 @@ typedef struct grib_concept_entry grib_concept_entry;
 typedef struct grib_concept_key grib_concept_key;
 
 struct grib_concept_index_entry {
-  char* 	name;
-  char*		value;
-  int type;
+  char*   name;
+  char*   value;
+  int     type;
   grib_concept_entry* next;
 };
 
 struct grib_concept_index_key {
-  char* 	name;
-  int type;
+  char* name;
+  int   type;
   grib_concept_key* next;
 };
 
 struct grib_concept_index {
-	grib_context* context;
-	grib_concept_key* keys;
-	grib_conditions_tree* conditions;
+    grib_context* context;
+    grib_concept_key* keys;
+    grib_conditions_tree* conditions;
 };
 
 struct grib_conditions_tree {
-	char*   value;
-	void* 	object;
-	grib_conditions_tree* next;
-	grib_conditions_tree* next_key;
+    char*   value;
+    void*   object;
+    grib_conditions_tree* next;
+    grib_conditions_tree* next_key;
 };
 
+/* support for in-memory definition and tables */
+
+extern int codes_memfs_exists(const char* path);
+extern FILE* codes_memfs_open(const char* path);
+
 /* index structures */
 
 #define STRING_VALUE_LEN 100
@@ -1322,21 +1325,21 @@ struct grib_index {
 typedef struct grib_math grib_math;
 
 struct grib_math{
-  struct grib_math *left;
-  struct grib_math *right;
-  char        *name;
-  int         arity;
+  struct grib_math* left;
+  struct grib_math* right;
+  char*             name;
+  int               arity;
 };
 
 typedef double (*mathproc)(void);
 typedef int    (*funcproc)(grib_math*,mathproc);
 
 typedef struct func {
-  char    *name;
-  funcproc addr;
-  mathproc proc;
-  int      arity;
-  char     *info;
+  char*     name;
+  funcproc  addr;
+  mathproc  proc;
+  int       arity;
+  char*     info;
 } func;
 
 /* action file */
@@ -1368,25 +1371,25 @@ struct cvs_MD5Context {
 typedef struct grib_rule_entry grib_rule_entry;
 
 struct grib_rule_entry {
-  grib_rule_entry *next;
-  char            *name;
-  grib_expression *value;
+  grib_rule_entry* next;
+  char*            name;
+  grib_expression* value;
 };
 
 typedef struct grib_rule grib_rule;
 
 struct grib_rule {
-  grib_rule        *next;
-  grib_expression  *condition;
-  grib_rule_entry  *entries;
+  grib_rule*        next;
+  grib_expression*  condition;
+  grib_rule_entry*  entries;
 };
 
 typedef struct grib_case grib_case;
 
 struct grib_case {
    grib_arguments* values;
-   grib_action* action;
-   grib_case* next;
+   grib_action*    action;
+   grib_case*      next;
 };
 
 /* ----------*/
@@ -1412,10 +1415,10 @@ typedef struct grib_smart_table_entry {
 } grib_smart_table_entry;
 
 struct grib_smart_table {
-  char*            filename[3];
-  char*            recomposed_name[3];
-  grib_smart_table*  next;
-  size_t           numberOfEntries;
+  char*             filename[3];
+  char*             recomposed_name[3];
+  grib_smart_table* next;
+  size_t            numberOfEntries;
   grib_smart_table_entry* entries;
 };
 
@@ -1455,13 +1458,13 @@ typedef struct j2k_encode_helper {
   float            compression;
 
   long             no_values;
-  const double    *values;
+  const double*    values;
   double           reference_value;
   double           divisor;
   double           decimal;
 
-  long            jpeg_length;
-  unsigned char*  jpeg_buffer;
+  long             jpeg_length;
+  unsigned char*   jpeg_buffer;
 
 } j2k_encode_helper;
 
diff --git a/src/grib_api_prototypes.h b/src/grib_api_prototypes.h
index f14c7a7..56abef7 100644
--- a/src/grib_api_prototypes.h
+++ b/src/grib_api_prototypes.h
@@ -19,7 +19,7 @@ grib_action *grib_action_create_alias(grib_context *context, const char *name, c
 grib_action *grib_action_create_gen(grib_context *context, const char *name, const char *op, const long len, grib_arguments *params, grib_arguments *default_value, int flags, const char *name_space, const char *set);
 
 /* action_class_if.c */
-grib_action *grib_action_create_if(grib_context *context, grib_expression *expression, grib_action *block_true, grib_action *block_false, int transient);
+grib_action *grib_action_create_if(grib_context *context, grib_expression *expression, grib_action *block_true, grib_action *block_false, int transient, int lineno, char *file_being_parsed);
 
 /* action_class_switch.c */
 grib_action *grib_action_create_switch(grib_context *context, grib_arguments *args, grib_case *Case, grib_action *Default);
@@ -58,9 +58,6 @@ grib_action *grib_action_create_assert(grib_context *context, grib_expression *e
 grib_action *grib_action_create_template(grib_context *context, int nofail, const char *name, const char *arg1);
 grib_action *get_empty_template(grib_context *c, int *err);
 
-/* action_class_transient_darray.c */
-grib_action* grib_action_create_transient_darray(grib_context* context, const char* name, grib_darray* darray);
-
 /* action_class_trigger.c */
 grib_action *grib_action_create_trigger(grib_context *context, grib_arguments *args, grib_action *block);
 
@@ -68,8 +65,8 @@ grib_action *grib_action_create_trigger(grib_context *context, grib_arguments *a
 grib_action *grib_action_create_when(grib_context *context, grib_expression *expression, grib_action *block_true, grib_action *block_false);
 
 /* action_class_concept.c */
-grib_concept_value* action_concept_get_concept(grib_accessor* a);
-int action_concept_get_nofail(grib_accessor* a) ;
+grib_concept_value *action_concept_get_concept(grib_accessor *a);
+int action_concept_get_nofail(grib_accessor *a);
 grib_action *grib_action_create_concept(grib_context *context, const char *name, grib_concept_value *concept, const char *basename, const char *name_space, const char *defaultkey, const char *masterDir, const char *localDir, const char *ecmfDir, int flags, int nofail);
 
 /* action_class_hash_array.c */
@@ -86,7 +83,7 @@ grib_action *grib_action_create_set_darray(grib_context *context, const char *na
 grib_action *grib_action_create_set_iarray(grib_context *context, const char *name, grib_iarray *iarray);
 
 /* action_class_set_sarray.c */
-grib_action* grib_action_create_set_sarray(grib_context* context, const char* name, grib_sarray* sarray);
+grib_action *grib_action_create_set_sarray(grib_context *context, const char *name, grib_sarray *sarray);
 
 /* action_class_noop.c */
 grib_action *grib_action_create_noop(grib_context *context, const char *fname);
@@ -106,6 +103,9 @@ grib_action *grib_action_create_variable(grib_context *context, const char *name
 /* action_class_modify.c */
 grib_action *grib_action_create_modify(grib_context *context, const char *name, long flags);
 
+/* action_class_transient_darray.c */
+grib_action *grib_action_create_transient_darray(grib_context *context, const char *name, grib_darray *darray);
+
 /* grib_accessor.c */
 void grib_accessor_dump(grib_accessor *a, grib_dumper *f);
 int grib_pack_missing(grib_accessor *a);
@@ -137,6 +137,7 @@ int grib_accessors_list_value_count(grib_accessors_list *al, size_t *count);
 int grib_accessor_notify_change(grib_accessor *a, grib_accessor *changed);
 void grib_init_accessor(grib_accessor *a, const long len, grib_arguments *args);
 void grib_accessor_delete(grib_context *ct, grib_accessor *a);
+grib_accessor *grib_accessor_clone(grib_accessor *a, grib_section *s, int *err);
 void grib_update_size(grib_accessor *a, size_t len);
 int grib_nearest_smaller_value(grib_accessor *a, double val, double *nearest);
 size_t grib_preferred_size(grib_accessor *a, int from_handle);
@@ -144,7 +145,7 @@ grib_accessor *grib_next_accessor(grib_accessor *a);
 void grib_resize(grib_accessor *a, size_t new_size);
 int grib_compare_accessors(grib_accessor *a1, grib_accessor *a2, int compare_flags);
 const char *grib_get_type_name(int type);
-int grib_accessor_add_attribute(grib_accessor *a, grib_accessor *attr,int nest_if_clash);
+int grib_accessor_add_attribute(grib_accessor *a, grib_accessor *attr, int nest_if_clash);
 int grib_accessor_replace_attribute(grib_accessor *a, grib_accessor *attr);
 int grib_accessor_delete_attribute(grib_accessor *a, const char *name);
 grib_accessor *grib_accessor_get_attribute_by_index(grib_accessor *a, int index);
@@ -161,7 +162,7 @@ void grib_accessors_list_delete(grib_context *c, grib_accessors_list *al);
 /* grib_concept.c */
 grib_concept_value *grib_concept_value_new(grib_context *c, const char *name, grib_concept_condition *conditions);
 void grib_concept_value_delete(grib_context *c, grib_concept_value *v);
-grib_concept_condition *grib_concept_condition_new(grib_context *c, const char *name, grib_expression *expression, grib_iarray* iarray);
+grib_concept_condition *grib_concept_condition_new(grib_context *c, const char *name, grib_expression *expression, grib_iarray *iarray);
 void grib_concept_condition_delete(grib_context *c, grib_concept_condition *v);
 
 /* grib_hash_array.c */
@@ -177,6 +178,7 @@ int grib_bufr_descriptor_set_code(grib_accessor *tables_accessor, int code, bufr
 void grib_bufr_descriptor_set_reference(bufr_descriptor *v, double reference);
 void grib_bufr_descriptor_set_width(bufr_descriptor *v, long width);
 void grib_bufr_descriptor_set_scale(bufr_descriptor *v, long scale);
+int grib_bufr_descriptor_can_be_missing(bufr_descriptor *v);
 void grib_bufr_descriptor_delete(bufr_descriptor *v);
 
 /* grib_bufr_descriptors_array.c */
@@ -196,6 +198,7 @@ bufr_descriptor **grib_bufr_descriptors_array_get_array(bufr_descriptors_array *
 size_t grib_bufr_descriptors_array_used_size(bufr_descriptors_array *v);
 
 /* grib_darray.c */
+grib_darray *grib_darray_new_from_array(grib_context *c, double *a, size_t size);
 grib_darray *grib_darray_new(grib_context *c, size_t size, size_t incsize);
 grib_darray *grib_darray_resize(grib_context *c, grib_darray *v);
 grib_darray *grib_darray_push(grib_context *c, grib_darray *v, double val);
@@ -273,13 +276,13 @@ size_t grib_viarray_used_size(grib_viarray *v);
 /* grib_accessor_class_bufr_data.c */
 
 /* grib_accessor_class_bufr_data_array.c */
-grib_accessor* accessor_bufr_data_element_clone(grib_accessor* a,grib_section* s);
+int accessor_bufr_data_array_create_keys(grib_accessor *a, long onlySubset, long startSubset, long endSubset);
+int accessor_bufr_data_array_process_elements(grib_accessor *a, int flag, long onlySubset, long startSubset, long endSubset);
 grib_vsarray *accessor_bufr_data_array_get_stringValues(grib_accessor *a);
 grib_accessors_list *accessor_bufr_data_array_get_dataAccessors(grib_accessor *a);
 void accessor_bufr_data_array_set_unpackMode(grib_accessor *a, int unpackMode);
 
 /* grib_accessor_class_bufr_data_element.c */
-grib_accessor* grib_accessor_clone(grib_accessor* a,grib_section* s,int* err);
 void accessor_bufr_data_element_set_index(grib_accessor *a, long index);
 void accessor_bufr_data_element_set_type(grib_accessor *a, int type);
 void accessor_bufr_data_element_set_numberOfSubsets(grib_accessor *a, long numberOfSubsets);
@@ -292,7 +295,7 @@ void accessor_bufr_data_element_set_elementsDescriptorsIndex(grib_accessor *a, g
 
 /* grib_accessor_class_bufr_elements_table.c */
 char **str_split(char *a_str, const char a_delim);
-int bufr_descriptor_is_marker(bufr_descriptor* d);
+int bufr_descriptor_is_marker(bufr_descriptor *d);
 bufr_descriptor *accessor_bufr_elements_table_get_descriptor(grib_accessor *a, int code, int *err);
 
 /* grib_accessor_class_bufr_group.c */
@@ -425,6 +428,8 @@ int grib_g1_step_apply_units(long *start, long *theEnd, long *step_unit, long *P
 
 /* grib_accessor_class_global_gaussian.c */
 
+/* grib_accessor_class_gaussian_grid_name.c */
+
 /* grib_accessor_class_gen.c */
 
 /* grib_accessor_class_gts_header.c */
@@ -670,6 +675,8 @@ bufr_descriptors_array *grib_accessor_class_expanded_descriptors_get_expanded(gr
 
 /* grib_accessor_class_g2_mars_labeling.c */
 
+/* grib_accessor_class_transient_darray.c */
+
 /* grib_accessor_class_md5.c */
 
 /* grib_jasper_encoding.c */
@@ -755,6 +762,12 @@ int pack_long_unsigned_helper(grib_accessor *a, const long *val, size_t *len, in
 
 /* grib_accessor_class_unsigned_bits.c */
 
+/* grib_accessor_class_raw.c */
+void accessor_raw_set_length(grib_accessor *a, size_t len);
+long accessor_raw_get_offset(grib_accessor *a);
+
+/* grib_accessor_class_bufr_extract_subsets.c */
+
 /* grib_accessor_class_spd.c */
 
 /* grib_accessor_class_sum.c */
@@ -857,7 +870,7 @@ void *grib_buffer_realloc(const grib_context *c, void *p, size_t s);
 /* grib_buffer.c */
 void grib_get_buffer_ownership(const grib_context *c, grib_buffer *b);
 grib_buffer *grib_create_growable_buffer(const grib_context *c);
-grib_buffer *grib_new_buffer(const grib_context *c, unsigned char *data, size_t buflen);
+grib_buffer *grib_new_buffer(const grib_context *c, const unsigned char *data, size_t buflen);
 void grib_buffer_delete(const grib_context *c, grib_buffer *b);
 void grib_grow_buffer(const grib_context *c, grib_buffer *b, size_t new_size);
 void grib_buffer_set_ulength_bits(const grib_context *c, grib_buffer *b, size_t length_bits);
@@ -903,7 +916,7 @@ void grib_dump_accessors_block(grib_dumper *dumper, grib_block_of_accessors *blo
 void grib_dump_accessors_list(grib_dumper *dumper, grib_accessors_list *al);
 int grib_print(grib_handle *h, const char *name, grib_dumper *d);
 void grib_dump_content(grib_handle *h, FILE *f, const char *mode, unsigned long option_flags, void *data);
-void grib_dump_bufr_flat(grib_accessors_list *al, grib_handle *h, FILE *f, const char *mode, unsigned long option_flags, void *data);
+void codes_dump_bufr_flat(grib_accessors_list *al, grib_handle *h, FILE *f, const char *mode, unsigned long option_flags, void *data);
 
 /* grib_context.c */
 size_t grib_context_read(const grib_context *c, void *ptr, size_t size, void *stream);
@@ -919,6 +932,7 @@ void grib_print_api_version(FILE *out);
 grib_context *grib_context_get_default(void);
 char *grib_context_full_defs_path(grib_context *c, const char *basename);
 char *grib_samples_path(const grib_context *c);
+char *grib_definition_path(const grib_context *c);
 void grib_context_free(const grib_context *c, void *p);
 void grib_context_free_persistent(const grib_context *c, void *p);
 void grib_context_reset(grib_context *c);
@@ -940,6 +954,10 @@ void grib_context_set_buffer_memory_proc(grib_context *c, grib_malloc_proc m, gr
 void grib_context_set_data_accessing_proc(grib_context *c, grib_data_read_proc read, grib_data_write_proc write, grib_data_tell_proc tell);
 void grib_context_log(const grib_context *c, int level, const char *fmt, ...);
 void grib_context_print(const grib_context *c, void *descriptor, const char *fmt, ...);
+void grib_context_set_handle_file_count(grib_context *c, int new_count);
+void grib_context_set_handle_total_count(grib_context *c, int new_count);
+void grib_context_increment_handle_file_count(grib_context *c);
+void grib_context_increment_handle_total_count(grib_context *c);
 
 /* grib_date.c */
 int grib_julian_to_datetime(double jd, long *year, long *month, long *day, long *hour, long *minute, long *second);
@@ -997,7 +1015,7 @@ grib_handle *codes_gts_handle_new_from_file(grib_context *c, FILE *f, int *error
 grib_handle *grib_handle_new_from_message_copy(grib_context *c, const void *data, size_t size);
 grib_handle *grib_handle_new_from_partial_message_copy(grib_context *c, const void *data, size_t size);
 grib_handle *grib_handle_new_from_partial_message(grib_context *c, void *data, size_t buflen);
-grib_handle *grib_handle_new_from_message(grib_context *c, void *data, size_t buflen);
+grib_handle *grib_handle_new_from_message(grib_context *c, const void *data, size_t buflen);
 grib_handle *grib_handle_new_from_multi_message(grib_context *c, void **data, size_t *buflen, int *error);
 grib_handle *grib_handle_new_from_file(grib_context *c, FILE *f, int *error);
 grib_handle *grib_new_from_file(grib_context *c, FILE *f, int headers_only, int *error);
@@ -1105,11 +1123,12 @@ int grib_keys_iterator_get_native_type(grib_keys_iterator *kiter);
 /* grib_parse_utils.c */
 int grib_recompose_name(grib_handle *h, grib_accessor *observer, const char *uname, char *fname, int fail);
 int grib_accessor_print(grib_accessor *a, const char *name, int type, const char *format, const char *separator, int maxcols, int *newline, FILE *out);
-int grib_accessors_list_print(grib_handle *h,grib_accessors_list *al, const char *name, int type, const char *format, const char *separator, int maxcols, int *newline, FILE *out);
+int grib_accessors_list_print(grib_handle *h, grib_accessors_list *al, const char *name, int type, const char *format, const char *separator, int maxcols, int *newline, FILE *out);
 int grib_recompose_print(grib_handle *h, grib_accessor *observer, const char *uname, int fail, FILE *out);
 grib_action_file *grib_find_action_file(const char *fname, grib_action_file_list *afl);
 void grib_push_action_file(grib_action_file *af, grib_action_file_list *afl);
 int grib_yywrap(void);
+char *file_being_parsed(void);
 int grib_yyerror(const char *msg);
 void grib_parser_include(const char *included_fname);
 grib_concept_value *grib_parse_concept_file(grib_context *gc, const char *filename);
@@ -1140,7 +1159,7 @@ grib_handle *grib_external_template(grib_context *c, const char *name);
 char *grib_external_template_path(grib_context *c, const char *name);
 
 /* grib_dependency.c */
-grib_handle* grib_handle_of_accessor(grib_accessor* a);
+grib_handle *grib_handle_of_accessor(grib_accessor *a);
 void grib_dependency_add(grib_accessor *observer, grib_accessor *observed);
 void grib_dependency_remove_observed(grib_accessor *observed);
 int grib_dependency_notify_change(grib_accessor *observed);
@@ -1359,6 +1378,7 @@ grib_handle *grib_util_sections_copy(grib_handle *hfrom, grib_handle *hto, int w
 grib_string_list *grib_util_get_param_id(const char *mars_param);
 grib_string_list *grib_util_get_mars_param(const char *param_id);
 grib_handle *grib_util_set_spec(grib_handle *h, const grib_util_grid_spec *spec, const grib_util_packing_spec *packing_spec, int flags, const double *data_values, size_t data_values_count, int *err);
+grib_handle *grib_util_set_spec2(grib_handle *h, const grib_util_grid_spec2 *spec, const grib_util_packing_spec *packing_spec, int flags, const double *data_values, size_t data_values_count, int *err);
 int grib_moments(grib_handle *h, double east, double north, double west, double south, int order, double *moments, long *count);
 int parse_keyval_string(char *grib_tool, char *arg, int values_required, int default_type, grib_values values[], int *count);
 int is_productDefinitionTemplateNumber_EPS(long productDefinitionTemplateNumber);
@@ -1367,12 +1387,7 @@ int is_productDefinitionTemplateNumber_Aerosol(long productDefinitionTemplateNum
 int is_index_file(const char *filename);
 char get_dir_separator_char(void);
 const char *extract_filename(const char *filepath);
-int is_gaussian_global(
-        double lat1, double lat2, double lon1, double lon2,/* bounding box*/
-        long num_points_equator, /* num points on latitude at equator */
-        const double* latitudes, /* array of Gaussian latitudes (size 2*N) */
-        double angular_precision /* tolerance for angle comparison */
-);
+int is_gaussian_global(double lat1, double lat2, double lon1, double lon2, long num_points_equator, const double *latitudes, double angular_precision);
 char *codes_getenv(const char *name);
 
 /* compile.c */
@@ -1436,7 +1451,6 @@ int grib_encode_double_array(size_t n_vals, const double *val, long bits_per_val
 int grib_encode_double_array_complex(size_t n_vals, double *val, long nbits, double reference_value, double *scal, double d, double divisor, unsigned char *p, long *bitp);
 
 
-long accessor_raw_get_offset(grib_accessor* a);
-void accessor_raw_set_length(grib_accessor* a,size_t len);
-int accessor_bufr_data_array_create_keys(grib_accessor* a,long onlySubset,long startSubset,long endSubset);
-int accessor_bufr_data_array_process_elements(grib_accessor* a,int flag,long onlySubset,long startSubset,long endSubset);
+/* codes_memfs */
+FILE* codes_fopen(const char* name, const char* mode);
+int codes_access(const char* name, int mode);
diff --git a/src/grib_api_version.c.in b/src/grib_api_version.c.in
index 1393a3f..ed49209 100644
--- a/src/grib_api_version.c.in
+++ b/src/grib_api_version.c.in
@@ -1,3 +1,3 @@
 #include "grib_api_internal.h"
 
-const char * grib_get_git_sha1() { return "@GRIB_API_GIT_SHA1@"; }
+const char * grib_get_git_sha1() { return "@ECCODES_GIT_SHA1@"; }
diff --git a/src/grib_bits_any_endian_simple.c b/src/grib_bits_any_endian_simple.c
index 114cb53..dd77aea 100644
--- a/src/grib_bits_any_endian_simple.c
+++ b/src/grib_bits_any_endian_simple.c
@@ -74,7 +74,8 @@ int grib_decode_long_array(const unsigned char* p, long *bitp, long bitsPerValue
  */
 int grib_decode_double_array(const unsigned char* p, long *bitp, long bitsPerValue,
         double reference_value,double s,double d,
-        size_t n_vals,double* val) {
+        size_t n_vals,double* val)
+{
     long i=0;
     unsigned long lvalue = 0;
     double x;
@@ -92,49 +93,49 @@ int grib_decode_double_array(const unsigned char* p, long *bitp, long bitsPerVal
         x=((lvalue*s)+reference_value)*d;
         val[i] = (double)x;
     }
-}
 #endif
-unsigned long mask = BIT_MASK(bitsPerValue);
+    unsigned long mask = BIT_MASK(bitsPerValue);
 
-/* pi: positin of bitp in p[]. >>3 == /8 */
-long pi = *bitp / 8;
-/* some bits might of the current byte at pi might be used */
-/* by the previous number usefulBitsInByte gives remaining unused bits */
-/* number of useful bits in current byte */
-int usefulBitsInByte = 8-(*bitp & 7);
-for(i=0;i < n_vals;i++) {
-    /* value read as long */
-    long bitsToRead = 0;
-    lvalue  = 0;
-    bitsToRead = bitsPerValue;
-    /* read one byte after the other to lvalue until >= bitsPerValue are read */
-    while (bitsToRead > 0) {
-        lvalue  <<= 8;
-        lvalue += p[pi];
-        pi++;
-        bitsToRead -= usefulBitsInByte;
-        usefulBitsInByte = 8;
-    }
-    *bitp += bitsPerValue;
-    /* bitsToRead is now <= 0, remove the last bits */
-    lvalue >>= -1*bitsToRead;
-    /* set leading bits to 0 - removing bits used for previous number */
-    lvalue &= mask;
+    /* pi: position of bitp in p[]. >>3 == /8 */
+    long pi = *bitp / 8;
+    /* some bits might of the current byte at pi might be used */
+    /* by the previous number usefulBitsInByte gives remaining unused bits */
+    /* number of useful bits in current byte */
+    int usefulBitsInByte = 8-(*bitp & 7);
+    for(i=0;i < n_vals;i++) {
+        /* value read as long */
+        long bitsToRead = 0;
+        lvalue  = 0;
+        bitsToRead = bitsPerValue;
+        /* read one byte after the other to lvalue until >= bitsPerValue are read */
+        while (bitsToRead > 0) {
+            lvalue  <<= 8;
+            lvalue += p[pi];
+            pi++;
+            bitsToRead -= usefulBitsInByte;
+            usefulBitsInByte = 8;
+        }
+        *bitp += bitsPerValue;
+        /* bitsToRead is now <= 0, remove the last bits */
+        lvalue >>= -1*bitsToRead;
+        /* set leading bits to 0 - removing bits used for previous number */
+        lvalue &= mask;
 
-    usefulBitsInByte = -1*bitsToRead; /* prepare for next round */
-    if (usefulBitsInByte > 0) {
-        pi--; /* reread the current byte */
-    } else {
-        usefulBitsInByte = 8; /* start with next full byte */
+        usefulBitsInByte = -1*bitsToRead; /* prepare for next round */
+        if (usefulBitsInByte > 0) {
+            pi--; /* reread the current byte */
+        } else {
+            usefulBitsInByte = 8; /* start with next full byte */
+        }
+        /* scaling and move value to output */
+        x=((lvalue*s)+reference_value)*d;
+        val[i] = (double)x;
     }
-    /* scaling and move value to output */
-    x=((lvalue*s)+reference_value)*d;
-    val[i] = (double)x;
-}
-return 0;
+    return 0;
 }
 
-int grib_decode_double_array_complex(const unsigned char* p, long *bitp, long nbits,double reference_value,double s,double* d,size_t size,double* val) {
+int grib_decode_double_array_complex(const unsigned char* p, long *bitp, long nbits,double reference_value,double s,double* d,size_t size,double* val)
+{
     return GRIB_NOT_IMPLEMENTED;
 }
 
@@ -196,7 +197,7 @@ int grib_encode_double_array(size_t n_vals,const double* val,long bits_per_value
 }
 
 int grib_encode_double_array_complex(size_t n_vals,double* val,long nbits,double reference_value,
-        double* scal,double d,double divisor,unsigned char* p,long *bitp) {
+        double* scal,double d,double divisor,unsigned char* p,long *bitp)
+{
     return GRIB_NOT_IMPLEMENTED;
 }
-
diff --git a/src/grib_bits_fast_big_endian_vector.c b/src/grib_bits_fast_big_endian_vector.c
index 308c3f3..5d35e50 100644
--- a/src/grib_bits_fast_big_endian_vector.c
+++ b/src/grib_bits_fast_big_endian_vector.c
@@ -31,6 +31,7 @@ int grib_decode_long_array(const unsigned char* p, long *bitp, long nbits,size_t
   if (size*nbits%max_nbits) sizel++;
 
   x=malloc(sizel*sizeof(unsigned long));
+  Assert(x);
   memcpy(x,p+bitpv/8,sizel*sizeof(*x));
 /* (void) ftrace_region_end  ("gdda-1"); */
 
@@ -129,6 +130,7 @@ int grib_decode_double_array(const unsigned char* p, long *bitp, long nbits,doub
   if (size*nbits%max_nbits) sizel++;
 
   x=malloc(sizel*sizeof(unsigned long));
+  Assert(x);
   memcpy(x,p+bitpv/8,sizel*sizeof(*x));
 /* (void) ftrace_region_end  ("gdda-1"); */
 
@@ -220,6 +222,7 @@ int grib_decode_double_array_complex(const unsigned char* p, long *bitp, long nb
   if (size*nbits%max_nbits) sizel++;
 
   x=malloc(sizel*sizeof(unsigned long));
+  Assert(x);
   memcpy(x,p+bitpv/8,sizel*sizeof(*x));
 
   if ( (max_nbits%nbits == 0) && (bitpv%nbits == 0) ) {
@@ -272,6 +275,7 @@ int grib_encode_double_array(size_t size,const double* val,long nbits,double ref
   if (size*nbits%max_nbits) sizel++;
   
   destination=malloc(sizel*sizeof(unsigned long));
+  Assert(destination);
 
   if ( (max_nbits%nbits == 0)) {
 
@@ -339,6 +343,7 @@ int grib_encode_double_array_complex(size_t size,double* restrict val,long nbits
   if (size*nbits%max_nbits) sizel++;
   
   destination=malloc(sizel*sizeof(unsigned long));
+  Assert(destination);
 
   if ( (max_nbits%nbits == 0)) {
 
diff --git a/src/grib_box_class_reduced_gaussian.c b/src/grib_box_class_reduced_gaussian.c
index 6d4e825..d575f7f 100644
--- a/src/grib_box_class_reduced_gaussian.c
+++ b/src/grib_box_class_reduced_gaussian.c
@@ -128,11 +128,11 @@ static int init(grib_box* box,grib_handle* h,grib_arguments* args)
 		self->lats=lats;
 	} else {
 		/*sub area (latitudes)*/
-		int l=0;
+		int ll=0;
 		double d=fabs(lats[0]-lats[1]);
-		while (fabs(lat_first-lats[l]) > d ) {l++;}
+		while (fabs(lat_first-lats[ll]) > d ) {ll++;}
 		self->lats=(double*)grib_context_malloc(h->context,sizeof(double)*self->nlats);
-		for (i=0;i<self->nlats;i++) self->lats[i]=lats[l++];
+		for (i=0;i<self->nlats;i++) self->lats[i]=lats[ll++];
 		grib_context_free(box->context,lats);
 	}
 
diff --git a/src/grib_buffer.c b/src/grib_buffer.c
index 7b57cae..a2db7ad 100644
--- a/src/grib_buffer.c
+++ b/src/grib_buffer.c
@@ -16,164 +16,164 @@
 
 void grib_get_buffer_ownership(const grib_context *c, grib_buffer *b)
 {
-  unsigned char* newdata;
-  if(b->property == GRIB_MY_BUFFER)
-    return;
-
-  newdata = (unsigned char*)grib_context_malloc(c, b->length);
-  memcpy(newdata, b->data, b->length);
-  b->data = newdata;
-  b->property = GRIB_MY_BUFFER;
+    unsigned char* newdata;
+    if(b->property == GRIB_MY_BUFFER)
+        return;
+
+    newdata = (unsigned char*)grib_context_malloc(c, b->length);
+    memcpy(newdata, b->data, b->length);
+    b->data = newdata;
+    b->property = GRIB_MY_BUFFER;
 }
 
 grib_buffer* grib_create_growable_buffer(const grib_context* c)
 {
-  grib_buffer  *b =  (grib_buffer*)grib_context_malloc_clear(c,sizeof(grib_buffer));
-
-  if(b == NULL)
-  {
-    grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer");
-    return NULL;
-  }
-
-  b->property = GRIB_MY_BUFFER;
-  b->length   = 10240;
-  b->ulength  = 0;
-  b->data     = (unsigned char*)grib_context_malloc_clear(c,b->length);
-  b->growable = 1;
-
-  if(!b->data)
-  {
-    grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer");
-    grib_context_free(c,b);
-    return NULL;
-  }
+    grib_buffer  *b =  (grib_buffer*)grib_context_malloc_clear(c,sizeof(grib_buffer));
+
+    if(b == NULL)
+    {
+        grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer");
+        return NULL;
+    }
+
+    b->property = GRIB_MY_BUFFER;
+    b->length   = 10240;
+    b->ulength  = 0;
+    b->data     = (unsigned char*)grib_context_malloc_clear(c,b->length);
+    b->growable = 1;
+
+    if(!b->data)
+    {
+        grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer");
+        grib_context_free(c,b);
+        return NULL;
+    }
 
-  return b;
+    return b;
 }
 
-grib_buffer* grib_new_buffer(const grib_context* c,unsigned char* data,size_t buflen)
+grib_buffer* grib_new_buffer(const grib_context* c, const unsigned char* data, size_t buflen)
 {
-  grib_buffer  *b =  (grib_buffer*)grib_context_malloc_clear(c,sizeof(grib_buffer));
+    grib_buffer  *b =  (grib_buffer*)grib_context_malloc_clear(c,sizeof(grib_buffer));
 
-  if(b == NULL)
-  {
-    grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer");
-    return NULL;
-  }
+    if(b == NULL)
+    {
+        grib_context_log(c,GRIB_LOG_ERROR,"grib_new_buffer: cannot allocate buffer");
+        return NULL;
+    }
 
-  b->property = GRIB_USER_BUFFER;
-  b->length   = buflen;
-  b->ulength  = buflen;
-  b->ulength_bits  = buflen*8;
-  b->data     = data;
+    b->property = GRIB_USER_BUFFER;
+    b->length   = buflen;
+    b->ulength  = buflen;
+    b->ulength_bits  = buflen*8;
+    b->data     = (unsigned char*)data;
 
-  return b;
+    return b;
 }
 
 void grib_buffer_delete(const grib_context *c, grib_buffer *b)
 {
-  if(b->property == GRIB_MY_BUFFER)
-    grib_context_free(c,b->data);
-  b->length = 0;
-  b->ulength = 0;
-  grib_context_free(c,b);
+    if(b->property == GRIB_MY_BUFFER)
+        grib_context_free(c,b->data);
+    b->length = 0;
+    b->ulength = 0;
+    grib_context_free(c,b);
 }
 
 static void grib_grow_buffer_to(const grib_context *c, grib_buffer *b, size_t ns)
 {
-  unsigned char* newdata;
+    unsigned char* newdata;
 
-  if(ns>b->length)
-  {
-    grib_get_buffer_ownership(c, b);
-    newdata = (unsigned char*)grib_context_malloc_clear(c, ns);
-    memcpy(newdata, b->data, b->length);
-    grib_context_free(c,b->data);
-    b->data = newdata;
-    b->length = ns;
-  }
+    if(ns>b->length)
+    {
+        grib_get_buffer_ownership(c, b);
+        newdata = (unsigned char*)grib_context_malloc_clear(c, ns);
+        memcpy(newdata, b->data, b->length);
+        grib_context_free(c,b->data);
+        b->data = newdata;
+        b->length = ns;
+    }
 }
 
 void grib_grow_buffer(const grib_context *c, grib_buffer *b, size_t new_size)
 {
-  size_t len = ((new_size + 1023)/1024)*1024;
-  grib_grow_buffer_to(c,b,len);
+    size_t len = ((new_size + 1023)/1024)*1024;
+    grib_grow_buffer_to(c,b,len);
 }
 
 void grib_buffer_set_ulength_bits(const grib_context *c, grib_buffer *b, size_t length_bits)
 {
-  size_t length=length_bits/8;
-  if (length_bits%8) length++;
-  grib_grow_buffer_to(c,b,length);
-  b->ulength_bits = length_bits;
-  b->ulength = length;
+    size_t length=length_bits/8;
+    if (length_bits%8) length++;
+    grib_grow_buffer_to(c,b,length);
+    b->ulength_bits = length_bits;
+    b->ulength = length;
 }
 
 void grib_buffer_set_ulength(const grib_context *c, grib_buffer *b, size_t length)
 {
-  grib_grow_buffer_to(c,b,length);
-  b->ulength = length;
-  b->ulength_bits = length*8;
+    grib_grow_buffer_to(c,b,length);
+    b->ulength = length;
+    b->ulength_bits = length*8;
 }
 
 static void update_offsets(grib_accessor* a,long len)
 {
-  while(a)
-  {
-    grib_section* s = a->sub_section;
-    a->offset += len;
-    grib_context_log(a->context,GRIB_LOG_DEBUG, "::::: grib_buffer : accessor %s is moving by %d bytes to %ld",a->name ,len, a->offset);
-    if(s) update_offsets(s->block->first,len);
-    a = a->next;
-  }
+    while(a)
+    {
+        grib_section* s = a->sub_section;
+        a->offset += len;
+        grib_context_log(a->context,GRIB_LOG_DEBUG, "::::: grib_buffer : accessor %s is moving by %d bytes to %ld",a->name ,len, a->offset);
+        if(s) update_offsets(s->block->first,len);
+        a = a->next;
+    }
 }
 
 static void update_offsets_after(grib_accessor* a,long len)
 {
-  while(a)
-  {
-    update_offsets(a->next,len);
-    a = a->parent->owner;
-  }
+    while(a)
+    {
+        update_offsets(a->next,len);
+        a = a->parent->owner;
+    }
 }
 
 #if 0
 /* new GCC compiler v4.5.0 complains function is defined but not used*/
 void grib_recompute_sections_lengths(grib_section* s)
 {
-  if(s)
-  {
-    long   plen = 0;
-    size_t  len = 1;
+    if(s)
+    {
+        long   plen = 0;
+        size_t  len = 1;
 
-    grib_accessor* a = s->block->first;
+        grib_accessor* a = s->block->first;
 
-    while(a)
-    {
-      /* grib_recompute_sections_lengths(grib_get_sub_section(a)); */
-      grib_recompute_sections_lengths(a->sub_section);
-      a = a->next;
-    }
+        while(a)
+        {
+            /* grib_recompute_sections_lengths(grib_get_sub_section(a)); */
+            grib_recompute_sections_lengths(a->sub_section);
+            a = a->next;
+        }
 
-    if(s->aclength)
-    {
-      int ret;
-      if(s->owner)
-        plen = grib_get_next_position_offset(s->block->last) - s->owner->offset;
-      else
-        plen = grib_get_next_position_offset(s->block->last);
+        if(s->aclength)
+        {
+            int ret;
+            if(s->owner)
+                plen = grib_get_next_position_offset(s->block->last) - s->owner->offset;
+            else
+                plen = grib_get_next_position_offset(s->block->last);
 
-      if((ret = grib_pack_long(s->aclength, &plen, &len)) != GRIB_SUCCESS)
-        ;
+            if((ret = grib_pack_long(s->aclength, &plen, &len)) != GRIB_SUCCESS)
+                ;
 
 #if 0
-      if(s->h->context->debug)
-        printf("SECTION updating length %ld .. %s\n",plen,s->owner->name);
+            if(s->h->context->debug)
+                printf("SECTION updating length %ld .. %s\n",plen,s->owner->name);
 #endif
 
+        }
     }
-  }
 }
 #endif
 
@@ -182,89 +182,88 @@ void grib_recompute_sections_lengths(grib_section* s)
 /* new GCC compiler v4.5.0 complains function is defined but not used*/
 static void update_sections_lengths(grib_section* s)
 {
-  long   plen = 0;
-  size_t  len = 1;
+    long   plen = 0;
+    size_t  len = 1;
 
-  if(!s) return;
+    if(!s) return;
 
 
-  if(s->aclength)
-  {
-    int ret;
+    if(s->aclength)
+    {
+        int ret;
+        if(s->owner)
+            plen = grib_get_next_position_offset(s->block->last) - s->owner->offset;
+        else
+            plen = grib_get_next_position_offset(s->block->last);
+
+        /* if(s->owner) */
+        /* s->owner->length = plen; */
+
+        /* if(s->aclength)  */
+        if((ret = grib_pack_long(s->aclength, &plen, &len)) != GRIB_SUCCESS)
+            ;
+
+        if(s->h->context->debug)
+        {
+            printf("SECTION updating length %ld .. %s\n",plen,s->owner->name);
+            printf("NEXT_POS = %ld, owner offset= %ld %s %s\n",
+                    grib_get_next_position_offset(s->block->last),
+                    s->owner ? s->owner->offset : 0L, s->owner->name,
+                            s->block->last->name);
+        }
+    }
+
     if(s->owner)
-      plen = grib_get_next_position_offset(s->block->last) - s->owner->offset;
-    else
-      plen = grib_get_next_position_offset(s->block->last);
-
-    /* if(s->owner) */
-      /* s->owner->length = plen; */
-
-  /* if(s->aclength)  */
-    if((ret = grib_pack_long(s->aclength, &plen, &len)) != GRIB_SUCCESS)
-      ;
-
-     if(s->h->context->debug)
-     {
-      printf("SECTION updating length %ld .. %s\n",plen,s->owner->name);
-      printf("NEXT_POS = %ld, owner offset= %ld %s %s\n",
-          grib_get_next_position_offset(s->block->last),
-          s->owner ? s->owner->offset : 0L, s->owner->name,
-          s->block->last->name);
-     }
-  }
-
-  if(s->owner)
-    update_sections_lengths(s->owner->parent);
+        update_sections_lengths(s->owner->parent);
 
 }
 #endif
 
 
 void grib_buffer_replace( grib_accessor *a, const unsigned char* data,
-                          size_t newsize,int update_lengths,int update_paddings)
+        size_t newsize,int update_lengths,int update_paddings)
 {
-  size_t offset   = a->offset;
-  long   oldsize  = grib_get_next_position_offset(a)-offset;
-  long   increase = (long)newsize - (long)oldsize;
+    size_t offset   = a->offset;
+    long   oldsize  = grib_get_next_position_offset(a)-offset;
+    long   increase = (long)newsize - (long)oldsize;
 
-  grib_buffer *buffer     = grib_handle_of_accessor(a)->buffer;
-  size_t message_length   = buffer->ulength;
+    grib_buffer *buffer     = grib_handle_of_accessor(a)->buffer;
+    size_t message_length   = buffer->ulength;
 
-  grib_context_log(a->context,GRIB_LOG_DEBUG,
-     "grib_buffer_replace %s offset=%ld oldsize=%ld newsize=%ld message_length=%ld update_paddings=%d\n",
-      a->name,(long)offset,oldsize,(long)newsize,(long)message_length,update_paddings);
+    grib_context_log(a->context,GRIB_LOG_DEBUG,
+            "grib_buffer_replace %s offset=%ld oldsize=%ld newsize=%ld message_length=%ld update_paddings=%d",
+            a->name,(long)offset,oldsize,(long)newsize,(long)message_length,update_paddings);
 
     grib_buffer_set_ulength(a->context,
-        buffer,
-        buffer->ulength+increase);
+            buffer,
+            buffer->ulength+increase);
 
-  /* move the end */
-  if(increase)
-    memmove(
-      buffer->data + offset + newsize,
-      buffer->data + offset + oldsize,
-      message_length - offset - oldsize);
+    /* move the end */
+    if(increase)
+        memmove(
+                buffer->data + offset + newsize,
+                buffer->data + offset + oldsize,
+                message_length - offset - oldsize);
 
-  /* copy new data */
+    /* copy new data */
 
-  memcpy(buffer->data + offset, data, newsize);
+    memcpy(buffer->data + offset, data, newsize);
 
-  if(increase)
-  {
-    update_offsets_after(a,increase);
-    if(update_lengths)
+    if(increase)
     {
-      grib_update_size(a,newsize);
-      grib_section_adjust_sizes(grib_handle_of_accessor(a)->root,1,0);
-      if(update_paddings)
-        grib_update_paddings(grib_handle_of_accessor(a)->root);
+        update_offsets_after(a,increase);
+        if(update_lengths)
+        {
+            grib_update_size(a,newsize);
+            grib_section_adjust_sizes(grib_handle_of_accessor(a)->root,1,0);
+            if(update_paddings)
+                grib_update_paddings(grib_handle_of_accessor(a)->root);
+        }
     }
-  }
-
 }
 
-void grib_update_sections_lengths(grib_handle* h) {
-  grib_section_adjust_sizes(h->root,2,0);
+void grib_update_sections_lengths(grib_handle* h)
+{
+    grib_section_adjust_sizes(h->root,2,0);
     grib_update_paddings(h->root);
 }
-
diff --git a/src/grib_bufr_descriptor.c b/src/grib_bufr_descriptor.c
index 5b7f133..cc7268e 100644
--- a/src/grib_bufr_descriptor.c
+++ b/src/grib_bufr_descriptor.c
@@ -103,6 +103,12 @@ void grib_bufr_descriptor_set_scale(bufr_descriptor* v,long scale) {
   v->factor=grib_power(-scale,10);
 }
 
+int grib_bufr_descriptor_can_be_missing(bufr_descriptor* v) {
+  if (v->code==31031 || v->code==999999 ) return 0;
+  if (v->width == 1) return 0;
+  return 1;
+}
+
 void grib_bufr_descriptor_delete(bufr_descriptor* v) {
 
   grib_context* c=NULL;
diff --git a/src/grib_context.c b/src/grib_context.c
index 395ae1d..3059e18 100644
--- a/src/grib_context.c
+++ b/src/grib_context.c
@@ -83,6 +83,7 @@ static void* default_long_lasting_malloc(const grib_context* c, size_t size)
     cntp++;
     GRIB_MUTEX_UNLOCK(&mutex_mem);
     ret=malloc(size);
+    Assert(ret);
     return ret;
 }
 
@@ -103,6 +104,7 @@ static void* default_buffer_malloc(const grib_context* c, size_t size)
     cntp++;
     GRIB_MUTEX_UNLOCK(&mutex_mem);
     ret=malloc(size);
+    Assert(ret);
     return ret;
 }
 
@@ -110,6 +112,7 @@ static void* default_buffer_realloc(const grib_context* c, void* p, size_t size)
 {
     void* ret;
     ret=realloc(p,size);
+    Assert(ret);
     return ret;
 }
 
@@ -130,6 +133,7 @@ static void* default_malloc(const grib_context* c, size_t size)
     cnt++;
     GRIB_MUTEX_UNLOCK(&mutex_mem);
     ret=malloc(size);
+    Assert(ret);
     return ret;
 }
 
@@ -137,6 +141,7 @@ static void* default_realloc(const grib_context* c, void* p, size_t size)
 {
     void* ret;
     ret=realloc(p,size);
+    Assert(ret);
     return ret;
 }
 #endif
@@ -624,7 +629,7 @@ char *grib_context_full_defs_path(grib_context* c,const char* basename)
 
         while (dir) {
             sprintf(full,"%s/%s",dir->value,basename);
-            if (!access(full,F_OK)) {
+            if (!codes_access(full,F_OK)) {
                 fullpath=(grib_string_list*)grib_context_malloc_clear_persistent(c,sizeof(grib_string_list));
                 Assert(fullpath);
                 fullpath->value=grib_context_strdup(c,full);
@@ -652,6 +657,11 @@ char* grib_samples_path(const grib_context *c)
     if (!c) c=grib_context_get_default();
     return c->grib_samples_path;
 }
+char* grib_definition_path(const grib_context *c)
+{
+    if (!c) c=grib_context_get_default();
+    return c->grib_definition_files_path;
+}
 
 void grib_context_free(const grib_context* c, void* p)
 {
@@ -721,6 +731,29 @@ void grib_context_delete( grib_context* c)
         grib_context_free_persistent(&default_grib_context,c);
 }
 
+void grib_context_set_definitions_path(grib_context* c, const char* path)
+{
+    if (!c) c=grib_context_get_default();
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&mutex_c);
+
+    c->grib_definition_files_path = strdup(path);
+    grib_context_log(c, GRIB_LOG_DEBUG, "Definitions path changed to: %s", c->grib_definition_files_path);
+
+    GRIB_MUTEX_UNLOCK(&mutex_c);
+}
+void grib_context_set_samples_path(grib_context* c, const char* path)
+{
+    if (!c) c=grib_context_get_default();
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&mutex_c);
+
+    c->grib_samples_path = strdup(path);
+    grib_context_log(c, GRIB_LOG_DEBUG, "Samples path changed to: %s",  c->grib_samples_path);
+
+    GRIB_MUTEX_UNLOCK(&mutex_c);
+}
+
 void* grib_context_malloc_persistent(const grib_context* c, size_t size)
 {
     void* p =  c->alloc_persistent_mem(c,size);
@@ -763,10 +796,9 @@ void* grib_context_realloc(const grib_context* c, void *p,size_t size)
     void* q;
     if (!c) c=grib_context_get_default();
     q=c->realloc_mem(c,p,size);
-
     if(!q) {
         grib_context_log(c,GRIB_LOG_FATAL,"grib_context_realloc: error allocating %lu bytes",(unsigned long)size);
-        exit(1);
+        return NULL;
     }
     return q;
 }
@@ -796,7 +828,7 @@ void* grib_context_buffer_malloc(const grib_context* c, size_t size)
     else p=c->alloc_buffer_mem(c,size);
     if(!p) {
         grib_context_log(c,GRIB_LOG_FATAL,"grib_context_buffer_malloc: error allocating %lu bytes",(unsigned long)size);
-        exit(1);
+        return NULL;
     }
     return p;
 }
@@ -810,10 +842,9 @@ void grib_context_buffer_free(const grib_context* c, void* p)
 void* grib_context_buffer_realloc(const grib_context* c, void *p,size_t size)
 {
     void* q=c->realloc_buffer_mem(c,p,size);
-
     if(!q) {
         grib_context_log(c,GRIB_LOG_FATAL,"grib_context_buffer_realloc: error allocating %lu bytes",(unsigned long)size);
-        exit(1);
+        return NULL;
     }
     return q;
 }
@@ -901,3 +932,40 @@ void grib_context_print(const grib_context *c, void* descriptor,const char* fmt,
     va_end(list);
     c->print(c,descriptor,msg);
 }
+
+void grib_context_set_handle_file_count(grib_context *c, int new_count)
+{
+    if (!c) c=grib_context_get_default();
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&mutex_c);
+    c->handle_file_count = new_count;
+    GRIB_MUTEX_UNLOCK(&mutex_c);
+}
+
+void grib_context_set_handle_total_count(grib_context *c, int new_count)
+{
+    if (!c) c=grib_context_get_default();
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&mutex_c);
+    c->handle_total_count = new_count;
+    GRIB_MUTEX_UNLOCK(&mutex_c);
+}
+
+void grib_context_increment_handle_file_count(grib_context *c)
+{
+    if (!c) c=grib_context_get_default();
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&mutex_c);
+    c->handle_file_count++;
+    GRIB_MUTEX_UNLOCK(&mutex_c);
+}
+
+void grib_context_increment_handle_total_count(grib_context *c)
+{
+    if (!c) c=grib_context_get_default();
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&mutex_c);
+    c->handle_total_count++;
+    GRIB_MUTEX_UNLOCK(&mutex_c);
+}
+
diff --git a/src/grib_darray.c b/src/grib_darray.c
index 8065ef2..91ade77 100644
--- a/src/grib_darray.c
+++ b/src/grib_darray.c
@@ -16,6 +16,20 @@
 
 #include "grib_api_internal.h"
 
+grib_darray* grib_darray_new_from_array(grib_context* c,double* a,size_t size)
+{
+  size_t i;
+  grib_darray* v;
+
+  if (!c) c=grib_context_get_default();
+
+  v=grib_darray_new(c,size,100);
+  for (i=0;i<size;i++) v->v[i]=a[i];
+  v->n=size;
+  v->context=c;
+  return v;
+}
+
 grib_darray* grib_darray_new(grib_context* c,size_t size,size_t incsize) {
   grib_darray* v=NULL;
   if (!c) c=grib_context_get_default();
diff --git a/src/grib_dumper_class.c b/src/grib_dumper_class.c
index 686686d..966b5ca 100644
--- a/src/grib_dumper_class.c
+++ b/src/grib_dumper_class.c
@@ -31,77 +31,75 @@ static struct table_entry table[] =
 
 grib_dumper* grib_dumper_factory(const char* op, grib_handle* h, FILE* out, unsigned long option_flags,void* arg)
 {
-  int i;
-  for(i = 0; i < NUMBER(table) ; i++)
-    if(strcmp(op,table[i].type) == 0)
-    {
-      grib_dumper_class* c = *(table[i].cclass);
-      grib_dumper*       d = (grib_dumper*) grib_context_malloc_clear(h->context,c->size);
-      d->depth             = 0;
-      d->handle            = h;
-      d->cclass            = c;
-      d->option_flags           = option_flags;
-      d->arg               = arg;
-      d->out               = out;
-      grib_init_dumper(d);
-      grib_context_log(h->context,GRIB_LOG_DEBUG,"Creating dumper of type : %s ", op);
-      return d;
-    }
-  grib_context_log(h->context,GRIB_LOG_ERROR,"Unknown type : %s for dumper", op);
-  return NULL;
+    int i;
+    for(i = 0; i < NUMBER(table) ; i++)
+        if(strcmp(op,table[i].type) == 0)
+        {
+            grib_dumper_class* c = *(table[i].cclass);
+            grib_dumper*       d = (grib_dumper*) grib_context_malloc_clear(h->context,c->size);
+            d->depth             = 0;
+            d->handle            = h;
+            d->cclass            = c;
+            d->option_flags           = option_flags;
+            d->arg               = arg;
+            d->out               = out;
+            grib_init_dumper(d);
+            grib_context_log(h->context,GRIB_LOG_DEBUG,"Creating dumper of type : %s ", op);
+            return d;
+        }
+    grib_context_log(h->context,GRIB_LOG_ERROR,"Unknown type : %s for dumper", op);
+    return NULL;
 }
 
 void grib_dump_accessors_block(grib_dumper* dumper,grib_block_of_accessors* block)
 {
-  grib_accessor* a = block->first;
-  while(a)
-  {
-    grib_accessor_dump(a,dumper);
-    a = a->next;
-  }
+    grib_accessor* a = block->first;
+    while(a)
+    {
+        grib_accessor_dump(a,dumper);
+        a = a->next;
+    }
 }
 
 void grib_dump_accessors_list(grib_dumper* dumper,grib_accessors_list* al)
 {
-  grib_accessors_list* cur=al;
-  grib_accessors_list* next=al->next;
-
-  while(next) {
-    grib_accessor_dump(cur->accessor,dumper);
-    cur=next;
-    next=cur->next;
-  }
+    grib_accessors_list* cur=al;
+    grib_accessors_list* next=al->next;
 
+    while(next) {
+        grib_accessor_dump(cur->accessor,dumper);
+        cur=next;
+        next=cur->next;
+    }
 }
 
-int grib_print       (grib_handle* h, const char* name, grib_dumper *d ){
-
-  grib_accessor* act = grib_find_accessor(h, name);
+int grib_print(grib_handle* h, const char* name, grib_dumper *d ){
 
-  if(act){
-    grib_accessor_dump(act, d );
-    return  GRIB_SUCCESS;
-  }
-  return GRIB_NOT_FOUND;
+    grib_accessor* act = grib_find_accessor(h, name);
+    if(act){
+        grib_accessor_dump(act, d );
+        return  GRIB_SUCCESS;
+    }
+    return GRIB_NOT_FOUND;
 }
 
-
 void grib_dump_content(grib_handle* h, FILE* f,const char* mode,unsigned long option_flags,void *data)
 {
-  grib_dumper *dumper;
-  dumper =  grib_dumper_factory(mode?mode:"serialize",h,f,option_flags,data);
-  grib_dump_header(dumper,h);
-  grib_dump_accessors_block(dumper,h->root->block);
-  grib_dump_footer(dumper,h);
-  grib_dumper_delete(dumper);
+    grib_dumper *dumper;
+    dumper =  grib_dumper_factory(mode?mode:"serialize",h,f,option_flags,data);
+    grib_dump_header(dumper,h);
+    grib_dump_accessors_block(dumper,h->root->block);
+    grib_dump_footer(dumper,h);
+    grib_dumper_delete(dumper);
 }
 
-void grib_dump_bufr_flat(grib_accessors_list* al,grib_handle* h, FILE* f,const char* mode,unsigned long option_flags,void *data)
+void codes_dump_bufr_flat(grib_accessors_list* al,grib_handle* h, FILE* f,const char* mode,unsigned long option_flags,void *data)
 {
-  grib_dumper *dumper;
-  dumper =  grib_dumper_factory(mode?mode:"serialize",h,f,option_flags,data);
-  grib_dump_header(dumper,h);
-  grib_dump_accessors_list(dumper,al);
-  grib_dump_footer(dumper,h);
-  grib_dumper_delete(dumper);
+    grib_dumper* dumper = NULL;
+    Assert(h->product_kind == PRODUCT_BUFR);
+    dumper = grib_dumper_factory(mode?mode:"serialize",h,f,option_flags,data);
+    grib_dump_header(dumper,h);
+    grib_dump_accessors_list(dumper,al);
+    grib_dump_footer(dumper,h);
+    grib_dumper_delete(dumper);
 }
diff --git a/src/grib_dumper_class_default.c b/src/grib_dumper_class_default.c
index 8906278..a1aba85 100644
--- a/src/grib_dumper_class_default.c
+++ b/src/grib_dumper_class_default.c
@@ -96,126 +96,126 @@ static void init_class      (grib_dumper_class* c){}
 
 static int  init(grib_dumper* d)
 {
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  self->section_offset=0;
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    self->section_offset=0;
 
-  return GRIB_SUCCESS;
+    return GRIB_SUCCESS;
 }
 
 static int  destroy  (grib_dumper* d){
-  return GRIB_SUCCESS;
+    return GRIB_SUCCESS;
 }
 
 
 static void aliases(grib_dumper* d,grib_accessor* a)
 {
-int i;
-  grib_dumper_default *self = (grib_dumper_default*)d;
+    int i;
+    grib_dumper_default *self = (grib_dumper_default*)d;
 
-  if( (d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0)
-    return;
+    if( (d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0)
+        return;
 
-  if(a->all_names[1])
-  {
-    char *sep = "";
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# ALIASES: ");
-
-    for(i = 1; i < MAX_ACCESSOR_NAMES; i++)
+    if(a->all_names[1])
     {
-      if(a->all_names[i])
-      {
-        if(a->all_name_spaces[i])
-          fprintf(self->dumper.out,"%s%s.%s", sep,a->all_name_spaces[i],a->all_names[i]);
-        else
-          fprintf(self->dumper.out,"%s%s", sep,a->all_names[i]);
-      }
-    sep = ", ";
+        char *sep = "";
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# ALIASES: ");
+
+        for(i = 1; i < MAX_ACCESSOR_NAMES; i++)
+        {
+            if(a->all_names[i])
+            {
+                if(a->all_name_spaces[i])
+                    fprintf(self->dumper.out,"%s%s.%s", sep,a->all_name_spaces[i],a->all_names[i]);
+                else
+                    fprintf(self->dumper.out,"%s%s", sep,a->all_names[i]);
+            }
+            sep = ", ";
+        }
+        fprintf(self->dumper.out,"\n");
     }
-    fprintf(self->dumper.out,"\n");
-  }
 }
 
 static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  long value; size_t size = 1;
-  long *values=NULL;
-  int err = 0;
-  int i;
-  long count=0;
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    long value; size_t size = 1;
+    long *values=NULL;
+    int err = 0;
+    int i;
+    long count=0;
 
-  grib_value_count(a,&count);
-  size=count;
+    grib_value_count(a,&count);
+    size=count;
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
+        return;
 
-  print_offset(self->dumper.out,d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0){
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
-
-  if (size>1) {
-    values=(long *)grib_context_malloc_clear(a->context,sizeof(long)*size);
-    err=grib_unpack_long(a,values,&size);
-  } else {
-    err=grib_unpack_long(a,&value,&size);
-  }
-
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0){
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
-    fprintf(self->dumper.out,"  ");
+    if (size>1) {
+        values=(long *)grib_context_malloc_clear(a->context,sizeof(long)*size);
+        err=grib_unpack_long(a,values,&size);
+    } else {
+        err=grib_unpack_long(a,&value,&size);
+    }
 
-  if (size>1) {
-    int cols=19;
-    int count=0;
-    fprintf(self->dumper.out,"%s = { \t",a->name);
-    for (i=0;i<size;i++) {
-        if (count>cols) {fprintf(self->dumper.out,"\n\t\t\t\t");count=0;}
-        fprintf(self->dumper.out,"%ld ",values[i]);
-        count++;
-    }
-    fprintf(self->dumper.out,"}\n");
-    grib_context_free(a->context,values);
-  } else {
-	  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
-		fprintf(self->dumper.out,"%s = MISSING;",a->name);
-	  else
-		fprintf(self->dumper.out,"%s = %ld;",a->name,value);
-  }
-
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_long]",err,grib_get_error_message(err));
-  }
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
+
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
+
+    if (size>1) {
+        int cols=19;
+        int icount=0;
+        fprintf(self->dumper.out,"%s = { \t",a->name);
+        for (i=0;i<size;i++) {
+            if (icount>cols) {fprintf(self->dumper.out,"\n\t\t\t\t");icount=0;}
+            fprintf(self->dumper.out,"%ld ",values[i]);
+            icount++;
+        }
+        fprintf(self->dumper.out,"}\n");
+        grib_context_free(a->context,values);
+    } else {
+        if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
+            fprintf(self->dumper.out,"%s = MISSING;",a->name);
+        else
+            fprintf(self->dumper.out,"%s = %ld;",a->name,value);
+    }
+
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_long]",err,grib_get_error_message(err));
+    }
 
-  fprintf(self->dumper.out,"\n");
+    fprintf(self->dumper.out,"\n");
 }
 
 static int test_bit(long a, long b) {return a&(1<<b);}
 
 static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  int i;
-  long lvalue;
-  double dvalue;
-  size_t size = 1;
-  int err = 0;
-  int isDouble=0;
-
-  switch (grib_accessor_get_native_type(a)) {
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    int i;
+    long lvalue;
+    double dvalue;
+    size_t size = 1;
+    int err = 0;
+    int isDouble=0;
+
+    switch (grib_accessor_get_native_type(a)) {
     case GRIB_TYPE_LONG:
         grib_unpack_long(a,&lvalue,&size);
         break;
@@ -225,398 +225,398 @@ static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment)
         break;
     default:
         break;
-  }
+    }
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
+        return;
 
-  print_offset(self->dumper.out,d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
-
-  fprintf(self->dumper.out,"  ");
-  fprintf(self->dumper.out,"# flags: ");
-  for(i=0;i<(a->length*8);i++) {
-    if(test_bit(lvalue,a->length*8-i-1))
-      fprintf(self->dumper.out,"1");
-    else
-      fprintf(self->dumper.out,"0");
-  }
-  fprintf(self->dumper.out,"\n");
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
     fprintf(self->dumper.out,"  ");
+    fprintf(self->dumper.out,"# flags: ");
+    for(i=0;i<(a->length*8);i++) {
+        if(test_bit(lvalue,a->length*8-i-1))
+            fprintf(self->dumper.out,"1");
+        else
+            fprintf(self->dumper.out,"0");
+    }
+    fprintf(self->dumper.out,"\n");
 
-  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
-    fprintf(self->dumper.out,"%s = MISSING;",a->name);
-  else {
-    if (isDouble) 
-        fprintf(self->dumper.out,"%s = %g;",a->name,dvalue);
-  else
-        fprintf(self->dumper.out,"%s = %ld;",a->name,lvalue);
-  }
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
 
+    if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
+        fprintf(self->dumper.out,"%s = MISSING;",a->name);
+    else {
+        if (isDouble)
+            fprintf(self->dumper.out,"%s = %g;",a->name,dvalue);
+        else
+            fprintf(self->dumper.out,"%s = %ld;",a->name,lvalue);
+    }
 
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_bits]",err,grib_get_error_message(err));
-  }
 
-  fprintf(self->dumper.out,"\n");
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_bits]",err,grib_get_error_message(err));
+    }
+
+    fprintf(self->dumper.out,"\n");
 }
 
 static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  double value; size_t size = 1;
-  int err = grib_unpack_double(a,&value,&size);
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    double value; size_t size = 1;
+    int err = grib_unpack_double(a,&value,&size);
 
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
+        return;
 
-  print_offset(self->dumper.out,d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
 
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
-    fprintf(self->dumper.out,"  ");
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
 
-  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
-    fprintf(self->dumper.out,"%s = MISSING;",a->name);
-  else
-    fprintf(self->dumper.out,"%s = %g;",a->name,value);
+    if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
+        fprintf(self->dumper.out,"%s = MISSING;",a->name);
+    else
+        fprintf(self->dumper.out,"%s = %g;",a->name,value);
 
 
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_double]",err,grib_get_error_message(err));
-  }
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_double]",err,grib_get_error_message(err));
+    }
 
-  fprintf(self->dumper.out,"\n");
+    fprintf(self->dumper.out,"\n");
 }
 
 static void dump_string_array(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  char **values;
-  size_t size = 0,i=0;
-  grib_context* c=NULL;
-  int err = 0;
-  int tab=0;
-  long count=0;
-
-  c=a->context;
-
-  grib_value_count(a,&count);
-  size=count;
-  if (size==1) {
-    dump_string(d,a,comment);
-    return;
-  }
-
-  values=(char**)grib_context_malloc_clear(c,size*sizeof(char*));
-  if (!values) {
-  	grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
-	return;
-  }
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    char **values;
+    size_t size = 0,i=0;
+    grib_context* c=NULL;
+    int err = 0;
+    int tab=0;
+    long count=0;
+
+    c=a->context;
+
+    grib_value_count(a,&count);
+    size=count;
+    if (size==1) {
+        dump_string(d,a,comment);
+        return;
+    }
 
-  err = grib_unpack_string_array(a,values,&size);
+    values=(char**)grib_context_malloc_clear(c,size*sizeof(char*));
+    if (!values) {
+        grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
+        return;
+    }
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
-    return;
+    err = grib_unpack_string_array(a,values,&size);
 
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
+        return;
 
-  print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    print_offset(self->dumper.out,d,a);
 
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-    tab=13;
-  } else
-    fprintf(self->dumper.out,"  ");
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
 
-  tab++;
-  fprintf(self->dumper.out,"%s = {\n",a->name);
-  for  (i=0;i<size;i++) {
-      fprintf(self->dumper.out,"%-*s\"%s\",\n",(int)(tab+strlen(a->name)+4)," ",values[i]);
-  }
-  fprintf(self->dumper.out,"  }");
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+        tab=13;
+    } else
+        fprintf(self->dumper.out,"  ");
+
+    tab++;
+    fprintf(self->dumper.out,"%s = {\n",a->name);
+    for  (i=0;i<size;i++) {
+        fprintf(self->dumper.out,"%-*s\"%s\",\n",(int)(tab+strlen(a->name)+4)," ",values[i]);
+    }
+    fprintf(self->dumper.out,"  }");
 
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
-  }
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
+    }
 
-  fprintf(self->dumper.out,"\n");
-  grib_context_free(c,values);
+    fprintf(self->dumper.out,"\n");
+    grib_context_free(c,values);
 }
 
 static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  char *value=NULL; 
-  char *p = NULL;
-  size_t size = 0;
-  grib_context* c=NULL;
-  int err = _grib_get_string_length(a,&size);
-
-  c=a->context;
-  if (size==0) return;
-
-  value=(char*)grib_context_malloc_clear(c,size);
-  if (!value) {
-  	grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
-	return;
-  }
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    char *value=NULL;
+    char *p = NULL;
+    size_t size = 0;
+    grib_context* c=NULL;
+    int err = _grib_get_string_length(a,&size);
+
+    c=a->context;
+    if (size==0) return;
+
+    value=(char*)grib_context_malloc_clear(c,size);
+    if (!value) {
+        grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
+        return;
+    }
 
-  err = grib_unpack_string(a,value,&size);
-  p=value;
+    err = grib_unpack_string(a,value,&size);
+    p=value;
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
+        return;
 
-  while(*p) { if(!isprint(*p)) *p = '.'; p++; }
+    while(*p) { if(!isprint(*p)) *p = '.'; p++; }
 
-  print_offset(self->dumper.out,d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
-    fprintf(self->dumper.out,"  ");
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
 
-  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
-    fprintf(self->dumper.out,"%s = MISSING;",a->name);
-  else
-    fprintf(self->dumper.out,"%s = %s;",a->name,value);
+    if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
+        fprintf(self->dumper.out,"%s = MISSING;",a->name);
+    else
+        fprintf(self->dumper.out,"%s = %s;",a->name,value);
 
 
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_string]",err,grib_get_error_message(err));
-  }
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s) [grib_dumper_default::dump_string]",err,grib_get_error_message(err));
+    }
 
-  fprintf(self->dumper.out,"\n");
-  grib_context_free(c,value);
+    fprintf(self->dumper.out,"\n");
+    grib_context_free(c,value);
 }
 
 static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment)
 {
 
 #if 0
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  int i,k,err =0;
-  int more = 0;
-  size_t size = a->length;
-  unsigned char* buf = grib_context_malloc(d->handle->context,size);
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    int i,k,err =0;
+    int more = 0;
+    size_t size = a->length;
+    unsigned char* buf = grib_context_malloc(d->handle->context,size);
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
+        return;
 
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)
-    fprintf(self->dumper.out,"-READ ONLY- ");
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)
+        fprintf(self->dumper.out,"-READ ONLY- ");
 
-  /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
-  /*print_offset(self->dumper.out,self->begin,self->theEnd);*/
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
+    /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
+    /*print_offset(self->dumper.out,self->begin,self->theEnd);*/
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
         fprintf(self->dumper.out,"%s ",a->creator->op);
 
-  fprintf(self->dumper.out,"%s = %ld",a->name,a->length);
-  aliases(d,a);
-  fprintf(self->dumper.out," {");
+    fprintf(self->dumper.out,"%s = %ld",a->name,a->length);
+    aliases(d,a);
+    fprintf(self->dumper.out," {");
 
-  if(!buf)
-  {
-    if(size == 0)
-      fprintf(self->dumper.out,"}\n");
-    else
-      fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size);
-    return;
-  }
+    if(!buf)
+    {
+        if(size == 0)
+            fprintf(self->dumper.out,"}\n");
+        else
+            fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size);
+        return;
+    }
 
-  fprintf(self->dumper.out,"\n");
+    fprintf(self->dumper.out,"\n");
 
-  err = grib_unpack_bytes(a,buf,&size);
-  if(err){
-    grib_context_free(d->handle->context,buf);
-    fprintf(self->dumper.out," *** ERR=%d (%s)  [grib_dumper_default::dump_bytes]\n}",err,grib_get_error_message(err));
-    return ;
-  }
-
-  if(size > 100) {
-    more = size - 100;
-    size = 100;
-  }
-
-  k = 0;
-  /* if(size > 100) size = 100;  */
-  while(k < size)
-  {
-    int j;
-    for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");
-    for(j = 0; j < 16 && k < size; j++, k++)
+    err = grib_unpack_bytes(a,buf,&size);
+    if(err){
+        grib_context_free(d->handle->context,buf);
+        fprintf(self->dumper.out," *** ERR=%d (%s)  [grib_dumper_default::dump_bytes]\n}",err,grib_get_error_message(err));
+        return ;
+    }
+
+    if(size > 100) {
+        more = size - 100;
+        size = 100;
+    }
+
+    k = 0;
+    /* if(size > 100) size = 100;  */
+    while(k < size)
     {
-      fprintf(self->dumper.out,"%02x",buf[k]);
-      if(k != size-1)
-        fprintf(self->dumper.out,", ");
+        int j;
+        for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");
+        for(j = 0; j < 16 && k < size; j++, k++)
+        {
+            fprintf(self->dumper.out,"%02x",buf[k]);
+            if(k != size-1)
+                fprintf(self->dumper.out,", ");
+        }
+        fprintf(self->dumper.out,"\n");
     }
-    fprintf(self->dumper.out,"\n");
-  }
 
-  if(more)
-  {
-    for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");
-    fprintf(self->dumper.out,"... %d more values\n",more);
-  }
+    if(more)
+    {
+        for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");
+        fprintf(self->dumper.out,"... %d more values\n",more);
+    }
 
-  for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
-  fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name);
-  grib_context_free(d->handle->context,buf);
+    for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
+    fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name);
+    grib_context_free(d->handle->context,buf);
 #endif
 }
 
 static void dump_values(grib_dumper* d,grib_accessor* a)
 {
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  int k,err =0;
-  int more = 0;
-  double*  buf = NULL;
-  size_t size=0;
-  long count=0;
-
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
-    return;
-
-  grib_value_count(a,&count);
-  size=count;
-  if(size == 1){
-    dump_double(d,a,NULL);
-    return ;
-  }
-  buf = (double*)grib_context_malloc(d->handle->context,size * sizeof(double));
-
-   print_offset(self->dumper.out,d,a);
-
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    int k,err =0;
+    int more = 0;
+    double*  buf = NULL;
+    size_t size=0;
+    long count=0;
+
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
+        return;
+
+    grib_value_count(a,&count);
+    size=count;
+    if(size == 1){
+        dump_double(d,a,NULL);
+        return ;
+    }
+    buf = (double*)grib_context_malloc(d->handle->context,size * sizeof(double));
 
-  aliases(d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
-    fprintf(self->dumper.out,"  ");
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  fprintf(self->dumper.out,"%s(%ld) = ",a->name,(long)size);
-  aliases(d,a);
-  fprintf(self->dumper.out," {");
+    aliases(d,a);
 
-  if(!buf)
-  {
-    if(size == 0)
-      fprintf(self->dumper.out,"}\n");
-    else
-      fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size);
-    return;
-  }
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
+
+    fprintf(self->dumper.out,"%s(%ld) = ",a->name,(long)size);
+    aliases(d,a);
+    fprintf(self->dumper.out," {");
 
-  fprintf(self->dumper.out,"\n");
+    if(!buf)
+    {
+        if(size == 0)
+            fprintf(self->dumper.out,"}\n");
+        else
+            fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size);
+        return;
+    }
 
-  err =  grib_unpack_double(a,buf,&size);
+    fprintf(self->dumper.out,"\n");
 
-  if(err){
-    grib_context_free(d->handle->context,buf);
-    fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_default::dump_values]\n}",err,grib_get_error_message(err));
-    return ;
-  }
+    err =  grib_unpack_double(a,buf,&size);
 
-  if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 100) {
-    more = size - 100;
-    size = 100;
-  }
+    if(err){
+        grib_context_free(d->handle->context,buf);
+        fprintf(self->dumper.out," *** ERR=%d (%s) [grib_dumper_default::dump_values]\n}",err,grib_get_error_message(err));
+        return ;
+    }
 
-  k = 0;
-  while(k < size)  {
-#if 1
-    int j;
-    fprintf(self->dumper.out,"  ");
-    for(j = 0; j < 5 && k < size; j++, k++)  {
-      fprintf(self->dumper.out,"%g",buf[k]);
-      if(k != size-1)
-        fprintf(self->dumper.out,", ");
+    if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 100) {
+        more = size - 100;
+        size = 100;
     }
-    fprintf(self->dumper.out,"\n");
+
+    k = 0;
+    while(k < size)  {
+#if 1
+        int j;
+        fprintf(self->dumper.out,"  ");
+        for(j = 0; j < 5 && k < size; j++, k++)  {
+            fprintf(self->dumper.out,"%g",buf[k]);
+            if(k != size-1)
+                fprintf(self->dumper.out,", ");
+        }
+        fprintf(self->dumper.out,"\n");
 #else
 
-    fprintf(self->dumper.out,"%d %g\n",k,buf[k]);
+        fprintf(self->dumper.out,"%d %g\n",k,buf[k]);
 
 #endif
 
-  }  if(more)  {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"... %d more values\n",more);
-  }
+    }  if(more)  {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"... %d more values\n",more);
+    }
 
-  fprintf(self->dumper.out,"  ");
-  fprintf(self->dumper.out,"} \n");
-  grib_context_free(d->handle->context,buf);
+    fprintf(self->dumper.out,"  ");
+    fprintf(self->dumper.out,"} \n");
+    grib_context_free(d->handle->context,buf);
 }
 
 static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  /*grib_dumper_default *self = (grib_dumper_default*)d;
+    /*grib_dumper_default *self = (grib_dumper_default*)d;
 
   for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
   fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:"");*/
@@ -624,87 +624,87 @@ static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment)
 
 static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block)
 {
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  grib_section* s = a->sub_section;
-  int is_default_section=0;
-  char* upper=NULL;
-  char tmp[512];
-  char *p=NULL,*q=NULL;
-  if (!strncmp(a->name,"section",7)) is_default_section=1;
-  if (!strcmp(a->creator->op,"bufr_group")) { dump_long(d,a,NULL); }
-
-  /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
-  if (is_default_section) {
-    upper=(char*)malloc(strlen(a->name)+1);
-    p=(char*)a->name;
-    q=upper;
-    while (*p != '\0') {
-      *q=toupper(*p);
-      q++;
-      p++;
-    }
-    *q='\0';
-
-    sprintf(tmp,"%s ( length=%ld, padding=%ld )",upper,(long)s->length,(long)s->padding);
-    /*
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    grib_section* s = a->sub_section;
+    int is_default_section=0;
+    char* upper=NULL;
+    char tmp[512];
+    char *p=NULL,*q=NULL;
+    if (!strncmp(a->name,"section",7)) is_default_section=1;
+    if (!strcmp(a->creator->op,"bufr_group")) { dump_long(d,a,NULL); }
+
+    /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
+    if (is_default_section) {
+        upper=(char*)malloc(strlen(a->name)+1);
+        Assert(upper);
+        p=(char*)a->name;
+        q=upper;
+        while (*p != '\0') {
+            *q=toupper(*p);
+            q++;
+            p++;
+        }
+        *q='\0';
+
+        sprintf(tmp,"%s ( length=%ld, padding=%ld )",upper,(long)s->length,(long)s->padding);
+        /*
     fprintf(self->dumper.out,"#==============   %-38s   ==============\n",tmp);
-    */
-    free(upper);
-    self->section_offset=a->offset;
-  }
-
-  /*printf("------------- section_offset = %ld\n",self->section_offset);*/
-  d->depth += 3;
-  grib_dump_accessors_block(d,block);
-  d->depth -= 3;
-
-  /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
-  /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);*/
+         */
+        free(upper);
+        self->section_offset=a->offset;
+    }
+
+    /*printf("------------- section_offset = %ld\n",self->section_offset);*/
+    d->depth += 3;
+    grib_dump_accessors_block(d,block);
+    d->depth -= 3;
+
+    /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
+    /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);*/
 }
 
 static void print_offset(FILE* out,grib_dumper* d,grib_accessor* a) {
-  int i,k;
-  long offset;
-  long theBegin=0,theEnd=0;
-  size_t size=0,more=0;
-  grib_dumper_default *self = (grib_dumper_default*)d;
-  grib_handle* h=grib_handle_of_accessor(a);
-
-  theBegin=a->offset-self->section_offset+1;;
-  theEnd =grib_get_next_position_offset(a)-self->section_offset;
-
-  if ((d->option_flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length != 0) {
-    if (theBegin == theEnd) {
-      fprintf(self->dumper.out,"  ");
-      fprintf(out,"# Octet: ");
-      fprintf(out,"%ld" ,theBegin);
-    }
-    else {
-      fprintf(self->dumper.out,"  ");
-      fprintf(out,"# Octets: ");
-      fprintf(out,"%ld-%ld" ,theBegin,theEnd);
-    }
-    fprintf(out,"  = ");
-    size=a->length;
+    int i,k;
+    long offset;
+    long theBegin=0,theEnd=0;
+    size_t size=0,more=0;
+    grib_dumper_default *self = (grib_dumper_default*)d;
+    grib_handle* h=grib_handle_of_accessor(a);
+
+    theBegin=a->offset-self->section_offset+1;;
+    theEnd =grib_get_next_position_offset(a)-self->section_offset;
+
+    if ((d->option_flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length != 0) {
+        if (theBegin == theEnd) {
+            fprintf(self->dumper.out,"  ");
+            fprintf(out,"# Octet: ");
+            fprintf(out,"%ld" ,theBegin);
+        }
+        else {
+            fprintf(self->dumper.out,"  ");
+            fprintf(out,"# Octets: ");
+            fprintf(out,"%ld-%ld" ,theBegin,theEnd);
+        }
+        fprintf(out,"  = ");
+        size=a->length;
+
+        if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 112) {
+            more = size - 112;
+            size = 112;
+        }
+
+        k = 0;
+        while(k < size)  {
+            offset=a->offset;
+            for (i=0;i<14 && k<size;i++,k++) {
+                fprintf(out," 0x%.2X",h->buffer->data[offset]);
+                offset++;
+            }
+            if (k<size) fprintf(self->dumper.out,"\n  #");
+        }  if(more)  {
+            fprintf(self->dumper.out,"\n  #... %d more values\n",(int)more);
+        }
+        fprintf(self->dumper.out,"\n");
 
-    if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 112) {
-      more = size - 112;
-      size = 112;
     }
-
-    k = 0;
-    while(k < size)  {
-      offset=a->offset;
-      for (i=0;i<14 && k<size;i++,k++) {
-        fprintf(out," 0x%.2X",h->buffer->data[offset]);
-        offset++;
-      }
-      if (k<size) fprintf(self->dumper.out,"\n  #");
-    }  if(more)  {
-      fprintf(self->dumper.out,"\n  #... %d more values\n",(int)more);
-    }
-    fprintf(self->dumper.out,"\n");
-
-  }
 }
-
diff --git a/src/grib_dumper_class_json.c b/src/grib_dumper_class_json.c
index 5b59657..5f5e545 100644
--- a/src/grib_dumper_class_json.c
+++ b/src/grib_dumper_class_json.c
@@ -92,7 +92,8 @@ grib_dumper_class* grib_dumper_class_json = &_grib_dumper_class_json;
 /* END_CLASS_IMP */
 static void dump_attributes(grib_dumper* d,grib_accessor* a);
 
-GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) {
+GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b)
+{
     if (*a != *b) return 1;
     while((*a!=0 && *b!=0) &&  *(a) == *(b) ) {a++;b++;}
     return (*a==0 && *b==0) ? 0 : 1;
@@ -102,7 +103,7 @@ static int depth=0;
 
 static void init_class      (grib_dumper_class* c){}
 
-static int  init(grib_dumper* d)
+static int init(grib_dumper* d)
 {
     grib_dumper_json *self = (grib_dumper_json*)d;
     self->section_offset=0;
@@ -113,7 +114,7 @@ static int  init(grib_dumper* d)
     return GRIB_SUCCESS;
 }
 
-static int  destroy  (grib_dumper* d)
+static int destroy(grib_dumper* d)
 {
     return GRIB_SUCCESS;
 }
@@ -149,30 +150,30 @@ static void dump_values(grib_dumper* d,grib_accessor* a)
     self->empty=0;
 
     if (self->isLeaf==0) {
-      fprintf(self->dumper.out,"\n%-*s{\n",depth," ");
-      depth+=2;
-      fprintf(self->dumper.out,"%-*s",depth," ");
-      fprintf(self->dumper.out,"\"key\" : \"%s\",\n",a->name);
+        fprintf(self->dumper.out,"\n%-*s{\n",depth," ");
+        depth+=2;
+        fprintf(self->dumper.out,"%-*s",depth," ");
+        fprintf(self->dumper.out,"\"key\" : \"%s\",\n",a->name);
     }
 
     err = grib_set_double(h, "missingValue", missing_value);
     if (size>1) {
-        int count=0;
+        int icount=0;
         if (self->isLeaf==0) {
-          fprintf(self->dumper.out,"%-*s",depth," ");
-          fprintf(self->dumper.out,"\"value\" :\n");
+            fprintf(self->dumper.out,"%-*s",depth," ");
+            fprintf(self->dumper.out,"\"value\" :\n");
         }
         fprintf(self->dumper.out,"%-*s[",depth," ");
         depth+=2;
         for (i=0; i<size-1; ++i) {
-            if (count>cols || i==0) {fprintf(self->dumper.out,"\n%-*s",depth," ");count=0;}
+            if (icount>cols || i==0) {fprintf(self->dumper.out,"\n%-*s",depth," ");icount=0;}
             if (values[i] == missing_value)
                 fprintf(self->dumper.out,"null, ");
             else
                 fprintf(self->dumper.out,"%g, ", values[i]);
-            count++;
+            icount++;
         }
-        if (count>cols) fprintf(self->dumper.out,"\n%-*s",depth," ");
+        if (icount>cols) fprintf(self->dumper.out,"\n%-*s",depth," ");
         if (grib_is_missing_double(a,values[i]))
             fprintf(self->dumper.out, "%s ","null");
         else
@@ -184,8 +185,8 @@ static void dump_values(grib_dumper* d,grib_accessor* a)
         grib_context_free(a->context,values);
     } else {
         if (self->isLeaf==0) {
-          fprintf(self->dumper.out,"%-*s",depth," ");
-          fprintf(self->dumper.out,"\"value\" : ");
+            fprintf(self->dumper.out,"%-*s",depth," ");
+            fprintf(self->dumper.out,"\"value\" : ");
         }
         if( grib_is_missing_double(a,value) )
             fprintf(self->dumper.out,"null");
@@ -194,15 +195,14 @@ static void dump_values(grib_dumper* d,grib_accessor* a)
     }
 
     if (self->isLeaf==0) {
-      dump_attributes(d,a);
-      depth-=2;
-      fprintf(self->dumper.out,"\n%-*s}",depth," ");
+        dump_attributes(d,a);
+        depth-=2;
+        fprintf(self->dumper.out,"\n%-*s}",depth," ");
     }
-    
+
     (void)err; /* TODO */
 }
 
-
 static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
 {
     grib_dumper_json *self = (grib_dumper_json*)d;
@@ -232,30 +232,30 @@ static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
     self->empty=0;
 
     if (self->isLeaf==0) {
-      fprintf(self->dumper.out,"\n%-*s{\n",depth," ");
-      depth+=2;
-      fprintf(self->dumper.out,"%-*s",depth," ");
-      fprintf(self->dumper.out,"\"key\" : \"%s\",\n",a->name);
+        fprintf(self->dumper.out,"\n%-*s{\n",depth," ");
+        depth+=2;
+        fprintf(self->dumper.out,"%-*s",depth," ");
+        fprintf(self->dumper.out,"\"key\" : \"%s\",\n",a->name);
     }
 
     if (size>1) {
-        int count=0;
+        int icount=0;
         if (self->isLeaf==0) {
-          fprintf(self->dumper.out,"%-*s",depth," ");
-          fprintf(self->dumper.out,"\"value\" :\n");
+            fprintf(self->dumper.out,"%-*s",depth," ");
+            fprintf(self->dumper.out,"\"value\" :\n");
         }
         fprintf(self->dumper.out,"%-*s[",depth," ");
         depth+=2;
         for (i=0;i<size-1;i++) {
-            if (count>cols || i==0) {fprintf(self->dumper.out,"\n%-*s",depth," ");count=0;}
+            if (icount>cols || i==0) {fprintf(self->dumper.out,"\n%-*s",depth," ");icount=0;}
             if (grib_is_missing_long(a,values[i])) {
-              fprintf(self->dumper.out,"null, ");
+                fprintf(self->dumper.out,"null, ");
             } else {
-              fprintf(self->dumper.out,"%ld, ",values[i]);
+                fprintf(self->dumper.out,"%ld, ",values[i]);
             }
-            count++;
+            icount++;
         }
-        if (count>cols) fprintf(self->dumper.out,"\n%-*s",depth," ");
+        if (icount>cols) fprintf(self->dumper.out,"\n%-*s",depth," ");
         fprintf(self->dumper.out,"%ld ",values[i]);
 
         depth-=2;
@@ -264,8 +264,8 @@ static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
         grib_context_free(a->context,values);
     } else {
         if (self->isLeaf==0) {
-          fprintf(self->dumper.out,"%-*s",depth," ");
-          fprintf(self->dumper.out,"\"value\" : ");
+            fprintf(self->dumper.out,"%-*s",depth," ");
+            fprintf(self->dumper.out,"\"value\" : ");
         }
         if( grib_is_missing_long(a,value) )
             fprintf(self->dumper.out,"null");
@@ -275,9 +275,9 @@ static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
     }
 
     if (self->isLeaf==0) {
-      dump_attributes(d,a);
-      depth-=2;
-      fprintf(self->dumper.out,"\n%-*s}",depth," ");
+        dump_attributes(d,a);
+        depth-=2;
+        fprintf(self->dumper.out,"\n%-*s}",depth," ");
     }
     (void)err; /* TODO */
 }
@@ -301,13 +301,13 @@ static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment)
     self->empty=0;
 
     if (self->isLeaf==0) {
-      fprintf(self->dumper.out,"%-*s{\n",depth," ");
-      depth+=2;
-      fprintf(self->dumper.out,"%-*s",depth," ");
-      fprintf(self->dumper.out,"\"key\" : \"%s\",\n",a->name);
+        fprintf(self->dumper.out,"%-*s{\n",depth," ");
+        depth+=2;
+        fprintf(self->dumper.out,"%-*s",depth," ");
+        fprintf(self->dumper.out,"\"key\" : \"%s\",\n",a->name);
 
-      fprintf(self->dumper.out,"%-*s",depth," ");
-      fprintf(self->dumper.out,"\"value\" : ");
+        fprintf(self->dumper.out,"%-*s",depth," ");
+        fprintf(self->dumper.out,"\"value\" : ");
     }
 
     if( grib_is_missing_double(a,value) )
@@ -318,77 +318,77 @@ static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment)
     /* if (a->attributes[0]) fprintf(self->dumper.out,","); */
 
     if (self->isLeaf==0) {
-      dump_attributes(d,a);
-      depth-=2;
-      fprintf(self->dumper.out,"\n%-*s}",depth," ");
+        dump_attributes(d,a);
+        depth-=2;
+        fprintf(self->dumper.out,"\n%-*s}",depth," ");
     }
 }
 
 static void dump_string_array(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_json *self = (grib_dumper_json*)d;
-  char **values;
-  size_t size = 0,i=0;
-  grib_context* c=NULL;
-  int err = 0;
-  long count=0;
-
-  c=a->context;
-
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 )
-    return;
-
-  grib_value_count(a,&count);
-  size=count;
-  if (size==1) {
-    dump_string(d,a,comment);
-    return;
-  }
-
-  if (self->begin==0 && self->empty==0 && self->isAttribute==0) fprintf(self->dumper.out,",");
-  else self->begin=0;
-
-  if (self->isLeaf==0) {
-    fprintf(self->dumper.out,"\n%-*s{\n",depth," ");
+    grib_dumper_json *self = (grib_dumper_json*)d;
+    char **values;
+    size_t size = 0,i=0;
+    grib_context* c=NULL;
+    int err = 0;
+    long count=0;
+
+    c=a->context;
+
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0 )
+        return;
+
+    grib_value_count(a,&count);
+    size=count;
+    if (size==1) {
+        dump_string(d,a,comment);
+        return;
+    }
+
+    if (self->begin==0 && self->empty==0 && self->isAttribute==0) fprintf(self->dumper.out,",");
+    else self->begin=0;
+
+    if (self->isLeaf==0) {
+        fprintf(self->dumper.out,"\n%-*s{\n",depth," ");
+        depth+=2;
+        fprintf(self->dumper.out,"%-*s",depth," ");
+        fprintf(self->dumper.out,"\"key\" : \"%s\",\n",a->name);
+    }
+
+    self->empty=0;
+
+    values=(char**)grib_context_malloc_clear(c,size*sizeof(char*));
+    if (!values) {
+        grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
+        return;
+    }
+
+    err = grib_unpack_string_array(a,values,&size);
+
+    if (self->isLeaf==0) {
+        fprintf(self->dumper.out,"%-*s",depth," ");
+        fprintf(self->dumper.out,"\"value\" : ");
+    }
+    fprintf(self->dumper.out,"\n%-*s[",depth," ");
     depth+=2;
-    fprintf(self->dumper.out,"%-*s",depth," ");
-    fprintf(self->dumper.out,"\"key\" : \"%s\",\n",a->name);
-  }
-
-  self->empty=0;
-
-  values=(char**)grib_context_malloc_clear(c,size*sizeof(char*));
-  if (!values) {
-  	grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
-	return;
-  }
-
-  err = grib_unpack_string_array(a,values,&size);
-
-  if (self->isLeaf==0) {
-    fprintf(self->dumper.out,"%-*s",depth," ");
-    fprintf(self->dumper.out,"\"value\" : ");
-  }
-  fprintf(self->dumper.out,"\n%-*s[",depth," ");
-  depth+=2;
-  for  (i=0;i<size-1;i++) {
-      fprintf(self->dumper.out,"%-*s\"%s\",\n",depth," ",values[i]);
-  }
-  fprintf(self->dumper.out,"%-*s\"%s\"\n",depth," ",values[i]);
-
-  depth-=2;
-  fprintf(self->dumper.out,"\n%-*s]",depth," ");
+    for  (i=0;i<size-1;i++) {
+        fprintf(self->dumper.out,"%-*s\"%s\",\n",depth," ",values[i]);
+    }
+    fprintf(self->dumper.out,"%-*s\"%s\"\n",depth," ",values[i]);
+
+    depth-=2;
+    fprintf(self->dumper.out,"\n%-*s]",depth," ");
 
     /* if (a->attributes[0]) fprintf(self->dumper.out,","); */
 
-  if (self->isLeaf==0) {
-    dump_attributes(d,a);
-    depth-=2;
-    fprintf(self->dumper.out,"\n%-*s}",depth," ");
-  }
+    if (self->isLeaf==0) {
+        dump_attributes(d,a);
+        depth-=2;
+        fprintf(self->dumper.out,"\n%-*s}",depth," ");
+    }
 
-  grib_context_free(c,values);
-  (void)err; /* TODO */
+    grib_context_free(c,values);
+    (void)err; /* TODO */
 }
 
 static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment)
@@ -423,21 +423,21 @@ static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment)
     while(*p) { if(!isprint(*p)) *p = '.'; p++; }
 
     if (self->isLeaf==0) {
-      fprintf(self->dumper.out,"\n%-*s{",depth," ");
-      depth+=2;
-      fprintf(self->dumper.out,"\n%-*s",depth," ");
-      fprintf(self->dumper.out,"\"key\" : \"%s\",",a->name);
-      fprintf(self->dumper.out,"\n%-*s",depth," ");
-      fprintf(self->dumper.out,"\"value\" : ");
+        fprintf(self->dumper.out,"\n%-*s{",depth," ");
+        depth+=2;
+        fprintf(self->dumper.out,"\n%-*s",depth," ");
+        fprintf(self->dumper.out,"\"key\" : \"%s\",",a->name);
+        fprintf(self->dumper.out,"\n%-*s",depth," ");
+        fprintf(self->dumper.out,"\"value\" : ");
     }
     fprintf(self->dumper.out,"\"%s\"",value);
 
     /* if (a->attributes[0]) fprintf(self->dumper.out,","); */
 
     if (self->isLeaf==0) {
-      dump_attributes(d,a);
-      depth-=2;
-      fprintf(self->dumper.out,"\n%-*s}",depth," ");
+        dump_attributes(d,a);
+        depth-=2;
+        fprintf(self->dumper.out,"\n%-*s}",depth," ");
     }
 
     grib_context_free(c,value);
@@ -454,76 +454,77 @@ static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment)
 
 static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block)
 {
-  grib_dumper_json *self = (grib_dumper_json*)d;
-  if (!grib_inline_strcmp(a->name,"BUFR") ||
-      !grib_inline_strcmp(a->name,"GRIB") ||
-      !grib_inline_strcmp(a->name,"META")
-     ) {
-    depth=2;
-    fprintf(self->dumper.out,"%-*s",depth," ");
-    fprintf(self->dumper.out,"[\n");
-    self->begin=1;
-    self->empty=1;
-    depth+=2;
-    grib_dump_accessors_block(d,block);
-    depth-=2;
-    fprintf(self->dumper.out,"\n]\n");
-  } else if (!grib_inline_strcmp(a->name,"groupNumber")) {
-    if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
-      return;
-    if (!self->empty) fprintf(self->dumper.out,",\n");
-    fprintf(self->dumper.out,"%-*s",depth," ");
-
-    fprintf(self->dumper.out,"[");
-
-    fprintf(self->dumper.out,"\n");
-    /* fprintf(self->dumper.out,"%-*s",depth," "); */
-    self->begin=1;
-    self->empty=1;
-    depth+=2;
-    grib_dump_accessors_block(d,block);
-    depth-=2;
-    fprintf(self->dumper.out,"\n");
-    fprintf(self->dumper.out,"%-*s",depth," ");
-    fprintf(self->dumper.out,"]");
-  } else {
-    grib_dump_accessors_block(d,block);
-  }
+    grib_dumper_json *self = (grib_dumper_json*)d;
+    if (!grib_inline_strcmp(a->name,"BUFR") ||
+            !grib_inline_strcmp(a->name,"GRIB") ||
+            !grib_inline_strcmp(a->name,"META")
+    ) {
+        depth=2;
+        fprintf(self->dumper.out,"%-*s",depth," ");
+        fprintf(self->dumper.out,"[\n");
+        self->begin=1;
+        self->empty=1;
+        depth+=2;
+        grib_dump_accessors_block(d,block);
+        depth-=2;
+        fprintf(self->dumper.out,"\n]\n");
+    } else if (!grib_inline_strcmp(a->name,"groupNumber")) {
+        if ( (a->flags & GRIB_ACCESSOR_FLAG_DUMP) == 0)
+            return;
+        if (!self->empty) fprintf(self->dumper.out,",\n");
+        fprintf(self->dumper.out,"%-*s",depth," ");
+
+        fprintf(self->dumper.out,"[");
+
+        fprintf(self->dumper.out,"\n");
+        /* fprintf(self->dumper.out,"%-*s",depth," "); */
+        self->begin=1;
+        self->empty=1;
+        depth+=2;
+        grib_dump_accessors_block(d,block);
+        depth-=2;
+        fprintf(self->dumper.out,"\n");
+        fprintf(self->dumper.out,"%-*s",depth," ");
+        fprintf(self->dumper.out,"]");
+    } else {
+        grib_dump_accessors_block(d,block);
+    }
 }
 
-static void dump_attributes(grib_dumper* d,grib_accessor* a) {
-  int i=0;
-  grib_dumper_json *self = (grib_dumper_json*)d;
-  FILE* out=self->dumper.out;
-  unsigned long flags;
-  while (a->attributes[i] && i < MAX_ACCESSOR_ATTRIBUTES) {
-    self->isAttribute=1;
-    if (  (d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES ) == 0
-       && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP)== 0 )
-    {
-      i++;
-      continue;
-    }
-    self->isLeaf=a->attributes[i]->attributes[0]==NULL ? 1 : 0;
-    fprintf(self->dumper.out,",");
-    fprintf(self->dumper.out,"\n%-*s",depth," ");
-    fprintf(out,"\"%s\" : ",a->attributes[i]->name);
-    flags=a->attributes[i]->flags;
-    a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP;
-    switch (grib_accessor_get_native_type(a->attributes[i])) {
-      case GRIB_TYPE_LONG:
-        dump_long(d,a->attributes[i],0);
-        break;
-      case GRIB_TYPE_DOUBLE:
-        dump_values(d,a->attributes[i]);
-        break;
-      case GRIB_TYPE_STRING:
-        dump_string_array(d,a->attributes[i],0);
-        break;
+static void dump_attributes(grib_dumper* d,grib_accessor* a)
+{
+    int i=0;
+    grib_dumper_json *self = (grib_dumper_json*)d;
+    FILE* out=self->dumper.out;
+    unsigned long flags;
+    while (a->attributes[i] && i < MAX_ACCESSOR_ATTRIBUTES) {
+        self->isAttribute=1;
+        if (  (d->option_flags & GRIB_DUMP_FLAG_ALL_ATTRIBUTES ) == 0
+                && (a->attributes[i]->flags & GRIB_ACCESSOR_FLAG_DUMP)== 0 )
+        {
+            i++;
+            continue;
+        }
+        self->isLeaf=a->attributes[i]->attributes[0]==NULL ? 1 : 0;
+        fprintf(self->dumper.out,",");
+        fprintf(self->dumper.out,"\n%-*s",depth," ");
+        fprintf(out,"\"%s\" : ",a->attributes[i]->name);
+        flags=a->attributes[i]->flags;
+        a->attributes[i]->flags |= GRIB_ACCESSOR_FLAG_DUMP;
+        switch (grib_accessor_get_native_type(a->attributes[i])) {
+        case GRIB_TYPE_LONG:
+            dump_long(d,a->attributes[i],0);
+            break;
+        case GRIB_TYPE_DOUBLE:
+            dump_values(d,a->attributes[i]);
+            break;
+        case GRIB_TYPE_STRING:
+            dump_string_array(d,a->attributes[i],0);
+            break;
+        }
+        a->attributes[i]->flags=flags;
+        i++;
     }
-    a->attributes[i]->flags=flags;
-    i++;
-  }
-  self->isLeaf=0;
-  self->isAttribute=0;
+    self->isLeaf=0;
+    self->isAttribute=0;
 }
diff --git a/src/grib_dumper_class_keys.c b/src/grib_dumper_class_keys.c
index acd9da5..6fcebf8 100644
--- a/src/grib_dumper_class_keys.c
+++ b/src/grib_dumper_class_keys.c
@@ -286,6 +286,7 @@ static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors
   /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
   if (is_default_section) {
     upper=(char*)malloc(strlen(a->name)+1);
+    Assert(upper);
     p=(char*)a->name;
     q=upper;
     while (*p != '\0') {
diff --git a/src/grib_dumper_class_serialize.c b/src/grib_dumper_class_serialize.c
index 3604c26..391f64c 100644
--- a/src/grib_dumper_class_serialize.c
+++ b/src/grib_dumper_class_serialize.c
@@ -345,6 +345,7 @@ static void dump_values(grib_dumper* d,grib_accessor* a)
 
   if (len>0) {
     columns_str=(char*)malloc((len+1)*sizeof(char));
+    Assert(columns_str);
     columns_str=(char*)memcpy(columns_str,pcf,len);
     columns_str[len]='\0';
     columns=atoi(columns_str);
diff --git a/src/grib_dumper_class_wmo.c b/src/grib_dumper_class_wmo.c
index 2c8eb75..3231ba3 100644
--- a/src/grib_dumper_class_wmo.c
+++ b/src/grib_dumper_class_wmo.c
@@ -103,11 +103,11 @@ static int  init(grib_dumper* d)
     return GRIB_SUCCESS;
 }
 
-static int  destroy  (grib_dumper* d){
+static int  destroy  (grib_dumper* d)
+{
     return GRIB_SUCCESS;
 }
 
-
 static void aliases(grib_dumper* d,grib_accessor* a)
 {
     int i;
@@ -165,7 +165,6 @@ static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
 
     set_begin_end(d,a);
 
-
     print_offset(self->dumper.out,self->begin,self->theEnd);
 
     if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
@@ -173,13 +172,13 @@ static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
 
     if (size>1) {
         int cols=19;
-        int count=0;
+        int icount=0;
         fprintf(self->dumper.out,"%s = { \t",a->name);
         if (values) {
             for (i=0;i<size;i++) {
-                if (count>cols) {fprintf(self->dumper.out,"\n\t\t\t\t");count=0;}
+                if (icount>cols) {fprintf(self->dumper.out,"\n\t\t\t\t");icount=0;}
                 fprintf(self->dumper.out,"%ld ",values[i]);
-                count++;
+                icount++;
             }
             fprintf(self->dumper.out,"}\n");
             grib_context_free(a->context,values);
@@ -507,6 +506,7 @@ static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors
     /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
     if (is_wmo_section) {
         upper=(char*)malloc(strlen(a->name)+1);
+        Assert(upper);
         p=(char*)a->name;
         q=upper;
         while (*p != '\0') {
@@ -532,7 +532,8 @@ static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors
     /*fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);*/
 }
 
-static void set_begin_end(grib_dumper* d,grib_accessor* a) {
+static void set_begin_end(grib_dumper* d,grib_accessor* a)
+{
     grib_dumper_wmo *self = (grib_dumper_wmo*)d;
     if ((d->option_flags & GRIB_DUMP_FLAG_OCTECT) != 0) {
 
@@ -544,7 +545,8 @@ static void set_begin_end(grib_dumper* d,grib_accessor* a) {
     }
 }
 
-static void print_offset(FILE* out,long begin,long theEnd) {
+static void print_offset(FILE* out,long begin,long theEnd)
+{
     char tmp[50];
     if (begin == theEnd)
         fprintf(out,"%-10ld" ,begin);
@@ -554,7 +556,8 @@ static void print_offset(FILE* out,long begin,long theEnd) {
     }
 }
 
-static void print_hexadecimal(FILE* out,unsigned long flags,grib_accessor* a) {
+static void print_hexadecimal(FILE* out,unsigned long flags,grib_accessor* a)
+{
     int i=0;
     unsigned long offset=0;
     grib_handle* h=grib_handle_of_accessor(a);
@@ -569,7 +572,6 @@ static void print_hexadecimal(FILE* out,unsigned long flags,grib_accessor* a) {
     }
 }
 
-
 static void dump_string_array(grib_dumper* d,grib_accessor* a,const char* comment)
 {
     grib_dumper_wmo *self = (grib_dumper_wmo*)d;
@@ -637,4 +639,3 @@ static void dump_string_array(grib_dumper* d,grib_accessor* a,const char* commen
     fprintf(self->dumper.out,"\n");
     grib_context_free(c,values);
 }
-
diff --git a/src/grib_dumper_class_xml.c b/src/grib_dumper_class_xml.c
index 7b36523..29c91c4 100644
--- a/src/grib_dumper_class_xml.c
+++ b/src/grib_dumper_class_xml.c
@@ -96,127 +96,127 @@ static void init_class      (grib_dumper_class* c){}
 
 static int  init(grib_dumper* d)
 {
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  self->section_offset=0;
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    self->section_offset=0;
 
-  return GRIB_SUCCESS;
+    return GRIB_SUCCESS;
 }
 
-static int  destroy  (grib_dumper* d){
-  return GRIB_SUCCESS;
+static int  destroy  (grib_dumper* d)
+{
+    return GRIB_SUCCESS;
 }
 
-
 static void aliases(grib_dumper* d,grib_accessor* a)
 {
-int i;
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
+    int i;
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
 
-  if( (d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0)
-    return;
+    if( (d->option_flags & GRIB_DUMP_FLAG_ALIASES) == 0)
+        return;
 
-  if(a->all_names[1])
-  {
-    char *sep = "";
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# ALIASES: ");
-
-    for(i = 1; i < MAX_ACCESSOR_NAMES; i++)
+    if(a->all_names[1])
     {
-      if(a->all_names[i])
-      {
-        if(a->all_name_spaces[i])
-          fprintf(self->dumper.out,"%s%s.%s", sep,a->all_name_spaces[i],a->all_names[i]);
-        else
-          fprintf(self->dumper.out,"%s%s", sep,a->all_names[i]);
-      }
-    sep = ", ";
+        char *sep = "";
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# ALIASES: ");
+
+        for(i = 1; i < MAX_ACCESSOR_NAMES; i++)
+        {
+            if(a->all_names[i])
+            {
+                if(a->all_name_spaces[i])
+                    fprintf(self->dumper.out,"%s%s.%s", sep,a->all_name_spaces[i],a->all_names[i]);
+                else
+                    fprintf(self->dumper.out,"%s%s", sep,a->all_names[i]);
+            }
+            sep = ", ";
+        }
+        fprintf(self->dumper.out,"\n");
     }
-    fprintf(self->dumper.out,"\n");
-  }
 }
 
 static void dump_long(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  long value; size_t size = 1;
-  long *values=NULL;
-  int err = 0;
-  int i;
-  long count=0;
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    long value; size_t size = 1;
+    long *values=NULL;
+    int err = 0;
+    int i;
+    long count=0;
 
-  grib_value_count(a,&count);
-  size=count;
+    grib_value_count(a,&count);
+    size=count;
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
+        return;
 
-  print_offset(self->dumper.out,d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0){
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
-
-  if (size>1) {
-    values=(long*)grib_context_malloc_clear(a->context,sizeof(long)*size);
-    err=grib_unpack_long(a,values,&size);
-  } else {
-    err=grib_unpack_long(a,&value,&size);
-  }
-
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0){
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
-    fprintf(self->dumper.out,"  ");
+    if (size>1) {
+        values=(long*)grib_context_malloc_clear(a->context,sizeof(long)*size);
+        err=grib_unpack_long(a,values,&size);
+    } else {
+        err=grib_unpack_long(a,&value,&size);
+    }
 
-  if (size>1) {
-    int cols=9;
-    int count=0;
-    int lens=strlen(a->name);
-    fprintf(self->dumper.out,"%s = { ",a->name);
-    for (i=0;i<size;i++) {
-        if (count>cols) {fprintf(self->dumper.out,"\n%-*s",lens+7," ");count=0;}
-        fprintf(self->dumper.out,"%ld, ",values[i]);
-        count++;
-    }
-    fprintf(self->dumper.out,"\n%-*s}",lens+5," ");
-    grib_context_free(a->context,values);
-  } else {
-	  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
-		fprintf(self->dumper.out,"%s = MISSING;",a->name);
-	  else
-		fprintf(self->dumper.out,"%s = %ld;",a->name,value);
-  }
-
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
-  }
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
+
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
+
+    if (size>1) {
+        int cols=9;
+        int icount=0;
+        int lens=strlen(a->name);
+        fprintf(self->dumper.out,"%s = { ",a->name);
+        for (i=0;i<size;i++) {
+            if (icount>cols) {fprintf(self->dumper.out,"\n%-*s",lens+7," ");icount=0;}
+            fprintf(self->dumper.out,"%ld, ",values[i]);
+            icount++;
+        }
+        fprintf(self->dumper.out,"\n%-*s}",lens+5," ");
+        grib_context_free(a->context,values);
+    } else {
+        if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
+            fprintf(self->dumper.out,"%s = MISSING;",a->name);
+        else
+            fprintf(self->dumper.out,"%s = %ld;",a->name,value);
+    }
 
-  fprintf(self->dumper.out,"\n");
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
+    }
+
+    fprintf(self->dumper.out,"\n");
 }
 
 static int test_bit(long a, long b) {return a&(1<<b);}
 
 static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  int i;
-  long lvalue;
-  double dvalue;
-  size_t size = 1;
-  int err = 0;
-  int isDouble=0;
-
-  switch (grib_accessor_get_native_type(a)) {
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    int i;
+    long lvalue;
+    double dvalue;
+    size_t size = 1;
+    int err = 0;
+    int isDouble=0;
+
+    switch (grib_accessor_get_native_type(a)) {
     case GRIB_TYPE_LONG:
         grib_unpack_long(a,&lvalue,&size);
         break;
@@ -226,470 +226,468 @@ static void dump_bits(grib_dumper* d,grib_accessor* a,const char* comment)
         break;
     default:
         break;
-  }
+    }
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
+        return;
 
-  print_offset(self->dumper.out,d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
-
-  fprintf(self->dumper.out,"  ");
-  fprintf(self->dumper.out,"# flags: ");
-  for(i=0;i<(a->length*8);i++) {
-    if(test_bit(lvalue,a->length*8-i-1))
-      fprintf(self->dumper.out,"1");
-    else
-      fprintf(self->dumper.out,"0");
-  }
-  fprintf(self->dumper.out,"\n");
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
     fprintf(self->dumper.out,"  ");
+    fprintf(self->dumper.out,"# flags: ");
+    for(i=0;i<(a->length*8);i++) {
+        if(test_bit(lvalue,a->length*8-i-1))
+            fprintf(self->dumper.out,"1");
+        else
+            fprintf(self->dumper.out,"0");
+    }
+    fprintf(self->dumper.out,"\n");
 
-  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
-    fprintf(self->dumper.out,"%s = MISSING;",a->name);
-  else {
-    if (isDouble) 
-        fprintf(self->dumper.out,"%s = %g;",a->name,dvalue);
-    else
-        fprintf(self->dumper.out,"%s = %ld;",a->name,lvalue);
-  }
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
 
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
-  }
+    if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
+        fprintf(self->dumper.out,"%s = MISSING;",a->name);
+    else {
+        if (isDouble)
+            fprintf(self->dumper.out,"%s = %g;",a->name,dvalue);
+        else
+            fprintf(self->dumper.out,"%s = %ld;",a->name,lvalue);
+    }
+
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
+    }
 
-  fprintf(self->dumper.out,"\n");
+    fprintf(self->dumper.out,"\n");
 }
 
 static void dump_double(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  double value; size_t size = 1;
-  int err = grib_unpack_double(a,&value,&size);
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    double value; size_t size = 1;
+    int err = grib_unpack_double(a,&value,&size);
 
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
+        return;
 
-  print_offset(self->dumper.out,d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
 
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
-    fprintf(self->dumper.out,"  ");
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
 
-  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
-    fprintf(self->dumper.out,"%s = MISSING;",a->name);
-  else
-    fprintf(self->dumper.out,"%s = %g;",a->name,value);
+    if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
+        fprintf(self->dumper.out,"%s = MISSING;",a->name);
+    else
+        fprintf(self->dumper.out,"%s = %g;",a->name,value);
 
 
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
-  }
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
+    }
 
-  fprintf(self->dumper.out,"\n");
+    fprintf(self->dumper.out,"\n");
 }
 
 static void dump_string_array(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  char **values;
-  size_t size = 0,i=0;
-  grib_context* c=NULL;
-  int err = 0;
-  int tab=0;
-  long count=0;
-
-  c=a->context;
-
-  grib_value_count(a,&count);
-  size=count;
-
-  values=(char**)grib_context_malloc_clear(c,size*sizeof(char*));
-  if (!values) {
-  	grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
-	return;
-  }
-
-  err = grib_unpack_string_array(a,values,&size);
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    char **values;
+    size_t size = 0,i=0;
+    grib_context* c=NULL;
+    int err = 0;
+    int tab=0;
+    long count=0;
+
+    c=a->context;
+
+    grib_value_count(a,&count);
+    size=count;
+
+    values=(char**)grib_context_malloc_clear(c,size*sizeof(char*));
+    if (!values) {
+        grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
+        return;
+    }
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
-    return;
+    err = grib_unpack_string_array(a,values,&size);
 
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
+        return;
 
-  print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    print_offset(self->dumper.out,d,a);
 
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-    tab=13;
-  } else
-    fprintf(self->dumper.out,"  ");
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
 
-  tab++;
-  fprintf(self->dumper.out,"%s = {\n",a->name);
-  for  (i=0;i<size;i++) {
-      fprintf(self->dumper.out,"%-*s\"%s\",\n",(int)(tab+strlen(a->name)+4)," ",values[i]);
-  }
-  fprintf(self->dumper.out,"  }");
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+        tab=13;
+    } else
+        fprintf(self->dumper.out,"  ");
+
+    tab++;
+    fprintf(self->dumper.out,"%s = {\n",a->name);
+    for  (i=0;i<size;i++) {
+        fprintf(self->dumper.out,"%-*s\"%s\",\n",(int)(tab+strlen(a->name)+4)," ",values[i]);
+    }
+    fprintf(self->dumper.out,"  }");
 
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
-  }
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
+    }
 
-  fprintf(self->dumper.out,"\n");
-  grib_context_free(c,values);
+    fprintf(self->dumper.out,"\n");
+    grib_context_free(c,values);
 }
 
 static void dump_string(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  char *value=NULL; 
-  char *p = NULL;
-  size_t size = 0;
-  grib_context* c=NULL;
-  int err = _grib_get_string_length(a,&size);
-
-  c=a->context;
-  if (size==0) return;
-
-  value=(char*)grib_context_malloc_clear(c,size);
-  if (!value) {
-  	grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
-	return;
-  }
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    char *value=NULL;
+    char *p = NULL;
+    size_t size = 0;
+    grib_context* c=NULL;
+    int err = _grib_get_string_length(a,&size);
+
+    c=a->context;
+    if (size==0) return;
+
+    value=(char*)grib_context_malloc_clear(c,size);
+    if (!value) {
+        grib_context_log(c,GRIB_LOG_FATAL,"unable to allocate %d bytes",(int)size);
+        return;
+    }
 
-  err = grib_unpack_string(a,value,&size);
-  p=value;
+    err = grib_unpack_string(a,value,&size);
+    p=value;
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
+        return;
 
-  while(*p) { if(!isprint(*p)) *p = '.'; p++; }
+    while(*p) { if(!isprint(*p)) *p = '.'; p++; }
 
-  print_offset(self->dumper.out,d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  aliases(d,a);
-  if(comment) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# %s \n",comment);
-  }
+    aliases(d,a);
+    if(comment) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# %s \n",comment);
+    }
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
-    fprintf(self->dumper.out,"  ");
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
 
-  if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
-    fprintf(self->dumper.out,"%s = MISSING;",a->name);
-  else
-    fprintf(self->dumper.out,"%s = %s;",a->name,value);
+    if( ((a->flags & GRIB_ACCESSOR_FLAG_CAN_BE_MISSING) != 0) && grib_is_missing_internal(a) )
+        fprintf(self->dumper.out,"%s = MISSING;",a->name);
+    else
+        fprintf(self->dumper.out,"%s = %s;",a->name,value);
 
 
-  if(err) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
-  }
+    if(err) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# *** ERR=%d (%s)",err,grib_get_error_message(err));
+    }
 
-  fprintf(self->dumper.out,"\n");
-  grib_context_free(c,value);
+    fprintf(self->dumper.out,"\n");
+    grib_context_free(c,value);
 }
 
 static void dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment)
 {
 
 #if 0
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  int i,k,err =0;
-  int more = 0;
-  size_t size = a->length;
-  unsigned char* buf = grib_context_malloc(d->handle->context,size);
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    int i,k,err =0;
+    int more = 0;
+    size_t size = a->length;
+    unsigned char* buf = grib_context_malloc(d->handle->context,size);
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
+        return;
 
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)
-    fprintf(self->dumper.out,"-READ ONLY- ");
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY)
+        fprintf(self->dumper.out,"-READ ONLY- ");
 
-  /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
-  /*print_offset(self->dumper.out,self->begin,self->end);*/
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
+    /*for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");*/
+    /*print_offset(self->dumper.out,self->begin,self->end);*/
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0)
         fprintf(self->dumper.out,"%s ",a->creator->op);
 
-  fprintf(self->dumper.out,"%s = %ld",a->name,a->length);
-  aliases(d,a);
-  fprintf(self->dumper.out," {");
+    fprintf(self->dumper.out,"%s = %ld",a->name,a->length);
+    aliases(d,a);
+    fprintf(self->dumper.out," {");
 
-  if(!buf)
-  {
-    if(size == 0)
-      fprintf(self->dumper.out,"}\n");
-    else
-      fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size);
-    return;
-  }
+    if(!buf)
+    {
+        if(size == 0)
+            fprintf(self->dumper.out,"}\n");
+        else
+            fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size);
+        return;
+    }
 
-  fprintf(self->dumper.out,"\n");
+    fprintf(self->dumper.out,"\n");
 
-  err = grib_unpack_bytes(a,buf,&size);
-  if(err){
-    grib_context_free(d->handle->context,buf);
-    fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err));
-    return ;
-  }
-
-  if(size > 100) {
-    more = size - 100;
-    size = 100;
-  }
-
-  k = 0;
-  /* if(size > 100) size = 100;  */
-  while(k < size)
-  {
-    int j;
-    for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");
-    for(j = 0; j < 16 && k < size; j++, k++)
+    err = grib_unpack_bytes(a,buf,&size);
+    if(err){
+        grib_context_free(d->handle->context,buf);
+        fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err));
+        return ;
+    }
+
+    if(size > 100) {
+        more = size - 100;
+        size = 100;
+    }
+
+    k = 0;
+    /* if(size > 100) size = 100;  */
+    while(k < size)
     {
-      fprintf(self->dumper.out,"%02x",buf[k]);
-      if(k != size-1)
-        fprintf(self->dumper.out,", ");
+        int j;
+        for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");
+        for(j = 0; j < 16 && k < size; j++, k++)
+        {
+            fprintf(self->dumper.out,"%02x",buf[k]);
+            if(k != size-1)
+                fprintf(self->dumper.out,", ");
+        }
+        fprintf(self->dumper.out,"\n");
     }
-    fprintf(self->dumper.out,"\n");
-  }
 
-  if(more)
-  {
-    for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");
-    fprintf(self->dumper.out,"... %d more values\n",more);
-  }
+    if(more)
+    {
+        for(i = 0; i < d->depth + 3 ; i++) fprintf(self->dumper.out," ");
+        fprintf(self->dumper.out,"... %d more values\n",more);
+    }
 
-  for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
-  fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name);
-  grib_context_free(d->handle->context,buf);
+    for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
+    fprintf(self->dumper.out,"} # %s %s \n",a->creator->op, a->name);
+    grib_context_free(d->handle->context,buf);
 #endif
 }
 
 static void dump_values(grib_dumper* d,grib_accessor* a)
 {
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  int k,err =0;
-  int more = 0;
-  double*  buf = NULL;
-  size_t size=0;
-  long count=0;
-
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
-    return;
-
-  grib_value_count(a,&count);
-  size=count;
-  if(size == 1){
-    dump_double(d,a,NULL);
-    return ;
-  }
-  buf = (double*)grib_context_malloc(d->handle->context,size * sizeof(double));
-
-   print_offset(self->dumper.out,d,a);
-
-  if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"# type %s \n",a->creator->op);
-  }
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    int k,err =0;
+    int more = 0;
+    double*  buf = NULL;
+    size_t size=0;
+    long count=0;
+
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
+        return;
+
+    grib_value_count(a,&count);
+    size=count;
+    if(size == 1){
+        dump_double(d,a,NULL);
+        return ;
+    }
+    buf = (double*)grib_context_malloc(d->handle->context,size * sizeof(double));
 
-  aliases(d,a);
+    print_offset(self->dumper.out,d,a);
 
-  if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"#-READ ONLY- ");
-  } else
-    fprintf(self->dumper.out,"  ");
+    if ((d->option_flags & GRIB_DUMP_FLAG_TYPE) != 0) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"# type %s \n",a->creator->op);
+    }
 
-  fprintf(self->dumper.out,"%s(%ld) = ",a->name,(long)size);
-  fprintf(self->dumper.out," {");
+    aliases(d,a);
 
-  if(!buf)
-  {
-    if(size == 0)
-      fprintf(self->dumper.out,"}\n");
-    else
-      fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size);
-    return;
-  }
+    if (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY) {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"#-READ ONLY- ");
+    } else
+        fprintf(self->dumper.out,"  ");
 
-  fprintf(self->dumper.out,"\n");
+    fprintf(self->dumper.out,"%s(%ld) = ",a->name,(long)size);
+    fprintf(self->dumper.out," {");
 
-  err =  grib_unpack_double(a,buf,&size);
+    if(!buf)
+    {
+        if(size == 0)
+            fprintf(self->dumper.out,"}\n");
+        else
+            fprintf(self->dumper.out," *** ERR cannot malloc(%ld) }\n",(long)size);
+        return;
+    }
 
-  if(err){
-    grib_context_free(d->handle->context,buf);
-    fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err));
-    return ;
-  }
+    fprintf(self->dumper.out,"\n");
 
-  if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 100) {
-    more = size - 100;
-    size = 100;
-  }
+    err =  grib_unpack_double(a,buf,&size);
 
-  k = 0;
-  while(k < size)  {
-#if 1
-    int j;
-    fprintf(self->dumper.out,"  ");
-    for(j = 0; j < 5 && k < size; j++, k++)  {
-      fprintf(self->dumper.out,"%g",buf[k]);
-      if(k != size-1)
-        fprintf(self->dumper.out,", ");
+    if(err){
+        grib_context_free(d->handle->context,buf);
+        fprintf(self->dumper.out," *** ERR=%d (%s) \n}",err,grib_get_error_message(err));
+        return ;
     }
-    fprintf(self->dumper.out,"\n");
+
+    if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 100) {
+        more = size - 100;
+        size = 100;
+    }
+
+    k = 0;
+    while(k < size)  {
+#if 1
+        int j;
+        fprintf(self->dumper.out,"  ");
+        for(j = 0; j < 5 && k < size; j++, k++)  {
+            fprintf(self->dumper.out,"%g",buf[k]);
+            if(k != size-1)
+                fprintf(self->dumper.out,", ");
+        }
+        fprintf(self->dumper.out,"\n");
 #else
 
-    fprintf(self->dumper.out,"%d %g\n",k,buf[k]);
+        fprintf(self->dumper.out,"%d %g\n",k,buf[k]);
 
 #endif
 
-  }  if(more)  {
-    fprintf(self->dumper.out,"  ");
-    fprintf(self->dumper.out,"... %d more values\n",more);
-  }
+    }  if(more)  {
+        fprintf(self->dumper.out,"  ");
+        fprintf(self->dumper.out,"... %d more values\n",more);
+    }
 
-  fprintf(self->dumper.out,"  ");
-  fprintf(self->dumper.out,"} \n");
-  grib_context_free(d->handle->context,buf);
+    fprintf(self->dumper.out,"  ");
+    fprintf(self->dumper.out,"} \n");
+    grib_context_free(d->handle->context,buf);
 }
 
 static void dump_label(grib_dumper* d,grib_accessor* a,const char* comment)
 {
-  /*grib_dumper_xml *self = (grib_dumper_xml*)d;
+    /*grib_dumper_xml *self = (grib_dumper_xml*)d;
 
   for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
   fprintf(self->dumper.out,"----> %s %s %s\n",a->creator->op, a->name,comment?comment:"");*/
 }
 
-
 static void dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block)
 {
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  int i;
-  /* grib_section* s = grib_get_sub_section(a); */
-  grib_section* s = a->sub_section;
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    int i;
+    /* grib_section* s = grib_get_sub_section(a); */
+    grib_section* s = a->sub_section;
 
-  if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
-    return;
+    if ( (a->flags & GRIB_ACCESSOR_FLAG_XML) == 0)
+        return;
 
 #if 1
-  if(a->name[0] == '_'){
-    grib_dump_accessors_block(d,block);
-    return;
-  }
+    if(a->name[0] == '_'){
+        grib_dump_accessors_block(d,block);
+        return;
+    }
 #endif
-  for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
-  fprintf(self->dumper.out,"======> %s %s (%ld,%ld,%ld)\n",a->creator->op,
-      a->name,a->length,(long)s->length,(long)s->padding);
-  if (!strncmp(a->name,"section",7)) self->section_offset=a->offset;
-  /*printf("------------- section_offset = %ld\n",self->section_offset);*/
-  d->depth += 3;
-  grib_dump_accessors_block(d,block);
-  d->depth -= 3;
+    for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
+    fprintf(self->dumper.out,"======> %s %s (%ld,%ld,%ld)\n",a->creator->op,
+            a->name,a->length,(long)s->length,(long)s->padding);
+    if (!strncmp(a->name,"section",7)) self->section_offset=a->offset;
+    /*printf("------------- section_offset = %ld\n",self->section_offset);*/
+    d->depth += 3;
+    grib_dump_accessors_block(d,block);
+    d->depth -= 3;
 
-  for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
-  fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);
+    for(i = 0; i < d->depth ; i++) fprintf(self->dumper.out," ");
+    fprintf(self->dumper.out,"<===== %s %s\n",a->creator->op, a->name);
 }
 
 static void print_offset(FILE* out,grib_dumper* d,grib_accessor* a) {
-  int i,k;
-  long offset;
-  long begin=0,end=0;
-  size_t size=0,more=0;
-  grib_dumper_xml *self = (grib_dumper_xml*)d;
-  grib_handle* h=grib_handle_of_accessor(a);
-
-  begin=a->offset-self->section_offset+1;;
-  end =grib_get_next_position_offset(a)-self->section_offset;
-
-  if ((d->option_flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length != 0) {
-    if (begin == end) {
-      fprintf(self->dumper.out,"  ");
-      fprintf(out,"# Octet: ");
-      fprintf(out,"%ld" ,begin);
-    }
-    else {
-      fprintf(self->dumper.out,"  ");
-      fprintf(out,"# Octets: ");
-      fprintf(out,"%ld-%ld" ,begin,end);
-    }
-    fprintf(out,"  = ");
-    size=a->length;
+    int i,k;
+    long offset;
+    long begin=0,end=0;
+    size_t size=0,more=0;
+    grib_dumper_xml *self = (grib_dumper_xml*)d;
+    grib_handle* h=grib_handle_of_accessor(a);
+
+    begin=a->offset-self->section_offset+1;;
+    end =grib_get_next_position_offset(a)-self->section_offset;
+
+    if ((d->option_flags & GRIB_DUMP_FLAG_HEXADECIMAL) != 0 && a->length != 0) {
+        if (begin == end) {
+            fprintf(self->dumper.out,"  ");
+            fprintf(out,"# Octet: ");
+            fprintf(out,"%ld" ,begin);
+        }
+        else {
+            fprintf(self->dumper.out,"  ");
+            fprintf(out,"# Octets: ");
+            fprintf(out,"%ld-%ld" ,begin,end);
+        }
+        fprintf(out,"  = ");
+        size=a->length;
+
+        if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 112) {
+            more = size - 112;
+            size = 112;
+        }
+
+        k = 0;
+        while(k < size)  {
+            offset=a->offset;
+            for (i=0;i<14 && k<size;i++,k++) {
+                fprintf(out," 0x%.2X",h->buffer->data[offset]);
+                offset++;
+            }
+            if (k<size) fprintf(self->dumper.out,"\n  #");
+        }  if(more)  {
+            fprintf(self->dumper.out,"\n  #... %d more values\n",(int)more);
+        }
+        fprintf(self->dumper.out,"\n");
 
-    if(!(d->option_flags & GRIB_DUMP_FLAG_ALL_DATA) && size > 112) {
-      more = size - 112;
-      size = 112;
     }
-
-    k = 0;
-    while(k < size)  {
-      offset=a->offset;
-      for (i=0;i<14 && k<size;i++,k++) {
-        fprintf(out," 0x%.2X",h->buffer->data[offset]);
-        offset++;
-      }
-      if (k<size) fprintf(self->dumper.out,"\n  #");
-    }  if(more)  {
-      fprintf(self->dumper.out,"\n  #... %d more values\n",(int)more);
-    }
-    fprintf(self->dumper.out,"\n");
-
-  }
 }
-
diff --git a/src/grib_expression_class_is_in_dict.c b/src/grib_expression_class_is_in_dict.c
index 4b670a5..e12a625 100644
--- a/src/grib_expression_class_is_in_dict.c
+++ b/src/grib_expression_class_is_in_dict.c
@@ -72,9 +72,9 @@ static grib_expression_class _grib_expression_class_is_in_dict = {
     &init_class,                 /* init_class */
     0,                     /* constructor               */
     0,                  /* destructor                */
-    &print,                 
-    &compile,                 
-    &add_dependency,       
+    &print,
+    &compile,
+    &add_dependency,
 
 	&native_type,
 	&get_name,
@@ -123,7 +123,7 @@ static grib_trie* load_dictionary(grib_context* c,grib_expression* e, int* err)
         grib_context_log(c,GRIB_LOG_DEBUG,"using dictionary %s from file %s",self->dictionary,filename);
   }
 
-  f=fopen(filename,"r");
+  f=codes_fopen(filename,"r");
   if (!f) {*err=GRIB_IO_PROBLEM; return NULL;}
 
   dictionary=grib_trie_new(c);
diff --git a/src/grib_expression_class_is_in_list.c b/src/grib_expression_class_is_in_list.c
index 040d9b3..cf1bfbd 100644
--- a/src/grib_expression_class_is_in_list.c
+++ b/src/grib_expression_class_is_in_list.c
@@ -74,9 +74,9 @@ static grib_expression_class _grib_expression_class_is_in_list = {
     &init_class,                 /* init_class */
     0,                     /* constructor               */
     &destroy,                  /* destructor                */
-    &print,                 
-    &compile,                 
-    &add_dependency,       
+    &print,
+    &compile,
+    &add_dependency,
 
 	&native_type,
 	&get_name,
@@ -122,7 +122,7 @@ static grib_trie* load_list(grib_context* c,grib_expression* e, int* err) {
 	grib_context_log(c,GRIB_LOG_DEBUG,"using list %s from file %s",self->list,filename);
   }
 
-  f=fopen(filename,"r");
+  f=codes_fopen(filename,"r");
   if (!f) {*err=GRIB_IO_PROBLEM; return NULL;}
 
   list=grib_trie_new(c);
diff --git a/src/grib_fieldset.c b/src/grib_fieldset.c
index 0bd6d40..7823841 100644
--- a/src/grib_fieldset.c
+++ b/src/grib_fieldset.c
@@ -10,7 +10,7 @@
 
 /*
  *
- * Description: routines for grib indexing form a set of files
+ * Description: routines for GRIB indexing from a set of files
  *
  */
 #include "grib_api_internal.h"
@@ -23,14 +23,14 @@
 #define GRIB_ORDER_BY_DESC   -1
 
 GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b) {
-  if (*a != *b) return 1;
-  while((*a!=0 && *b!=0) &&  *(a) == *(b) ) {a++;b++;}
-  return (*a==0 && *b==0) ? 0 : 1;
+    if (*a != *b) return 1;
+    while((*a!=0 && *b!=0) &&  *(a) == *(b) ) {a++;b++;}
+    return (*a==0 && *b==0) ? 0 : 1;
 }
 
 static grib_fieldset* grib_fieldset_create_from_keys(grib_context* c,char** keys,int nkeys,int* err);
 static grib_fieldset* grib_fieldset_create_from_order_by(grib_context* c,grib_order_by* ob,
-                                           int* err);
+        int* err);
 static int grib_fieldset_resize(grib_fieldset* set,size_t newsize);
 static void grib_trim(char** x);
 static grib_order_by* grib_fieldset_new_order_by(grib_context* c,char* z);
@@ -482,7 +482,7 @@ static void grib_fieldset_sort(grib_fieldset* set, int beg, int theEnd)
 
         if (grib_fieldset_compare(set,&l,&beg) < 0) {
             SWAP(set->order->el[l],set->order->el[beg])
-                        l--;
+                                l--;
         } else {
             l--;
             SWAP(set->order->el[l],set->order->el[beg])
@@ -590,7 +590,7 @@ int grib_fieldset_add(grib_fieldset* set,char* filename)
     int err=0;
     int i=0;
     grib_handle* h=0;
-   /* int nkeys; */
+    /* int nkeys; */
     grib_file* file;
     double offset=0;
     long length=0;
@@ -599,7 +599,7 @@ int grib_fieldset_add(grib_fieldset* set,char* filename)
     if (!set || !filename ) return GRIB_INVALID_ARGUMENT;
     c=set->context;
 
-   /* nkeys=set->columns_size; */
+    /* nkeys=set->columns_size; */
 
     file=grib_file_open(filename,"r",&err);
     if (!file || !file->handle) return err;
diff --git a/src/grib_geography.c b/src/grib_geography.c
index 6685c58..f33c65c 100644
--- a/src/grib_geography.c
+++ b/src/grib_geography.c
@@ -16,11 +16,6 @@
 
 #include <math.h>
 
-#define SCANXY    1
-#define SCANYX    2
-#define SCANRXRY  3
-#define SCANXRY   4
-#define SCANRXY   5
 #define NUMBER(x) (sizeof(x)/sizeof(x[0]))
 #define MAXITER  10
 
diff --git a/src/grib_handle.c b/src/grib_handle.c
index d3b8b53..387ceda 100644
--- a/src/grib_handle.c
+++ b/src/grib_handle.c
@@ -183,7 +183,7 @@ grib_handle* grib_new_handle ( grib_context* c )
     return g;
 }
 
-static grib_handle* grib_handle_create ( grib_handle  *gl, grib_context* c,void* data, size_t buflen )
+static grib_handle* grib_handle_create ( grib_handle  *gl, grib_context* c, const void* data, size_t buflen )
 {
     grib_action* next = NULL;
     int err = 0;
@@ -193,7 +193,7 @@ static grib_handle* grib_handle_create ( grib_handle  *gl, grib_context* c,void*
 
     gl->use_trie = 1;
     gl->trie_invalid=0;
-    gl->buffer = grib_new_buffer ( gl->context,(unsigned char*)data,buflen );
+    gl->buffer = grib_new_buffer ( gl->context, (const unsigned char*)data, buflen );
 
     if ( gl->buffer == NULL )
     {
@@ -243,8 +243,8 @@ grib_handle* grib_handle_new_from_samples ( grib_context* c, const char* name )
 {
     grib_handle* g = 0;
     if ( c == NULL ) c = grib_context_get_default();
-    c->handle_file_count=0;
-    c->handle_total_count=0;
+    grib_context_set_handle_file_count(c,0);
+    grib_context_set_handle_total_count(c,0);
 
     /*
        g = grib_internal_template(c,name);
@@ -336,8 +336,8 @@ grib_handle* grib_handle_new_from_message_copy ( grib_context* c, const void* da
     void* copy =NULL;
     if ( c == NULL ) c = grib_context_get_default();
 
-    c->handle_file_count=0;
-    c->handle_total_count=0;
+    grib_context_set_handle_file_count(c,0);
+    grib_context_set_handle_total_count(c,0);
     copy = grib_context_malloc ( c,size );
     if ( !copy ) {
         return NULL;
@@ -356,8 +356,8 @@ grib_handle* grib_handle_new_from_partial_message_copy ( grib_context* c, const
     grib_handle *g = NULL;
     void* copy =NULL;
     if ( c == NULL ) c = grib_context_get_default();
-    c->handle_file_count=0;
-    c->handle_total_count=0;
+    grib_context_set_handle_file_count(c,0);
+    grib_context_set_handle_total_count(c,0);
     copy = grib_context_malloc ( c,size );
     if ( !copy )
         return NULL;
@@ -374,14 +374,14 @@ grib_handle* grib_handle_new_from_partial_message ( grib_context* c,void* data,
 {
     grib_handle  *gl = NULL;
     if ( c == NULL ) c = grib_context_get_default();
-    c->handle_file_count=0;
-    c->handle_total_count=0;
+    grib_context_set_handle_file_count(c,0);
+    grib_context_set_handle_total_count(c,0);
     gl = grib_new_handle ( c );
     gl->partial = 1;
     return grib_handle_create ( gl,  c, data,  buflen );
 }
 
-grib_handle* grib_handle_new_from_message ( grib_context* c,void* data, size_t buflen )
+grib_handle* grib_handle_new_from_message ( grib_context* c, const void* data, size_t buflen )
 {
     grib_handle  *gl = NULL;
     grib_handle  *h = NULL;
@@ -541,8 +541,8 @@ static grib_handle* grib_handle_new_multi ( grib_context* c,unsigned char** data
     }
 
     gl->buffer->property = GRIB_MY_BUFFER;
-    c->handle_file_count++;
-    c->handle_total_count++;
+    grib_context_increment_handle_file_count(c);
+    grib_context_increment_handle_total_count(c);
 
     return gl;
 }
@@ -700,8 +700,8 @@ static grib_handle* grib_handle_new_from_file_multi ( grib_context* c, FILE* f,i
 
     gl->offset=gm->offset;
     gl->buffer->property = GRIB_MY_BUFFER;
-    c->handle_file_count++;
-    c->handle_total_count++;
+    grib_context_increment_handle_file_count(c);
+    grib_context_increment_handle_total_count(c);
 
     if ( c->gts_header_on && gtslen >=8 )
     {
@@ -725,7 +725,7 @@ grib_handle* grib_new_from_file ( grib_context* c, FILE* f,int headers_only,int
     if ( c->multi_support_on ) h=grib_handle_new_from_file_multi ( c,f,error );
     else h=grib_handle_new_from_file_no_multi ( c,f,headers_only,error );
 
-    if ( h && h->offset == 0 ) c->handle_file_count=1;
+    if ( h && h->offset == 0 ) grib_context_set_handle_file_count(c,1);
 
     if (h) {
         h->product_kind = PRODUCT_GRIB;
@@ -772,8 +772,8 @@ grib_handle* gts_new_from_file ( grib_context* c, FILE* f,int *error )
     gl->offset=offset;
     gl->buffer->property = GRIB_MY_BUFFER;
     gl->product_kind = PRODUCT_GTS;
-    c->handle_file_count++;
-    c->handle_total_count++;
+    grib_context_increment_handle_file_count(c);
+    grib_context_increment_handle_total_count(c);
 
     return gl;
 }
@@ -810,8 +810,8 @@ grib_handle* taf_new_from_file ( grib_context* c, FILE* f,int *error )
     gl->offset=offset;
     gl->buffer->property = GRIB_MY_BUFFER;
     gl->product_kind = PRODUCT_TAF;
-    c->handle_file_count++;
-    c->handle_total_count++;
+    grib_context_increment_handle_file_count(c);
+    grib_context_increment_handle_total_count(c);
 
     return gl;
 }
@@ -848,8 +848,8 @@ grib_handle* metar_new_from_file ( grib_context* c, FILE* f,int *error )
     gl->offset=offset;
     gl->buffer->property = GRIB_MY_BUFFER;
     gl->product_kind = PRODUCT_METAR;
-    c->handle_file_count++;
-    c->handle_total_count++;
+    grib_context_increment_handle_file_count(c);
+    grib_context_increment_handle_total_count(c);
 
     return gl;
 }
@@ -886,8 +886,8 @@ grib_handle* bufr_new_from_file ( grib_context* c, FILE* f,int *error )
     gl->offset=offset;
     gl->buffer->property = GRIB_MY_BUFFER;
     gl->product_kind = PRODUCT_BUFR;
-    c->handle_file_count++;
-    c->handle_total_count++;
+    grib_context_increment_handle_file_count(c);
+    grib_context_increment_handle_total_count(c);
 
     return gl;
 }
@@ -924,8 +924,8 @@ grib_handle* any_new_from_file ( grib_context* c, FILE* f,int *error )
     gl->offset=offset;
     gl->buffer->property = GRIB_MY_BUFFER;
     gl->product_kind = PRODUCT_ANY;
-    c->handle_file_count++;
-    c->handle_total_count++;
+    grib_context_increment_handle_file_count(c);
+    grib_context_increment_handle_total_count(c);
 
     return gl;
 }
@@ -989,8 +989,8 @@ static grib_handle* grib_handle_new_from_file_no_multi ( grib_context* c,FILE* f
     gl->offset=offset;
     gl->buffer->property = GRIB_MY_BUFFER;
 
-    c->handle_file_count++;
-    c->handle_total_count++;
+    grib_context_increment_handle_file_count(c);
+    grib_context_increment_handle_total_count(c);
 
     if ( c->gts_header_on && gtslen >=8 )
     {
diff --git a/src/grib_hash_keys.c b/src/grib_hash_keys.c
index 0596244..e6c80ce 100644
--- a/src/grib_hash_keys.c
+++ b/src/grib_hash_keys.c
@@ -7488,6 +7488,7 @@ static void init()
     }
 }
 #endif
+
 struct grib_itrie {
   grib_itrie* next[SIZE];
   grib_context *context;
@@ -7510,7 +7511,7 @@ void grib_hash_keys_delete(grib_itrie *t) {
 
   if(t)  {
     int i;
-    for(i = 0; i <= SIZE; i++)
+    for(i = 0; i < SIZE; i++)
       if (t->next[i])
         grib_hash_keys_delete(t->next[i]);
 
diff --git a/src/grib_header_compute.c b/src/grib_header_compute.c
index 9948362..1e7ebd1 100644
--- a/src/grib_header_compute.c
+++ b/src/grib_header_compute.c
@@ -10,13 +10,10 @@
 
 
 /*
-
   Author: B.Raoult
   Modified by Enrico Fucile
-
 */
 
-
 #include "grib_api_internal.h"
 #include <math.h>
 #include <errno.h>
@@ -32,7 +29,6 @@ GRIB_INLINE static int strcmp(const char* a,const char* b) {
 }
 #endif
 
-#define SIZE  ((int)4097)
 #ifndef NUMBER
 #define NUMBER(a)    (sizeof(a)/sizeof(a[0])) /* number of elem. of an array */
 #endif
@@ -127,7 +123,6 @@ typedef int err;
 typedef real (*fop1)(real);
 typedef real (*fop2)(real,real);
 
-
 static void advance(char** form)
 {
     (*form)++;
@@ -156,6 +151,7 @@ static grib_math *readatom(grib_context* c,char** form,int *err)
         p        = (grib_math*)grib_context_malloc(c,sizeof(grib_math));
         p->arity = 1;
         p->name  = strdup("neg");
+        Assert(p->name);
         advance(form);
         p->left  = readatom(c,form,err);
         break;
@@ -164,6 +160,7 @@ static grib_math *readatom(grib_context* c,char** form,int *err)
         p        = (grib_math*)grib_context_malloc(c,sizeof(grib_math));
         p->arity = 1;
         p->name  = strdup("neg");
+        Assert(p->name);
         advance(form);
         p->left  = readatom(c,form,err);
         break;
@@ -180,8 +177,8 @@ static grib_math *readatom(grib_context* c,char** form,int *err)
 
         if(**form == '\'' || **form == '"')
         {
-            char c = *((*form)++);
-            while(**form && **form != c)
+            char achar = *((*form)++);
+            while(**form && **form != achar)
                 buf[i++] = *((*form)++);
             if(**form) (*form)++;
         } else
@@ -194,6 +191,7 @@ static grib_math *readatom(grib_context* c,char** form,int *err)
 
         p = (grib_math*)grib_context_malloc(c,sizeof(grib_math));
         p->name  = strdup(buf);
+        Assert(p->name);
         p->left=0;
 
         switch(**form)
@@ -427,6 +425,7 @@ grib_math *grib_math_clone(grib_context* c,grib_math *m)
         n = (grib_math*)grib_context_malloc(c,sizeof(grib_math));
         n->arity = m->arity;
         n->name  = strdup(m->name);
+        Assert(n->name);
         n->left  = grib_math_clone(c,m->left);
         n->right = grib_math_clone(c,m->right);
     }
@@ -455,6 +454,7 @@ grib_math *grib_math_new(grib_context* c,const char* formula,int *err)
     if (!formula) {*err=GRIB_INVALID_ARGUMENT;return NULL;}
 
     f=strdup(formula);
+    Assert(f);
     fsave=f;
 
     x = reador(c,&f,err);
diff --git a/src/grib_index.c b/src/grib_index.c
index 62034e6..0b4b457 100644
--- a/src/grib_index.c
+++ b/src/grib_index.c
@@ -802,7 +802,6 @@ grib_index* grib_index_read(grib_context* c, const char* filename, int *err)
 
     fh=fopen(filename,"r");
     if (!fh) {
-        grib_context* c = grib_context_get_default();
         grib_context_log(c,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),
                 "Unable to write in file %s",filename);
         perror(filename);
diff --git a/src/grib_io.c b/src/grib_io.c
index 40fb3db..6867601 100644
--- a/src/grib_io.c
+++ b/src/grib_io.c
@@ -112,6 +112,7 @@ static int read_GRIB(reader* r)
     /*TODO proper context*/
     c=grib_context_get_default();
     tmp=(unsigned char*)malloc(buflen);
+    Assert(tmp);
     buf=grib_new_buffer(c,tmp,buflen);
     buf->property = GRIB_MY_BUFFER;
 
@@ -588,6 +589,7 @@ static int read_BUFR(reader *r)
     /*TODO proper context*/
     c=grib_context_get_default();
     tmp=(unsigned char*)malloc(buflen);
+    Assert(tmp);
     buf=grib_new_buffer(c,tmp,buflen);
     buf->property = GRIB_MY_BUFFER;
     r->offset=r->tell(r->read_data)-4;
@@ -722,7 +724,7 @@ static int read_BUFR(reader *r)
     return err;
 }
 
-static int read_any(reader *r,int grib_ok,int bufr_ok, int hdf5_ok, int wrap_ok)
+static int read_any(reader *r, int grib_ok, int bufr_ok, int hdf5_ok, int wrap_ok)
 {
     unsigned char c;
     int err = 0;
@@ -855,101 +857,101 @@ static int read_any_gts(reader *r)
 
 static int read_any_taf(reader *r)
 {
-	unsigned char c;
-	int err = 0;
-	unsigned char* buffer=NULL;
-	unsigned long magic = 0;
-	unsigned long start = 0x54414620;
-	unsigned char tmp[1000]={0,}; /* Should be enough */
-	size_t message_size=0;
-	size_t already_read=0;
-	int i=0;
-
-	while(r->read(r->read_data,&c,1,&err) == 1 && err == 0)
-	{
-		magic <<= 8;
-		magic |= c;
-		magic &= 0xffffffff;
-
-		if (magic == start) {
-       tmp[i++]=0x54;
-       tmp[i++]=0x41;
-       tmp[i++]=0x46;
-       tmp[i++]=0x20;
-
-       r->offset=r->tell(r->read_data)-4;
-
-       already_read=4;
-       message_size=already_read;
-       while(r->read(r->read_data,&c,1,&err) == 1 && err == 0) {
-         message_size++;
-				 if (c == '=') {
-           r->seek(r->read_data,already_read-message_size);
-           buffer = (unsigned char*)r->alloc(r->alloc_data,&message_size,&err);
-           if (!buffer) return GRIB_OUT_OF_MEMORY;
-           if (err) return err;
-           memcpy(buffer,tmp,already_read);
-           r->read(r->read_data,buffer+already_read,message_size-already_read,&err);
-           r->message_size=message_size;
-           return err;
-         }
-       }
-		}
-	}
-
-	return err;
+    unsigned char c;
+    int err = 0;
+    unsigned char* buffer=NULL;
+    unsigned long magic = 0;
+    unsigned long start = 0x54414620;
+    unsigned char tmp[1000]={0,}; /* Should be enough */
+    size_t message_size=0;
+    size_t already_read=0;
+    int i=0;
+
+    while(r->read(r->read_data,&c,1,&err) == 1 && err == 0)
+    {
+        magic <<= 8;
+        magic |= c;
+        magic &= 0xffffffff;
+
+        if (magic == start) {
+            tmp[i++]=0x54;
+            tmp[i++]=0x41;
+            tmp[i++]=0x46;
+            tmp[i++]=0x20;
+
+            r->offset=r->tell(r->read_data)-4;
+
+            already_read=4;
+            message_size=already_read;
+            while(r->read(r->read_data,&c,1,&err) == 1 && err == 0) {
+                message_size++;
+                if (c == '=') {
+                    r->seek(r->read_data,already_read-message_size);
+                    buffer = (unsigned char*)r->alloc(r->alloc_data,&message_size,&err);
+                    if (!buffer) return GRIB_OUT_OF_MEMORY;
+                    if (err) return err;
+                    memcpy(buffer,tmp,already_read);
+                    r->read(r->read_data,buffer+already_read,message_size-already_read,&err);
+                    r->message_size=message_size;
+                    return err;
+                }
+            }
+        }
+    }
+
+    return err;
 }
 
 static int read_any_metar(reader *r)
 {
-	unsigned char c;
-	int err = 0;
-	unsigned char* buffer=NULL;
-	unsigned long magic = 0;
-	unsigned long start = 0x4d455441;
-	unsigned char tmp[32]={0,}; /* Should be enough */
-	size_t message_size=0;
-	size_t already_read=0;
-	int i=0;
-
-	while(r->read(r->read_data,&c,1,&err) == 1 && err == 0)
-	{
-		magic <<= 8;
-		magic |= c;
-		magic &= 0xffffffff;
-
-		if (magic == start) {
-                        if (r->read(r->read_data,&c,1,&err) != 1 || err!=0)
-                            break;
-                        if (c == 'R' ) {
-                            tmp[i++]=0x4d;
-                            tmp[i++]=0x45;
-                            tmp[i++]=0x54;
-                            tmp[i++]=0x41;
-                            tmp[i++]='R';
-
-                            r->offset=r->tell(r->read_data)-4;
-
-                            already_read=5;
-                            message_size=already_read;
-                            while(r->read(r->read_data,&c,1,&err) == 1 && err == 0) {
-				message_size++;
-				if (c == '=') {
-					r->seek(r->read_data,already_read-message_size);
-					buffer = (unsigned char*)r->alloc(r->alloc_data,&message_size,&err);
-					if (!buffer) return GRIB_OUT_OF_MEMORY;
-					if (err) return err;
-					memcpy(buffer,tmp,already_read);
-					r->read(r->read_data,buffer+already_read,message_size-already_read,&err);
-					r->message_size=message_size;
-					return err;
-				}
-                            }
-                      }
-		}
-	}
-
-	return err;
+    unsigned char c;
+    int err = 0;
+    unsigned char* buffer=NULL;
+    unsigned long magic = 0;
+    unsigned long start = 0x4d455441;
+    unsigned char tmp[32]={0,}; /* Should be enough */
+    size_t message_size=0;
+    size_t already_read=0;
+    int i=0;
+
+    while(r->read(r->read_data,&c,1,&err) == 1 && err == 0)
+    {
+        magic <<= 8;
+        magic |= c;
+        magic &= 0xffffffff;
+
+        if (magic == start) {
+            if (r->read(r->read_data,&c,1,&err) != 1 || err!=0)
+                break;
+            if (c == 'R' ) {
+                tmp[i++]=0x4d;
+                tmp[i++]=0x45;
+                tmp[i++]=0x54;
+                tmp[i++]=0x41;
+                tmp[i++]='R';
+
+                r->offset=r->tell(r->read_data)-4;
+
+                already_read=5;
+                message_size=already_read;
+                while(r->read(r->read_data,&c,1,&err) == 1 && err == 0) {
+                    message_size++;
+                    if (c == '=') {
+                        r->seek(r->read_data,already_read-message_size);
+                        buffer = (unsigned char*)r->alloc(r->alloc_data,&message_size,&err);
+                        if (!buffer) return GRIB_OUT_OF_MEMORY;
+                        if (err) return err;
+                        memcpy(buffer,tmp,already_read);
+                        r->read(r->read_data,buffer+already_read,message_size-already_read,&err);
+                        r->message_size=message_size;
+                        return err;
+                    }
+                }
+            }
+        }
+    }
+
+    return err;
 }
 
 off_t stdio_tell(void* data)
@@ -1017,15 +1019,15 @@ int _wmo_read_any_from_file(FILE* f,void* buffer,size_t* len,int grib_ok,int buf
     u.user_buffer  = buffer;
     u.buffer_size  = *len;
 
-    r.message_size = 0;
-    r.read_data    = f;
-    r.read         = &stdio_read;
-    r.seek         = &stdio_seek;
-    r.seek_from_start         = &stdio_seek_from_start;
-    r.tell         = &stdio_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &user_provider_buffer;
-    r.headers_only = 0;
+    r.message_size    = 0;
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &user_provider_buffer;
+    r.headers_only    = 0;
 
     err            = read_any(&r, grib_ok, bufr_ok, hdf5_ok, wrap_ok);
     *len           = r.message_size;
@@ -1035,7 +1037,7 @@ int _wmo_read_any_from_file(FILE* f,void* buffer,size_t* len,int grib_ok,int buf
 
 int wmo_read_any_from_file(FILE* f,void* buffer,size_t* len)
 {
-    return _wmo_read_any_from_file(f, buffer, len, 1, 1, 1 ,1);
+    return _wmo_read_any_from_file(f, buffer, len, 1, 1, 1, 1);
 }
 
 int wmo_read_grib_from_file(FILE* f,void* buffer,size_t* len)
@@ -1057,15 +1059,15 @@ int wmo_read_gts_from_file(FILE* f,void* buffer,size_t* len)
     u.user_buffer  = buffer;
     u.buffer_size  = *len;
 
-    r.message_size = 0;
-    r.read_data    = f;
-    r.read         = &stdio_read;
-    r.seek         = &stdio_seek;
-    r.seek_from_start         = &stdio_seek_from_start;
-    r.tell         = &stdio_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &user_provider_buffer;
-    r.headers_only = 0;
+    r.message_size    = 0;
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &user_provider_buffer;
+    r.headers_only    = 0;
 
     err            = read_any_gts(&r);
     *len           = r.message_size;
@@ -1075,50 +1077,50 @@ int wmo_read_gts_from_file(FILE* f,void* buffer,size_t* len)
 
 int wmo_read_taf_from_file(FILE* f,void* buffer,size_t* len)
 {
-	int         err;
-	user_buffer u;
-	reader      r;
-
-	u.user_buffer  = buffer;
-	u.buffer_size  = *len;
-
-	r.read_data    = f;
-	r.read         = &stdio_read;
-	r.seek		   = &stdio_seek;
-	r.seek_from_start	   = &stdio_seek_from_start;
-	r.tell		   = &stdio_tell;
-	r.alloc_data   = &u;
-	r.alloc        = &user_provider_buffer;
-	r.headers_only = 0;
-
-	err            = read_any_taf(&r);
-	*len           = r.message_size;
-
-	return err;
+    int         err;
+    user_buffer u;
+    reader      r;
+
+    u.user_buffer  = buffer;
+    u.buffer_size  = *len;
+
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &user_provider_buffer;
+    r.headers_only    = 0;
+
+    err            = read_any_taf(&r);
+    *len           = r.message_size;
+
+    return err;
 }
 
 int wmo_read_metar_from_file(FILE* f,void* buffer,size_t* len)
 {
-	int         err;
-	user_buffer u; 
-	reader      r; 
-
-	u.user_buffer  = buffer;
-	u.buffer_size  = *len;
-
-	r.read_data    = f;
-	r.read         = &stdio_read;
-	r.seek		   = &stdio_seek;
-	r.seek_from_start= &stdio_seek_from_start;
-	r.tell		   = &stdio_tell;
-	r.alloc_data   = &u;
-	r.alloc        = &user_provider_buffer;
-	r.headers_only = 0;
-
-	err            = read_any_metar(&r);
-	*len           = r.message_size;
-
-	return err;
+    int         err;
+    user_buffer u;
+    reader      r;
+
+    u.user_buffer  = buffer;
+    u.buffer_size  = *len;
+
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &user_provider_buffer;
+    r.headers_only    = 0;
+
+    err            = read_any_metar(&r);
+    *len           = r.message_size;
+
+    return err;
 }
 
 /*================== */
@@ -1171,15 +1173,15 @@ int wmo_read_any_from_stream(void* stream_data,long (*stream_proc)(void*,void* b
     u.user_buffer  = buffer;
     u.buffer_size  = *len;
 
-    r.message_size = 0;
-    r.read_data    = &s;
-    r.read         = &stream_read;
-    r.seek         = &stream_seek;
-    r.seek_from_start= &stream_seek;
-    r.tell         = &stream_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &user_provider_buffer;
-    r.headers_only = 0;
+    r.message_size    = 0;
+    r.read_data       = &s;
+    r.read            = &stream_read;
+    r.seek            = &stream_seek;
+    r.seek_from_start = &stream_seek;
+    r.tell            = &stream_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &user_provider_buffer;
+    r.headers_only    = 0;
 
     err            = read_any(&r, 1, 1, 1, 1);
     *len           = r.message_size;
@@ -1207,15 +1209,15 @@ void *wmo_read_gts_from_file_malloc(FILE* f,int headers_only,size_t *size,off_t
     u.buffer       = NULL;
     r.offset       = 0;
 
-    r.message_size = 0;
-    r.read_data    = f;
-    r.read         = &stdio_read;
-    r.seek         = &stdio_seek;
-    r.seek_from_start= &stdio_seek_from_start;
-    r.tell         = &stdio_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &allocate_buffer;
-    r.headers_only = headers_only;
+    r.message_size    = 0;
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &allocate_buffer;
+    r.headers_only    = headers_only;
 
     *err           = read_any_gts(&r);
     *size          = r.message_size;
@@ -1226,48 +1228,48 @@ void *wmo_read_gts_from_file_malloc(FILE* f,int headers_only,size_t *size,off_t
 
 void *wmo_read_taf_from_file_malloc(FILE* f,int headers_only,size_t *size,off_t *offset,int* err)
 {
-	alloc_buffer u;
-	reader       r;
-
-	u.buffer       = NULL;
-
-	r.read_data    = f;
-	r.read         = &stdio_read;
-	r.seek         = &stdio_seek;
-	r.seek_from_start         = &stdio_seek_from_start;
-	r.tell         = &stdio_tell;
-	r.alloc_data   = &u;
-	r.alloc        = &allocate_buffer;
-	r.headers_only = headers_only;
-  
-	*err           = read_any_taf(&r);
-	*size	       = r.message_size;
-	*offset		   = r.offset;
-
-	return u.buffer;
+    alloc_buffer u;
+    reader       r;
+
+    u.buffer       = NULL;
+
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &allocate_buffer;
+    r.headers_only    = headers_only;
+
+    *err           = read_any_taf(&r);
+    *size          = r.message_size;
+    *offset        = r.offset;
+
+    return u.buffer;
 }
 
 void *wmo_read_metar_from_file_malloc(FILE* f,int headers_only,size_t *size,off_t *offset,int* err)
 {
-	alloc_buffer u; 
-	reader       r; 
-
-	u.buffer       = NULL;
-
-	r.read_data    = f;
-	r.read         = &stdio_read;
-	r.seek         = &stdio_seek;
-	r.seek_from_start         = &stdio_seek_from_start;
-	r.tell         = &stdio_tell;
-	r.alloc_data   = &u;
-	r.alloc        = &allocate_buffer;
-	r.headers_only = headers_only;
-  
-	*err           = read_any_metar(&r);
-	*size	       = r.message_size;
-	*offset		   = r.offset;
-
-	return u.buffer;
+    alloc_buffer u;
+    reader       r;
+
+    u.buffer       = NULL;
+
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &allocate_buffer;
+    r.headers_only    = headers_only;
+
+    *err           = read_any_metar(&r);
+    *size          = r.message_size;
+    *offset        = r.offset;
+
+    return u.buffer;
 }
 
 static void *_wmo_read_any_from_file_malloc(FILE* f,int* err,size_t *size,off_t *offset,
@@ -1279,16 +1281,16 @@ static void *_wmo_read_any_from_file_malloc(FILE* f,int* err,size_t *size,off_t
     u.buffer       = NULL;
     u.size         = 0;
 
-    r.message_size = 0;
-    r.read_data    = f;
-    r.read         = &stdio_read;
-    r.seek         = &stdio_seek;
-    r.seek_from_start         = &stdio_seek_from_start;
-    r.tell         = &stdio_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &allocate_buffer;
-    r.headers_only = headers_only;
-    r.offset       = 0;
+    r.message_size    = 0;
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &allocate_buffer;
+    r.headers_only    = headers_only;
+    r.offset          = 0;
 
     *err           = read_any(&r, grib_ok, bufr_ok, hdf5_ok, wrap_ok);
     *size          = r.message_size;
@@ -1341,15 +1343,15 @@ int grib_read_any_headers_only_from_file(grib_context* ctx,FILE* f,void* buffer,
     u.user_buffer  = buffer;
     u.buffer_size  = *len;
 
-    r.message_size = 0;
-    r.read_data    = f;
-    r.read         = &stdio_read;
-    r.seek         = &stdio_seek;
-    r.seek_from_start         = &stdio_seek_from_start;
-    r.tell         = &stdio_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &user_provider_buffer;
-    r.headers_only = 1;
+    r.message_size    = 0;
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &user_provider_buffer;
+    r.headers_only    = 1;
 
     err            = read_any(&r, 1, GRIB_API_READS_BUFR, GRIB_API_READS_HDF5, GRIB_API_READS_WRAP);
 
@@ -1368,15 +1370,15 @@ int grib_read_any_from_file(grib_context* ctx,FILE* f,void* buffer,size_t* len)
     u.user_buffer  = buffer;
     u.buffer_size  = *len;
 
-    r.message_size = 0;
-    r.read_data    = f;
-    r.read         = &stdio_read;
-    r.seek         = &stdio_seek;
-    r.seek_from_start         = &stdio_seek_from_start;
-    r.tell         = &stdio_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &user_provider_buffer;
-    r.headers_only = 0;
+    r.message_size    = 0;
+    r.read_data       = f;
+    r.read            = &stdio_read;
+    r.seek            = &stdio_seek;
+    r.seek_from_start = &stdio_seek_from_start;
+    r.tell            = &stdio_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &user_provider_buffer;
+    r.headers_only    = 0;
 
     offset=ftello(f);
 
@@ -1441,15 +1443,15 @@ int grib_read_any_from_memory_alloc(grib_context* ctx,unsigned char** data,size_
     u.length       = 0;
     u.ctx          = ctx ? ctx : grib_context_get_default();
 
-    r.message_size = 0;
-    r.read_data    = &m;
-    r.read         = &memory_read;
-    r.seek         = &memory_seek;
-    r.seek_from_start         = &memory_seek;
-    r.tell         = &memory_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &context_allocate_buffer;
-    r.headers_only = 0;
+    r.message_size    = 0;
+    r.read_data       = &m;
+    r.read            = &memory_read;
+    r.seek            = &memory_seek;
+    r.seek_from_start = &memory_seek;
+    r.tell            = &memory_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &context_allocate_buffer;
+    r.headers_only    = 0;
 
     err            = read_any(&r, 1, GRIB_API_READS_BUFR, GRIB_API_READS_HDF5, GRIB_API_READS_WRAP);
     *buffer        = u.buffer;
@@ -1474,15 +1476,15 @@ int grib_read_any_from_memory(grib_context* ctx,unsigned char** data,size_t* dat
     u.user_buffer  = buffer;
     u.buffer_size  = *len;
 
-    r.message_size = 0;
-    r.read_data    = &m;
-    r.read         = &memory_read;
-    r.seek         = &memory_seek;
-    r.seek_from_start         = &memory_seek;
-    r.tell         = &memory_tell;
-    r.alloc_data   = &u;
-    r.alloc        = &user_provider_buffer;
-    r.headers_only = 0;
+    r.message_size    = 0;
+    r.read_data       = &m;
+    r.read            = &memory_read;
+    r.seek            = &memory_seek;
+    r.seek_from_start = &memory_seek;
+    r.tell            = &memory_tell;
+    r.alloc_data      = &u;
+    r.alloc           = &user_provider_buffer;
+    r.headers_only    = 0;
 
     err            = read_any(&r, 1, GRIB_API_READS_BUFR, GRIB_API_READS_HDF5, GRIB_API_READS_WRAP);
     *len           = r.message_size;
@@ -1490,25 +1492,37 @@ int grib_read_any_from_memory(grib_context* ctx,unsigned char** data,size_t* dat
     *data_length   = m.data_len;
     *data          = m.data;
 
-
     return err;
 }
 
 int grib_count_in_file(grib_context* c, FILE* f,int* n)
 {
     int err=0;
-    void* mesg=NULL;
-    size_t size=0;
-    off_t offset=0;
     *n=0;
     if (!c) c=grib_context_get_default();
 
-    while ( (mesg=wmo_read_any_from_file_malloc ( f,0,  &size,&offset,&err))!=NULL && err==GRIB_SUCCESS) {
-        grib_context_free(c,mesg);
-        (*n)++;
+    if ( c->multi_support_on )
+    {
+        /* GRIB-395 */
+        grib_handle* h=NULL;
+        while ((h=grib_handle_new_from_file(c, f , &err))!=NULL) {
+            grib_handle_delete(h);
+            (*n)++;
+        }
+    }
+    else
+    {
+        void* mesg=NULL;
+        size_t size=0;
+        off_t offset=0;
+        while ( (mesg=wmo_read_any_from_file_malloc ( f,0,  &size,&offset,&err))!=NULL && err==GRIB_SUCCESS) {
+            grib_context_free(c,mesg);
+            (*n)++;
+        }
     }
 
     rewind(f);
 
     return err==GRIB_END_OF_FILE ? 0 : err;
+
 }
diff --git a/src/grib_iterator_class_lambert_conformal.c b/src/grib_iterator_class_lambert_conformal.c
index 2a66d65..f8c52c2 100644
--- a/src/grib_iterator_class_lambert_conformal.c
+++ b/src/grib_iterator_class_lambert_conformal.c
@@ -83,7 +83,6 @@ static void init_class(grib_iterator_class* c)
 
 static int next(grib_iterator* i, double *lat, double *lon, double *val)
 {
-
 	grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)i;
 
 	if((long)i->e >= (long)(i->nv-1))
@@ -114,161 +113,161 @@ static int next(grib_iterator* i, double *lat, double *lon, double *val)
 
 static int init(grib_iterator* iter,grib_handle* h,grib_arguments* args)
 {
-	int i, j, ret=0;
-	double *lats, *lons; /* the lat/lon arrays to be populated */
-	long nx,ny,iScansNegatively,jScansPositively,jPointsAreConsecutive,alternativeRowScanning;
-	double LoVInDegrees,LaDInDegrees,Latin1InDegrees,Latin2InDegrees,latFirstInDegrees,
-	lonFirstInDegrees, Dx, Dy, radius=0;
-	double latFirstInRadians, lonFirstInRadians, LoVInRadians, Latin1InRadians, Latin2InRadians,
-	LaDInRadians, lonDiff, lonDeg, latDeg;
-	double f, n, rho, rho0, angle, x0, y0, x, y, tmp, tmp2;
-
-	grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)iter;
-
-	const char* sradius                  = grib_arguments_get_name(h,args,self->carg++);
-	const char* snx                      = grib_arguments_get_name(h,args,self->carg++);
-	const char* sny                      = grib_arguments_get_name(h,args,self->carg++);
-	const char* sLoVInDegrees            = grib_arguments_get_name(h,args,self->carg++);
-	const char* sLaDInDegrees            = grib_arguments_get_name(h,args,self->carg++);
-	const char* sLatin1InDegrees         = grib_arguments_get_name(h,args,self->carg++);
-	const char* sLatin2InDegrees         = grib_arguments_get_name(h,args,self->carg++);
-	const char* slatFirstInDegrees       = grib_arguments_get_name(h,args,self->carg++);
-	const char* slonFirstInDegrees       = grib_arguments_get_name(h,args,self->carg++);
-	/* Dx and Dy are in Metres */
-	const char* sDx                      = grib_arguments_get_name(h,args,self->carg++);
-	const char* sDy                      = grib_arguments_get_name(h,args,self->carg++);
-	const char* siScansNegatively        = grib_arguments_get_name(h,args,self->carg++);
-	const char* sjScansPositively        = grib_arguments_get_name(h,args,self->carg++);
-	const char* sjPointsAreConsecutive   = grib_arguments_get_name(h,args,self->carg++);
-	const char* salternativeRowScanning  = grib_arguments_get_name(h,args,self->carg++);
-
-	if((ret = grib_get_long_internal(h, snx,&nx)) != GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_long_internal(h, sny,&ny)) != GRIB_SUCCESS)
-		return ret;
-
-	if (iter->nv!=nx*ny) {
-		grib_context_log(h->context,GRIB_LOG_ERROR,"Wrong number of points (%ld!=%ldx%ld)",iter->nv,nx,ny);
-		return GRIB_WRONG_GRID;
-	}
-	if((ret = grib_get_double_internal(h, sradius,&radius)) != GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_double_internal(h, sLoVInDegrees, &LoVInDegrees))!=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_double_internal(h, sLaDInDegrees, &LaDInDegrees))!=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_double_internal(h, sLatin1InDegrees, &Latin1InDegrees))!=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_double_internal(h, sLatin2InDegrees, &Latin2InDegrees))!=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_double_internal(h, slatFirstInDegrees,&latFirstInDegrees)) !=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_double_internal(h, slonFirstInDegrees,&lonFirstInDegrees)) !=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_double_internal(h, sDx,&Dx)) !=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_double_internal(h, sDy,&Dy)) !=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_long_internal(h, sjPointsAreConsecutive,&jPointsAreConsecutive)) !=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_long_internal(h, sjScansPositively,&jScansPositively)) !=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_long_internal(h, siScansNegatively,&iScansNegatively)) !=GRIB_SUCCESS)
-		return ret;
-	if((ret = grib_get_long_internal(h, salternativeRowScanning,&alternativeRowScanning)) !=GRIB_SUCCESS)
-		return ret;
-
-	/* See Wolfram MathWorld: http://mathworld.wolfram.com/LambertConformalConicProjection.html */
-	latFirstInRadians = latFirstInDegrees * DEG2RAD;
-	lonFirstInRadians = lonFirstInDegrees * DEG2RAD;
-	Latin1InRadians   = Latin1InDegrees * DEG2RAD;
-	Latin2InRadians   = Latin2InDegrees * DEG2RAD;
-	LaDInRadians      = LaDInDegrees * DEG2RAD;
-	LoVInRadians      = LoVInDegrees * DEG2RAD;
-
-	if ( fabs(Latin1InRadians - Latin2InRadians) < 1E-09 ) {
-		n = sin(Latin1InRadians);
-	}
-	else {
-		n = log(cos(Latin1InRadians)/cos(Latin2InRadians)) /
-				log(tan(M_PI_4 + Latin2InRadians/2.0) / tan(M_PI_4 + Latin1InRadians/2.0));
-	}
-
-	f = (cos(Latin1InRadians) * pow(tan(M_PI_4 + Latin1InRadians/2.0), n)) / n;
-	rho = radius * f * pow(tan(M_PI_4 + latFirstInRadians/2.0), -n);
-	rho0 = radius * f * pow(tan(M_PI_4 + LaDInRadians/2.0), -n);
-	if ( n < 0 ) /* adjustment for southern hemisphere */
-		rho0 = -rho0;
-	lonDiff = lonFirstInRadians - LoVInRadians;
-
-	/* Adjust longitude to range -180 to 180 */
-	if (lonDiff > M_PI)  lonDiff -= 2*M_PI;
-	if (lonDiff < -M_PI) lonDiff += 2*M_PI;
-	angle = n * lonDiff;
-	x0 = rho * sin(angle);
-	y0 = rho0 - rho * cos(angle);
-	Dx = iScansNegatively == 0 ? Dx : -Dx;
-	Dy = jScansPositively == 1 ? Dy : -Dy;
-
-	/* No support (yet) for jPointsAreConsecutive */
-	if (jPointsAreConsecutive) {
-		grib_context_log(h->context,GRIB_LOG_ERROR,"No support for: 'Adjacent points in j (y) direction being consecutive'");
-		Assert(0);
-	}
-
-	/* Allocate latitude and longitude arrays */
-	self->lats = (double*)grib_context_malloc(h->context,iter->nv*sizeof(double));
-	if (!self->lats) {
-		grib_context_log(h->context,GRIB_LOG_ERROR,	"unable to allocate %ld bytes",iter->nv*sizeof(double));
-		return GRIB_OUT_OF_MEMORY;
-	}
-	self->lons = (double*)grib_context_malloc(h->context,iter->nv*sizeof(double));
-	if (!self->lats) {
-		grib_context_log(h->context,GRIB_LOG_ERROR,	"unable to allocate %ld bytes",iter->nv*sizeof(double));
-		return GRIB_OUT_OF_MEMORY;
-	}
-	lats=self->lats;
-	lons=self->lons;
-
-	/* Populate our arrays */
-	for (j = 0; j < ny; j++) {
-		y = y0 + j*Dy;
-		if ( n < 0 ) {  /* adjustment for southern hemisphere */
-			y = -y;
-		}
-		tmp = rho0 - y;
-		tmp2 = tmp*tmp;
-		for (i = 0; i < nx; i++) {
-			int index =i+j*nx;
-			x = x0 + i*Dx;
-			if ( n < 0 ) {  /* adjustment for southern hemisphere */
-				x = -x;
-			}
-
-			angle = atan(x / tmp);
-			rho = sqrt(x*x + tmp2);
-			if (n <= 0) rho = -rho;
-			lonDeg = LoVInDegrees + (angle/n) * RAD2DEG;
-			latDeg = (2.0 * atan(pow(radius * f/rho, 1.0/n)) - M_PI_2) * RAD2DEG;
-			while ( lonDeg >= 360.0) lonDeg -= 360.0;
-			while ( lonDeg < 0.0)    lonDeg += 360.0;
-			lons[index] = lonDeg;
-			lats[index] = latDeg;
-		}
-	}
-
-	iter->e = -1;
-
-	return ret;
+    int i, j, ret=0;
+    double *lats, *lons; /* the lat/lon arrays to be populated */
+    long nx,ny,iScansNegatively,jScansPositively,jPointsAreConsecutive,alternativeRowScanning;
+    double LoVInDegrees,LaDInDegrees,Latin1InDegrees,Latin2InDegrees,latFirstInDegrees,
+    lonFirstInDegrees, Dx, Dy, radius=0;
+    double latFirstInRadians, lonFirstInRadians, LoVInRadians, Latin1InRadians, Latin2InRadians,
+    LaDInRadians, lonDiff, lonDeg, latDeg;
+    double f, n, rho, rho0, angle, x0, y0, x, y, tmp, tmp2;
+
+    grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)iter;
+
+    const char* sradius                  = grib_arguments_get_name(h,args,self->carg++);
+    const char* snx                      = grib_arguments_get_name(h,args,self->carg++);
+    const char* sny                      = grib_arguments_get_name(h,args,self->carg++);
+    const char* sLoVInDegrees            = grib_arguments_get_name(h,args,self->carg++);
+    const char* sLaDInDegrees            = grib_arguments_get_name(h,args,self->carg++);
+    const char* sLatin1InDegrees         = grib_arguments_get_name(h,args,self->carg++);
+    const char* sLatin2InDegrees         = grib_arguments_get_name(h,args,self->carg++);
+    const char* slatFirstInDegrees       = grib_arguments_get_name(h,args,self->carg++);
+    const char* slonFirstInDegrees       = grib_arguments_get_name(h,args,self->carg++);
+    /* Dx and Dy are in Metres */
+    const char* sDx                      = grib_arguments_get_name(h,args,self->carg++);
+    const char* sDy                      = grib_arguments_get_name(h,args,self->carg++);
+    const char* siScansNegatively        = grib_arguments_get_name(h,args,self->carg++);
+    const char* sjScansPositively        = grib_arguments_get_name(h,args,self->carg++);
+    const char* sjPointsAreConsecutive   = grib_arguments_get_name(h,args,self->carg++);
+    const char* salternativeRowScanning  = grib_arguments_get_name(h,args,self->carg++);
+
+    if((ret = grib_get_long_internal(h, snx,&nx)) != GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_long_internal(h, sny,&ny)) != GRIB_SUCCESS)
+        return ret;
+
+    if (iter->nv!=nx*ny) {
+        grib_context_log(h->context,GRIB_LOG_ERROR,"Wrong number of points (%ld!=%ldx%ld)",iter->nv,nx,ny);
+        return GRIB_WRONG_GRID;
+    }
+    if((ret = grib_get_double_internal(h, sradius,&radius)) != GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_double_internal(h, sLoVInDegrees, &LoVInDegrees))!=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_double_internal(h, sLaDInDegrees, &LaDInDegrees))!=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_double_internal(h, sLatin1InDegrees, &Latin1InDegrees))!=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_double_internal(h, sLatin2InDegrees, &Latin2InDegrees))!=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_double_internal(h, slatFirstInDegrees,&latFirstInDegrees)) !=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_double_internal(h, slonFirstInDegrees,&lonFirstInDegrees)) !=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_double_internal(h, sDx,&Dx)) !=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_double_internal(h, sDy,&Dy)) !=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_long_internal(h, sjPointsAreConsecutive,&jPointsAreConsecutive)) !=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_long_internal(h, sjScansPositively,&jScansPositively)) !=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_long_internal(h, siScansNegatively,&iScansNegatively)) !=GRIB_SUCCESS)
+        return ret;
+    if((ret = grib_get_long_internal(h, salternativeRowScanning,&alternativeRowScanning)) !=GRIB_SUCCESS)
+        return ret;
+
+    /* See Wolfram MathWorld: http://mathworld.wolfram.com/LambertConformalConicProjection.html */
+    latFirstInRadians = latFirstInDegrees * DEG2RAD;
+    lonFirstInRadians = lonFirstInDegrees * DEG2RAD;
+    Latin1InRadians   = Latin1InDegrees * DEG2RAD;
+    Latin2InRadians   = Latin2InDegrees * DEG2RAD;
+    LaDInRadians      = LaDInDegrees * DEG2RAD;
+    LoVInRadians      = LoVInDegrees * DEG2RAD;
+
+    if ( fabs(Latin1InRadians - Latin2InRadians) < 1E-09 ) {
+        n = sin(Latin1InRadians);
+    }
+    else {
+        n = log(cos(Latin1InRadians)/cos(Latin2InRadians)) /
+                log(tan(M_PI_4 + Latin2InRadians/2.0) / tan(M_PI_4 + Latin1InRadians/2.0));
+    }
+
+    f = (cos(Latin1InRadians) * pow(tan(M_PI_4 + Latin1InRadians/2.0), n)) / n;
+    rho = radius * f * pow(tan(M_PI_4 + latFirstInRadians/2.0), -n);
+    rho0 = radius * f * pow(tan(M_PI_4 + LaDInRadians/2.0), -n);
+    if ( n < 0 ) /* adjustment for southern hemisphere */
+        rho0 = -rho0;
+    lonDiff = lonFirstInRadians - LoVInRadians;
+
+    /* Adjust longitude to range -180 to 180 */
+    if (lonDiff > M_PI)  lonDiff -= 2*M_PI;
+    if (lonDiff < -M_PI) lonDiff += 2*M_PI;
+    angle = n * lonDiff;
+    x0 = rho * sin(angle);
+    y0 = rho0 - rho * cos(angle);
+    Dx = iScansNegatively == 0 ? Dx : -Dx;
+    /* GRIB-405: Don't change sign of Dy. Latitudes ALWAYS increase from latitudeOfFirstGridPoint */
+    /*Dy = jScansPositively == 1 ? Dy : -Dy;*/
+
+    /* No support (yet) for jPointsAreConsecutive */
+    if (jPointsAreConsecutive) {
+        grib_context_log(h->context,GRIB_LOG_ERROR,"No support for: 'Adjacent points in j (y) direction being consecutive'");
+        Assert(0);
+    }
+
+    /* Allocate latitude and longitude arrays */
+    self->lats = (double*)grib_context_malloc(h->context,iter->nv*sizeof(double));
+    if (!self->lats) {
+        grib_context_log(h->context,GRIB_LOG_ERROR,	"unable to allocate %ld bytes",iter->nv*sizeof(double));
+        return GRIB_OUT_OF_MEMORY;
+    }
+    self->lons = (double*)grib_context_malloc(h->context,iter->nv*sizeof(double));
+    if (!self->lats) {
+        grib_context_log(h->context,GRIB_LOG_ERROR,	"unable to allocate %ld bytes",iter->nv*sizeof(double));
+        return GRIB_OUT_OF_MEMORY;
+    }
+    lats=self->lats;
+    lons=self->lons;
+
+    /* Populate our arrays */
+    for (j = 0; j < ny; j++) {
+        y = y0 + j*Dy;
+        if ( n < 0 ) {  /* adjustment for southern hemisphere */
+            y = -y;
+        }
+        tmp = rho0 - y;
+        tmp2 = tmp*tmp;
+        for (i = 0; i < nx; i++) {
+            int index =i+j*nx;
+            x = x0 + i*Dx;
+            if ( n < 0 ) {  /* adjustment for southern hemisphere */
+                x = -x;
+            }
+
+            angle = atan(x / tmp);
+            rho = sqrt(x*x + tmp2);
+            if (n <= 0) rho = -rho;
+            lonDeg = LoVInDegrees + (angle/n) * RAD2DEG;
+            latDeg = (2.0 * atan(pow(radius * f/rho, 1.0/n)) - M_PI_2) * RAD2DEG;
+            while ( lonDeg >= 360.0) lonDeg -= 360.0;
+            while ( lonDeg < 0.0)    lonDeg += 360.0;
+            lons[index] = lonDeg;
+            lats[index] = latDeg;
+        }
+    }
+
+    iter->e = -1;
+
+    return ret;
 }
 
 static int destroy(grib_iterator* i)
 {
-	grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)i;
-	const grib_context *c = i->h->context;
+    grib_iterator_lambert_conformal* self = (grib_iterator_lambert_conformal*)i;
+    const grib_context *c = i->h->context;
 
-	grib_context_free(c,self->lats);
-	grib_context_free(c,self->lons);
-	return 1;
+    grib_context_free(c,self->lats);
+    grib_context_free(c,self->lons);
+    return 1;
 }
-
diff --git a/src/grib_iterator_class_polar_stereographic.c b/src/grib_iterator_class_polar_stereographic.c
index 7a21b2c..7d57445 100644
--- a/src/grib_iterator_class_polar_stereographic.c
+++ b/src/grib_iterator_class_polar_stereographic.c
@@ -218,7 +218,8 @@ static int init(grib_iterator* iter,grib_handle* h,grib_arguments* args)
                     *lats = asin( cosc*sinphi1 + y*sinc*cosphi1/rho ) * RAD2DEG;
                     *lons = (lambda0+atan2(x*sinc, rho*cosphi1*cosc - y*sinphi1*sinc)) * RAD2DEG;
                 }
-                if (*lons<0) *lons+=360;
+                while (*lons<0)   *lons += 360;
+                while (*lons>360) *lons -= 360;
                 lons++;
                 lats++;
 
@@ -246,7 +247,8 @@ static int init(grib_iterator* iter,grib_handle* h,grib_arguments* args)
                     *lats = asin( cosc*sinphi1 + y*sinc*cosphi1/rho ) * RAD2DEG;
                     *lons = (lambda0+atan2(x*sinc, rho*cosphi1*cosc - y*sinphi1*sinc)) * RAD2DEG;
                 }
-                if (*lons<0) *lons+=360;
+                while (*lons<0)   *lons += 360;
+                while (*lons>360) *lons -= 360;
                 lons++;
                 lats++;
 
diff --git a/src/grib_itrie_keys.c b/src/grib_itrie_keys.c
index 3b50cbb..71da6cc 100644
--- a/src/grib_itrie_keys.c
+++ b/src/grib_itrie_keys.c
@@ -285,7 +285,23 @@ static void init() {
   pthread_mutexattr_destroy(&attr);
 
 }
+#elif GRIB_OMP_THREADS
+static int once = 0;
+static omp_nest_lock_t mutex;
+
+static void init()
+{
+    GRIB_OMP_CRITICAL(lock_grib_hash_keys_c)
+    {
+        if (once == 0)
+        {
+            omp_init_nest_lock(&mutex);
+            once = 1;
+        }
+    }
+}
 #endif
+
 struct grib_itrie {
   grib_itrie* next[SIZE];
   grib_context *context;
@@ -308,7 +324,7 @@ void grib_hash_keys_delete(grib_itrie *t) {
 
   if(t)  {
     int i;
-    for(i = 0; i <= SIZE; i++)
+    for(i = 0; i < SIZE; i++)
       if (t->next[i])
         grib_hash_keys_delete(t->next[i]);
 
diff --git a/src/grib_keys_iterator.c b/src/grib_keys_iterator.c
index a369379..aeaa118 100644
--- a/src/grib_keys_iterator.c
+++ b/src/grib_keys_iterator.c
@@ -8,11 +8,6 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_keys_iterator
- *
- */
-
 #include "grib_api_internal.h"
 
 GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b)
@@ -33,7 +28,7 @@ struct grib_keys_iterator{
     grib_trie     *seen;
 };
 
-grib_keys_iterator*  grib_keys_iterator_new(grib_handle* h,unsigned long filter_flags, const char* name_space)
+grib_keys_iterator* grib_keys_iterator_new(grib_handle* h,unsigned long filter_flags, const char* name_space)
 {
     grib_keys_iterator* ki=NULL;
 
@@ -88,7 +83,11 @@ int grib_keys_iterator_set_flags(grib_keys_iterator* ki,unsigned long flags)
 
 static void mark_seen(grib_keys_iterator* ki,const char* name)
 {
-    grib_trie_insert(ki->seen,name,(void*)name);
+    /* See GRIB-932 */
+    char* tmp = grib_context_strdup(ki->handle->context, name);
+    grib_trie_insert(ki->seen, tmp,(void*)tmp);
+
+    /* grib_trie_insert(ki->seen,name,(void*)name); */
 }
 
 static int was_seen(grib_keys_iterator* ki,const char* name)
diff --git a/src/grib_lex.c b/src/grib_lex.c
index 3e8345f..0cd7825 100644
--- a/src/grib_lex.c
+++ b/src/grib_lex.c
@@ -1,6 +1,5 @@
-#line 2 "gribl.c"
 
-#line 4 "gribl.c"
+#line 3 "lex.grib_yy.c"
 
 #define  YY_INT_ALIGNED short int
 
@@ -1149,7 +1148,7 @@ void _grib_ignore_grib_yyunput_unused_error() { grib_yyunput(0,0); }
  #define GET_INPUT input
 #endif
 
-#line 1153 "gribl.c"
+#line 1152 "lex.grib_yy.c"
 
 #define INITIAL 0
 
@@ -1335,7 +1334,7 @@ YY_DECL
 
 
 
-#line 1339 "gribl.c"
+#line 1338 "lex.grib_yy.c"
 
 	if ( !(grib_yy_init) )
 		{
@@ -2167,7 +2166,7 @@ YY_RULE_SETUP
 #line 283 "gribl.l"
 ECHO;
 	YY_BREAK
-#line 2171 "gribl.c"
+#line 2170 "lex.grib_yy.c"
 case YY_STATE_EOF(INITIAL):
 	grib_yyterminate();
 
diff --git a/src/grib_loader_from_array.c b/src/grib_loader_from_array.c
index fb37955..4deee09 100644
--- a/src/grib_loader_from_array.c
+++ b/src/grib_loader_from_array.c
@@ -151,6 +151,7 @@ int grib_init_accessor_from_array(grib_loader* loader,grib_accessor* ga,grib_arg
 
                 case GRIB_TYPE_LONG:
                     lvalue=(long*)malloc(sizeof(long)*len);
+                    Assert(lvalue);
                     for (i=0;i<len;i++) lvalue[i]=(long)dvalue[i];
                     grib_context_log(h->context,GRIB_LOG_DEBUG, "Setting long array %s",ga->name);
                     grib_set_long_array(h,ga->name,lvalue,len);
diff --git a/src/grib_nearest_class_reduced.c b/src/grib_nearest_class_reduced.c
index 94b0093..610e35a 100644
--- a/src/grib_nearest_class_reduced.c
+++ b/src/grib_nearest_class_reduced.c
@@ -177,6 +177,10 @@ static int find(grib_nearest* nearest, grib_handle* h,
         if (!self->lons) return GRIB_OUT_OF_MEMORY;
 
         iter=grib_iterator_new(h,0,&ret);
+        if (ret != GRIB_SUCCESS) {
+            grib_context_log(h->context,GRIB_LOG_ERROR,"Unable to create lat/lon iterator");
+            return ret;
+        }
         while(grib_iterator_next(iter,&lat,&lon,&dummy)) {
             if (olat!=lat) {
                 self->lats[ilat++]=lat;
@@ -288,7 +292,6 @@ static int find(grib_nearest* nearest, grib_handle* h,
             for (jj=0;jj<self->j[1];jj++) nlon+=pl[jj];
             nplm1=pl[self->j[1]]-1;
         } else {
-            long row_count,ilon_first,ilon_last;
             for (jj=0;jj<self->j[1];jj++) {
                 row_count=0;ilon_first=0;ilon_last=0;
                 grib_get_reduced_row(pl[jj],self->lon_first,self->lon_last,&row_count,&ilon_first,&ilon_last);
diff --git a/src/grib_nearest_class_regular.c b/src/grib_nearest_class_regular.c
index 0a702ad..25df0c8 100644
--- a/src/grib_nearest_class_regular.c
+++ b/src/grib_nearest_class_regular.c
@@ -295,6 +295,10 @@ static int find(grib_nearest* nearest, grib_handle* h,
         if (!self->lons) return GRIB_OUT_OF_MEMORY;
 
         iter=grib_iterator_new(h,0,&ret);
+        if (ret != GRIB_SUCCESS) {
+            grib_context_log(h->context,GRIB_LOG_ERROR,"Unable to create lat/lon iterator");
+            return ret;
+        }
         while(grib_iterator_next(iter,&lat,&lon,&dummy)) {
             if (olat != lat) {
                 Assert( ilat < self->lats_count );
diff --git a/src/grib_nearest_class_sh.c b/src/grib_nearest_class_sh.c
index 35d7bd7..731fd30 100644
--- a/src/grib_nearest_class_sh.c
+++ b/src/grib_nearest_class_sh.c
@@ -78,11 +78,10 @@ static void init_class(grib_nearest_class* c)
 #define LEGENDRE_SIZE(L) (L+1)*(L+2)/2
 
 static void grib_trigs(int m,double lambda,double* c,double* s);
-static void grib_invtrans_legendre(int L,double x,
-                       double* RI,double* TR,double* TI);
+static int grib_invtrans_legendre(int L,double x, double* RI,double* TR,double* TI);
 static double grib_invtrans_trig(int L,double* TR,double* TI,
-                                 double *c,double *s);
-static double grib_invtrans(grib_context *c,int L,double latdeg,double londeg,double* values);
+        double *c,double *s);
+static int grib_invtrans(grib_context *c,int L,double latdeg,double londeg,double* values, double* result);
 
 static int init(grib_nearest* nearest,grib_handle* h,grib_arguments* args)
 {
@@ -128,7 +127,8 @@ static int find(grib_nearest* nearest, grib_handle* h,
 
     Assert(vsize==size);
 
-    val=grib_invtrans(h->context,J,inlat,inlon,values);
+    ret=grib_invtrans(h->context,J,inlat,inlon,values, &val);
+    if (ret != GRIB_SUCCESS) return ret;
 
     grib_context_free(h->context,values);
 
@@ -179,7 +179,7 @@ static double grib_invtrans_trig(int L,double* TR,double* TI,double *c,double *s
     return ret;
 }
 
-static void grib_invtrans_legendre(int L,double x,
+static int grib_invtrans_legendre(int L,double x,
         double* RI,double* TR,double* TI)
 {
     int l,m;
@@ -189,17 +189,17 @@ static void grib_invtrans_legendre(int L,double x,
 
     if (fabs(x) > 1.0) {
         printf("grib_legendreP: invalid x=%g must be abs(x)>0\n",x);
-        exit(1);
+        return GRIB_INVALID_ARGUMENT;
     }
     if (L<0) {
         printf("grib_legendreP: invalid L=%d must be >0\n",L);
-        exit(1);
+        return GRIB_INVALID_ARGUMENT;
     }
 
     pP=(double*)malloc(sizeof(double)*(L+1));
     if (!pP) {
         printf("unable to allocate %d bytes\n",(int)sizeof(double)*(L+1));
-        exit(1);
+        return GRIB_OUT_OF_MEMORY;
     }
 
     y2=(1.0-x*x); fx=1; p0=1; oP=pP; pRI=RI;
@@ -234,14 +234,16 @@ static void grib_invtrans_legendre(int L,double x,
     TR[L]=pP[0] * *(pRI++);
     TI[L]=pP[0] * *(pRI++);
     printf("-- (%d,%d) %.20e %.20e\n",L,L,TR[m],pP[0]);
+    return GRIB_SUCCESS;
 }
 
-static double grib_invtrans(grib_context* context,int L,double latdeg,double londeg,double* values)
+static int grib_invtrans(grib_context* context, int L, double latdeg, double londeg, double* values,
+        double* result)
 {
-    double val;
     double *c,*s,*TR,*TI;
     double sinlat,deg2rad,lonrad;
     int Lp1=L+1;
+    int err = 0;
 
     deg2rad=acos(0.0)/90.0;
     sinlat=sin(latdeg*deg2rad);
@@ -276,14 +278,15 @@ static double grib_invtrans(grib_context* context,int L,double latdeg,double lon
         return GRIB_OUT_OF_MEMORY;
     }
 
-    grib_invtrans_legendre(L,sinlat,values,TR,TI);
+    err = grib_invtrans_legendre(L,sinlat,values,TR,TI);
+    if(err) return err;
 
-    val=grib_invtrans_trig(L,TR,TI,c,s);
+    *result=grib_invtrans_trig(L,TR,TI,c,s);
 
     grib_context_free(context,c);
     grib_context_free(context,s);
     grib_context_free(context,TR);
     grib_context_free(context,TI);
 
-    return val;
+    return GRIB_SUCCESS;
 }
diff --git a/src/grib_parse_utils.c b/src/grib_parse_utils.c
index a143c7e..97283b4 100644
--- a/src/grib_parse_utils.c
+++ b/src/grib_parse_utils.c
@@ -549,6 +549,11 @@ int grib_yywrap()
     }
 }
 
+char* file_being_parsed()
+{
+    return (char*)parse_file;
+}
+
 int grib_yyerror(const char* msg)
 {
     grib_context_log(grib_parser_context, GRIB_LOG_ERROR,
@@ -599,7 +604,7 @@ void grib_parser_include(const char* included_fname)
         f = stdin;   /* read from std input */
     } else {
         grib_context_log(grib_parser_context,GRIB_LOG_DEBUG,"parsing include file %s",parse_file);
-        f = fopen(parse_file,"r");
+        f = codes_fopen(parse_file,"r");
     }
     /* for(i = 0; i < top ; i++) printf("   "); */
     /* printf("PARSING %s\n",parse_file); */
@@ -773,12 +778,9 @@ grib_action* grib_parse_file( grib_context* gc,const char* filename)
 
         if(error)
         {
-#if 1
             if (a) grib_action_delete(gc,a);
             GRIB_MUTEX_UNLOCK(&mutex_file);
             return NULL;
-#endif
-            a = NULL;
         }
 
         af =(grib_action_file*)grib_context_malloc_clear_persistent(gc,sizeof(grib_action_file));
diff --git a/src/grib_scaling.c b/src/grib_scaling.c
index 7376303..e35d44e 100644
--- a/src/grib_scaling.c
+++ b/src/grib_scaling.c
@@ -14,8 +14,7 @@
 
 #include "grib_api_internal.h"
 
-#define GRIB_EPSILON  10E-12
-
+/* Return n to the power of s */
 double grib_power(long s,long n)
 {
     double divisor = 1.0;
@@ -34,18 +33,31 @@ double grib_power(long s,long n)
 
 long grib_get_binary_scale_fact(double max, double min, long bpval,int *ret)
 {
-    double range         = max - min;
-    double  zs           = 1;
-    long          scale  = 0;
+    double range   = max - min;
+    double  zs     = 1;
+    long    scale  = 0;
     const long last = 127; /* Depends on edition, should be parameter */
-
-    unsigned long maxint = grib_power(bpval,2) - 1;
-    double dmaxint=(double)maxint;
+    unsigned long maxint = 0;
+
+    /* See ECC-246
+      unsigned long maxint = grib_power(bpval,2) - 1;
+      double dmaxint=(double)maxint;
+    */
+    const double dmaxint = grib_power(bpval,2) - 1;
+    if (dmaxint >= ULONG_MAX) {
+        *ret = GRIB_OUT_OF_RANGE; /*overflow*/
+        return 0;
+    }
+    maxint = (unsigned long)dmaxint; /* Now it's safe to cast */
 
     *ret=0;
+    if (bpval < 1) {
+        *ret = GRIB_ENCODING_ERROR; /* constant field */
+        return 0;
+    }
 
     Assert (bpval >= 1);
-    /*  printf("---- Maxint %ld range=%g\n",maxint,range);      */
+    /*   printf("---- Maxint %ld range=%g\n",maxint,range);    */
     if(range == 0)
         return 0;
 
@@ -76,7 +88,6 @@ long grib_get_binary_scale_fact(double max, double min, long bpval,int *ret)
         scale = -last;
     }
     Assert(scale <= last);
-
     return scale;
 }
 
@@ -92,7 +103,7 @@ long grib_get_bits_per_value(double max, double min, long binary_scale_factor)
 
     if (maxint==0) maxint=1;
 
-    /*  printf("---- Maxint %ld range=%g\n",maxint,range);   */
+    /*  printf("---- Maxint %ld range=%g\n",maxint,range);     */
     if(range == 0)
         return 0;
 
diff --git a/src/grib_templates.c b/src/grib_templates.c
index 4297503..83ecaf3 100644
--- a/src/grib_templates.c
+++ b/src/grib_templates.c
@@ -52,9 +52,9 @@ static grib_handle* try_template(grib_context* c,const char* dir,const char* nam
         printf("ECCODES DEBUG: try_template path='%s'\n", path);
     }
 
-    if(access(path,F_OK) == 0)
+    if(codes_access(path,F_OK) == 0)
     {
-        FILE* f = fopen(path,"r");
+        FILE* f = codes_fopen(path,"r");
         if(!f)
         {
             grib_context_log(c,GRIB_LOG_PERROR,"cannot open %s",path);
@@ -76,7 +76,7 @@ static char* try_template_path(grib_context* c,const char* dir,const char* name)
 
     sprintf(path,"%s/%s.tmpl",dir,name);
 
-    if(access(path,R_OK) == 0)
+    if(codes_access(path,R_OK) == 0)
     {
         return grib_context_strdup(c,path);
     }
diff --git a/src/grib_util.c b/src/grib_util.c
index 8fe31c3..718619c 100644
--- a/src/grib_util.c
+++ b/src/grib_util.c
@@ -98,10 +98,10 @@ static grib_handle* grib_sections_copy_internal(grib_handle* hfrom,grib_handle*
     p=buffer;
     off=0;
     for (i=0;i<=hfrom->sections_count;i++) {
-        grib_handle* h;
-        if (sections[i]) h=hfrom;
-        else h=hto;
-        p=(unsigned char*)memcpy(p,h->buffer->data+section_offset[i],section_length[i]);
+        grib_handle* hand = NULL;
+        if (sections[i]) hand=hfrom;
+        else hand=hto;
+        p=(unsigned char*)memcpy(p,hand->buffer->data+section_offset[i],section_length[i]);
         section_offset[i]=off;
         off+=section_length[i];
         p+=section_length[i];
@@ -297,7 +297,7 @@ static grib_trie* init_list(const char* name)
     grib_context* c=grib_context_get_default();
     full_path=grib_context_full_defs_path(c,name);
 
-    fh=fopen(full_path,"r");
+    fh=codes_fopen(full_path,"r");
     if (!fh) {
         grib_context_log(c,GRIB_LOG_PERROR,"unable to read %s",full_path);
         return NULL;
@@ -777,7 +777,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
 
         /* convert to second_order if not constant field */
         if (setSecondOrder ) {
-            size_t slen=17;
+            size_t packTypeLen=17;
             int ii=0;
             int constant=1;
             double missingValue=0;
@@ -801,21 +801,21 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
                     long numberOfGroups;
                     grib_handle* htmp=grib_handle_clone(h);
 
-                    slen=17;
-                    grib_set_string(htmp,"packingType","grid_second_order",&slen);
+                    packTypeLen=17;
+                    grib_set_string(htmp,"packingType","grid_second_order",&packTypeLen);
                     grib_get_long(htmp,"numberOfGroups",&numberOfGroups);
                     /* GRIBEX is not able to decode overflown numberOfGroups with SPD */
                     if (numberOfGroups>65534 && h->context->no_spd ) {
-                        slen=24;
-                        grib_set_string(h,"packingType","grid_second_order_no_SPD",&slen);
+                        packTypeLen=24;
+                        grib_set_string(h,"packingType","grid_second_order_no_SPD",&packTypeLen);
                         grib_handle_delete(htmp);
                     } else {
                         grib_handle_delete(h);
                         h=htmp;
                     }
                 } else {
-                    slen=17;
-                    grib_set_string(h,"packingType","grid_second_order",&slen);
+                    packTypeLen=17;
+                    grib_set_string(h,"packingType","grid_second_order",&packTypeLen);
                     grib_set_double_array(h,"values",data_values,data_values_count);
                 }
             } else {
@@ -1186,17 +1186,17 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
     if((*err = grib_set_double_array(outh,"values",data_values,data_values_count)) != 0)
     {
         FILE* ferror;
-        long i,count;
+        long i,lcount;
         grib_context* c=grib_context_get_default();
 
         ferror=fopen("error.data","w");
-        count=0;
+        lcount=0;
         fprintf(ferror,"# data_values_count=%ld\n",(long)data_values_count);
         fprintf(ferror,"set values={ ");
         for (i=0;i<data_values_count-1;i++) {
             fprintf(ferror,"%g, ",data_values[i]);
-            if (count>10) {fprintf(ferror,"\n");count=0;}
-            count++;
+            if (lcount>10) {fprintf(ferror,"\n");lcount=0;}
+            lcount++;
         }
         fprintf(ferror,"%g }",data_values[data_values_count-1]);
         fclose(ferror);
@@ -1254,7 +1254,7 @@ grib_handle* grib_util_set_spec2(grib_handle* h,
         }
         if (!constant) {
             if (editionNumber == 1 ) {
-                long numberOfGroups;
+                long numberOfGroups=0;
                 grib_handle* htmp=grib_handle_clone(outh);
 
                 slen=17;
@@ -1489,6 +1489,7 @@ int parse_keyval_string(char* grib_tool, char* arg, int values_required, int def
     p=strtok(arg,",");
     while (p != NULL) {
         values[i].name=(char*)calloc(1,strlen(p)+1);
+        Assert(values[i].name);
         strcpy((char*)values[i].name,p);
         p=strtok(NULL,",");
         i++;
@@ -1534,7 +1535,7 @@ int parse_keyval_string(char* grib_tool, char* arg, int values_required, int def
                     printf("%s error: no value provided for key \"%s\"\n", grib_tool, values[i].name);
                 else
                     printf("Error: no value provided for key \"%s\"\n", values[i].name);
-                exit(GRIB_INVALID_ARGUMENT);
+                return GRIB_INVALID_ARGUMENT;
             }
             set_value(&values[i],value,equal);
         }
diff --git a/src/grib_value.c b/src/grib_value.c
index f7cee5e..7ffe29f 100644
--- a/src/grib_value.c
+++ b/src/grib_value.c
@@ -20,8 +20,6 @@ GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b)
     return (*a==0 && *b==0) ? 0 : 1;
 }
 
-#define SWAP(a,b) temp=(a);(a)=(b);(b)=temp;
-
 int grib_set_expression(grib_handle* h, const char* name,grib_expression* e)
 {
     grib_accessor* a = grib_find_accessor(h, name);
@@ -351,12 +349,13 @@ int grib_set_string_internal(grib_handle* h, const char* name,
 int grib_set_string(grib_handle* h, const char* name, const char* val, size_t *length)
 {
     int ret=0;
-    grib_accessor* a;
+    grib_accessor* a = NULL;
 
     /* Second order doesn't have a proper representation for constant fields.
-       So best not to do the change of packing type
+       So best not to do the change of packing type.
+       Use strncmp to catch all flavours of second order packing e.g. grid_second_order_boustrophedonic
      */
-    if (!grib_inline_strcmp(name,"packingType") && !grib_inline_strcmp(val,"grid_second_order")) {
+    if (!grib_inline_strcmp(name,"packingType") && !strncmp(val,"grid_second_order", 17)) {
         long bitsPerValue=0;
         size_t numCodedVals = 0;
         grib_get_long(h,"bitsPerValue",&bitsPerValue);
@@ -707,7 +706,7 @@ static int __grib_set_double_array(grib_handle* h, const char* name, const doubl
                     !strcmp(packingType,"grid_second_order_SPD2") ||
                     !strcmp(packingType,"grid_second_order_SPD3")
             ) {
-                int ret = 0;
+                ret = 0;
                 slen=11; /*length of 'grid_simple' */
                 if (h->context->debug) {
                     printf("ECCODES DEBUG __grib_set_double_array: Cannot use second order packing for constant fields. Using simple packing\n");
@@ -1146,7 +1145,6 @@ int grib_get_size(grib_handle* h, const char* name,size_t* size)
         a=grib_find_accessor(h, name);
         if(!a) return GRIB_NOT_FOUND;
         if (name[0]=='#') {
-            int ret;
             long count=*size;
             ret=grib_value_count(a,&count);
             *size=count;
diff --git a/src/grib_yacc.c b/src/grib_yacc.c
index da508ae..a94f29d 100644
--- a/src/grib_yacc.c
+++ b/src/grib_yacc.c
@@ -71,6 +71,8 @@
 
 extern int grib_yylex();
 extern int grib_yyerror(const char*);
+extern int grib_yylineno;
+extern char* file_being_parsed();
 
 extern   grib_action*           grib_parser_all_actions;
 extern   grib_concept_value*    grib_parser_concept;
@@ -89,7 +91,7 @@ static grib_hash_array_value *_reverse_hash_array(grib_hash_array_value *r,grib_
 
 
 /* Line 371 of yacc.c  */
-#line 93 "y.tab.c"
+#line 95 "y.tab.c"
 
 # ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -383,7 +385,7 @@ extern int grib_yydebug;
 typedef union YYSTYPE
 {
 /* Line 387 of yacc.c  */
-#line 37 "griby.y"
+#line 39 "griby.y"
 
     char                    *str;
     long                    lval;
@@ -403,7 +405,7 @@ typedef union YYSTYPE
 
 
 /* Line 387 of yacc.c  */
-#line 407 "y.tab.c"
+#line 409 "y.tab.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define grib_yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -431,7 +433,7 @@ int grib_yyparse ();
 /* Copy the second part of user declarations.  */
 
 /* Line 390 of yacc.c  */
-#line 435 "y.tab.c"
+#line 437 "y.tab.c"
 
 #ifdef short
 # undef short
@@ -900,34 +902,34 @@ static const grib_yytype_int16 grib_yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const grib_yytype_uint16 grib_yyrline[] =
 {
-       0,   260,   260,   262,   263,   264,   265,   267,   271,   274,
-     275,   276,   277,   280,   281,   285,   286,   289,   290,   291,
-     292,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     307,   308,   311,   312,   315,   316,   319,   323,   326,   329,
-     332,   335,   338,   341,   344,   347,   350,   353,   357,   360,
-     363,   366,   369,   372,   375,   378,   381,   384,   388,   391,
-     394,   397,   400,   403,   406,   409,   412,   415,   418,   421,
-     425,   428,   431,   434,   437,   440,   443,   446,   449,   452,
-     455,   458,   461,   464,   467,   471,   474,   477,   480,   483,
-     485,   488,   491,   494,   497,   500,   503,   506,   509,   512,
-     515,   518,   521,   524,   527,   530,   533,   535,   537,   540,
-     543,   546,   550,   554,   557,   560,   572,   584,   596,   599,
-     602,   604,   607,   610,   611,   612,   613,   615,   618,   619,
-     620,   621,   622,   623,   624,   625,   627,   628,   629,   630,
-     631,   635,   636,   637,   638,   642,   643,   644,   647,   648,
-     651,   652,   656,   657,   660,   661,   664,   665,   668,   669,
-     670,   671,   672,   673,   674,   675,   676,   677,   678,   679,
-     680,   681,   682,   683,   684,   687,   690,   693,   696,   697,
-     698,   699,   700,   701,   702,   703,   704,   705,   706,   707,
-     708,   709,   710,   711,   712,   716,   717,   720,   721,   724,
-     725,   728,   729,   732,   736,   737,   738,   741,   743,   745,
-     747,   751,   752,   755,   756,   760,   762,   766,   767,   768,
-     769,   772,   773,   774,   776,   777,   778,   779,   780,   781,
-     785,   786,   789,   790,   791,   792,   793,   794,   795,   796,
-     797,   798,   799,   800,   803,   804,   805,   808,   810,   811,
-     812,   813,   814,   815,   820,   821,   824,   825,   828,   829,
-     832,   838,   839,   842,   843,   846,   847,   850,   854,   857,
-     858
+       0,   262,   262,   264,   265,   266,   267,   269,   273,   276,
+     277,   278,   279,   282,   283,   287,   288,   291,   292,   293,
+     294,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     309,   310,   313,   314,   317,   318,   321,   325,   328,   331,
+     334,   337,   340,   343,   346,   349,   352,   355,   359,   362,
+     365,   368,   371,   374,   377,   380,   383,   386,   390,   393,
+     396,   399,   402,   405,   408,   411,   414,   417,   420,   423,
+     427,   430,   433,   436,   439,   442,   445,   448,   451,   454,
+     457,   460,   463,   466,   469,   473,   476,   479,   482,   485,
+     487,   490,   493,   496,   499,   502,   505,   508,   511,   514,
+     517,   520,   523,   526,   529,   532,   535,   537,   539,   542,
+     545,   548,   552,   556,   559,   562,   574,   586,   598,   601,
+     604,   606,   609,   612,   613,   614,   615,   617,   620,   621,
+     622,   623,   624,   625,   626,   627,   629,   630,   631,   632,
+     633,   637,   638,   639,   640,   644,   645,   646,   649,   650,
+     653,   654,   658,   659,   662,   663,   666,   667,   670,   671,
+     672,   673,   674,   675,   676,   677,   678,   679,   680,   681,
+     682,   683,   684,   685,   686,   689,   692,   695,   698,   699,
+     700,   701,   702,   703,   704,   705,   706,   707,   708,   709,
+     710,   711,   712,   713,   714,   718,   719,   722,   723,   726,
+     727,   730,   731,   734,   738,   739,   740,   743,   745,   747,
+     749,   753,   754,   757,   758,   762,   764,   768,   769,   770,
+     771,   774,   775,   776,   778,   779,   780,   781,   782,   783,
+     787,   788,   791,   792,   793,   794,   795,   796,   797,   798,
+     799,   800,   801,   802,   805,   806,   807,   810,   812,   813,
+     814,   815,   816,   817,   822,   823,   826,   827,   830,   831,
+     834,   840,   841,   844,   845,   848,   849,   852,   856,   859,
+     860
 };
 #endif
 
@@ -2546,574 +2548,574 @@ grib_yyreduce:
     {
         case 2:
 /* Line 1792 of yacc.c  */
-#line 260 "griby.y"
+#line 262 "griby.y"
     { grib_parser_all_actions = 0;grib_parser_concept=0; 
                             grib_parser_hash_array=0;grib_parser_rules=0; }
     break;
 
   case 3:
 /* Line 1792 of yacc.c  */
-#line 262 "griby.y"
+#line 264 "griby.y"
     { grib_parser_concept     = reverse_concept((grib_yyvsp[(1) - (1)].concept_value)); }
     break;
 
   case 4:
 /* Line 1792 of yacc.c  */
-#line 263 "griby.y"
+#line 265 "griby.y"
     { grib_parser_hash_array     = reverse_hash_array((grib_yyvsp[(1) - (1)].hash_array_value)); }
     break;
 
   case 5:
 /* Line 1792 of yacc.c  */
-#line 264 "griby.y"
+#line 266 "griby.y"
     { grib_parser_all_actions = (grib_yyvsp[(1) - (1)].act); }
     break;
 
   case 6:
 /* Line 1792 of yacc.c  */
-#line 265 "griby.y"
+#line 267 "griby.y"
     { grib_parser_rules       = (grib_yyvsp[(1) - (1)].rules); }
     break;
 
   case 7:
 /* Line 1792 of yacc.c  */
-#line 267 "griby.y"
+#line 269 "griby.y"
     { grib_parser_all_actions = 0; grib_parser_concept=0; 
 	                    grib_parser_hash_array=0; grib_parser_rules=0; }
     break;
 
   case 9:
 /* Line 1792 of yacc.c  */
-#line 274 "griby.y"
+#line 276 "griby.y"
     { (grib_yyval.dvalue)=grib_darray_push(0,0,(grib_yyvsp[(1) - (1)].dval));}
     break;
 
   case 10:
 /* Line 1792 of yacc.c  */
-#line 275 "griby.y"
+#line 277 "griby.y"
     { (grib_yyval.dvalue)=grib_darray_push(0,(grib_yyvsp[(1) - (3)].dvalue),(grib_yyvsp[(3) - (3)].dval));}
     break;
 
   case 11:
 /* Line 1792 of yacc.c  */
-#line 276 "griby.y"
+#line 278 "griby.y"
     { (grib_yyval.dvalue)=grib_darray_push(0,0,(grib_yyvsp[(1) - (1)].lval));}
     break;
 
   case 12:
 /* Line 1792 of yacc.c  */
-#line 277 "griby.y"
+#line 279 "griby.y"
     { (grib_yyval.dvalue)=grib_darray_push(0,(grib_yyvsp[(1) - (3)].dvalue),(grib_yyvsp[(3) - (3)].lval));}
     break;
 
   case 13:
 /* Line 1792 of yacc.c  */
-#line 280 "griby.y"
+#line 282 "griby.y"
     { (grib_yyval.svalue)=grib_sarray_push(0,0,(grib_yyvsp[(1) - (1)].str));}
     break;
 
   case 14:
 /* Line 1792 of yacc.c  */
-#line 281 "griby.y"
+#line 283 "griby.y"
     { (grib_yyval.svalue)=grib_sarray_push(0,(grib_yyvsp[(1) - (3)].svalue),(grib_yyvsp[(3) - (3)].str));}
     break;
 
   case 15:
 /* Line 1792 of yacc.c  */
-#line 285 "griby.y"
+#line 287 "griby.y"
     { (grib_yyval.ivalue)=grib_iarray_push(0,(grib_yyvsp[(1) - (1)].lval));}
     break;
 
   case 16:
 /* Line 1792 of yacc.c  */
-#line 286 "griby.y"
+#line 288 "griby.y"
     { (grib_yyval.ivalue)=grib_iarray_push((grib_yyvsp[(1) - (3)].ivalue),(grib_yyvsp[(3) - (3)].lval));}
     break;
 
   case 18:
 /* Line 1792 of yacc.c  */
-#line 290 "griby.y"
+#line 292 "griby.y"
     { (grib_yyvsp[(1) - (2)].act)->next = (grib_yyvsp[(2) - (2)].act); (grib_yyval.act) = (grib_yyvsp[(1) - (2)].act); }
     break;
 
   case 19:
 /* Line 1792 of yacc.c  */
-#line 291 "griby.y"
+#line 293 "griby.y"
     { (grib_yyvsp[(1) - (3)].act)->next = (grib_yyvsp[(3) - (3)].act); (grib_yyval.act) = (grib_yyvsp[(1) - (3)].act); }
     break;
 
   case 20:
 /* Line 1792 of yacc.c  */
-#line 292 "griby.y"
+#line 294 "griby.y"
     {  (grib_yyval.act) = (grib_yyvsp[(1) - (2)].act);}
     break;
 
   case 32:
 /* Line 1792 of yacc.c  */
-#line 311 "griby.y"
+#line 313 "griby.y"
     { (grib_yyval.explist) = 0; }
     break;
 
   case 35:
 /* Line 1792 of yacc.c  */
-#line 316 "griby.y"
+#line 318 "griby.y"
     { (grib_yyvsp[(1) - (3)].explist)->next = (grib_yyvsp[(3) - (3)].explist); (grib_yyval.explist) = (grib_yyvsp[(1) - (3)].explist); }
     break;
 
   case 36:
 /* Line 1792 of yacc.c  */
-#line 319 "griby.y"
+#line 321 "griby.y"
     { (grib_yyval.explist) = grib_arguments_new(grib_parser_context,(grib_yyvsp[(1) - (1)].exp),NULL); }
     break;
 
   case 37:
 /* Line 1792 of yacc.c  */
-#line 324 "griby.y"
+#line 326 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"unsigned",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);        free((grib_yyvsp[(5) - (7)].str));  }
     break;
 
   case 38:
 /* Line 1792 of yacc.c  */
-#line 327 "griby.y"
+#line 329 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"unsigned",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL);        free((grib_yyvsp[(5) - (10)].str));  }
     break;
 
   case 39:
 /* Line 1792 of yacc.c  */
-#line 330 "griby.y"
+#line 332 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"unsigned_bits",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);        free((grib_yyvsp[(5) - (7)].str));  }
     break;
 
   case 40:
 /* Line 1792 of yacc.c  */
-#line 333 "griby.y"
+#line 335 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"unsigned_bits",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL);        free((grib_yyvsp[(5) - (10)].str));  }
     break;
 
   case 41:
 /* Line 1792 of yacc.c  */
-#line 336 "griby.y"
+#line 338 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"ascii",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);  free((grib_yyvsp[(5) - (7)].str));  }
     break;
 
   case 42:
 /* Line 1792 of yacc.c  */
-#line 339 "griby.y"
+#line 341 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"group",0,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);  free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 43:
 /* Line 1792 of yacc.c  */
-#line 342 "griby.y"
+#line 344 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"group",0,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);  free((grib_yyvsp[(2) - (7)].str));  }
     break;
 
   case 44:
 /* Line 1792 of yacc.c  */
-#line 345 "griby.y"
+#line 347 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(1) - (7)].str),"to_integer",0,(grib_yyvsp[(5) - (7)].explist),0,(grib_yyvsp[(7) - (7)].lval),NULL,NULL);  free((grib_yyvsp[(1) - (7)].str));  }
     break;
 
   case 45:
 /* Line 1792 of yacc.c  */
-#line 348 "griby.y"
+#line 350 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(1) - (7)].str),"sexagesimal2decimal",0,(grib_yyvsp[(5) - (7)].explist),0,(grib_yyvsp[(7) - (7)].lval),NULL,NULL);  free((grib_yyvsp[(1) - (7)].str));  }
     break;
 
   case 46:
 /* Line 1792 of yacc.c  */
-#line 351 "griby.y"
+#line 353 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(1) - (7)].str),"to_string",0,(grib_yyvsp[(5) - (7)].explist),0,(grib_yyvsp[(7) - (7)].lval),NULL,NULL);  free((grib_yyvsp[(1) - (7)].str));  }
     break;
 
   case 47:
 /* Line 1792 of yacc.c  */
-#line 354 "griby.y"
+#line 356 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"non_alpha",0,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);  free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 48:
 /* Line 1792 of yacc.c  */
-#line 358 "griby.y"
+#line 360 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"ascii",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);  free((grib_yyvsp[(5) - (7)].str));  }
     break;
 
   case 49:
 /* Line 1792 of yacc.c  */
-#line 361 "griby.y"
+#line 363 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"bytes",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);      free((grib_yyvsp[(5) - (7)].str));  }
     break;
 
   case 50:
 /* Line 1792 of yacc.c  */
-#line 364 "griby.y"
+#line 366 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"bytes",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL);      free((grib_yyvsp[(5) - (10)].str));  }
     break;
 
   case 51:
 /* Line 1792 of yacc.c  */
-#line 367 "griby.y"
+#line 369 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"ksec1expver",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);  free((grib_yyvsp[(5) - (7)].str));  }
     break;
 
   case 52:
 /* Line 1792 of yacc.c  */
-#line 370 "griby.y"
+#line 372 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"signed",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);      free((grib_yyvsp[(5) - (7)].str));  }
     break;
 
   case 53:
 /* Line 1792 of yacc.c  */
-#line 373 "griby.y"
+#line 375 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"signed",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL);      free((grib_yyvsp[(5) - (10)].str));  }
     break;
 
   case 54:
 /* Line 1792 of yacc.c  */
-#line 376 "griby.y"
+#line 378 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (7)].str),"signed_bits",(grib_yyvsp[(3) - (7)].lval),NULL,(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);      free((grib_yyvsp[(5) - (7)].str));  }
     break;
 
   case 55:
 /* Line 1792 of yacc.c  */
-#line 379 "griby.y"
+#line 381 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"signed_bits",(grib_yyvsp[(3) - (10)].lval),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL);      free((grib_yyvsp[(5) - (10)].str));  }
     break;
 
   case 56:
 /* Line 1792 of yacc.c  */
-#line 382 "griby.y"
+#line 384 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"codetable",(grib_yyvsp[(3) - (8)].lval), (grib_yyvsp[(6) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL,NULL);    free((grib_yyvsp[(5) - (8)].str)); }
     break;
 
   case 57:
 /* Line 1792 of yacc.c  */
-#line 385 "griby.y"
+#line 387 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (12)].str),"codetable",(grib_yyvsp[(3) - (12)].lval), (grib_yyvsp[(6) - (12)].explist),(grib_yyvsp[(7) - (12)].explist),(grib_yyvsp[(12) - (12)].lval),NULL,(grib_yyvsp[(10) - (12)].str));
 					free((grib_yyvsp[(5) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); }
     break;
 
   case 58:
 /* Line 1792 of yacc.c  */
-#line 389 "griby.y"
+#line 391 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"codetable",(grib_yyvsp[(3) - (10)].lval), (grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL);    free((grib_yyvsp[(5) - (10)].str)); }
     break;
 
   case 59:
 /* Line 1792 of yacc.c  */
-#line 392 "griby.y"
+#line 394 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"smart_table",0,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);    free((grib_yyvsp[(2) - (7)].str)); }
     break;
 
   case 60:
 /* Line 1792 of yacc.c  */
-#line 395 "griby.y"
+#line 397 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(1) - (8)].str),"dictionary",0,(grib_yyvsp[(5) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL,NULL);    free((grib_yyvsp[(1) - (8)].str)); }
     break;
 
   case 61:
 /* Line 1792 of yacc.c  */
-#line 398 "griby.y"
+#line 400 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(1) - (8)].str),"getenv",0,(grib_yyvsp[(5) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL,NULL);    free((grib_yyvsp[(1) - (8)].str)); }
     break;
 
   case 62:
 /* Line 1792 of yacc.c  */
-#line 401 "griby.y"
+#line 403 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"complex_codetable",(grib_yyvsp[(3) - (8)].lval), (grib_yyvsp[(6) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL,NULL);    free((grib_yyvsp[(5) - (8)].str)); }
     break;
 
   case 63:
 /* Line 1792 of yacc.c  */
-#line 404 "griby.y"
+#line 406 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (10)].str),"complex_codetable",(grib_yyvsp[(3) - (10)].lval), (grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),NULL,NULL);    free((grib_yyvsp[(5) - (10)].str)); }
     break;
 
   case 64:
 /* Line 1792 of yacc.c  */
-#line 407 "griby.y"
+#line 409 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"codeflag",(grib_yyvsp[(3) - (8)].lval), (grib_yyvsp[(6) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL,NULL);  free((grib_yyvsp[(5) - (8)].str)); }
     break;
 
   case 65:
 /* Line 1792 of yacc.c  */
-#line 410 "griby.y"
+#line 412 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (9)].str),"lookup",(grib_yyvsp[(3) - (9)].lval),(grib_yyvsp[(7) - (9)].explist),NULL,(grib_yyvsp[(9) - (9)].lval),NULL,NULL); free((grib_yyvsp[(5) - (9)].str)); }
     break;
 
   case 66:
 /* Line 1792 of yacc.c  */
-#line 413 "griby.y"
+#line 415 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"bit",0,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL); free((grib_yyvsp[(2) - (7)].str)); }
     break;
 
   case 67:
 /* Line 1792 of yacc.c  */
-#line 416 "griby.y"
+#line 418 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (2)].str),"label",0,NULL,NULL,0,NULL,NULL);   free((grib_yyvsp[(2) - (2)].str));  }
     break;
 
   case 68:
 /* Line 1792 of yacc.c  */
-#line 419 "griby.y"
+#line 421 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (2)].str),"label",0,NULL,NULL,0,NULL,NULL);   free((grib_yyvsp[(2) - (2)].str));  }
     break;
 
   case 69:
 /* Line 1792 of yacc.c  */
-#line 422 "griby.y"
+#line 424 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"ibmfloat",4,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 70:
 /* Line 1792 of yacc.c  */
-#line 426 "griby.y"
+#line 428 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"int8",1,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 71:
 /* Line 1792 of yacc.c  */
-#line 429 "griby.y"
+#line 431 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"uint8",1,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 72:
 /* Line 1792 of yacc.c  */
-#line 432 "griby.y"
+#line 434 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"int16",2,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 73:
 /* Line 1792 of yacc.c  */
-#line 435 "griby.y"
+#line 437 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"uint16",2,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 74:
 /* Line 1792 of yacc.c  */
-#line 438 "griby.y"
+#line 440 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"int16_little_endian",2,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 75:
 /* Line 1792 of yacc.c  */
-#line 441 "griby.y"
+#line 443 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"uint16_little_endian",2,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 76:
 /* Line 1792 of yacc.c  */
-#line 444 "griby.y"
+#line 446 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"int32",4,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 77:
 /* Line 1792 of yacc.c  */
-#line 447 "griby.y"
+#line 449 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"uint32",4,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 78:
 /* Line 1792 of yacc.c  */
-#line 450 "griby.y"
+#line 452 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"int32_little_endian",4,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 79:
 /* Line 1792 of yacc.c  */
-#line 453 "griby.y"
+#line 455 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"uint32_little_endian",4,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 80:
 /* Line 1792 of yacc.c  */
-#line 456 "griby.y"
+#line 458 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"int64",8,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 81:
 /* Line 1792 of yacc.c  */
-#line 459 "griby.y"
+#line 461 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"uint64",8,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 82:
 /* Line 1792 of yacc.c  */
-#line 462 "griby.y"
+#line 464 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"int64_little_endian",8,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 83:
 /* Line 1792 of yacc.c  */
-#line 465 "griby.y"
+#line 467 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"uint64_little_endian",8,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 84:
 /* Line 1792 of yacc.c  */
-#line 468 "griby.y"
+#line 470 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"blob",0,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);        free((grib_yyvsp[(2) - (7)].str));  }
     break;
 
   case 85:
 /* Line 1792 of yacc.c  */
-#line 472 "griby.y"
+#line 474 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(4) - (6)].str),"ibmfloat",4,NULL,(grib_yyvsp[(5) - (6)].explist),(grib_yyvsp[(6) - (6)].lval),(grib_yyvsp[(2) - (6)].str),NULL);free((grib_yyvsp[(4) - (6)].str)); free((grib_yyvsp[(2) - (6)].str)); }
     break;
 
   case 86:
 /* Line 1792 of yacc.c  */
-#line 475 "griby.y"
+#line 477 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"ibmfloat",4,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);free((grib_yyvsp[(2) - (7)].str));  }
     break;
 
   case 87:
 /* Line 1792 of yacc.c  */
-#line 478 "griby.y"
+#line 480 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (2)].str),"position",0,NULL,NULL,0,NULL,NULL);     free((grib_yyvsp[(2) - (2)].str));  }
     break;
 
   case 88:
 /* Line 1792 of yacc.c  */
-#line 481 "griby.y"
+#line 483 "griby.y"
     { (grib_yyval.act) = grib_action_create_variable(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"constant",0,(grib_yyvsp[(4) - (5)].explist),NULL,(grib_yyvsp[(5) - (5)].lval),NULL);free((grib_yyvsp[(2) - (5)].str)); }
     break;
 
   case 89:
 /* Line 1792 of yacc.c  */
-#line 484 "griby.y"
+#line 486 "griby.y"
     { (grib_yyval.act) = grib_action_create_variable(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"transient",0,(grib_yyvsp[(4) - (5)].explist),(grib_yyvsp[(4) - (5)].explist),(grib_yyvsp[(5) - (5)].lval),NULL);   free((grib_yyvsp[(2) - (5)].str)); }
     break;
 
   case 90:
 /* Line 1792 of yacc.c  */
-#line 486 "griby.y"
+#line 488 "griby.y"
     { (grib_yyval.act) = grib_action_create_transient_darray(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(5) - (6)].dvalue)); free((grib_yyvsp[(2) - (6)].str)); }
     break;
 
   case 91:
 /* Line 1792 of yacc.c  */
-#line 489 "griby.y"
+#line 491 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (4)].str),"ieeefloat",4,NULL,(grib_yyvsp[(3) - (4)].explist),(grib_yyvsp[(4) - (4)].lval),NULL,NULL);   free((grib_yyvsp[(2) - (4)].str));  }
     break;
 
   case 92:
 /* Line 1792 of yacc.c  */
-#line 492 "griby.y"
+#line 494 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(4) - (6)].str),"ieeefloat",4,NULL,(grib_yyvsp[(5) - (6)].explist),(grib_yyvsp[(6) - (6)].lval),(grib_yyvsp[(2) - (6)].str),NULL);  free((grib_yyvsp[(4) - (6)].str));free((grib_yyvsp[(2) - (6)].str));}
     break;
 
   case 93:
 /* Line 1792 of yacc.c  */
-#line 495 "griby.y"
+#line 497 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (7)].str),"ieeefloat",4,(grib_yyvsp[(4) - (7)].explist),(grib_yyvsp[(6) - (7)].explist),(grib_yyvsp[(7) - (7)].lval),NULL,NULL);free((grib_yyvsp[(2) - (7)].str));  }
     break;
 
   case 94:
 /* Line 1792 of yacc.c  */
-#line 498 "griby.y"
+#line 500 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (2)].str),"g1_half_byte_codeflag",0,NULL,NULL,0,NULL,NULL);free((grib_yyvsp[(2) - (2)].str));  }
     break;
 
   case 95:
 /* Line 1792 of yacc.c  */
-#line 501 "griby.y"
+#line 503 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (5)].str),"section_length",(grib_yyvsp[(3) - (5)].lval),NULL,NULL,0,NULL,NULL);free((grib_yyvsp[(5) - (5)].str));  }
     break;
 
   case 96:
 /* Line 1792 of yacc.c  */
-#line 504 "griby.y"
+#line 506 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (6)].str),"section_length",(grib_yyvsp[(3) - (6)].lval),NULL,(grib_yyvsp[(6) - (6)].explist),0,NULL,NULL);free((grib_yyvsp[(5) - (6)].str));  }
     break;
 
   case 97:
 /* Line 1792 of yacc.c  */
-#line 507 "griby.y"
+#line 509 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"g1_message_length",(grib_yyvsp[(3) - (8)].lval),(grib_yyvsp[(7) - (8)].explist),NULL,0,NULL,NULL);free((grib_yyvsp[(5) - (8)].str));  }
     break;
 
   case 98:
 /* Line 1792 of yacc.c  */
-#line 510 "griby.y"
+#line 512 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (8)].str),"g1_section4_length",(grib_yyvsp[(3) - (8)].lval),(grib_yyvsp[(7) - (8)].explist),NULL,0,NULL,NULL);free((grib_yyvsp[(5) - (8)].str));  }
     break;
 
   case 99:
 /* Line 1792 of yacc.c  */
-#line 513 "griby.y"
+#line 515 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (3)].str),"ksec",0,(grib_yyvsp[(3) - (3)].explist),NULL,0,NULL,NULL);free((grib_yyvsp[(2) - (3)].str)); }
     break;
 
   case 100:
 /* Line 1792 of yacc.c  */
-#line 516 "griby.y"
+#line 518 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"pad",0,(grib_yyvsp[(4) - (5)].explist),0,0,NULL,NULL);   free((grib_yyvsp[(2) - (5)].str)); }
     break;
 
   case 101:
 /* Line 1792 of yacc.c  */
-#line 519 "griby.y"
+#line 521 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"padto",0,(grib_yyvsp[(4) - (5)].explist),0,0,NULL,NULL);   free((grib_yyvsp[(2) - (5)].str)); }
     break;
 
   case 102:
 /* Line 1792 of yacc.c  */
-#line 522 "griby.y"
+#line 524 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"padtoeven",0,(grib_yyvsp[(4) - (5)].explist),0,0,NULL,NULL);   free((grib_yyvsp[(2) - (5)].str)); }
     break;
 
   case 103:
 /* Line 1792 of yacc.c  */
-#line 525 "griby.y"
+#line 527 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (5)].str),"padtomultiple",0,(grib_yyvsp[(4) - (5)].explist),0,0,NULL,NULL);   free((grib_yyvsp[(2) - (5)].str)); }
     break;
 
   case 104:
 /* Line 1792 of yacc.c  */
-#line 528 "griby.y"
+#line 530 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(5) - (6)].str),"message",(grib_yyvsp[(3) - (6)].lval),0,0,(grib_yyvsp[(6) - (6)].lval),NULL,NULL);   free((grib_yyvsp[(5) - (6)].str));  }
     break;
 
   case 105:
 /* Line 1792 of yacc.c  */
-#line 531 "griby.y"
+#line 533 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (3)].str),"message_copy",0,0,0,(grib_yyvsp[(3) - (3)].lval),NULL,NULL);   free((grib_yyvsp[(2) - (3)].str));  }
     break;
 
   case 106:
 /* Line 1792 of yacc.c  */
-#line 534 "griby.y"
+#line 536 "griby.y"
     { (grib_yyval.act) = grib_action_create_gen(grib_parser_context,(grib_yyvsp[(2) - (3)].str),"section_padding",0,0,0,(grib_yyvsp[(3) - (3)].lval),NULL,NULL);   free((grib_yyvsp[(2) - (3)].str));  }
     break;
 
   case 107:
 /* Line 1792 of yacc.c  */
-#line 536 "griby.y"
+#line 538 "griby.y"
     { (grib_yyval.act) = grib_action_create_template(grib_parser_context,0,(grib_yyvsp[(2) - (3)].str),(grib_yyvsp[(3) - (3)].str)); free((grib_yyvsp[(2) - (3)].str)); free((grib_yyvsp[(3) - (3)].str));}
     break;
 
   case 108:
 /* Line 1792 of yacc.c  */
-#line 538 "griby.y"
+#line 540 "griby.y"
     { (grib_yyval.act) = grib_action_create_template(grib_parser_context,1,(grib_yyvsp[(2) - (3)].str),(grib_yyvsp[(3) - (3)].str)); free((grib_yyvsp[(2) - (3)].str)); free((grib_yyvsp[(3) - (3)].str));}
     break;
 
   case 109:
 /* Line 1792 of yacc.c  */
-#line 541 "griby.y"
+#line 543 "griby.y"
     { (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[(2) - (5)].str),(grib_yyvsp[(4) - (5)].str),NULL,(grib_yyvsp[(5) - (5)].lval));  free((grib_yyvsp[(2) - (5)].str)); free((grib_yyvsp[(4) - (5)].str)); }
     break;
 
   case 110:
 /* Line 1792 of yacc.c  */
-#line 544 "griby.y"
+#line 546 "griby.y"
     { (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[(2) - (2)].str),NULL,NULL,0);  free((grib_yyvsp[(2) - (2)].str)); }
     break;
 
   case 111:
 /* Line 1792 of yacc.c  */
-#line 547 "griby.y"
+#line 549 "griby.y"
     {
          (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[(4) - (7)].str),(grib_yyvsp[(6) - (7)].str),(grib_yyvsp[(2) - (7)].str),(grib_yyvsp[(7) - (7)].lval));  free((grib_yyvsp[(2) - (7)].str)); free((grib_yyvsp[(4) - (7)].str)); free((grib_yyvsp[(6) - (7)].str));
     }
@@ -3121,7 +3123,7 @@ grib_yyreduce:
 
   case 112:
 /* Line 1792 of yacc.c  */
-#line 551 "griby.y"
+#line 553 "griby.y"
     {
          (grib_yyval.act) = grib_action_create_alias(grib_parser_context,(grib_yyvsp[(4) - (4)].str),NULL,(grib_yyvsp[(2) - (4)].str),0);  free((grib_yyvsp[(2) - (4)].str)); free((grib_yyvsp[(4) - (4)].str)); 
     }
@@ -3129,19 +3131,19 @@ grib_yyreduce:
 
   case 113:
 /* Line 1792 of yacc.c  */
-#line 555 "griby.y"
+#line 557 "griby.y"
     { (grib_yyval.act) = grib_action_create_meta(grib_parser_context,(grib_yyvsp[(2) - (8)].str),(grib_yyvsp[(3) - (8)].str),(grib_yyvsp[(5) - (8)].explist),(grib_yyvsp[(7) - (8)].explist),(grib_yyvsp[(8) - (8)].lval),NULL); free((grib_yyvsp[(2) - (8)].str));free((grib_yyvsp[(3) - (8)].str));}
     break;
 
   case 114:
 /* Line 1792 of yacc.c  */
-#line 558 "griby.y"
+#line 560 "griby.y"
     { (grib_yyval.act) = grib_action_create_meta(grib_parser_context,(grib_yyvsp[(4) - (10)].str),(grib_yyvsp[(5) - (10)].str),(grib_yyvsp[(7) - (10)].explist),(grib_yyvsp[(9) - (10)].explist),(grib_yyvsp[(10) - (10)].lval),(grib_yyvsp[(2) - (10)].str)); free((grib_yyvsp[(4) - (10)].str));free((grib_yyvsp[(5) - (10)].str));free((grib_yyvsp[(2) - (10)].str));}
     break;
 
   case 115:
 /* Line 1792 of yacc.c  */
-#line 561 "griby.y"
+#line 563 "griby.y"
     {
       grib_arguments* a = grib_arguments_new(
         grib_parser_context,
@@ -3157,7 +3159,7 @@ grib_yyreduce:
 
   case 116:
 /* Line 1792 of yacc.c  */
-#line 573 "griby.y"
+#line 575 "griby.y"
     {
       grib_arguments* a = grib_arguments_new(
         grib_parser_context,
@@ -3173,7 +3175,7 @@ grib_yyreduce:
 
   case 117:
 /* Line 1792 of yacc.c  */
-#line 585 "griby.y"
+#line 587 "griby.y"
     {
       grib_arguments* a = grib_arguments_new(
         grib_parser_context,
@@ -3189,823 +3191,823 @@ grib_yyreduce:
 
   case 118:
 /* Line 1792 of yacc.c  */
-#line 597 "griby.y"
+#line 599 "griby.y"
     { (grib_yyval.act) = grib_action_create_put(grib_parser_context,(grib_yyvsp[(2) - (5)].str),(grib_yyvsp[(4) - (5)].explist));free((grib_yyvsp[(2) - (5)].str));}
     break;
 
   case 119:
 /* Line 1792 of yacc.c  */
-#line 600 "griby.y"
+#line 602 "griby.y"
     { (grib_yyval.act) = grib_action_create_remove(grib_parser_context,(grib_yyvsp[(2) - (2)].explist));}
     break;
 
   case 120:
 /* Line 1792 of yacc.c  */
-#line 602 "griby.y"
+#line 604 "griby.y"
     { (grib_yyval.act) = grib_action_create_rename(grib_parser_context,(grib_yyvsp[(3) - (6)].str),(grib_yyvsp[(5) - (6)].str));free((grib_yyvsp[(3) - (6)].str));free((grib_yyvsp[(5) - (6)].str));}
     break;
 
   case 121:
 /* Line 1792 of yacc.c  */
-#line 605 "griby.y"
+#line 607 "griby.y"
     { (grib_yyval.act) = grib_action_create_assert(grib_parser_context,(grib_yyvsp[(3) - (4)].exp));}
     break;
 
   case 122:
 /* Line 1792 of yacc.c  */
-#line 608 "griby.y"
+#line 610 "griby.y"
     { (grib_yyval.act) = grib_action_create_modify(grib_parser_context,(grib_yyvsp[(2) - (3)].str),(grib_yyvsp[(3) - (3)].lval)); free((grib_yyvsp[(2) - (3)].str));}
     break;
 
   case 123:
 /* Line 1792 of yacc.c  */
-#line 610 "griby.y"
+#line 612 "griby.y"
     { (grib_yyval.act) = grib_action_create_set_missing(grib_parser_context,(grib_yyvsp[(2) - (4)].str)); free((grib_yyvsp[(2) - (4)].str)); }
     break;
 
   case 124:
 /* Line 1792 of yacc.c  */
-#line 611 "griby.y"
+#line 613 "griby.y"
     { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[(2) - (4)].str),(grib_yyvsp[(4) - (4)].exp),0); free((grib_yyvsp[(2) - (4)].str)); }
     break;
 
   case 125:
 /* Line 1792 of yacc.c  */
-#line 612 "griby.y"
+#line 614 "griby.y"
     { (grib_yyval.act) = grib_action_create_set_darray(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(5) - (6)].dvalue)); free((grib_yyvsp[(2) - (6)].str)); }
     break;
 
   case 126:
 /* Line 1792 of yacc.c  */
-#line 613 "griby.y"
+#line 615 "griby.y"
     { (grib_yyval.act) = grib_action_create_set_sarray(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(5) - (6)].svalue)); free((grib_yyvsp[(2) - (6)].str)); }
     break;
 
   case 127:
 /* Line 1792 of yacc.c  */
-#line 615 "griby.y"
+#line 617 "griby.y"
     { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[(2) - (4)].str),(grib_yyvsp[(4) - (4)].exp),1); free((grib_yyvsp[(2) - (4)].str)); }
     break;
 
   case 128:
 /* Line 1792 of yacc.c  */
-#line 618 "griby.y"
+#line 620 "griby.y"
     { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[(2) - (2)].str),0,0); free((grib_yyvsp[(2) - (2)].str));}
     break;
 
   case 129:
 /* Line 1792 of yacc.c  */
-#line 619 "griby.y"
+#line 621 "griby.y"
     { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",0,0); }
     break;
 
   case 130:
 /* Line 1792 of yacc.c  */
-#line 620 "griby.y"
+#line 622 "griby.y"
     { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[(5) - (5)].str),0,(grib_yyvsp[(3) - (5)].lval)); free((grib_yyvsp[(5) - (5)].str));}
     break;
 
   case 131:
 /* Line 1792 of yacc.c  */
-#line 621 "griby.y"
+#line 623 "griby.y"
     { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",0,(grib_yyvsp[(3) - (4)].lval)); }
     break;
 
   case 132:
 /* Line 1792 of yacc.c  */
-#line 622 "griby.y"
+#line 624 "griby.y"
     { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[(2) - (2)].str),1,0); free((grib_yyvsp[(2) - (2)].str));}
     break;
 
   case 133:
 /* Line 1792 of yacc.c  */
-#line 623 "griby.y"
+#line 625 "griby.y"
     { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",1,0); }
     break;
 
   case 134:
 /* Line 1792 of yacc.c  */
-#line 624 "griby.y"
+#line 626 "griby.y"
     { (grib_yyval.act) = grib_action_create_write(grib_parser_context,(grib_yyvsp[(5) - (5)].str),1,(grib_yyvsp[(3) - (5)].lval)); free((grib_yyvsp[(5) - (5)].str));}
     break;
 
   case 135:
 /* Line 1792 of yacc.c  */
-#line 625 "griby.y"
+#line 627 "griby.y"
     { (grib_yyval.act) = grib_action_create_write(grib_parser_context,"",1,(grib_yyvsp[(3) - (4)].lval)); }
     break;
 
   case 136:
 /* Line 1792 of yacc.c  */
-#line 627 "griby.y"
+#line 629 "griby.y"
     { (grib_yyval.act) = grib_action_create_close(grib_parser_context,(grib_yyvsp[(3) - (4)].str)); free((grib_yyvsp[(3) - (4)].str));}
     break;
 
   case 137:
 /* Line 1792 of yacc.c  */
-#line 628 "griby.y"
+#line 630 "griby.y"
     { (grib_yyval.act) = grib_action_create_print(grib_parser_context,(grib_yyvsp[(2) - (2)].str),0); free((grib_yyvsp[(2) - (2)].str)); }
     break;
 
   case 138:
 /* Line 1792 of yacc.c  */
-#line 629 "griby.y"
+#line 631 "griby.y"
     { (grib_yyval.act) = grib_action_create_print(grib_parser_context,(grib_yyvsp[(5) - (5)].str),(grib_yyvsp[(3) - (5)].str)); free((grib_yyvsp[(5) - (5)].str)); free((grib_yyvsp[(3) - (5)].str));}
     break;
 
   case 139:
 /* Line 1792 of yacc.c  */
-#line 630 "griby.y"
+#line 632 "griby.y"
     { (grib_yyval.act) = grib_action_create_print(grib_parser_context,(grib_yyvsp[(5) - (5)].str),(grib_yyvsp[(3) - (5)].str)); free((grib_yyvsp[(5) - (5)].str)); free((grib_yyvsp[(3) - (5)].str));}
     break;
 
   case 140:
 /* Line 1792 of yacc.c  */
-#line 631 "griby.y"
+#line 633 "griby.y"
     { (grib_yyval.act) = grib_action_create_print(grib_parser_context,"",0);  }
     break;
 
   case 141:
 /* Line 1792 of yacc.c  */
-#line 635 "griby.y"
-    { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act),0,0); }
+#line 637 "griby.y"
+    { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act),0,0,grib_yylineno,file_being_parsed()); }
     break;
 
   case 142:
 /* Line 1792 of yacc.c  */
-#line 636 "griby.y"
-    { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (11)].exp),(grib_yyvsp[(6) - (11)].act),(grib_yyvsp[(10) - (11)].act),0); }
+#line 638 "griby.y"
+    { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (11)].exp),(grib_yyvsp[(6) - (11)].act),(grib_yyvsp[(10) - (11)].act),0,grib_yylineno,file_being_parsed()); }
     break;
 
   case 143:
 /* Line 1792 of yacc.c  */
-#line 637 "griby.y"
-    { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act),0,1); }
+#line 639 "griby.y"
+    { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act),0,1,grib_yylineno,file_being_parsed()); }
     break;
 
   case 144:
 /* Line 1792 of yacc.c  */
-#line 638 "griby.y"
-    { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (11)].exp),(grib_yyvsp[(6) - (11)].act),(grib_yyvsp[(10) - (11)].act),1); }
+#line 640 "griby.y"
+    { (grib_yyval.act) = grib_action_create_if(grib_parser_context,(grib_yyvsp[(3) - (11)].exp),(grib_yyvsp[(6) - (11)].act),(grib_yyvsp[(10) - (11)].act),1,grib_yylineno,file_being_parsed()); }
     break;
 
   case 145:
 /* Line 1792 of yacc.c  */
-#line 642 "griby.y"
+#line 644 "griby.y"
     { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[(3) - (6)].exp),(grib_yyvsp[(5) - (6)].act),NULL); }
     break;
 
   case 146:
 /* Line 1792 of yacc.c  */
-#line 643 "griby.y"
+#line 645 "griby.y"
     { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act),NULL); }
     break;
 
   case 147:
 /* Line 1792 of yacc.c  */
-#line 644 "griby.y"
+#line 646 "griby.y"
     { (grib_yyval.act) = grib_action_create_when(grib_parser_context,(grib_yyvsp[(3) - (11)].exp),(grib_yyvsp[(6) - (11)].act),(grib_yyvsp[(10) - (11)].act)); }
     break;
 
   case 148:
 /* Line 1792 of yacc.c  */
-#line 647 "griby.y"
+#line 649 "griby.y"
     { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[(2) - (4)].str),(grib_yyvsp[(4) - (4)].exp),0); free((grib_yyvsp[(2) - (4)].str)); }
     break;
 
   case 149:
 /* Line 1792 of yacc.c  */
-#line 648 "griby.y"
+#line 650 "griby.y"
     { (grib_yyval.act) = grib_action_create_set(grib_parser_context,(grib_yyvsp[(2) - (4)].str),(grib_yyvsp[(4) - (4)].exp),1); free((grib_yyvsp[(2) - (4)].str)); }
     break;
 
   case 151:
 /* Line 1792 of yacc.c  */
-#line 652 "griby.y"
+#line 654 "griby.y"
     { (grib_yyvsp[(1) - (3)].act)->next = (grib_yyvsp[(2) - (3)].act); (grib_yyval.act) = (grib_yyvsp[(1) - (3)].act); }
     break;
 
   case 152:
 /* Line 1792 of yacc.c  */
-#line 656 "griby.y"
+#line 658 "griby.y"
     { (grib_yyval.explist) = NULL ;}
     break;
 
   case 153:
 /* Line 1792 of yacc.c  */
-#line 657 "griby.y"
+#line 659 "griby.y"
     { (grib_yyval.explist) = (grib_yyvsp[(2) - (2)].explist) ;}
     break;
 
   case 154:
 /* Line 1792 of yacc.c  */
-#line 660 "griby.y"
+#line 662 "griby.y"
     { (grib_yyval.lval) = 0 ; }
     break;
 
   case 155:
 /* Line 1792 of yacc.c  */
-#line 661 "griby.y"
+#line 663 "griby.y"
     { (grib_yyval.lval) = (grib_yyvsp[(2) - (2)].lval); }
     break;
 
   case 157:
 /* Line 1792 of yacc.c  */
-#line 665 "griby.y"
+#line 667 "griby.y"
     { (grib_yyval.lval) = (grib_yyvsp[(1) - (3)].lval) | (grib_yyvsp[(3) - (3)].lval); }
     break;
 
   case 158:
 /* Line 1792 of yacc.c  */
-#line 668 "griby.y"
+#line 670 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_READ_ONLY; }
     break;
 
   case 159:
 /* Line 1792 of yacc.c  */
-#line 669 "griby.y"
+#line 671 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_LOWERCASE; }
     break;
 
   case 160:
 /* Line 1792 of yacc.c  */
-#line 670 "griby.y"
+#line 672 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_DUMP; }
     break;
 
   case 161:
 /* Line 1792 of yacc.c  */
-#line 671 "griby.y"
+#line 673 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_JSON; }
     break;
 
   case 162:
 /* Line 1792 of yacc.c  */
-#line 672 "griby.y"
+#line 674 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_XML; }
     break;
 
   case 163:
 /* Line 1792 of yacc.c  */
-#line 673 "griby.y"
+#line 675 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_NO_COPY; }
     break;
 
   case 164:
 /* Line 1792 of yacc.c  */
-#line 674 "griby.y"
+#line 676 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_NO_FAIL; }
     break;
 
   case 165:
 /* Line 1792 of yacc.c  */
-#line 675 "griby.y"
+#line 677 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_HIDDEN; }
     break;
 
   case 166:
 /* Line 1792 of yacc.c  */
-#line 676 "griby.y"
+#line 678 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_EDITION_SPECIFIC; }
     break;
 
   case 167:
 /* Line 1792 of yacc.c  */
-#line 677 "griby.y"
+#line 679 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_CAN_BE_MISSING; }
     break;
 
   case 168:
 /* Line 1792 of yacc.c  */
-#line 678 "griby.y"
+#line 680 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_CONSTRAINT; }
     break;
 
   case 169:
 /* Line 1792 of yacc.c  */
-#line 679 "griby.y"
+#line 681 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_OVERRIDE; }
     break;
 
   case 170:
 /* Line 1792 of yacc.c  */
-#line 680 "griby.y"
+#line 682 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_COPY_OK; }
     break;
 
   case 171:
 /* Line 1792 of yacc.c  */
-#line 681 "griby.y"
+#line 683 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_TRANSIENT; }
     break;
 
   case 172:
 /* Line 1792 of yacc.c  */
-#line 682 "griby.y"
+#line 684 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_STRING_TYPE; }
     break;
 
   case 173:
 /* Line 1792 of yacc.c  */
-#line 683 "griby.y"
+#line 685 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_LONG_TYPE; }
     break;
 
   case 174:
 /* Line 1792 of yacc.c  */
-#line 684 "griby.y"
+#line 686 "griby.y"
     { (grib_yyval.lval) = GRIB_ACCESSOR_FLAG_DOUBLE_TYPE; }
     break;
 
   case 175:
 /* Line 1792 of yacc.c  */
-#line 687 "griby.y"
+#line 689 "griby.y"
     { (grib_yyval.act) = grib_action_create_list(grib_parser_context,(grib_yyvsp[(1) - (8)].str),(grib_yyvsp[(4) - (8)].exp),(grib_yyvsp[(7) - (8)].act)); free((grib_yyvsp[(1) - (8)].str)); }
     break;
 
   case 176:
 /* Line 1792 of yacc.c  */
-#line 690 "griby.y"
+#line 692 "griby.y"
     { (grib_yyval.act) = grib_action_create_while(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].act));  }
     break;
 
   case 177:
 /* Line 1792 of yacc.c  */
-#line 693 "griby.y"
+#line 695 "griby.y"
     { (grib_yyval.act) = grib_action_create_trigger(grib_parser_context,(grib_yyvsp[(3) - (7)].explist),(grib_yyvsp[(6) - (7)].act));  }
     break;
 
   case 178:
 /* Line 1792 of yacc.c  */
-#line 696 "griby.y"
+#line 698 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(4) - (6)].concept_value),0,0,0,0,0,0,(grib_yyvsp[(6) - (6)].lval),0);  free((grib_yyvsp[(2) - (6)].str)); }
     break;
 
   case 179:
 /* Line 1792 of yacc.c  */
-#line 697 "griby.y"
+#line 699 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (9)].str),(grib_yyvsp[(7) - (9)].concept_value),0,0,(grib_yyvsp[(4) - (9)].str),0,0,0,(grib_yyvsp[(9) - (9)].lval),0);  free((grib_yyvsp[(2) - (9)].str));free((grib_yyvsp[(4) - (9)].str)); }
     break;
 
   case 180:
 /* Line 1792 of yacc.c  */
-#line 698 "griby.y"
+#line 700 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (12)].str),0,(grib_yyvsp[(6) - (12)].str),0,(grib_yyvsp[(4) - (12)].str),(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,(grib_yyvsp[(12) - (12)].lval),0);  free((grib_yyvsp[(2) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); }
     break;
 
   case 181:
 /* Line 1792 of yacc.c  */
-#line 699 "griby.y"
+#line 701 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (14)].str),0,(grib_yyvsp[(6) - (14)].str),0,(grib_yyvsp[(4) - (14)].str),(grib_yyvsp[(8) - (14)].str),(grib_yyvsp[(10) - (14)].str),(grib_yyvsp[(12) - (14)].str),(grib_yyvsp[(14) - (14)].lval),0);  free((grib_yyvsp[(2) - (14)].str));free((grib_yyvsp[(6) - (14)].str));free((grib_yyvsp[(4) - (14)].str));free((grib_yyvsp[(8) - (14)].str));free((grib_yyvsp[(10) - (14)].str));free((grib_yyvsp[(12) - (14) [...]
     break;
 
   case 182:
 /* Line 1792 of yacc.c  */
-#line 700 "griby.y"
+#line 702 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (10)].str),0,(grib_yyvsp[(6) - (10)].str),0,(grib_yyvsp[(4) - (10)].str),(grib_yyvsp[(8) - (10)].str),0,0,(grib_yyvsp[(10) - (10)].lval),0);  free((grib_yyvsp[(2) - (10)].str));free((grib_yyvsp[(6) - (10)].str));free((grib_yyvsp[(4) - (10)].str));free((grib_yyvsp[(8) - (10)].str)); }
     break;
 
   case 183:
 /* Line 1792 of yacc.c  */
-#line 701 "griby.y"
+#line 703 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (14)].str),0,(grib_yyvsp[(8) - (14)].str),(grib_yyvsp[(2) - (14)].str),(grib_yyvsp[(6) - (14)].str),(grib_yyvsp[(10) - (14)].str),(grib_yyvsp[(12) - (14)].str),0,(grib_yyvsp[(14) - (14)].lval),0);  free((grib_yyvsp[(4) - (14)].str));free((grib_yyvsp[(8) - (14)].str));free((grib_yyvsp[(6) - (14)].str));free((grib_yyvsp[(10) - (14)].str)); free((grib_yyvsp[(12) - (14)].str)); free((grib_yyvsp[(2) - (1 [...]
     break;
 
   case 184:
 /* Line 1792 of yacc.c  */
-#line 702 "griby.y"
+#line 704 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (12)].str),0,(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(2) - (12)].str),(grib_yyvsp[(6) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,0,(grib_yyvsp[(12) - (12)].lval),0);  free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); free((grib_yyvsp[(2) - (12)].str));}
     break;
 
   case 185:
 /* Line 1792 of yacc.c  */
-#line 703 "griby.y"
+#line 705 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (8)].str),(grib_yyvsp[(6) - (8)].concept_value),0,(grib_yyvsp[(2) - (8)].str),0,0,0,0,(grib_yyvsp[(8) - (8)].lval),0);  free((grib_yyvsp[(2) - (8)].str));free((grib_yyvsp[(4) - (8)].str)); }
     break;
 
   case 186:
 /* Line 1792 of yacc.c  */
-#line 704 "griby.y"
+#line 706 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (11)].str),(grib_yyvsp[(9) - (11)].concept_value),0,(grib_yyvsp[(2) - (11)].str),(grib_yyvsp[(6) - (11)].str),0,0,0,(grib_yyvsp[(11) - (11)].lval),0);  free((grib_yyvsp[(2) - (11)].str));free((grib_yyvsp[(4) - (11)].str));free((grib_yyvsp[(6) - (11)].str)); }
     break;
 
   case 187:
 /* Line 1792 of yacc.c  */
-#line 705 "griby.y"
+#line 707 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(4) - (6)].concept_value),0,0,0,0,0,0,(grib_yyvsp[(6) - (6)].lval),1);  free((grib_yyvsp[(2) - (6)].str)); }
     break;
 
   case 188:
 /* Line 1792 of yacc.c  */
-#line 706 "griby.y"
+#line 708 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (9)].str),(grib_yyvsp[(7) - (9)].concept_value),0,0,(grib_yyvsp[(4) - (9)].str),0,0,0,(grib_yyvsp[(9) - (9)].lval),1);  free((grib_yyvsp[(2) - (9)].str));free((grib_yyvsp[(4) - (9)].str)); }
     break;
 
   case 189:
 /* Line 1792 of yacc.c  */
-#line 707 "griby.y"
+#line 709 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (12)].str),0,(grib_yyvsp[(6) - (12)].str),0,(grib_yyvsp[(4) - (12)].str),(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,(grib_yyvsp[(12) - (12)].lval),1);  free((grib_yyvsp[(2) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); }
     break;
 
   case 190:
 /* Line 1792 of yacc.c  */
-#line 708 "griby.y"
+#line 710 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(2) - (10)].str),0,(grib_yyvsp[(6) - (10)].str),0,(grib_yyvsp[(4) - (10)].str),(grib_yyvsp[(8) - (10)].str),0,0,(grib_yyvsp[(10) - (10)].lval),1);  free((grib_yyvsp[(2) - (10)].str));free((grib_yyvsp[(6) - (10)].str));free((grib_yyvsp[(4) - (10)].str));free((grib_yyvsp[(8) - (10)].str)); }
     break;
 
   case 191:
 /* Line 1792 of yacc.c  */
-#line 709 "griby.y"
+#line 711 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (14)].str),0,(grib_yyvsp[(8) - (14)].str),(grib_yyvsp[(2) - (14)].str),(grib_yyvsp[(6) - (14)].str),(grib_yyvsp[(10) - (14)].str),(grib_yyvsp[(12) - (14)].str),0,(grib_yyvsp[(14) - (14)].lval),1);  free((grib_yyvsp[(4) - (14)].str));free((grib_yyvsp[(8) - (14)].str));free((grib_yyvsp[(6) - (14)].str));free((grib_yyvsp[(10) - (14)].str));free((grib_yyvsp[(12) - (14)].str)); free((grib_yyvsp[(2) - (14 [...]
     break;
 
   case 192:
 /* Line 1792 of yacc.c  */
-#line 710 "griby.y"
+#line 712 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (12)].str),0,(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(2) - (12)].str),(grib_yyvsp[(6) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,0,(grib_yyvsp[(12) - (12)].lval),1);  free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); free((grib_yyvsp[(2) - (12)].str));}
     break;
 
   case 193:
 /* Line 1792 of yacc.c  */
-#line 711 "griby.y"
+#line 713 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (8)].str),(grib_yyvsp[(6) - (8)].concept_value),0,(grib_yyvsp[(2) - (8)].str),0,0,0,0,(grib_yyvsp[(8) - (8)].lval),1);  free((grib_yyvsp[(2) - (8)].str));free((grib_yyvsp[(4) - (8)].str)); }
     break;
 
   case 194:
 /* Line 1792 of yacc.c  */
-#line 712 "griby.y"
+#line 714 "griby.y"
     { (grib_yyval.act) = grib_action_create_concept(grib_parser_context,(grib_yyvsp[(4) - (11)].str),(grib_yyvsp[(9) - (11)].concept_value),0,(grib_yyvsp[(2) - (11)].str),(grib_yyvsp[(6) - (11)].str),0,0,0,(grib_yyvsp[(11) - (11)].lval),1);  free((grib_yyvsp[(2) - (11)].str));free((grib_yyvsp[(4) - (11)].str));free((grib_yyvsp[(6) - (11)].str)); }
     break;
 
   case 196:
 /* Line 1792 of yacc.c  */
-#line 717 "griby.y"
+#line 719 "griby.y"
     { (grib_yyval.concept_value) = (grib_yyvsp[(2) - (2)].concept_value); (grib_yyvsp[(2) - (2)].concept_value)->next = (grib_yyvsp[(1) - (2)].concept_value);   }
     break;
 
   case 198:
 /* Line 1792 of yacc.c  */
-#line 721 "griby.y"
+#line 723 "griby.y"
     { (grib_yyval.hash_array_value) = (grib_yyvsp[(2) - (2)].hash_array_value); (grib_yyvsp[(2) - (2)].hash_array_value)->next = (grib_yyvsp[(1) - (2)].hash_array_value);   }
     break;
 
   case 199:
 /* Line 1792 of yacc.c  */
-#line 724 "griby.y"
+#line 726 "griby.y"
     { (grib_yyval.act) = grib_action_create_hash_array(grib_parser_context,(grib_yyvsp[(2) - (6)].str),(grib_yyvsp[(4) - (6)].hash_array_value),0,0,0,0,0,0,(grib_yyvsp[(6) - (6)].lval),0);  free((grib_yyvsp[(2) - (6)].str)); }
     break;
 
   case 200:
 /* Line 1792 of yacc.c  */
-#line 725 "griby.y"
+#line 727 "griby.y"
     { (grib_yyval.act) = grib_action_create_hash_array(grib_parser_context,(grib_yyvsp[(2) - (12)].str),0,(grib_yyvsp[(6) - (12)].str),0,(grib_yyvsp[(4) - (12)].str),(grib_yyvsp[(8) - (12)].str),(grib_yyvsp[(10) - (12)].str),0,(grib_yyvsp[(12) - (12)].lval),0);  free((grib_yyvsp[(2) - (12)].str));free((grib_yyvsp[(6) - (12)].str));free((grib_yyvsp[(4) - (12)].str));free((grib_yyvsp[(8) - (12)].str));free((grib_yyvsp[(10) - (12)].str)); }
     break;
 
   case 202:
 /* Line 1792 of yacc.c  */
-#line 729 "griby.y"
+#line 731 "griby.y"
     { (grib_yyval.case_value) = (grib_yyvsp[(2) - (2)].case_value); (grib_yyvsp[(2) - (2)].case_value)->next = (grib_yyvsp[(1) - (2)].case_value);   }
     break;
 
   case 203:
 /* Line 1792 of yacc.c  */
-#line 732 "griby.y"
+#line 734 "griby.y"
     { (grib_yyval.case_value) = grib_case_new(grib_parser_context,(grib_yyvsp[(2) - (4)].explist),(grib_yyvsp[(4) - (4)].act));  }
     break;
 
   case 204:
 /* Line 1792 of yacc.c  */
-#line 736 "griby.y"
+#line 738 "griby.y"
     { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[(3) - (10)].explist),(grib_yyvsp[(6) - (10)].case_value),(grib_yyvsp[(9) - (10)].act)); }
     break;
 
   case 205:
 /* Line 1792 of yacc.c  */
-#line 737 "griby.y"
+#line 739 "griby.y"
     { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[(3) - (9)].explist),(grib_yyvsp[(6) - (9)].case_value),grib_action_create_noop(grib_parser_context,"continue")); }
     break;
 
   case 206:
 /* Line 1792 of yacc.c  */
-#line 738 "griby.y"
+#line 740 "griby.y"
     { (grib_yyval.act) = grib_action_create_switch(grib_parser_context,(grib_yyvsp[(3) - (7)].explist),(grib_yyvsp[(6) - (7)].case_value),0); }
     break;
 
   case 207:
 /* Line 1792 of yacc.c  */
-#line 741 "griby.y"
+#line 743 "griby.y"
     {
 	  				(grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,(grib_yyvsp[(1) - (5)].str),(grib_yyvsp[(4) - (5)].concept_condition)); free((grib_yyvsp[(1) - (5)].str));}
     break;
 
   case 208:
 /* Line 1792 of yacc.c  */
-#line 743 "griby.y"
+#line 745 "griby.y"
     {
 	  				(grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,(grib_yyvsp[(1) - (5)].str),(grib_yyvsp[(4) - (5)].concept_condition)); free((grib_yyvsp[(1) - (5)].str));}
     break;
 
   case 209:
 /* Line 1792 of yacc.c  */
-#line 745 "griby.y"
+#line 747 "griby.y"
     {
 					char buf[80]; sprintf(buf,"%ld",(long)(grib_yyvsp[(1) - (5)].lval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[(4) - (5)].concept_condition));}
     break;
 
   case 210:
 /* Line 1792 of yacc.c  */
-#line 747 "griby.y"
+#line 749 "griby.y"
     {
 					char buf[80]; sprintf(buf,"%g",(double)(grib_yyvsp[(1) - (5)].dval)); (grib_yyval.concept_value) = grib_concept_value_new(grib_parser_context,buf,(grib_yyvsp[(4) - (5)].concept_condition));}
     break;
 
   case 212:
 /* Line 1792 of yacc.c  */
-#line 752 "griby.y"
+#line 754 "griby.y"
     { (grib_yyvsp[(1) - (2)].concept_condition)->next = (grib_yyvsp[(2) - (2)].concept_condition); (grib_yyval.concept_condition) = (grib_yyvsp[(1) - (2)].concept_condition); }
     break;
 
   case 213:
 /* Line 1792 of yacc.c  */
-#line 755 "griby.y"
+#line 757 "griby.y"
     { (grib_yyval.concept_condition) = grib_concept_condition_new(grib_parser_context,(grib_yyvsp[(1) - (4)].str),(grib_yyvsp[(3) - (4)].exp),0); free((grib_yyvsp[(1) - (4)].str)); }
     break;
 
   case 214:
 /* Line 1792 of yacc.c  */
-#line 756 "griby.y"
+#line 758 "griby.y"
     { (grib_yyval.concept_condition) = grib_concept_condition_new(grib_parser_context,(grib_yyvsp[(1) - (6)].str),0,(grib_yyvsp[(4) - (6)].ivalue)); free((grib_yyvsp[(1) - (6)].str)); }
     break;
 
   case 215:
 /* Line 1792 of yacc.c  */
-#line 760 "griby.y"
+#line 762 "griby.y"
     {
 	  				(grib_yyval.hash_array_value) = grib_integer_hash_array_value_new(grib_parser_context,(grib_yyvsp[(1) - (5)].str),(grib_yyvsp[(4) - (5)].ivalue)); free((grib_yyvsp[(1) - (5)].str));}
     break;
 
   case 216:
 /* Line 1792 of yacc.c  */
-#line 762 "griby.y"
+#line 764 "griby.y"
     {
 	  				(grib_yyval.hash_array_value) = grib_integer_hash_array_value_new(grib_parser_context,(grib_yyvsp[(1) - (5)].str),(grib_yyvsp[(4) - (5)].ivalue)); free((grib_yyvsp[(1) - (5)].str));}
     break;
 
   case 217:
 /* Line 1792 of yacc.c  */
-#line 766 "griby.y"
+#line 768 "griby.y"
     { (grib_yyval.exp) = new_accessor_expression(grib_parser_context,(grib_yyvsp[(3) - (8)].str),(grib_yyvsp[(5) - (8)].lval),(grib_yyvsp[(7) - (8)].lval));  free((grib_yyvsp[(3) - (8)].str)); }
     break;
 
   case 218:
 /* Line 1792 of yacc.c  */
-#line 767 "griby.y"
+#line 769 "griby.y"
     { (grib_yyval.exp) = new_accessor_expression(grib_parser_context,(grib_yyvsp[(1) - (1)].str),0,0); free((grib_yyvsp[(1) - (1)].str)); }
     break;
 
   case 219:
 /* Line 1792 of yacc.c  */
-#line 768 "griby.y"
+#line 770 "griby.y"
     { (grib_yyval.exp) = new_sub_string_expression(grib_parser_context,(grib_yyvsp[(3) - (8)].str),(grib_yyvsp[(5) - (8)].lval),(grib_yyvsp[(7) - (8)].lval));  free((grib_yyvsp[(3) - (8)].str)); }
     break;
 
   case 220:
 /* Line 1792 of yacc.c  */
-#line 769 "griby.y"
+#line 771 "griby.y"
     { (grib_yyval.exp) = new_string_expression(grib_parser_context,(grib_yyvsp[(1) - (1)].str));  free((grib_yyvsp[(1) - (1)].str)); }
     break;
 
   case 222:
 /* Line 1792 of yacc.c  */
-#line 773 "griby.y"
+#line 775 "griby.y"
     { (grib_yyval.exp) = new_long_expression(grib_parser_context,(grib_yyvsp[(1) - (1)].lval));  }
     break;
 
   case 223:
 /* Line 1792 of yacc.c  */
-#line 774 "griby.y"
+#line 776 "griby.y"
     { (grib_yyval.exp) = new_double_expression(grib_parser_context,(grib_yyvsp[(1) - (1)].dval));  /* TODO: change to new_float_expression*/}
     break;
 
   case 224:
 /* Line 1792 of yacc.c  */
-#line 776 "griby.y"
+#line 778 "griby.y"
     { (grib_yyval.exp) = NULL; }
     break;
 
   case 225:
 /* Line 1792 of yacc.c  */
-#line 777 "griby.y"
+#line 779 "griby.y"
     { (grib_yyval.exp) = new_true_expression(grib_parser_context); }
     break;
 
   case 226:
 /* Line 1792 of yacc.c  */
-#line 778 "griby.y"
+#line 780 "griby.y"
     { (grib_yyval.exp) = (grib_yyvsp[(2) - (3)].exp); }
     break;
 
   case 227:
 /* Line 1792 of yacc.c  */
-#line 779 "griby.y"
+#line 781 "griby.y"
     { (grib_yyval.exp) = new_unop_expression(grib_parser_context,&grib_op_neg,&grib_op_neg_d,(grib_yyvsp[(2) - (2)].exp)); }
     break;
 
   case 228:
 /* Line 1792 of yacc.c  */
-#line 780 "griby.y"
+#line 782 "griby.y"
     { (grib_yyval.exp) = new_func_expression(grib_parser_context,(grib_yyvsp[(1) - (3)].str),NULL); free((grib_yyvsp[(1) - (3)].str));}
     break;
 
   case 229:
 /* Line 1792 of yacc.c  */
-#line 781 "griby.y"
+#line 783 "griby.y"
     { (grib_yyval.exp) = new_func_expression(grib_parser_context,(grib_yyvsp[(1) - (4)].str),(grib_yyvsp[(3) - (4)].explist)); free((grib_yyvsp[(1) - (4)].str));}
     break;
 
   case 230:
 /* Line 1792 of yacc.c  */
-#line 785 "griby.y"
+#line 787 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_pow,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 232:
 /* Line 1792 of yacc.c  */
-#line 789 "griby.y"
+#line 791 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_mul,&grib_op_mul_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 233:
 /* Line 1792 of yacc.c  */
-#line 790 "griby.y"
+#line 792 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_div,&grib_op_div_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 234:
 /* Line 1792 of yacc.c  */
-#line 791 "griby.y"
+#line 793 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_modulo,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 235:
 /* Line 1792 of yacc.c  */
-#line 792 "griby.y"
+#line 794 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_bit,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 236:
 /* Line 1792 of yacc.c  */
-#line 793 "griby.y"
+#line 795 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_bitoff,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 238:
 /* Line 1792 of yacc.c  */
-#line 795 "griby.y"
+#line 797 "griby.y"
     { (grib_yyval.exp) = new_length_expression(grib_parser_context,(grib_yyvsp[(3) - (4)].str)); free((grib_yyvsp[(3) - (4)].str));}
     break;
 
   case 239:
 /* Line 1792 of yacc.c  */
-#line 796 "griby.y"
+#line 798 "griby.y"
     { (grib_yyval.exp) = new_is_in_list_expression(grib_parser_context,(grib_yyvsp[(3) - (6)].str),(grib_yyvsp[(5) - (6)].str)); free((grib_yyvsp[(3) - (6)].str));free((grib_yyvsp[(5) - (6)].str));}
     break;
 
   case 240:
 /* Line 1792 of yacc.c  */
-#line 797 "griby.y"
+#line 799 "griby.y"
     { (grib_yyval.exp) = new_is_in_dict_expression(grib_parser_context,(grib_yyvsp[(3) - (6)].str),(grib_yyvsp[(5) - (6)].str)); free((grib_yyvsp[(3) - (6)].str));free((grib_yyvsp[(5) - (6)].str));}
     break;
 
   case 241:
 /* Line 1792 of yacc.c  */
-#line 798 "griby.y"
+#line 800 "griby.y"
     { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[(3) - (6)].str),(grib_yyvsp[(5) - (6)].lval),0); free((grib_yyvsp[(3) - (6)].str));}
     break;
 
   case 242:
 /* Line 1792 of yacc.c  */
-#line 799 "griby.y"
+#line 801 "griby.y"
     { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[(3) - (8)].str),(grib_yyvsp[(5) - (8)].lval),(grib_yyvsp[(7) - (8)].lval)); free((grib_yyvsp[(3) - (8)].str));}
     break;
 
   case 243:
 /* Line 1792 of yacc.c  */
-#line 800 "griby.y"
+#line 802 "griby.y"
     { (grib_yyval.exp) = new_is_integer_expression(grib_parser_context,(grib_yyvsp[(3) - (4)].str),0,0); free((grib_yyvsp[(3) - (4)].str));}
     break;
 
   case 244:
 /* Line 1792 of yacc.c  */
-#line 803 "griby.y"
+#line 805 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_add,&grib_op_add_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 245:
 /* Line 1792 of yacc.c  */
-#line 804 "griby.y"
+#line 806 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_sub,&grib_op_sub_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 247:
 /* Line 1792 of yacc.c  */
-#line 808 "griby.y"
+#line 810 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_gt,&grib_op_gt_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 248:
 /* Line 1792 of yacc.c  */
-#line 810 "griby.y"
+#line 812 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_eq,&grib_op_eq_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 249:
 /* Line 1792 of yacc.c  */
-#line 811 "griby.y"
+#line 813 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_lt,&grib_op_lt_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 250:
 /* Line 1792 of yacc.c  */
-#line 812 "griby.y"
+#line 814 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_ge,&grib_op_ge_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 251:
 /* Line 1792 of yacc.c  */
-#line 813 "griby.y"
+#line 815 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_le,&grib_op_le_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 252:
 /* Line 1792 of yacc.c  */
-#line 814 "griby.y"
+#line 816 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_ne,&grib_op_ne_d,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 253:
 /* Line 1792 of yacc.c  */
-#line 815 "griby.y"
+#line 817 "griby.y"
     { (grib_yyval.exp) = new_string_compare_expression(grib_parser_context,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 254:
 /* Line 1792 of yacc.c  */
-#line 820 "griby.y"
+#line 822 "griby.y"
     { (grib_yyval.exp) = new_unop_expression(grib_parser_context,&grib_op_not,NULL,(grib_yyvsp[(2) - (2)].exp)); }
     break;
 
   case 256:
 /* Line 1792 of yacc.c  */
-#line 824 "griby.y"
+#line 826 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_and,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp)); }
     break;
 
   case 258:
 /* Line 1792 of yacc.c  */
-#line 828 "griby.y"
+#line 830 "griby.y"
     { (grib_yyval.exp) = new_binop_expression(grib_parser_context,&grib_op_or,NULL,(grib_yyvsp[(1) - (3)].exp),(grib_yyvsp[(3) - (3)].exp));}
     break;
 
   case 263:
 /* Line 1792 of yacc.c  */
-#line 842 "griby.y"
+#line 844 "griby.y"
     { (grib_yyval.rule_entry) = grib_new_rule_entry(grib_parser_context,(grib_yyvsp[(1) - (4)].str),(grib_yyvsp[(3) - (4)].exp)); free((grib_yyvsp[(1) - (4)].str)); }
     break;
 
   case 264:
 /* Line 1792 of yacc.c  */
-#line 843 "griby.y"
+#line 845 "griby.y"
     { (grib_yyval.rule_entry) = grib_new_rule_entry(grib_parser_context,"skip",0);}
     break;
 
   case 266:
 /* Line 1792 of yacc.c  */
-#line 847 "griby.y"
+#line 849 "griby.y"
     { (grib_yyvsp[(1) - (2)].rule_entry)->next = (grib_yyvsp[(2) - (2)].rule_entry); (grib_yyval.rule_entry) = (grib_yyvsp[(1) - (2)].rule_entry); }
     break;
 
   case 267:
 /* Line 1792 of yacc.c  */
-#line 850 "griby.y"
+#line 852 "griby.y"
     { (grib_yyval.rules) = grib_new_rule(grib_parser_context,NULL,(grib_yyvsp[(1) - (1)].rule_entry)); }
     break;
 
   case 268:
 /* Line 1792 of yacc.c  */
-#line 854 "griby.y"
+#line 856 "griby.y"
     { (grib_yyval.rules) = grib_new_rule(grib_parser_context,(grib_yyvsp[(3) - (7)].exp),(grib_yyvsp[(6) - (7)].rule_entry)); }
     break;
 
   case 270:
 /* Line 1792 of yacc.c  */
-#line 858 "griby.y"
+#line 860 "griby.y"
     { (grib_yyvsp[(1) - (2)].rules)->next = (grib_yyvsp[(2) - (2)].rules); (grib_yyval.rules) = (grib_yyvsp[(1) - (2)].rules); }
     break;
 
 
 /* Line 1792 of yacc.c  */
-#line 4009 "y.tab.c"
+#line 4011 "y.tab.c"
       default: break;
     }
   /* User semantic actions sometimes alter grib_yychar, and that requires
@@ -4237,7 +4239,7 @@ grib_yyreturn:
 
 
 /* Line 2055 of yacc.c  */
-#line 862 "griby.y"
+#line 864 "griby.y"
 
 
 static grib_concept_value *_reverse_concept(grib_concept_value *r,grib_concept_value *s)
diff --git a/src/grib_yacc.h b/src/grib_yacc.h
index f042272..d76cb65 100644
--- a/src/grib_yacc.h
+++ b/src/grib_yacc.h
@@ -304,7 +304,7 @@ extern int grib_yydebug;
 typedef union YYSTYPE
 {
 /* Line 2058 of yacc.c  */
-#line 37 "griby.y"
+#line 39 "griby.y"
 
     char                    *str;
     long                    lval;
diff --git a/src/griby.y b/src/griby.y
index d72411e..288f597 100644
--- a/src/griby.y
+++ b/src/griby.y
@@ -16,6 +16,8 @@
 
 extern int yylex();
 extern int yyerror(const char*);
+extern int yylineno;
+extern char* file_being_parsed();
 
 extern   grib_action*           grib_parser_all_actions;
 extern   grib_concept_value*    grib_parser_concept;
@@ -632,10 +634,10 @@ simple : UNSIGNED '[' INTEGER ']'   IDENT   default flags
    ;
 
 if_block :
-  IF '(' expression ')' '{' instructions '}' { $$ = grib_action_create_if(grib_parser_context,$3,$6,0,0); }
-| IF '(' expression ')' '{' instructions '}' ELSE '{' instructions '}'  { $$ = grib_action_create_if(grib_parser_context,$3,$6,$10,0); }
-| IF_TRANSIENT '(' expression ')' '{' instructions '}' { $$ = grib_action_create_if(grib_parser_context,$3,$6,0,1); }
-| IF_TRANSIENT '(' expression ')' '{' instructions '}' ELSE '{' instructions '}'  { $$ = grib_action_create_if(grib_parser_context,$3,$6,$10,1); }
+  IF '(' expression ')' '{' instructions '}' { $$ = grib_action_create_if(grib_parser_context,$3,$6,0,0,yylineno,file_being_parsed()); }
+| IF '(' expression ')' '{' instructions '}' ELSE '{' instructions '}'  { $$ = grib_action_create_if(grib_parser_context,$3,$6,$10,0,yylineno,file_being_parsed()); }
+| IF_TRANSIENT '(' expression ')' '{' instructions '}' { $$ = grib_action_create_if(grib_parser_context,$3,$6,0,1,yylineno,file_being_parsed()); }
+| IF_TRANSIENT '(' expression ')' '{' instructions '}' ELSE '{' instructions '}'  { $$ = grib_action_create_if(grib_parser_context,$3,$6,$10,1,yylineno,file_being_parsed()); }
    ;
 
 when_block :
diff --git a/src/hash.c b/src/hash.c
deleted file mode 100644
index 0f1cb01..0000000
--- a/src/hash.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2005-2016 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- *
- * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
- * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
- */
-
-#include <stdio.h>
-#include "mars.h"
-
-#define SIZE 	((int)4097)
-
-typedef struct hashrec {
-	struct hashrec  *next;
-	char   *name;
-	int    cnt;
-} hashrec;
-
-static hashrec *table[SIZE] = { 
-	NULL, };
-
-
-static int hash(const char *name)
-{
-	int n = 0;
-
-	while(*name)
-		n +=  (*name++ - 'A') + (n << 5);
-
-#ifdef CRAY
-	if(n<0) n = -n;
-#else
-	if(n<0)  {
-		int m = -n/SIZE;
-		n += (m+1)*SIZE;
-	}
-#endif
-	return n % SIZE;
-}
-
-void hash_stat()
-{
-	int i;
-	int a=0,b=0,c=0;
-	hashrec *h;
-
-	printf("Table size is %d. ",SIZE);
-
-	for(i=0;i<SIZE;i++)
-		if(h = table[i])
-		{
-			a++;
-			while(h) { b++; c += h->cnt; h = h->next; };
-		}
-
-	printf("Used: %d, Total: %d, Strings: %d\n",a,b,c);
-}
-
-char *strcache(const char *name)
-{
-	hashrec *h;
-	int      n;
-
-	if(name == NULL) return NULL;
-
-	n = hash(name);
-	h = table[n];
-
-	while(h)
-	{
-		if(EQ(h->name,name))
-		{
-			h->cnt++;
-			return h->name;
-		}
-		h = h->next;
-	}
-
-	h        = NEW(hashrec);
-	h->name  = NEW_STRING(name);
-	h->next  = table[n];
-	h->cnt   = 1;
-	table[n] = h;
-
-	return h->name;
-}
-
-void strfree(char *name)
-{
-
-	hashrec *h;
-	hashrec *p = NULL;
-	int      n;
-
-	if(name == NULL) return;
-
-	n = hash(name);
-	h = table[n];
-
-	while(h)
-	{
-		if(h->name == name)
-		{
-			h->cnt--;
-			break;
-		}
-		p = h;
-		h = h->next;
-	}
-
-	if(h == NULL)
-	{
-		marslog(LOG_WARN,"%s was not in hash table",name);
-		abort();
-		printf("n=%d\n",n);
-		h = table[n];
-		while(h)
-		{
-			printf("%s %d\n",h->name,h->cnt);
-			h = h->next;
-		}
-		return;
-	}
-
-	if(h->cnt == 0)
-	{
-		if(p) p->next = h->next;
-		else table[n] = h->next;
-		FREE(h->name);
-		FREE(h);
-	}
-}
-
-
diff --git a/src/md5.c b/src/md5.c
index f56b8e2..b3c6b6b 100644
--- a/src/md5.c
+++ b/src/md5.c
@@ -292,7 +292,7 @@ main(int argc, char **argv)
 		FILE* f = fopen64(argv[1],"r");
 		if(!f) {
 			perror(argv[1]);
-			exit(1);
+			return 1;
 		}
 		while((len = fread(buffer, 1, sizeof(buffer), f)) > 0) {
 			grib_md5_add(&s,buffer,len);
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index e36b6b8..6390fa9 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -10,6 +10,7 @@ execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_S
 # Build the executables used by test scripts
 ################################################
 list( APPEND test_bins
+      grib_double_cmp
       read_any
       julian
       index
@@ -18,6 +19,8 @@ list( APPEND test_bins
       unit_tests
       gauss_sub
       grib_util_set_spec
+      local_MeteoFrance
+      grib_2nd_order_numValues
 )
 
 foreach( tool ${test_bins} )
@@ -37,8 +40,10 @@ list( APPEND tests1
     unit_tests
     md5
     uerra
+    grib_2nd_order_numValues
 )
 list( APPEND tests2
+    grib_double_cmp
     bufr_dump
     bufrdc_desc_ref
     bufrdc_ref
@@ -51,9 +56,13 @@ list( APPEND tests2
     bufr_ls
     bufr_change_edition
     ecc-197
+    gts_get
     gts_ls
+    gts_compare
     metar_ls
+    metar_get
     metar_dump
+    metar_compare
     bufr_set
     ieee
     grib1to2
@@ -75,7 +84,7 @@ list( APPEND tests2
     step
     set
     iterator
-    compare
+    grib_compare
     level
     index
     bitmap
@@ -91,7 +100,8 @@ list( APPEND tests2
     padding
     debug
     grib_util_set_spec
-	neg_fctime
+    local_MeteoFrance
+    neg_fctime
 )
 
 # These tests do not require any data downloads
@@ -110,13 +120,14 @@ ecbuild_add_test( TARGET eccodes_t_check_gaussian_grids
 
 # Note: making the test dependent on the grib files (with DEPENDS)
 #       means they will be downloaded at "make" time
-#       rather than when you do "make test". Use TEST_DEPENDS instead
+#       rather than when you do "ctest". Use TEST_DEPENDS instead
 foreach( test ${tests2} )
     ecbuild_add_test( TARGET eccodes_t_${test}
                   TYPE SCRIPT
                   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/${test}.sh
                   RESOURCES asca_139.t1.ref
-                  TEST_DEPENDS eccodes_get_gribs eccodes_get_tigge_gribs eccodes_get_bufrs eccodes_get_metars eccodes_get_gts
+                  TEST_DEPENDS eccodes_download_gribs eccodes_download_tigge_gribs
+                               eccodes_download_bufrs eccodes_download_metars eccodes_download_gts
     )
 endforeach()
 
@@ -126,27 +137,42 @@ ecbuild_add_test( TARGET eccodes_t_lamb_az_eq_area
                   TYPE SCRIPT
                   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lamb_az_eq_area.sh
                   RESOURCES lamb_az_eq_area.ref
-                  TEST_DEPENDS eccodes_get_gribs
+                  TEST_DEPENDS eccodes_download_gribs
 )
 
 # These ones are conditional
+###########################################
 ecbuild_add_test( TARGET eccodes_t_grib_to_netcdf
                   TYPE SCRIPT
                   CONDITION HAVE_NETCDF
                   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_to_netcdf.sh
-                  TEST_DEPENDS eccodes_get_gribs
+                  TEST_DEPENDS eccodes_download_gribs
 )
 
 ecbuild_add_test( TARGET eccodes_t_jpeg
                   TYPE SCRIPT
                   CONDITION HAVE_JPEG
                   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/jpeg.sh
-                  TEST_DEPENDS eccodes_get_gribs
+                  TEST_DEPENDS eccodes_download_gribs
+)
+
+ecbuild_add_test( TARGET eccodes_t_grib_png
+                  TYPE SCRIPT
+                  CONDITION HAVE_PNG
+                  COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_png.sh
+                  TEST_DEPENDS eccodes_download_gribs
 )
 
 ecbuild_add_test( TARGET eccodes_t_ccsds
                   TYPE SCRIPT
                   CONDITION HAVE_AEC
                   COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ccsds.sh
-                  TEST_DEPENDS eccodes_get_gribs
+                  TEST_DEPENDS eccodes_download_gribs
 )
+
+ecbuild_add_test( TARGET eccodes_t_grib_check_param_concepts
+                  TYPE SCRIPT
+                  CONDITION ENABLE_EXTRA_TESTS
+                  COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_check_param_concepts.sh
+)
+
diff --git a/tests/Makefile.am b/tests/Makefile.am
index bed4aaf..58f0cf5 100755
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -36,7 +36,7 @@ TESTS = definitions.sh \
         step.sh \
         set.sh \
         iterator.sh \
-        compare.sh \
+        grib_compare.sh \
         level.sh \
         index.sh \
         bitmap.sh \
@@ -66,7 +66,7 @@ $(TESTS): download_data
 download_data:
 	@$(top_srcdir)/data/download.sh $(top_srcdir)/data
 
-noinst_PROGRAMS = packing_check gauss_sub read_any double_cmp packing pack_unpack \
+noinst_PROGRAMS = packing_check gauss_sub read_any grib_double_cmp packing pack_unpack \
                   multi_from_message julian read_index index gribex_perf\
                   jpeg_perf ccsds_perf so_perf png_perf bpv_limit laplacian \
                   unit_tests grib_util_set_spec
@@ -76,7 +76,7 @@ laplacian_SOURCES = laplacian.c
 packing_SOURCES = packing.c
 packing_check_SOURCES = packing_check.c
 read_any_SOURCES = read_any.c
-double_cmp_SOURCES = double_cmp.c
+grib_double_cmp_SOURCES = grib_double_cmp.c
 pack_unpack_SOURCES = pack_unpack.c
 julian_SOURCES = julian.c
 unit_tests_SOURCES = unit_tests.c
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 978bbd5..bb696fb 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -79,7 +79,7 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 noinst_PROGRAMS = packing_check$(EXEEXT) gauss_sub$(EXEEXT) \
-	read_any$(EXEEXT) double_cmp$(EXEEXT) packing$(EXEEXT) \
+	read_any$(EXEEXT) grib_double_cmp$(EXEEXT) packing$(EXEEXT) \
 	pack_unpack$(EXEEXT) multi_from_message$(EXEEXT) \
 	julian$(EXEEXT) read_index$(EXEEXT) index$(EXEEXT) \
 	gribex_perf$(EXEEXT) jpeg_perf$(EXEEXT) ccsds_perf$(EXEEXT) \
@@ -117,16 +117,16 @@ ccsds_perf_OBJECTS = $(am_ccsds_perf_OBJECTS)
 ccsds_perf_LDADD = $(LDADD)
 ccsds_perf_DEPENDENCIES = $(top_builddir)/src/libeccodes.la \
 	$(am__DEPENDENCIES_1)
-am_double_cmp_OBJECTS = double_cmp.$(OBJEXT)
-double_cmp_OBJECTS = $(am_double_cmp_OBJECTS)
-double_cmp_LDADD = $(LDADD)
-double_cmp_DEPENDENCIES = $(top_builddir)/src/libeccodes.la \
-	$(am__DEPENDENCIES_1)
 am_gauss_sub_OBJECTS = gauss_sub.$(OBJEXT)
 gauss_sub_OBJECTS = $(am_gauss_sub_OBJECTS)
 gauss_sub_LDADD = $(LDADD)
 gauss_sub_DEPENDENCIES = $(top_builddir)/src/libeccodes.la \
 	$(am__DEPENDENCIES_1)
+am_grib_double_cmp_OBJECTS = grib_double_cmp.$(OBJEXT)
+grib_double_cmp_OBJECTS = $(am_grib_double_cmp_OBJECTS)
+grib_double_cmp_LDADD = $(LDADD)
+grib_double_cmp_DEPENDENCIES = $(top_builddir)/src/libeccodes.la \
+	$(am__DEPENDENCIES_1)
 am_grib_util_set_spec_OBJECTS = grib_util_set_spec.$(OBJEXT)
 grib_util_set_spec_OBJECTS = $(am_grib_util_set_spec_OBJECTS)
 grib_util_set_spec_LDADD = $(LDADD)
@@ -236,16 +236,16 @@ AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
 am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
 am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
-SOURCES = bpv_limit.c $(ccsds_perf_SOURCES) $(double_cmp_SOURCES) \
-	$(gauss_sub_SOURCES) $(grib_util_set_spec_SOURCES) \
+SOURCES = bpv_limit.c $(ccsds_perf_SOURCES) $(gauss_sub_SOURCES) \
+	$(grib_double_cmp_SOURCES) $(grib_util_set_spec_SOURCES) \
 	$(gribex_perf_SOURCES) $(index_SOURCES) $(jpeg_perf_SOURCES) \
 	$(julian_SOURCES) $(laplacian_SOURCES) \
 	$(multi_from_message_SOURCES) $(pack_unpack_SOURCES) \
 	$(packing_SOURCES) $(packing_check_SOURCES) \
 	$(png_perf_SOURCES) $(read_any_SOURCES) $(read_index_SOURCES) \
 	$(so_perf_SOURCES) $(unit_tests_SOURCES)
-DIST_SOURCES = bpv_limit.c $(ccsds_perf_SOURCES) $(double_cmp_SOURCES) \
-	$(gauss_sub_SOURCES) $(grib_util_set_spec_SOURCES) \
+DIST_SOURCES = bpv_limit.c $(ccsds_perf_SOURCES) $(gauss_sub_SOURCES) \
+	$(grib_double_cmp_SOURCES) $(grib_util_set_spec_SOURCES) \
 	$(gribex_perf_SOURCES) $(index_SOURCES) $(jpeg_perf_SOURCES) \
 	$(julian_SOURCES) $(laplacian_SOURCES) \
 	$(multi_from_message_SOURCES) $(pack_unpack_SOURCES) \
@@ -705,7 +705,7 @@ TESTS = definitions.sh \
         step.sh \
         set.sh \
         iterator.sh \
-        compare.sh \
+        grib_compare.sh \
         level.sh \
         index.sh \
         bitmap.sh \
@@ -734,7 +734,7 @@ laplacian_SOURCES = laplacian.c
 packing_SOURCES = packing.c
 packing_check_SOURCES = packing_check.c
 read_any_SOURCES = read_any.c
-double_cmp_SOURCES = double_cmp.c
+grib_double_cmp_SOURCES = grib_double_cmp.c
 pack_unpack_SOURCES = pack_unpack.c
 julian_SOURCES = julian.c
 unit_tests_SOURCES = unit_tests.c
@@ -804,14 +804,14 @@ ccsds_perf$(EXEEXT): $(ccsds_perf_OBJECTS) $(ccsds_perf_DEPENDENCIES) $(EXTRA_cc
 	@rm -f ccsds_perf$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(ccsds_perf_OBJECTS) $(ccsds_perf_LDADD) $(LIBS)
 
-double_cmp$(EXEEXT): $(double_cmp_OBJECTS) $(double_cmp_DEPENDENCIES) $(EXTRA_double_cmp_DEPENDENCIES) 
-	@rm -f double_cmp$(EXEEXT)
-	$(AM_V_CCLD)$(LINK) $(double_cmp_OBJECTS) $(double_cmp_LDADD) $(LIBS)
-
 gauss_sub$(EXEEXT): $(gauss_sub_OBJECTS) $(gauss_sub_DEPENDENCIES) $(EXTRA_gauss_sub_DEPENDENCIES) 
 	@rm -f gauss_sub$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(gauss_sub_OBJECTS) $(gauss_sub_LDADD) $(LIBS)
 
+grib_double_cmp$(EXEEXT): $(grib_double_cmp_OBJECTS) $(grib_double_cmp_DEPENDENCIES) $(EXTRA_grib_double_cmp_DEPENDENCIES) 
+	@rm -f grib_double_cmp$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(grib_double_cmp_OBJECTS) $(grib_double_cmp_LDADD) $(LIBS)
+
 grib_util_set_spec$(EXEEXT): $(grib_util_set_spec_OBJECTS) $(grib_util_set_spec_DEPENDENCIES) $(EXTRA_grib_util_set_spec_DEPENDENCIES) 
 	@rm -f grib_util_set_spec$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(grib_util_set_spec_OBJECTS) $(grib_util_set_spec_LDADD) $(LIBS)
@@ -880,8 +880,8 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bpv_limit.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ccsds_perf.Po at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/double_cmp.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gauss_sub.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grib_double_cmp.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/grib_util_set_spec.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gribex_perf.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/index.Po at am__quote@
@@ -1384,9 +1384,9 @@ iterator.sh.log: iterator.sh
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
 	"$$tst" $(AM_TESTS_FD_REDIRECT)
-compare.sh.log: compare.sh
-	@p='compare.sh'; \
-	b='compare.sh'; \
+grib_compare.sh.log: grib_compare.sh
+	@p='grib_compare.sh'; \
+	b='grib_compare.sh'; \
 	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
 	--log-file $$b.log --trs-file $$b.trs \
 	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
diff --git a/tests/bitsPerValue.sh b/tests/bitsPerValue.sh
index cbecdde..6c0d98d 100755
--- a/tests/bitsPerValue.sh
+++ b/tests/bitsPerValue.sh
@@ -60,7 +60,6 @@ regular_latlon_surface.grib1
 regular_latlon_surface_constant.grib1
 second_ord_rbr.grib1
 small_ensemble.grib1
-spectral_compex.grib1
 spectral_complex.grib1
 spherical_model_level.grib1
 spherical_pressure_level.grib1
diff --git a/tests/bufr_dump.sh b/tests/bufr_dump.sh
index 79819ea..8868f8f 100755
--- a/tests/bufr_dump.sh
+++ b/tests/bufr_dump.sh
@@ -42,7 +42,9 @@ echo "Test: malformed bufr file " >> $fLog
 rm -f $fJsonTmp | true
 
 fBufr=${data_dir}/bufr/"bad.bufr"
-fJsonRef=${data_dir}/bufr/"bad.bufr.json.ref"
+# See ECC-276
+# In v0.16.0 we changed the shortNames so we use a newer ref file
+fJsonRef=${data_dir}/bufr/"bad.bufr.json.v0.16.0.ref"
 
 ${tools_dir}bufr_dump -js $fBufr > $fJsonTmp
 
diff --git a/tests/bufr_filter.sh b/tests/bufr_filter.sh
index 25b314b..f3ed167 100755
--- a/tests/bufr_filter.sh
+++ b/tests/bufr_filter.sh
@@ -44,7 +44,8 @@ EOF
 bufr_files=`cat bufr_data_files.txt`
 for f in ${bufr_files} ; do
    echo "file: $f" >> $fLog
-   ${tools_dir}bufr_filter $fRules $f >> $fLog
+   ${tools_dir}codes_bufr_filter $fRules $f >> $fLog
+   ${tools_dir}bufr_filter       $fRules $f >> $fLog  # See ECC-205
 done
 
 #-----------------------------------------------------------
@@ -59,7 +60,7 @@ EOF
 f="syno_multi.bufr"
 echo "Test: dump SYNOP values" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f >> $fLog
+${tools_dir}codes_bufr_filter $fRules $f >> $fLog
 
 #-----------------------------------------------------------
 # Test: filter SYNOP message according to conditions
@@ -80,7 +81,7 @@ rm -f $fBufrTmp | true
 f="syno_multi.bufr"
 echo "Test: filter SYNOP message according to conditions" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f >> $fLog
+${tools_dir}codes_bufr_filter $fRules $f >> $fLog
 
 #Check if the resulting bufr message is the right one
 cat > $fRules <<EOF
@@ -89,7 +90,7 @@ transient statid=1000*blockNumber+stationNumber;
 print "[statid]";
 EOF
 
-[ `${tools_dir}bufr_filter $fRules $fBufrTmp` = "1003" ] 
+[ `${tools_dir}codes_bufr_filter $fRules $fBufrTmp` = "1003" ] 
 
 #-----------------------------------------------------------
 # Test: splitting according to keys 
@@ -109,7 +110,7 @@ EOF
 f="syno_multi.bufr"
 echo "Test: splitting according to keys" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f >> $fLog
+${tools_dir}codes_bufr_filter $fRules $f >> $fLog
 
 #Check if the resulting files exist
 for statid  in 1 3 7 ; do
@@ -121,24 +122,24 @@ done
 #-----------------------------------------------------------
 cat > $fRules <<EOF
 set unpack=1;
-print "pressure=[pressure] [pressure->units]";
-print "pressure->code=[pressure->code!06d]";
-print "pressure->scale=[pressure->scale]";
-print "pressure->reference=[pressure->reference]";
-print "pressure->width=[pressure->width]";
-print "pressure->percentConfidence=[pressure->percentConfidence] [pressure->percentConfidence->units]";
-print "pressure->percentConfidence->code=[pressure->percentConfidence->code!06d]";
-print "pressure->percentConfidence->scale=[pressure->percentConfidence->scale]";
-print "pressure->percentConfidence->reference=[pressure->percentConfidence->reference]";
-print "pressure->percentConfidence->width=[pressure->percentConfidence->width]";
+print "pressure=[nonCoordinatePressure] [nonCoordinatePressure->units]";
+print "pressure->code=[nonCoordinatePressure->code!06d]";
+print "pressure->scale=[nonCoordinatePressure->scale]";
+print "pressure->reference=[nonCoordinatePressure->reference]";
+print "pressure->width=[nonCoordinatePressure->width]";
+print "pressure->percentConfidence=[nonCoordinatePressure->percentConfidence] [nonCoordinatePressure->percentConfidence->units]";
+print "pressure->percentConfidence->code=[nonCoordinatePressure->percentConfidence->code!06d]";
+print "pressure->percentConfidence->scale=[nonCoordinatePressure->percentConfidence->scale]";
+print "pressure->percentConfidence->reference=[nonCoordinatePressure->percentConfidence->reference]";
+print "pressure->percentConfidence->width=[nonCoordinatePressure->percentConfidence->width]";
 EOF
 
 f="syno_1.bufr"
 echo "Test: attributes" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 pressure=100910 Pa
 pressure->code=010004
@@ -168,9 +169,9 @@ EOF
 f="temp_101.bufr"
 echo "Test: access element by rank" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 pressure=98500 Pa
 pressure=102000 101800 100000 98500 96400 92500 92100 89700 
@@ -202,9 +203,9 @@ EOF
 f="b005_89.bufr"
 echo "Test: access marker operators" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 brightnessTemperature={-1e+100,290.8,-1e+100,289.7,289.5,289.5,289.4,287.5,
 287.4,288.3,288.2,-1e+100,-1e+100,-1e+100,-1e+100,-1e+100,
@@ -276,9 +277,9 @@ EOF
 f="temp_101.bufr"
 echo "Test: access marker operators 2" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 pressure=102000 101800 100000 98500 96400 92500 92100 89700 
 88100 86100 85000 84400 79400 79000 78300 77300 
@@ -327,10 +328,10 @@ EOF
 f="asca_139.bufr"
 echo "Test: access by condition" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
 rm -f ${f}.log
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 
 REFERENCE_FILE="../../tests/asca_139.t1.ref"
 diff $REFERENCE_FILE ${f}.log
@@ -353,9 +354,9 @@ EOF
 f="temp_101.bufr"
 echo "Test: access by condition 2" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 ----- /verticalSoundingSignificance=4/airTemperature -----
 272.1 269.5 268.1 267.9 266.7 266.1 264.9 264.9 
@@ -411,7 +412,7 @@ EOF
 echo "set -x" > $testScript1
 chmod +x $testScript1
 
-${tools_dir}bufr_filter $fRulesReady $f 2>> $fLog 1>> $testScript
+${tools_dir}codes_bufr_filter $fRulesReady $f 2>> $fLog 1>> $testScript
 
 sed -e "s:diff:${tools_dir}bufr_compare:" < $testScript >> $testScript1
 
@@ -451,7 +452,7 @@ for f in $files
 do
   echo "Test: packing " >> $fLog
   echo "file: $f" >> $fLog
-  ${tools_dir}bufr_filter -o ${f}.out $fRules $f 2>> $fLog 1>> $fLog
+  ${tools_dir}codes_bufr_filter -o ${f}.out $fRules $f 2>> $fLog 1>> $fLog
 
   ${tools_dir}bufr_compare ${f}.out $f
 
@@ -472,9 +473,9 @@ EOF
 f="ship_11.bufr"
 echo "Test: get string" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 WYM9567
 EOF
@@ -496,9 +497,9 @@ EOF
 f="synop_multi_subset.bufr"
 echo "Test: get string array and stringValues" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 TROMSO-HOLT          
 PASVIK               
@@ -548,7 +549,7 @@ set +e
 f="syno_1.bufr"
 echo "Test: nonexistent keys" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 if [ $? -eq 0 ]; then
    echo "bufr_filter should have failed if key not found" >&2
    exit 1
@@ -556,7 +557,7 @@ fi
 set -e
 
 # Now repeat with -f option (do not exit on error)
-${tools_dir}bufr_filter -f $fRules $f 2>>$fLog 1>>$fLog
+${tools_dir}codes_bufr_filter -f $fRules $f 2>>$fLog 1>>$fLog
 
 
 #-----------------------------------------------------------
@@ -574,7 +575,7 @@ set +e
 f="syno_1.bufr"
 echo "Test: not allowed key values" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 if [ $? -eq 0 ]; then
    echo "bufr_filter should have failed if key value is not allowed" >&2
    exit 1
@@ -582,7 +583,7 @@ fi
 set -e
 
 # Now repeat with -f option (do not exit on error)
-${tools_dir}bufr_filter -f $fRules $f 2>>$fLog 1>>$fLog
+${tools_dir}codes_bufr_filter -f $fRules $f 2>>$fLog 1>>$fLog
 
 
 #----------------------------------------------------
@@ -600,7 +601,7 @@ EOF
 f="syno_1.bufr"
 echo "Test: nformat specifier for integer keys" >> $fLog
 echo "file: $f" >> $fLog
-result=`${tools_dir}bufr_filter  $fRules $f`
+result=`${tools_dir}codes_bufr_filter  $fRules $f`
 #[ "$result" = "centre=098, height=    3" ]
 
 
@@ -623,7 +624,7 @@ rm -f $fBufrTmp | true
 f="syno_1.bufr"
 echo "Test: setting keys" >> $fLog
 echo "file: $f" >> $fLog
-#${tools_dir}bufr_filter -o $fBufrTmp $fRules $f >> $fLog
+#${tools_dir}codes_bufr_filter -o $fBufrTmp $fRules $f >> $fLog
 
 #Check if the resulting bufr message is the right one
 cat > $fRules <<EOF
@@ -631,7 +632,7 @@ set unpack=1;
 print "[typicalDate] [year] [airTemperatureAt2M%.1f]";
 EOF
 
-#[ `${tools_dir}bufr_filter $fRules $fBufrTmp` = "20010511 2001 234.5" ]
+#[ `${tools_dir}codes_bufr_filter $fRules $fBufrTmp` = "20010511 2001 234.5" ]
 
 #Clean up
 rm -f ${dSplit}/*
@@ -654,7 +655,7 @@ write;
 
 EOF
 
-${tools_dir}bufr_filter -o ${f}.out $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter -o ${f}.out $fRules $f 2>> $fLog 1>> $fLog
 ${tools_dir}bufr_compare ${f}.out $f 2>> $fLog 1>> $fLog
 
 rm -f  ${f}.out 
@@ -673,7 +674,7 @@ set BufrTemplate="synopLand";
 write;
 EOF
 
-${tools_dir}bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
 ${tools_dir}bufr_compare $fOut $fRef 2>> $fLog 1>> $fLog
 
 rm -f $fOut 
@@ -686,7 +687,7 @@ set BufrTemplate="aircraftReportWithSecondsAndPressure";
 write;
 EOF
 
-${tools_dir}bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
 ${tools_dir}bufr_compare $fOut $fRef 2>> $fLog 1>> $fLog
 
 rm -f $fOut 
@@ -715,7 +716,7 @@ write;
 
 EOF
 
-${tools_dir}bufr_filter -o ${fout} $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter -o ${fout} $fRules $f 2>> $fLog 1>> $fLog
 ${tools_dir}bufr_compare $fout ${fout}.ref 2>> $fLog 1>> $fLog
 
 #-----------------------------------------------------------
@@ -730,7 +731,7 @@ write;
 EOF
 
 f="syno_1.bufr"
-${tools_dir}bufr_filter -o ${f}.out $fRules $f
+${tools_dir}codes_bufr_filter -o ${f}.out $fRules $f
 # This part of the test is meant to fail
 set +e
 ${tools_dir}bufr_compare ${f}.out $f
@@ -765,9 +766,9 @@ EOF
 f="synop_multi_subset.bufr"
 echo "Test: access subsets by condition" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 stationId=01371
 latitude=61.122
@@ -795,9 +796,9 @@ EOF
 f="amda_144.bufr"
 echo "Test: access subsets and attribute by condition" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 /subsetNumber=1/airTemperature->percentConfidence=70 %
 EOF
@@ -818,9 +819,9 @@ EOF
 f="temp_101.bufr"
 echo "Test: set key by rank" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f 2>> ${f}.log 1>> ${f}.log
 cat > ${f}.ref <<EOF
 #4#airTemperature=300.1
 EOF
@@ -863,9 +864,9 @@ f="syno_1.bufr"
 fOut="new_replication.bufr"
 echo "Test: initialise with given values of delayed replications" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter -o ${fOut} $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter -o ${fOut} $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}bufr_filter -o ${fOut} $fRules $f > ${fOut}.log
+${tools_dir}codes_bufr_filter -o ${fOut} $fRules $f > ${fOut}.log
 
 cat > ${fOut}.log.ref <<EOF
 inputDelayedDescriptorReplicationFactor=2 3
@@ -898,7 +899,7 @@ if [ -f "$f" ]; then
   fOut="vos308014_v3_26_sec_2.bufr"
   echo "Test: initialise with given values of delayed replications" >> $fLog
   echo "file: $f" >> $fLog
-  ${tools_dir}bufr_filter -o ${fOut} $fRules $f 2>> $fLog 1>> $fLog
+  ${tools_dir}codes_bufr_filter -o ${fOut} $fRules $f 2>> $fLog 1>> $fLog
 
   ${tools_dir}bufr_ls ${fOut} > ${fOut}.log
 
@@ -942,14 +943,14 @@ fOut="extract.bufr"
 
 echo "Test: extract subsets uncompressed data" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter -o ${fOut} $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}codes_bufr_filter -o ${fOut} $fRules $f 2>> $fLog 1>> $fLog
 
 cat > ${fRules} <<EOF
 set unpack=1;
 print "stationNumber=[stationNumber!13]";
 EOF
 
-${tools_dir}bufr_filter $fRules $f $fOut > ${fOut}.log
+${tools_dir}codes_bufr_filter $fRules $f $fOut > ${fOut}.log
 
 cat > ${fOut}.log.ref <<EOF
 stationNumber=27 84 270 272 308 371 381 382 387 413 464 485
@@ -977,7 +978,7 @@ f="profiler_european.bufr"
 
 echo "Test: associatedField" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f  > ${f}.log
+${tools_dir}codes_bufr_filter $fRules $f  > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 /height=918/windDirection->associatedField=1
@@ -1131,3 +1132,264 @@ diff ${f}.log.ref ${f}.log
 rm -f ${f}.log ${f}.log.ref
 rm -f $fLog $fOut $fRules 
 
+#-----------------------------------------------------------
+# Test:  create new BUFR with bitmap
+#-----------------------------------------------------------
+cat > $fRules <<EOF
+set compressedData=1;
+set localTablesVersionNumber=101;
+set masterTablesVersionNumber=13;
+set inputDelayedDescriptorReplicationFactor={4,1,4,15,2,2};
+set inputDataPresentIndicator={1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
+set numberOfSubsets=5;
+
+set unexpandedDescriptors={1211, 310022, 301011, 301013, 301021, 102004, 27001, 28001, 7022, 5040,
+  5043, 20010, 20016, 13040, 10001, 8043, 8044, 8023, 106000, 31001,
+  207002, 10004, 207000, 8090, 15008, 8090, 8023, 33054, 10040, 114000,
+  31001, 207002, 7004, 7004, 207000, 8090, 15008, 8090, 15043, 104000,
+  31001, 207002, 10004, 207000, 15044, 224000, 236000, 101000, 31001, 31031,
+  1033, 1032, 8023, 101000, 31001, 224255, 224000, 237000, 1033, 1032,
+  8023, 101000, 31001, 224255};
+
+write;
+EOF
+
+f="syno_1.bufr"
+fOut="out.bufr"
+
+echo "Test: create new BUFR with bitmap" >> $fLog
+echo "file: $f" >> $fLog
+${tools_dir}bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
+
+cat > ${fRules} <<EOF
+set unpack=1;
+
+print "delayedDescriptorReplicationFactor=[delayedDescriptorReplicationFactor!20]";
+print "dataPresentIndicator=[dataPresentIndicator!20]";
+EOF
+
+${tools_dir}bufr_filter $fRules $fOut  > ${f}.log
+
+cat > ${f}.log.ref <<EOF
+delayedDescriptorReplicationFactor=4 1 4 15 2 2
+dataPresentIndicator=1 1 0 0 1 1 1 1 1 1 1 1 1 1 1
+EOF
+
+diff ${f}.log.ref ${f}.log 
+
+rm -f ${f}.log ${f}.log.ref
+rm -f $fLog $fOut $fRules 
+
+#-----------------------------------------------------------
+# Test:  several percentConfidence for same element
+#-----------------------------------------------------------
+cat > $fRules <<EOF
+set unpack=1;
+print "numberOfSubsets=[numberOfSubsets]";
+print "#1#windDirection";
+print "[#1#windDirection!10', ']";
+print "#1#windDirection->percentConfidence";
+print "[#1#windDirection->percentConfidence!10', ']";
+print "#1#windDirection->percentConfidence->percentConfidence";
+print "[#1#windDirection->percentConfidence->percentConfidence!10', ']";
+print "#1#windDirection->percentConfidence->percentConfidence->percentConfidence";
+print "[#1#windDirection->percentConfidence->percentConfidence->percentConfidence!10', ']";
+print "#2#windDirection";
+print "[#2#windDirection!10', ']";
+print "#2#windDirection->percentConfidence=[#2#windDirection->percentConfidence]";
+print "#2#windDirection->percentConfidence->percentConfidence=[#2#windDirection->percentConfidence->percentConfidence]";
+print "#2#windDirection->percentConfidence->percentConfidence->percentConfidence=[#2#windDirection->percentConfidence->percentConfidence->percentConfidence]";
+print "#3#windDirection";
+print "[#3#windDirection!10', ']";
+print "#3#windDirection->percentConfidence=[#3#windDirection->percentConfidence]";
+print "#3#windDirection->percentConfidence->percentConfidence=[#3#windDirection->percentConfidence->percentConfidence]";
+print "#3#windDirection->percentConfidence->percentConfidence->percentConfidence=[#3#windDirection->percentConfidence->percentConfidence->percentConfidence]";
+EOF
+
+f="go15_87.bufr"
+
+echo "Test: create new BUFR with bitmap" >> $fLog
+echo "file: $f" >> $fLog
+
+${tools_dir}bufr_filter $fRules $f  > ${f}.log
+
+cat > ${f}.log.ref <<EOF
+numberOfSubsets=128
+#1#windDirection
+335, 336, 341, 342, 337, 339, 343, 348, 343, 348, 
+352, 351, 9, 15, 8, 8, 6, 13, 16, 29, 
+18, 16, 2, 359, 359, 30, 31, 21, 22, 27, 
+23, 14, 17, 7, 37, 28, 36, 17, 20, 70, 
+346, 20, 69, 59, 66, 73, 59, 82, 82, 93, 
+102, 136, 246, 41, 52, 57, 68, 39, 106, 127, 
+149, 169, 239, 135, 166, 323, 323, 292, 263, 238, 
+232, 260, 257, 239, 290, 252, 252, 239, 242, 249, 
+243, 243, 294, 277, 267, 266, 253, 252, 244, 239, 
+237, 243, 242, 244, 246, 272, 261, 249, 248, 248, 
+242, 250, 249, 237, 237, 244, 279, 275, 254, 248, 
+251, 247, 255, 245, 255, 238, 241, 233, 278, 266, 
+268, 253, 262, 259, 256, 258, 242, 250
+#1#windDirection->percentConfidence
+99, 92, 100, 93, 99, 90, 87, 89, 97, 87, 
+91, 94, 90, 97, 94, 93, 99, 99, 98, 90, 
+93, 83, 91, 97, 98, 93, 87, 89, 95, 97, 
+93, 99, 93, 87, 85, 96, 75, 91, 76, 99, 
+57, 58, 99, 82, 100, 59, 70, 80, 84, 80, 
+85, 62, 51, 92, 82, 54, 67, 63, 67, 81, 
+86, 77, 70, 79, 73, 68, 60, 81, 63, 91, 
+85, 67, 78, 78, 72, 85, 91, 99, 95, 93, 
+56, 83, 90, 74, 98, 97, 93, 99, 60, 98, 
+96, 75, 77, 99, 95, 70, 91, 57, 81, 94, 
+87, 66, 55, 90, 99, 93, 59, 72, 58, 66, 
+75, 80, 94, 97, 77, 98, 99, 59, 95, 78, 
+63, 97, 92, 96, 81, 86, 91, 66
+#1#windDirection->percentConfidence->percentConfidence
+53, 50, 57, 52, 69, 63, 62, 58, 73, 65, 
+65, 62, 73, 70, 76, 75, 58, 60, 64, 58, 
+76, 70, 54, 59, 61, 76, 54, 56, 71, 69, 
+58, 62, 71, 53, 77, 59, 64, 51, 56, 66, 
+57, 58, 68, 56, 70, 57, 63, 58, 66, 65, 
+67, 65, 68, 72, 72, 55, 58, 56, 57, 62, 
+59, 59, 78, 60, 55, 57, 65, 54, 68, 59, 
+58, 54, 58, 72, 72, 67, 66, 62, 68, 65, 
+66, 76, 64, 70, 70, 65, 63, 69, 54, 63, 
+62, 57, 71, 72, 65, 55, 64, 54, 73, 74, 
+64, 59, 67, 67, 58, 70, 53, 69, 61, 55, 
+62, 64, 59, 63, 72, 59, 62, 62, 58, 51, 
+53, 63, 62, 58, 67, 68, 60, 59
+#1#windDirection->percentConfidence->percentConfidence->percentConfidence
+96, 90, 96, 89, 98, 91, 88, 87, 96, 86, 
+89, 95, 91, 96, 93, 92, 95, 97, 96, 88, 
+92, 84, 91, 97, 98, 90, 84, 88, 94, 96, 
+90, 98, 93, 84, 86, 92, 77, 91, 80, 92, 
+51, 54, 99, 78, 98, 62, 69, 77, 86, 80, 
+80, 55, 54, 87, 83, 61, 56, 52, 59, 72, 
+73, 65, 75, 71, 62, 60, 58, 69, 68, 90, 
+85, 62, 73, 78, 73, 86, 90, 97, 95, 85, 
+60, 86, 91, 76, 94, 95, 92, 98, 60, 94, 
+94, 71, 81, 99, 95, 69, 90, 58, 84, 94, 
+86, 66, 60, 90, 99, 92, 59, 71, 60, 67, 
+77, 84, 94, 96, 78, 97, 88, 65, 90, 72, 
+61, 96, 92, 95, 80, 86, 89, 64
+#2#windDirection
+326, 326, 333, 338, 337, 339, 338, 340, 341, 343, 
+347, 352, 10, 13, 7, 7, 1, 16, 17, 22, 
+16, 14, 9, 2, 4, 33, 25, 29, 26, 32, 
+21, 20, 22, 11, 41, 34, 33, 31, 31, 68, 
+33, 55, 64, 53, 58, 76, 51, 68, 84, 92, 
+97, 101, 249, 38, 47, 51, 65, 68, 111, 145, 
+114, 129, 242, 160, 178, 357, 346, 325, 276, 228, 
+235, 242, 242, 243, 301, 253, 248, 243, 244, 243, 
+243, 243, 295, 285, 272, 268, 257, 253, 245, 245, 
+243, 245, 243, 241, 242, 282, 267, 259, 251, 250, 
+247, 245, 246, 240, 240, 241, 280, 277, 264, 260, 
+257, 252, 250, 249, 251, 240, 240, 238, 278, 263, 
+262, 258, 262, 260, 255, 253, 245, 247
+#2#windDirection->percentConfidence=0
+#2#windDirection->percentConfidence->percentConfidence=0
+#2#windDirection->percentConfidence->percentConfidence->percentConfidence=0
+#3#windDirection
+335, 336, 341, 342, 337, 339, 343, 348, 343, 348, 
+352, 351, 9, 15, 8, 8, 6, 13, 16, 29, 
+18, 16, 2, 359, 359, 30, 31, 21, 22, 27, 
+23, 14, 17, 7, 37, 28, 36, 17, 20, 70, 
+346, 20, 69, 59, 66, 73, 59, 82, 82, 93, 
+102, 136, 246, 41, 52, 57, 68, 39, 106, 127, 
+149, 169, 239, 135, 166, 323, 323, 292, 263, 238, 
+232, 260, 257, 239, 290, 252, 252, 239, 242, 249, 
+243, 243, 294, 277, 267, 266, 253, 252, 244, 239, 
+237, 243, 242, 244, 246, 272, 261, 249, 248, 248, 
+242, 250, 249, 237, 237, 244, 279, 275, 254, 248, 
+251, 247, 255, 245, 255, 238, 241, 233, 278, 266, 
+268, 253, 262, 259, 256, 258, 242, 250
+#3#windDirection->percentConfidence=0
+#3#windDirection->percentConfidence->percentConfidence=0
+#3#windDirection->percentConfidence->percentConfidence->percentConfidence=0
+EOF
+
+diff ${f}.log.ref ${f}.log 
+
+rm -f ${f}.log ${f}.log.ref
+
+#-----------------------------------------------------------
+# Test: Data with two bias correction wrong bitmap
+#-----------------------------------------------------------
+cat > $fRules <<EOF
+set unpack=1;
+print "[nonCoordinatePressure->percentConfidence]";
+print "[nonCoordinatePressure->differenceStatisticalValue]";
+print "[nonCoordinatePressure->differenceStatisticalValue->differenceStatisticalValue]";
+EOF
+
+f="metar_with_2_bias.bufr"
+
+echo "Test: Data with two bias correction wrong bitmap" >> $fLog
+echo "file: $f" >> $fLog
+
+${tools_dir}bufr_filter $fRules $f  > ${f}.log
+
+cat > ${f}.log.ref <<EOF
+70
+-1e+100
+-100
+EOF
+
+diff ${f}.log.ref ${f}.log 
+
+rm -f ${f}.log ${f}.log.ref
+
+#-----------------------------------------------------------
+# Test: Data with substituted value
+#-----------------------------------------------------------
+cat > $fRules <<EOF
+set unpack=1;
+print "[#1#nonCoordinateGeopotential]";
+print "[#1#nonCoordinateGeopotential->percentConfidence]";
+print "[#1#nonCoordinateGeopotential->substitutedValue]";
+EOF
+
+f="temp-land-with-substituted-values.bufr"
+
+echo "Test: Data with substituted value" >> $fLog
+echo "file: $f" >> $fLog
+
+${tools_dir}bufr_filter $fRules $f  > ${f}.log
+
+cat > ${f}.log.ref <<EOF
+110
+70
+100
+EOF
+
+diff ${f}.log.ref ${f}.log 
+
+rm -f ${f}.log ${f}.log.ref $fLog $fRules
+
+#-----------------------------------------------------------
+# Test: Nested delayed replication
+#-----------------------------------------------------------
+cat > $fRules <<EOF
+set masterTablesVersionNumber=24;
+set inputDelayedDescriptorReplicationFactor={2,3,5};
+set unexpandedDescriptors={1001,1002, 107000, 31001,5001,5002,102000, 31001,7004, 12001,12004 };
+print "[numericValues]";
+EOF
+
+f="syno_1.bufr"
+
+echo "Test: Nested delayed replication" >> $fLog
+echo "file: $f" >> $fLog
+
+${tools_dir}bufr_filter $fRules $f  > ${f}.log
+
+cat > ${f}.log.ref <<EOF
+-1e+100 -1e+100 2 -1e+100 -1e+100 3 -1e+100 -1e+100 
+-1e+100 -1e+100 -1e+100 -1e+100 -1e+100 -1e+100 -1e+100 5 
+-1e+100 -1e+100 -1e+100 -1e+100 -1e+100 -1e+100 -1e+100 -1e+100 
+-1e+100 -1e+100 -1e+100
+EOF
+
+diff ${f}.log.ref ${f}.log 
+
+rm -f ${f}.log ${f}.log.ref $fLog $fRules
+
diff --git a/tests/bufr_json.sh b/tests/bufr_json.sh
index 8d58a59..824d4a9 100755
--- a/tests/bufr_json.sh
+++ b/tests/bufr_json.sh
@@ -24,29 +24,24 @@ cd ${data_dir}/bufr
 bufr_files=`cat bufr_data_files.txt`
 for file in ${bufr_files}
 do
-  rm -f ${file}.json | true
-
-  ${tools_dir}bufr_dump -js $file 2> $REDIRECT > ${file}.json
-
-  if test "x$JSON_CHECK" != "x"; then
-    json_xs < ${file}.json >$REDIRECT 2> $REDIRECT
-  fi
-
-  rm -f ${file}.json | true
-
-  ${tools_dir}bufr_dump -ja $file 2> $REDIRECT > ${file}.json
-
-  if test "x$JSON_CHECK" != "x"; then
-    json_xs < ${file}.json >$REDIRECT 2> $REDIRECT
-  fi
+  # Test the various JSON dump modes: 'structure', 'all' and 'flat'
+  for mode in s a f; do
+    rm -f ${file}.json
+    ${tools_dir}bufr_dump -j$mode $file 2> $REDIRECT > ${file}.json
+    if test "x$JSON_CHECK" != "x"; then
+      json_xs < ${file}.json >$REDIRECT 2> $REDIRECT
+    fi
+  done
 
   rm -f ${file}.json
+done
 
-  ${tools_dir}bufr_dump -jf $file 2> $REDIRECT > ${file}.json
-
+# ECC-233: Test JSON dump when selecting messages with '-w' switch
+file=tropical_cyclone.bufr
+for c in 1 3 1/3; do
+  ${tools_dir}bufr_dump -w count=$c $file 2> $REDIRECT > ${file}.json
   if test "x$JSON_CHECK" != "x"; then
     json_xs < ${file}.json >$REDIRECT 2> $REDIRECT
   fi
-
-  rm -f ${file}.json
 done
+
diff --git a/tests/bufrdc_desc_ref.sh b/tests/bufrdc_desc_ref.sh
index 2a6b67b..8b909a4 100755
--- a/tests/bufrdc_desc_ref.sh
+++ b/tests/bufrdc_desc_ref.sh
@@ -28,7 +28,7 @@ do
 
   rm -f $res_desc
 
-  ${tools_dir}bufr_filter bufrdc_desc_ref.filter $file 2> $REDIRECT > $res_desc
+  ${tools_dir}codes_bufr_filter bufrdc_desc_ref.filter $file 2> $REDIRECT > $res_desc
   if [ -f "$ref_desc" ]; then
     diff $ref_desc $res_desc > $diff_desc 2> $diff_desc
   fi
diff --git a/tests/bufrdc_ref.sh b/tests/bufrdc_ref.sh
index 8aa436c..c635bde 100755
--- a/tests/bufrdc_ref.sh
+++ b/tests/bufrdc_ref.sh
@@ -29,7 +29,7 @@ do
 
   rm -f $res_num | true
 
-  ${tools_dir}bufr_filter bufrdc_num_ref.filter $file 2> $REDIRECT > $res_num
+  ${tools_dir}codes_bufr_filter bufrdc_num_ref.filter $file 2> $REDIRECT > $res_num
 
   # Exclude the BUFR file uegabe.bufr because its reference file is incorrect
   if [ "$bf" = "uegabe.bufr" ]; then
diff --git a/tests/compare.sh b/tests/compare.sh
deleted file mode 100755
index 3aa4a40..0000000
--- a/tests/compare.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/sh
-# Copyright 2005-2016 ECMWF.
-#
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-#
-# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
-# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
-#
-
-. ./include.sh
-
-REDIRECT=/dev/null
-
-infile="${data_dir}/regular_latlon_surface.grib1"
-outfile=${infile}.compare.$$
-
-rm -f $outfile || true
-
-${tools_dir}grib_set -s shortName=2d $infile $outfile
-
-${tools_dir}grib_compare -b indicatorOfParameter,paramId,shortName $infile $outfile > $REDIRECT
-
-# Test the -r switch
-infile=${data_dir}/v.grib2
-for i in 1 2 3; do
-  ${tools_dir}grib_copy -wcount=$i $infile temp_comp.$i
-done
-cat temp_comp.1 temp_comp.2 temp_comp.3 > temp_comp.123
-cat temp_comp.3 temp_comp.2 temp_comp.1 > temp_comp.321
-
-# Compare files in which the messages are not in the same order
-${tools_dir}grib_compare -r temp_comp.123 temp_comp.321
-
-# GRIB-797: test last argument being a directory
-temp_dir=tempdir.grib_compare
-mkdir -p $temp_dir
-cp $infile $temp_dir
-${tools_dir}grib_compare $infile  $temp_dir
-rm -rf $temp_dir
-
-rm -f temp_comp.1 temp_comp.2 temp_comp.3 temp_comp.123 temp_comp.321
-rm -f $outfile || true
diff --git a/tests/concept.sh b/tests/concept.sh
index 0f5406f..470a893 100755
--- a/tests/concept.sh
+++ b/tests/concept.sh
@@ -33,7 +33,6 @@ regular_latlon_surface.grib1
 regular_latlon_surface_constant.grib1
 second_ord_rbr.grib1
 small_ensemble.grib1
-spectral_compex.grib1
 spectral_complex.grib1
 spherical_model_level.grib1
 spherical_pressure_level.grib1
diff --git a/tests/debug.sh b/tests/debug.sh
index 6452837..86e245f 100755
--- a/tests/debug.sh
+++ b/tests/debug.sh
@@ -34,7 +34,6 @@ regular_latlon_surface.grib1
 regular_latlon_surface_constant.grib1
 second_ord_rbr.grib1
 small_ensemble.grib1
-spectral_compex.grib1
 spectral_complex.grib1
 spherical_model_level.grib1
 spherical_pressure_level.grib1
diff --git a/tests/decimalPrecision.sh b/tests/decimalPrecision.sh
index 3780fbd..a46dc89 100755
--- a/tests/decimalPrecision.sh
+++ b/tests/decimalPrecision.sh
@@ -15,16 +15,16 @@ REDIRECT=/dev/null
 files="regular_latlon_surface.grib2 \
        regular_latlon_surface.grib1"
 
-for file in `echo $files`
-do
+for file in $files; do
+
   infile=${data_dir}/$file
   outfile1=${infile}_decimalPrecision_1
   outfile2=${infile}_decimalPrecision_2
   ${tools_dir}grib_set -r -s decimalScaleFactor=1,bitsPerValue=0 $infile $outfile1
-  ${tools_dir}grib_compare -b totalLength,section4Length,section7Length,dataLength,decimalScaleFactor,binaryScaleFactor,referenceValue,bitsPerValue $infile $outfile1 > $REDIRECT
+  ${tools_dir}grib_compare -P -c data:n $infile $outfile1 > $REDIRECT
+
   ${tools_dir}grib_set -s changeDecimalPrecision=1 $infile $outfile2
-  ${tools_dir}grib_compare -b totalLength,section4Length,section7Length,dataLength,decimalScaleFactor,binaryScaleFactor,referenceValue,bitsPerValue $infile $outfile2 > $REDIRECT
+  ${tools_dir}grib_compare -P -c data:n $infile $outfile2 > $REDIRECT
   ${tools_dir}grib_compare $outfile1 $outfile2
   rm -f $outfile1 $outfile2 || true
 done
-
diff --git a/tests/double_cmp.c b/tests/double_cmp.c
deleted file mode 100644
index ef4eff5..0000000
--- a/tests/double_cmp.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2005-2016 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- *
- * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
- * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
- */
-
-/*
- * C Implementation: double_cmp
- *
- * Description: compare values retrieved with grib_get_double_array and
- *               grib_get_double_element
- *
- * Author: Cristian D. Codorean
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "grib_api.h"
-
-void usage(char* prog) {
-  printf("usage: %s filename\n",prog);
-  exit(1);
-}
-
-int main(int argc, char** argv) {
-  int err = 0,i;
-  double *values = NULL;
-  size_t values_len= 0;
-  double element_value=0;
-
-  FILE* in = NULL;
-  char* filename ;
-  grib_handle *h = NULL;
-
-  if (argc<2) usage(argv[0]);
-  filename=argv[1];
-
-  in = fopen(filename,"r");
-  if(!in) {
-    printf("ERROR: unable to open file %s\n",filename);
-    return 1;
-  }
-
-  /* create new handle from a message in a file*/
-  h = grib_handle_new_from_file(0,in,&err);
-  if (h == NULL) {
-    printf("Error: unable to create handle from file %s\n",filename);
-  }
-
-
-  /* get the size of the values array*/
-  GRIB_CHECK(grib_get_size(h,"values",&values_len),0);
-
-  values = (double*)malloc(values_len*sizeof(double));
-
-  /* get data values*/
-  GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0);
-
-  if (values_len < 100) exit(1);
-
-  for (i = 0; i < 100; i++) {
-	  /* get double element */
-     GRIB_CHECK(grib_get_double_element(h,"values",i,&element_value),0);
-
-     if (element_value != values[i]) {
-	    exit(1);
-	 }
-  }
-
-  free(values);
-
-  grib_handle_delete(h);
-
-  fclose(in);
-  return 0;
-}
diff --git a/tests/double_cmp.sh b/tests/double_cmp.sh
deleted file mode 100755
index d714376..0000000
--- a/tests/double_cmp.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-# Copyright 2005-2016 ECMWF.
-#
-# This software is licensed under the terms of the Apache Licence Version 2.0
-# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
-# 
-# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
-# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
-#
-
-# --- test on the grid_ieee type of packing
-# ---   check if retrieving data through grib_get_double_array and
-# ---   grib_get_double_element provides the same result
-
-. ./include.sh
-
-infile=${data_dir}/grid_ieee.grib
-
-if [ ! -f ${infile} ]
-then
-  echo no data to test
-  exit 1
-fi
-
-${test_dir}/double_cmp ${infile}
diff --git a/tests/grib_2nd_order_numValues.c b/tests/grib_2nd_order_numValues.c
new file mode 100644
index 0000000..8ed319b
--- /dev/null
+++ b/tests/grib_2nd_order_numValues.c
@@ -0,0 +1,2766 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+#include "grib_api.h"
+
+/*
+ * Test that second order packing sets the correct numberOfValues
+ * philippe.marguinaud at meteo.fr, 2016/02
+ */
+
+static double values[] = {
+        0.101300032966540894E+06,       0.101300537463512766E+06,       0.101300575340236785E+06,       0.101300006392703450E+06,       0.101298681683129777E+06,
+        0.101296357626198034E+06,       0.101291429037962458E+06,       0.101285211396584113E+06,       0.101277811769244916E+06,       0.101269604202318660E+06,
+        0.101261086325391967E+06,       0.101252536774223816E+06,       0.101244258202072262E+06,       0.101236292863086681E+06,       0.101228818038673067E+06,
+        0.101222576320632390E+06,       0.101217951101617422E+06,       0.101215281498123208E+06,       0.101214831830208335E+06,       0.101216756641191008E+06,
+        0.101220329473252321E+06,       0.101229814720005656E+06,       0.101242852565120862E+06,       0.101257243179816374E+06,       0.101272242223526715E+06,
+        0.101287023899284890E+06,       0.101300727324330161E+06,       0.101312508880994021E+06,       0.101321304787958841E+06,       0.101323045492054458E+06,
+        0.101323689235454440E+06,       0.101322654817980932E+06,       0.101318546143449697E+06,       0.101311446435368038E+06,       0.101301582670344171E+06,
+        0.101289313645048256E+06,       0.101272976739770951E+06,       0.101254670123119533E+06,       0.101236204711241953E+06,       0.101218525147353255E+06,
+        0.101203644914472199E+06,       0.101191859002529978E+06,       0.101183427645969176E+06,       0.101178788732659857E+06,       0.101176248776911350E+06,
+        0.101174781987763519E+06,       0.101173755414963452E+06,       0.101172549028196707E+06,       0.101170596810517556E+06,       0.101164899003713479E+06,
+        0.101158419589045283E+06,       0.101152491572940358E+06,       0.101147843517789603E+06,       0.101145017464391334E+06,       0.101144350744426047E+06,
+        0.101145965622140546E+06,       0.101150160852645960E+06,       0.101156489280060341E+06,       0.101164999288937499E+06,       0.101174680757722846E+06,
+        0.101184614700939375E+06,       0.101194476866903220E+06,       0.101203847071805940E+06,       0.101212793693367261E+06,       0.101221210811864396E+06,
+        0.101228967667653473E+06,       0.101235941297612240E+06,       0.101241825830798407E+06,       0.101246384813952725E+06,       0.101250233289149895E+06,
+        0.101253625288606709E+06,       0.101256829767974210E+06,       0.101260135466684485E+06,       0.101263922730170481E+06,       0.101268258457290780E+06,
+        0.101273173871677092E+06,       0.101278603318462468E+06,       0.101284438572224244E+06,       0.101291451901038017E+06,       0.101298825789695678E+06,
+        0.101305583597361008E+06,       0.101311198590170257E+06,       0.101313106869633571E+06,       0.101311964918650119E+06,       0.101309609217350633E+06,
+        0.101306588009722152E+06,       0.101303789827421686E+06,       0.101303204229508177E+06,       0.101302539808644782E+06,       0.101301748136565366E+06,
+        0.101300889588588965E+06,       0.101301524026314495E+06,       0.101302253276609670E+06,       0.101302463210049027E+06,       0.101302292202795681E+06,
+        0.101298302559037387E+06,       0.101291449427361382E+06,       0.101283550209983820E+06,       0.101275343284659903E+06,       0.101268451030137920E+06,
+        0.101263440167506284E+06,       0.101259681043976845E+06,       0.101257275584439689E+06,       0.101255817294926324E+06,       0.101255329151085723E+06,
+        0.101256832423130865E+06,       0.101260699063277454E+06,       0.101270225601657599E+06,       0.101287312191364559E+06,       0.101303455630186116E+06,
+        0.101316029699689170E+06,       0.101320758891846766E+06,       0.101311100182774215E+06,       0.101294901290088586E+06,       0.101273081896347416E+06,
+        0.101246397937256072E+06,       0.101214175532589943E+06,       0.101180475299171711E+06,       0.101147446887522659E+06,       0.101117364487217361E+06,
+        0.101093085915674965E+06,       0.101075700452174933E+06,       0.101066299886712630E+06,       0.101066158368806296E+06,       0.101078251612071312E+06,
+        0.101107333429588485E+06,       0.101145577197960345E+06,       0.101190184433163799E+06,       0.101238249723994639E+06,       0.101280682092796589E+06,
+        0.101316576899162261E+06,       0.101349617253023622E+06,       0.101379226791601075E+06,       0.101404833281466810E+06,       0.101426608723689307E+06,
+        0.101443265324151027E+06,       0.101453984963411596E+06,       0.101458728599400347E+06,       0.101457810163301183E+06,       0.101452773264225369E+06,
+        0.101443352159658025E+06,       0.101428700824100233E+06,       0.101409534671443689E+06,       0.101387066094169772E+06,       0.101362901532581192E+06,
+        0.101342428907368536E+06,       0.101323657976273273E+06,       0.101307125752964450E+06,       0.101293183514770688E+06,       0.101280868902945120E+06,
+        0.101268909632403243E+06,       0.101254864133468844E+06,       0.101241751785266810E+06,       0.101229873732095890E+06,       0.101219507414652238E+06,
+        0.101210854622372586E+06,       0.101203998200015136E+06,       0.101202118817604176E+06,       0.101204115282818020E+06,       0.101207394659720041E+06,
+        0.101211469101194845E+06,       0.101215801913933246E+06,       0.101219837912576768E+06,       0.101222821880958276E+06,       0.101223619521153145E+06,
+        0.101223119359168049E+06,       0.101279933976388784E+06,       0.101280230886902951E+06,       0.101280173829517254E+06,       0.101279628905657766E+06,
+        0.101278452724477320E+06,       0.101276500130166445E+06,       0.101273279706602567E+06,       0.101267225127293903E+06,       0.101259879400551043E+06,
+        0.101251952874409501E+06,       0.101243674039727790E+06,       0.101235303075196876E+06,       0.101227122345847776E+06,       0.101219423613287974E+06,
+        0.101212178882549546E+06,       0.101205696806113177E+06,       0.101200710454399567E+06,       0.101197550054666615E+06,       0.101196424920055710E+06,
+        0.101196682426928426E+06,       0.101199196544638864E+06,       0.101204111882830854E+06,       0.101214864879095490E+06,       0.101228568680570461E+06,
+        0.101243289081509487E+06,       0.101258220436669624E+06,       0.101272521063369320E+06,       0.101285366950491778E+06,       0.101296012419061328E+06,
+        0.101305658540617282E+06,       0.101309682063797125E+06,       0.101310624244857565E+06,       0.101308433795484656E+06,       0.101303210985482059E+06,
+        0.101295198335334237E+06,       0.101284767756201632E+06,       0.101272403737592205E+06,       0.101256113788140079E+06,       0.101238847669926457E+06,
+        0.101222589159180454E+06,       0.101208629956686913E+06,       0.101197517909479167E+06,       0.101189497449897433E+06,       0.101184456694785782E+06,
+        0.101181649500138068E+06,       0.101179750491125887E+06,       0.101178046404878522E+06,       0.101175885037415414E+06,       0.101168022154143066E+06,
+        0.101159966065713801E+06,       0.101152331174549618E+06,       0.101145627588820978E+06,       0.101140536375719617E+06,       0.101137554875074289E+06,
+        0.101136964384819003E+06,       0.101138821605761070E+06,       0.101143054186604160E+06,       0.101151654753774303E+06,       0.101161075130481171E+06,
+        0.101170963288776737E+06,       0.101180942106852366E+06,       0.101190660642090996E+06,       0.101199851697929174E+06,       0.101208579711314771E+06,
+        0.101216763897321827E+06,       0.101224252677880388E+06,       0.101230718188980885E+06,       0.101236243573164116E+06,       0.101240451206177866E+06,
+        0.101243892699987075E+06,       0.101246988344102370E+06,       0.101250044906442185E+06,       0.101253348298035868E+06,       0.101257374370298217E+06,
+        0.101262251561231329E+06,       0.101267895803787687E+06,       0.101275473367753089E+06,       0.101283709026768585E+06,       0.101292283625024313E+06,
+        0.101300598737905675E+06,       0.101308093199018083E+06,       0.101314220495369867E+06,       0.101317565250665139E+06,       0.101316383038650820E+06,
+        0.101313738332474823E+06,       0.101310203262582130E+06,       0.101306334680532935E+06,       0.101304140173899126E+06,       0.101302185066315011E+06,
+        0.101301166929963205E+06,       0.101300627409982437E+06,       0.101301442301666364E+06,       0.101302674870566902E+06,       0.101303021785214194E+06,
+        0.101301874610097177E+06,       0.101297234163742920E+06,       0.101289212662159043E+06,       0.101280201810217695E+06,       0.101271153345172788E+06,
+        0.101264093160240271E+06,       0.101259964551924568E+06,       0.101257527008254954E+06,       0.101256779297676592E+06,       0.101257083402693010E+06,
+        0.101258345876766994E+06,       0.101261741195912517E+06,       0.101267637196925745E+06,       0.101280255542587736E+06,       0.101300219472217796E+06,
+        0.101318811431023903E+06,       0.101333064281329105E+06,       0.101337822826176372E+06,       0.101329633927901843E+06,       0.101313842956693508E+06,
+        0.101291773913463257E+06,       0.101264248822328038E+06,       0.101231681402834831E+06,       0.101198711256044262E+06,       0.101165944729817566E+06,
+        0.101135663129340406E+06,       0.101112149821393570E+06,       0.101094336258872077E+06,       0.101083754934829689E+06,       0.101081962838100400E+06,
+        0.101094161177945804E+06,       0.101119463798994111E+06,       0.101153379508463855E+06,       0.101193466772876971E+06,       0.101236864297787688E+06,
+        0.101271319749684611E+06,       0.101304810719710440E+06,       0.101336529049048593E+06,       0.101365547226062699E+06,       0.101391403447243065E+06,
+        0.101414233987549960E+06,       0.101431699751902197E+06,       0.101443249701215464E+06,       0.101448694379159249E+06,       0.101448342945639379E+06,
+        0.101444949497289897E+06,       0.101434983683722516E+06,       0.101420339588228075E+06,       0.101400782009497547E+06,       0.101377357223598548E+06,
+        0.101353445824612878E+06,       0.101331105881366500E+06,       0.101310391048972291E+06,       0.101292023316921361E+06,       0.101276408630823629E+06,
+        0.101263594338449708E+06,       0.101249134886344415E+06,       0.101234892154251414E+06,       0.101221982151018121E+06,       0.101210641209280395E+06,
+        0.101201103409364907E+06,       0.101193542381486463E+06,       0.101189530184913005E+06,       0.101188943141927884E+06,       0.101190369535781749E+06,
+        0.101194174658495293E+06,       0.101198877046582638E+06,       0.101203781726436631E+06,       0.101208345081553751E+06,       0.101210641923420510E+06,
+        0.101211907924376195E+06,       0.101211894158448660E+06,       0.101261542396602526E+06,       0.101261524602459496E+06,       0.101261271962264684E+06,
+        0.101260655467705859E+06,       0.101259535677996173E+06,       0.101257770460092695E+06,       0.101254858567248273E+06,       0.101250130827152869E+06,
+        0.101243199529206220E+06,       0.101235660710148513E+06,       0.101227727082598372E+06,       0.101219642017676335E+06,       0.101211669747645647E+06,
+        0.101204082204654842E+06,       0.101197142166519814E+06,       0.101190828836761386E+06,       0.101185622952613427E+06,       0.101182084994122983E+06,
+        0.101179819644487143E+06,       0.101179386785722192E+06,       0.101181037231546885E+06,       0.101184921544816825E+06,       0.101191071708805684E+06,
+        0.101202963344456002E+06,       0.101217214661309525E+06,       0.101232127096539611E+06,       0.101246868435665092E+06,       0.101260623299959872E+06,
+        0.101275012912500446E+06,       0.101287927630361359E+06,       0.101297156607966986E+06,       0.101300022279744313E+06,       0.101299658882873831E+06,
+        0.101296185125092088E+06,       0.101289860769760111E+06,       0.101281072853932870E+06,       0.101270317685887567E+06,       0.101257849866728764E+06,
+        0.101241620969336713E+06,       0.101226620289076629E+06,       0.101213719159152053E+06,       0.101203448100139896E+06,       0.101196030165699893E+06,
+        0.101191332050565718E+06,       0.101188825460235021E+06,       0.101186627930786824E+06,       0.101183177496864155E+06,       0.101175055095382006E+06,
+        0.101166325451567565E+06,       0.101157506572639366E+06,       0.101149141784503256E+06,       0.101141882059824522E+06,       0.101136611424843984E+06,
+        0.101133780517071078E+06,       0.101133612778250375E+06,       0.101137015702474586E+06,       0.101144048000326933E+06,       0.101152946100252506E+06,
+        0.101162592544671337E+06,       0.101172594122147348E+06,       0.101182525914593833E+06,       0.101192006688188281E+06,       0.101200731545306888E+06,
+        0.101208949653701755E+06,       0.101216776035106115E+06,       0.101223643986761963E+06,       0.101229495275078225E+06,       0.101234397106283810E+06,
+        0.101238325186287970E+06,       0.101241245958931366E+06,       0.101243986310471693E+06,       0.101246885079730608E+06,       0.101250239965938381E+06,
+        0.101254497783043873E+06,       0.101260948534770170E+06,       0.101268693386766550E+06,       0.101277410860750868E+06,       0.101286673004684562E+06,
+        0.101296037156777587E+06,       0.101304973100759889E+06,       0.101312836471203336E+06,       0.101319077100166265E+06,       0.101323200714451756E+06,
+        0.101322250124293394E+06,       0.101319426400325508E+06,       0.101315327879672026E+06,       0.101311379409400208E+06,       0.101308929715621984E+06,
+        0.101307576201749136E+06,       0.101306752066909641E+06,       0.101306276681202202E+06,       0.101306450951061837E+06,       0.101306928825287003E+06,
+        0.101306304370611891E+06,       0.101304071949983219E+06,       0.101298726444911401E+06,       0.101289556844688181E+06,       0.101279573549734007E+06,
+        0.101269900918276995E+06,       0.101262737639210711E+06,       0.101259533404357528E+06,       0.101258456904325285E+06,       0.101259373853730853E+06,
+        0.101261455254273096E+06,       0.101264486663057716E+06,       0.101269671494430630E+06,       0.101277337091813301E+06,       0.101292476984397377E+06,
+        0.101314252890570002E+06,       0.101334243526143560E+06,       0.101349257112687643E+06,       0.101353348220742904E+06,       0.101345316081726181E+06,
+        0.101329205683580891E+06,       0.101306196398575121E+06,       0.101276157501052992E+06,       0.101241050683782683E+06,       0.101205878990180805E+06,
+        0.101173117425566874E+06,       0.101145231775263543E+06,       0.101124829234029152E+06,       0.101110142836540865E+06,       0.101099009983212847E+06,
+        0.101095931793603289E+06,       0.101107937055714152E+06,       0.101129557639286853E+06,       0.101159016947845914E+06,       0.101194290171214365E+06,
+        0.101229194191076458E+06,       0.101259884907642350E+06,       0.101290909335772027E+06,       0.101321534960278805E+06,       0.101350933609778935E+06,
+        0.101378619763291339E+06,       0.101402515553940961E+06,       0.101421126437325220E+06,       0.101433759893184542E+06,       0.101440081432142906E+06,
+        0.101442774222367792E+06,       0.101440175371796868E+06,       0.101430382938397539E+06,       0.101414195446914280E+06,       0.101393183882853962E+06,
+        0.101368556280786899E+06,       0.101342857987377705E+06,       0.101318002031737051E+06,       0.101294900480304379E+06,       0.101274304523903862E+06,
+        0.101256697091383176E+06,       0.101240541623616038E+06,       0.101225909818463362E+06,       0.101213299349493405E+06,       0.101200928172660904E+06,
+        0.101190501742025459E+06,       0.101182213405811461E+06,       0.101176901403817319E+06,       0.101175245583661221E+06,       0.101175762446152599E+06,
+        0.101178005333581008E+06,       0.101181392651505157E+06,       0.101186087494527630E+06,       0.101191405412103719E+06,       0.101195091837111089E+06,
+        0.101197730891759726E+06,       0.101199364382066880E+06,       0.101199730209935369E+06,       0.101245004040932326E+06,       0.101244559135352756E+06,
+        0.101244006361693333E+06,       0.101243220164091719E+06,       0.101242063426875131E+06,       0.101239785127296316E+06,       0.101236357261140554E+06,
+        0.101232655165141550E+06,       0.101227802625625860E+06,       0.101220780822386791E+06,       0.101213322053334618E+06,       0.101205654745465290E+06,
+        0.101198027406206093E+06,       0.101190695138277268E+06,       0.101183902374283105E+06,       0.101177861446733092E+06,       0.101172715839318174E+06,
+        0.101168727915036332E+06,       0.101166083677619172E+06,       0.101165120300427254E+06,       0.101166097664782996E+06,       0.101169176642534818E+06,
+        0.101174400762938254E+06,       0.101181681695578300E+06,       0.101194628149370954E+06,       0.101209354172510837E+06,       0.101224384543212596E+06,
+        0.101241003377192639E+06,       0.101256971279536912E+06,       0.101271325762838256E+06,       0.101283302907598583E+06,       0.101290837888259193E+06,
+        0.101292188600320253E+06,       0.101290316399723524E+06,       0.101285500501916889E+06,       0.101278145707370568E+06,       0.101268063741988299E+06,
+        0.101255992666718317E+06,       0.101243630289196284E+06,       0.101230020660095543E+06,       0.101218300352418431E+06,       0.101208996070145775E+06,
+        0.101202318103285957E+06,       0.101198115125068754E+06,       0.101195865072430563E+06,       0.101192485973754709E+06,       0.101184883550562605E+06,
+        0.101176252043943983E+06,       0.101167064140836461E+06,       0.101157837055866650E+06,       0.101149111932572778E+06,       0.101141425669095363E+06,
+        0.101136096494374695E+06,       0.101133772515929886E+06,       0.101136278536261714E+06,       0.101141790910123251E+06,       0.101149565058361550E+06,
+        0.101159158826086161E+06,       0.101169280924233710E+06,       0.101179364339541717E+06,       0.101189214375348573E+06,       0.101198419330631325E+06,
+        0.101206662421100802E+06,       0.101214110977152406E+06,       0.101221277683224456E+06,       0.101227361193735371E+06,       0.101232391962857888E+06,
+        0.101236456240121115E+06,       0.101239696448804534E+06,       0.101242131415364871E+06,       0.101244485321801025E+06,       0.101247206329288369E+06,
+        0.101250813340918423E+06,       0.101256254483921584E+06,       0.101263638654577793E+06,       0.101272420586206106E+06,       0.101282081390786785E+06,
+        0.101292093147014763E+06,       0.101301886889219619E+06,       0.101311011635127215E+06,       0.101318745388787589E+06,       0.101324552511834278E+06,
+        0.101327137099599713E+06,       0.101325798652594996E+06,       0.101322370281172494E+06,       0.101318873214067411E+06,       0.101316033453167009E+06,
+        0.101314254241750285E+06,       0.101313290040590538E+06,       0.101312777489808956E+06,       0.101312426972162124E+06,       0.101312077043907979E+06,
+        0.101311637613854371E+06,       0.101309930679532728E+06,       0.101306604219150962E+06,       0.101300708574919438E+06,       0.101290667766194849E+06,
+        0.101280103453056901E+06,       0.101270238174615952E+06,       0.101263265305097812E+06,       0.101261210282368877E+06,       0.101261635280168994E+06,
+        0.101264259503469541E+06,       0.101268188459234763E+06,       0.101273120782915241E+06,       0.101280081032422138E+06,       0.101289326234345950E+06,
+        0.101306137507821695E+06,       0.101328331726916280E+06,       0.101348454606262691E+06,       0.101363243724620203E+06,       0.101365228148856142E+06,
+        0.101355701191101674E+06,       0.101338137535693226E+06,       0.101313442343172661E+06,       0.101279893686959578E+06,       0.101241766771608411E+06,
+        0.101204166019317592E+06,       0.101170013105795253E+06,       0.101142432350644231E+06,       0.101122231791865343E+06,       0.101108816561727523E+06,
+        0.101102229721379510E+06,       0.101103813368451665E+06,       0.101116580337189007E+06,       0.101134920647456835E+06,       0.101160141230191730E+06,
+        0.101190695983823272E+06,       0.101217581338673946E+06,       0.101244990949544663E+06,       0.101273917316553634E+06,       0.101303572896501239E+06,
+        0.101333544453130846E+06,       0.101364877370781323E+06,       0.101391063816659895E+06,       0.101411237101045277E+06,       0.101425278782258334E+06,
+        0.101433519934200929E+06,       0.101439158935259431E+06,       0.101436999045160905E+06,       0.101426916105024720E+06,       0.101409617969188068E+06,
+        0.101386542831537823E+06,       0.101358099179373283E+06,       0.101329104321193983E+06,       0.101301390131810738E+06,       0.101275584184176812E+06,
+        0.101252450915750233E+06,       0.101231887457535791E+06,       0.101212090768716560E+06,       0.101196447068532798E+06,       0.101185068443023629E+06,
+        0.101177384135667060E+06,       0.101168309967723544E+06,       0.101161992541140848E+06,       0.101159852630578913E+06,       0.101159796489626082E+06,
+        0.101161597602608847E+06,       0.101164838510229980E+06,       0.101168957886595192E+06,       0.101173308450019656E+06,       0.101177043737997461E+06,
+        0.101180725542300570E+06,       0.101183638211952741E+06,       0.101185541375514644E+06,       0.101186177771331219E+06,       0.101231389269493171E+06,
+        0.101229452023944614E+06,       0.101228492450459045E+06,       0.101227437857730562E+06,       0.101225272919369032E+06,       0.101222115782736248E+06,
+        0.101218895852368762E+06,       0.101215584732123752E+06,       0.101212116636056322E+06,       0.101207354097621472E+06,       0.101200521838921966E+06,
+        0.101193426713001274E+06,       0.101186304142571476E+06,       0.101179395677309934E+06,       0.101172931379861388E+06,       0.101167151828382484E+06,
+        0.101162308500518877E+06,       0.101158300144806009E+06,       0.101155408258388663E+06,       0.101154070184498851E+06,       0.101154559752015484E+06,
+        0.101157052466433044E+06,       0.101161607131965604E+06,       0.101168151354609319E+06,       0.101176471448160533E+06,       0.101190446255643255E+06,
+        0.101207546249739040E+06,       0.101224869025537133E+06,       0.101241629266362957E+06,       0.101257034534386199E+06,       0.101270300423290071E+06,
+        0.101280701804350014E+06,       0.101286032850469506E+06,       0.101285592385854572E+06,       0.101282085195034277E+06,       0.101274697798302746E+06,
+        0.101264580591891121E+06,       0.101253728075986262E+06,       0.101242929317346643E+06,       0.101232485866013521E+06,       0.101222025672053554E+06,
+        0.101213765521939480E+06,       0.101207908438247250E+06,       0.101204284122239580E+06,       0.101199927839590950E+06,       0.101194734819518329E+06,
+        0.101188456889903726E+06,       0.101179666542616309E+06,       0.101170394407501270E+06,       0.101161163472120141E+06,       0.101152520749703152E+06,
+        0.101145006252468942E+06,       0.101139495861547286E+06,       0.101140801932908304E+06,       0.101144658005535239E+06,       0.101150950782672968E+06,
+        0.101159402010231061E+06,       0.101169516352869221E+06,       0.101180618870833394E+06,       0.101190857796199096E+06,       0.101200641550543587E+06,
+        0.101209362327359180E+06,       0.101217130139796180E+06,       0.101224049008589936E+06,       0.101230122753387783E+06,       0.101235212462695199E+06,
+        0.101239229954162147E+06,       0.101242277095199534E+06,       0.101244507835626879E+06,       0.101246153185945266E+06,       0.101247135672995661E+06,
+        0.101249606832741643E+06,       0.101254017340448758E+06,       0.101260512682501125E+06,       0.101268912159280037E+06,       0.101278581961162170E+06,
+        0.101288935630890279E+06,       0.101299344634514127E+06,       0.101309165575948311E+06,       0.101317556887074039E+06,       0.101323172703937016E+06,
+        0.101326358447397986E+06,       0.101327232302474091E+06,       0.101325894572504010E+06,       0.101322706535794525E+06,       0.101319932108380584E+06,
+        0.101318115839731938E+06,       0.101317374329348502E+06,       0.101316802412196412E+06,       0.101316539167573457E+06,       0.101316220872659469E+06,
+        0.101315472541661889E+06,       0.101313988991298058E+06,       0.101311143303248988E+06,       0.101306823565026949E+06,       0.101300909517459571E+06,
+        0.101291139156745485E+06,       0.101281432901143096E+06,       0.101272931024738762E+06,       0.101267480423988032E+06,       0.101267406598649904E+06,
+        0.101269963384954986E+06,       0.101274800002130170E+06,       0.101281233237463195E+06,       0.101288842618392577E+06,       0.101297886975346977E+06,
+        0.101308296387334616E+06,       0.101325624485844790E+06,       0.101346166178142783E+06,       0.101363441252856501E+06,       0.101374801583022883E+06,
+        0.101371478339382054E+06,       0.101357965915636902E+06,       0.101337616663800756E+06,       0.101310513973449386E+06,       0.101272307541573202E+06,
+        0.101230865550039016E+06,       0.101190791911869368E+06,       0.101155350687670492E+06,       0.101129224427448615E+06,       0.101110583343861392E+06,
+        0.101099020700267734E+06,       0.101094724119735372E+06,       0.101099023269690821E+06,       0.101111662707600757E+06,       0.101130628382792580E+06,
+        0.101154442701152686E+06,       0.101179514522985817E+06,       0.101201379997560478E+06,       0.101226265787734679E+06,       0.101253796882664625E+06,
+        0.101283225572595169E+06,       0.101317124967778669E+06,       0.101350989077608407E+06,       0.101379921717535108E+06,       0.101402381642000008E+06,
+        0.101417742462739217E+06,       0.101429901727416946E+06,       0.101436203470310473E+06,       0.101434079341425662E+06,       0.101423164600191842E+06,
+        0.101404037685293821E+06,       0.101376818918793375E+06,       0.101344589194113520E+06,       0.101311531147971255E+06,       0.101279820675164505E+06,
+        0.101251153362574143E+06,       0.101225285333396270E+06,       0.101199764562447148E+06,       0.101178262360150809E+06,       0.101161772194779478E+06,
+        0.101150434481179953E+06,       0.101143909494338062E+06,       0.101141390141577620E+06,       0.101140639767941699E+06,       0.101140632648710569E+06,
+        0.101142372620975060E+06,       0.101145663398052158E+06,       0.101150107990777600E+06,       0.101155154940690569E+06,       0.101159369531278891E+06,
+        0.101162295247948568E+06,       0.101164893804552295E+06,       0.101168002876310085E+06,       0.101170082535517562E+06,       0.101170879828210964E+06,
+        0.101219861459639709E+06,       0.101217353733850920E+06,       0.101214813662341927E+06,       0.101212272616671195E+06,       0.101208980334428372E+06,
+        0.101205795685889956E+06,       0.101202734659769427E+06,       0.101199769990954403E+06,       0.101196834984741159E+06,       0.101193828164992272E+06,
+        0.101189376363543503E+06,       0.101183028116295318E+06,       0.101176590659241221E+06,       0.101170295511546516E+06,       0.101164459781001147E+06,
+        0.101159272837843542E+06,       0.101154626508349247E+06,       0.101150830978481536E+06,       0.101147940393322046E+06,       0.101146374185143752E+06,
+        0.101146551350105059E+06,       0.101148666345078062E+06,       0.101152796928674230E+06,       0.101158889620899077E+06,       0.101166802022490039E+06,
+        0.101178035305259487E+06,       0.101194860122035752E+06,       0.101212325551695918E+06,       0.101229507831180323E+06,       0.101245588075390231E+06,
+        0.101259749204794090E+06,       0.101271227064842373E+06,       0.101279354568716226E+06,       0.101282023041620065E+06,       0.101277735417878983E+06,
+        0.101270065940430606E+06,       0.101260942221718724E+06,       0.101251183302667749E+06,       0.101241580790420048E+06,       0.101232817663754860E+06,
+        0.101224865544509375E+06,       0.101217678236240463E+06,       0.101212672610467605E+06,       0.101207368061914924E+06,       0.101202142949429748E+06,
+        0.101197200360827206E+06,       0.101192321056135959E+06,       0.101185312042045203E+06,       0.101176366919002583E+06,       0.101167575306740793E+06,
+        0.101159499887747690E+06,       0.101153693581619635E+06,       0.101151632492099627E+06,       0.101152648343697670E+06,       0.101157198969257923E+06,
+        0.101164178808173063E+06,       0.101173247856793882E+06,       0.101183857272265639E+06,       0.101195294072408884E+06,       0.101206439742155373E+06,
+        0.101215821840872028E+06,       0.101224223508709707E+06,       0.101231582323487324E+06,       0.101237823030360581E+06,       0.101242874318770337E+06,
+        0.101246774089702827E+06,       0.101249620201836733E+06,       0.101251514633922707E+06,       0.101250998739460556E+06,       0.101250350564701104E+06,
+        0.101251192192736547E+06,       0.101254126969565099E+06,       0.101259362363834385E+06,       0.101266888172729494E+06,       0.101276372037240624E+06,
+        0.101286838617996444E+06,       0.101297573246049607E+06,       0.101307533698699568E+06,       0.101315884770704040E+06,       0.101322262940598855E+06,
+        0.101325965760392661E+06,       0.101327074410681467E+06,       0.101325913256045969E+06,       0.101323124870245505E+06,       0.101319702236701676E+06,
+        0.101317199019545646E+06,       0.101315951598744505E+06,       0.101315806747022463E+06,       0.101315575437492836E+06,       0.101314907982108765E+06,
+        0.101313877512845647E+06,       0.101312479697057366E+06,       0.101309803618787570E+06,       0.101306072028328548E+06,       0.101301517809186698E+06,
+        0.101296222398532715E+06,       0.101287978736962512E+06,       0.101280134483104775E+06,       0.101273858730883643E+06,       0.101270559684999607E+06,
+        0.101272646114663905E+06,       0.101277445816036910E+06,       0.101284587711525965E+06,       0.101293877343276210E+06,       0.101304839668757166E+06,
+        0.101316528257227954E+06,       0.101328366576771165E+06,       0.101345969486117698E+06,       0.101364186088572969E+06,       0.101377148495963469E+06,
+        0.101382093829553254E+06,       0.101370766337072331E+06,       0.101349741353763951E+06,       0.101321811510905638E+06,       0.101288468123698593E+06,
+        0.101244965303345511E+06,       0.101202004776977919E+06,       0.101162860285996649E+06,       0.101126851606302604E+06,       0.101104372225545885E+06,
+        0.101088557676466924E+06,       0.101079807482518576E+06,       0.101078498448923550E+06,       0.101085445131155400E+06,       0.101098827324377111E+06,
+        0.101117379276230466E+06,       0.101139770652544976E+06,       0.101160113557297649E+06,       0.101180387504904938E+06,       0.101203886596317709E+06,
+        0.101230902181368132E+06,       0.101261803558958476E+06,       0.101300608660476937E+06,       0.101337274184836075E+06,       0.101369125977644289E+06,
+        0.101394267041929546E+06,       0.101413158265606093E+06,       0.101427330114929093E+06,       0.101432361057773902E+06,       0.101429910859225725E+06,
+        0.101417624134461643E+06,       0.101395314188587567E+06,       0.101362172145086661E+06,       0.101325960646168634E+06,       0.101289070977803320E+06,
+        0.101253544677021608E+06,       0.101220938962399465E+06,       0.101189935258524172E+06,       0.101161696612905507E+06,       0.101138721820111517E+06,
+        0.101121644349305658E+06,       0.101110649141410599E+06,       0.101105415636551304E+06,       0.101106709372907222E+06,       0.101112684473039320E+06,
+        0.101118393699309789E+06,       0.101122164751330070E+06,       0.101127188453840165E+06,       0.101133080620089138E+06,       0.101138746974859983E+06,
+        0.101142873479913527E+06,       0.101146389620966002E+06,       0.101149025184660437E+06,       0.101150587859464547E+06,       0.101152755345234560E+06,
+        0.101153603260132426E+06,       0.101210525717246186E+06,       0.101207548474999538E+06,       0.101202904596832290E+06,       0.101197951386655157E+06,
+        0.101194386519771622E+06,       0.101191122015514105E+06,       0.101188175657561296E+06,       0.101185519945178385E+06,       0.101183085746111174E+06,
+        0.101180766773284515E+06,       0.101178424993241424E+06,       0.101174517040993989E+06,       0.101168962341147722E+06,       0.101163714253363345E+06,
+        0.101158948557658077E+06,       0.101154261182255184E+06,       0.101149950932639709E+06,       0.101146327181315632E+06,       0.101143687040794233E+06,
+        0.101142126337276364E+06,       0.101142152044085655E+06,       0.101144083527112423E+06,       0.101148021171421016E+06,       0.101154000779215450E+06,
+        0.101162760282120405E+06,       0.101173711396198050E+06,       0.101186611484798021E+06,       0.101203854792520258E+06,       0.101221108630801245E+06,
+        0.101237514909808757E+06,       0.101252212005649548E+06,       0.101264385838287199E+06,       0.101273313773670612E+06,       0.101275991122254636E+06,
+        0.101272633847169331E+06,       0.101265839223746094E+06,       0.101257619395513131E+06,       0.101248828329997094E+06,       0.101240269262524962E+06,
+        0.101232609922544550E+06,       0.101226305719316471E+06,       0.101221001261636731E+06,       0.101215325578545016E+06,       0.101210148330884782E+06,
+        0.101205386910296002E+06,       0.101200913609812837E+06,       0.101196557499459639E+06,       0.101192094621711993E+06,       0.101184939627293686E+06,
+        0.101177056092112194E+06,       0.101171384998373789E+06,       0.101168077457142164E+06,       0.101167062491365999E+06,       0.101168742847490139E+06,
+        0.101173481015017140E+06,       0.101181062252591364E+06,       0.101190688726292763E+06,       0.101201754487460537E+06,       0.101213053590803727E+06,
+        0.101224458950927612E+06,       0.101234613260145692E+06,       0.101242743726390036E+06,       0.101249595831817132E+06,       0.101255046289272010E+06,
+        0.101258984767052723E+06,       0.101261363785577109E+06,       0.101261779254400128E+06,       0.101259695740838331E+06,       0.101257723355522670E+06,
+        0.101256712782620496E+06,       0.101257390131988577E+06,       0.101260812728128207E+06,       0.101266865110914150E+06,       0.101275356425384583E+06,
+        0.101285757165198593E+06,       0.101297005109519319E+06,       0.101307222441895385E+06,       0.101316130802742104E+06,       0.101323131432448601E+06,
+        0.101327755554835458E+06,       0.101329091060690815E+06,       0.101327426676222676E+06,       0.101323405755774875E+06,       0.101317808009742424E+06,
+        0.101312695092861308E+06,       0.101309644418928467E+06,       0.101307843097245379E+06,       0.101307258014776118E+06,       0.101306396062738830E+06,
+        0.101304392989299769E+06,       0.101302318926388383E+06,       0.101300146974100906E+06,       0.101296693003163877E+06,       0.101292171838443071E+06,
+        0.101287472873098537E+06,       0.101282787197424317E+06,       0.101276691890622955E+06,       0.101271343380570586E+06,       0.101267971439309680E+06,
+        0.101267491024100920E+06,       0.101272069334797809E+06,       0.101279335267968272E+06,       0.101288917788163279E+06,       0.101301241225878053E+06,
+        0.101315819189724789E+06,       0.101330320177330534E+06,       0.101343606724499783E+06,       0.101360277666390102E+06,       0.101374651937569957E+06,
+        0.101381948044541350E+06,       0.101379139254734604E+06,       0.101357829215456179E+06,       0.101327280040149271E+06,       0.101289941888269532E+06,
+        0.101246108522415467E+06,       0.101194796632095546E+06,       0.101146024288208340E+06,       0.101103656741928615E+06,       0.101073141515266252E+06,
+        0.101057806173447316E+06,       0.101051682514418280E+06,       0.101049406076037965E+06,       0.101052339673225651E+06,       0.101063115066462298E+06,
+        0.101078506068417060E+06,       0.101097590566484258E+06,       0.101118771179471136E+06,       0.101135489318013730E+06,       0.101154758424584812E+06,
+        0.101177654242688412E+06,       0.101205061131610448E+06,       0.101242230976538951E+06,       0.101283647903067162E+06,       0.101323242160821901E+06,
+        0.101358087742294330E+06,       0.101385937955843910E+06,       0.101409794381458749E+06,       0.101425117131910592E+06,       0.101429997042675925E+06,
+        0.101424225668113679E+06,       0.101409012607044147E+06,       0.101378645916584719E+06,       0.101341017521829854E+06,       0.101300635121866770E+06,
+        0.101259780015675904E+06,       0.101220490612824302E+06,       0.101183385014229250E+06,       0.101147969487759023E+06,       0.101117685992608021E+06,
+        0.101093539937281050E+06,       0.101076195561657238E+06,       0.101065910310074483E+06,       0.101063435753359998E+06,       0.101067804628520898E+06,
+        0.101076221687106154E+06,       0.101087269872699864E+06,       0.101098388777976448E+06,       0.101105436139853176E+06,       0.101112874451142532E+06,
+        0.101118849015061031E+06,       0.101124113984576659E+06,       0.101128454272832299E+06,       0.101131632912711430E+06,       0.101133440671438293E+06,
+        0.101133742258942963E+06,       0.101133420481460824E+06,       0.101203377126110252E+06,       0.101198268613597073E+06,       0.101192518049139719E+06,
+        0.101186803252296639E+06,       0.101181813758537333E+06,       0.101178421999043727E+06,       0.101175553435103371E+06,       0.101173179030172672E+06,
+        0.101171225754259809E+06,       0.101169580857152410E+06,       0.101168097072006873E+06,       0.101166598871645896E+06,       0.101163936200708034E+06,
+        0.101160319529115644E+06,       0.101156350070871646E+06,       0.101152298957045554E+06,       0.101148469397518347E+06,       0.101145174878879858E+06,
+        0.101142716121090431E+06,       0.101141356671128422E+06,       0.101141393983984628E+06,       0.101143318014807519E+06,       0.101147349641468565E+06,
+        0.101153926105170540E+06,       0.101162646354183598E+06,       0.101173404206242340E+06,       0.101185918183552916E+06,       0.101199863730921250E+06,
+        0.101216872253279580E+06,       0.101233295276471807E+06,       0.101248215030952546E+06,       0.101260757021715341E+06,       0.101267495548934719E+06,
+        0.101269706371902867E+06,       0.101268204478453976E+06,       0.101262805085999877E+06,       0.101255380826612120E+06,       0.101247430865831397E+06,
+        0.101239780825202557E+06,       0.101233090454269026E+06,       0.101227802760140185E+06,       0.101223571816330572E+06,       0.101219066722623626E+06,
+        0.101214540599785731E+06,       0.101210406057645538E+06,       0.101206592274863258E+06,       0.101202981532469319E+06,       0.101199400726594919E+06,
+        0.101195627874287937E+06,       0.101191227720762778E+06,       0.101187565739316706E+06,       0.101185464827996155E+06,       0.101185511851585936E+06,
+        0.101188073018881041E+06,       0.101193228150490002E+06,       0.101201132185450770E+06,       0.101211253103469411E+06,       0.101221691007216708E+06,
+        0.101232930515629778E+06,       0.101244622455395234E+06,       0.101256099137093290E+06,       0.101264336488988658E+06,       0.101270613718010951E+06,
+        0.101275186944850837E+06,       0.101277911712320536E+06,       0.101275720871891084E+06,       0.101272701050287156E+06,       0.101269530015498065E+06,
+        0.101266916775846155E+06,       0.101265667085305176E+06,       0.101266412423480491E+06,       0.101269963618393420E+06,       0.101276824074798991E+06,
+        0.101286538984123661E+06,       0.101297754584716895E+06,       0.101309268788473608E+06,       0.101319049570761636E+06,       0.101326688370924327E+06,
+        0.101331858743319128E+06,       0.101334118663267698E+06,       0.101332850026087355E+06,       0.101327763563889297E+06,       0.101320054486635490E+06,
+        0.101310581963123463E+06,       0.101301464042469088E+06,       0.101296071475081029E+06,       0.101292351628835357E+06,       0.101290169534329834E+06,
+        0.101288302766939916E+06,       0.101284014152439850E+06,       0.101279941996829206E+06,       0.101276061598442378E+06,       0.101271538120976256E+06,
+        0.101266097326113042E+06,       0.101261239127189925E+06,       0.101257245251898741E+06,       0.101253483641709958E+06,       0.101251125639619684E+06,
+        0.101251189762292764E+06,       0.101253695416316186E+06,       0.101260342754598576E+06,       0.101269818597965233E+06,       0.101281786685942599E+06,
+        0.101297267888598697E+06,       0.101315752383087500E+06,       0.101333588295053938E+06,       0.101349152940472399E+06,       0.101363783604825469E+06,
+        0.101372978867465237E+06,       0.101373889912201208E+06,       0.101361962340075130E+06,       0.101329656482126462E+06,       0.101288577681367635E+06,
+        0.101241353955692000E+06,       0.101187015186283301E+06,       0.101128342669573714E+06,       0.101074249019373397E+06,       0.101029162958810339E+06,
+        0.101000523612843142E+06,       0.100987089359594960E+06,       0.100984958621042068E+06,       0.100992130612266148E+06,       0.101008448898443559E+06,
+        0.101030521667859153E+06,       0.101051007866767963E+06,       0.101071664234935859E+06,       0.101090175915114785E+06,       0.101106549855269026E+06,
+        0.101125443846952985E+06,       0.101148128478478480E+06,       0.101176649869573142E+06,       0.101219367480301720E+06,       0.101264169410245595E+06,
+        0.101307902998138612E+06,       0.101345704641115881E+06,       0.101377820901637606E+06,       0.101403851472658702E+06,       0.101419708524997433E+06,
+        0.101423957150136412E+06,       0.101416125366734399E+06,       0.101392821386149662E+06,       0.101354118286926780E+06,       0.101311952791900418E+06,
+        0.101267586958551430E+06,       0.101222923148393995E+06,       0.101179984606825063E+06,       0.101137775123404324E+06,       0.101100052058991307E+06,
+        0.101068211877007227E+06,       0.101043182495123227E+06,       0.101025887119877370E+06,       0.101017441028948917E+06,       0.101018646999727091E+06,
+        0.101025249625575729E+06,       0.101036067916060245E+06,       0.101049702828005305E+06,       0.101064676552964025E+06,       0.101079565938465035E+06,
+        0.101088532594576784E+06,       0.101096312478571519E+06,       0.101102983223382442E+06,       0.101108374984337381E+06,       0.101112280329396730E+06,
+        0.101114507038743657E+06,       0.101114428830065517E+06,       0.101111055246130432E+06,       0.101196406538596522E+06,       0.101190461736979341E+06,
+        0.101184419171533169E+06,       0.101178438759959274E+06,       0.101172694307587532E+06,       0.101168042459568693E+06,       0.101165224780188713E+06,
+        0.101163116738625147E+06,       0.101161640044718297E+06,       0.101160673934197897E+06,       0.101160060130737882E+06,       0.101160308872814785E+06,
+        0.101161160328086728E+06,       0.101159852318196237E+06,       0.101156811572228151E+06,       0.101153532829243355E+06,       0.101150328623015521E+06,
+        0.101147521674777250E+06,       0.101145421670737880E+06,       0.101144300600728122E+06,       0.101144366524547018E+06,       0.101146453358106490E+06,
+        0.101151154760197140E+06,       0.101157852536650826E+06,       0.101166593375939396E+06,       0.101177254193880435E+06,       0.101189538295227583E+06,
+        0.101202976381101937E+06,       0.101217143841964367E+06,       0.101233326011591271E+06,       0.101248211830283530E+06,       0.101258376645531374E+06,
+        0.101264582921753405E+06,       0.101267070734474910E+06,       0.101266001194085227E+06,       0.101261820132445268E+06,       0.101255225790946322E+06,
+        0.101247986960119670E+06,       0.101241132826118715E+06,       0.101235589817356347E+06,       0.101231742691396459E+06,       0.101228190519347510E+06,
+        0.101224868811623688E+06,       0.101221346956982394E+06,       0.101217966212733285E+06,       0.101214970532675288E+06,       0.101212299627427041E+06,
+        0.101209926653408853E+06,       0.101209182347595939E+06,       0.101208894928154026E+06,       0.101206557077161851E+06,       0.101205653829090777E+06,
+        0.101206766501731909E+06,       0.101210234953384323E+06,       0.101216093544594405E+06,       0.101223864474518923E+06,       0.101233270650245788E+06,
+        0.101243919236364745E+06,       0.101255411905531102E+06,       0.101267215651558581E+06,       0.101278589053053409E+06,       0.101288326667672663E+06,
+        0.101293977254483369E+06,       0.101295988963460462E+06,       0.101293942850610052E+06,       0.101290379977981182E+06,       0.101286211796570817E+06,
+        0.101282157951643720E+06,       0.101279101833166642E+06,       0.101277814046354848E+06,       0.101278807487432292E+06,       0.101282938226413549E+06,
+        0.101291273361035273E+06,       0.101301583582921769E+06,       0.101312849202165788E+06,       0.101324002651453309E+06,       0.101333489244781522E+06,
+        0.101339488921891199E+06,       0.101342369325021820E+06,       0.101341720289730991E+06,       0.101337127319298394E+06,       0.101327791615567519E+06,
+        0.101315437423608601E+06,       0.101301282640627105E+06,       0.101286811802460725E+06,       0.101276747879297676E+06,       0.101269331760055575E+06,
+        0.101263643990522745E+06,       0.101258989523824217E+06,       0.101251456119543334E+06,       0.101244182196566340E+06,       0.101237348106484831E+06,
+        0.101228692607444944E+06,       0.101218585751885927E+06,       0.101210928314959441E+06,       0.101206232353375613E+06,       0.101203871455940549E+06,
+        0.101203999533384937E+06,       0.101207475042430247E+06,       0.101214320092416674E+06,       0.101224147807091678E+06,       0.101236699974733609E+06,
+        0.101251676274940794E+06,       0.101270825632959895E+06,       0.101293545270099348E+06,       0.101314419599624249E+06,       0.101330994497954525E+06,
+        0.101343242305169362E+06,       0.101347429834497641E+06,       0.101341255518135789E+06,       0.101319524205864262E+06,       0.101278200143226626E+06,
+        0.101228562906559484E+06,       0.101174212317573372E+06,       0.101112623030610339E+06,       0.101048222350508891E+06,       0.100990099190183420E+06,
+        0.100943211786408705E+06,       0.100918044317067266E+06,       0.100907611661432689E+06,       0.100910107183064712E+06,       0.100923917070401818E+06,
+        0.100948850301936414E+06,       0.100978281786140433E+06,       0.101008728042257979E+06,       0.101037658211344344E+06,       0.101057364399701371E+06,
+        0.101074391235513976E+06,       0.101093594285308805E+06,       0.101116488413099345E+06,       0.101150558690399863E+06,       0.101193914933389984E+06,
+        0.101239758121016799E+06,       0.101285323747319708E+06,       0.101327925492475028E+06,       0.101365565138565944E+06,       0.101392573640838629E+06,
+        0.101408539383438299E+06,       0.101411604282492801E+06,       0.101400582930128410E+06,       0.101366946069406418E+06,       0.101324287192622069E+06,
+        0.101276101666633986E+06,       0.101226619258282910E+06,       0.101178585432356136E+06,       0.101130984262627506E+06,       0.101086307783769356E+06,
+        0.101046851053375387E+06,       0.101014063196888950E+06,       0.100988908271188513E+06,       0.100971785835137707E+06,       0.100968245753203373E+06,
+        0.100971380696101813E+06,       0.100980060807918417E+06,       0.100993169646215858E+06,       0.101009312468744305E+06,       0.101026966655764860E+06,
+        0.101044366184895640E+06,       0.101060339563627815E+06,       0.101071158866529076E+06,       0.101079488812984200E+06,       0.101086153913575283E+06,
+        0.101090971172654899E+06,       0.101093525999388585E+06,       0.101092846852564820E+06,       0.101089780957355411E+06,       0.101191123249149765E+06,
+        0.101184975896710632E+06,       0.101178781171733193E+06,       0.101172687284701038E+06,       0.101166856628363908E+06,       0.101161463025241668E+06,
+        0.101157556719236236E+06,       0.101155715658911155E+06,       0.101154729896713383E+06,       0.101154469238441612E+06,       0.101155775624535832E+06,
+        0.101158121462038107E+06,       0.101160042093184384E+06,       0.101161344855236384E+06,       0.101160448275110015E+06,       0.101158071590188309E+06,
+        0.101155631532086059E+06,       0.101153465356088433E+06,       0.101151897289994900E+06,       0.101151213659422618E+06,       0.101151737576582789E+06,
+        0.101154199170773107E+06,       0.101158985005759008E+06,       0.101165841396522868E+06,       0.101174673234837159E+06,       0.101185340894024586E+06,
+        0.101197532040988634E+06,       0.101210762902995120E+06,       0.101224385238204501E+06,       0.101237894404589199E+06,       0.101250772227856185E+06,
+        0.101260411029266310E+06,       0.101266591706174368E+06,       0.101269204187456722E+06,       0.101268397182717250E+06,       0.101264588122030676E+06,
+        0.101258438511883942E+06,       0.101251623403392019E+06,       0.101246063118456994E+06,       0.101242417800723517E+06,       0.101239166549985050E+06,
+        0.101236254306650939E+06,       0.101233631773944420E+06,       0.101231248894982156E+06,       0.101228825720597553E+06,       0.101226772928204024E+06,
+        0.101225473798737570E+06,       0.101225516278296083E+06,       0.101226043519455008E+06,       0.101227093486833808E+06,       0.101228289760449348E+06,
+        0.101228546951147655E+06,       0.101230707510254171E+06,       0.101235093253586310E+06,       0.101241126677553519E+06,       0.101248645598633651E+06,
+        0.101258142018320970E+06,       0.101268933306888299E+06,       0.101280513500391826E+06,       0.101292262732881034E+06,       0.101303355465601169E+06,
+        0.101312817264586003E+06,       0.101316400177874268E+06,       0.101315483458758521E+06,       0.101312277984593762E+06,       0.101307698621808959E+06,
+        0.101302673951913355E+06,       0.101298053010945936E+06,       0.101294840530663249E+06,       0.101294065839099727E+06,       0.101296783533959431E+06,
+        0.101302065639223511E+06,       0.101310033568624291E+06,       0.101320378178744606E+06,       0.101331366932783130E+06,       0.101341800425977897E+06,
+        0.101350415611308272E+06,       0.101354800042096002E+06,       0.101354718500839095E+06,       0.101350294315183972E+06,       0.101341487001001398E+06,
+        0.101327926160731338E+06,       0.101310260858651716E+06,       0.101290273767883307E+06,       0.101269495556410489E+06,       0.101251846238950835E+06,
+        0.101238682635122401E+06,       0.101227174341821534E+06,       0.101213482647208613E+06,       0.101195603009729079E+06,       0.101177872156641286E+06,
+        0.101162325618075352E+06,       0.101149982165601716E+06,       0.101139852149278217E+06,       0.101134024565056650E+06,       0.101132753824598782E+06,
+        0.101135032680571021E+06,       0.101140084766430024E+06,       0.101148877574289698E+06,       0.101161005262514984E+06,       0.101174747769146576E+06,
+        0.101190713232751208E+06,       0.101208811802622309E+06,       0.101231640660711972E+06,       0.101258571723189729E+06,       0.101282336017681446E+06,
+        0.101299629439163051E+06,       0.101308040998087759E+06,       0.101305555171365690E+06,       0.101290435343250807E+06,       0.101256519799893256E+06,
+        0.101204322883293091E+06,       0.101144321216045384E+06,       0.101080811870748948E+06,       0.101014238668434729E+06,       0.100950513534181708E+06,
+        0.100894391363170798E+06,       0.100851829575523923E+06,       0.100832142921501421E+06,       0.100825615789308096E+06,       0.100832955840479583E+06,
+        0.100854821405899405E+06,       0.100888239967709887E+06,       0.100925422763286362E+06,       0.100962602314510819E+06,       0.100994687767612981E+06,
+        0.101018445383155631E+06,       0.101039638130810010E+06,       0.101060824122542370E+06,       0.101084945514884181E+06,       0.101122354145820311E+06,
+        0.101165147778325379E+06,       0.101210847657910417E+06,       0.101256682236652778E+06,       0.101301382158490291E+06,       0.101341411155713809E+06,
+        0.101372219111328362E+06,       0.101389231784620119E+06,       0.101390880863434664E+06,       0.101369226261351185E+06,       0.101331834231281726E+06,
+        0.101285779545129859E+06,       0.101234345503529141E+06,       0.101180743690781746E+06,       0.101127223607977256E+06,       0.101076620915575957E+06,
+        0.101030138146362922E+06,       0.100989582250385356E+06,       0.100956503181212684E+06,       0.100931937764084651E+06,       0.100920299784557195E+06,
+        0.100918057371207338E+06,       0.100922770743209869E+06,       0.100933261994784887E+06,       0.100948483778151451E+06,       0.100967026543898348E+06,
+        0.100987282070977919E+06,       0.101007276882737569E+06,       0.101025807002176851E+06,       0.101042092544874176E+06,       0.101053732614110791E+06,
+        0.101061889868345606E+06,       0.101067702910314212E+06,       0.101070224192290465E+06,       0.101070263142884942E+06,       0.101067836061994312E+06,
+        0.101188101877120876E+06,       0.101181904204517952E+06,       0.101175721080675750E+06,       0.101169689701016847E+06,       0.101163962332899173E+06,
+        0.101158703372389791E+06,       0.101154083105507743E+06,       0.101151357736191479E+06,       0.101150899044327409E+06,       0.101152824487497259E+06,
+        0.101156224838871945E+06,       0.101159507416219887E+06,       0.101162417168140935E+06,       0.101164756494849746E+06,       0.101166400553546104E+06,
+        0.101165982684454619E+06,       0.101164433293333408E+06,       0.101163049411835455E+06,       0.101162175585306977E+06,       0.101162128095756125E+06,
+        0.101163361425100273E+06,       0.101166227742201969E+06,       0.101170937924715152E+06,       0.101177913034471421E+06,       0.101186917319165936E+06,
+        0.101197704545258457E+06,       0.101209946031686050E+06,       0.101223141837685776E+06,       0.101236628019135329E+06,       0.101248564959035430E+06,
+        0.101259061289307880E+06,       0.101268404236147617E+06,       0.101274449875235630E+06,       0.101277082514349167E+06,       0.101276437786749404E+06,
+        0.101272910152209646E+06,       0.101267124457491314E+06,       0.101260716984134080E+06,       0.101256743164844607E+06,       0.101253604663335806E+06,
+        0.101250897345323741E+06,       0.101248591593381454E+06,       0.101246654559015689E+06,       0.101245041613427515E+06,       0.101243680788220503E+06,
+        0.101243097273199470E+06,       0.101243781512439353E+06,       0.101244948599458978E+06,       0.101246597302939059E+06,       0.101248747416430124E+06,
+        0.101251423906546814E+06,       0.101254153427662954E+06,       0.101257318705204321E+06,       0.101261887373189515E+06,       0.101267979989058746E+06,
+        0.101275948774720324E+06,       0.101285713213097159E+06,       0.101296774828760288E+06,       0.101308302668075557E+06,       0.101319850467473152E+06,
+        0.101329837083710619E+06,       0.101335921303205963E+06,       0.101339123113933456E+06,       0.101337898637374194E+06,       0.101333773323031986E+06,
+        0.101328456667992868E+06,       0.101322897112772887E+06,       0.101317900606162963E+06,       0.101315889108461066E+06,       0.101316599306327043E+06,
+        0.101319758730558635E+06,       0.101325424301052059E+06,       0.101333284991047447E+06,       0.101343211873693581E+06,       0.101353644944564134E+06,
+        0.101363021317380320E+06,       0.101370049287251401E+06,       0.101372596455484265E+06,       0.101369268865042672E+06,       0.101360883616870342E+06,
+        0.101347449435595729E+06,       0.101329133164082014E+06,       0.101305327141900649E+06,       0.101278380398203022E+06,       0.101249743471045615E+06,
+        0.101219239546209603E+06,       0.101192352888002861E+06,       0.101165652475197479E+06,       0.101139697586887822E+06,       0.101114494511137265E+06,
+        0.101090858686180072E+06,       0.101071576294283674E+06,       0.101057575297732197E+06,       0.101048074783742806E+06,       0.101044336258060692E+06,
+        0.101046551193469917E+06,       0.101053556962642004E+06,       0.101063713831673056E+06,       0.101077829626709223E+06,       0.101095071852015652E+06,
+        0.101113125151151267E+06,       0.101132720710483336E+06,       0.101154045391176667E+06,       0.101180390285880436E+06,       0.101211142948122884E+06,
+        0.101237614514436951E+06,       0.101255726302408526E+06,       0.101259492448119025E+06,       0.101250509056824711E+06,       0.101227395084634161E+06,
+        0.101182035261948520E+06,       0.101119630114631931E+06,       0.101050635848782738E+06,       0.100979922793482459E+06,       0.100910697623495973E+06,
+        0.100847357213499476E+06,       0.100794166368117731E+06,       0.100758894445481623E+06,       0.100744322296544080E+06,       0.100745120848886974E+06,
+        0.100759352059448109E+06,       0.100791294801023934E+06,       0.100833112039419531E+06,       0.100877562571698305E+06,       0.100920779246866339E+06,
+        0.100955025798225848E+06,       0.100982525754081420E+06,       0.101006044587505748E+06,       0.101028143007870822E+06,       0.101055611280174300E+06,
+        0.101091320427340703E+06,       0.101132355621430252E+06,       0.101176767088174020E+06,       0.101222102616479577E+06,       0.101267504098879013E+06,
+        0.101307233300950669E+06,       0.101337730007502250E+06,       0.101356132691262712E+06,       0.101355517504656993E+06,       0.101326703347885734E+06,
+        0.101286746249401243E+06,       0.101238373176205030E+06,       0.101184685036191077E+06,       0.101128907484998796E+06,       0.101073391747240559E+06,
+        0.101019454525129811E+06,       0.100970871910515343E+06,       0.100929826661987419E+06,       0.100897105571455861E+06,       0.100876831879007659E+06,
+        0.100867962906273533E+06,       0.100867330421829305E+06,       0.100873728684090966E+06,       0.100885749735442761E+06,       0.100902849954122852E+06,
+        0.100924138951177738E+06,       0.100946961851234868E+06,       0.100969279025770302E+06,       0.100990033557581031E+06,       0.101008477654044342E+06,
+        0.101024214908302165E+06,       0.101035732998499894E+06,       0.101041912961714450E+06,       0.101045642366251923E+06,       0.101046792406885972E+06,
+        0.101045365333532347E+06,       0.101187355100872199E+06,       0.101181283838042174E+06,       0.101175299671037268E+06,       0.101169529662610788E+06,
+        0.101164117431673949E+06,       0.101159220075809775E+06,       0.101155001817589582E+06,       0.101151624022777440E+06,       0.101152497595067340E+06,
+        0.101156451659840226E+06,       0.101160648061411019E+06,       0.101164790528929152E+06,       0.101168618147906396E+06,       0.101171926049179310E+06,
+        0.101174580360364256E+06,       0.101176526712674633E+06,       0.101176736224529814E+06,       0.101176257363116325E+06,       0.101176166983752380E+06,
+        0.101176807287626842E+06,       0.101178681128324213E+06,       0.101182078251181316E+06,       0.101187204570596310E+06,       0.101194163269585537E+06,
+        0.101203334524264646E+06,       0.101214364937736551E+06,       0.101226809413448165E+06,       0.101240149829298927E+06,       0.101253261358725853E+06,
+        0.101265100089497806E+06,       0.101275120974395875E+06,       0.101282996940042518E+06,       0.101288828111014154E+06,       0.101291420149586207E+06,
+        0.101290897222999163E+06,       0.101287639377078289E+06,       0.101283002528089506E+06,       0.101278193857728707E+06,       0.101273020512430914E+06,
+        0.101269901051284018E+06,       0.101267678623295869E+06,       0.101265950449211479E+06,       0.101264703039611326E+06,       0.101263900879826906E+06,
+        0.101263923607509249E+06,       0.101265004562038375E+06,       0.101266684912193334E+06,       0.101268855296950496E+06,       0.101271506964180182E+06,
+        0.101274640173084292E+06,       0.101278241537383161E+06,       0.101282245825992912E+06,       0.101286353240369135E+06,       0.101291355828485597E+06,
+        0.101297931619035255E+06,       0.101306253371424813E+06,       0.101316214078965480E+06,       0.101327380285913983E+06,       0.101338920669929619E+06,
+        0.101349293450103680E+06,       0.101357122930671496E+06,       0.101362252520088790E+06,       0.101364464771970830E+06,       0.101363785192026829E+06,
+        0.101359089181177871E+06,       0.101353368594169064E+06,       0.101348059285105599E+06,       0.101344504609358351E+06,       0.101342802273270747E+06,
+        0.101343694674300015E+06,       0.101347186594235303E+06,       0.101353156284255645E+06,       0.101361135003142495E+06,       0.101370388484892959E+06,
+        0.101380640458787442E+06,       0.101388946718752617E+06,       0.101393651801589484E+06,       0.101393499019751704E+06,       0.101386884558896083E+06,
+        0.101374143979384535E+06,       0.101355609362859250E+06,       0.101331626780358332E+06,       0.101301083582183201E+06,       0.101263353354839783E+06,
+        0.101221306897352624E+06,       0.101176993466944725E+06,       0.101136539903244993E+06,       0.101098204242251013E+06,       0.101061761330862719E+06,
+        0.101028266665796909E+06,       0.100998589290583972E+06,       0.100975333400938267E+06,       0.100959068131358043E+06,       0.100949766177223195E+06,
+        0.100947806353674678E+06,       0.100952626346498961E+06,       0.100962758032929953E+06,       0.100976213788639361E+06,       0.100993663080123253E+06,
+        0.101014486892675981E+06,       0.101035822837299012E+06,       0.101058579399157214E+06,       0.101083303211150094E+06,       0.101113186489526008E+06,
+        0.101147351565124962E+06,       0.101176652682216401E+06,       0.101196193972918787E+06,       0.101198569776344622E+06,       0.101186160134931008E+06,
+        0.101157868126258880E+06,       0.101103141394806822E+06,       0.101031831614193070E+06,       0.100956733996206865E+06,       0.100882403087983286E+06,
+        0.100813473138545116E+06,       0.100752516407046714E+06,       0.100703757785565627E+06,       0.100676218536944187E+06,       0.100667431274046598E+06,
+        0.100674873519601999E+06,       0.100697658618489222E+06,       0.100739841159568794E+06,       0.100789068474863947E+06,       0.100839720710070338E+06,
+        0.100886379550526690E+06,       0.100923029883014446E+06,       0.100953143284320337E+06,       0.100977639241319004E+06,       0.100999128395021136E+06,
+        0.101024581691416737E+06,       0.101055845921262473E+06,       0.101093715024692676E+06,       0.101137145750038864E+06,       0.101181709309337297E+06,
+        0.101225325474523444E+06,       0.101263559713032722E+06,       0.101292474677031365E+06,       0.101308682549641118E+06,       0.101297475120822361E+06,
+        0.101271409211849808E+06,       0.101232040601299872E+06,       0.101182869285470704E+06,       0.101128290980360704E+06,       0.101072929755581790E+06,
+        0.101016889073163620E+06,       0.100962491541966170E+06,       0.100912327910715336E+06,       0.100869361400221751E+06,       0.100839775977090918E+06,
+        0.100823441492130820E+06,       0.100816113342184137E+06,       0.100817094874734074E+06,       0.100825233759279654E+06,       0.100839074432490510E+06,
+        0.100858082771811969E+06,       0.100882174552001874E+06,       0.100906977487573211E+06,       0.100931151837540980E+06,       0.100953671595204651E+06,
+        0.100973813441941427E+06,       0.100991208365737388E+06,       0.101004593996319396E+06,       0.101014464426847393E+06,       0.101019840305871679E+06,
+        0.101022516216040211E+06,       0.101022479820383916E+06,       0.101189306237606637E+06,       0.101183099563423224E+06,       0.101177524645541649E+06,
+        0.101172236435105573E+06,       0.101167371532973528E+06,       0.101163082020276575E+06,       0.101159529060147339E+06,       0.101159316447558173E+06,
+        0.101160894564677219E+06,       0.101164348300187223E+06,       0.101169261422140553E+06,       0.101174195290734366E+06,       0.101178879818970003E+06,
+        0.101183100812083387E+06,       0.101186714675334646E+06,       0.101189656703835382E+06,       0.101191942124414170E+06,       0.101192917377320977E+06,
+        0.101193593575982464E+06,       0.101195069630171711E+06,       0.101197693383898673E+06,       0.101201751769885639E+06,       0.101207449602623747E+06,
+        0.101214890679059696E+06,       0.101224061589853489E+06,       0.101235336912347877E+06,       0.101248190104239126E+06,       0.101262427935202722E+06,
+        0.101275786221996692E+06,       0.101287697523967043E+06,       0.101297635973110140E+06,       0.101305160473319178E+06,       0.101310051693956630E+06,
+        0.101312576731523863E+06,       0.101312178530984005E+06,       0.101309704462442271E+06,       0.101306154021924303E+06,       0.101301740366064056E+06,
+        0.101296951709652378E+06,       0.101292269396465854E+06,       0.101290108113855764E+06,       0.101288928548419208E+06,       0.101288387917089291E+06,
+        0.101288777866387623E+06,       0.101290116771842790E+06,       0.101292139767421628E+06,       0.101294723268304471E+06,       0.101297795211849851E+06,
+        0.101301366709605994E+06,       0.101305420330384557E+06,       0.101309869927812077E+06,       0.101314312823006214E+06,       0.101319116997910372E+06,
+        0.101324617109151222E+06,       0.101331532615370001E+06,       0.101340103637168490E+06,       0.101350201834497682E+06,       0.101361344371531173E+06,
+        0.101372418886796950E+06,       0.101381948875157381E+06,       0.101388923839096911E+06,       0.101393136106285616E+06,       0.101394429864949576E+06,
+        0.101392894622174237E+06,       0.101388710803148075E+06,       0.101383777236252092E+06,       0.101379295952832908E+06,       0.101375940276367168E+06,
+        0.101374441230547527E+06,       0.101375326622697306E+06,       0.101379093018278771E+06,       0.101385343361571824E+06,       0.101393971058482173E+06,
+        0.101404050563811383E+06,       0.101413309721598285E+06,       0.101419590399406094E+06,       0.101421556394179410E+06,       0.101418021431235960E+06,
+        0.101407974515161055E+06,       0.101390537479077990E+06,       0.101366032709315157E+06,       0.101334626683717870E+06,       0.101295933958054040E+06,
+        0.101248443893183838E+06,       0.101195557967522065E+06,       0.101139585544601810E+06,       0.101085211343045346E+06,       0.101035266930195139E+06,
+        0.100988241812145512E+06,       0.100945367896748721E+06,       0.100910497202633036E+06,       0.100884702886764164E+06,       0.100866517649476897E+06,
+        0.100856014684083144E+06,       0.100852787000617667E+06,       0.100856653557479323E+06,       0.100867163372326730E+06,       0.100881111266454434E+06,
+        0.100900315195405696E+06,       0.100923976750114074E+06,       0.100948598119614544E+06,       0.100974781704195004E+06,       0.101003202157587060E+06,
+        0.101036407590628412E+06,       0.101073193182310031E+06,       0.101104736474453239E+06,       0.101125695287679831E+06,       0.101129453279073452E+06,
+        0.101117773581594010E+06,       0.101089185532541305E+06,       0.101034032199054171E+06,       0.100963945545633382E+06,       0.100886699328991119E+06,
+        0.100810636627241329E+06,       0.100740715610179395E+06,       0.100679191246166200E+06,       0.100632989251138570E+06,       0.100613781871159343E+06,
+        0.100610871530594683E+06,       0.100624379990977119E+06,       0.100656925116010229E+06,       0.100705935141557828E+06,       0.100761070879974053E+06,
+        0.100816622699684551E+06,       0.100864793595773081E+06,       0.100902967646118850E+06,       0.100932714749620762E+06,       0.100956310150092322E+06,
+        0.100973624358999965E+06,       0.100992241483773090E+06,       0.101016637765204548E+06,       0.101048154107647293E+06,       0.101087466334016062E+06,
+        0.101132339254048915E+06,       0.101174823812832328E+06,       0.101210761915469266E+06,       0.101237271423401384E+06,       0.101243002885737078E+06,
+        0.101230131791106003E+06,       0.101203940299668466E+06,       0.101166656487591579E+06,       0.101121119041289232E+06,       0.101069073832594047E+06,
+        0.101014700223724387E+06,       0.100959265268248433E+06,       0.100905468112225586E+06,       0.100856040902612105E+06,       0.100814460428244129E+06,
+        0.100787259237540056E+06,       0.100772005863003345E+06,       0.100765985352267919E+06,       0.100768479113289053E+06,       0.100778366997407138E+06,
+        0.100794945598743492E+06,       0.100817620478677374E+06,       0.100842147859125718E+06,       0.100867955315801722E+06,       0.100893394586128459E+06,
+        0.100917107047287223E+06,       0.100938380004807230E+06,       0.100955347801049342E+06,       0.100970101009214006E+06,       0.100982904354844184E+06,
+        0.100992784717252944E+06,       0.100997426697573173E+06,       0.100999203666720758E+06,       0.101193726602745155E+06,       0.101187754050723946E+06,
+        0.101182357442443288E+06,       0.101177791388126643E+06,       0.101173723996436573E+06,       0.101170304719806183E+06,       0.101170612153776412E+06,
+        0.101172440371721386E+06,       0.101174837075875621E+06,       0.101177672254314428E+06,       0.101182161160034389E+06,       0.101187828651191783E+06,
+        0.101193320301503438E+06,       0.101198410730358519E+06,       0.101202946144533795E+06,       0.101206852558810875E+06,       0.101210007801575470E+06,
+        0.101212489910168282E+06,       0.101214469378389869E+06,       0.101216878002924321E+06,       0.101220363461237575E+06,       0.101225214136769951E+06,
+        0.101231637580600829E+06,       0.101239741560505950E+06,       0.101249517808410572E+06,       0.101260983023677167E+06,       0.101275957870551239E+06,
+        0.101290656294668952E+06,       0.101304333702323362E+06,       0.101316427532517599E+06,       0.101326426428850100E+06,       0.101333915035895625E+06,
+        0.101338611708287717E+06,       0.101340492859798338E+06,       0.101340362563395611E+06,       0.101338449476013702E+06,       0.101335257523435517E+06,
+        0.101331249861504504E+06,       0.101326886093198918E+06,       0.101322617484757109E+06,       0.101318867500197564E+06,       0.101317900452591755E+06,
+        0.101318314786954928E+06,       0.101319723768116164E+06,       0.101321959881412520E+06,       0.101324889048512938E+06,       0.101328347647524672E+06,
+        0.101332174840765205E+06,       0.101336616060312401E+06,       0.101341556829236884E+06,       0.101346573413864826E+06,       0.101351603295543347E+06,
+        0.101356815104860521E+06,       0.101362438373961399E+06,       0.101369371088361426E+06,       0.101378082295762331E+06,       0.101388314410706720E+06,
+        0.101399372327800622E+06,       0.101410061836120745E+06,       0.101419580351030396E+06,       0.101425913537260407E+06,       0.101429293259021812E+06,
+        0.101429804412116951E+06,       0.101427672924137820E+06,       0.101424080437455879E+06,       0.101419619212416699E+06,       0.101415230974183942E+06,
+        0.101412067965185430E+06,       0.101410791086110883E+06,       0.101411739073867124E+06,       0.101415639705951602E+06,       0.101423312622668134E+06,
+        0.101432474045874798E+06,       0.101442051195699867E+06,       0.101450469188552204E+06,       0.101454491373749755E+06,       0.101453440137517347E+06,
+        0.101446281387837167E+06,       0.101431595048405667E+06,       0.101408886711617088E+06,       0.101378784184722594E+06,       0.101341184770978914E+06,
+        0.101295889547724786E+06,       0.101240328400627433E+06,       0.101177652284460986E+06,       0.101111150684114546E+06,       0.101044053118300144E+06,
+        0.100984918740243505E+06,       0.100930374090685815E+06,       0.100881582472409573E+06,       0.100841112633375247E+06,       0.100809768362702191E+06,
+        0.100786799243457121E+06,       0.100772143085301912E+06,       0.100764968278141983E+06,       0.100765770745809103E+06,       0.100774102380776618E+06,
+        0.100787701814049200E+06,       0.100807502103195773E+06,       0.100832717694658859E+06,       0.100860249536352872E+06,       0.100889852423407749E+06,
+        0.100921848628126099E+06,       0.100957861355781963E+06,       0.100996433916241411E+06,       0.101029829562515966E+06,       0.101052485930506547E+06,
+        0.101058372937639273E+06,       0.101049548410078569E+06,       0.101024243456762211E+06,       0.100972590760278690E+06,       0.100908281417167527E+06,
+        0.100837060983074800E+06,       0.100768161325613342E+06,       0.100704714640766149E+06,       0.100649980401007386E+06,       0.100610226186345069E+06,
+        0.100590748020045430E+06,       0.100587436259410169E+06,       0.100600313080586799E+06,       0.100641206195168561E+06,       0.100694783185600594E+06,
+        0.100753395339411843E+06,       0.100811221255729251E+06,       0.100860359364136690E+06,       0.100899824043495319E+06,       0.100928315410134717E+06,
+        0.100945425133485944E+06,       0.100949685705930868E+06,       0.100959203677864440E+06,       0.100974757114044391E+06,       0.100998131833821230E+06,
+        0.101033920715517670E+06,       0.101074219109624129E+06,       0.101114091820176982E+06,       0.101149405994865883E+06,       0.101170348641579942E+06,
+        0.101169807298637141E+06,       0.101156298476682292E+06,       0.101130628971099330E+06,       0.101094643437300154E+06,       0.101052492078486888E+06,
+        0.101007253119503090E+06,       0.100955907017813224E+06,       0.100902084595712833E+06,       0.100849827379669470E+06,       0.100802083544595851E+06,
+        0.100765913220995702E+06,       0.100739572869835451E+06,       0.100723779479156976E+06,       0.100718506421119528E+06,       0.100722320980193326E+06,
+        0.100734436110120514E+06,       0.100755329206052033E+06,       0.100779519272158068E+06,       0.100805173540144926E+06,       0.100830784490592530E+06,
+        0.100856189170746162E+06,       0.100880432886013805E+06,       0.100899949784039432E+06,       0.100917438620547167E+06,       0.100933522862752710E+06,
+        0.100948109352301544E+06,       0.100961044329522949E+06,       0.100971373211325132E+06,       0.100975423948777170E+06,       0.101200152192834488E+06,
+        0.101194982325493736E+06,       0.101190103263664205E+06,       0.101186138559247396E+06,       0.101183134221834189E+06,       0.101184216681154692E+06,
+        0.101186521041798725E+06,       0.101189436060083317E+06,       0.101192802546943451E+06,       0.101196478796712297E+06,       0.101200354354545649E+06,
+        0.101205668611732151E+06,       0.101211929159398627E+06,       0.101217855930562437E+06,       0.101223284560094209E+06,       0.101227968215825720E+06,
+        0.101231889676374194E+06,       0.101235394681567603E+06,       0.101238691342655846E+06,       0.101242180145337508E+06,       0.101246637252434826E+06,
+        0.101252408136256170E+06,       0.101259706939182157E+06,       0.101268648761024378E+06,       0.101279505402642011E+06,       0.101294343975882977E+06,
+        0.101309563533686218E+06,       0.101324641711895500E+06,       0.101338688391072021E+06,       0.101351044389960793E+06,       0.101361207159967045E+06,
+        0.101368783445243811E+06,       0.101373529077171552E+06,       0.101374957490127519E+06,       0.101374464042535998E+06,       0.101372814207710297E+06,
+        0.101369991240096075E+06,       0.101366429702577938E+06,       0.101362562430391059E+06,       0.101358815668015828E+06,       0.101355589086463762E+06,
+        0.101353446673457220E+06,       0.101354379072032898E+06,       0.101356568662050558E+06,       0.101359675232751892E+06,       0.101363521918530183E+06,
+        0.101367901119934351E+06,       0.101372596354978567E+06,       0.101377679630817802E+06,       0.101383555064504282E+06,       0.101389214201889146E+06,
+        0.101394747283543154E+06,       0.101400304955646759E+06,       0.101406085277459220E+06,       0.101412285840230092E+06,       0.101421118963008921E+06,
+        0.101431763041225102E+06,       0.101442507714153820E+06,       0.101452705296310087E+06,       0.101461587946274274E+06,       0.101468308697248838E+06,
+        0.101470980618346424E+06,       0.101470729759961876E+06,       0.101468260238464049E+06,       0.101464485269084631E+06,       0.101460142280246233E+06,
+        0.101455922507406227E+06,       0.101452998879112638E+06,       0.101452045655453316E+06,       0.101454002525278673E+06,       0.101458795222069632E+06,
+        0.101466167386261062E+06,       0.101474834484365027E+06,       0.101483448321051124E+06,       0.101490293297485317E+06,       0.101492761571887779E+06,
+        0.101487122913431667E+06,       0.101474656695076628E+06,       0.101456224507296021E+06,       0.101430664509854570E+06,       0.101396241168372988E+06,
+        0.101353344458271313E+06,       0.101301873429881321E+06,       0.101240809982906721E+06,       0.101170237649192510E+06,       0.101096056635001150E+06,
+        0.101022326149495057E+06,       0.100954494264510751E+06,       0.100892663983306251E+06,       0.100837194485465618E+06,       0.100789854158125687E+06,
+        0.100752681688232609E+06,       0.100724050472389747E+06,       0.100703743253736306E+06,       0.100691513151292049E+06,       0.100687489061012806E+06,
+        0.100691112445670500E+06,       0.100703488782601926E+06,       0.100723515984008409E+06,       0.100749686437924174E+06,       0.100779862035053753E+06,
+        0.100812870466228749E+06,       0.100848356219152789E+06,       0.100886618033728999E+06,       0.100925814700154908E+06,       0.100959913340029161E+06,
+        0.100983841408427761E+06,       0.100992708938197888E+06,       0.100988038726636543E+06,       0.100967451749821237E+06,       0.100923773661071609E+06,
+        0.100869154347678006E+06,       0.100808293671752166E+06,       0.100749950128448239E+06,       0.100695742144580625E+06,       0.100650055466795442E+06,
+        0.100620543751264457E+06,       0.100607774629359716E+06,       0.100609856499218455E+06,       0.100627731512123690E+06,       0.100665827330432643E+06,
+        0.100713727303578300E+06,       0.100768972922192886E+06,       0.100825101449405265E+06,       0.100873709631678183E+06,       0.100911910907812446E+06,
+        0.100937425920985901E+06,       0.100943826278808614E+06,       0.100938923612846338E+06,       0.100932772703382885E+06,       0.100933209681834254E+06,
+        0.100949942917228545E+06,       0.100978390439217677E+06,       0.101012218238497939E+06,       0.101047001443362271E+06,       0.101078030320958118E+06,
+        0.101092528178749781E+06,       0.101092763600199483E+06,       0.101079667768304178E+06,       0.101055363093306296E+06,       0.101021923023798488E+06,
+        0.100985043918944197E+06,       0.100942576674115116E+06,       0.100896142310934607E+06,       0.100846740359288175E+06,       0.100796745756417309E+06,
+        0.100754281013923188E+06,       0.100719661969801513E+06,       0.100694202095497239E+06,       0.100678990016565542E+06,       0.100674159552381345E+06,
+        0.100679144362130333E+06,       0.100696517057853678E+06,       0.100718723297862292E+06,       0.100743828966135392E+06,       0.100770038155539907E+06,
+        0.100795879753092362E+06,       0.100820314666932885E+06,       0.100840279171251284E+06,       0.100859249879902098E+06,       0.100877455365052447E+06,
+        0.100894767625869688E+06,       0.100911051050858092E+06,       0.100926113687447752E+06,       0.100939677540915931E+06,       0.100954098051095163E+06,
+        0.101208266074669766E+06,       0.101204147301312958E+06,       0.101200416332034234E+06,       0.101197391022381067E+06,       0.101199181271863577E+06,
+        0.101202094479608772E+06,       0.101205718922681015E+06,       0.101209868079757638E+06,       0.101214363087133126E+06,       0.101219049217859545E+06,
+        0.101223809934456556E+06,       0.101228578149758148E+06,       0.101234563424877633E+06,       0.101241302361129114E+06,       0.101247428820028508E+06,
+        0.101252833705618847E+06,       0.101257741214607289E+06,       0.101262268791874914E+06,       0.101266621965163562E+06,       0.101271104202253337E+06,
+        0.101276449761759577E+06,       0.101283261996570189E+06,       0.101291578552841063E+06,       0.101301921001578070E+06,       0.101316864610287244E+06,
+        0.101332633397110185E+06,       0.101348565409528048E+06,       0.101363970375545556E+06,       0.101378339950166031E+06,       0.101391005184961628E+06,
+        0.101401390238182328E+06,       0.101409118811233842E+06,       0.101412813852507519E+06,       0.101413916622343488E+06,       0.101413648249779086E+06,
+        0.101412262363096830E+06,       0.101409843816287481E+06,       0.101406792118611833E+06,       0.101403515263375913E+06,       0.101400419883465394E+06,
+        0.101397648089374270E+06,       0.101396200071828469E+06,       0.101396462464251483E+06,       0.101399249041504649E+06,       0.101403242459244415E+06,
+        0.101408064521844237E+06,       0.101413460579763079E+06,       0.101419299541355576E+06,       0.101425515902185769E+06,       0.101431872156549493E+06,
+        0.101438092345517420E+06,       0.101444082593329236E+06,       0.101449980221889302E+06,       0.101455962961780679E+06,       0.101462741205452243E+06,
+        0.101470817291088752E+06,       0.101480892587434573E+06,       0.101491089133211004E+06,       0.101500643428374140E+06,       0.101508817670985038E+06,
+        0.101514860224122342E+06,       0.101517434476198061E+06,       0.101516541747761323E+06,       0.101513815068472235E+06,       0.101509904719619197E+06,
+        0.101505507654049128E+06,       0.101501313463842132E+06,       0.101498849002981064E+06,       0.101499159934514231E+06,       0.101501693020130377E+06,
+        0.101506338552975649E+06,       0.101512651659291208E+06,       0.101520288072555239E+06,       0.101527432009874057E+06,       0.101531192551327069E+06,
+        0.101528423709889583E+06,       0.101519435532333911E+06,       0.101504734513441072E+06,       0.101484004484384001E+06,       0.101456280732745858E+06,
+        0.101419035179553714E+06,       0.101371837096264266E+06,       0.101315248944149382E+06,       0.101249891741609565E+06,       0.101174205010685138E+06,
+        0.101095025216710172E+06,       0.101016603839094241E+06,       0.100942714517862012E+06,       0.100875651961458614E+06,       0.100815206600637175E+06,
+        0.100762266129504540E+06,       0.100719792923412402E+06,       0.100688381242510412E+06,       0.100664315202569429E+06,       0.100646899315571907E+06,
+        0.100636389190856382E+06,       0.100633921317728295E+06,       0.100640986745192960E+06,       0.100657927960284273E+06,       0.100683603999329847E+06,
+        0.100715139361547874E+06,       0.100750464071587950E+06,       0.100789001781336541E+06,       0.100828980626378441E+06,       0.100867904881876937E+06,
+        0.100901941917073651E+06,       0.100927518925117751E+06,       0.100941703370720032E+06,       0.100943313763502156E+06,       0.100929483993483183E+06,
+        0.100897899422321643E+06,       0.100855144068640948E+06,       0.100806216832129357E+06,       0.100757963881253396E+06,       0.100713882396988687E+06,
+        0.100678037239657642E+06,       0.100660578064393208E+06,       0.100655660139403961E+06,       0.100663394611081239E+06,       0.100687757803070126E+06,
+        0.100726360544964817E+06,       0.100771737117872792E+06,       0.100819550423355045E+06,       0.100863789606076709E+06,       0.100903960982124961E+06,
+        0.100937933974381580E+06,       0.100955929021348216E+06,       0.100950002084778927E+06,       0.100936336168784517E+06,       0.100920611799506456E+06,
+        0.100908792443247541E+06,       0.100909956087163751E+06,       0.100924519937428529E+06,       0.100950317855032117E+06,       0.100978637481090613E+06,
+        0.101001785171553231E+06,       0.101014600980588948E+06,       0.101015533816949537E+06,       0.101004399554267075E+06,       0.100982402170127083E+06,
+        0.100954472767269413E+06,       0.100920498290662959E+06,       0.100881272186000555E+06,       0.100838252143924561E+06,       0.100793001524282852E+06,
+        0.100749722238879811E+06,       0.100710007831689465E+06,       0.100676561452258436E+06,       0.100651754156739727E+06,       0.100637016515992684E+06,
+        0.100632797680647462E+06,       0.100643122435673547E+06,       0.100662040946369423E+06,       0.100684765371038040E+06,       0.100710073382574032E+06,
+        0.100736158886730540E+06,       0.100761558107963079E+06,       0.100780935166741401E+06,       0.100798370121153508E+06,       0.100816555152162895E+06,
+        0.100835390903751701E+06,       0.100853847765655024E+06,       0.100871757501481305E+06,       0.100888895778612612E+06,       0.100908175229415137E+06,
+        0.100925669047910487E+06,       0.101217702072300162E+06,       0.101214879429494846E+06,       0.101212918203238412E+06,       0.101215072363802130E+06,
+        0.101218250672383481E+06,       0.101222522132735277E+06,       0.101227622288938786E+06,       0.101233167267756522E+06,       0.101238956389902218E+06,
+        0.101244820309774892E+06,       0.101250635435466815E+06,       0.101256335683556361E+06,       0.101261921151622766E+06,       0.101268342600560762E+06,
+        0.101275163933372678E+06,       0.101281497833931266E+06,       0.101287383286156546E+06,       0.101292932525330558E+06,       0.101298347923196663E+06,
+        0.101303932128846092E+06,       0.101310090422888767E+06,       0.101317693616226330E+06,       0.101327652607175361E+06,       0.101342480557763687E+06,
+        0.101358556451299402E+06,       0.101375279086523937E+06,       0.101391978870831925E+06,       0.101407971443584844E+06,       0.101422613121423448E+06,
+        0.101435506823643867E+06,       0.101446124078218185E+06,       0.101452234738676838E+06,       0.101455284023688801E+06,       0.101456737369482420E+06,
+        0.101456865445288451E+06,       0.101455916182255954E+06,       0.101454121953738781E+06,       0.101451661773156113E+06,       0.101449081947506013E+06,
+        0.101446228059309360E+06,       0.101444208961239303E+06,       0.101443612932188233E+06,       0.101444705011359765E+06,       0.101447541270001515E+06,
+        0.101452383501387390E+06,       0.101458282693875270E+06,       0.101464997464114887E+06,       0.101472100710916289E+06,       0.101479273864667499E+06,
+        0.101486350419971670E+06,       0.101493152086614995E+06,       0.101499576717366377E+06,       0.101505843270561643E+06,       0.101512436676125639E+06,
+        0.101519641676807107E+06,       0.101527434410592061E+06,       0.101535644765811841E+06,       0.101545029301612725E+06,       0.101553754432012545E+06,
+        0.101560956040866411E+06,       0.101564550165702050E+06,       0.101566892094339870E+06,       0.101567035078111294E+06,       0.101564167039659485E+06,
+        0.101560257949168226E+06,       0.101555969226616333E+06,       0.101552313766367617E+06,       0.101550452021603851E+06,       0.101550963150145908E+06,
+        0.101553454481203808E+06,       0.101557594737071355E+06,       0.101562591960326725E+06,       0.101568055832384678E+06,       0.101570018237429336E+06,
+        0.101568806715803599E+06,       0.101563796324326468E+06,       0.101553825571776295E+06,       0.101537561122490020E+06,       0.101515230788797810E+06,
+        0.101485862600308523E+06,       0.101448189650402157E+06,       0.101397681000099896E+06,       0.101336913516701141E+06,       0.101267241010695536E+06,
+        0.101189600658946001E+06,       0.101107785950000631E+06,       0.101027329917614610E+06,       0.100951013494106854E+06,       0.100883020611558357E+06,
+        0.100825246076290889E+06,       0.100775271676367163E+06,       0.100732070018118597E+06,       0.100693807828755365E+06,       0.100660471847562090E+06,
+        0.100632198820324600E+06,       0.100610336348454613E+06,       0.100597445568148105E+06,       0.100596347705297740E+06,       0.100608739289963560E+06,
+        0.100632312399144867E+06,       0.100664180492312080E+06,       0.100701580165578795E+06,       0.100742885809197804E+06,       0.100784251808581277E+06,
+        0.100822721504335888E+06,       0.100857114729781009E+06,       0.100884974331454141E+06,       0.100904296005382625E+06,       0.100913525976403209E+06,
+        0.100909880311948247E+06,       0.100892635225440783E+06,       0.100865034092500646E+06,       0.100830041776689235E+06,       0.100792635237818962E+06,
+        0.100758858691726316E+06,       0.100734424708176390E+06,       0.100726153683192097E+06,       0.100729591906647329E+06,       0.100742469628359380E+06,
+        0.100772373108355430E+06,       0.100810039805286127E+06,       0.100850865902025442E+06,       0.100889839249818047E+06,       0.100924291493751982E+06,
+        0.100954018166122405E+06,       0.100976020229241141E+06,       0.100977598211779696E+06,       0.100962801120868462E+06,       0.100940325812200113E+06,
+        0.100915300637579014E+06,       0.100897607613392654E+06,       0.100888545266499175E+06,       0.100887361365753401E+06,       0.100894417619390835E+06,
+        0.100914107950286358E+06,       0.100931864535990011E+06,       0.100942729300749750E+06,       0.100943712413188565E+06,       0.100933999633237443E+06,
+        0.100915953837210676E+06,       0.100891962587812566E+06,       0.100861290497928669E+06,       0.100825794229352119E+06,       0.100786805648525173E+06,
+        0.100747059949918155E+06,       0.100708052571343884E+06,       0.100670389177752746E+06,       0.100637438856290988E+06,       0.100612791553316754E+06,
+        0.100598161054412602E+06,       0.100597616745557592E+06,       0.100608245258248513E+06,       0.100627589752602711E+06,       0.100652501052796259E+06,
+        0.100677256390096882E+06,       0.100702485105916334E+06,       0.100721371071945381E+06,       0.100737732280855227E+06,       0.100754743779602475E+06,
+        0.100772593580461515E+06,       0.100791374419969914E+06,       0.100810897025248196E+06,       0.100830367089737425E+06,       0.100852737881952431E+06,
+        0.100874075837282377E+06,       0.100893534157121714E+06,       0.101228070489269143E+06,       0.101227544665406953E+06,       0.101230349746524807E+06,
+        0.101234269851944497E+06,       0.101239184467959683E+06,       0.101244939450664504E+06,       0.101251545017166776E+06,       0.101258662705518451E+06,
+        0.101265918196699597E+06,       0.101273125560589353E+06,       0.101280152736103031E+06,       0.101286933875186733E+06,       0.101293407125996848E+06,
+        0.101299586824039099E+06,       0.101306376779591956E+06,       0.101313623028716072E+06,       0.101320476967868250E+06,       0.101327043370354135E+06,
+        0.101333520713772232E+06,       0.101340211822319048E+06,       0.101347526837547412E+06,       0.101356523012281294E+06,       0.101370533287668499E+06,
+        0.101386582740267011E+06,       0.101403758993542797E+06,       0.101421430602220105E+06,       0.101438909393433467E+06,       0.101455505881131437E+06,
+        0.101470586854150286E+06,       0.101483635012064580E+06,       0.101492144560654036E+06,       0.101497362403152074E+06,       0.101500801900675287E+06,
+        0.101502736875093309E+06,       0.101503413235270535E+06,       0.101503062612840484E+06,       0.101501914512809366E+06,       0.101500206465205003E+06,
+        0.101497831592138784E+06,       0.101495767534276791E+06,       0.101494714546066039E+06,       0.101495119352637426E+06,       0.101497237786485115E+06,
+        0.101501125674684867E+06,       0.101506644060371764E+06,       0.101514150312748505E+06,       0.101522320784248848E+06,       0.101530563331544297E+06,
+        0.101538706294350879E+06,       0.101546559377466736E+06,       0.101553946547580461E+06,       0.101560765945043371E+06,       0.101567653265792658E+06,
+        0.101574587210003941E+06,       0.101581752742970988E+06,       0.101589174518686996E+06,       0.101596642355671458E+06,       0.101603818859754785E+06,
+        0.101610799838750623E+06,       0.101614811522755466E+06,       0.101617790546373333E+06,       0.101619757440904345E+06,       0.101620562545717650E+06,
+        0.101618884459059045E+06,       0.101615191240677028E+06,       0.101611483339551589E+06,       0.101608375965291722E+06,       0.101606589668011176E+06,
+        0.101606767311590491E+06,       0.101608967585915860E+06,       0.101612347393029107E+06,       0.101614810665037265E+06,       0.101614446811429036E+06,
+        0.101613127583126843E+06,       0.101609516694027276E+06,       0.101602475273863849E+06,       0.101591105455035053E+06,       0.101574139304303288E+06,
+        0.101552261616850359E+06,       0.101522964529426812E+06,       0.101483809256113498E+06,       0.101431803333729331E+06,       0.101367984772122625E+06,
+        0.101295216781381270E+06,       0.101216180859079337E+06,       0.101134418945842335E+06,       0.101057719484696820E+06,       0.100987761361816083E+06,
+        0.100925129407695815E+06,       0.100869076127166059E+06,       0.100819148307903684E+06,       0.100772602660554068E+06,       0.100726367887494707E+06,
+        0.100682387602061091E+06,       0.100642046686646194E+06,       0.100608073036628615E+06,       0.100583165331615121E+06,       0.100571567333927058E+06,
+        0.100579161681519065E+06,       0.100599831523424771E+06,       0.100631457444745640E+06,       0.100671162741316628E+06,       0.100715517300559659E+06,
+        0.100759196447210823E+06,       0.100798644466533326E+06,       0.100834218092755124E+06,       0.100864022068452279E+06,       0.100886844670119492E+06,
+        0.100903072952249466E+06,       0.100910324635737983E+06,       0.100907110564502160E+06,       0.100894913649374212E+06,       0.100873485872527890E+06,
+        0.100847908218072756E+06,       0.100825028815845202E+06,       0.100812235195442801E+06,       0.100811789392154620E+06,       0.100821477468724654E+06,
+        0.100842188280174509E+06,       0.100874882105417564E+06,       0.100910352034741096E+06,       0.100944613694273561E+06,       0.100970573806106200E+06,
+        0.100992876564753780E+06,       0.101010256709896377E+06,       0.101017365734439736E+06,       0.101004642180764087E+06,       0.100981216767300502E+06,
+        0.100950670557522288E+06,       0.100918693714911191E+06,       0.100893168282002865E+06,       0.100873786774855747E+06,       0.100862092518860401E+06,
+        0.100858765389723776E+06,       0.100863848594959985E+06,       0.100872455106490743E+06,       0.100880727391939872E+06,       0.100881060958518239E+06,
+        0.100871581642927995E+06,       0.100854982629453050E+06,       0.100833968938175327E+06,       0.100809126941723182E+06,       0.100777926015906574E+06,
+        0.100744862813125714E+06,       0.100711030659190204E+06,       0.100674920663551122E+06,       0.100638665812651045E+06,       0.100604613640158801E+06,
+        0.100577951755037328E+06,       0.100565299257314167E+06,       0.100564490794773781E+06,       0.100574070775104672E+06,       0.100592267906427369E+06,
+        0.100616576592620535E+06,       0.100643954138155808E+06,       0.100661679785274406E+06,       0.100676519993234426E+06,       0.100692101751513052E+06,
+        0.100708845098980164E+06,       0.100726890359751837E+06,       0.100746088291053093E+06,       0.100766274118497415E+06,       0.100790485020117267E+06,
+        0.100814283052694198E+06,       0.100836998900601233E+06,       0.100857834251143926E+06,       0.101239951294366925E+06,       0.101243511198018721E+06,
+        0.101248266604097182E+06,       0.101254120739513630E+06,       0.101260940255995316E+06,       0.101268566543099048E+06,       0.101276830453567702E+06,
+        0.101285622454819968E+06,       0.101294523809254446E+06,       0.101303237484829937E+06,       0.101311620976720500E+06,       0.101319644374765689E+06,
+        0.101327259549206297E+06,       0.101334480948853117E+06,       0.101341388354789131E+06,       0.101348710884544664E+06,       0.101356521517190282E+06,
+        0.101364093945627537E+06,       0.101371621643877312E+06,       0.101379408199202080E+06,       0.101388443315429948E+06,       0.101401687552132498E+06,
+        0.101416572004818678E+06,       0.101433189992554107E+06,       0.101451428970825116E+06,       0.101470024045938291E+06,       0.101488255659360628E+06,
+        0.101505416028128879E+06,       0.101520868917434069E+06,       0.101531842805264969E+06,       0.101539245769958565E+06,       0.101544605958666289E+06,
+        0.101548569302459247E+06,       0.101551134535491103E+06,       0.101552518676128384E+06,       0.101552933361419549E+06,       0.101552598628048305E+06,
+        0.101551346091754502E+06,       0.101549620534837697E+06,       0.101548503290274006E+06,       0.101548531268210281E+06,       0.101550086213979870E+06,
+        0.101553415865284071E+06,       0.101558574308658994E+06,       0.101566141420655156E+06,       0.101575323430362041E+06,       0.101584790524686381E+06,
+        0.101594148506046142E+06,       0.101603272905442951E+06,       0.101611945735174741E+06,       0.101619979003416622E+06,       0.101627204805596586E+06,
+        0.101634427668451928E+06,       0.101641404911077247E+06,       0.101648381901037224E+06,       0.101655340222651532E+06,       0.101662034474683896E+06,
+        0.101666783103935741E+06,       0.101669591715802919E+06,       0.101672592019255666E+06,       0.101674896474706766E+06,       0.101676486613950226E+06,
+        0.101677173545713507E+06,       0.101676735064566892E+06,       0.101674421820609132E+06,       0.101671063643987713E+06,       0.101668202552547300E+06,
+        0.101666520557556054E+06,       0.101666348434875123E+06,       0.101667923680669555E+06,       0.101669351667803800E+06,       0.101668978131977754E+06,
+        0.101666110028333933E+06,       0.101660538752964931E+06,       0.101654594444694463E+06,       0.101645738692219165E+06,       0.101634351733125281E+06,
+        0.101619445806351592E+06,       0.101597486529762551E+06,       0.101566963080607631E+06,       0.101526313623151611E+06,       0.101474414132893216E+06,
+        0.101408806070782084E+06,       0.101334676336432865E+06,       0.101255967485764850E+06,       0.101177930379907673E+06,       0.101105923487214692E+06,
+        0.101041528067973224E+06,       0.100984421243628807E+06,       0.100931366999700622E+06,       0.100882259035952666E+06,       0.100834318510275116E+06,
+        0.100780975023316409E+06,       0.100725029283105585E+06,       0.100672125573187601E+06,       0.100626333648281943E+06,       0.100591108252538659E+06,
+        0.100571154519613207E+06,       0.100572764811242494E+06,       0.100590644123334263E+06,       0.100622114840101916E+06,       0.100663170419413218E+06,
+        0.100711109304953105E+06,       0.100759450274770090E+06,       0.100803668821019484E+06,       0.100843723009858411E+06,       0.100878065056743988E+06,
+        0.100905193898488564E+06,       0.100924238150348683E+06,       0.100935705112497482E+06,       0.100940040808540827E+06,       0.100938611611957211E+06,
+        0.100929132041696241E+06,       0.100917754954705204E+06,       0.100905818223427166E+06,       0.100905472653716875E+06,       0.100913513200435162E+06,
+        0.100929234171202479E+06,       0.100956672791980032E+06,       0.100989933744260285E+06,       0.101021721049159081E+06,       0.101045261345619481E+06,
+        0.101056484086316414E+06,       0.101064376750130497E+06,       0.101068662292293593E+06,       0.101058850049314118E+06,       0.101036734626105259E+06,
+        0.101005396099047648E+06,       0.100967551751069492E+06,       0.100930584068150943E+06,       0.100895049839971194E+06,       0.100865689126530953E+06,
+        0.100843766391791884E+06,       0.100833519035555830E+06,       0.100830429319700765E+06,       0.100830534716874317E+06,       0.100831218872075027E+06,
+        0.100828733033744793E+06,       0.100816736999957517E+06,       0.100801115692818625E+06,       0.100782650624359696E+06,       0.100761638271208169E+06,
+        0.100739079948099330E+06,       0.100715508303584225E+06,       0.100685570121976882E+06,       0.100651926936336182E+06,       0.100616808436076797E+06,
+        0.100582738088950529E+06,       0.100553609533300842E+06,       0.100536151852068826E+06,       0.100533191840017098E+06,       0.100540563795043839E+06,
+        0.100556547268302660E+06,       0.100578647827983019E+06,       0.100597845282151320E+06,       0.100615643951716338E+06,       0.100629644958407152E+06,
+        0.100644649717624998E+06,       0.100661314686951257E+06,       0.100679739011681770E+06,       0.100699923738231213E+06,       0.100724000291545439E+06,
+        0.100748935934403649E+06,       0.100773460147275109E+06,       0.100796886100017015E+06,       0.100818431742268527E+06,       0.101253250319671861E+06,
+        0.101258941275491015E+06,       0.101265825984074268E+06,       0.101273785992740712E+06,       0.101282673338371926E+06,       0.101292322337458594E+06,
+        0.101302564811119126E+06,       0.101313249084015886E+06,       0.101324039732978374E+06,       0.101334420443956798E+06,       0.101344441355969844E+06,
+        0.101353937804033951E+06,       0.101362853548466621E+06,       0.101371239996888005E+06,       0.101379195223571107E+06,       0.101386868114858662E+06,
+        0.101394863418320267E+06,       0.101403421459721620E+06,       0.101411971625535502E+06,       0.101421328676152989E+06,       0.101434052612144369E+06,
+        0.101448448578493975E+06,       0.101464428560022046E+06,       0.101481780318751698E+06,       0.101500377161328623E+06,       0.101519861969620310E+06,
+        0.101538794301281392E+06,       0.101556432572582416E+06,       0.101569913275213607E+06,       0.101580111679331065E+06,       0.101588077608188687E+06,
+        0.101593761388586005E+06,       0.101597743292873696E+06,       0.101601111211300595E+06,       0.101603375473686290E+06,       0.101604722386775393E+06,
+        0.101605277974446421E+06,       0.101605137189286179E+06,       0.101604583774228318E+06,       0.101604027662526438E+06,       0.101605032612257637E+06,
+        0.101607890648949600E+06,       0.101612610274943596E+06,       0.101620190413487217E+06,       0.101629709918692257E+06,       0.101640274485895483E+06,
+        0.101651366271263018E+06,       0.101662017372317307E+06,       0.101672127532921921E+06,       0.101681639836175294E+06,       0.101689695653715113E+06,
+        0.101697371401130935E+06,       0.101704816287710346E+06,       0.101711959261812881E+06,       0.101718592829194225E+06,       0.101724976617920722E+06,
+        0.101729049321389990E+06,       0.101731107282530153E+06,       0.101732743234520705E+06,       0.101734177642089810E+06,       0.101735792298410903E+06,
+        0.101737051523103568E+06,       0.101737813506062157E+06,       0.101737771770358304E+06,       0.101736766611527375E+06,       0.101733998643601444E+06,
+        0.101731285447018498E+06,       0.101729657615879667E+06,       0.101729463824108592E+06,       0.101730467776220365E+06,       0.101730634889909721E+06,
+        0.101728530424326527E+06,       0.101723478773003560E+06,       0.101715128998538450E+06,       0.101705173881448645E+06,       0.101697065128410613E+06,
+        0.101686174729378530E+06,       0.101670746397321127E+06,       0.101648602916028351E+06,       0.101617289856162359E+06,       0.101575677936215157E+06,
+        0.101523549414822643E+06,       0.101459384090740117E+06,       0.101385766535040675E+06,       0.101307806220871105E+06,       0.101230532040925333E+06,
+        0.101163615695121596E+06,       0.101105144301163149E+06,       0.101053953064553687E+06,       0.101004506092646785E+06,       0.100954394425546445E+06,
+        0.100903265851270029E+06,       0.100843568326323351E+06,       0.100779909310060830E+06,       0.100718507897475429E+06,       0.100663227538561507E+06,
+        0.100619196470881463E+06,       0.100590878309716514E+06,       0.100585918330994056E+06,       0.100599670235220139E+06,       0.100629367268692309E+06,
+        0.100671559948193928E+06,       0.100722625470161831E+06,       0.100775876461740903E+06,       0.100826307692812305E+06,       0.100872731273009820E+06,
+        0.100911769660482067E+06,       0.100942401025764135E+06,       0.100964392752327054E+06,       0.100978678374194351E+06,       0.100986716960824007E+06,
+        0.100990258819483715E+06,       0.100986859094204920E+06,       0.100984358423690996E+06,       0.100986880945730183E+06,       0.101001308030144719E+06,
+        0.101021911204537639E+06,       0.101045314756852677E+06,       0.101079374563270016E+06,       0.101112057664106265E+06,       0.101138492426304845E+06,
+        0.101147264582452117E+06,       0.101146181575950890E+06,       0.101139597898295426E+06,       0.101126956426191653E+06,       0.101104207044017559E+06,
+        0.101074184746976593E+06,       0.101036351784390296E+06,       0.100994839802225833E+06,       0.100951701131987342E+06,       0.100907802015808338E+06,
+        0.100866623322513595E+06,       0.100836261177509557E+06,       0.100817609325104844E+06,       0.100806057949370603E+06,       0.100799101756952587E+06,
+        0.100794178922864405E+06,       0.100782586521973222E+06,       0.100770278560914870E+06,       0.100755730874395027E+06,       0.100740174567162278E+06,
+        0.100724221891415305E+06,       0.100711960802472036E+06,       0.100695201938734870E+06,       0.100670904548085469E+06,       0.100639130264881242E+06,
+        0.100604667725497551E+06,       0.100569533181772116E+06,       0.100538827586813903E+06,       0.100515863557522040E+06,       0.100504283432544311E+06,
+        0.100508208880423437E+06,       0.100520846592849106E+06,       0.100533319890499857E+06,       0.100546979620563667E+06,       0.100563406036921282E+06,
+        0.100581336883139578E+06,       0.100596479945475046E+06,       0.100613263609396352E+06,       0.100632606505272503E+06,       0.100655737101977575E+06,
+        0.100680377627359165E+06,       0.100705693019706334E+06,       0.100730567542817560E+06,       0.100753963268230000E+06,       0.100775475443369112E+06,
+        0.101264306669592683E+06,       0.101273005643247234E+06,       0.101282212261941575E+06,       0.101292455230279535E+06,       0.101303569666892407E+06,
+        0.101315379627821021E+06,       0.101327713762651794E+06,       0.101340424766245633E+06,       0.101353413011349316E+06,       0.101366215214067837E+06,
+        0.101378003241061873E+06,       0.101389048142805594E+06,       0.101399358057326695E+06,       0.101408993909155237E+06,       0.101418071350073515E+06,
+        0.101426765747085621E+06,       0.101435320572288721E+06,       0.101444230417056518E+06,       0.101454115342003613E+06,       0.101466281775386233E+06,
+        0.101480018815107192E+06,       0.101495370152025978E+06,       0.101512249092142942E+06,       0.101530457200416044E+06,       0.101549717357720714E+06,
+        0.101569710093644739E+06,       0.101589282549966229E+06,       0.101605011230739328E+06,       0.101617835360473735E+06,       0.101628768238586897E+06,
+        0.101637571031423722E+06,       0.101644166338589697E+06,       0.101648697806602591E+06,       0.101651881208006424E+06,       0.101655220484862148E+06,
+        0.101657859335835557E+06,       0.101659761085947117E+06,       0.101661032940759702E+06,       0.101661921699332699E+06,       0.101662809971163108E+06,
+        0.101664227024246793E+06,       0.101667989933228542E+06,       0.101675508452427108E+06,       0.101685268933038969E+06,       0.101696374945899413E+06,
+        0.101708376350831662E+06,       0.101720741353243910E+06,       0.101732914311869565E+06,       0.101744191311434886E+06,       0.101753679207339199E+06,
+        0.101762383198229145E+06,       0.101770484632283566E+06,       0.101778058653469430E+06,       0.101785052189110153E+06,       0.101791286685933344E+06,
+        0.101795171487182030E+06,       0.101797156941597103E+06,       0.101798421280143026E+06,       0.101799261614609830E+06,       0.101799803038408485E+06,
+        0.101800210895802447E+06,       0.101801683280290250E+06,       0.101802630829050468E+06,       0.101802543397740184E+06,       0.101801482357017914E+06,
+        0.101799624587932572E+06,       0.101797066559983883E+06,       0.101795799625004249E+06,       0.101795785922852519E+06,       0.101796374037248344E+06,
+        0.101796548441705847E+06,       0.101793091799900605E+06,       0.101786346983049574E+06,       0.101776575607877137E+06,       0.101765049283969143E+06,
+        0.101754303368654233E+06,       0.101742481241294314E+06,       0.101726517364683619E+06,       0.101704526213350880E+06,       0.101673251963278643E+06,
+        0.101631549642581842E+06,       0.101579630218674371E+06,       0.101517751331919892E+06,       0.101445587957413649E+06,       0.101369276534187840E+06,
+        0.101293749197962985E+06,       0.101228845743408630E+06,       0.101175974072217723E+06,       0.101128069068520213E+06,       0.101080672101220363E+06,
+        0.101030554297062597E+06,       0.100978255877595599E+06,       0.100917786384446328E+06,       0.100848380590802917E+06,       0.100779685419598463E+06,
+        0.100716993576480047E+06,       0.100665449877585226E+06,       0.100628730188585745E+06,       0.100616768912061103E+06,       0.100625017647516172E+06,
+        0.100651010955717982E+06,       0.100693983128488617E+06,       0.100748028718061119E+06,       0.100807126354548294E+06,       0.100865743222122503E+06,
+        0.100920280263948240E+06,       0.100963697339721592E+06,       0.100996625031755175E+06,       0.101020588466931018E+06,       0.101034801756696354E+06,
+        0.101044107550953762E+06,       0.101050001068824189E+06,       0.101053046373654055E+06,       0.101058552912032319E+06,       0.101072171257776601E+06,
+        0.101095588999532294E+06,       0.101124462408449937E+06,       0.101159998252541394E+06,       0.101199939829214418E+06,       0.101233511940909040E+06,
+        0.101250548981260363E+06,       0.101245238633873159E+06,       0.101231967019851887E+06,       0.101212524735667932E+06,       0.101187116747768814E+06,
+        0.101155254569723096E+06,       0.101117728069520774E+06,       0.101075849861174778E+06,       0.101031454770778844E+06,       0.100982633468066182E+06,
+        0.100931817382534617E+06,       0.100883044212189372E+06,       0.100842431678571462E+06,       0.100810753030772234E+06,       0.100790307235783985E+06,
+        0.100775641660991605E+06,       0.100758065719658363E+06,       0.100742431929372280E+06,       0.100730276589137924E+06,       0.100719950891765460E+06,
+        0.100707897196450547E+06,       0.100704034450479885E+06,       0.100696304475012279E+06,       0.100682955042842383E+06,       0.100662970635189646E+06,
+        0.100635257255516670E+06,       0.100598919177042175E+06,       0.100561998994079375E+06,       0.100529207116205667E+06,       0.100503120931424841E+06,
+        0.100485371253469493E+06,       0.100478084387816067E+06,       0.100480161528695491E+06,       0.100486330170588408E+06,       0.100497656033703854E+06,
+        0.100512793940874559E+06,       0.100530267502319883E+06,       0.100548674998529634E+06,       0.100566870164484106E+06,       0.100588713074028346E+06,
+        0.100612035752629497E+06,       0.100636570551070865E+06,       0.100661555413946771E+06,       0.100685975940573393E+06,       0.100708805081237850E+06,
+        0.100728426698084644E+06,       0.101271996036762896E+06,       0.101284449704480561E+06,       0.101296689346213228E+06,       0.101309400454198360E+06,
+        0.101322901055611903E+06,       0.101337001192974072E+06,       0.101351521575208899E+06,       0.101366313393139906E+06,       0.101382034494546009E+06,
+        0.101397351776588475E+06,       0.101411443443270473E+06,       0.101424117470686309E+06,       0.101435883616085790E+06,       0.101446811616959909E+06,
+        0.101457033181746156E+06,       0.101466747751913790E+06,       0.101476231696805597E+06,       0.101486021283400187E+06,       0.101497396375811921E+06,
+        0.101510400207985600E+06,       0.101524923388815208E+06,       0.101540994381505661E+06,       0.101558520228044814E+06,       0.101577305318149651E+06,
+        0.101597084529118074E+06,       0.101617572913645636E+06,       0.101635935716414897E+06,       0.101650985317801838E+06,       0.101664666828709975E+06,
+        0.101676613583561295E+06,       0.101686531498022989E+06,       0.101694300750966708E+06,       0.101700039232711759E+06,       0.101704155496819658E+06,
+        0.101707559871844016E+06,       0.101711706616868032E+06,       0.101715220819953611E+06,       0.101718183769718671E+06,       0.101720797579619655E+06,
+        0.101723413797095534E+06,       0.101726548168837966E+06,       0.101732421109602874E+06,       0.101741180387240456E+06,       0.101752626090808626E+06,
+        0.101765327683930620E+06,       0.101778794125947126E+06,       0.101792465254962983E+06,       0.101805759257347163E+06,       0.101817578749370528E+06,
+        0.101828002210067600E+06,       0.101837310759124710E+06,       0.101845770211075462E+06,       0.101853420566787143E+06,       0.101860181736826940E+06,
+        0.101864213062694500E+06,       0.101866574115216965E+06,       0.101867875008511299E+06,       0.101868524705411764E+06,       0.101868825959176160E+06,
+        0.101868919433276926E+06,       0.101869678539425964E+06,       0.101870695483190138E+06,       0.101871330785532584E+06,       0.101870979213963699E+06,
+        0.101869675931957303E+06,       0.101867574002842535E+06,       0.101865625644742016E+06,       0.101864444239763863E+06,       0.101864129871809724E+06,
+        0.101864253411905665E+06,       0.101863863423935647E+06,       0.101861147095331355E+06,       0.101853046503827805E+06,       0.101842469691830149E+06,
+        0.101829793173113096E+06,       0.101815148158582204E+06,       0.101801721489973846E+06,       0.101784969966993638E+06,       0.101762516553084497E+06,
+        0.101733198141890345E+06,       0.101692387931239413E+06,       0.101641579160683832E+06,       0.101581604629232388E+06,       0.101513447361368249E+06,
+        0.101440920474624741E+06,       0.101370696075984946E+06,       0.101305428265875380E+06,       0.101254160309156374E+06,       0.101207383873920160E+06,
+        0.101161789898628529E+06,       0.101111489873579616E+06,       0.101058073620173833E+06,       0.100998431410120465E+06,       0.100925178881860134E+06,
+        0.100851277940204382E+06,       0.100782887728638991E+06,       0.100724637342850445E+06,       0.100681654247053943E+06,       0.100660743763258797E+06,
+        0.100662241191619672E+06,       0.100684600997945701E+06,       0.100726431789378737E+06,       0.100783621753223240E+06,       0.100850165592330639E+06,
+        0.100919393459606828E+06,       0.100984663126731160E+06,       0.101035581217426865E+06,       0.101073289555574971E+06,       0.101097883508170984E+06,
+        0.101109275635634360E+06,       0.101115535689499287E+06,       0.101120721213043289E+06,       0.101127445332507938E+06,       0.101138555650677066E+06,
+        0.101162386128591490E+06,       0.101193764958060041E+06,       0.101229324100487633E+06,       0.101272586038755646E+06,       0.101314017050708091E+06,
+        0.101345307647537833E+06,       0.101350681405921583E+06,       0.101336274552223433E+06,       0.101312002659208913E+06,       0.101282108941999220E+06,
+        0.101247511268828879E+06,       0.101208775326433519E+06,       0.101166118942493005E+06,       0.101124324087716755E+06,       0.101077097855417393E+06,
+        0.101023493736806588E+06,       0.100966370678116829E+06,       0.100910649732596605E+06,       0.100860956183662900E+06,       0.100818859583747035E+06,
+        0.100784487610509677E+06,       0.100755633857502806E+06,       0.100730268695456398E+06,       0.100710865638861083E+06,       0.100697679049610029E+06,
+        0.100690061794109570E+06,       0.100696089852752222E+06,       0.100696921102593260E+06,       0.100692632540626320E+06,       0.100681762801710865E+06,
+        0.100663264802660036E+06,       0.100633791904004815E+06,       0.100597430688150896E+06,       0.100559133196241281E+06,       0.100524051576254133E+06,
+        0.100494743325319461E+06,       0.100472843717532320E+06,       0.100453469270866597E+06,       0.100441938855850953E+06,       0.100444602587366870E+06,
+        0.100453700278505523E+06,       0.100467703647186674E+06,       0.100484865751373640E+06,       0.100504556800278908E+06,       0.100526747147881411E+06,
+        0.100548342492759344E+06,       0.100570928110482331E+06,       0.100594499129673175E+06,       0.100618314768352022E+06,       0.100641358389098648E+06,
+        0.100661048545089099E+06,       0.100674922441404182E+06,       0.101277440454925483E+06,       0.101292275045881630E+06,       0.101308217918252703E+06,
+        0.101324032641650105E+06,       0.101340083417949048E+06,       0.101356599817204507E+06,       0.101373389242319026E+06,       0.101391680572806275E+06,
+        0.101409655246696246E+06,       0.101426966070523806E+06,       0.101443353143514600E+06,       0.101458277199001546E+06,       0.101471528522387307E+06,
+        0.101483748681189623E+06,       0.101495083125874895E+06,       0.101505752090554262E+06,       0.101516050089151657E+06,       0.101526815975076141E+06,
+        0.101538795327266271E+06,       0.101552338028206417E+06,       0.101567404995926277E+06,       0.101583932457588046E+06,       0.101601812845274559E+06,
+        0.101620841504076889E+06,       0.101640749378202716E+06,       0.101659290500403222E+06,       0.101676771795349603E+06,       0.101693884723980591E+06,
+        0.101708998663612001E+06,       0.101722276078936207E+06,       0.101733606252533034E+06,       0.101742808520292456E+06,       0.101749958233873534E+06,
+        0.101756733187784732E+06,       0.101761976313215302E+06,       0.101765600227458519E+06,       0.101770624962746049E+06,       0.101775587804667244E+06,
+        0.101780223730697457E+06,       0.101784845963681015E+06,       0.101792019560120360E+06,       0.101800861910829000E+06,       0.101810238167576026E+06,
+        0.101821334626365482E+06,       0.101835649384848730E+06,       0.101850599319270405E+06,       0.101865571025550424E+06,       0.101879726510542314E+06,
+        0.101892673462390783E+06,       0.101903975174055988E+06,       0.101913651691837455E+06,       0.101922403262289721E+06,       0.101930066269132934E+06,
+        0.101934959838625931E+06,       0.101938013574382479E+06,       0.101939867945920269E+06,       0.101940768404829549E+06,       0.101940976512875422E+06,
+        0.101940974808985324E+06,       0.101941915218950715E+06,       0.101942796779357042E+06,       0.101943325071244180E+06,       0.101943321289824438E+06,
+        0.101942520685581403E+06,       0.101940795734215877E+06,       0.101938328485986989E+06,       0.101936102913573559E+06,       0.101934189161022412E+06,
+        0.101933270983365946E+06,       0.101932726854111810E+06,       0.101931071080041162E+06,       0.101927390375963005E+06,       0.101920782487591568E+06,
+        0.101909599976852041E+06,       0.101896034018928112E+06,       0.101880121030327078E+06,       0.101861777722108454E+06,       0.101843441866567693E+06,
+        0.101821175828396939E+06,       0.101793162871491804E+06,       0.101756243381197477E+06,       0.101707526053893132E+06,       0.101651390637597418E+06,
+        0.101591096250860501E+06,       0.101525066978488496E+06,       0.101457842460151805E+06,       0.101392749867658815E+06,       0.101338205739929384E+06,
+        0.101290789521037383E+06,       0.101243732978547458E+06,       0.101191560328100386E+06,       0.101135333560209707E+06,       0.101074991868799916E+06,
+        0.101002789603246347E+06,       0.100928035016280875E+06,       0.100857779212484500E+06,       0.100794984785666602E+06,       0.100746221294778152E+06,
+        0.100717266126841918E+06,       0.100710869212579069E+06,       0.100726313373954297E+06,       0.100765862955971417E+06,       0.100824009621681325E+06,
+        0.100896074483335498E+06,       0.100975156087370415E+06,       0.101050862045185830E+06,       0.101108616996395343E+06,       0.101151397540630162E+06,
+        0.101177118649863274E+06,       0.101187234876946401E+06,       0.101192189574432836E+06,       0.101198920872520132E+06,       0.101209271572763842E+06,
+        0.101225853188380381E+06,       0.101255763867716960E+06,       0.101292205782835576E+06,       0.101333769433737034E+06,       0.101380487686360808E+06,
+        0.101421196585383368E+06,       0.101445943578677994E+06,       0.101442593076884281E+06,       0.101422753739062216E+06,       0.101390520324852318E+06,
+        0.101350761888702051E+06,       0.101308120360709363E+06,       0.101265074031475204E+06,       0.101223556150358476E+06,       0.101181059083197164E+06,
+        0.101131282154724337E+06,       0.101073985674786556E+06,       0.101009316519365500E+06,       0.100945620806578852E+06,       0.100887564966803198E+06,
+        0.100836870701820939E+06,       0.100791306568270127E+06,       0.100748587002241606E+06,       0.100714275195360678E+06,       0.100691096015225994E+06,
+        0.100677036214206237E+06,       0.100679656532840978E+06,       0.100689403954963505E+06,       0.100699806241966638E+06,       0.100699758014009334E+06,
+        0.100690385161567290E+06,       0.100668712287826143E+06,       0.100636906386880102E+06,       0.100599766534639755E+06,       0.100560426804608782E+06,
+        0.100523011227441762E+06,       0.100490487333571364E+06,       0.100458484377625064E+06,       0.100433836484664062E+06,       0.100418321599970062E+06,
+        0.100412076649917391E+06,       0.100419080629848453E+06,       0.100432241000389156E+06,       0.100450792482229837E+06,       0.100472305642769512E+06,
+        0.100493869619492121E+06,       0.100514430080734746E+06,       0.100535036793476407E+06,       0.100556629184451856E+06,       0.100578314394928922E+06,
+        0.100596991295179905E+06,       0.100611500340730694E+06,       0.100623274306907668E+06,       0.101280196625301396E+06,       0.101297364868656936E+06,
+        0.101315860426329833E+06,       0.101335437548964052E+06,       0.101354738212366676E+06,       0.101373945822871654E+06,       0.101394704590563779E+06,
+        0.101415369573864707E+06,       0.101435547066077095E+06,       0.101454900560777067E+06,       0.101473156717428967E+06,       0.101490111858949429E+06,
+        0.101505426648419336E+06,       0.101518896733282789E+06,       0.101531260767964472E+06,       0.101542531309453814E+06,       0.101553164954199878E+06,
+        0.101564411925864319E+06,       0.101576767311889984E+06,       0.101590613786174377E+06,       0.101606186426911474E+06,       0.101622949542643095E+06,
+        0.101640870734518088E+06,       0.101659778611533140E+06,       0.101677671599300767E+06,       0.101695145189232746E+06,       0.101713022490742442E+06,
+        0.101730968458130665E+06,       0.101748633328473559E+06,       0.101764332593418454E+06,       0.101777415582760368E+06,       0.101788327636173344E+06,
+        0.101798745459491343E+06,       0.101807854686651277E+06,       0.101815215507054876E+06,       0.101821043040616947E+06,       0.101825884968623417E+06,
+        0.101832189148969264E+06,       0.101839168448648401E+06,       0.101848045440598347E+06,       0.101858730804693652E+06,       0.101869959329435806E+06,
+        0.101881533268110448E+06,       0.101893454722194554E+06,       0.101906437265534973E+06,       0.101922905509709031E+06,       0.101939197745689977E+06,
+        0.101954795923734462E+06,       0.101969009671704334E+06,       0.101981310726737574E+06,       0.101991415766123711E+06,       0.101999594743156573E+06,
+        0.102005976491342561E+06,       0.102010334316063047E+06,       0.102013157295944911E+06,       0.102014722383416287E+06,       0.102015313093490025E+06,
+        0.102015201185307524E+06,       0.102016512237083880E+06,       0.102017510782104568E+06,       0.102018055903560264E+06,       0.102018084579591843E+06,
+        0.102017466339170613E+06,       0.102015842014936527E+06,       0.102013009808558825E+06,       0.102010188377710918E+06,       0.102007504920719613E+06,
+        0.102004842449303280E+06,       0.102002010784629019E+06,       0.101999472815438930E+06,       0.101995912864510945E+06,       0.101991527724094442E+06,
+        0.101985699759707655E+06,       0.101975812995855114E+06,       0.101961537246313150E+06,       0.101943695019863866E+06,       0.101923033375715851E+06,
+        0.101901362121280530E+06,       0.101879075837123033E+06,       0.101852284874085046E+06,       0.101819539147717020E+06,       0.101776999589703846E+06,
+        0.101726785900868257E+06,       0.101671557646898407E+06,       0.101612042588822980E+06,       0.101548622762663115E+06,       0.101485284216076703E+06,
+        0.101425147441038411E+06,       0.101373420817102917E+06,       0.101321191476503751E+06,       0.101266538752380700E+06,       0.101208938335707280E+06,
+        0.101148533319442722E+06,       0.101080582757091557E+06,       0.101007172321080754E+06,       0.100937106866050381E+06,       0.100872650853732252E+06,
+        0.100818490092161403E+06,       0.100780581038449120E+06,       0.100763989069985822E+06,       0.100769172528104478E+06,       0.100801781036641652E+06,
+        0.100856282722816642E+06,       0.100929221528193739E+06,       0.101013884730459817E+06,       0.101097563707576744E+06,       0.101162534274172547E+06,
+        0.101213486478638646E+06,       0.101244516559525029E+06,       0.101257648408437890E+06,       0.101263733502884890E+06,       0.101275510052246449E+06,
+        0.101290762661853529E+06,       0.101314197491016195E+06,       0.101347943558257903E+06,       0.101386651316440679E+06,       0.101430443429601510E+06,
+        0.101475669896804160E+06,       0.101514950055520574E+06,       0.101531515938051540E+06,       0.101524788957272292E+06,       0.101501664340208648E+06,
+        0.101465580088908755E+06,       0.101421732802947983E+06,       0.101374184582676520E+06,       0.101328046898908578E+06,       0.101289807901878230E+06,
+        0.101246491413997268E+06,       0.101194778317482283E+06,       0.101131646224091921E+06,       0.101060205833383836E+06,       0.100988174374432070E+06,
+        0.100922370979696687E+06,       0.100863854824209222E+06,       0.100809964699915654E+06,       0.100761271524313197E+06,       0.100719104259046479E+06,
+        0.100686430395430245E+06,       0.100678847862221184E+06,       0.100683138663107515E+06,       0.100693073794055832E+06,       0.100704133264039236E+06,
+        0.100711587564049987E+06,       0.100702838554374641E+06,       0.100679156446423745E+06,       0.100646910483054933E+06,       0.100608627281804467E+06,
+        0.100567412671928309E+06,       0.100526528285293534E+06,       0.100483943399388023E+06,       0.100448443665773972E+06,       0.100421899539395425E+06,
+        0.100404924203073868E+06,       0.100397063255380912E+06,       0.100397195586259491E+06,       0.100412985650041403E+06,       0.100432834475288488E+06,
+        0.100453366207182436E+06,       0.100473356439391355E+06,       0.100491742373035304E+06,       0.100507905429383289E+06,       0.100525814076571885E+06,
+        0.100542096974396103E+06,       0.100555812166254138E+06,       0.100567395231908740E+06,       0.100576579149565121E+06,       0.101279908089260382E+06,
+        0.101299372851355220E+06,       0.101320345227797603E+06,       0.101342568251312987E+06,       0.101366203167707048E+06,       0.101390159455080997E+06,
+        0.101413541104309363E+06,       0.101436670068180945E+06,       0.101459134145086064E+06,       0.101480579621756508E+06,       0.101500717501762701E+06,
+        0.101519330301993643E+06,       0.101536279443531355E+06,       0.101551434684382868E+06,       0.101564255195383463E+06,       0.101575422887434994E+06,
+        0.101586445548099669E+06,       0.101597902131166629E+06,       0.101610316943178666E+06,       0.101624105975331244E+06,       0.101639540620591506E+06,
+        0.101656731770743747E+06,       0.101674690803331439E+06,       0.101691335236531100E+06,       0.101707821449698851E+06,       0.101725245164068649E+06,
+        0.101743396815362881E+06,       0.101762005533747782E+06,       0.101780794703432257E+06,       0.101799566956391791E+06,       0.101816729089967106E+06,
+        0.101830810115947446E+06,       0.101843847767199652E+06,       0.101855309960108818E+06,       0.101865083082604426E+06,       0.101873349177960990E+06,
+        0.101880647099664595E+06,       0.101887932618480903E+06,       0.101897799286328358E+06,       0.101910318475203370E+06,       0.101923741945953618E+06,
+        0.101937617512615703E+06,       0.101951634884124011E+06,       0.101965709346062926E+06,       0.101980052214833602E+06,       0.101995075682068244E+06,
+        0.102012705906177565E+06,       0.102029916826673259E+06,       0.102045578980748891E+06,       0.102059048316380504E+06,       0.102069947174644665E+06,
+        0.102077684357740349E+06,       0.102082147312762972E+06,       0.102086500261915091E+06,       0.102089248935513198E+06,       0.102090698933738371E+06,
+        0.102091178364924752E+06,       0.102092701245381337E+06,       0.102093815457381104E+06,       0.102094368575754212E+06,       0.102094331459262947E+06,
+        0.102093649378548696E+06,       0.102091495160413397E+06,       0.102088077118329078E+06,       0.102085266715555787E+06,       0.102082068081696532E+06,
+        0.102078934857918081E+06,       0.102075562114887900E+06,       0.102070631820974115E+06,       0.102064438122544176E+06,       0.102059414174384161E+06,
+        0.102053827822841413E+06,       0.102047097203453392E+06,       0.102038205276517619E+06,       0.102023970080276820E+06,       0.102005255572377879E+06,
+        0.101983545280989390E+06,       0.101959239559772468E+06,       0.101934934813177606E+06,       0.101909416211695381E+06,       0.101879530216405619E+06,
+        0.101843729384204227E+06,       0.101798771374156902E+06,       0.101749131431232046E+06,       0.101696435747962270E+06,       0.101638597439857098E+06,
+        0.101576958615739393E+06,       0.101514239708325505E+06,       0.101456190833159548E+06,       0.101399554349585407E+06,       0.101340424142701784E+06,
+        0.101280446676456311E+06,       0.101219442303719290E+06,       0.101155802903883246E+06,       0.101085010925495619E+06,       0.101016127520053677E+06,
+        0.100949559692596478E+06,       0.100889898302085116E+06,       0.100844209040313392E+06,       0.100816129681629769E+06,       0.100810501379105452E+06,
+        0.100832591111220638E+06,       0.100879523722449056E+06,       0.100948063089510324E+06,       0.101031460853947981E+06,       0.101115973986060417E+06,
+        0.101184231818201646E+06,       0.101240245990651732E+06,       0.101276004337181133E+06,       0.101297693264287940E+06,       0.101316108838536718E+06,
+        0.101339338207326771E+06,       0.101364838726589573E+06,       0.101398212697034352E+06,       0.101435020262566584E+06,       0.101474120214935858E+06,
+        0.101515374742090018E+06,       0.101554913896900893E+06,       0.101585525309637247E+06,       0.101596313029333352E+06,       0.101591763310596391E+06,
+        0.101572063905601564E+06,       0.101533915795807872E+06,       0.101488864498615381E+06,       0.101440950048410057E+06,       0.101401964815710235E+06,
+        0.101362939393266570E+06,       0.101319118725317487E+06,       0.101264253224874032E+06,       0.101194604583161839E+06,       0.101119529697804493E+06,
+        0.101043148821796305E+06,       0.100969817218776385E+06,       0.100904222807714512E+06,       0.100845424566366739E+06,       0.100792297539129795E+06,
+        0.100746429506127941E+06,       0.100716119483396033E+06,       0.100699086889567552E+06,       0.100699855109205411E+06,       0.100707310375888119E+06,
+        0.100716570575528633E+06,       0.100720007898216936E+06,       0.100714797932772417E+06,       0.100695727134459230E+06,       0.100662985850684985E+06,
+        0.100623495462979961E+06,       0.100579571082265902E+06,       0.100528287659914175E+06,       0.100483047690553038E+06,       0.100446858129451386E+06,
+        0.100420432087088702E+06,       0.100404117469529898E+06,       0.100397105480157465E+06,       0.100403234638665162E+06,       0.100415020179178769E+06,
+        0.100433067114222082E+06,       0.100451452530888302E+06,       0.100468854497717490E+06,       0.100484113018387754E+06,       0.100496513635322510E+06,
+        0.100504396642556661E+06,       0.100514796346128511E+06,       0.100524493045942218E+06,       0.100532404153307187E+06,       0.100538289704171490E+06,
+        0.101276336252575435E+06,       0.101298080414544456E+06,       0.101321469561098274E+06,       0.101347127563797287E+06,       0.101375017595738012E+06,
+        0.101402741686854177E+06,       0.101429372639699533E+06,       0.101455094154428705E+06,       0.101479936738935212E+06,       0.101503527247806051E+06,
+        0.101525558424067625E+06,       0.101545795970329476E+06,       0.101564086253569083E+06,       0.101579860400036196E+06,       0.101592656313919491E+06,
+        0.101604222243081458E+06,       0.101615370617936293E+06,       0.101626717204329048E+06,       0.101638824013794816E+06,       0.101652144675515985E+06,
+        0.101666986413953739E+06,       0.101683491567268982E+06,       0.101699730410034434E+06,       0.101715308981035720E+06,       0.101731361440654102E+06,
+        0.101748589449732390E+06,       0.101766824698764540E+06,       0.101785841910313233E+06,       0.101805411629659066E+06,       0.101825381837012450E+06,
+        0.101846839764007193E+06,       0.101867081140515147E+06,       0.101882747001865355E+06,       0.101896903928888263E+06,       0.101909362288120537E+06,
+        0.101920245934517079E+06,       0.101930058238641242E+06,       0.101941637442764200E+06,       0.101954785426383867E+06,       0.101968215450878924E+06,
+        0.101984710778129607E+06,       0.102001549965592465E+06,       0.102018275841846422E+06,       0.102034683222590960E+06,       0.102052401989689286E+06,
+        0.102069645673240069E+06,       0.102086007650836211E+06,       0.102103768116502732E+06,       0.102121127630333416E+06,       0.102135973777942898E+06,
+        0.102147987937177197E+06,       0.102156601874315427E+06,       0.102161672760610920E+06,       0.102163612354316181E+06,       0.102165768392921964E+06,
+        0.102167214431077227E+06,       0.102169260247518920E+06,       0.102170746287005837E+06,       0.102171480626503515E+06,       0.102171269145651808E+06,
+        0.102170214520413967E+06,       0.102167256562754847E+06,       0.102162479386098232E+06,       0.102158371150627951E+06,       0.102155244448894475E+06,
+        0.102152875264177637E+06,       0.102149492287714515E+06,       0.102145495391175835E+06,       0.102139392366010521E+06,       0.102131234162350753E+06,
+        0.102121845495369198E+06,       0.102114444604303775E+06,       0.102106462190456019E+06,       0.102096364075651625E+06,       0.102082958297694466E+06,
+        0.102064065966768365E+06,       0.102041420899050965E+06,       0.102016297892142000E+06,       0.101989261194259234E+06,       0.101963193901333740E+06,
+        0.101934697827006079E+06,       0.101902018630394974E+06,       0.101863893013675159E+06,       0.101820477410193009E+06,       0.101774528513823985E+06,
+        0.101724002882111308E+06,       0.101665763047983230E+06,       0.101603648801794363E+06,       0.101540096977050402E+06,       0.101478947206942044E+06,
+        0.101415470097827929E+06,       0.101351609294201058E+06,       0.101289469642166499E+06,       0.101226537327552069E+06,       0.101158605139549531E+06,
+        0.101091671283985226E+06,       0.101026501778518956E+06,       0.100963906622713315E+06,       0.100912235109733156E+06,       0.100875156448926034E+06,
+        0.100858092199168052E+06,       0.100869196724643829E+06,       0.100906258192389359E+06,       0.100966643545000639E+06,       0.101044871026198045E+06,
+        0.101126128294873750E+06,       0.101195519846174895E+06,       0.101255659962385485E+06,       0.101297057174446716E+06,       0.101328131549875659E+06,
+        0.101358621176643224E+06,       0.101392239138290606E+06,       0.101427359701943147E+06,       0.101468500213009858E+06,       0.101510703720686288E+06,
+        0.101550908563824967E+06,       0.101587166287520682E+06,       0.101619760493459311E+06,       0.101640375989610111E+06,       0.101647164822681414E+06,
+        0.101640476796716728E+06,       0.101620225665346763E+06,       0.101589549071868416E+06,       0.101551044697311809E+06,       0.101511563682290900E+06,
+        0.101475939268223781E+06,       0.101437438003792078E+06,       0.101392805212183681E+06,       0.101332702985176016E+06,       0.101262976832194923E+06,
+        0.101186444126810515E+06,       0.101108333464266703E+06,       0.101034512676034472E+06,       0.100963849818957518E+06,       0.100898562106253885E+06,
+        0.100842056459041982E+06,       0.100798749608423153E+06,       0.100767148703609448E+06,       0.100745027122654850E+06,       0.100731425417328996E+06,
+        0.100731821012642424E+06,       0.100734592849697350E+06,       0.100733986756515151E+06,       0.100727026999971698E+06,       0.100711618349869153E+06,
+        0.100683470368124676E+06,       0.100640250766840603E+06,       0.100586314437398818E+06,       0.100534961959011474E+06,       0.100490642055552060E+06,
+        0.100456264076438296E+06,       0.100432289810027520E+06,       0.100419632142970615E+06,       0.100423645734029778E+06,       0.100432024957258123E+06,
+        0.100442709528904365E+06,       0.100454138069834065E+06,       0.100469282754753091E+06,       0.100483179206656147E+06,       0.100494317659240289E+06,
+        0.100501048475271105E+06,       0.100503737147053136E+06,       0.100502939624753810E+06,       0.100506864511892840E+06,       0.100510205922212830E+06,
+        0.100511985008099888E+06,       0.101269395817640194E+06,       0.101293433370600033E+06,       0.101320709064215349E+06,       0.101350720216622271E+06,
+        0.101381363474586935E+06,       0.101411901774678990E+06,       0.101441702408660596E+06,       0.101470286272251309E+06,       0.101497612121933402E+06,
+        0.101523409436511720E+06,       0.101547349710601979E+06,       0.101569178391354450E+06,       0.101588382552830284E+06,       0.101604424454005639E+06,
+        0.101617806496970152E+06,       0.101629009202247544E+06,       0.101639790736640862E+06,       0.101650653799515901E+06,       0.101662034467563892E+06,
+        0.101674429962589624E+06,       0.101688184881771667E+06,       0.101701776789907686E+06,       0.101715632368359467E+06,       0.101731005396025357E+06,
+        0.101747619021182472E+06,       0.101764475149160600E+06,       0.101782565451806455E+06,       0.101801692572504733E+06,       0.101821649291101741E+06,
+        0.101844372908615100E+06,       0.101868013490669473E+06,       0.101890926735153276E+06,       0.101912734436730447E+06,       0.101930521333358061E+06,
+        0.101945955049482625E+06,       0.101959618341155976E+06,       0.101973842306752718E+06,       0.101990092943988522E+06,       0.102006492234429417E+06,
+        0.102022981199823858E+06,       0.102039845835770568E+06,       0.102059553276874620E+06,       0.102079331788742449E+06,       0.102099902964415654E+06,
+        0.102120532959564909E+06,       0.102140448801236460E+06,       0.102159255793075747E+06,       0.102176879448503649E+06,       0.102194365868866342E+06,
+        0.102211106097444455E+06,       0.102224803244153038E+06,       0.102234823789642047E+06,       0.102240968923527806E+06,       0.102243570541519104E+06,
+        0.102243519688579676E+06,       0.102244750868611838E+06,       0.102246759472131700E+06,       0.102247988131721504E+06,       0.102248209161490959E+06,
+        0.102247170632681489E+06,       0.102243247319650705E+06,       0.102236753031268512E+06,       0.102230982493940493E+06,       0.102226187707310237E+06,
+        0.102222666096639834E+06,       0.102220567141386651E+06,       0.102219855956292071E+06,       0.102215511479397683E+06,       0.102208434908867741E+06,
+        0.102198721169081880E+06,       0.102186789184960857E+06,       0.102174609249495770E+06,       0.102164550205667154E+06,       0.102152502370517235E+06,
+        0.102137501608386214E+06,       0.102118919702411848E+06,       0.102095889999392573E+06,       0.102070100404917495E+06,       0.102041997958624415E+06,
+        0.102012090612610089E+06,       0.101983710969351829E+06,       0.101953137519082840E+06,       0.101920734120792738E+06,       0.101883717982373681E+06,
+        0.101842973734119500E+06,       0.101798428245916861E+06,       0.101747102066966778E+06,       0.101687602338869881E+06,       0.101624664318831565E+06,
+        0.101559707946739305E+06,       0.101491658640950249E+06,       0.101420567276357397E+06,       0.101354355882096454E+06,       0.101289435543346961E+06,
+        0.101224098024003702E+06,       0.101159952737485408E+06,       0.101097956680038245E+06,       0.101035227047009626E+06,       0.100981546520210177E+06,
+        0.100939244847484995E+06,       0.100914786575781181E+06,       0.100915867157493747E+06,       0.100942559164277671E+06,       0.100993021366280096E+06,
+        0.101062207385378511E+06,       0.101136754321606641E+06,       0.101205153055716102E+06,       0.101267549676815237E+06,       0.101315566331653798E+06,
+        0.101356986952566978E+06,       0.101400109049254897E+06,       0.101444047042664242E+06,       0.101488513133860251E+06,       0.101534593023339607E+06,
+        0.101578862893253303E+06,       0.101617989104461085E+06,       0.101651469070145307E+06,       0.101676676962902973E+06,       0.101688426206951568E+06,
+        0.101690699198194692E+06,       0.101681585082600272E+06,       0.101660802224054729E+06,       0.101632322368388574E+06,       0.101602214382015110E+06,
+        0.101577248018812563E+06,       0.101546577483431887E+06,       0.101509347660459607E+06,       0.101460277851145336E+06,       0.101400695177468675E+06,
+        0.101333061941295062E+06,       0.101259893373003069E+06,       0.101185498750814251E+06,       0.101111060613673137E+06,       0.101038806163680754E+06,
+        0.100970853556921851E+06,       0.100913205537255504E+06,       0.100868081185120318E+06,       0.100831661076531760E+06,       0.100803490881640522E+06,
+        0.100782858759036229E+06,       0.100767010800255986E+06,       0.100760517927946479E+06,       0.100755313595541767E+06,       0.100745011420950410E+06,
+        0.100727337942231010E+06,       0.100696437123156371E+06,       0.100650083823098379E+06,       0.100597278983266224E+06,       0.100548413676936747E+06,
+        0.100507765427222563E+06,       0.100477948430878227E+06,       0.100463614942480534E+06,       0.100466404104801695E+06,       0.100473340681007379E+06,
+        0.100482742216284692E+06,       0.100492637659898319E+06,       0.100501306119762710E+06,       0.100508155310289090E+06,       0.100517896956254641E+06,
+        0.100523967020314361E+06,       0.100525551437862276E+06,       0.100522692726944748E+06,       0.100516008939190593E+06,       0.100506617021169775E+06,
+        0.100504130401290677E+06,       0.100500855757604397E+06,       0.101259195015618316E+06,       0.101287394131248599E+06,       0.101318624387393094E+06,
+        0.101351388311065471E+06,       0.101384848445848693E+06,       0.101418230695586331E+06,       0.101450864090695264E+06,       0.101482215379592511E+06,
+        0.101512000328888942E+06,       0.101540081556911420E+06,       0.101565958007626774E+06,       0.101589239793549044E+06,       0.101609354590231524E+06,
+        0.101626245425942194E+06,       0.101640116415258730E+06,       0.101651384047841973E+06,       0.101660624537901342E+06,       0.101669864682349900E+06,
+        0.101680046518619303E+06,       0.101691016789836227E+06,       0.101701600972581538E+06,       0.101712344116073305E+06,       0.101724596034016693E+06,
+        0.101738626214170567E+06,       0.101754578760972465E+06,       0.101772464174383247E+06,       0.101790289256249525E+06,       0.101809225095436283E+06,
+        0.101831409086778760E+06,       0.101855713865937665E+06,       0.101880304248738481E+06,       0.101904708267321548E+06,       0.101928659429272666E+06,
+        0.101952215895369998E+06,       0.101973129343184191E+06,       0.101990492819853054E+06,       0.102009155453432861E+06,       0.102028626658851339E+06,
+        0.102048465714061036E+06,       0.102068480817810836E+06,       0.102088846460710702E+06,       0.102110232566220016E+06,       0.102133295641766570E+06,
+        0.102157356921516912E+06,       0.102181314870907911E+06,       0.102204374004590238E+06,       0.102226000444488978E+06,       0.102246017656184413E+06,
+        0.102265607213167954E+06,       0.102282589184103534E+06,       0.102298432423255334E+06,       0.102310352702715958E+06,       0.102317999706446251E+06,
+        0.102321598850661234E+06,       0.102323515138576258E+06,       0.102323197704490987E+06,       0.102322212878332677E+06,       0.102323063816814887E+06,
+        0.102322646091264614E+06,       0.102319439183542258E+06,       0.102312970911412354E+06,       0.102304997794601848E+06,       0.102296841478971372E+06,
+        0.102291418130089238E+06,       0.102288360395478667E+06,       0.102288552237265947E+06,       0.102287701703575425E+06,       0.102284538846590702E+06,
+        0.102276897495121520E+06,       0.102265740813761135E+06,       0.102252134571836228E+06,       0.102237131022390793E+06,       0.102221272996986561E+06,
+        0.102206507054624482E+06,       0.102189132554294789E+06,       0.102168602609417649E+06,       0.102145544389345145E+06,       0.102118566149667124E+06,
+        0.102089083952633140E+06,       0.102057798140960163E+06,       0.102026969995698295E+06,       0.101997794023706476E+06,       0.101966743922712252E+06,
+        0.101933057167765714E+06,       0.101896592945729586E+06,       0.101857371791885336E+06,       0.101815607416803119E+06,       0.101763023383776948E+06,
+        0.101702407436462090E+06,       0.101635116047538351E+06,       0.101562945833011370E+06,       0.101485822606547168E+06,       0.101411005039628857E+06,
+        0.101339835091662317E+06,       0.101272689532459044E+06,       0.101210368076346276E+06,       0.101154473004817381E+06,       0.101097829928473817E+06,
+        0.101048482059940754E+06,       0.101007048910648111E+06,       0.100979473833055905E+06,       0.100973447727585182E+06,       0.100990584221201716E+06,
+        0.101029960997994902E+06,       0.101087951257948895E+06,       0.101153695183268181E+06,       0.101219018003879406E+06,       0.101282293838312820E+06,
+        0.101338465984178547E+06,       0.101391368230947162E+06,       0.101446772222011277E+06,       0.101500085973176334E+06,       0.101550853250171887E+06,
+        0.101598573456663202E+06,       0.101641988898670184E+06,       0.101679214186169236E+06,       0.101710098564568776E+06,       0.101732780885386266E+06,
+        0.101743179226637279E+06,       0.101740055966295447E+06,       0.101722994425650759E+06,       0.101700469255730888E+06,       0.101674123165238838E+06,
+        0.101653160060864204E+06,       0.101631596453806415E+06,       0.101607075787893336E+06,       0.101574486424828559E+06,       0.101526976419999381E+06,
+        0.101469612332252946E+06,       0.101404225279481514E+06,       0.101336714868594907E+06,       0.101267916935403031E+06,       0.101195492908750399E+06,
+        0.101123687793417601E+06,       0.101058751346724224E+06,       0.101000171416406578E+06,       0.100947653236097554E+06,       0.100904324965127365E+06,
+        0.100869022485961759E+06,       0.100838631774334179E+06,       0.100814997040174785E+06,       0.100796371893838630E+06,       0.100782994420463059E+06,
+        0.100767931078048772E+06,       0.100738709347425858E+06,       0.100699551218149616E+06,       0.100657848886243373E+06,       0.100613930496747955E+06,
+        0.100570328091677089E+06,       0.100536417956577148E+06,       0.100522106220241680E+06,       0.100523981788664518E+06,       0.100534576173254580E+06,
+        0.100544607428678122E+06,       0.100555100707554739E+06,       0.100564477570051735E+06,       0.100571044680449282E+06,       0.100573984997784108E+06,
+        0.100574098036419746E+06,       0.100574969682196417E+06,       0.100570985693230745E+06,       0.100562235725965831E+06,       0.100549403090203457E+06,
+        0.100533663303323410E+06,       0.100514985690890928E+06,       0.100501506969102309E+06,       0.101247028543607215E+06,       0.101279000272323727E+06,
+        0.101313044900483452E+06,       0.101348706117229129E+06,       0.101385099864543183E+06,       0.101421406335684835E+06,       0.101456908730823867E+06,
+        0.101491027169870344E+06,       0.101523346965489472E+06,       0.101553641131603319E+06,       0.101581591041353255E+06,       0.101606456037034135E+06,
+        0.101627802489960915E+06,       0.101645553091339185E+06,       0.101659871959589625E+06,       0.101671125963614424E+06,       0.101679833672676948E+06,
+        0.101686600287344059E+06,       0.101693249899754504E+06,       0.101700828771449567E+06,       0.101708214676399468E+06,       0.101716786788727914E+06,
+        0.101726994188702083E+06,       0.101739189978545895E+06,       0.101753597010140846E+06,       0.101770294478413707E+06,       0.101789229323241438E+06,
+        0.101810439881563492E+06,       0.101833551125124432E+06,       0.101857745342370516E+06,       0.101882520275840274E+06,       0.101907489508364233E+06,
+        0.101932461599410264E+06,       0.101957552146214075E+06,       0.101983305456973438E+06,       0.102008579834297911E+06,       0.102030494060992147E+06,
+        0.102053548115608966E+06,       0.102077104427164624E+06,       0.102100783210934751E+06,       0.102124584361851768E+06,       0.102151618960978216E+06,
+        0.102178487299050277E+06,       0.102203837934088209E+06,       0.102231789811787370E+06,       0.102258565924026567E+06,       0.102283435612743153E+06,
+        0.102308168911264584E+06,       0.102331519967324959E+06,       0.102351306090243161E+06,       0.102367344163488393E+06,       0.102380956720203612E+06,
+        0.102390540926741916E+06,       0.102396561280422888E+06,       0.102399644414793191E+06,       0.102399967479044542E+06,       0.102398097050173761E+06,
+        0.102394877934586664E+06,       0.102392579382061362E+06,       0.102387437885771593E+06,       0.102380474134807795E+06,       0.102372089234619867E+06,
+        0.102363087167973557E+06,       0.102355720695108947E+06,       0.102355336216227777E+06,       0.102355244528026058E+06,       0.102353863384518510E+06,
+        0.102349945815737563E+06,       0.102342442703922468E+06,       0.102329934370864139E+06,       0.102314612359457431E+06,       0.102297370131901000E+06,
+        0.102278388120427626E+06,       0.102257491551240819E+06,       0.102236307907230104E+06,       0.102213097347429662E+06,       0.102187800432568954E+06,
+        0.102160229919730293E+06,       0.102129097981842890E+06,       0.102096889363146300E+06,       0.102063827052134482E+06,       0.102031184486610946E+06,
+        0.101999264622467439E+06,       0.101966221591490219E+06,       0.101931754343580265E+06,       0.101897700536754972E+06,       0.101861993529889558E+06,
+        0.101819636716650479E+06,       0.101763615901241341E+06,       0.101697976370488861E+06,       0.101620393736143524E+06,       0.101535102872161384E+06,
+        0.101449253069692393E+06,       0.101374420264238244E+06,       0.101306501858255855E+06,       0.101247778577939956E+06,       0.101198381473636808E+06,
+        0.101152064836353820E+06,       0.101110344624142366E+06,       0.101075281561938828E+06,       0.101049407554255304E+06,       0.101040768998780331E+06,
+        0.101052199471517510E+06,       0.101082392815890635E+06,       0.101129144157533199E+06,       0.101184092780294726E+06,       0.101243772906750455E+06,
+        0.101307121999288836E+06,       0.101369991062098430E+06,       0.101433698297000723E+06,       0.101498903828178067E+06,       0.101560474018943947E+06,
+        0.101615857050411636E+06,       0.101665138596523073E+06,       0.101705590047241931E+06,       0.101738943786932854E+06,       0.101767114003134644E+06,
+        0.101789192730629773E+06,       0.101799147989736230E+06,       0.101794735430608300E+06,       0.101777146397531964E+06,       0.101750372193384130E+06,
+        0.101723141667504169E+06,       0.101702833712477848E+06,       0.101682678205011733E+06,       0.101660302359832262E+06,       0.101630633216063026E+06,
+        0.101590584748240784E+06,       0.101537939783765964E+06,       0.101477184750419154E+06,       0.101412613988421668E+06,       0.101346432956553763E+06,
+        0.101280354991399392E+06,       0.101215950742003886E+06,       0.101152407700542390E+06,       0.101091630971862964E+06,       0.101034381306262483E+06,
+        0.100980581565512359E+06,       0.100932607474756849E+06,       0.100894526231033058E+06,       0.100863524006721316E+06,       0.100837940986693153E+06,
+        0.100815616712752075E+06,       0.100783831314269482E+06,       0.100747340055464098E+06,       0.100708359519305974E+06,       0.100669700349442544E+06,
+        0.100634134123292621E+06,       0.100602055798299742E+06,       0.100591037034284673E+06,       0.100590664657868474E+06,       0.100599127748830913E+06,
+        0.100614596189110918E+06,       0.100634150489947802E+06,       0.100646345748706677E+06,       0.100655865724535965E+06,       0.100661116257080008E+06,
+        0.100661028163947834E+06,       0.100655523835145024E+06,       0.100646490601253885E+06,       0.100636711851892294E+06,       0.100621894936014534E+06,
+        0.100602810704563395E+06,       0.100576368488764041E+06,       0.100548286166395032E+06,       0.100522977180969814E+06,       0.101228903510937074E+06,
+        0.101265781795862422E+06,       0.101303509185958625E+06,       0.101342284425688282E+06,       0.101381796177970391E+06,       0.101421170386188518E+06,
+        0.101459636817675681E+06,       0.101496562449942183E+06,       0.101531479594885182E+06,       0.101564960000747014E+06,       0.101594803080993937E+06,
+        0.101621355790812595E+06,       0.101644027594565501E+06,       0.101662677874236993E+06,       0.101677441926593165E+06,       0.101688651352830973E+06,
+        0.101696785059940390E+06,       0.101702406683447451E+06,       0.101704728868073435E+06,       0.101705248359237783E+06,       0.101710033061244059E+06,
+        0.101715986265950589E+06,       0.101723653592966657E+06,       0.101733480291010681E+06,       0.101745772459652580E+06,       0.101760677660607515E+06,
+        0.101780220410703594E+06,       0.101803075598452182E+06,       0.101826488604444239E+06,       0.101849820362239523E+06,       0.101873892351949500E+06,
+        0.101898378960095564E+06,       0.101923130766489805E+06,       0.101948518897807691E+06,       0.101975696258303404E+06,       0.102004061929304342E+06,
+        0.102033460145040677E+06,       0.102061651327409054E+06,       0.102089414327740989E+06,       0.102117077133701037E+06,       0.102147883501053424E+06,
+        0.102180718015203005E+06,       0.102212493723892243E+06,       0.102242559046992334E+06,       0.102271049350391899E+06,       0.102300915058795246E+06,
+        0.102331227250506359E+06,       0.102361003675242988E+06,       0.102387797529886448E+06,       0.102410738749007287E+06,       0.102429543001075872E+06,
+        0.102444601309541205E+06,       0.102455934113666241E+06,       0.102463826248762096E+06,       0.102468461440316110E+06,       0.102469870975073049E+06,
+        0.102468446450288320E+06,       0.102464798290121791E+06,       0.102458449322550092E+06,       0.102451735051873286E+06,       0.102444849067868476E+06,
+        0.102436636367539046E+06,       0.102428988993985171E+06,       0.102425331914020266E+06,       0.102421620005855337E+06,       0.102419560924305013E+06,
+        0.102417115927208128E+06,       0.102411283378863518E+06,       0.102401124644854805E+06,       0.102388294546935547E+06,       0.102372130138911380E+06,
+        0.102352872703988251E+06,       0.102330900792506814E+06,       0.102305906692453034E+06,       0.102278836660343848E+06,       0.102251891886031619E+06,
+        0.102223352000414103E+06,       0.102193067106830058E+06,       0.102161078903831076E+06,       0.102125912821954276E+06,       0.102089510678556544E+06,
+        0.102052507421496150E+06,       0.102015228902546209E+06,       0.101978931284532373E+06,       0.101944546111379605E+06,       0.101912474602996255E+06,
+        0.101881505541306557E+06,       0.101847220983536259E+06,       0.101796545763435774E+06,       0.101731194445780915E+06,       0.101655521374345393E+06,
+        0.101570254785904996E+06,       0.101481522317187802E+06,       0.101401331116195521E+06,       0.101332141668882890E+06,       0.101273993470810659E+06,
+        0.101228638656778901E+06,       0.101190604276845741E+06,       0.101158196197344718E+06,       0.101133936056759660E+06,       0.101117981664703751E+06,
+        0.101116933850947476E+06,       0.101131399795691948E+06,       0.101160604644423380E+06,       0.101201518443580746E+06,       0.101248903707713456E+06,
+        0.101300592974865489E+06,       0.101357214090897702E+06,       0.101418441744321666E+06,       0.101485557443350626E+06,       0.101555445746166064E+06,
+        0.101621303501475879E+06,       0.101679228518906544E+06,       0.101728241686716501E+06,       0.101766854072509333E+06,       0.101798436487011495E+06,
+        0.101826906634104991E+06,       0.101847291990324695E+06,       0.101856878275200172E+06,       0.101852227620230362E+06,       0.101834698267214306E+06,
+        0.101809239675292964E+06,       0.101781969547875371E+06,       0.101755152512939356E+06,       0.101732931589822008E+06,       0.101712653074247995E+06,
+        0.101684830999865546E+06,       0.101647239704296619E+06,       0.101599826041378212E+06,       0.101544653396053778E+06,       0.101483464700333992E+06,
+        0.101420696082338764E+06,       0.101361355157000173E+06,       0.101303077019503457E+06,       0.101242949922489031E+06,       0.101180470229611776E+06,
+        0.101117365765681796E+06,       0.101054059738264114E+06,       0.100995066688862426E+06,       0.100946512981860345E+06,       0.100908291761953325E+06,
+        0.100873905402216697E+06,       0.100835045455127693E+06,       0.100798873170272855E+06,       0.100762695696108858E+06,       0.100726025871425081E+06,
+        0.100692734909454986E+06,       0.100668902864702948E+06,       0.100663213502720391E+06,       0.100664621390201341E+06,       0.100671374502519597E+06,
+        0.100685680453359950E+06,       0.100705798123986984E+06,       0.100728995575579524E+06,       0.100751658112675097E+06,       0.100762519462763623E+06,
+        0.100767027529124854E+06,       0.100764553224004907E+06,       0.100755187738630775E+06,       0.100739605979863540E+06,       0.100720551089520799E+06,
+        0.100698313533178705E+06,       0.100666865056198847E+06,       0.100634031483894869E+06,       0.100601785153826728E+06,       0.100571987820731039E+06,
+        0.101206374045435979E+06,       0.101245886159229500E+06,       0.101288633787391896E+06,       0.101331822184275137E+06,       0.101374720391458119E+06,
+        0.101417383823794662E+06,       0.101458981013573735E+06,       0.101498818874093005E+06,       0.101538685205643225E+06,       0.101575422468180957E+06,
+        0.101607594064004836E+06,       0.101634787525358639E+06,       0.101658391829702683E+06,       0.101677992927276675E+06,       0.101693216382147584E+06,
+        0.101704372381742840E+06,       0.101711917535928253E+06,       0.101714961207000641E+06,       0.101714465004361307E+06,       0.101712311040969114E+06,
+        0.101709673671424040E+06,       0.101711218999391320E+06,       0.101715783535561670E+06,       0.101722657082666818E+06,       0.101732238893442816E+06,
+        0.101747062236834958E+06,       0.101766365174287086E+06,       0.101787109475394507E+06,       0.101808925705709073E+06,       0.101831553485340701E+06,
+        0.101854101136956699E+06,       0.101876977318564983E+06,       0.101900071328279475E+06,       0.101924414875452247E+06,       0.101951462468272264E+06,
+        0.101980975232741199E+06,       0.102012836826491402E+06,       0.102047258491401968E+06,       0.102083474297558190E+06,       0.102117469380506620E+06,
+        0.102154658530511195E+06,       0.102192659983700083E+06,       0.102229894335694480E+06,       0.102265384438205918E+06,       0.102298947455958070E+06,
+        0.102332733340180333E+06,       0.102366161911789881E+06,       0.102400223366988168E+06,       0.102430989231899657E+06,       0.102457385343324306E+06,
+        0.102478953671150099E+06,       0.102497140263958892E+06,       0.102511039792962809E+06,       0.102520299291871444E+06,       0.102526846630820248E+06,
+        0.102529945588383314E+06,       0.102529752833756676E+06,       0.102527108906249603E+06,       0.102521410242623388E+06,       0.102513405849115865E+06,
+        0.102504764193898140E+06,       0.102498120743343170E+06,       0.102494756241843366E+06,       0.102491412904970945E+06,       0.102487349910826408E+06,
+        0.102482003045019752E+06,       0.102474975478072651E+06,       0.102465362858837878E+06,       0.102453624922867719E+06,       0.102439388282147716E+06,
+        0.102422313370157048E+06,       0.102401857750208626E+06,       0.102377162061003954E+06,       0.102349188460773526E+06,       0.102318424237125233E+06,
+        0.102285363297180986E+06,       0.102252385208010586E+06,       0.102218029776633513E+06,       0.102181810380545387E+06,       0.102143591228429039E+06,
+        0.102102341867038209E+06,       0.102057770995654748E+06,       0.102012593759546347E+06,       0.101970748503609808E+06,       0.101933725108693834E+06,
+        0.101900789684666524E+06,       0.101867979870800904E+06,       0.101834235978935918E+06,       0.101794954568116285E+06,       0.101739484665823096E+06,
+        0.101671789500483821E+06,       0.101593418617286006E+06,       0.101506698290483502E+06,       0.101422237896336897E+06,       0.101350833220772416E+06,
+        0.101290575286891341E+06,       0.101248402171152557E+06,       0.101218529092999917E+06,       0.101197447450399108E+06,       0.101187612570890138E+06,
+        0.101185871864261528E+06,       0.101196499134288402E+06,       0.101218353571942265E+06,       0.101249194623964548E+06,       0.101286372345386742E+06,
+        0.101326464875508391E+06,       0.101369986766969960E+06,       0.101419749853660280E+06,       0.101476722498559480E+06,       0.101542829739890207E+06,
+        0.101612522924097197E+06,       0.101678721249810798E+06,       0.101737575823144638E+06,       0.101785395492746917E+06,       0.101823368561408701E+06,
+        0.101856014056084430E+06,       0.101884313206989173E+06,       0.101903695929922687E+06,       0.101912969317636380E+06,       0.101908832298462992E+06,
+        0.101892237038585794E+06,       0.101866203497664581E+06,       0.101837081196005645E+06,       0.101809606048398258E+06,       0.101786840568731568E+06,
+        0.101762564033379982E+06,       0.101734680154915579E+06,       0.101696592635540685E+06,       0.101650662453849189E+06,       0.101599162120752633E+06,
+        0.101544343001196743E+06,       0.101488647544765059E+06,       0.101433089123172278E+06,       0.101377125096785036E+06,       0.101320042947392227E+06,
+        0.101256674805424394E+06,       0.101187987297748215E+06,       0.101120641997896339E+06,       0.101056247927954246E+06,       0.100996331972370142E+06,
+        0.100943232428022544E+06,       0.100895353842840079E+06,       0.100852555312220196E+06,       0.100815337064243067E+06,       0.100783799781542155E+06,
+        0.100753868748835012E+06,       0.100736637044447663E+06,       0.100730650096307727E+06,       0.100733232093861763E+06,       0.100743913291446443E+06,
+        0.100758835470579754E+06,       0.100778259316407013E+06,       0.100802567061591370E+06,       0.100828283762383522E+06,       0.100855135515023372E+06,
+        0.100877691529341333E+06,       0.100882602938691591E+06,       0.100878787688210650E+06,       0.100866582130667157E+06,       0.100846949291204379E+06,
+        0.100815418882725819E+06,       0.100780247866813195E+06,       0.100745087245795497E+06,       0.100709396490561645E+06,       0.100675020472311327E+06,
+        0.100643622948665085E+06,       0.101179250397845899E+06,       0.101221149498052953E+06,       0.101266816356343159E+06,       0.101315335097978430E+06,
+        0.101363838550262313E+06,       0.101410108301517408E+06,       0.101455090720967710E+06,       0.101501448789654576E+06,       0.101545139345543692E+06,
+        0.101584741389399278E+06,       0.101619452976458153E+06,       0.101648772604086349E+06,       0.101672509578882498E+06,       0.101691865395895249E+06,
+        0.101707555892752804E+06,       0.101718643945821881E+06,       0.101724156365132570E+06,       0.101724941937858879E+06,       0.101722568702130273E+06,
+        0.101718069834871334E+06,       0.101712578971246767E+06,       0.101707223787895346E+06,       0.101704839789861668E+06,       0.101708104689497137E+06,
+        0.101716865742578157E+06,       0.101731053443752840E+06,       0.101746952161869922E+06,       0.101764257279303914E+06,       0.101782706182959490E+06,
+        0.101802123848941148E+06,       0.101822482313672357E+06,       0.101842936616784311E+06,       0.101860934973268697E+06,       0.101882854305976114E+06,
+        0.101908552344231415E+06,       0.101937813400383588E+06,       0.101970499454458186E+06,       0.102006741063404974E+06,       0.102048298491096837E+06,
+        0.102094559383243701E+06,       0.102138864116678858E+06,       0.102182980858368159E+06,       0.102226517702417070E+06,       0.102268076174545422E+06,
+        0.102309052474061144E+06,       0.102352381321886001E+06,       0.102391102131696549E+06,       0.102425199358256839E+06,       0.102458541492672259E+06,
+        0.102488862618142084E+06,       0.102514290917361213E+06,       0.102535791702452596E+06,       0.102552503476764061E+06,       0.102564543232835902E+06,
+        0.102572720164328770E+06,       0.102578198051091356E+06,       0.102580323990135614E+06,       0.102579265394634727E+06,       0.102574962647335808E+06,
+        0.102568059504060235E+06,       0.102560319977754334E+06,       0.102556118504191676E+06,       0.102553057067685237E+06,       0.102550069919232395E+06,
+        0.102545676460258372E+06,       0.102538438321503912E+06,       0.102526558414006213E+06,       0.102512331043456594E+06,       0.102498934035030790E+06,
+        0.102483367837719314E+06,       0.102465528571415576E+06,       0.102444019300123240E+06,       0.102417539855634386E+06,       0.102386941153851396E+06,
+        0.102352803854769852E+06,       0.102315908735629360E+06,       0.102276253891919623E+06,       0.102235698643740441E+06,       0.102193754813942534E+06,
+        0.102149197092732255E+06,       0.102100466547888893E+06,       0.102048387340808171E+06,       0.101995636407850165E+06,       0.101944784700201388E+06,
+        0.101899202783926419E+06,       0.101857839910913841E+06,       0.101822276933475470E+06,       0.101792037001853430E+06,       0.101761456733915693E+06,
+        0.101723124817417673E+06,       0.101667540093368385E+06,       0.101602052196997916E+06,       0.101524286713149719E+06,       0.101443448254745468E+06,
+        0.101372151184877337E+06,       0.101312547429677303E+06,       0.101270741733953284E+06,       0.101245862300696550E+06,       0.101237403284129323E+06,
+        0.101240955267019526E+06,       0.101253727619962054E+06,       0.101276647528408124E+06,       0.101307289777398546E+06,       0.101342096503173772E+06,
+        0.101377440256415284E+06,       0.101410859947128090E+06,       0.101445291144028568E+06,       0.101485896954639960E+06,       0.101536034363702740E+06,
+        0.101598275532425832E+06,       0.101665271864468625E+06,       0.101730455163620383E+06,       0.101789053839460757E+06,       0.101836451975671342E+06,
+        0.101875114449402914E+06,       0.101909841821580325E+06,       0.101937388731349492E+06,       0.101957316621074744E+06,       0.101965726747313485E+06,
+        0.101960066223235612E+06,       0.101941333444338321E+06,       0.101914153314528972E+06,       0.101884034639169928E+06,       0.101858023754631969E+06,
+        0.101832589987368483E+06,       0.101805510097226972E+06,       0.101772567651719524E+06,       0.101733410070028302E+06,       0.101687946616198518E+06,
+        0.101638303259297347E+06,       0.101588584508090702E+06,       0.101540424262528119E+06,       0.101488738611497931E+06,       0.101435260593399056E+06,
+        0.101375735107437940E+06,       0.101312542555417007E+06,       0.101246134029601395E+06,       0.101177277643560679E+06,       0.101109587858444022E+06,
+        0.101039831433180021E+06,       0.100972865937903305E+06,       0.100917142934489922E+06,       0.100872742649287640E+06,       0.100836992191858386E+06,
+        0.100811317083979215E+06,       0.100803167641532855E+06,       0.100798970012812904E+06,       0.100800172827859802E+06,       0.100809159254650964E+06,
+        0.100825090132632613E+06,       0.100846063732092007E+06,       0.100868925096583727E+06,       0.100895209549142979E+06,       0.100924583482422255E+06,
+        0.100954767114643226E+06,       0.100982762726865476E+06,       0.101000126944911273E+06,       0.100996312696391295E+06,       0.100980278059754797E+06,
+        0.100948675007578538E+06,       0.100912131109198177E+06,       0.100873893055713954E+06,       0.100836895686632663E+06,       0.100800840190763440E+06,
+        0.100766824999287084E+06,       0.100736390306808840E+06,       0.101147547908848283E+06,       0.101191548413107710E+06,       0.101239813004555443E+06,
+        0.101291456639815791E+06,       0.101345618815623297E+06,       0.101399848017628567E+06,       0.101452120246013321E+06,       0.101502531147260263E+06,
+        0.101549713655955595E+06,       0.101592520742368200E+06,       0.101630069264663078E+06,       0.101661769202013544E+06,       0.101687336031179409E+06,
+        0.101706783718499020E+06,       0.101720752729463624E+06,       0.101730352171304155E+06,       0.101734303682047248E+06,       0.101733803712048772E+06,
+        0.101729673880940856E+06,       0.101722933683541196E+06,       0.101714707079396278E+06,       0.101706119415995257E+06,       0.101698183703231305E+06,
+        0.101694443401773460E+06,       0.101701997679200067E+06,       0.101711622212974413E+06,       0.101722702839184887E+06,       0.101735051927557608E+06,
+        0.101748506288605597E+06,       0.101762966981866150E+06,       0.101778437616403622E+06,       0.101789127619601830E+06,       0.101803967912821841E+06,
+        0.101822592115495441E+06,       0.101845777685417066E+06,       0.101873478314957349E+06,       0.101905482242767845E+06,       0.101942888324591171E+06,
+        0.101988404530944768E+06,       0.102038702733784274E+06,       0.102092474242398283E+06,       0.102148032734040069E+06,       0.102199248899464394E+06,
+        0.102248915596860126E+06,       0.102302591874664358E+06,       0.102352656965704402E+06,       0.102397731646050539E+06,       0.102437448450124619E+06,
+        0.102472449474120032E+06,       0.102503421423363616E+06,       0.102532064367287210E+06,       0.102556777288245488E+06,       0.102576671821794167E+06,
+        0.102591572855277176E+06,       0.102602228863800672E+06,       0.102612279279788083E+06,       0.102616851593614643E+06,       0.102617893333235930E+06,
+        0.102615765691172550E+06,       0.102610441888248854E+06,       0.102607301386114821E+06,       0.102603993592939412E+06,       0.102600663908017392E+06,
+        0.102597488187445881E+06,       0.102592493791941044E+06,       0.102582466666192224E+06,       0.102569826273933562E+06,       0.102554713868615829E+06,
+        0.102537648672080177E+06,       0.102521039168448478E+06,       0.102503173475915130E+06,       0.102480635537613605E+06,       0.102452652573625455E+06,
+        0.102419350874903001E+06,       0.102382346399272821E+06,       0.102341612134553201E+06,       0.102297029075732309E+06,       0.102248948564059086E+06,
+        0.102198720030139870E+06,       0.102145758870677353E+06,       0.102088950595530157E+06,       0.102029051584965782E+06,       0.101967199226732264E+06,
+        0.101903210271600808E+06,       0.101842958311824055E+06,       0.101794271532633502E+06,       0.101756533651972539E+06,       0.101727257623922851E+06,
+        0.101703822910323244E+06,       0.101679786232533574E+06,       0.101644516695705548E+06,       0.101595106427152612E+06,       0.101536504683202511E+06,
+        0.101467865301457467E+06,       0.101405006154835806E+06,       0.101354849767181862E+06,       0.101317686662273423E+06,       0.101296595665381508E+06,
+        0.101290414819946876E+06,       0.101298257504082198E+06,       0.101319018351106934E+06,       0.101351193190044753E+06,       0.101389882715506814E+06,
+        0.101429774758297252E+06,       0.101465327153650665E+06,       0.101493697248690820E+06,       0.101519475777882981E+06,       0.101549278536429629E+06,
+        0.101589674862889879E+06,       0.101644437539602266E+06,       0.101707639653092512E+06,       0.101773446880721283E+06,       0.101832627929812195E+06,
+        0.101881326017934320E+06,       0.101922991773475122E+06,       0.101958375717528819E+06,       0.101986274837340650E+06,       0.102005491030983016E+06,
+        0.102011686815100737E+06,       0.102002038930530602E+06,       0.101979844500374034E+06,       0.101949713592872038E+06,       0.101919794688969385E+06,
+        0.101890097820657014E+06,       0.101860915631872151E+06,       0.101828511020572609E+06,       0.101792400720458652E+06,       0.101751700978283421E+06,
+        0.101705424659848417E+06,       0.101656344874022790E+06,       0.101609238060088639E+06,       0.101564980684227325E+06,       0.101522208207649019E+06,
+        0.101469412985671690E+06,       0.101412347630207965E+06,       0.101351832558558221E+06,       0.101288709894130297E+06,       0.101222062151738224E+06,
+        0.101149874038784459E+06,       0.101078002130177440E+06,       0.101009088984990114E+06,       0.100945974661293003E+06,       0.100898762938745946E+06,
+        0.100870562536964586E+06,       0.100856855516523385E+06,       0.100855450035140704E+06,       0.100864081929396765E+06,       0.100872263570757554E+06,
+        0.100886283473303847E+06,       0.100905686340654982E+06,       0.100926632293872623E+06,       0.100951268783756459E+06,       0.100980364613721176E+06,
+        0.101012594678026580E+06,       0.101045448177269616E+06,       0.101076054483113505E+06,       0.101101140326098612E+06,       0.101100763828566429E+06,
+        0.101077946327603815E+06,       0.101047158711316821E+06,       0.101011715736067359E+06,       0.100974871631289832E+06,       0.100939265943285602E+06,
+        0.100905758734950185E+06,       0.100874978764764266E+06,       0.100855175471442562E+06,       0.101111520792912168E+06,       0.101157325849907211E+06,
+        0.101207855335016298E+06,       0.101262234561872421E+06,       0.101320453238625094E+06,       0.101383611932041124E+06,       0.101446021580746979E+06,
+        0.101500639373333164E+06,       0.101551782605323038E+06,       0.101598222486408573E+06,       0.101638989420395039E+06,       0.101673403579343765E+06,
+        0.101701089807805052E+06,       0.101721974472240297E+06,       0.101735419880771398E+06,       0.101741369945130849E+06,       0.101743897808629612E+06,
+        0.101742267006478505E+06,       0.101736494037811004E+06,       0.101727612235604785E+06,       0.101716766590943007E+06,       0.101705114503249541E+06,
+        0.101695691907190470E+06,       0.101691082917827283E+06,       0.101688492565094857E+06,       0.101689693834759819E+06,       0.101694319117847946E+06,
+        0.101699984888099891E+06,       0.101706624023230441E+06,       0.101714209290037295E+06,       0.101714886189053461E+06,       0.101718477607258348E+06,
+        0.101727166805334680E+06,       0.101741942812281210E+06,       0.101762884060961267E+06,       0.101787922016469936E+06,       0.101818124304470504E+06,
+        0.101856144652932824E+06,       0.101902274632393572E+06,       0.101955219215111909E+06,       0.102013545239481187E+06,       0.102075989637765349E+06,
+        0.102141825734524129E+06,       0.102209412008951840E+06,       0.102271101455590702E+06,       0.102328905451065119E+06,       0.102380997966748007E+06,
+        0.102426592472327698E+06,       0.102466679017069036E+06,       0.102502492265674373E+06,       0.102531828163015132E+06,       0.102557693337524877E+06,
+        0.102581562159738140E+06,       0.102599817594232780E+06,       0.102617360456048831E+06,       0.102630533755776734E+06,       0.102638413398652745E+06,
+        0.102641585059017671E+06,       0.102641643207641609E+06,       0.102639909103140890E+06,       0.102637870663539637E+06,       0.102635390209430159E+06,
+        0.102632452553768846E+06,       0.102629055188468876E+06,       0.102622883797323870E+06,       0.102613396703866238E+06,       0.102601167982128070E+06,
+        0.102586228500797864E+06,       0.102570641502416736E+06,       0.102554342163336842E+06,       0.102534088219572732E+06,       0.102511041429401579E+06,
+        0.102481963706129696E+06,       0.102447121630716501E+06,       0.102407091340582192E+06,       0.102362401740888643E+06,       0.102313427305605088E+06,
+        0.102259555941640690E+06,       0.102201038299707958E+06,       0.102138783904224241E+06,       0.102073015852343407E+06,       0.102003417942998523E+06,
+        0.101925865118624715E+06,       0.101850155355117560E+06,       0.101780650482480312E+06,       0.101721528392427077E+06,       0.101678592950691062E+06,
+        0.101649600593305571E+06,       0.101630406458717945E+06,       0.101617445713840047E+06,       0.101603733747246617E+06,       0.101577149951594518E+06,
+        0.101547743780961551E+06,       0.101507738128132827E+06,       0.101462001737325336E+06,       0.101417253659172507E+06,       0.101379673252643261E+06,
+        0.101354722198341828E+06,       0.101344083982961922E+06,       0.101350090319994677E+06,       0.101372932240478462E+06,       0.101408874721438551E+06,
+        0.101453217513073498E+06,       0.101497802352511892E+06,       0.101536224569247846E+06,       0.101563019361021943E+06,       0.101582620293203203E+06,
+        0.101603379870639314E+06,       0.101634664417891821E+06,       0.101681132562699248E+06,       0.101739502773358443E+06,       0.101803164120008223E+06,
+        0.101863683127456912E+06,       0.101917393438978630E+06,       0.101963558171047160E+06,       0.101999276960053059E+06,       0.102027732037148526E+06,
+        0.102044731025719229E+06,       0.102045431775095058E+06,       0.102030705033808161E+06,       0.102003666856825570E+06,       0.101970343646836016E+06,
+        0.101935360181740762E+06,       0.101900669036632447E+06,       0.101865688643875081E+06,       0.101829409780582253E+06,       0.101790176042387873E+06,
+        0.101745151599830831E+06,       0.101696472660873420E+06,       0.101648060959889524E+06,       0.101603410369994090E+06,       0.101561835852602439E+06,
+        0.101521855998799132E+06,       0.101482037163334768E+06,       0.101431340410975914E+06,       0.101375699870779092E+06,       0.101314779976223654E+06,
+        0.101251712502201844E+06,       0.101185784883436660E+06,       0.101116517257030340E+06,       0.101049883113580014E+06,       0.100989563385332454E+06,
+        0.100941765093850961E+06,       0.100916306862933794E+06,       0.100906980056579865E+06,       0.100910197269982164E+06,       0.100922958161069488E+06,
+        0.100941314458770998E+06,       0.100957519326146881E+06,       0.100976831072572779E+06,       0.100999605735160003E+06,       0.101025582535843947E+06,
+        0.101054164787686663E+06,       0.101087890451072817E+06,       0.101122283479534453E+06,       0.101149350938674921E+06,       0.101166873408313593E+06,
+        0.101177821152178367E+06,       0.101167655432610394E+06,       0.101141220410113790E+06,       0.101110321588459745E+06,       0.101078361586283063E+06,
+        0.101047967121170557E+06,       0.101023734539325480E+06,       0.101008383694813747E+06,       0.100996781521485842E+06,       0.101071681166949435E+06,
+        0.101119012263039112E+06,       0.101171496350808069E+06,       0.101230050130927513E+06,       0.101294972556584413E+06,       0.101361718999132645E+06,
+        0.101428515451916319E+06,       0.101493595145979649E+06,       0.101550612440880213E+06,       0.101601210858501552E+06,       0.101645666556374214E+06,
+        0.101683206121268653E+06,       0.101713363718937704E+06,       0.101736031118329251E+06,       0.101750515944612693E+06,       0.101757053628392736E+06,
+        0.101756382807271759E+06,       0.101751079781741602E+06,       0.101743715819909994E+06,       0.101732729519215369E+06,       0.101719316686245147E+06,
+        0.101706213959027606E+06,       0.101695984176562313E+06,       0.101686190677071994E+06,       0.101677301261342131E+06,       0.101669511529871947E+06,
+        0.101662644903393695E+06,       0.101659294762388396E+06,       0.101657066043437371E+06,       0.101647001805639928E+06,       0.101637372304767356E+06,
+        0.101632049251178221E+06,       0.101632583495971994E+06,       0.101640198281276986E+06,       0.101655810259860154E+06,       0.101680028481804649E+06,
+        0.101706638821039131E+06,       0.101742286180341995E+06,       0.101788109417502055E+06,       0.101842726554478882E+06,       0.101904504042995715E+06,
+        0.101971839066862056E+06,       0.102051325178151485E+06,       0.102132183694597014E+06,       0.102209672996832567E+06,       0.102278148214885616E+06,
+        0.102338448224708001E+06,       0.102390873033725249E+06,       0.102438626144456910E+06,       0.102479259552033545E+06,       0.102513206393975473E+06,
+        0.102541824188105747E+06,       0.102567198188429233E+06,       0.102591367917437441E+06,       0.102612619776373147E+06,       0.102629292784196412E+06,
+        0.102640555112501301E+06,       0.102646561280503796E+06,       0.102650072544106879E+06,       0.102650385076837265E+06,       0.102648623310889074E+06,
+        0.102647398290377925E+06,       0.102645017994891765E+06,       0.102642292476577204E+06,       0.102637067835034904E+06,       0.102629000591322547E+06,
+        0.102618729003435990E+06,       0.102606585296063713E+06,       0.102594489398555161E+06,       0.102579129366844747E+06,       0.102559288929741029E+06,
+        0.102534463674515951E+06,       0.102503683064059122E+06,       0.102467677027648388E+06,       0.102425952698371388E+06,       0.102378489696413220E+06,
+        0.102325464394964612E+06,       0.102266592853272959E+06,       0.102201770963158517E+06,       0.102131402230157837E+06,       0.102054746212255937E+06,
+        0.101968929014764348E+06,       0.101881350922099227E+06,       0.101796528814235106E+06,       0.101718540575217223E+06,       0.101652169308423996E+06,
+        0.101599956132104824E+06,       0.101567900805891448E+06,       0.101551935071902582E+06,       0.101547427861477787E+06,       0.101554419426909473E+06,
+        0.101561600978615184E+06,       0.101559452993868224E+06,       0.101543318540946057E+06,       0.101516046490907509E+06,       0.101480708475794294E+06,
+        0.101442199752635075E+06,       0.101409794893836297E+06,       0.101389114738180739E+06,       0.101385262237127725E+06,       0.101400028248419621E+06,
+        0.101431176088229637E+06,       0.101474781214988048E+06,       0.101522572921117302E+06,       0.101566852249736243E+06,       0.101600450643120159E+06,
+        0.101625889986676848E+06,       0.101647907487096571E+06,       0.101675661997654053E+06,       0.101714463575179296E+06,       0.101767306549608373E+06,
+        0.101829328954263532E+06,       0.101890507206039634E+06,       0.101946066216170686E+06,       0.101992520848846892E+06,       0.102030925636120199E+06,
+        0.102058119932572736E+06,       0.102069397218130180E+06,       0.102063960577488731E+06,       0.102043326123970241E+06,       0.102008553848255615E+06,
+        0.101967472871147096E+06,       0.101926394136031289E+06,       0.101886043970172454E+06,       0.101846744426466306E+06,       0.101807275512743188E+06,
+        0.101761955344090966E+06,       0.101713799217710359E+06,       0.101665117193273894E+06,       0.101617359026062331E+06,       0.101572592180247302E+06,
+        0.101533981842693742E+06,       0.101499194744985522E+06,       0.101466415578573593E+06,       0.101432243614177438E+06,       0.101381882914991351E+06,
+        0.101327735566313961E+06,       0.101272085428944469E+06,       0.101216117169049772E+06,       0.101156916040190554E+06,       0.101098197832462072E+06,
+        0.101045083251186894E+06,       0.101001341900752319E+06,       0.100969631972021365E+06,       0.100962352822747649E+06,       0.100968513387743296E+06,
+        0.100983909597780104E+06,       0.101002878032770619E+06,       0.101021997578890048E+06,       0.101041366902723443E+06,       0.101063829282811043E+06,
+        0.101089246526039147E+06,       0.101117245287077734E+06,       0.101145180487582722E+06,       0.101169961535366980E+06,       0.101193870243324593E+06,
+        0.101214945572481010E+06,       0.101231265902229890E+06,       0.101240946166576672E+06,       0.101226758959788902E+06,       0.101203801319224774E+06,
+        0.101180554692105070E+06,       0.101163284364848339E+06,       0.101153028319845049E+06,       0.101150355172476586E+06,       0.101145580058182692E+06,
+        0.101028800627874574E+06,       0.101077428684324259E+06,       0.101134167142638209E+06,       0.101197990565301836E+06,       0.101265722975280849E+06,
+        0.101335709112544850E+06,       0.101406209334330430E+06,       0.101475487925550115E+06,       0.101541907493692343E+06,       0.101600856889744842E+06,
+        0.101649573257523298E+06,       0.101690733358275495E+06,       0.101724376638615926E+06,       0.101749510141425519E+06,       0.101765791117457280E+06,
+        0.101773452578481490E+06,       0.101773114885158633E+06,       0.101765715127990101E+06,       0.101752413867995332E+06,       0.101738692514285227E+06,
+        0.101723904619569148E+06,       0.101710227930270819E+06,       0.101695310346281782E+06,       0.101679758838352922E+06,       0.101664029621015856E+06,
+        0.101648327607929226E+06,       0.101632507008869143E+06,       0.101615973949263309E+06,       0.101591834033789346E+06,       0.101568495570761865E+06,
+        0.101547691859404833E+06,       0.101531530936334253E+06,       0.101521827887484746E+06,       0.101520050854732108E+06,       0.101527313513054993E+06,
+        0.101537145982894304E+06,       0.101560590862112396E+06,       0.101599562166824646E+06,       0.101645766826557534E+06,       0.101701752618078797E+06,
+        0.101766692067664408E+06,       0.101846710834492522E+06,       0.101935405126349360E+06,       0.102024396175872622E+06,       0.102110867349092339E+06,
+        0.102192853218211705E+06,       0.102269413494696259E+06,       0.102330281542130935E+06,       0.102383945506085889E+06,       0.102430199256480380E+06,
+        0.102469066393364890E+06,       0.102501583023640342E+06,       0.102532817139689723E+06,       0.102561960069998779E+06,       0.102585754372647149E+06,
+        0.102606277240311640E+06,       0.102621561801826407E+06,       0.102631876834385388E+06,       0.102638884194148588E+06,       0.102641934388380745E+06,
+        0.102641959420915780E+06,       0.102640521654950935E+06,       0.102639686428696965E+06,       0.102638253506522131E+06,       0.102634465365988304E+06,
+        0.102627915114268661E+06,       0.102619787557100746E+06,       0.102613378349844119E+06,       0.102603999870031650E+06,       0.102590631585167415E+06,
+        0.102572103225089755E+06,       0.102547313635873026E+06,       0.102516398885249058E+06,       0.102479446900462790E+06,       0.102437237325361522E+06,
+        0.102388874413479600E+06,       0.102333718028784861E+06,       0.102271049401030890E+06,       0.102201028861754414E+06,       0.102122663528859397E+06,
+        0.102032876851637207E+06,       0.101938463410692304E+06,       0.101842660210214104E+06,       0.101749957344606999E+06,       0.101664764507437576E+06,
+        0.101591439187819764E+06,       0.101533919460466379E+06,       0.101494271575071776E+06,       0.101478987993255127E+06,       0.101485263674090980E+06,
+        0.101506279443945081E+06,       0.101532941096559764E+06,       0.101553896677561657E+06,       0.101563917085832989E+06,       0.101552692436306723E+06,
+        0.101526766068070108E+06,       0.101490572300548680E+06,       0.101454740971174542E+06,       0.101425776324883132E+06,       0.101411062568111098E+06,
+        0.101413866812942622E+06,       0.101435131474614493E+06,       0.101474051380900128E+06,       0.101522941427092213E+06,       0.101574152032058948E+06,
+        0.101618098831177398E+06,       0.101654170137284003E+06,       0.101684054984246599E+06,       0.101716539075889523E+06,       0.101756604551361495E+06,
+        0.101806467761705877E+06,       0.101862424100462653E+06,       0.101918408568819126E+06,       0.101971439624029648E+06,       0.102015800714595636E+06,
+        0.102049385208646127E+06,       0.102069908714661666E+06,       0.102076032068515779E+06,       0.102064732659179368E+06,       0.102034093795762514E+06,
+        0.101992630086863239E+06,       0.101944780810628261E+06,       0.101894141477159937E+06,       0.101849042057571452E+06,       0.101805808680122878E+06,
+        0.101760916109816302E+06,       0.101714291793644923E+06,       0.101666393705850103E+06,       0.101619297696421156E+06,       0.101573598742667251E+06,
+        0.101529420471224686E+06,       0.101490381423561645E+06,       0.101460489541744115E+06,       0.101432531917615197E+06,       0.101405679166028422E+06,
+        0.101376758400729959E+06,       0.101333014356477448E+06,       0.101288061869102195E+06,       0.101243137897010267E+06,       0.101200014773099698E+06,
+        0.101153035601030700E+06,       0.101107255027280131E+06,       0.101068975039667697E+06,       0.101040318598185462E+06,       0.101026239021205620E+06,
+        0.101036150724925217E+06,       0.101050786638747362E+06,       0.101066960176317720E+06,       0.101082545023658342E+06,       0.101098187778212945E+06,
+        0.101117678130985703E+06,       0.101139021760228803E+06,       0.101155522461091532E+06,       0.101175020122667425E+06,       0.101198265495543150E+06,
+        0.101224832562545693E+06,       0.101250329820757150E+06,       0.101272684085133165E+06,       0.101289811161881575E+06,       0.101299701614067628E+06,
+        0.101289739336630024E+06,       0.101279678002747503E+06,       0.101273826681569160E+06,       0.101274570526567550E+06,       0.101282465694758634E+06,
+        0.101293902962443753E+06,       0.100983835656151976E+06,       0.101036388934372706E+06,       0.101096497142358145E+06,       0.101162397946509547E+06,
+        0.101232608232112354E+06,       0.101305480982330599E+06,       0.101379283841868455E+06,       0.101452283197187178E+06,       0.101522834159475562E+06,
+        0.101589476875808105E+06,       0.101650386759155634E+06,       0.101696210127681858E+06,       0.101733613430271813E+06,       0.101761832290367092E+06,
+        0.101780569821559126E+06,       0.101789961901369534E+06,       0.101790532679209500E+06,       0.101783131653860866E+06,       0.101768849808582265E+06,
+        0.101750041068809616E+06,       0.101731803246356489E+06,       0.101713921895166000E+06,       0.101693731889764837E+06,       0.101671835744684708E+06,
+        0.101648705771986570E+06,       0.101624585079514640E+06,       0.101599389025969096E+06,       0.101563768387053642E+06,       0.101522704766848532E+06,
+        0.101483489785699712E+06,       0.101448687013231232E+06,       0.101419615240213854E+06,       0.101397479525329196E+06,       0.101384028029676760E+06,
+        0.101370836998047147E+06,       0.101368370266732833E+06,       0.101383065641375812E+06,       0.101416090998647196E+06,       0.101467290265164353E+06,
+        0.101534882313080263E+06,       0.101609445319890510E+06,       0.101699733235880441E+06,       0.101794859855521834E+06,       0.101891101060966321E+06,
+        0.101985315130313480E+06,       0.102075076914327306E+06,       0.102159945052938041E+06,       0.102235771297951098E+06,       0.102301477656430769E+06,
+        0.102354930558367778E+06,       0.102399782724316072E+06,       0.102438694369211255E+06,       0.102476839111309280E+06,       0.102509751156878236E+06,
+        0.102537521783681077E+06,       0.102560895469354815E+06,       0.102580819063130271E+06,       0.102594854584419911E+06,       0.102605160074562926E+06,
+        0.102611577337313051E+06,       0.102614486702620023E+06,       0.102617674490494959E+06,       0.102619973525111447E+06,       0.102618324460179618E+06,
+        0.102615416266488261E+06,       0.102610851205396946E+06,       0.102607299216665502E+06,       0.102602572628475973E+06,       0.102595515104050908E+06,
+        0.102585432283621078E+06,       0.102569550312714797E+06,       0.102546496599273247E+06,       0.102517612581426918E+06,       0.102482362007529839E+06,
+        0.102441544642516921E+06,       0.102393921375066857E+06,       0.102338338767732290E+06,       0.102273827698305467E+06,       0.102199580759235032E+06,
+        0.102112717239415593E+06,       0.102017541011033652E+06,       0.101917267901995700E+06,       0.101815758981969469E+06,       0.101717854365049221E+06,
+        0.101627270343615834E+06,       0.101547308817353100E+06,       0.101483765146806487E+06,       0.101441943712900873E+06,       0.101423999856314156E+06,
+        0.101430776328316933E+06,       0.101457783973006139E+06,       0.101497023306538365E+06,       0.101538146597104598E+06,       0.101564980031804182E+06,
+        0.101571345079031700E+06,       0.101556555710264554E+06,       0.101527227279379993E+06,       0.101491242458124063E+06,       0.101455431195561541E+06,
+        0.101427222639413303E+06,       0.101413952789479707E+06,       0.101420016873493543E+06,       0.101448672726717166E+06,       0.101494479796940665E+06,
+        0.101550679225448213E+06,       0.101607025893701604E+06,       0.101659304835337243E+06,       0.101705889950175377E+06,       0.101749787609497245E+06,
+        0.101793551387452957E+06,       0.101844793551510127E+06,       0.101899113907290477E+06,       0.101951953582127840E+06,       0.101997167012573933E+06,
+        0.102030191525044342E+06,       0.102053787395966574E+06,       0.102064887574337728E+06,       0.102060267944376203E+06,       0.102039749700523636E+06,
+        0.102005081906476669E+06,       0.101957654047840246E+06,       0.101904801258523614E+06,       0.101850843726662788E+06,       0.101798946363995929E+06,
+        0.101751878064897523E+06,       0.101705939443378287E+06,       0.101659768391705205E+06,       0.101615380159911743E+06,       0.101570783461705709E+06,
+        0.101526947551755860E+06,       0.101484787939652975E+06,       0.101445231219594032E+06,       0.101413345817087800E+06,       0.101391047300393111E+06,
+        0.101372584877227360E+06,       0.101355566853485740E+06,       0.101335220992961375E+06,       0.101303837716816255E+06,       0.101271525370591757E+06,
+        0.101240298133351855E+06,       0.101211003024413338E+06,       0.101175839364889063E+06,       0.101146665774628709E+06,       0.101127801050420749E+06,
+        0.101116214564623544E+06,       0.101115217567181709E+06,       0.101124992952320288E+06,       0.101134962605509543E+06,       0.101143290627816998E+06,
+        0.101149282865567409E+06,       0.101151001731697805E+06,       0.101160080279956310E+06,       0.101174468885292459E+06,       0.101194158852267166E+06,
+        0.101218629627263130E+06,       0.101247610934086246E+06,       0.101278139638903813E+06,       0.101306993640526780E+06,       0.101332857422239162E+06,
+        0.101352835922766695E+06,       0.101364854062282961E+06,       0.101366215681609348E+06,       0.101371982657827277E+06,       0.101384204628605657E+06,
+        0.101403123567578412E+06,       0.101427293507956012E+06,       0.100939699761507189E+06,       0.100993926545564740E+06,       0.101055617446205957E+06,
+        0.101123302505147047E+06,       0.101195700951661318E+06,       0.101271150132425566E+06,       0.101347899405442047E+06,       0.101424189839355866E+06,
+        0.101498339603613043E+06,       0.101568835452811982E+06,       0.101636401101424097E+06,       0.101695457584751377E+06,       0.101740082571501800E+06,
+        0.101772165987128828E+06,       0.101794061760174460E+06,       0.101805821721959510E+06,       0.101807890769523758E+06,       0.101801052084176001E+06,
+        0.101787222143099047E+06,       0.101769333451322513E+06,       0.101746134751190912E+06,       0.101718716143227328E+06,       0.101691356809011646E+06,
+        0.101662464249923956E+06,       0.101631298348493656E+06,       0.101598170677190283E+06,       0.101554964683279206E+06,       0.101502331999436428E+06,
+        0.101449056042133889E+06,       0.101396847279871756E+06,       0.101347056172201555E+06,       0.101300460882216124E+06,       0.101262584703042259E+06,
+        0.101225780265849375E+06,       0.101194459775717551E+06,       0.101179417053502169E+06,       0.101183702376592380E+06,       0.101209076499852017E+06,
+        0.101255909037280071E+06,       0.101326640203920455E+06,       0.101424239758254218E+06,       0.101531367651623077E+06,       0.101632910073723979E+06,
+        0.101736158570445637E+06,       0.101837656744184424E+06,       0.101936360666710083E+06,       0.102029774479476604E+06,       0.102113550935132720E+06,
+        0.102187275245992423E+06,       0.102251742085495353E+06,       0.102308744854441014E+06,       0.102354056548559587E+06,       0.102395496326958368E+06,
+        0.102432085609497080E+06,       0.102463450245845990E+06,       0.102489865598489851E+06,       0.102514853262571502E+06,       0.102534082770129738E+06,
+        0.102548592777604266E+06,       0.102559883810599669E+06,       0.102568794081739034E+06,       0.102579021392062437E+06,       0.102585007107402751E+06,
+        0.102586497457448539E+06,       0.102584376842419224E+06,       0.102580903181294503E+06,       0.102577151681759657E+06,       0.102573827515381417E+06,
+        0.102568538059750121E+06,       0.102560561364228692E+06,       0.102548460310359820E+06,       0.102530289426340809E+06,       0.102505861568008157E+06,
+        0.102475498063954670E+06,       0.102440643792700503E+06,       0.102396241614374099E+06,       0.102341446243588929E+06,       0.102276649353635905E+06,
+        0.102199862029058393E+06,       0.102111863644497949E+06,       0.102014314786398143E+06,       0.101910607455440113E+06,       0.101806306816961252E+06,
+        0.101704399917697054E+06,       0.101609603981306922E+06,       0.101526211311625375E+06,       0.101459322473350869E+06,       0.101412795838567283E+06,
+        0.101389618525710335E+06,       0.101393845554395113E+06,       0.101424357742906359E+06,       0.101472713797786171E+06,       0.101522607587252613E+06,
+        0.101559998357663775E+06,       0.101576743781235520E+06,       0.101573310646049868E+06,       0.101549833954751783E+06,       0.101514456685338067E+06,
+        0.101472694191529066E+06,       0.101434208011361596E+06,       0.101406914911600485E+06,       0.101398454904380153E+06,       0.101415253675564527E+06,
+        0.101455136695375608E+06,       0.101512719547979839E+06,       0.101577237869349250E+06,       0.101641152022720256E+06,       0.101700396834169049E+06,
+        0.101757567947174000E+06,       0.101815111575731135E+06,       0.101874014294397304E+06,       0.101930155420364375E+06,       0.101979578233631371E+06,
+        0.102017827567168875E+06,       0.102041453032023797E+06,       0.102049181677356071E+06,       0.102042624564991027E+06,       0.102027458526470917E+06,
+        0.101998856271186160E+06,       0.101958763385915998E+06,       0.101909825004560786E+06,       0.101855834630693556E+06,       0.101803471305377156E+06,
+        0.101751840395667561E+06,       0.101701669671223848E+06,       0.101657371568089962E+06,       0.101614737302306821E+06,       0.101571808841198203E+06,
+        0.101529035182503387E+06,       0.101487836291383923E+06,       0.101448187429775586E+06,       0.101410201287687276E+06,       0.101375725543945955E+06,
+        0.101354091334976038E+06,       0.101343701275904139E+06,       0.101337958790157587E+06,       0.101334014323027164E+06,       0.101323058410853802E+06,
+        0.101303680281432564E+06,       0.101285071086934273E+06,       0.101269046902558985E+06,       0.101256912292666253E+06,       0.101239485050412128E+06,
+        0.101225094542196108E+06,       0.101214114558167246E+06,       0.101206300766355242E+06,       0.101205366180458252E+06,       0.101205376802251209E+06,
+        0.101196436467417006E+06,       0.101184014918681118E+06,       0.101170971956995039E+06,       0.101173896703063627E+06,       0.101186778426832985E+06,
+        0.101207425966799259E+06,       0.101235075391491133E+06,       0.101268299800364039E+06,       0.101308063493844020E+06,       0.101344788336284473E+06,
+        0.101376389450400151E+06,       0.101402378295128001E+06,       0.101423140134659829E+06,       0.101438782026730638E+06,       0.101455746728587110E+06,
+        0.101479368387625509E+06,       0.101509546030359561E+06,       0.101546739387306210E+06,       0.100893625093361974E+06,       0.100948455392464501E+06,
+        0.101011317645263582E+06,       0.101080913011082172E+06,       0.101155302174425058E+06,       0.101233112731396410E+06,       0.101312551980581891E+06,
+        0.101391810121618284E+06,       0.101469643740293817E+06,       0.101547894952444782E+06,       0.101619713078854009E+06,       0.101683304064554628E+06,
+        0.101737232999154556E+06,       0.101779617777438179E+06,       0.101805388291197829E+06,       0.101820150398714570E+06,       0.101824280737551730E+06,
+        0.101819067925622789E+06,       0.101806980910888844E+06,       0.101787436214918198E+06,       0.101761287349566453E+06,       0.101729423465328233E+06,
+        0.101692622608612961E+06,       0.101651573936670728E+06,       0.101611590783753491E+06,       0.101562833006838278E+06,       0.101502364394767414E+06,
+        0.101438724936641054E+06,       0.101373805958635741E+06,       0.101309369954324357E+06,       0.101246873385268977E+06,       0.101187267453513661E+06,
+        0.101122914968029043E+06,       0.101055428119650373E+06,       0.101008249772026029E+06,       0.100979473982631680E+06,       0.100972177967227311E+06,
+        0.100988832853860484E+06,       0.101031262783445170E+06,       0.101112202656024601E+06,       0.101211093846252057E+06,       0.101323155130905317E+06,
+        0.101443212391304434E+06,       0.101565274984548159E+06,       0.101675064133449094E+06,       0.101783046764746541E+06,       0.101883427362778093E+06,
+        0.101974048605326316E+06,       0.102054089915572622E+06,       0.102123916001737191E+06,       0.102185138506351650E+06,       0.102239277647944138E+06,
+        0.102288043635062262E+06,       0.102329848961112002E+06,       0.102365570526105090E+06,       0.102398175565311816E+06,       0.102427118018994763E+06,
+        0.102451215888181687E+06,       0.102470889959435211E+06,       0.102487322259304128E+06,       0.102507363262553656E+06,       0.102522539511451090E+06,
+        0.102533202617323841E+06,       0.102538447738773189E+06,       0.102539366679125000E+06,       0.102537806325041631E+06,       0.102534134338413278E+06,
+        0.102529616480806799E+06,       0.102525504718401397E+06,       0.102520340764588414E+06,       0.102512361946182253E+06,       0.102499685852779818E+06,
+        0.102481370178637997E+06,       0.102461804458447645E+06,       0.102433116211535496E+06,       0.102394820498302695E+06,       0.102344806742965229E+06,
+        0.102282869771580241E+06,       0.102208190347609911E+06,       0.102122230232017173E+06,       0.102026360478078772E+06,       0.101922376088166435E+06,
+        0.101815964790077211E+06,       0.101712553837059808E+06,       0.101615912730210781E+06,       0.101531538428717235E+06,       0.101462015329520931E+06,
+        0.101411095529211190E+06,       0.101383553801811446E+06,       0.101387868686696354E+06,       0.101419065450411930E+06,       0.101465197763774107E+06,
+        0.101514122624701689E+06,       0.101554157750064871E+06,       0.101577510533460605E+06,       0.101578561408166206E+06,       0.101561717136454608E+06,
+        0.101527942832344896E+06,       0.101485492708933743E+06,       0.101442040681691869E+06,       0.101407214730937660E+06,       0.101391475969427891E+06,
+        0.101402057936737707E+06,       0.101438129992839313E+06,       0.101494675186752138E+06,       0.101561405991801003E+06,       0.101631832958464947E+06,
+        0.101700764128050694E+06,       0.101765471244284083E+06,       0.101829298739144535E+06,       0.101891487805957440E+06,       0.101949649930012936E+06,
+        0.101996983260441179E+06,       0.102028825999188412E+06,       0.102041977726062381E+06,       0.102037063043873364E+06,       0.102018484271153007E+06,
+        0.101987519813082123E+06,       0.101953322744109144E+06,       0.101911210582393775E+06,       0.101863879485885569E+06,       0.101813868935175255E+06,
+        0.101763558865488987E+06,       0.101714781421884982E+06,       0.101669784944327868E+06,       0.101626116114336663E+06,       0.101583855166139518E+06,
+        0.101542346971029430E+06,       0.101502633877275308E+06,       0.101464939559164166E+06,       0.101426766367174598E+06,       0.101390458857219390E+06,
+        0.101358471458522574E+06,       0.101334112694217969E+06,       0.101328407691393310E+06,       0.101330874497622441E+06,       0.101337110359200757E+06,
+        0.101343736678259927E+06,       0.101343244142495707E+06,       0.101341300900043818E+06,       0.101339844172589394E+06,       0.101338724330486657E+06,
+        0.101333664918719776E+06,       0.101322891249048946E+06,       0.101311826452015521E+06,       0.101299221594776434E+06,       0.101282571152943405E+06,
+        0.101266530780531204E+06,       0.101246643011162712E+06,       0.101224150063358495E+06,       0.101202571591745436E+06,       0.101188612840670292E+06,
+        0.101199966484071061E+06,       0.101222097051704724E+06,       0.101260233588647054E+06,       0.101304129252313578E+06,       0.101350161554908336E+06,
+        0.101389652624068185E+06,       0.101424551417429771E+06,       0.101454274075586436E+06,       0.101479148917351384E+06,       0.101500388782067501E+06,
+        0.101525545796928971E+06,       0.101562513561929518E+06,       0.101606090475506091E+06,       0.101653619386718725E+06,       0.100845507039246062E+06,
+        0.100900566753226827E+06,       0.100964147998307293E+06,       0.101035004760987780E+06,       0.101111734714359307E+06,       0.101192123809297234E+06,
+        0.101274156352906692E+06,       0.101357605885697238E+06,       0.101443671119726976E+06,       0.101525544557033369E+06,       0.101601182677887831E+06,
+        0.101668789681363778E+06,       0.101726898348598319E+06,       0.101774441929614739E+06,       0.101810815552412794E+06,       0.101832035149566495E+06,
+        0.101838765440822797E+06,       0.101835596101807649E+06,       0.101823419644672496E+06,       0.101802715728713345E+06,       0.101774151142095492E+06,
+        0.101738457612419079E+06,       0.101696295926065533E+06,       0.101648104911459959E+06,       0.101590285842002006E+06,       0.101521209919707282E+06,
+        0.101450839575846665E+06,       0.101376697188940336E+06,       0.101300744148618498E+06,       0.101224863840720194E+06,       0.101150697403150189E+06,
+        0.101073301607053800E+06,       0.100983235760375988E+06,       0.100901684378507489E+06,       0.100833101972986929E+06,       0.100781373167571786E+06,
+        0.100760772506158712E+06,       0.100768040826660945E+06,       0.100819963855216105E+06,       0.100898361962391151E+06,       0.100996401252706506E+06,
+        0.101109805590524003E+06,       0.101233684034863138E+06,       0.101362757333502159E+06,       0.101494642793831357E+06,       0.101619684005633680E+06,
+        0.101728129058541483E+06,       0.101825059560781054E+06,       0.101910320070122136E+06,       0.101982389350624275E+06,       0.102044412115271698E+06,
+        0.102100145695870931E+06,       0.102151182120026933E+06,       0.102199014246850449E+06,       0.102244844616859526E+06,       0.102284509458517772E+06,
+        0.102318215421307876E+06,       0.102347902960885476E+06,       0.102373421335254781E+06,       0.102401951332123936E+06,       0.102429181477717284E+06,
+        0.102450532016644735E+06,       0.102465997336774948E+06,       0.102475777963121422E+06,       0.102478313815590023E+06,       0.102478110250759957E+06,
+        0.102475657036715347E+06,       0.102471918321198871E+06,       0.102469939192222024E+06,       0.102467007436977176E+06,       0.102462490014742158E+06,
+        0.102456722431479779E+06,       0.102450737615132341E+06,       0.102440335034919917E+06,       0.102420575011656954E+06,       0.102389812989896382E+06,
+        0.102347122683242473E+06,       0.102292275082950306E+06,       0.102224438636867562E+06,       0.102143836217952965E+06,       0.102050866494433591E+06,
+        0.101949943411085245E+06,       0.101845736377779569E+06,       0.101742816153747364E+06,       0.101647911129982123E+06,       0.101563216996056130E+06,
+        0.101491604823778136E+06,       0.101437861556007003E+06,       0.101412287502927546E+06,       0.101412856551671823E+06,       0.101435247443498505E+06,
+        0.101472966599928535E+06,       0.101514519271643498E+06,       0.101550307716508367E+06,       0.101572773831424129E+06,       0.101577300876503461E+06,
+        0.101561783761491213E+06,       0.101528832671536744E+06,       0.101487621468217170E+06,       0.101449333621855301E+06,       0.101421572690143163E+06,
+        0.101412849368901254E+06,       0.101428815273143569E+06,       0.101468452704213269E+06,       0.101526342258825374E+06,       0.101593070240422909E+06,
+        0.101660293633886846E+06,       0.101724359259873541E+06,       0.101785772418607943E+06,       0.101847556062125179E+06,       0.101908363003809383E+06,
+        0.101961701914240010E+06,       0.102002429874153109E+06,       0.102025185688122059E+06,       0.102030228237618969E+06,       0.102016392623057240E+06,
+        0.101989203583738155E+06,       0.101954215596148948E+06,       0.101916658897302012E+06,       0.101876815696310456E+06,       0.101833071043157586E+06,
+        0.101787308476072212E+06,       0.101741539193291770E+06,       0.101697630101558476E+06,       0.101654119182481736E+06,       0.101610960850170581E+06,
+        0.101569179414185535E+06,       0.101528773468682877E+06,       0.101490142318063241E+06,       0.101454189911789217E+06,       0.101420537325155994E+06,
+        0.101387196165512592E+06,       0.101359208745426033E+06,       0.101338989486127597E+06,       0.101329695327606096E+06,       0.101338867992364074E+06,
+        0.101355871810450670E+06,       0.101375430345140587E+06,       0.101394209504973755E+06,       0.101402919751202760E+06,       0.101410688334029808E+06,
+        0.101416920285657412E+06,       0.101420489242522977E+06,       0.101413658635510583E+06,       0.101399351916641783E+06,       0.101380364637205465E+06,
+        0.101357315413079603E+06,       0.101331383086953632E+06,       0.101302463143222500E+06,       0.101271861027862804E+06,       0.101243797629858222E+06,
+        0.101225102912379341E+06,       0.101230895188582799E+06,       0.101260967028080006E+06,       0.101301126414935963E+06,       0.101347821784489817E+06,
+        0.101397550525323837E+06,       0.101444003541722705E+06,       0.101480976560253359E+06,       0.101512946357403111E+06,       0.101540212183607568E+06,
+        0.101567953884550225E+06,       0.101594468785546575E+06,       0.101637676393726375E+06,       0.101688399693186482E+06,       0.101742930184759069E+06,
+        0.100795882153115017E+06,       0.100850797431345025E+06,       0.100914750948998306E+06,       0.100986523708389999E+06,       0.101064741053657359E+06,
+        0.101147944583867647E+06,       0.101236474647069423E+06,       0.101327593382317646E+06,       0.101416818345205553E+06,       0.101501970105562199E+06,
+        0.101581006340059568E+06,       0.101652107178935606E+06,       0.101713753841424812E+06,       0.101764799350409041E+06,       0.101804529976921447E+06,
+        0.101832451081090258E+06,       0.101847567048303332E+06,       0.101846442214230046E+06,       0.101834900151378431E+06,       0.101813744156519519E+06,
+        0.101783490044669117E+06,       0.101744750228076155E+06,       0.101698109004179641E+06,       0.101641364118676778E+06,       0.101569583201128436E+06,
+        0.101490816574609969E+06,       0.101406531256311253E+06,       0.101319625817001812E+06,       0.101233091961074242E+06,       0.101146347584902731E+06,
+        0.101058989124578555E+06,       0.100953964690316512E+06,       0.100852899705475327E+06,       0.100760578698964149E+06,       0.100681685450575751E+06,
+        0.100620492778267973E+06,       0.100580496608869158E+06,       0.100579462774121028E+06,       0.100625977088063315E+06,       0.100699672061534206E+06,
+        0.100794647180633037E+06,       0.100907249288633233E+06,       0.101033016501104474E+06,       0.101170532820658074E+06,       0.101310202043631813E+06,
+        0.101443951517617694E+06,       0.101566665342990047E+06,       0.101674561727816923E+06,       0.101762857707379371E+06,       0.101831050817027455E+06,
+        0.101892059674295087E+06,       0.101947353598683054E+06,       0.101998507084363489E+06,       0.102047351014086569E+06,       0.102096770563981801E+06,
+        0.102143221374936838E+06,       0.102186890306655871E+06,       0.102228196597294736E+06,       0.102264105567156759E+06,       0.102302445150954794E+06,
+        0.102336246787148004E+06,       0.102363781472504663E+06,       0.102384291162903231E+06,       0.102397430622010026E+06,       0.102403312624922473E+06,
+        0.102403832627536103E+06,       0.102402612769131738E+06,       0.102401390930183130E+06,       0.102401466546220196E+06,       0.102401874865610895E+06,
+        0.102402100027913009E+06,       0.102404524182350739E+06,       0.102408945753433436E+06,       0.102408228479075435E+06,       0.102399207567720179E+06,
+        0.102378727543360583E+06,       0.102346081419689654E+06,       0.102300584036716507E+06,       0.102242408524207058E+06,       0.102170172560628038E+06,
+        0.102084827969266131E+06,       0.101990466580006148E+06,       0.101891305283198890E+06,       0.101794051647235989E+06,       0.101701758202335564E+06,
+        0.101617607399452128E+06,       0.101545673956610553E+06,       0.101493920019806435E+06,       0.101463389589686616E+06,       0.101454707404169429E+06,
+        0.101465784796775130E+06,       0.101489404864046577E+06,       0.101519701691131908E+06,       0.101547620610180951E+06,       0.101565576165996550E+06,
+        0.101562026624260950E+06,       0.101539419490073633E+06,       0.101508015501831396E+06,       0.101475602714955035E+06,       0.101449209652947975E+06,
+        0.101436251410560508E+06,       0.101442877175111498E+06,       0.101471341372345414E+06,       0.101518178052896081E+06,       0.101577355032239313E+06,
+        0.101641314782584261E+06,       0.101703564541155953E+06,       0.101762362987943518E+06,       0.101818379277178246E+06,       0.101872714548978096E+06,
+        0.101924119264252775E+06,       0.101966776195386803E+06,       0.101995500768842219E+06,       0.102007086660768691E+06,       0.102002030153628395E+06,
+        0.101985038462701981E+06,       0.101956611217972633E+06,       0.101924174284332606E+06,       0.101890531345005773E+06,       0.101858684611865552E+06,
+        0.101821867670641383E+06,       0.101781442886233301E+06,       0.101738169818174909E+06,       0.101693020445221118E+06,       0.101649533509090848E+06,
+        0.101606065252630258E+06,       0.101563356987927487E+06,       0.101522196794781717E+06,       0.101483000104046587E+06,       0.101448492093986119E+06,
+        0.101420196255985837E+06,       0.101395294590973572E+06,       0.101373162271020163E+06,       0.101359621762719311E+06,       0.101356933368830039E+06,
+        0.101368947980949306E+06,       0.101392192190573551E+06,       0.101417779659041989E+06,       0.101442531040709990E+06,       0.101462476541542521E+06,
+        0.101476476704636079E+06,       0.101486973325915984E+06,       0.101492708978460287E+06,       0.101491506327010982E+06,       0.101476163566485891E+06,
+        0.101454012045195879E+06,       0.101426588508176050E+06,       0.101395767868210212E+06,       0.101361555520167341E+06,       0.101327388871009054E+06,
+        0.101300667576237203E+06,       0.101284994174892112E+06,       0.101283350959747040E+06,       0.101309210052713708E+06,       0.101350688755181967E+06,
+        0.101399465772761600E+06,       0.101451857069433157E+06,       0.101504338927611956E+06,       0.101548087731741456E+06,       0.101585173851711908E+06,
+        0.101617418107249265E+06,       0.101645918462371425E+06,       0.101672368866688703E+06,       0.101702644054264791E+06,       0.101756834440843944E+06,
+        0.101815020493009375E+06,       0.100745394112667054E+06,       0.100799832870823317E+06,       0.100863855953311213E+06,       0.100936251298315474E+06,
+        0.101015648499264644E+06,       0.101104654341683374E+06,       0.101200128443110370E+06,       0.101296361142831636E+06,       0.101389195762127056E+06,
+        0.101477275829104881E+06,       0.101559295351936235E+06,       0.101633387586243814E+06,       0.101697961740723156E+06,       0.101751772598623953E+06,
+        0.101793901427349119E+06,       0.101823866729636080E+06,       0.101841583691637163E+06,       0.101847052782340179E+06,       0.101840097601263231E+06,
+        0.101819364884434224E+06,       0.101788292383590582E+06,       0.101747405137351147E+06,       0.101695621343299601E+06,       0.101627436111935327E+06,
+        0.101550322384277897E+06,       0.101465476616664964E+06,       0.101374194733789423E+06,       0.101277718928660746E+06,       0.101177047947947533E+06,
+        0.101075621770040874E+06,       0.100963507971772880E+06,       0.100850151599165794E+06,       0.100741049456883455E+06,       0.100641201275214524E+06,
+        0.100555640521779089E+06,       0.100489164793431541E+06,       0.100453712051746988E+06,       0.100455966233873114E+06,       0.100484341033634380E+06,
+        0.100537490332318921E+06,       0.100620003905902136E+06,       0.100729309835612949E+06,       0.100858870023752374E+06,       0.101002649715674357E+06,
+        0.101147678361066428E+06,       0.101287802540963821E+06,       0.101417496539417145E+06,       0.101532273896933402E+06,       0.101613683175199098E+06,
+        0.101680723164626179E+06,       0.101737444859119263E+06,       0.101791182708811306E+06,       0.101841314940347904E+06,       0.101891796533315224E+06,
+        0.101941590080887530E+06,       0.101990059211011772E+06,       0.102037355306302023E+06,       0.102083701488133767E+06,       0.102136891332944331E+06,
+        0.102186806386969169E+06,       0.102230479823408270E+06,       0.102264774535572782E+06,       0.102290420308268731E+06,       0.102307702555592783E+06,
+        0.102317766904831617E+06,       0.102321662148245741E+06,       0.102321498408406202E+06,       0.102320441248726507E+06,       0.102319523718290511E+06,
+        0.102322447750704567E+06,       0.102327503158949214E+06,       0.102340754529364640E+06,       0.102353506384693246E+06,       0.102362358688122375E+06,
+        0.102364445626707267E+06,       0.102355674159446760E+06,       0.102335040551811529E+06,       0.102301981999839074E+06,       0.102255676163442389E+06,
+        0.102195798314690837E+06,       0.102122639698007450E+06,       0.102039086723219865E+06,       0.101949840960878224E+06,       0.101859938889724974E+06,
+        0.101771880315094095E+06,       0.101689691466275064E+06,       0.101619553461018091E+06,       0.101564784382206009E+06,       0.101527063676792590E+06,
+        0.101506865347517232E+06,       0.101503522390084341E+06,       0.101512744653858725E+06,       0.101529231308459130E+06,       0.101545937638918578E+06,
+        0.101543746232650679E+06,       0.101529149091683401E+06,       0.101505036617385034E+06,       0.101477259643610611E+06,       0.101452985842091570E+06,
+        0.101443019818922796E+06,       0.101450005107018835E+06,       0.101477223491849247E+06,       0.101523231314288976E+06,       0.101581629450517838E+06,
+        0.101644098508760901E+06,       0.101703051093558723E+06,       0.101755080739197074E+06,       0.101801349748540073E+06,       0.101847343504094184E+06,
+        0.101892088842664132E+06,       0.101930776572625342E+06,       0.101959972929516225E+06,       0.101973275480066382E+06,       0.101972016851233420E+06,
+        0.101959747868463455E+06,       0.101940685784926434E+06,       0.101919336338791196E+06,       0.101894507185877927E+06,       0.101871113669696017E+06,
+        0.101847657889249851E+06,       0.101820887903955852E+06,       0.101784170021964572E+06,       0.101741602583369866E+06,       0.101694747059338464E+06,
+        0.101647292622998575E+06,       0.101600773270067424E+06,       0.101554052329806203E+06,       0.101509997350416306E+06,       0.101472107321641699E+06,
+        0.101442071551669200E+06,       0.101420240877131699E+06,       0.101406891473258380E+06,       0.101396015807551084E+06,       0.101392164060749914E+06,
+        0.101397198621684831E+06,       0.101410725481402653E+06,       0.101436168965154429E+06,       0.101464448461599168E+06,       0.101491134274545591E+06,
+        0.101513817760506034E+06,       0.101531534488231206E+06,       0.101544658070101810E+06,       0.101551681755858954E+06,       0.101551216434335554E+06,
+        0.101539195357785327E+06,       0.101514919199184893E+06,       0.101483010220912314E+06,       0.101448007466093870E+06,       0.101414858070553688E+06,
+        0.101383218898751307E+06,       0.101359262217297684E+06,       0.101346709055278770E+06,       0.101347915439013712E+06,       0.101365119587774912E+06,
+        0.101407924765819262E+06,       0.101458658683875430E+06,       0.101515675014729291E+06,       0.101573920518004117E+06,       0.101629788706552135E+06,
+        0.101668434413804149E+06,       0.101700504314289530E+06,       0.101727848552964642E+06,       0.101752288382924846E+06,       0.101776226460626523E+06,
+        0.101814361167678813E+06,       0.101872139466116685E+06,       0.100694816386903738E+06,       0.100748531064111390E+06,       0.100812413075077391E+06,
+        0.100885240325433202E+06,       0.100971984589634725E+06,       0.101066079836500590E+06,       0.101163332246353209E+06,       0.101261519892330936E+06,
+        0.101358385768427062E+06,       0.101451421123224791E+06,       0.101536054276749637E+06,       0.101612689419430462E+06,       0.101679641914763270E+06,
+        0.101735174644287632E+06,       0.101778750617147758E+06,       0.101810665166487233E+06,       0.101830410029895895E+06,       0.101837810772118624E+06,
+        0.101833022665443903E+06,       0.101816510393020842E+06,       0.101787854012666052E+06,       0.101744823421577603E+06,       0.101683938556403096E+06,
+        0.101613036597664483E+06,       0.101532884942156001E+06,       0.101444504410039342E+06,       0.101349069651044396E+06,       0.101247781610335631E+06,
+        0.101141708506075884E+06,       0.101021202144232695E+06,       0.100894721062327983E+06,       0.100769982600624178E+06,       0.100655427823023274E+06,
+        0.100550770964121868E+06,       0.100461477319971644E+06,       0.100396193533225101E+06,       0.100370475160386210E+06,       0.100369362731624045E+06,
+        0.100393088104568509E+06,       0.100440996230512974E+06,       0.100511511049115361E+06,       0.100603846780177613E+06,       0.100726574426591877E+06,
+        0.100871208402494914E+06,       0.101018016887883554E+06,       0.101160944293748136E+06,       0.101294154343677379E+06,       0.101398406532467285E+06,
+        0.101478074072107382E+06,       0.101546049324473512E+06,       0.101603974418745871E+06,       0.101653727077973454E+06,       0.101697954544609078E+06,
+        0.101741376690074656E+06,       0.101789988330066262E+06,       0.101838680208411213E+06,       0.101887795803836605E+06,       0.101942598855672841E+06,
+        0.102000837418646348E+06,       0.102056277940396962E+06,       0.102106768405713607E+06,       0.102150535774670396E+06,       0.102182996899048041E+06,
+        0.102206750157000613E+06,       0.102221201245532342E+06,       0.102228757950974235E+06,       0.102230269318708335E+06,       0.102229908214737996E+06,
+        0.102230221444085299E+06,       0.102233117647704858E+06,       0.102243955867660014E+06,       0.102261169827573845E+06,       0.102280623025385154E+06,
+        0.102298710646779829E+06,       0.102311720481040116E+06,       0.102316483254606297E+06,       0.102310329085876278E+06,       0.102292054686377145E+06,
+        0.102261582445110776E+06,       0.102217278999264774E+06,       0.102159938958497296E+06,       0.102090651836751262E+06,       0.102014420809727890E+06,
+        0.101933158619991009E+06,       0.101851325383247095E+06,       0.101773700996606422E+06,       0.101704655579852813E+06,       0.101645470306280142E+06,
+        0.101599387487163476E+06,       0.101568762309086727E+06,       0.101551200721109650E+06,       0.101544950055199806E+06,       0.101545234940555893E+06,
+        0.101536151271568684E+06,       0.101520957074193793E+06,       0.101499514166347813E+06,       0.101472481430049040E+06,       0.101447481037651174E+06,
+        0.101431698928562022E+06,       0.101432519665399988E+06,       0.101455989679772596E+06,       0.101503867701139068E+06,       0.101569707321795955E+06,
+        0.101641541183263049E+06,       0.101707359784777087E+06,       0.101760909663319078E+06,       0.101802944092112913E+06,       0.101837429073186562E+06,
+        0.101868490058515003E+06,       0.101895999089963501E+06,       0.101921719560774494E+06,       0.101935208629263929E+06,       0.101934734847469299E+06,
+        0.101921789770189804E+06,       0.101905337918664198E+06,       0.101889233907825823E+06,       0.101876223533093609E+06,       0.101864529046626514E+06,
+        0.101850666495852842E+06,       0.101835575764428810E+06,       0.101815211112956240E+06,       0.101783740571016519E+06,       0.101739678309719806E+06,
+        0.101689041718466135E+06,       0.101634899667157661E+06,       0.101583884425190394E+06,       0.101535509776931387E+06,       0.101491128441498251E+06,
+        0.101453011421685966E+06,       0.101428708334432333E+06,       0.101415133080661239E+06,       0.101411902195392497E+06,       0.101415741142001993E+06,
+        0.101421700628259656E+06,       0.101434916879656914E+06,       0.101454096376128975E+06,       0.101478884585159176E+06,       0.101507961817356219E+06,
+        0.101534772926637874E+06,       0.101557090728886120E+06,       0.101574113620330667E+06,       0.101587280909418565E+06,       0.101593317203057959E+06,
+        0.101589233196906163E+06,       0.101574814776511601E+06,       0.101547332581751762E+06,       0.101514869284270651E+06,       0.101481998192358122E+06,
+        0.101452150550811974E+06,       0.101427572510067519E+06,       0.101409813743047896E+06,       0.101403676308175665E+06,       0.101410943983370715E+06,
+        0.101433007929108295E+06,       0.101473704830047689E+06,       0.101528968358056605E+06,       0.101588585098966272E+06,       0.101648865730780017E+06,
+        0.101706538485246449E+06,       0.101754905727487509E+06,       0.101785976200502380E+06,       0.101811017148794053E+06,       0.101832089114193281E+06,
+        0.101851827047180632E+06,       0.101871848271984418E+06,       0.101914442748880043E+06,       0.100645050821058583E+06,       0.100697921098829320E+06,
+        0.100761591261288675E+06,       0.100844244243942405E+06,       0.100934005537327830E+06,       0.101028963380699686E+06,       0.101127123691640561E+06,
+        0.101226361187462535E+06,       0.101324505036089657E+06,       0.101419431488063798E+06,       0.101509163971173737E+06,       0.101590063785101636E+06,
+        0.101657671467199980E+06,       0.101713396702810118E+06,       0.101758515364488485E+06,       0.101792091325616479E+06,       0.101813481673006056E+06,
+        0.101822350253392695E+06,       0.101818668615804971E+06,       0.101802702749391727E+06,       0.101774619027333058E+06,       0.101728109831474241E+06,
+        0.101668908134665704E+06,       0.101597584119515159E+06,       0.101516856663981162E+06,       0.101427599824837293E+06,       0.101330896414631075E+06,
+        0.101227935201261804E+06,       0.101113372919066416E+06,       0.100989129696766337E+06,       0.100861373889168084E+06,       0.100733678225485171E+06,
+        0.100610105917794019E+06,       0.100495004451233079E+06,       0.100402578780181022E+06,       0.100353109983544055E+06,       0.100326440206043859E+06,
+        0.100322735531117156E+06,       0.100342802276422299E+06,       0.100386646482634504E+06,       0.100453451962470805E+06,       0.100549574897853177E+06,
+        0.100666205550992949E+06,       0.100795807241975184E+06,       0.100931381874395069E+06,       0.101067411193584325E+06,       0.101192762302618430E+06,
+        0.101283622761741586E+06,       0.101362350787791220E+06,       0.101430423297678528E+06,       0.101489314399921583E+06,       0.101540641111512159E+06,
+        0.101585585061290316E+06,       0.101627410996723280E+06,       0.101667724011934901E+06,       0.101707970653555123E+06,       0.101751269935565215E+06,
+        0.101811021944586406E+06,       0.101870809774501089E+06,       0.101928469764575537E+06,       0.101981732364511379E+06,       0.102026310772180412E+06,
+        0.102061898497918446E+06,       0.102089845634957077E+06,       0.102110105242362508E+06,       0.102121882127719451E+06,       0.102124061355970684E+06,
+        0.102123733324673376E+06,       0.102124546125847337E+06,       0.102129219082775890E+06,       0.102145351303200790E+06,       0.102166260171440692E+06,
+        0.102190433845960331E+06,       0.102216291023032318E+06,       0.102242152119835548E+06,       0.102260901292175229E+06,       0.102271019053290802E+06,
+        0.102270194336435845E+06,       0.102258376332468251E+06,       0.102232740434276260E+06,       0.102193082447496578E+06,       0.102140339518538545E+06,
+        0.102077291761659100E+06,       0.102007943796066291E+06,       0.101934901694509579E+06,       0.101863769251748963E+06,       0.101795867039438526E+06,
+        0.101734634917306947E+06,       0.101683465453549536E+06,       0.101643719755611994E+06,       0.101613589850316028E+06,       0.101591266195843433E+06,
+        0.101568063676064237E+06,       0.101544190597726789E+06,       0.101518173523634308E+06,       0.101489293133355706E+06,       0.101456969224960791E+06,
+        0.101429471204937334E+06,       0.101413477375518429E+06,       0.101417790921687454E+06,       0.101450822395921219E+06,       0.101510233193849519E+06,
+        0.101585841462266966E+06,       0.101664438788265412E+06,       0.101733920550829818E+06,       0.101788706066789920E+06,       0.101825829329588349E+06,
+        0.101850405636027645E+06,       0.101871083937706790E+06,       0.101887382097668247E+06,       0.101896455049501354E+06,       0.101897289413654769E+06,
+        0.101886248870001597E+06,       0.101867415759247539E+06,       0.101847995171556977E+06,       0.101838485076295401E+06,       0.101834100858943464E+06,
+        0.101832686427819717E+06,       0.101828063075528247E+06,       0.101816399093795466E+06,       0.101796719243765314E+06,       0.101767216502717842E+06,
+        0.101721966250064579E+06,       0.101668953652310433E+06,       0.101611959093829370E+06,       0.101556227036786251E+06,       0.101506414279391960E+06,
+        0.101461971390057777E+06,       0.101425468706421860E+06,       0.101404163733341426E+06,       0.101399096476539751E+06,       0.101405522879150667E+06,
+        0.101421050121819761E+06,       0.101438689378578158E+06,       0.101460180927881505E+06,       0.101485796004159551E+06,       0.101513713918150577E+06,
+        0.101542550860272706E+06,       0.101568068025141562E+06,       0.101588331740948968E+06,       0.101600913455480535E+06,       0.101607630152187616E+06,
+        0.101607407012941694E+06,       0.101598607139348926E+06,       0.101581645287700347E+06,       0.101557205094100689E+06,       0.101527626140599372E+06,
+        0.101498954813168501E+06,       0.101474478229909684E+06,       0.101456851592814171E+06,       0.101447916547657107E+06,       0.101451532249133510E+06,
+        0.101469023039587555E+06,       0.101500095660945575E+06,       0.101543265481331633E+06,       0.101599989966535504E+06,       0.101661394639400824E+06,
+        0.101722843298708525E+06,       0.101781217785530855E+06,       0.101833962893083750E+06,       0.101869504665579036E+06,       0.101891006131465809E+06,
+        0.101907724224272592E+06,       0.101922174311177543E+06,       0.101935867942354409E+06,       0.101950426065447158E+06,       0.100607098755765037E+06,
+        0.100655240281701743E+06,       0.100726600376942501E+06,       0.100809356254825645E+06,       0.100899004634437370E+06,       0.100993829979357848E+06,
+        0.101091906852125423E+06,       0.101191172811513417E+06,       0.101289507328918466E+06,       0.101384817108912728E+06,       0.101475128234200398E+06,
+        0.101556622026723067E+06,       0.101627508170991190E+06,       0.101685968687809233E+06,       0.101732567539073978E+06,       0.101767665006896481E+06,
+        0.101790488350008833E+06,       0.101800548295886649E+06,       0.101797644943693944E+06,       0.101781861361740375E+06,       0.101747873759633774E+06,
+        0.101701859594637368E+06,       0.101644745116156497E+06,       0.101577648617696381E+06,       0.101501095515959882E+06,       0.101413668608079461E+06,
+        0.101318547892610906E+06,       0.101214143017131020E+06,       0.101099338905386365E+06,       0.100978397278849705E+06,       0.100854041321450713E+06,
+        0.100729710648106629E+06,       0.100609462614676057E+06,       0.100497826949930561E+06,       0.100414459388165211E+06,       0.100356511886266162E+06,
+        0.100322777395156372E+06,       0.100316042351856522E+06,       0.100332097081535409E+06,       0.100371561029088683E+06,       0.100439298341075264E+06,
+        0.100532568922400489E+06,       0.100643002914990837E+06,       0.100765387761929349E+06,       0.100893492581718543E+06,       0.101020399500629603E+06,
+        0.101112706098134367E+06,       0.101194570041727216E+06,       0.101269273413618284E+06,       0.101335562528605122E+06,       0.101394060212437602E+06,
+        0.101445483977905038E+06,       0.101491335215433006E+06,       0.101533800970901357E+06,       0.101574594133775521E+06,       0.101615314066683874E+06,
+        0.101662259781339875E+06,       0.101713149881755875E+06,       0.101764653351764238E+06,       0.101815034877485959E+06,       0.101864609985221337E+06,
+        0.101906670614871124E+06,       0.101942016196974146E+06,       0.101970135166829859E+06,       0.101990609169172516E+06,       0.101996950610404732E+06,
+        0.101996810049367472E+06,       0.101996317886868128E+06,       0.101998445642552077E+06,       0.102008824591142213E+06,       0.102027635971959302E+06,
+        0.102051641514833580E+06,       0.102080850665324571E+06,       0.102117904503131693E+06,       0.102157634194590821E+06,       0.102192504721610734E+06,
+        0.102219235460459910E+06,       0.102236777347130861E+06,       0.102242902162718834E+06,       0.102236355155139478E+06,       0.102216651883876315E+06,
+        0.102180426444035780E+06,       0.102133083528179093E+06,       0.102077034681391349E+06,       0.102016323324797893E+06,       0.101953628282518228E+06,
+        0.101890856388452012E+06,       0.101830915333128054E+06,       0.101779447310396441E+06,       0.101734080624489550E+06,       0.101693870504157734E+06,
+        0.101656684022070389E+06,       0.101619340499046710E+06,       0.101584139894536143E+06,       0.101548750508560886E+06,       0.101508927593507731E+06,
+        0.101469477866382847E+06,       0.101436805815304979E+06,       0.101415993387059803E+06,       0.101423466131997789E+06,       0.101453632286171531E+06,
+        0.101508029375078389E+06,       0.101580823336132147E+06,       0.101656593588021438E+06,       0.101722011470405239E+06,       0.101771508397742451E+06,
+        0.101807913013677957E+06,       0.101834964343916130E+06,       0.101850402618856344E+06,       0.101859186985402383E+06,       0.101860587418252151E+06,
+        0.101854518941434624E+06,       0.101838720084331697E+06,       0.101819824582356232E+06,       0.101803402458019846E+06,       0.101796893209118367E+06,
+        0.101799592648883248E+06,       0.101802452116411427E+06,       0.101801265547130839E+06,       0.101788566176828695E+06,       0.101765879286445153E+06,
+        0.101732953696931960E+06,       0.101687950182710265E+06,       0.101633167492824286E+06,       0.101575598313827417E+06,       0.101518917024984054E+06,
+        0.101468456845219422E+06,       0.101425013728590406E+06,       0.101390361593186084E+06,       0.101368216911030337E+06,       0.101370279495935785E+06,
+        0.101384930299833504E+06,       0.101409208395769369E+06,       0.101438468993645060E+06,       0.101467787546390668E+06,       0.101499453696433935E+06,
+        0.101530518538351142E+06,       0.101558938309742618E+06,       0.101581645149348537E+06,       0.101598207551499479E+06,       0.101607649285544889E+06,
+        0.101609802844516307E+06,       0.101605573988511765E+06,       0.101593037714059843E+06,       0.101573514674016667E+06,       0.101549196000671189E+06,
+        0.101522849664976588E+06,       0.101498330261054754E+06,       0.101479889987571310E+06,       0.101470097853539497E+06,       0.101471225349216998E+06,
+        0.101486588535369752E+06,       0.101515334980482352E+06,       0.101556357596876667E+06,       0.101607560846124834E+06,       0.101666443968593783E+06,
+        0.101729419441298363E+06,       0.101791387702929569E+06,       0.101848011454613385E+06,       0.101897514583017852E+06,       0.101939642427183790E+06,
+        0.101960271009820077E+06,       0.101975158780464568E+06,       0.101986424653725320E+06,       0.101995822513432664E+06,       0.102004992120982162E+06,
+        0.100578411052675729E+06,       0.100635318784110554E+06,       0.100702588041198120E+06,       0.100778983082032035E+06,       0.100867372014784603E+06,
+        0.100961003291497836E+06,       0.101057944061462069E+06,       0.101156164506401896E+06,       0.101253562485936651E+06,       0.101348041518852056E+06,
+        0.101435305736620867E+06,       0.101514565773677881E+06,       0.101585969098869886E+06,       0.101648080408071197E+06,       0.101699676885091831E+06,
+        0.101737081890784044E+06,       0.101761287426791518E+06,       0.101772434840921720E+06,       0.101770158786062922E+06,       0.101748537453835859E+06,
+        0.101714770053279746E+06,       0.101669742860261249E+06,       0.101614251954373656E+06,       0.101549290791504973E+06,       0.101476027861641691E+06,
+        0.101395781087328636E+06,       0.101309332351133024E+06,       0.101208930191804626E+06,       0.101100827344175617E+06,       0.100987036454510526E+06,
+        0.100870048278151575E+06,       0.100753131768219901E+06,       0.100640279785382925E+06,       0.100543839073244162E+06,       0.100470119984832578E+06,
+        0.100412920571785522E+06,       0.100374418672954038E+06,       0.100356321711452154E+06,       0.100359754832890321E+06,       0.100393037545625295E+06,
+        0.100461456665693026E+06,       0.100548040695085903E+06,       0.100649774320544951E+06,       0.100762231735881898E+06,       0.100879810004682629E+06,
+        0.100978944107382951E+06,       0.101056139035317683E+06,       0.101129122973660080E+06,       0.101197131809436498E+06,       0.101259400864402109E+06,
+        0.101315369721067444E+06,       0.101366567376128267E+06,       0.101413068730518760E+06,       0.101456050767495792E+06,       0.101497394979706776E+06,
+        0.101540388547235518E+06,       0.101589723482442452E+06,       0.101639287384227951E+06,       0.101688119127630343E+06,       0.101734881227949692E+06,
+        0.101774055633342999E+06,       0.101806176343790416E+06,       0.101833758016756707E+06,       0.101855867301477920E+06,       0.101869669516056863E+06,
+        0.101867423844660036E+06,       0.101862185064065459E+06,       0.101857648911106618E+06,       0.101857166947219768E+06,       0.101869453362050233E+06,
+        0.101889395994667357E+06,       0.101917145273055416E+06,       0.101952665990595080E+06,       0.102005113066678605E+06,       0.102059201352783610E+06,
+        0.102110590092891594E+06,       0.102155134120450733E+06,       0.102189008661845161E+06,       0.102212893719536674E+06,       0.102224794573552019E+06,
+        0.102221917283866860E+06,       0.102203717818992911E+06,       0.102173729797711843E+06,       0.102134066117315539E+06,       0.102088155198460590E+06,
+        0.102037322504280150E+06,       0.101983804157969324E+06,       0.101930882216981918E+06,       0.101882568835916391E+06,       0.101835848097687121E+06,
+        0.101791045975844638E+06,       0.101745969221785286E+06,       0.101701401299452598E+06,       0.101658034247290489E+06,       0.101613792586539625E+06,
+        0.101566658381616784E+06,       0.101523107840297394E+06,       0.101485865057037794E+06,       0.101467196461575470E+06,       0.101465231282475186E+06,
+        0.101481792269703801E+06,       0.101521171184929379E+06,       0.101584362409188645E+06,       0.101654606382538637E+06,       0.101708085889500013E+06,
+        0.101750884319908815E+06,       0.101781151271932016E+06,       0.101802265119226417E+06,       0.101814660749166302E+06,       0.101818059160636913E+06,
+        0.101815376584443497E+06,       0.101808025978518664E+06,       0.101796093709958877E+06,       0.101783205967926551E+06,       0.101773519465245452E+06,
+        0.101768347262196490E+06,       0.101772318875173907E+06,       0.101774032894583841E+06,       0.101769304008539359E+06,       0.101752736287782580E+06,
+        0.101724576811767562E+06,       0.101687606667018787E+06,       0.101642832213384885E+06,       0.101588413046507747E+06,       0.101532052789407389E+06,
+        0.101477089478998780E+06,       0.101426937636667906E+06,       0.101383983337104524E+06,       0.101350070067916895E+06,       0.101327894217902314E+06,
+        0.101330294767154453E+06,       0.101349863124191863E+06,       0.101379498558547202E+06,       0.101415335536042723E+06,       0.101450570253408456E+06,
+        0.101486617503024216E+06,       0.101521790468661828E+06,       0.101553679702050722E+06,       0.101576951634593526E+06,       0.101592599322586801E+06,
+        0.101600882539355007E+06,       0.101601982296252419E+06,       0.101593711037322297E+06,       0.101576295595724252E+06,       0.101552760225610255E+06,
+        0.101525860012702775E+06,       0.101500304746004782E+06,       0.101482529221745732E+06,       0.101472615361795470E+06,       0.101472486373178777E+06,
+        0.101483501295817390E+06,       0.101509279618775763E+06,       0.101549321581216165E+06,       0.101600205319342873E+06,       0.101659295372980385E+06,
+        0.101721590076149907E+06,       0.101783337171577281E+06,       0.101842427132610639E+06,       0.101897333754838794E+06,       0.101946395082493676E+06,
+        0.101988236942542819E+06,       0.102017526821220177E+06,       0.102031828714653369E+06,       0.102041305631011754E+06,       0.102047936605813040E+06,
+        0.102053545022376406E+06,       0.100561618890645521E+06,       0.100618675407796312E+06,       0.100685232428278308E+06,       0.100760148812781379E+06,
+        0.100842043992347171E+06,       0.100930626779751663E+06,       0.101025380770443604E+06,       0.101121496737499227E+06,       0.101216863489791329E+06,
+        0.101306591907260168E+06,       0.101390820508431876E+06,       0.101469198549494278E+06,       0.101540194252744899E+06,       0.101602382440106187E+06,
+        0.101654511301229999E+06,       0.101695567045773627E+06,       0.101724835997739530E+06,       0.101738206502799672E+06,       0.101728469792924647E+06,
+        0.101706705766990082E+06,       0.101673943944349550E+06,       0.101630654689779229E+06,       0.101577521269946941E+06,       0.101515423259462186E+06,
+        0.101445417400194085E+06,       0.101369301689578249E+06,       0.101289207179891833E+06,       0.101202291357723705E+06,       0.101109840862024794E+06,
+        0.101010060536526478E+06,       0.100903624985256116E+06,       0.100797206247763170E+06,       0.100697721229483854E+06,       0.100617879166639119E+06,
+        0.100549334862444375E+06,       0.100494554672908853E+06,       0.100455829928310864E+06,       0.100435159192249281E+06,       0.100434140902790139E+06,
+        0.100463827743078145E+06,       0.100516682399563157E+06,       0.100588924784875649E+06,       0.100677081454071609E+06,       0.100775641942890885E+06,
+        0.100875619518922729E+06,       0.100945870321605689E+06,       0.101013133541299816E+06,       0.101077503451870405E+06,       0.101138697419382283E+06,
+        0.101196245970018281E+06,       0.101247478059058092E+06,       0.101295381961911495E+06,       0.101341293286219021E+06,       0.101385520658941925E+06,
+        0.101428507369388099E+06,       0.101477628384924552E+06,       0.101527439265766385E+06,       0.101575625370267109E+06,       0.101621502298168052E+06,
+        0.101663832962092813E+06,       0.101694866512688139E+06,       0.101720503961646493E+06,       0.101740691340596662E+06,       0.101755087321406769E+06,
+        0.101753809082437700E+06,       0.101741526291839808E+06,       0.101728608499199152E+06,       0.101718502985755840E+06,       0.101716703972249219E+06,
+        0.101727329002141589E+06,       0.101746865685733879E+06,       0.101776394054624689E+06,       0.101821041668101156E+06,       0.101883903619016666E+06,
+        0.101950707313021689E+06,       0.102016579439056790E+06,       0.102074857884153607E+06,       0.102122966684235507E+06,       0.102162229375958646E+06,
+        0.102191070936530305E+06,       0.102205291241337400E+06,       0.102205781057829736E+06,       0.102194562190391560E+06,       0.102173148282368042E+06,
+        0.102144343637741913E+06,       0.102108830373893230E+06,       0.102068178268037620E+06,       0.102026306869767315E+06,       0.101984352807968040E+06,
+        0.101941207962857719E+06,       0.101897306791024865E+06,       0.101851675563811092E+06,       0.101805566459294409E+06,       0.101759497966033654E+06,
+        0.101711369603787127E+06,       0.101663340792011426E+06,       0.101619227450208040E+06,       0.101582695699032221E+06,       0.101558695579259147E+06,
+        0.101546029798913645E+06,       0.101545588074274448E+06,       0.101567771713567665E+06,       0.101607748589558381E+06,       0.101688531278736336E+06,
+        0.101712604992569381E+06,       0.101743096832469848E+06,       0.101760620836449103E+06,       0.101769961191482769E+06,       0.101772822414354494E+06,
+        0.101770897529126829E+06,       0.101765958574697099E+06,       0.101759443212774597E+06,       0.101753267088761611E+06,       0.101750523367411457E+06,
+        0.101749706624054088E+06,       0.101749678109808025E+06,       0.101749285406108000E+06,       0.101744523322546709E+06,       0.101733022628531995E+06,
+        0.101711787295703034E+06,       0.101679008351294804E+06,       0.101639130834085285E+06,       0.101593625025334943E+06,       0.101541393928166348E+06,
+        0.101487105460277933E+06,       0.101434417444056598E+06,       0.101385551046964029E+06,       0.101342006161188154E+06,       0.101307140291916905E+06,
+        0.101283659047930778E+06,       0.101280818499683781E+06,       0.101302531797972479E+06,       0.101335121595155433E+06,       0.101374651651055479E+06,
+        0.101415853089015101E+06,       0.101456337388213346E+06,       0.101495434796083166E+06,       0.101530692665964845E+06,       0.101556780887815577E+06,
+        0.101572252524485899E+06,       0.101580348283763422E+06,       0.101581288046389862E+06,       0.101573497525049606E+06,       0.101553231842264839E+06,
+        0.101527699101148173E+06,       0.101500366015751919E+06,       0.101475147159402040E+06,       0.101462872833845016E+06,       0.101461553787802579E+06,
+        0.101470899121458526E+06,       0.101491574771335596E+06,       0.101526109462851629E+06,       0.101575993595638676E+06,       0.101633539000189689E+06,
+        0.101696017474012726E+06,       0.101760468358366721E+06,       0.101823741442191822E+06,       0.101882328042741588E+06,       0.101936367528451112E+06,
+        0.101984427337493747E+06,       0.102025414498975340E+06,       0.102058638462272647E+06,       0.102075739484648249E+06,       0.102084208298001584E+06,
+        0.102090352048999324E+06,       0.102097473483009948E+06,       0.100548208007167515E+06,       0.100605095427047316E+06,       0.100670706010579946E+06,
+        0.100743978438203791E+06,       0.100823629545142438E+06,       0.100908178696427160E+06,       0.100995982580288008E+06,       0.101087314481146692E+06,
+        0.101176414116338347E+06,       0.101262458356531424E+06,       0.101344547676157905E+06,       0.101421163164599711E+06,       0.101490796631980134E+06,
+        0.101552014265238700E+06,       0.101603518886931997E+06,       0.101644210460807284E+06,       0.101673244462872826E+06,       0.101680735386759538E+06,
+        0.101674706326058280E+06,       0.101655388783202914E+06,       0.101624670690422980E+06,       0.101584138623298597E+06,       0.101534372942937815E+06,
+        0.101476149074961329E+06,       0.101410568098193849E+06,       0.101343974609530458E+06,       0.101270896963409337E+06,       0.101192137510717424E+06,
+        0.101108880683603289E+06,       0.101022724309234283E+06,       0.100935715390839119E+06,       0.100850390680374665E+06,       0.100774745624155403E+06,
+        0.100703597598235123E+06,       0.100641200968575649E+06,       0.100589854186508950E+06,       0.100551830710988637E+06,       0.100529267606730675E+06,
+        0.100528295556730111E+06,       0.100549682448172025E+06,       0.100589658714417616E+06,       0.100646339245096955E+06,       0.100716647083594595E+06,
+        0.100796330849082777E+06,       0.100862509969368170E+06,       0.100921980592583743E+06,       0.100978572070364797E+06,       0.101033342690100937E+06,
+        0.101086524659137300E+06,       0.101137201268390738E+06,       0.101183872284207260E+06,       0.101229010938212319E+06,       0.101273109489612165E+06,
+        0.101316619892713090E+06,       0.101361395459038307E+06,       0.101412097251747749E+06,       0.101462443230712757E+06,       0.101510984330326377E+06,
+        0.101556016862365155E+06,       0.101593723038725308E+06,       0.101622224707454676E+06,       0.101642725690420295E+06,       0.101656123946685548E+06,
+        0.101662476115757090E+06,       0.101646779923387396E+06,       0.101626132803217159E+06,       0.101605491482854268E+06,       0.101589147781629013E+06,
+        0.101585251139149026E+06,       0.101593208937773641E+06,       0.101612184718608827E+06,       0.101643206312575028E+06,       0.101695818816071987E+06,
+        0.101764928221785813E+06,       0.101840193899589591E+06,       0.101916494038259974E+06,       0.101982907500618603E+06,       0.102040970845980133E+06,
+        0.102091837845918839E+06,       0.102134078254784647E+06,       0.102164394058369740E+06,       0.102183887971255608E+06,       0.102192909965391460E+06,
+        0.102191628213096585E+06,       0.102180725302393228E+06,       0.102161729213580154E+06,       0.102136138522838941E+06,       0.102107142982990175E+06,
+        0.102074807010027405E+06,       0.102039103318180598E+06,       0.102000767273371166E+06,       0.101960362993373739E+06,       0.101918302600709168E+06,
+        0.101875356744285367E+06,       0.101830760544282428E+06,       0.101787058843222650E+06,       0.101746854946198102E+06,       0.101712081627763269E+06,
+        0.101684170852595838E+06,       0.101663959106856215E+06,       0.101652494286064044E+06,       0.101669560085676902E+06,       0.101704444840698343E+06,
+        0.101700571875176043E+06,       0.101721535240709272E+06,       0.101745779185469408E+06,       0.101743873285487498E+06,       0.101738112527286779E+06,
+        0.101730354652939321E+06,       0.101722249363334777E+06,       0.101714810079808434E+06,       0.101708639567806546E+06,       0.101706113756708350E+06,
+        0.101714036658689380E+06,       0.101722369687996295E+06,       0.101728359378835914E+06,       0.101725407412529981E+06,       0.101714092896974922E+06,
+        0.101695958827062772E+06,       0.101670373525743838E+06,       0.101635678816692453E+06,       0.101595418488830386E+06,       0.101550830010831283E+06,
+        0.101501001127021242E+06,       0.101448446456819016E+06,       0.101396954698346424E+06,       0.101348845039631386E+06,       0.101304062386825870E+06,
+        0.101267451987425215E+06,       0.101242193004994537E+06,       0.101233636404356381E+06,       0.101254846780972948E+06,       0.101287816325990920E+06,
+        0.101328479900242310E+06,       0.101372263340125617E+06,       0.101414617472293321E+06,       0.101455579958959497E+06,       0.101492853465017077E+06,
+        0.101523278594798670E+06,       0.101540885808085994E+06,       0.101551450070809791E+06,       0.101555278183125236E+06,       0.101552538038431827E+06,
+        0.101533468414678850E+06,       0.101508500675057512E+06,       0.101482796927905787E+06,       0.101462379842144772E+06,       0.101454892688142470E+06,
+        0.101464325466535738E+06,       0.101484135316789325E+06,       0.101513829601535981E+06,       0.101552601163330517E+06,       0.101603687744035284E+06,
+        0.101663791684624332E+06,       0.101727767774695865E+06,       0.101792762408730807E+06,       0.101856171640086162E+06,       0.101914393070144404E+06,
+        0.101966522189743861E+06,       0.102012469486766611E+06,       0.102051444457628037E+06,       0.102084940153698932E+06,       0.102109046172999864E+06,
+        0.102120432478447823E+06,       0.102128404810622902E+06,       0.102134103220031029E+06,       0.100537775584916468E+06,       0.100594064464056602E+06,
+        0.100658361556240663E+06,       0.100729672253821584E+06,       0.100806792979668055E+06,       0.100888331818478662E+06,       0.100972640703881028E+06,
+        0.101054356923499276E+06,       0.101136218305642746E+06,       0.101218059282136164E+06,       0.101297128938538604E+06,       0.101371075949467442E+06,
+        0.101438396724319813E+06,       0.101497631946100053E+06,       0.101547424352719638E+06,       0.101586575081165560E+06,       0.101605344305898223E+06,
+        0.101611802560867160E+06,       0.101607062825132700E+06,       0.101591492022024759E+06,       0.101565740711957988E+06,       0.101530433274754861E+06,
+        0.101485334233030881E+06,       0.101432291750987933E+06,       0.101377329376169117E+06,       0.101317207789115375E+06,       0.101251671625233779E+06,
+        0.101181417558871472E+06,       0.101107498655681804E+06,       0.101031350521440603E+06,       0.100954821051961742E+06,       0.100889588668171375E+06,
+        0.100831564213864112E+06,       0.100778330447916189E+06,       0.100731315465427993E+06,       0.100686629349019524E+06,       0.100649847468544394E+06,
+        0.100626941602005361E+06,       0.100623247975728824E+06,       0.100634858419738637E+06,       0.100661484011766472E+06,       0.100701891329741135E+06,
+        0.100753800334865009E+06,       0.100807541818709986E+06,       0.100848659308669099E+06,       0.100892548219874385E+06,       0.100938268977634565E+06,
+        0.100984815257879964E+06,       0.101031244555508310E+06,       0.101077229148432787E+06,       0.101120811543651638E+06,       0.101163080762204729E+06,
+        0.101205133328227632E+06,       0.101247555470727515E+06,       0.101295212705033598E+06,       0.101345677435592734E+06,       0.101395414916676789E+06,
+        0.101443142113523310E+06,       0.101487391928729412E+06,       0.101523112860496927E+06,       0.101551091220213115E+06,       0.101571202362138647E+06,
+        0.101582765233024111E+06,       0.101580576420733298E+06,       0.101559006090641735E+06,       0.101532638260340871E+06,       0.101505636854472148E+06,
+        0.101482925905383032E+06,       0.101478221569192814E+06,       0.101483749961331385E+06,       0.101500913638159356E+06,       0.101531272427147036E+06,
+        0.101587537367870260E+06,       0.101657752923680528E+06,       0.101735341257440305E+06,       0.101815392189158199E+06,       0.101883415778570139E+06,
+        0.101946670918334348E+06,       0.102005217869353437E+06,       0.102057696492837160E+06,       0.102103056512906318E+06,       0.102140317424393026E+06,
+        0.102168554530401248E+06,       0.102186118819968382E+06,       0.102192209463688341E+06,       0.102189750578587409E+06,       0.102179864477714669E+06,
+        0.102164622014063440E+06,       0.102144222519251431E+06,       0.102119031801210527E+06,       0.102090001778615697E+06,       0.102058500322085427E+06,
+        0.102024456224525828E+06,       0.101988984142914618E+06,       0.101952414757101811E+06,       0.101915891308398845E+06,       0.101881589770049075E+06,
+        0.101851270386932039E+06,       0.101822396029631869E+06,       0.101797879312661476E+06,       0.101778855518825338E+06,       0.101766764384149530E+06,
+        0.101767117846749301E+06,       0.101765125533417420E+06,       0.101764893632733350E+06,       0.101755791518637372E+06,       0.101738415072208983E+06,
+        0.101717693412627370E+06,       0.101697849566573597E+06,       0.101679653680022544E+06,       0.101666036116405725E+06,       0.101657802915804903E+06,
+        0.101659358381537619E+06,       0.101675042132274451E+06,       0.101690591932105221E+06,       0.101702102691112683E+06,       0.101698890266004499E+06,
+        0.101685170063431069E+06,       0.101664399827034271E+06,       0.101636981850683907E+06,       0.101602430202209493E+06,       0.101562887328751778E+06,
+        0.101519409569218289E+06,       0.101470958313536248E+06,       0.101419317694792786E+06,       0.101368660117972962E+06,       0.101321145110236859E+06,
+        0.101276071087296979E+06,       0.101238240695380387E+06,       0.101211277007847661E+06,       0.101197902530338179E+06,       0.101215581555680212E+06,
+        0.101246094621904544E+06,       0.101284825497456564E+06,       0.101328072813235674E+06,       0.101370225701783012E+06,       0.101411514155655474E+06,
+        0.101449747457354388E+06,       0.101482930506732373E+06,       0.101505336383574511E+06,       0.101520932260299305E+06,       0.101530875621757339E+06,
+        0.101535660531138637E+06,       0.101527586118792417E+06,       0.101509422337400800E+06,       0.101491464951296075E+06,       0.101477501245060659E+06,
+        0.101471117495995146E+06,       0.101486007619632292E+06,       0.101510757134502812E+06,       0.101544449952577212E+06,       0.101586055913800505E+06,
+        0.101635695535260849E+06,       0.101695729268481853E+06,       0.101758721424995805E+06,       0.101822050355179599E+06,       0.101883639102236455E+06,
+        0.101943513401448537E+06,       0.101994845858460889E+06,       0.102039591261445501E+06,       0.102076829661285185E+06,       0.102105964877399136E+06,
+        0.102126794141653125E+06,       0.102139212624906431E+06,       0.102146437567661822E+06,       0.102150500772487969E+06,       0.100529766660700814E+06,
+        0.100584936771645967E+06,       0.100647449978120101E+06,       0.100716367627817162E+06,       0.100790551176116554E+06,       0.100867761991881081E+06,
+        0.100944392016551021E+06,       0.101022283363768598E+06,       0.101100094859150340E+06,       0.101176390860314190E+06,       0.101249683961219664E+06,
+        0.101319429056106397E+06,       0.101383533080313195E+06,       0.101439851116198683E+06,       0.101486953091034593E+06,       0.101514035380600777E+06,
+        0.101530274350960754E+06,       0.101536503930903316E+06,       0.101532791192708028E+06,       0.101519414459226711E+06,       0.101496896545514726E+06,
+        0.101466032997577611E+06,       0.101427914819550628E+06,       0.101386928031759133E+06,       0.101339510051842895E+06,       0.101286534144961479E+06,
+        0.101229073267725224E+06,       0.101167697805292846E+06,       0.101103306882333491E+06,       0.101037149535454111E+06,       0.100976699320003900E+06,
+        0.100924651148493227E+06,       0.100875357695395811E+06,       0.100829790933326149E+06,       0.100789063316662927E+06,       0.100754382631035871E+06,
+        0.100727001544673127E+06,       0.100712812235705482E+06,       0.100707393276471601E+06,       0.100709250582931563E+06,       0.100722573388958059E+06,
+        0.100746645734061545E+06,       0.100779895700786001E+06,       0.100804396943602027E+06,       0.100830073367685545E+06,       0.100859556300720957E+06,
+        0.100892387870409642E+06,       0.100927975633083144E+06,       0.100965551602012056E+06,       0.101004683619487085E+06,       0.101045330597207460E+06,
+        0.101087013008305672E+06,       0.101129446011777312E+06,       0.101173089623770706E+06,       0.101224746709176397E+06,       0.101276086346010212E+06,
+        0.101326149198708168E+06,       0.101374129662616979E+06,       0.101418481717269460E+06,       0.101456308681409500E+06,       0.101487100471046055E+06,
+        0.101509891159304345E+06,       0.101523887972284254E+06,       0.101519085107067789E+06,       0.101499035636973305E+06,       0.101474107212159681E+06,
+        0.101448532598947975E+06,       0.101428087461135481E+06,       0.101420183587270294E+06,       0.101421890388346379E+06,       0.101434924963140438E+06,
+        0.101461175739645623E+06,       0.101512942173575240E+06,       0.101576674737662266E+06,       0.101648311032956131E+06,       0.101723489882150840E+06,
+        0.101787480132178534E+06,       0.101850028038504926E+06,       0.101910282046108841E+06,       0.101967661149882086E+06,       0.102023524732844948E+06,
+        0.102074242265323439E+06,       0.102118210977073832E+06,       0.102152171123111169E+06,       0.102173114540454029E+06,       0.102185669537254769E+06,
+        0.102190716001940251E+06,       0.102189608656019511E+06,       0.102183136999173483E+06,       0.102171644521202223E+06,       0.102155743904811548E+06,
+        0.102135288964191917E+06,       0.102110694874428111E+06,       0.102083194402445937E+06,       0.102053140888443799E+06,       0.102023029614340878E+06,
+        0.101994305634375618E+06,       0.101968130490490352E+06,       0.101944981816832049E+06,       0.101917533305451230E+06,       0.101891792228334729E+06,
+        0.101867962161627947E+06,       0.101846942835226117E+06,       0.101828399128989535E+06,       0.101808349218342468E+06,       0.101783185169399527E+06,
+        0.101752129728330387E+06,       0.101717730687555537E+06,       0.101682415904166002E+06,       0.101651064189548269E+06,       0.101628214835530569E+06,
+        0.101615101470726600E+06,       0.101622078677434256E+06,       0.101640462768905272E+06,       0.101659951220889372E+06,       0.101675418801938606E+06,
+        0.101673225878615136E+06,       0.101661928138148622E+06,       0.101642662123728296E+06,       0.101615888022248750E+06,       0.101582080924031965E+06,
+        0.101543348953446970E+06,       0.101500631267208417E+06,       0.101452586432289259E+06,       0.101401256146737229E+06,       0.101350655526253569E+06,
+        0.101302884790491065E+06,       0.101258041134635379E+06,       0.101219975854280870E+06,       0.101192075948155878E+06,       0.101176911767419486E+06,
+        0.101189137340948175E+06,       0.101215695508690798E+06,       0.101250828629981872E+06,       0.101291224981271953E+06,       0.101331080207125036E+06,
+        0.101370380504028988E+06,       0.101408081153893057E+06,       0.101442820210735677E+06,       0.101470980944890180E+06,       0.101493569638212546E+06,
+        0.101512139169726375E+06,       0.101526611096755121E+06,       0.101532495997983948E+06,       0.101522627542459595E+06,       0.101512420265735462E+06,
+        0.101505304745591246E+06,       0.101504334695817597E+06,       0.101519650872094615E+06,       0.101547899391185740E+06,       0.101583965970937570E+06,
+        0.101627433236286277E+06,       0.101678082609776582E+06,       0.101737298190423375E+06,       0.101799968663717998E+06,       0.101862212637869627E+06,
+        0.101921525254885390E+06,       0.101975615485969174E+06,       0.102022129365600340E+06,       0.102060753757629835E+06,       0.102091435012152549E+06,
+        0.102114037703653419E+06,       0.102128864386004381E+06,       0.102136712377933785E+06,       0.102141341896670521E+06,       0.102142376150148193E+06,
+        0.100523535976660394E+06,       0.100577052820581303E+06,       0.100637236479140498E+06,       0.100703252727134633E+06,       0.100772552025250538E+06,
+        0.100843355148487011E+06,       0.100916200005643404E+06,       0.100989978980367348E+06,       0.101063458978865412E+06,       0.101135313180651341E+06,
+        0.101204158192835064E+06,       0.101268596961150513E+06,       0.101327267803054579E+06,       0.101379219393509498E+06,       0.101411658551840825E+06,
+        0.101435013304419204E+06,       0.101449723991433348E+06,       0.101455671589434161E+06,       0.101452876078218949E+06,       0.101441532989260799E+06,
+        0.101422046210621003E+06,       0.101395056661309005E+06,       0.101365757780455795E+06,       0.101332677387078918E+06,       0.101293673363073496E+06,
+        0.101249457127459696E+06,       0.101201011753970408E+06,       0.101149108558075517E+06,       0.101094587629913221E+06,       0.101040779590145175E+06,
+        0.100995382496306906E+06,       0.100951579695860622E+06,       0.100909850434587090E+06,       0.100870858422985533E+06,       0.100835419863702089E+06,
+        0.100804467614276640E+06,       0.100781685669042199E+06,       0.100767335396187831E+06,       0.100759289879836622E+06,       0.100757866722066232E+06,
+        0.100763078005519506E+06,       0.100774506516805646E+06,       0.100786062954307781E+06,       0.100793269206959361E+06,       0.100804822422906916E+06,
+        0.100820834091496698E+06,       0.100841255618750598E+06,       0.100865889078778535E+06,       0.100894749198775666E+06,       0.100927416956011424E+06,
+        0.100963395796724551E+06,       0.101002315623510774E+06,       0.101043887250100248E+06,       0.101091039191901757E+06,       0.101144066547046401E+06,
+        0.101197932497966991E+06,       0.101251195535936524E+06,       0.101302429885710808E+06,       0.101350642114984890E+06,       0.101394018940216731E+06,
+        0.101430608604817069E+06,       0.101459057570376521E+06,       0.101478044590623220E+06,       0.101475387865733283E+06,       0.101461856537208994E+06,
+        0.101443018892087159E+06,       0.101422586718123261E+06,       0.101406882059484167E+06,       0.101400350668646613E+06,       0.101401136819027641E+06,
+        0.101411047287252732E+06,       0.101432998273655045E+06,       0.101475019664207721E+06,       0.101526976345226532E+06,       0.101585936905203198E+06,
+        0.101648470322235924E+06,       0.101703644183282871E+06,       0.101759331828263079E+06,       0.101814866055730265E+06,       0.101869901220545507E+06,
+        0.101928914084517004E+06,       0.101985712555209233E+06,       0.102038213057230983E+06,       0.102083503006818413E+06,       0.102116318481194263E+06,
+        0.102142478770143352E+06,       0.102162510227578357E+06,       0.102176745632176331E+06,       0.102185382260760132E+06,       0.102189351865029588E+06,
+        0.102188985060908250E+06,       0.102181978502190381E+06,       0.102166343098074416E+06,       0.102144949217122790E+06,       0.102118539343817305E+06,
+        0.102090320241642432E+06,       0.102064949154931208E+06,       0.102041510471142406E+06,       0.102020894051233234E+06,       0.102002076919490239E+06,
+        0.101978687982916701E+06,       0.101949947159686926E+06,       0.101920721729201105E+06,       0.101890840787188339E+06,       0.101858502442174227E+06,
+        0.101821787050020226E+06,       0.101779170614060145E+06,       0.101731633607835785E+06,       0.101683872606227975E+06,       0.101641706250363815E+06,
+        0.101609757163432500E+06,       0.101594408710602715E+06,       0.101599861763739507E+06,       0.101615600568650814E+06,       0.101634792862023707E+06,
+        0.101649560822422354E+06,       0.101653324074520948E+06,       0.101647718645786255E+06,       0.101632892509714380E+06,       0.101607498410070068E+06,
+        0.101573604987650251E+06,       0.101534332171428061E+06,       0.101490882315485491E+06,       0.101441914985506301E+06,       0.101390598505943577E+06,
+        0.101340225499994325E+06,       0.101292893172337470E+06,       0.101249121490931240E+06,       0.101212206615971038E+06,       0.101184803983927792E+06,
+        0.101169090523178049E+06,       0.101177216406820677E+06,       0.101199121436619549E+06,       0.101229487274117826E+06,       0.101265433425285810E+06,
+        0.101301460838134211E+06,       0.101337546551032807E+06,       0.101373572179327981E+06,       0.101408481747705810E+06,       0.101441269413672373E+06,
+        0.101471589979924611E+06,       0.101499094210238720E+06,       0.101523046431578827E+06,       0.101542483002773370E+06,       0.101543831013172356E+06,
+        0.101544064378257113E+06,       0.101546276856648081E+06,       0.101553107004487800E+06,       0.101570758226424994E+06,       0.101603899362922981E+06,
+        0.101643466171828870E+06,       0.101688020902613556E+06,       0.101736066489577410E+06,       0.101788778651382352E+06,       0.101846229772819366E+06,
+        0.101902087545993330E+06,       0.101954243560902876E+06,       0.102000912067655503E+06,       0.102040460468150268E+06,       0.102070397922830496E+06,
+        0.102092123176266672E+06,       0.102106027606901625E+06,       0.102112955537274407E+06,       0.102114233430400913E+06,       0.102110160726652859E+06,
+        0.102103564706523437E+06,       0.100518689604693471E+06,       0.100570188968489383E+06,       0.100627085580226092E+06,       0.100688425846865008E+06,
+        0.100752801664219747E+06,       0.100819711434372482E+06,       0.100888275239485200E+06,       0.100957467842034559E+06,       0.101026141537060103E+06,
+        0.101093053338000958E+06,       0.101156896762082222E+06,       0.101216338486683555E+06,       0.101270050228910055E+06,       0.101303959592322863E+06,
+        0.101331155104026548E+06,       0.101351367252466414E+06,       0.101364631606699608E+06,       0.101370354947362532E+06,       0.101368511938952593E+06,
+        0.101359219879845390E+06,       0.101342770712901329E+06,       0.101323279228074665E+06,       0.101301442257920979E+06,       0.101274216777385765E+06,
+        0.101241963101549714E+06,       0.101205245491941663E+06,       0.101164856326946916E+06,       0.101121839477416492E+06,       0.101077512757932636E+06,
+        0.101040769978266762E+06,       0.101003816768457153E+06,       0.100967482943484662E+06,       0.100932599047362921E+06,       0.100899538621347674E+06,
+        0.100868835073115974E+06,       0.100841822788138859E+06,       0.100822146543393857E+06,       0.100806275342578825E+06,       0.100794425676255967E+06,
+        0.100786746583171247E+06,       0.100783223558698664E+06,       0.100783580356914550E+06,       0.100777240593710594E+06,       0.100772797244677698E+06,
+        0.100771995893256535E+06,       0.100775628518037935E+06,       0.100784330892865575E+06,       0.100798832415402489E+06,       0.100819830174998613E+06,
+        0.100845869940026445E+06,       0.100876821716840641E+06,       0.100912505059014773E+06,       0.100952732377084161E+06,       0.101002888396750073E+06,
+        0.101057716858402928E+06,       0.101114463416698447E+06,       0.101171669964558023E+06,       0.101227895955215106E+06,       0.101283382095900626E+06,
+        0.101334958226825765E+06,       0.101380444142405948E+06,       0.101418245220739525E+06,       0.101446407440058887E+06,       0.101450870781566424E+06,
+        0.101446840525337553E+06,       0.101437171069169228E+06,       0.101424931486162226E+06,       0.101415799787063268E+06,       0.101412071436230064E+06,
+        0.101412950725123417E+06,       0.101420014842418866E+06,       0.101435968083775937E+06,       0.101466352271600088E+06,       0.101503661068658505E+06,
+        0.101546063702057072E+06,       0.101591631627750539E+06,       0.101633780932880036E+06,       0.101677233535571504E+06,       0.101722001382731454E+06,
+        0.101768084603012278E+06,       0.101821697636718192E+06,       0.101876504987276159E+06,       0.101929725277785576E+06,       0.101979436992402916E+06,
+        0.102021048948978249E+06,       0.102058738337406423E+06,       0.102093407361196325E+06,       0.102125483850517805E+06,       0.102150396359340550E+06,
+        0.102169939569479524E+06,       0.102183985952502859E+06,       0.102191376525420768E+06,       0.102185685603385369E+06,       0.102169450367412603E+06,
+        0.102146358644484295E+06,       0.102119842646822071E+06,       0.102094075555721618E+06,       0.102073636097204362E+06,       0.102056299206566269E+06,
+        0.102039605800132485E+06,       0.102021374390271580E+06,       0.101998770599080817E+06,       0.101970853166201807E+06,       0.101937971227922506E+06,
+        0.101900413338984057E+06,       0.101857321774920129E+06,       0.101808436773914334E+06,       0.101755010517902134E+06,       0.101701108954033160E+06,
+        0.101652170013780356E+06,       0.101614009141804403E+06,       0.101594396568573589E+06,       0.101591391668390439E+06,       0.101601222158549106E+06,
+        0.101618244864968845E+06,       0.101635666146591233E+06,       0.101645911116270872E+06,       0.101646699642323045E+06,       0.101636431221179548E+06,
+        0.101609654908569675E+06,       0.101575048385323738E+06,       0.101534330175456344E+06,       0.101489532139668852E+06,       0.101438185377782967E+06,
+        0.101385959560380783E+06,       0.101335194667244825E+06,       0.101287926354806812E+06,       0.101245203663320397E+06,       0.101209646717536321E+06,
+        0.101183113534233489E+06,       0.101167399256673903E+06,       0.101173255047212093E+06,       0.101191266867459737E+06,       0.101217555082850216E+06,
+        0.101249738922742486E+06,       0.101282540292244405E+06,       0.101316175523455371E+06,       0.101351248733287808E+06,       0.101387035478988051E+06,
+        0.101423676548066695E+06,       0.101461316613871037E+06,       0.101497507316982592E+06,       0.101531170814716766E+06,       0.101561263551730270E+06,
+        0.101576206116756410E+06,       0.101586714996634080E+06,       0.101597778963160541E+06,       0.101611464789349586E+06,       0.101630169532632644E+06,
+        0.101664927306783313E+06,       0.101704113353483583E+06,       0.101746416585083251E+06,       0.101790584390523509E+06,       0.101835630759291264E+06,
+        0.101885286326592308E+06,       0.101932452931491775E+06,       0.101975582690834839E+06,       0.102013491689891205E+06,       0.102045391567770363E+06,
+        0.102064776694095723E+06,       0.102074647376751818E+06,       0.102077355461506435E+06,       0.102073009372423272E+06,       0.102062037114194260E+06,
+        0.102045197475351029E+06,       0.102032862053345467E+06,       0.100516203599419721E+06,       0.100565218916304395E+06,       0.100617260891664730E+06,
+        0.100673956912948721E+06,       0.100734470974993252E+06,       0.100796865106346027E+06,       0.100860518975916333E+06,       0.100924514220946570E+06,
+        0.100987769915576093E+06,       0.101049106773664753E+06,       0.101107273840837661E+06,       0.101159905161335395E+06,       0.101194545284544540E+06,
+        0.101223680392232840E+06,       0.101247089234949191E+06,       0.101264590537126525E+06,       0.101276076890375974E+06,       0.101281552099694847E+06,
+        0.101280982310362175E+06,       0.101273943686812767E+06,       0.101262940282394411E+06,       0.101250027136122240E+06,       0.101232503141791327E+06,
+        0.101210483653828545E+06,       0.101184228737493526E+06,       0.101154165002910086E+06,       0.101120906752935975E+06,       0.101085276329601198E+06,
+        0.101055059197187191E+06,       0.101026747435691374E+06,       0.100998039675420368E+06,       0.100969366867174089E+06,       0.100941239345533730E+06,
+        0.100914229378812437E+06,       0.100888324815689179E+06,       0.100866108957016506E+06,       0.100846788167441075E+06,       0.100829635550168416E+06,
+        0.100814589974162533E+06,       0.100801624509251793E+06,       0.100790670060632678E+06,       0.100777235449754880E+06,       0.100759761272309115E+06,
+        0.100744498201414157E+06,       0.100732510380326974E+06,       0.100724806452672536E+06,       0.100722312648745443E+06,       0.100727124797232929E+06,
+        0.100739250727341408E+06,       0.100757924088756554E+06,       0.100783210335334952E+06,       0.100815143464493012E+06,       0.100854893070929611E+06,
+        0.100907659832364327E+06,       0.100964923673006793E+06,       0.101024919613124526E+06,       0.101086575092280807E+06,       0.101148693938726588E+06,
+        0.101212491181683130E+06,       0.101273236178490639E+06,       0.101328963344270000E+06,       0.101377761563192791E+06,       0.101415272026218052E+06,
+        0.101431876200949133E+06,       0.101440210101162083E+06,       0.101442472419936472E+06,       0.101441025799434588E+06,       0.101440273436921474E+06,
+        0.101441412028859413E+06,       0.101444242700126299E+06,       0.101450026358596937E+06,       0.101460476599565445E+06,       0.101479171248484825E+06,
+        0.101501585380914767E+06,       0.101526832551874162E+06,       0.101554045751632453E+06,       0.101581088175181358E+06,       0.101609436210866566E+06,
+        0.101639553558900094E+06,       0.101671699640266219E+06,       0.101712219603055011E+06,       0.101758423241378463E+06,       0.101805738585399682E+06,
+        0.101852962314692355E+06,       0.101899310754771403E+06,       0.101946265190960024E+06,       0.101994211955312698E+06,       0.102041986736160048E+06,
+        0.102085797585756969E+06,       0.102118247218596109E+06,       0.102143944256965377E+06,       0.102160780837746963E+06,       0.102166943569605079E+06,
+        0.102158326056491831E+06,       0.102140886616651740E+06,       0.102119658913957755E+06,       0.102098499930418155E+06,       0.102080904999102844E+06,
+        0.102066516422517074E+06,       0.102054504472527260E+06,       0.102039748545332608E+06,       0.102020600907278713E+06,       0.101995196360471018E+06,
+        0.101963875490564329E+06,       0.101926792596088359E+06,       0.101883686482137069E+06,       0.101834681537134267E+06,       0.101781342698296125E+06,
+        0.101725325815194636E+06,       0.101672635846780700E+06,       0.101631506833831096E+06,       0.101606236395939879E+06,       0.101597475949642787E+06,
+        0.101603731801431582E+06,       0.101625616805930535E+06,       0.101646355193644980E+06,       0.101660903200991379E+06,       0.101665697733909154E+06,
+        0.101654090491919997E+06,       0.101628201204639379E+06,       0.101592718579965003E+06,       0.101550440364196067E+06,       0.101501865690094695E+06,
+        0.101447993110863157E+06,       0.101394085224710812E+06,       0.101342099839650211E+06,       0.101293810362817196E+06,       0.101250946740538144E+06,
+        0.101215426073013630E+06,       0.101188872150540003E+06,       0.101172928312290038E+06,       0.101177855232292422E+06,       0.101192799356549629E+06,
+        0.101215813274799773E+06,       0.101244944643138500E+06,       0.101275131726042877E+06,       0.101307174081444085E+06,       0.101341749283816956E+06,
+        0.101378289914467692E+06,       0.101417332589792815E+06,       0.101459925058367837E+06,       0.101502062670976826E+06,       0.101542401965262659E+06,
+        0.101579707707947498E+06,       0.101605443608385016E+06,       0.101624638835457939E+06,       0.101643143897028465E+06,       0.101662631727210814E+06,
+        0.101684583160134658E+06,       0.101717073342919160E+06,       0.101753756733753267E+06,       0.101791888041425977E+06,       0.101829704004501327E+06,
+        0.101866836453342432E+06,       0.101904943611418348E+06,       0.101941838182645661E+06,       0.101974805182480457E+06,       0.102002312012851093E+06,
+        0.102022951004307251E+06,       0.102034588422611414E+06,       0.102035115083442288E+06,       0.102027670824049870E+06,       0.102012988929236992E+06,
+        0.101992061827493861E+06,       0.101966142466949459E+06,       0.101941390128694227E+06,       0.100514970796833106E+06,       0.100558835077606142E+06,
+        0.100607260398477549E+06,       0.100659655071357542E+06,       0.100715265417817398E+06,       0.100773178786940116E+06,       0.100832331209467477E+06,
+        0.100890717506978282E+06,       0.100947860531606886E+06,       0.101002917974898708E+06,       0.101052195859970219E+06,       0.101086008388641625E+06,
+        0.101115273930014009E+06,       0.101139857117029198E+06,       0.101159622269959131E+06,       0.101174458955507551E+06,       0.101184310219007501E+06,
+        0.101189203551941042E+06,       0.101189284643897758E+06,       0.101186114007991724E+06,       0.101181270068826241E+06,       0.101171908271853448E+06,
+        0.101158297091944536E+06,       0.101141013465808763E+06,       0.101120226925708761E+06,       0.101096239397641839E+06,       0.101069503529764173E+06,
+        0.101044711943530012E+06,       0.101023498931715556E+06,       0.101001656961748697E+06,       0.100979308414565210E+06,       0.100956646567351941E+06,
+        0.100933930245713549E+06,       0.100911474196776457E+06,       0.100891471408871366E+06,       0.100874184642035718E+06,       0.100856582877880370E+06,
+        0.100838800023023141E+06,       0.100821055717833835E+06,       0.100804211342234223E+06,       0.100787393558680691E+06,       0.100761008720101294E+06,
+        0.100734732500141792E+06,       0.100710174312875781E+06,       0.100688451173672947E+06,       0.100670708926784253E+06,       0.100658093134885828E+06,
+        0.100653547542059678E+06,       0.100656000772829168E+06,       0.100665921580032358E+06,       0.100683713857153736E+06,       0.100709718860814537E+06,
+        0.100748801228508208E+06,       0.100801823503565058E+06,       0.100861225414351109E+06,       0.100925234962917515E+06,       0.100992162379509042E+06,
+        0.101061180367843728E+06,       0.101132825200904612E+06,       0.101202551905614309E+06,       0.101268249128093084E+06,       0.101327796560415067E+06,
+        0.101375435871056281E+06,       0.101404641442907785E+06,       0.101425758115715638E+06,       0.101440394650381306E+06,       0.101450217422559756E+06,
+        0.101458727822546076E+06,       0.101466619611513932E+06,       0.101473463661342525E+06,       0.101480183000528341E+06,       0.101487645084924108E+06,
+        0.101498004691627488E+06,       0.101508871394480026E+06,       0.101520205876727661E+06,       0.101532083912951843E+06,       0.101544647478942308E+06,
+        0.101558096380653675E+06,       0.101573050568899664E+06,       0.101590428478391070E+06,       0.101613972514299414E+06,       0.101648920007989669E+06,
+        0.101687381188284504E+06,       0.101728410452743919E+06,       0.101771447499673959E+06,       0.101823102602039115E+06,       0.101880173737650490E+06,
+        0.101939952057504197E+06,       0.101998671132745076E+06,       0.102047778748635392E+06,       0.102081283700837084E+06,       0.102104626314851310E+06,
+        0.102117132803555040E+06,       0.102118423258010647E+06,       0.102110210033883151E+06,       0.102097574911021075E+06,       0.102084451243621195E+06,
+        0.102073635202554215E+06,       0.102064362043080371E+06,       0.102055076068754133E+06,       0.102042482878204013E+06,       0.102025288372749041E+06,
+        0.102001685111197468E+06,       0.101971967159961292E+06,       0.101935955157193923E+06,       0.101893991729276575E+06,       0.101846831752592378E+06,
+        0.101795519670136433E+06,       0.101743547706146055E+06,       0.101695867126943878E+06,       0.101657509946900449E+06,       0.101633507015335563E+06,
+        0.101630312812292759E+06,       0.101646392192630388E+06,       0.101668889131485266E+06,       0.101690704618882228E+06,       0.101706951776862203E+06,
+        0.101710803657395867E+06,       0.101698215938497582E+06,       0.101672792047461742E+06,       0.101636565396570542E+06,       0.101592796399993240E+06,
+        0.101539557371443312E+06,       0.101482505549964961E+06,       0.101424993232468783E+06,       0.101369854642081831E+06,       0.101318588912198626E+06,
+        0.101273234899637857E+06,       0.101235886605930398E+06,       0.101207937266056106E+06,       0.101192654572110885E+06,       0.101195023201913122E+06,
+        0.101207165308628755E+06,       0.101227217799392965E+06,       0.101253372828479289E+06,       0.101281097568006837E+06,       0.101311856149601605E+06,
+        0.101345648585710995E+06,       0.101381904947258168E+06,       0.101421272631944972E+06,       0.101465042995991040E+06,       0.101508835313142772E+06,
+        0.101551196503329018E+06,       0.101590747790927970E+06,       0.101621682377021876E+06,       0.101645776231220763E+06,       0.101668026172758953E+06,
+        0.101689491310640093E+06,       0.101711039834481373E+06,       0.101739312046503386E+06,       0.101772112447843610E+06,       0.101804858575323728E+06,
+        0.101836540790179512E+06,       0.101866167898941654E+06,       0.101895518959796798E+06,       0.101925181845865300E+06,       0.101950074886373186E+06,
+        0.101969061543749413E+06,       0.101981139844382837E+06,       0.101985462621642117E+06,       0.101977051366888656E+06,       0.101959701573010476E+06,
+        0.101935377351789808E+06,       0.101905526341066099E+06,       0.101871781260336036E+06,       0.101835950124052295E+06,       0.100513581366792612E+06,
+        0.100554019513422492E+06,       0.100598330045055409E+06,       0.100645982440550681E+06,       0.100696296648474527E+06,       0.100748444268485124E+06,
+        0.100801453596632928E+06,       0.100854218792530621E+06,       0.100905513420273754E+06,       0.100949903492433834E+06,       0.100981652101286920E+06,
+        0.101009573882022771E+06,       0.101033642379315977E+06,       0.101053802681678295E+06,       0.101069990410599494E+06,       0.101082152783372076E+06,
+        0.101090271780979238E+06,       0.101094389439540580E+06,       0.101095654589873608E+06,       0.101096426446181518E+06,       0.101093666576257223E+06,
+        0.101087429979991794E+06,       0.101077885304853742E+06,       0.101065339866105438E+06,       0.101050264366095507E+06,       0.101032061623940666E+06,
+        0.101012844290179608E+06,       0.100996964302313558E+06,       0.100980770382518007E+06,       0.100964167390490678E+06,       0.100947108284160218E+06,
+        0.100929597010366851E+06,       0.100911688070060860E+06,       0.100893582156858451E+06,       0.100881499094758808E+06,       0.100868335774262508E+06,
+        0.100853829088449522E+06,       0.100837798044627038E+06,       0.100820106254778977E+06,       0.100800619132333683E+06,       0.100775042434612522E+06,
+        0.100741873481754403E+06,       0.100707732498585203E+06,       0.100674198173852987E+06,       0.100642873485934600E+06,       0.100616787946543613E+06,
+        0.100595574493244218E+06,       0.100580853452354946E+06,       0.100573369371954352E+06,       0.100573991194533155E+06,       0.100583507950136642E+06,
+        0.100602650207284896E+06,       0.100640744734742359E+06,       0.100692244893923940E+06,       0.100751760770043053E+06,       0.100817532941637197E+06,
+        0.100887787830291069E+06,       0.100962050144272376E+06,       0.101039744081827113E+06,       0.101116778936214221E+06,       0.101190892544115282E+06,
+        0.101259778024939151E+06,       0.101317175633898092E+06,       0.101357978697233921E+06,       0.101390994520218446E+06,       0.101417406025828648E+06,
+        0.101438439369066997E+06,       0.101456877295130529E+06,       0.101473268310223793E+06,       0.101486701484946811E+06,       0.101497860785624449E+06,
+        0.101507276039524368E+06,       0.101514237723266677E+06,       0.101518949933443597E+06,       0.101522085026395580E+06,       0.101524243387710812E+06,
+        0.101525990459469860E+06,       0.101528194232853784E+06,       0.101531700114421837E+06,       0.101537410817429205E+06,       0.101546492305229593E+06,
+        0.101567903398293696E+06,       0.101597046994887613E+06,       0.101630996885802393E+06,       0.101669578744430226E+06,       0.101714590729228381E+06,
+        0.101773403370424989E+06,       0.101836874445576148E+06,       0.101900881795697991E+06,       0.101960687121667026E+06,       0.102008686461021774E+06,
+        0.102037960319300764E+06,       0.102056196723826288E+06,       0.102065273055902842E+06,       0.102066914347914004E+06,       0.102063547681288721E+06,
+        0.102059509493393372E+06,       0.102055314339710254E+06,       0.102050951292832178E+06,       0.102044111461623615E+06,       0.102032193928193665E+06,
+        0.102014558041099997E+06,       0.101990243188425869E+06,       0.101960364538554975E+06,       0.101925773749474116E+06,       0.101887402236031689E+06,
+        0.101845900309227552E+06,       0.101802685936693102E+06,       0.101760172705529054E+06,       0.101722211673123806E+06,       0.101698120911338105E+06,
+        0.101693242621827798E+06,       0.101701200555816351E+06,       0.101719376001235738E+06,       0.101743123574903206E+06,       0.101765016750218143E+06,
+        0.101780249253377129E+06,       0.101783141086790420E+06,       0.101773015434274668E+06,       0.101749944711398595E+06,       0.101715364981995837E+06,
+        0.101666832632786492E+06,       0.101609705385936162E+06,       0.101549151532732372E+06,       0.101488088183680564E+06,       0.101428826013168145E+06,
+        0.101371975824192647E+06,       0.101321130368394268E+06,       0.101278514950626632E+06,       0.101245823084732416E+06,       0.101229713571326531E+06,
+        0.101228252523962350E+06,       0.101236240082679593E+06,       0.101252202249213733E+06,       0.101274554004038626E+06,       0.101299571284751277E+06,
+        0.101328619250470016E+06,       0.101360846988672172E+06,       0.101395461438518367E+06,       0.101432766703864487E+06,       0.101473307204623023E+06,
+        0.101514010222445781E+06,       0.101553562190150420E+06,       0.101590717887284656E+06,       0.101621853851409600E+06,       0.101647543893485548E+06,
+        0.101671058814602424E+06,       0.101693056210828203E+06,       0.101714129349830531E+06,       0.101738767714405170E+06,       0.101767638107703999E+06,
+        0.101795424880191335E+06,       0.101821375190827370E+06,       0.101844797381800585E+06,       0.101865803928462847E+06,       0.101887241456978605E+06,
+        0.101903742329332832E+06,       0.101914505259923375E+06,       0.101918870822307275E+06,       0.101916337996088478E+06,       0.101901784739594950E+06,
+        0.101874548045828633E+06,       0.101841292001167923E+06,       0.101803678665118787E+06,       0.101762946401782145E+06,       0.101720412831625683E+06,
+        0.100515408142486602E+06,       0.100551771547175376E+06,       0.100591372710722571E+06,       0.100633738189236901E+06,       0.100678255595108407E+06,
+        0.100724173138854574E+06,       0.100770602351690526E+06,       0.100816524184232330E+06,       0.100854077383907817E+06,       0.100882309305546267E+06,
+        0.100908312612091744E+06,       0.100931760805658370E+06,       0.100951200960303162E+06,       0.100967005250871938E+06,       0.100979637398817140E+06,
+        0.100989094128378885E+06,       0.100995390483498064E+06,       0.100999335048962457E+06,       0.101003623776222332E+06,       0.101005037852830981E+06,
+        0.101003566011062838E+06,       0.100999260214490059E+06,       0.100992254677997669E+06,       0.100982785569327156E+06,       0.100971211282625562E+06,
+        0.100958033151982832E+06,       0.100947713227353204E+06,       0.100936845226361344E+06,       0.100925586455398079E+06,       0.100913386427886144E+06,
+        0.100900970885727584E+06,       0.100888200173575184E+06,       0.100874969576689109E+06,       0.100865322504112410E+06,       0.100857431942648880E+06,
+        0.100848190571948653E+06,       0.100837041611588123E+06,       0.100823522652975458E+06,       0.100807245058683751E+06,       0.100787869439158167E+06,
+        0.100757391684316404E+06,       0.100722719302699363E+06,       0.100685949398277124E+06,       0.100648508643416208E+06,       0.100611886678086536E+06,
+        0.100577601709138020E+06,       0.100546746024841152E+06,       0.100520863816718731E+06,       0.100501704292206879E+06,       0.100490795320886566E+06,
+        0.100489573337377500E+06,       0.100499397978964334E+06,       0.100534016438231076E+06,       0.100580634795179663E+06,       0.100636771821988543E+06,
+        0.100700900349775504E+06,       0.100771475161532377E+06,       0.100847971681032548E+06,       0.100928796704597553E+06,       0.101010401416626322E+06,
+        0.101090599925904797E+06,       0.101167170271662733E+06,       0.101233921628300508E+06,       0.101285179817018958E+06,       0.101329796645055787E+06,
+        0.101368459516926756E+06,       0.101402063972120028E+06,       0.101431554233350747E+06,       0.101457605089509292E+06,       0.101479887700559731E+06,
+        0.101498521383338972E+06,       0.101513550784224833E+06,       0.101523174827992611E+06,       0.101527475564510401E+06,       0.101528428909431837E+06,
+        0.101526914423630384E+06,       0.101523962459723334E+06,       0.101520309815973524E+06,       0.101516483972158181E+06,       0.101514002315449485E+06,
+        0.101514722417862809E+06,       0.101522283068780089E+06,       0.101544056083037300E+06,       0.101571190634249404E+06,       0.101603956939872005E+06,
+        0.101642017592925840E+06,       0.101688020789515867E+06,       0.101748771464749283E+06,       0.101810913304749745E+06,       0.101870419614457860E+06,
+        0.101923449267402393E+06,       0.101967012984100948E+06,       0.101994050943781331E+06,       0.102011245751808630E+06,       0.102022174558490107E+06,
+        0.102029125315834375E+06,       0.102033037791472336E+06,       0.102034394101747268E+06,       0.102032647951692605E+06,       0.102026060860393205E+06,
+        0.102014286206869132E+06,       0.101997287902874697E+06,       0.101973908129249903E+06,       0.101945685744995091E+06,       0.101913755487835835E+06,
+        0.101879518050633123E+06,       0.101845462413359521E+06,       0.101814438244852194E+06,       0.101787626131292665E+06,       0.101769079269016060E+06,
+        0.101760662506367516E+06,       0.101763690025728793E+06,       0.101778245812273221E+06,       0.101800769364128020E+06,       0.101825464810029356E+06,
+        0.101849318133198423E+06,       0.101866690516569448E+06,       0.101874423097137915E+06,       0.101868322033511577E+06,       0.101847631400323429E+06,
+        0.101809657617465651E+06,       0.101759023134988529E+06,       0.101701048933469734E+06,       0.101638831844116052E+06,       0.101574555754104877E+06,
+        0.101509980617449197E+06,       0.101449449533488441E+06,       0.101394594035173650E+06,       0.101347377713062888E+06,       0.101309681379202666E+06,
+        0.101289625678805663E+06,       0.101280310168622382E+06,       0.101280601256181355E+06,       0.101289183040688731E+06,       0.101304405647058535E+06,
+        0.101324688438220604E+06,       0.101349563357044477E+06,       0.101377976699525767E+06,       0.101409028339016470E+06,       0.101442179995567261E+06,
+        0.101476777887449236E+06,       0.101511738303380160E+06,       0.101546126683052818E+06,       0.101579196765551533E+06,       0.101607991498285395E+06,
+        0.101632611269017507E+06,       0.101655502605639515E+06,       0.101677080810846644E+06,       0.101697768628730599E+06,       0.101719316740837268E+06,
+        0.101742656846947124E+06,       0.101764837611636452E+06,       0.101785178883928776E+06,       0.101802942432164040E+06,       0.101817351144786313E+06,
+        0.101829733328404807E+06,       0.101837655847121932E+06,       0.101840093420000965E+06,       0.101836302876360205E+06,       0.101825658934804160E+06,
+        0.101806477102295394E+06,       0.101772591154458947E+06,       0.101732979877375386E+06,       0.101689114392674877E+06,       0.101642472350711148E+06,
+        0.101594527408217124E+06,       0.100521483098622790E+06,       0.100553034374379175E+06,       0.100587237837357708E+06,       0.100623674982973011E+06,
+        0.100661797732431733E+06,       0.100700926585977664E+06,       0.100740251364819997E+06,       0.100769102422238415E+06,       0.100792034055430398E+06,
+        0.100813412935669796E+06,       0.100833061354508041E+06,       0.100850766087262135E+06,       0.100866291971468818E+06,       0.100879397215573350E+06,
+        0.100889850447447578E+06,       0.100896874983048474E+06,       0.100901879624732552E+06,       0.100908045012513743E+06,       0.100911845008177756E+06,
+        0.100913263133695262E+06,       0.100912309117336132E+06,       0.100909033352763217E+06,       0.100903541829518552E+06,       0.100896011438153932E+06,
+        0.100886705535507586E+06,       0.100878478741165993E+06,       0.100870518698868997E+06,       0.100862258577488697E+06,       0.100853850267061993E+06,
+        0.100845456536039332E+06,       0.100837262111476593E+06,       0.100829483975533818E+06,       0.100823560640713331E+06,       0.100821677296257287E+06,
+        0.100817550375560750E+06,       0.100812145039498006E+06,       0.100804659355862575E+06,       0.100794378660273913E+06,       0.100780665915676014E+06,
+        0.100760028631593887E+06,       0.100729776405452620E+06,       0.100695664007384359E+06,       0.100658676701707998E+06,       0.100619966898071216E+06,
+        0.100580820672301052E+06,       0.100542567168908456E+06,       0.100504377972890885E+06,       0.100469914337100665E+06,       0.100440979221872039E+06,
+        0.100419342752137061E+06,       0.100406745142411062E+06,       0.100406705150974245E+06,       0.100432011566503701E+06,       0.100468676779983842E+06,
+        0.100515495509657252E+06,       0.100571181275147042E+06,       0.100634390994595859E+06,       0.100706784795550964E+06,       0.100786680087649889E+06,
+        0.100869494529497810E+06,       0.100952905038971541E+06,       0.101034572199124057E+06,       0.101109749894571214E+06,       0.101172314783061069E+06,
+        0.101229755518492922E+06,       0.101282350507230105E+06,       0.101330323821815167E+06,       0.101373763209774886E+06,       0.101412160049147336E+06,
+        0.101445520624250392E+06,       0.101474055469030995E+06,       0.101497872459806793E+06,       0.101516095634979050E+06,       0.101525003393313920E+06,
+        0.101529087732478598E+06,       0.101529555701643461E+06,       0.101527554535439689E+06,       0.101523924716972469E+06,       0.101519184588702949E+06,
+        0.101515359052858228E+06,       0.101513419431477203E+06,       0.101515061119696038E+06,       0.101524365504439338E+06,       0.101545492952323460E+06,
+        0.101572260216870665E+06,       0.101604062662735640E+06,       0.101640454999672467E+06,       0.101681140705924787E+06,       0.101736471342456469E+06,
+        0.101791820815604107E+06,       0.101843025813835338E+06,       0.101888338055426750E+06,       0.101926497388645425E+06,       0.101956523951729410E+06,
+        0.101977389503551763E+06,       0.101992863624521677E+06,       0.102004636055621828E+06,       0.102012873990628723E+06,       0.102016923944167502E+06,
+        0.102015589894533594E+06,       0.102008242524494635E+06,       0.101994805733422399E+06,       0.101975527326879805E+06,       0.101951699623577006E+06,
+        0.101924648595227743E+06,       0.101896134378200717E+06,       0.101868181223228035E+06,       0.101842690796364026E+06,       0.101823518800336897E+06,
+        0.101810966006917995E+06,       0.101810361562174381E+06,       0.101819625326231835E+06,       0.101837655873780983E+06,       0.101862056783833701E+06,
+        0.101890848697784473E+06,       0.101919025148523811E+06,       0.101942604878219718E+06,       0.101953732079914320E+06,       0.101952348959737385E+06,
+        0.101930393928014251E+06,       0.101894531594142769E+06,       0.101847206824460780E+06,       0.101792255748977870E+06,       0.101731720782488774E+06,
+        0.101667410578914118E+06,       0.101601955467176056E+06,       0.101538353512944566E+06,       0.101479206063803722E+06,       0.101426875382686587E+06,
+        0.101386679687780139E+06,       0.101358881267937715E+06,       0.101340978693972764E+06,       0.101332100373616413E+06,       0.101331377677835859E+06,
+        0.101337757250038121E+06,       0.101350176595795769E+06,       0.101367529237839539E+06,       0.101388710034061514E+06,       0.101412656335492444E+06,
+        0.101438146564572395E+06,       0.101465030990242507E+06,       0.101492743759273944E+06,       0.101520528048576030E+06,       0.101547656089289187E+06,
+        0.101573646733203917E+06,       0.101598176409242311E+06,       0.101621015547307805E+06,       0.101642090999262466E+06,       0.101661344187207244E+06,
+        0.101680048117579805E+06,       0.101700060142799775E+06,       0.101717676267340707E+06,       0.101732293239297534E+06,       0.101743299867593101E+06,
+        0.101750084174098316E+06,       0.101754164408332057E+06,       0.101753815772929738E+06,       0.101747787368181351E+06,       0.101735699407228763E+06,
+        0.101717273900884597E+06,       0.101692348035134710E+06,       0.101654861811602153E+06,       0.101610673295375120E+06,       0.101562751614357956E+06,
+        0.101512638519625150E+06,       0.101461813597627668E+06,       0.100533318325900138E+06,       0.100559018706234609E+06,       0.100586667516233734E+06,
+        0.100616430509356855E+06,       0.100647457772304173E+06,       0.100679140607943787E+06,       0.100698527261697847E+06,       0.100715798167830915E+06,
+        0.100731931694921790E+06,       0.100746896633405166E+06,       0.100760616569955790E+06,       0.100772979417731243E+06,       0.100783848302944942E+06,
+        0.100793073809534399E+06,       0.100800507571478287E+06,       0.100806483772806212E+06,       0.100813801762586605E+06,       0.100819127022868051E+06,
+        0.100822124828140237E+06,       0.100822902466370797E+06,       0.100821716855826366E+06,       0.100818621189554789E+06,       0.100813702346186765E+06,
+        0.100807092657524059E+06,       0.100799795563032545E+06,       0.100792638500522866E+06,       0.100785284309503724E+06,       0.100777874398839282E+06,
+        0.100770527259340961E+06,       0.100763347669699418E+06,       0.100756435329570639E+06,       0.100749892793592095E+06,       0.100749373875165576E+06,
+        0.100750222933888348E+06,       0.100750603463785985E+06,       0.100749864242144642E+06,       0.100747320689053289E+06,       0.100742256076426071E+06,
+        0.100733920852957395E+06,       0.100715113795294979E+06,       0.100689064952966379E+06,       0.100657845711542803E+06,       0.100623250918292935E+06,
+        0.100586038000497676E+06,       0.100547134348203457E+06,       0.100506028825088957E+06,       0.100462291432826620E+06,       0.100421048783818245E+06,
+        0.100384122683633468E+06,       0.100353368412380165E+06,       0.100330670880394246E+06,       0.100321776442990944E+06,       0.100334624094787185E+06,
+        0.100358437666044687E+06,       0.100392488442372807E+06,       0.100435977221972600E+06,       0.100488073955800399E+06,       0.100552415559277870E+06,
+        0.100627255810881121E+06,       0.100707092289738357E+06,       0.100789756856378794E+06,       0.100873101113792349E+06,       0.100954216801293107E+06,
+        0.101025863759345229E+06,       0.101094584610272868E+06,       0.101160235498342692E+06,       0.101222606811297053E+06,       0.101281370962640489E+06,
+        0.101332163642811851E+06,       0.101376972618262807E+06,       0.101416728366496085E+06,       0.101451473910749541E+06,       0.101480959555488313E+06,
+        0.101500381551832834E+06,       0.101512210195641775E+06,       0.101519514244373393E+06,       0.101523444803633465E+06,       0.101525155563451161E+06,
+        0.101524617344664759E+06,       0.101522395272590235E+06,       0.101521151212846860E+06,       0.101522340865174643E+06,       0.101527072168721963E+06,
+        0.101537882062393008E+06,       0.101559080181885220E+06,       0.101584526114373686E+06,       0.101614244538571933E+06,       0.101647894372795839E+06,
+        0.101684681982032082E+06,       0.101726895995367770E+06,       0.101774312937747018E+06,       0.101818830342195433E+06,       0.101858335228138851E+06,
+        0.101893176738273338E+06,       0.101922949034176403E+06,       0.101947508183230893E+06,       0.101967684274917294E+06,       0.101983202615811271E+06,
+        0.101993442131563672E+06,       0.101998812147038072E+06,       0.101998613039324773E+06,       0.101992329378160532E+06,       0.101980249760691964E+06,
+        0.101962626054339082E+06,       0.101940465078019130E+06,       0.101915907622174098E+06,       0.101890478407916715E+06,       0.101866977689826570E+06,
+        0.101849754719304707E+06,       0.101837665745559920E+06,       0.101833602586389810E+06,       0.101841599729967784E+06,       0.101859775477370218E+06,
+        0.101886984424902446E+06,       0.101919867690970117E+06,       0.101951746477934430E+06,       0.101978482983373731E+06,       0.101993393892969194E+06,
+        0.101991412250034802E+06,       0.101974123414601141E+06,       0.101945239434022718E+06,       0.101905684392780662E+06,       0.101856949799144815E+06,
+        0.101801731134592686E+06,       0.101742504741481811E+06,       0.101681038790539489E+06,       0.101619356067038418E+06,       0.101559380452289755E+06,
+        0.101505641285490463E+06,       0.101461701752299428E+06,       0.101426005705293821E+06,       0.101398896334048623E+06,       0.101380282180095601E+06,
+        0.101369836995025384E+06,       0.101367277170112575E+06,       0.101370986941406809E+06,       0.101379906423074499E+06,       0.101392831033495459E+06,
+        0.101408554312665205E+06,       0.101424869582900283E+06,       0.101443182567207696E+06,       0.101462968409184250E+06,       0.101483671134433898E+06,
+        0.101504732894123474E+06,       0.101527421913474638E+06,       0.101550095820920280E+06,       0.101571562110317216E+06,       0.101591355780169426E+06,
+        0.101609078015251362E+06,       0.101625097194956237E+06,       0.101640337310256451E+06,       0.101652605117688974E+06,       0.101661397415208048E+06,
+        0.101666225004107662E+06,       0.101666619975683658E+06,       0.101662556408727090E+06,       0.101653580628123964E+06,       0.101639218203126409E+06,
+        0.101619381357809092E+06,       0.101594063768788052E+06,       0.101563351510846944E+06,       0.101523851133020638E+06,       0.101476807405962056E+06,
+        0.101426978369828445E+06,       0.101375797428347505E+06,       0.101324598573980998E+06,       0.100551530203326562E+06,       0.100571727120900570E+06,
+        0.100593051779557791E+06,       0.100614868997312486E+06,       0.100634144763448072E+06,       0.100645833089619511E+06,       0.100657235284227281E+06,
+        0.100667686387769805E+06,       0.100677292913672762E+06,       0.100686112073701530E+06,       0.100694158258119947E+06,       0.100701410586929007E+06,
+        0.100707821531117806E+06,       0.100713326592793543E+06,       0.100718292448464927E+06,       0.100725135313074701E+06,       0.100730736036059810E+06,
+        0.100734776949494801E+06,       0.100736983079004160E+06,       0.100737142689159882E+06,       0.100735125062421313E+06,       0.100730895453973062E+06,
+        0.100724936089312163E+06,       0.100718101716589372E+06,       0.100710128659467940E+06,       0.100701978143640532E+06,       0.100693854728853868E+06,
+        0.100685917546278361E+06,       0.100678288281938949E+06,       0.100671058793584918E+06,       0.100664298277410649E+06,       0.100660712381595760E+06,
+        0.100661723426356752E+06,       0.100663150264819735E+06,       0.100664393149270531E+06,       0.100664799968549007E+06,       0.100663672287188572E+06,
+        0.100660269896986065E+06,       0.100653054372944243E+06,       0.100638919308817800E+06,       0.100620188598009743E+06,       0.100597036492593310E+06,
+        0.100569788712949841E+06,       0.100538901380231502E+06,       0.100504939031211514E+06,       0.100464616545740675E+06,       0.100420082357890147E+06,
+        0.100376069547844643E+06,       0.100334560389268605E+06,       0.100297550195584583E+06,       0.100267038173233668E+06,       0.100249183652606138E+06,
+        0.100248031291493899E+06,       0.100256756900526307E+06,       0.100275250996069168E+06,       0.100303318888992886E+06,       0.100340733860613560E+06,
+        0.100392668457859341E+06,       0.100458197469974984E+06,       0.100530344725997711E+06,       0.100607247564767138E+06,       0.100687079608666914E+06,
+        0.100768076831136714E+06,       0.100845286817167653E+06,       0.100921915425536106E+06,       0.100997896081585553E+06,       0.101072548063258917E+06,
+        0.101144965887108527E+06,       0.101210711249507964E+06,       0.101267759563819229E+06,       0.101319932991058231E+06,       0.101367121820533270E+06,
+        0.101409115377035181E+06,       0.101445063624758288E+06,       0.101467868269852072E+06,       0.101485221941439115E+06,       0.101498187544558168E+06,
+        0.101507881316604296E+06,       0.101515310949875333E+06,       0.101519599975213365E+06,       0.101522106701145909E+06,       0.101524851878856789E+06,
+        0.101529230085351330E+06,       0.101536191323789782E+06,       0.101546697524065807E+06,       0.101566224388216360E+06,       0.101589918902257763E+06,
+        0.101616845515287452E+06,       0.101647215589828833E+06,       0.101680341115790361E+06,       0.101715366089036543E+06,       0.101752316168779886E+06,
+        0.101791176678952732E+06,       0.101827052748008107E+06,       0.101859044996505589E+06,       0.101887670526199319E+06,       0.101913122414070647E+06,
+        0.101934463666524054E+06,       0.101952632860506710E+06,       0.101966700037415663E+06,       0.101975525710702976E+06,       0.101978461989723088E+06,
+        0.101975173899271627E+06,       0.101964823473388897E+06,       0.101947665044748559E+06,       0.101926227690128857E+06,       0.101900561072349257E+06,
+        0.101874251008341424E+06,       0.101851830347918643E+06,       0.101836189738381829E+06,       0.101828888260193082E+06,       0.101835000054969831E+06,
+        0.101851733006117443E+06,       0.101877232568018531E+06,       0.101909510086827300E+06,       0.101940989073697696E+06,       0.101965528537313672E+06,
+        0.101979608526400712E+06,       0.101982970036656799E+06,       0.101975240583827399E+06,       0.101955388827734365E+06,       0.101924654892196661E+06,
+        0.101887578699447098E+06,       0.101842186561714494E+06,       0.101789317463778367E+06,       0.101732832688802417E+06,       0.101675288481823532E+06,
+        0.101619263688587671E+06,       0.101568048094496247E+06,       0.101521062700628769E+06,       0.101479654154784279E+06,       0.101445221739311222E+06,
+        0.101418076416901371E+06,       0.101399045923829544E+06,       0.101387018859001342E+06,       0.101381135963448469E+06,       0.101380650007871780E+06,
+        0.101384722424981679E+06,       0.101391720295262028E+06,       0.101400396876228624E+06,       0.101411346068523795E+06,       0.101424155121034681E+06,
+        0.101438457710905030E+06,       0.101453929199892154E+06,       0.101472913422971527E+06,       0.101492074099173711E+06,       0.101510560767898467E+06,
+        0.101527744434993336E+06,       0.101543054611759319E+06,       0.101555675557276962E+06,       0.101564929191696821E+06,       0.101571016898623420E+06,
+        0.101573544015567939E+06,       0.101572121672385867E+06,       0.101566370463087485E+06,       0.101554662308102721E+06,       0.101536629786898047E+06,
+        0.101513803810128695E+06,       0.101486361735486105E+06,       0.101454563654390658E+06,       0.101418767627698660E+06,       0.101378013088347099E+06,
+        0.101330707820646552E+06,       0.101282264555356756E+06,       0.101234028760920090E+06,       0.101187294700704195E+06,       0.100576965529563255E+06,
+        0.100591678218711211E+06,       0.100607008383076420E+06,       0.100616323103987481E+06,       0.100620258552074985E+06,       0.100623651287353903E+06,
+        0.100626463751429124E+06,       0.100628648078344573E+06,       0.100631378331016531E+06,       0.100634129163284262E+06,       0.100636562070289394E+06,
+        0.100638738873227092E+06,       0.100640693964837556E+06,       0.100643049230926015E+06,       0.100648185229669587E+06,       0.100652678597624064E+06,
+        0.100656261255894686E+06,       0.100658660860211399E+06,       0.100659622834889029E+06,       0.100658930196984991E+06,       0.100656421096238220E+06,
+        0.100652004015325234E+06,       0.100645400203396595E+06,       0.100634943591599571E+06,       0.100623790772243461E+06,       0.100612166299320219E+06,
+        0.100600323220825783E+06,       0.100589367539107639E+06,       0.100580442279124138E+06,       0.100572243324848969E+06,       0.100564857703730217E+06,
+        0.100563322531964557E+06,       0.100563065402201857E+06,       0.100563607762748041E+06,       0.100564433779967017E+06,       0.100564965723689515E+06,
+        0.100564572517680892E+06,       0.100562577288210698E+06,       0.100558128795487573E+06,       0.100550306656448985E+06,       0.100538784205606309E+06,
+        0.100523395229331582E+06,       0.100504107960399502E+06,       0.100481009310527326E+06,       0.100454286649172413E+06,       0.100417998848613410E+06,
+        0.100377654481256992E+06,       0.100336323265197076E+06,       0.100295695643989733E+06,       0.100257502669341542E+06,       0.100223497751048752E+06,
+        0.100198365893325012E+06,       0.100183895883056030E+06,       0.100176748173119719E+06,       0.100177409781642637E+06,       0.100186348863375271E+06,
+        0.100204071706916817E+06,       0.100236974921233719E+06,       0.100288202283773542E+06,       0.100347584962604393E+06,       0.100413567810885099E+06,
+        0.100484685800612540E+06,       0.100559609376774941E+06,       0.100637786676389092E+06,       0.100719143709254829E+06,       0.100802573207076450E+06,
+        0.100886953694736978E+06,       0.100970981281993736E+06,       0.101053137277853224E+06,       0.101122114850514685E+06,       0.101186021991939982E+06,
+        0.101244880734986247E+06,       0.101298842483030225E+06,       0.101347976726965513E+06,       0.101388865316328054E+06,       0.101417494561782441E+06,
+        0.101441011237599363E+06,       0.101460308434203442E+06,       0.101476142058636950E+06,       0.101489111828680267E+06,       0.101498177707129027E+06,
+        0.101504275218907074E+06,       0.101509888353816961E+06,       0.101516205429889771E+06,       0.101524373025953057E+06,       0.101535544403108914E+06,
+        0.101550771587497264E+06,       0.101572228401773711E+06,       0.101596922610232752E+06,       0.101624267341491490E+06,       0.101653892197854148E+06,
+        0.101685371964174541E+06,       0.101717744368668005E+06,       0.101749825128001146E+06,       0.101781782699506482E+06,       0.101812709382600748E+06,
+        0.101841353313321029E+06,       0.101867900490832937E+06,       0.101893188014203624E+06,       0.101915193984979924E+06,       0.101933169418903170E+06,
+        0.101945970442238802E+06,       0.101952233644425200E+06,       0.101949989638197949E+06,       0.101938812116678397E+06,       0.101921309771955755E+06,
+        0.101897306204910492E+06,       0.101870511994013577E+06,       0.101845727987357284E+06,       0.101827162893394896E+06,       0.101815741469126820E+06,
+        0.101815347936997394E+06,       0.101829035456973521E+06,       0.101849227052658054E+06,       0.101873947210599901E+06,       0.101900166979187969E+06,
+        0.101922501433547208E+06,       0.101938537730062933E+06,       0.101945622505927895E+06,       0.101943220759731354E+06,       0.101933233593028053E+06,
+        0.101913480508279812E+06,       0.101884226864883196E+06,       0.101847880125950556E+06,       0.101805028700279145E+06,       0.101757073613196655E+06,
+        0.101706590973509752E+06,       0.101656335498895467E+06,       0.101607292592687139E+06,       0.101560626743744360E+06,       0.101517500638364392E+06,
+        0.101478925847553910E+06,       0.101446343700160927E+06,       0.101419879250754559E+06,       0.101398958955256283E+06,       0.101383710029623602E+06,
+        0.101374588904196891E+06,       0.101370168865842439E+06,       0.101369105684779628E+06,       0.101370929669406774E+06,       0.101375271898136503E+06,
+        0.101381760968333765E+06,       0.101390061699633865E+06,       0.101400585700279218E+06,       0.101414338736935577E+06,       0.101428328122293344E+06,
+        0.101441772517097343E+06,       0.101453941211612226E+06,       0.101464150240094372E+06,       0.101470694861331591E+06,       0.101472993001670693E+06,
+        0.101472098749250043E+06,       0.101467692245319617E+06,       0.101459459863983502E+06,       0.101447099986294808E+06,       0.101428337148487699E+06,
+        0.101402273058774066E+06,       0.101372210423711062E+06,       0.101338601145403256E+06,       0.101301942982120236E+06,       0.101262793506100817E+06,
+        0.101221677786233748E+06,       0.101176731503889008E+06,       0.101131973913656722E+06,       0.101088479543089110E+06,       0.101047269615024925E+06,
+        0.100610222449967056E+06,       0.100619368346169198E+06,       0.100619051340248508E+06,       0.100617580194349401E+06,       0.100615500249746110E+06,
+        0.100612844510783863E+06,       0.100609637715591729E+06,       0.100605899629696811E+06,       0.100601648181252385E+06,       0.100596902436962919E+06,
+        0.100591685422206356E+06,       0.100587098052459361E+06,       0.100585436102778738E+06,       0.100587603438895458E+06,       0.100589520780671664E+06,
+        0.100591027689952418E+06,       0.100591916118502122E+06,       0.100591952568608729E+06,       0.100590898493088505E+06,       0.100588528847269830E+06,
+        0.100584648718839380E+06,       0.100579107975368854E+06,       0.100568181408087505E+06,       0.100556028233350124E+06,       0.100543329111321902E+06,
+        0.100530292741429832E+06,       0.100517138305172819E+06,       0.100504104046550317E+06,       0.100491454262540399E+06,       0.100479484740824249E+06,
+        0.100470155044772182E+06,       0.100463687256117119E+06,       0.100458896797118272E+06,       0.100455620879032227E+06,       0.100454260984570079E+06,
+        0.100454114005490293E+06,       0.100453954401208190E+06,       0.100453246548017763E+06,       0.100453544534649671E+06,       0.100451784335522374E+06,
+        0.100447402272511725E+06,       0.100439945313556469E+06,       0.100429058870933281E+06,       0.100414474145118424E+06,       0.100395971880822995E+06,
+        0.100364627363950829E+06,       0.100330069619100730E+06,       0.100293517928604648E+06,       0.100256250274621154E+06,       0.100219578502905337E+06,
+        0.100184821369736295E+06,       0.100153602788173128E+06,       0.100126759271301082E+06,       0.100104736505522000E+06,       0.100088530813236051E+06,
+        0.100079174170628597E+06,       0.100077782208942881E+06,       0.100089384583247156E+06,       0.100124675759422840E+06,       0.100169171328412835E+06,
+        0.100221720050477204E+06,       0.100281293603445694E+06,       0.100347032197583365E+06,       0.100419381954596480E+06,       0.100501100689285435E+06,
+        0.100587123759395632E+06,       0.100676265830202465E+06,       0.100767041531711700E+06,       0.100857717751965523E+06,       0.100942425402787208E+06,
+        0.101015252626361835E+06,       0.101084506455799405E+06,       0.101149930187516162E+06,       0.101211031351648766E+06,       0.101267093811678642E+06,
+        0.101313485842090842E+06,       0.101347864445685816E+06,       0.101377348186801406E+06,       0.101401563075397265E+06,       0.101421152746379506E+06,
+        0.101436703379514453E+06,       0.101448418323353719E+06,       0.101455739244278491E+06,       0.101461288984514365E+06,       0.101466634842994637E+06,
+        0.101474204912937290E+06,       0.101485236375258624E+06,       0.101500599693197641E+06,       0.101519974341673922E+06,       0.101542425947491516E+06,
+        0.101567705013514729E+06,       0.101595287754062447E+06,       0.101623559085342917E+06,       0.101653300863473152E+06,       0.101684268370484802E+06,
+        0.101715396578327011E+06,       0.101746648790418796E+06,       0.101778157009654227E+06,       0.101810294427225992E+06,       0.101840186138904261E+06,
+        0.101866664724512098E+06,       0.101888829801923304E+06,       0.101904365840783910E+06,       0.101910875981687976E+06,       0.101907623411986046E+06,
+        0.101897747215346535E+06,       0.101880196785050444E+06,       0.101858268156208374E+06,       0.101836776997478300E+06,       0.101819952813389187E+06,
+        0.101808320250000223E+06,       0.101803197426602317E+06,       0.101808609816872282E+06,       0.101820932164050100E+06,       0.101835981686293468E+06,
+        0.101853975694054869E+06,       0.101871402202830723E+06,       0.101884750589340591E+06,       0.101893763845945417E+06,       0.101896316342375110E+06,
+        0.101891679490974697E+06,       0.101879011465031377E+06,       0.101858040507289596E+06,       0.101829415896828315E+06,       0.101794099063775866E+06,
+        0.101754870334758903E+06,       0.101712830221134776E+06,       0.101668524343052632E+06,       0.101623305627111258E+06,       0.101578731565899987E+06,
+        0.101536822594720084E+06,       0.101498255706646247E+06,       0.101464056159653454E+06,       0.101434228357694403E+06,       0.101408947230003760E+06,
+        0.101388258426133107E+06,       0.101372054750796451E+06,       0.101360489212098575E+06,       0.101352621134682369E+06,       0.101347535522944934E+06,
+        0.101344862604306050E+06,       0.101344225484927229E+06,       0.101345820651379589E+06,       0.101351700849621455E+06,       0.101359530806993411E+06,
+        0.101367464680662029E+06,       0.101374791985950258E+06,       0.101380818284913359E+06,       0.101384869714943547E+06,       0.101384236152984289E+06,
+        0.101379411934677875E+06,       0.101371434785651902E+06,       0.101360085004396402E+06,       0.101345137105284986E+06,       0.101326366500254488E+06,
+        0.101300808610161446E+06,       0.101267227431123814E+06,       0.101230448890002648E+06,       0.101191134568648122E+06,       0.101149957676138991E+06,
+        0.101107616865909265E+06,       0.101064847159165423E+06,       0.101022580301005539E+06,       0.100981724783641272E+06,       0.100943032631428388E+06,
+        0.100907229742725089E+06,       0.100647986354424997E+06,       0.100642715659511494E+06,       0.100636609969385099E+06,       0.100629766959429631E+06,
+        0.100622273153360293E+06,       0.100614207409999959E+06,       0.100605644320867577E+06,       0.100596657511128040E+06,       0.100587322839384142E+06,
+        0.100577721494929676E+06,       0.100567942994422949E+06,       0.100559032457675799E+06,       0.100552977775159990E+06,       0.100548029023239913E+06,
+        0.100543925649759869E+06,       0.100540775676255420E+06,       0.100537926202230563E+06,       0.100534526225857189E+06,       0.100530349204130558E+06,
+        0.100525160024924175E+06,       0.100518730289664294E+06,       0.100507262057308282E+06,       0.100493351445575739E+06,       0.100478812420309798E+06,
+        0.100463863563753723E+06,       0.100448706735957079E+06,       0.100433537133342616E+06,       0.100418551953121700E+06,       0.100403957667064577E+06,
+        0.100390113818734360E+06,       0.100378283224859435E+06,       0.100368019408275955E+06,       0.100359348113145898E+06,       0.100352231413445901E+06,
+        0.100346572462762793E+06,       0.100342221388570266E+06,       0.100338982151060118E+06,       0.100338392782828159E+06,       0.100341188152017450E+06,
+        0.100343374795880460E+06,       0.100344284175602748E+06,       0.100343279804720136E+06,       0.100339754195549598E+06,       0.100333123950383713E+06,
+        0.100321286971674039E+06,       0.100297287465905509E+06,       0.100269835508128133E+06,       0.100239714419667638E+06,       0.100207741409672206E+06,
+        0.100174751447097195E+06,       0.100141579771693956E+06,       0.100106755441371904E+06,       0.100069912900784475E+06,       0.100035704844720982E+06,
+        0.100005528642180579E+06,       0.999808555037528422E+05,       0.999632723451110069E+05,       0.999545236439836153E+05,       0.999736658577992639E+05,
+        0.100003353333015431E+06,       0.100042064117430200E+06,       0.100089071041598727E+06,       0.100143778848621456E+06,       0.100205754250853075E+06,
+        0.100280664932831889E+06,       0.100364704219084786E+06,       0.100454126970714191E+06,       0.100547163719590288E+06,       0.100641885410501171E+06,
+        0.100736224731986324E+06,       0.100821668363604142E+06,       0.100899090295081827E+06,       0.100973330050358534E+06,       0.101044570047650093E+06,
+        0.101111101684352281E+06,       0.101171922832138123E+06,       0.101223284014747289E+06,       0.101260000146915598E+06,       0.101290169362142216E+06,
+        0.101314373328620830E+06,       0.101333177003506280E+06,       0.101345070024148474E+06,       0.101353392220116293E+06,       0.101359052838648713E+06,
+        0.101363820978951000E+06,       0.101369812488926094E+06,       0.101377607762478350E+06,       0.101388432240829963E+06,       0.101403721097234418E+06,
+        0.101423686495689355E+06,       0.101447911692908267E+06,       0.101474956233570803E+06,       0.101501708578459278E+06,       0.101530416403443902E+06,
+        0.101560731988182699E+06,       0.101592331907465996E+06,       0.101625384375889567E+06,       0.101660463766652349E+06,       0.101696287937694025E+06,
+        0.101731505165402195E+06,       0.101765373671168942E+06,       0.101795889760683582E+06,       0.101821575901139222E+06,       0.101839426770240534E+06,
+        0.101848304582011391E+06,       0.101850674932157766E+06,       0.101845563338820590E+06,       0.101833662450669886E+06,       0.101819729736987734E+06,
+        0.101806525676924168E+06,       0.101796235624030873E+06,       0.101788878921415002E+06,       0.101786474628160606E+06,       0.101791411418041462E+06,
+        0.101799155363379643E+06,       0.101808395203049906E+06,       0.101819645577764153E+06,       0.101830409662230682E+06,       0.101837554446248556E+06,
+        0.101839744105951162E+06,       0.101836170755967585E+06,       0.101826399135349377E+06,       0.101810169058729633E+06,       0.101787697095879019E+06,
+        0.101760376393189144E+06,       0.101728853043894385E+06,       0.101693851935638726E+06,       0.101656211520082943E+06,       0.101616790158213262E+06,
+        0.101576704560053928E+06,       0.101537500986694940E+06,       0.101500335696260430E+06,       0.101465878362827381E+06,       0.101434840756723977E+06,
+        0.101408292472182264E+06,       0.101385653681886775E+06,       0.101367773762272278E+06,       0.101355060936308873E+06,       0.101344865614149967E+06,
+        0.101336866601978196E+06,       0.101330803221953858E+06,       0.101326445157375012E+06,       0.101323705025865274E+06,       0.101323151766299212E+06,
+        0.101323317919074820E+06,       0.101323609309034800E+06,       0.101323383998279736E+06,       0.101321968519799790E+06,       0.101318674829698095E+06,
+        0.101309557473271183E+06,       0.101297255318789845E+06,       0.101282004506700381E+06,       0.101263593826286131E+06,       0.101241822534985287E+06,
+        0.101216505434514431E+06,       0.101183763113335532E+06,       0.101143062284304673E+06,       0.101099958082106066E+06,       0.101055260378077917E+06,
+        0.101009770107324861E+06,       0.100964289722992879E+06,       0.100919631222605836E+06,       0.100878395229792455E+06,       0.100840230418695966E+06,
+        0.100804814065610379E+06,       0.100772660269162792E+06,       0.100687581879727732E+06,       0.100677327145079587E+06,       0.100666160693170401E+06,
+        0.100654207341057889E+06,       0.100641583937123549E+06,       0.100628402623918475E+06,       0.100614774045043421E+06,       0.100600810488184259E+06,
+        0.100586628958508634E+06,       0.100572354178803900E+06,       0.100558377265734845E+06,       0.100545518784321612E+06,       0.100533722529582723E+06,
+        0.100522910171807918E+06,       0.100512931196078469E+06,       0.100503576020145658E+06,       0.100494590303307457E+06,       0.100485690264560879E+06,
+        0.100476578798775605E+06,       0.100466962148914608E+06,       0.100453831814755409E+06,       0.100437250927331042E+06,       0.100419883924672962E+06,
+        0.100402010894887906E+06,       0.100383869790613491E+06,       0.100365667294769126E+06,       0.100347588515499185E+06,       0.100329805497802925E+06,
+        0.100312484547517117E+06,       0.100295677938969020E+06,       0.100279971482571520E+06,       0.100265646792895117E+06,       0.100252835911466231E+06,
+        0.100241624480511469E+06,       0.100232054881627162E+06,       0.100224130808306480E+06,       0.100217823206996967E+06,       0.100218259667894425E+06,
+        0.100221888558547784E+06,       0.100225662634090608E+06,       0.100228894178654795E+06,       0.100230909476646018E+06,       0.100231046622607246E+06,
+        0.100228652435841679E+06,       0.100220736457496634E+06,       0.100203006988572233E+06,       0.100182026084597936E+06,       0.100158298000477531E+06,
+        0.100132350369893451E+06,       0.100104715520267695E+06,       0.100075909358704739E+06,       0.100043124770855982E+06,       0.100002028989072438E+06,
+        0.999616642547620577E+05,       0.999236877809293510E+05,       0.998898266920593742E+05,       0.998618945050216280E+05,       0.998418030619178171E+05,
+        0.998423833568641858E+05,       0.998594396345241257E+05,       0.998857662121956964E+05,       0.999209046169008070E+05,       0.999644862724064005E+05,
+        0.100016242187354641E+06,       0.100077317810256820E+06,       0.100156061627195784E+06,       0.100241897409154641E+06,       0.100332874470688155E+06,
+        0.100428637026128985E+06,       0.100526117084385623E+06,       0.100622332108951261E+06,       0.100709061724389190E+06,       0.100788527255290071E+06,
+        0.100863969991383987E+06,       0.100934619610214693E+06,       0.100999507530848088E+06,       0.101057589879684849E+06,       0.101107912118639942E+06,
+        0.101140898046464674E+06,       0.101165194334426677E+06,       0.101183324487668549E+06,       0.101196455912974372E+06,       0.101205787756098696E+06,
+        0.101212555660780359E+06,       0.101217307428240179E+06,       0.101221221076374510E+06,       0.101226815969850082E+06,       0.101235775469520071E+06,
+        0.101249089517923203E+06,       0.101267499119154090E+06,       0.101290114155802439E+06,       0.101316108973235343E+06,       0.101344864351232871E+06,
+        0.101376027068939133E+06,       0.101409318557868275E+06,       0.101444185441017980E+06,       0.101479505555003896E+06,       0.101516882009007721E+06,
+        0.101555258888103534E+06,       0.101593997928136538E+06,       0.101632899844262269E+06,       0.101670115604274892E+06,       0.101703897209036979E+06,
+        0.101731821696663668E+06,       0.101752696747597220E+06,       0.101767805557897402E+06,       0.101776451771069726E+06,       0.101776669469582252E+06,
+        0.101773409436917937E+06,       0.101768516316242836E+06,       0.101762622025664066E+06,       0.101757375988241824E+06,       0.101753826825127559E+06,
+        0.101753403149395934E+06,       0.101756975828023817E+06,       0.101760728893977721E+06,       0.101764213695991348E+06,       0.101767251659026326E+06,
+        0.101770663081707637E+06,       0.101770424123169345E+06,       0.101766072271416459E+06,       0.101755995409002455E+06,       0.101740345666592038E+06,
+        0.101721298174118318E+06,       0.101699043646416510E+06,       0.101673714396835901E+06,       0.101645709970302123E+06,       0.101615709217670097E+06,
+        0.101584438818864903E+06,       0.101549071157331651E+06,       0.101514367930820241E+06,       0.101481015481659371E+06,       0.101449616141240651E+06,
+        0.101420749509000205E+06,       0.101394921878986992E+06,       0.101373676775729036E+06,       0.101359486676981818E+06,       0.101347304837422518E+06,
+        0.101336841360518913E+06,       0.101328023341265842E+06,       0.101320386045212057E+06,       0.101313764510643596E+06,       0.101308434768293082E+06,
+        0.101303621069785135E+06,       0.101298777855350723E+06,       0.101293531204510582E+06,       0.101287470834921696E+06,       0.101280152845400124E+06,
+        0.101270201669037211E+06,       0.101254701725787949E+06,       0.101236553755882080E+06,       0.101215630660361639E+06,       0.101191802985207483E+06,
+        0.101164939977834394E+06,       0.101134911067020425E+06,       0.101095221983884170E+06,       0.101047509096163092E+06,       0.100998010357585692E+06,
+        0.100947641730482603E+06,       0.100897282218335793E+06,       0.100847785377602457E+06,       0.100799988650482410E+06,       0.100756067172860465E+06,
+        0.100716404949108095E+06,       0.100680394601797932E+06,       0.100648426393021538E+06,       0.100745881471474568E+06,       0.100728142553068014E+06,
+        0.100709625290291020E+06,       0.100690810595279676E+06,       0.100673015913888710E+06,       0.100654662696282932E+06,       0.100635883098483231E+06,
+        0.100616812156066226E+06,       0.100597590570947941E+06,       0.100577923093225269E+06,       0.100558481382763435E+06,       0.100539763749561054E+06,
+        0.100521848971490384E+06,       0.100504736841997088E+06,       0.100488356281683067E+06,       0.100472574428834167E+06,       0.100457206575664590E+06,
+        0.100442026795809623E+06,       0.100426779086875598E+06,       0.100408173847290411E+06,       0.100384737995668649E+06,       0.100361938241868149E+06,
+        0.100339809752568588E+06,       0.100318341944825661E+06,       0.100297490120403570E+06,       0.100277187624826533E+06,       0.100256847285368276E+06,
+        0.100235365725066120E+06,       0.100214436988323068E+06,       0.100194015395758135E+06,       0.100174603679756343E+06,       0.100156451770575964E+06,
+        0.100139783864459299E+06,       0.100124799136242582E+06,       0.100111674036540222E+06,       0.100100566149749706E+06,       0.100091646133474802E+06,
+        0.100094268080595342E+06,       0.100098360646490051E+06,       0.100103245417476035E+06,       0.100108251398645036E+06,       0.100112713737688697E+06,
+        0.100115972074298101E+06,       0.100117368468727698E+06,       0.100113713047268437E+06,       0.100102264314479005E+06,       0.100088001440509222E+06,
+        0.100071163974188516E+06,       0.100051996036882978E+06,       0.100030726477270320E+06,       0.100007546295320470E+06,       0.999807647979038738E+05,
+        0.999391989552558807E+05,       0.998969708781520749E+05,       0.998557810370234511E+05,       0.998173700956349639E+05,       0.997835138413437380E+05,
+        0.997560107381300622E+05,       0.997399269866001996E+05,       0.997470920864752261E+05,       0.997634292598558095E+05,       0.997888964555621351E+05,
+        0.998253139512354246E+05,       0.998703081483062851E+05,       0.999237330223304161E+05,       0.999900673422841937E+05,       0.100071098592214898E+06,
+        0.100157786095159157E+06,       0.100248141148947368E+06,       0.100340095617225234E+06,       0.100431568456538211E+06,       0.100520552982271765E+06,
+        0.100601957172444119E+06,       0.100676277857242458E+06,       0.100746000837763233E+06,       0.100808736668317229E+06,       0.100864485886548777E+06,
+        0.100912656357667453E+06,       0.100952804425252194E+06,       0.100983458937089512E+06,       0.101002905816960556E+06,       0.101017076739301760E+06,
+        0.101025919304932366E+06,       0.101031319629252597E+06,       0.101035629307633033E+06,       0.101040244934609727E+06,       0.101046393155694794E+06,
+        0.101055516125687020E+06,       0.101070906234944094E+06,       0.101089614225348079E+06,       0.101111577432790844E+06,       0.101136727145279292E+06,
+        0.101164845396941935E+06,       0.101195505773623969E+06,       0.101228307857940395E+06,       0.101262885478130513E+06,       0.101298695011647855E+06,
+        0.101336323186784808E+06,       0.101375617863355365E+06,       0.101416132308550543E+06,       0.101458486694783467E+06,       0.101500186893265898E+06,
+        0.101539835500673144E+06,       0.101576113752189529E+06,       0.101608148989054069E+06,       0.101635731083729115E+06,       0.101658502412969741E+06,
+        0.101672883340000117E+06,       0.101682956248776158E+06,       0.101690136156231834E+06,       0.101694729692935623E+06,       0.101695555850151519E+06,
+        0.101694985210699713E+06,       0.101693812129123311E+06,       0.101693039728607808E+06,       0.101693715283905956E+06,       0.101692868849250488E+06,
+        0.101690508890417783E+06,       0.101685212790082718E+06,       0.101676311144040446E+06,       0.101666676329463662E+06,       0.101655232931092047E+06,
+        0.101641717109236590E+06,       0.101625993005500495E+06,       0.101608164735537764E+06,       0.101588188219044227E+06,       0.101565919017002117E+06,
+        0.101541334705616158E+06,       0.101515224870468810E+06,       0.101488328834034881E+06,       0.101461275807381404E+06,       0.101434883687913665E+06,
+        0.101409484965064941E+06,       0.101385820779280519E+06,       0.101366650582102375E+06,       0.101354446840173172E+06,       0.101343919272935833E+06,
+        0.101334580534699839E+06,       0.101326051033725802E+06,       0.101318025772555571E+06,       0.101310244905231491E+06,       0.101303240884958926E+06,
+        0.101296508440228543E+06,       0.101288703571071324E+06,       0.101279586340018883E+06,       0.101269869694777401E+06,       0.101258981910571456E+06,
+        0.101246361574452327E+06,       0.101230052909366845E+06,       0.101210205538298207E+06,       0.101187520180750522E+06,       0.101161911206820834E+06,
+        0.101133290201435040E+06,       0.101101563145659631E+06,       0.101066628653128937E+06,       0.101019252959455625E+06,       0.100965746706630394E+06,
+        0.100910740992734136E+06,       0.100855238817428384E+06,       0.100800186778776610E+06,       0.100746485895287333E+06,       0.100695000750680716E+06,
+        0.100647864656014091E+06,       0.100605793755290593E+06,       0.100567897173808713E+06,       0.100534547818198989E+06,       0.100814127595255733E+06,
+        0.100792022069682134E+06,       0.100768906676945466E+06,       0.100744859019167008E+06,       0.100719947172904969E+06,       0.100694229203288138E+06,
+        0.100667752842392147E+06,       0.100641747076966523E+06,       0.100616187623394333E+06,       0.100590421603492592E+06,       0.100564843816162116E+06,
+        0.100539661442132914E+06,       0.100515003622905657E+06,       0.100490925990557327E+06,       0.100467416019604236E+06,       0.100444399107853926E+06,
+        0.100421745278230635E+06,       0.100399276378565366E+06,       0.100374479059296529E+06,       0.100342341387721070E+06,       0.100310819294281551E+06,
+        0.100280122297496389E+06,       0.100250406051737154E+06,       0.100221779328347242E+06,       0.100194311780137796E+06,       0.100168042299398876E+06,
+        0.100142987772136228E+06,       0.100119152028053810E+06,       0.100096071569344102E+06,       0.100074127372371906E+06,       0.100053458844250679E+06,
+        0.100034145590099070E+06,       0.100016303683140140E+06,       0.100000086204841966E+06,       0.999856841527353536E+05,       0.999733278135488799E+05,
+        0.999663531822283549E+05,       0.999693777575280983E+05,       0.999741959503276157E+05,       0.999802590538802469E+05,       0.999870378916889313E+05,
+        0.999938949144795042E+05,       0.100000191518739506E+06,       0.100005286991947069E+06,       0.100006317487418550E+06,       0.100001195017387858E+06,
+        0.999937624881289375E+05,       0.999840228227615153E+05,       0.999719630030743720E+05,       0.999577541117163637E+05,       0.999414190489595931E+05,
+        0.999227353126357775E+05,       0.998873066933161899E+05,       0.998482442672230973E+05,       0.998092392179712187E+05,       0.997720171343442780E+05,
+        0.997383602763239178E+05,       0.997100954593149654E+05,       0.996890738866330212E+05,       0.996865348971301573E+05,       0.996979284283922898E+05,
+        0.997178025858917244E+05,       0.997459381653020537E+05,       0.997821174181933602E+05,       0.998261113921440992E+05,       0.998776597193271737E+05,
+        0.999420283421857603E+05,       0.100017917957394646E+06,       0.100097878242084247E+06,       0.100179897231054711E+06,       0.100262024118021669E+06,
+        0.100342632647495484E+06,       0.100419763744213284E+06,       0.100491241165072570E+06,       0.100554990596539108E+06,       0.100613108372608185E+06,
+        0.100664964935558615E+06,       0.100710050488669251E+06,       0.100748062257432917E+06,       0.100778981129089982E+06,       0.100801136588479072E+06,
+        0.100816775933362136E+06,       0.100825979191023362E+06,       0.100833035761093313E+06,       0.100839384072879693E+06,       0.100846373089390050E+06,
+        0.100857951736503237E+06,       0.100872302980121356E+06,       0.100888680627202251E+06,       0.100907092306334001E+06,       0.100927501559027049E+06,
+        0.100950662310288419E+06,       0.100977294658870305E+06,       0.101006277386327682E+06,       0.101036971461367139E+06,       0.101068254496147259E+06,
+        0.101099848827670517E+06,       0.101133511540723193E+06,       0.101169399010245761E+06,       0.101207870174907031E+06,       0.101248846664781042E+06,
+        0.101290872607848010E+06,       0.101333141189654139E+06,       0.101375246051365641E+06,       0.101416446476650075E+06,       0.101455302158143284E+06,
+        0.101490839830927347E+06,       0.101520107656443550E+06,       0.101543517742126453E+06,       0.101563037513223637E+06,       0.101578855351202437E+06,
+        0.101589294440855650E+06,       0.101594084692158984E+06,       0.101595811485579121E+06,       0.101594522898840631E+06,       0.101587783852875349E+06,
+        0.101580434348492054E+06,       0.101571251185715577E+06,       0.101560523496472335E+06,       0.101548552694418337E+06,       0.101535867827232971E+06,
+        0.101525413599061823E+06,       0.101514059084604145E+06,       0.101501599931887249E+06,       0.101487982453526070E+06,       0.101472687979190014E+06,
+        0.101455256212675624E+06,       0.101436599458446668E+06,       0.101417421871714148E+06,       0.101397941747779230E+06,       0.101378563636379375E+06,
+        0.101359842874464084E+06,       0.101342462840995518E+06,       0.101332246224379633E+06,       0.101325840252083945E+06,       0.101320103689658979E+06,
+        0.101314877253089740E+06,       0.101310111834561045E+06,       0.101305378666758857E+06,       0.101300345803243748E+06,       0.101295776170531011E+06,
+        0.101292199871251156E+06,       0.101287082936946317E+06,       0.101280060941132921E+06,       0.101270852280511215E+06,       0.101259228389922413E+06,
+        0.101244988802512118E+06,       0.101227740446083306E+06,       0.101206586899449845E+06,       0.101182271497207475E+06,       0.101154765725986566E+06,
+        0.101124017218970926E+06,       0.101089948851124151E+06,       0.101052459983455323E+06,       0.101011429271982197E+06,       0.100955245737388075E+06,
+        0.100896292883737755E+06,       0.100836289133349041E+06,       0.100776402552628671E+06,       0.100717117782225978E+06,       0.100659365283430379E+06,
+        0.100604025319315682E+06,       0.100553449734939946E+06,       0.100508407522918642E+06,       0.100467703215460322E+06,       0.100431774319843782E+06,
+        0.100887777028820332E+06,       0.100861720047367722E+06,       0.100834436753951144E+06,       0.100806009321876336E+06,       0.100776515387351727E+06,
+        0.100746027719175327E+06,       0.100714128174464058E+06,       0.100678835400336873E+06,       0.100643940658424166E+06,       0.100609599439615049E+06,
+        0.100575890439937211E+06,       0.100542814645689868E+06,       0.100510647118237335E+06,       0.100478852228419142E+06,       0.100447427441828680E+06,
+        0.100416345678542421E+06,       0.100385524391706378E+06,       0.100353710114660586E+06,       0.100313330006065604E+06,       0.100273215809488320E+06,
+        0.100233726851702537E+06,       0.100195172710990315E+06,       0.100157816918484707E+06,       0.100121881575408392E+06,       0.100087552777137244E+06,
+        0.100054986731522251E+06,       0.100024316458513829E+06,       0.999958188555688102E+05,       0.999694587498323526E+05,       0.999449162204764725E+05,
+        0.999222572991156194E+05,       0.999015841003048117E+05,       0.998830358793447813E+05,       0.998667901084829064E+05,       0.998530636160492868E+05,
+        0.998421138196279935E+05,       0.998399548826702376E+05,       0.998456341634458367E+05,       0.998536660057044792E+05,       0.998634438903502014E+05,
+        0.998743637363783346E+05,       0.998858203733583359E+05,       0.998972031892049272E+05,       0.999078909209750127E+05,       0.999149362451545312E+05,
+        0.999155853988857416E+05,       0.999144713123037072E+05,       0.999115094947106991E+05,       0.999066084422268032E+05,       0.998996635379296931E+05,
+        0.998905505086211051E+05,       0.998791187039132201E+05,       0.998553009292081260E+05,       0.998211706427201134E+05,       0.997864909210314072E+05,
+        0.997528267554746853E+05,       0.997217498141473916E+05,       0.996948180668799905E+05,       0.996735491411857802E+05,       0.996593866015884996E+05,
+        0.996655234255323448E+05,       0.996793806269131601E+05,       0.997006480667150026E+05,       0.997291101032920706E+05,       0.997645101820020791E+05,
+        0.998065302642879251E+05,       0.998547900089741306E+05,       0.999134103376733110E+05,       0.999816545378570445E+05,       0.100052123784172887E+06,
+        0.100122995502983205E+06,       0.100192554793170464E+06,       0.100259253657548237E+06,       0.100321770579711141E+06,       0.100379066111299660E+06,
+        0.100430565790236928E+06,       0.100476507405646029E+06,       0.100515199549242738E+06,       0.100547257296906639E+06,       0.100573671260601302E+06,
+        0.100594920234367688E+06,       0.100611741953639648E+06,       0.100625093360959523E+06,       0.100636085854106641E+06,       0.100648539226327353E+06,
+        0.100663110344216606E+06,       0.100678485576473686E+06,       0.100694991774415132E+06,       0.100712835683178113E+06,       0.100732147548005290E+06,
+        0.100753127553809449E+06,       0.100775525773403977E+06,       0.100799178062266757E+06,       0.100823896465442915E+06,       0.100848973735924432E+06,
+        0.100871627589741343E+06,       0.100896325593451635E+06,       0.100923508440905760E+06,       0.100953444968081341E+06,       0.100987803936626107E+06,
+        0.101025452874861629E+06,       0.101064958354120550E+06,       0.101105934719207362E+06,       0.101149656229281260E+06,       0.101195955740066449E+06,
+        0.101241312234646321E+06,       0.101284295970940017E+06,       0.101322838039260794E+06,       0.101354503959834561E+06,       0.101381602347716602E+06,
+        0.101404011754918669E+06,       0.101421551762267889E+06,       0.101430360992792368E+06,       0.101432922117767157E+06,       0.101431497700586173E+06,
+        0.101426925441668209E+06,       0.101419967655507149E+06,       0.101411983040633873E+06,       0.101402716970667971E+06,       0.101392421375849139E+06,
+        0.101381472260780953E+06,       0.101370274940234522E+06,       0.101359740662010270E+06,       0.101350634658367329E+06,       0.101341143517682387E+06,
+        0.101330923240958698E+06,       0.101319823874219393E+06,       0.101307931163203728E+06,       0.101295590108053555E+06,       0.101283554840952769E+06,
+        0.101272503805782646E+06,       0.101264230996134676E+06,       0.101263165987784392E+06,       0.101263248071743699E+06,       0.101263968423840182E+06,
+        0.101264949849351571E+06,       0.101265950281725454E+06,       0.101266859267559164E+06,       0.101267688820318188E+06,       0.101269586773692979E+06,
+        0.101271200254654817E+06,       0.101270843870590616E+06,       0.101268468005190778E+06,       0.101263583383249803E+06,       0.101255809203046563E+06,
+        0.101244849341628564E+06,       0.101230469880693592E+06,       0.101211897835992699E+06,       0.101189677118595791E+06,       0.101163874725058151E+06,
+        0.101134452948665217E+06,       0.101101374466219480E+06,       0.101064596222306151E+06,       0.101024065194136114E+06,       0.100976094439065258E+06,
+        0.100916143828112647E+06,       0.100853769181501484E+06,       0.100790071236260570E+06,       0.100726087398982490E+06,       0.100662794662010128E+06,
+        0.100601113224382003E+06,       0.100541910367744073E+06,       0.100487274737311833E+06,       0.100437683864829785E+06,       0.100392394095480457E+06,
+        0.100351867577605750E+06,       0.100962168045125494E+06,       0.100932365352918903E+06,       0.100901110935450168E+06,       0.100868480358099798E+06,
+        0.100834547574790442E+06,       0.100796703363587934E+06,       0.100755267960995203E+06,       0.100713570472402876E+06,       0.100671854726096004E+06,
+        0.100630308500112806E+06,       0.100589060133053688E+06,       0.100548176434007823E+06,       0.100507661857319457E+06,       0.100467458892467330E+06,
+        0.100427449603971385E+06,       0.100387458241177985E+06,       0.100347067293918182E+06,       0.100298654635154177E+06,       0.100250789888946878E+06,
+        0.100203094461237808E+06,       0.100156000274838036E+06,       0.100109901773151054E+06,       0.100065158238268661E+06,       0.100022096993949221E+06,
+        0.999810174333996401E+05,       0.999421958115488960E+05,       0.999058907435752189E+05,       0.998749313841952826E+05,       0.998464722705311870E+05,
+        0.998203417981312523E+05,       0.997966268545406929E+05,       0.997754458911707188E+05,       0.997569500594004494E+05,       0.997413241542494943E+05,
+        0.997287873670089612E+05,       0.997195938347852207E+05,       0.997219848697613779E+05,       0.997302647271703609E+05,       0.997413201843605202E+05,
+        0.997545532545877795E+05,       0.997693575270145375E+05,       0.997851155398511037E+05,       0.998011953959217790E+05,       0.998169466903843859E+05,
+        0.998299082101016102E+05,       0.998356142670790869E+05,       0.998398422284621047E+05,       0.998424522644160897E+05,       0.998432923817324918E+05,
+        0.998421955048720556E+05,       0.998389770375031076E+05,       0.998334333807975636E+05,       0.998233671652358898E+05,       0.997961670290865004E+05,
+        0.997678973047597101E+05,       0.997399010170866677E+05,       0.997134966342892585E+05,       0.996899556689095043E+05,       0.996704759993049811E+05,
+        0.996561506699569145E+05,       0.996500136858785991E+05,       0.996586427100675064E+05,       0.996741311696416087E+05,       0.996962994894855947E+05,
+        0.997249142503650510E+05,       0.997596639024193428E+05,       0.998001312580039958E+05,       0.998457643772705051E+05,       0.998968741052847909E+05,
+        0.999554058789066621E+05,       0.100014421175045645E+06,       0.100072433938662172E+06,       0.100128122411163247E+06,       0.100180369857232887E+06,
+        0.100226565707743983E+06,       0.100267364450542242E+06,       0.100303437234851634E+06,       0.100335667091963755E+06,       0.100364067822408935E+06,
+        0.100388352892750874E+06,       0.100408979571248361E+06,       0.100426614584295938E+06,       0.100443740449263758E+06,       0.100461134998395326E+06,
+        0.100478174321635088E+06,       0.100495256991003844E+06,       0.100512619944850769E+06,       0.100530318011748270E+06,       0.100548816195507636E+06,
+        0.100568537852548383E+06,       0.100588688433695279E+06,       0.100609168368209503E+06,       0.100629814904332350E+06,       0.100650416237038749E+06,
+        0.100665634418575515E+06,       0.100681296503981284E+06,       0.100698501345687095E+06,       0.100717920340627403E+06,       0.100740215249176472E+06,
+        0.100766890514599916E+06,       0.100796657224606606E+06,       0.100829306693609207E+06,       0.100864641226465828E+06,       0.100904494038338991E+06,
+        0.100948883593760926E+06,       0.100993670283464584E+06,       0.101037518284592399E+06,       0.101079215492193092E+06,       0.101115268009655614E+06,
+        0.101146790223207165E+06,       0.101174201341284715E+06,       0.101197180680782549E+06,       0.101215405063571248E+06,       0.101223672236876388E+06,
+        0.101227039458753206E+06,       0.101226892310118274E+06,       0.101223972224575875E+06,       0.101218953111666357E+06,       0.101212937481870860E+06,
+        0.101205841402347578E+06,       0.101198438153766576E+06,       0.101191337677150907E+06,       0.101184775501605473E+06,       0.101178859738651910E+06,
+        0.101173861836438504E+06,       0.101169688625135837E+06,       0.101165295165053874E+06,       0.101160720689472480E+06,       0.101156205118519152E+06,
+        0.101153904081471745E+06,       0.101157778313312563E+06,       0.101162376363148098E+06,       0.101167695990116554E+06,       0.101174407609201837E+06,
+        0.101181289698729292E+06,       0.101187910343826748E+06,       0.101193938755009076E+06,       0.101199145593254492E+06,       0.101206932922006279E+06,
+        0.101215167455344184E+06,       0.101221538641997948E+06,       0.101225600948191553E+06,       0.101227025345643400E+06,       0.101225591909201801E+06,
+        0.101221179118605258E+06,       0.101213750568578733E+06,       0.101199646966405868E+06,       0.101180697627794187E+06,       0.101158105995225807E+06,
+        0.101131732247750042E+06,       0.101101468150223940E+06,       0.101067227518597691E+06,       0.101028937999906033E+06,       0.100986534229694924E+06,
+        0.100931637537634888E+06,       0.100870116212888723E+06,       0.100806172230221506E+06,       0.100740814221331588E+06,       0.100675010844437245E+06,
+        0.100609686876287946E+06,       0.100545721239012084E+06,       0.100483946382944894E+06,       0.100426130298766730E+06,       0.100372432821891009E+06,
+        0.100322757504134090E+06,       0.100277638455664739E+06,       0.101031760825673671E+06,       0.100998271623218010E+06,       0.100963081981794705E+06,
+        0.100926251398063658E+06,       0.100882116391194853E+06,       0.100836110949086375E+06,       0.100789196010976768E+06,       0.100741656022242169E+06,
+        0.100693739602509639E+06,       0.100645654807320738E+06,       0.100597565425804190E+06,       0.100549588305930272E+06,       0.100501791687992096E+06,
+        0.100454194516198477E+06,       0.100406766687836353E+06,       0.100359430189551465E+06,       0.100303106797204193E+06,       0.100246577208372706E+06,
+        0.100190531822652643E+06,       0.100135266216653603E+06,       0.100081062875707968E+06,       0.100028192493603376E+06,       0.999769161960119818E+05,
+        0.999274886616365693E+05,       0.998801621121565840E+05,       0.998351911400472018E+05,       0.997962094163349393E+05,       0.997640534483473457E+05,
+        0.997345240177219384E+05,       0.997076990988948673E+05,       0.996836794307263772E+05,       0.996625896600271371E+05,       0.996445791479565378E+05,
+        0.996298224252568762E+05,       0.996185192726470996E+05,       0.996108943913202529E+05,       0.996171044733596500E+05,       0.996274341933858086E+05,
+        0.996407368485686020E+05,       0.996564433077199938E+05,       0.996739662819337100E+05,       0.996926995456860750E+05,       0.997120167510192841E+05,
+        0.997312700110226870E+05,       0.997492720049924683E+05,       0.997589945357419347E+05,       0.997672950870170171E+05,       0.997740082631510304E+05,
+        0.997789569418504107E+05,       0.997819534179343900E+05,       0.997828018434580008E+05,       0.997813025467889238E+05,       0.997761547542830958E+05,
+        0.997606903751367063E+05,       0.997380039112137747E+05,       0.997148807783809316E+05,       0.996925793721139198E+05,       0.996723316187614837E+05,
+        0.996553186696160265E+05,       0.996426434711866459E+05,       0.996353006212308683E+05,       0.996360089851673401E+05,       0.996493081867637520E+05,
+        0.996683800195190997E+05,       0.996929780547397386E+05,       0.997227658669395460E+05,       0.997573001543519495E+05,       0.997960150791931374E+05,
+        0.998382096557535260E+05,       0.998830404070649238E+05,       0.999298323121304275E+05,       0.999742523604048474E+05,       0.100016965326181715E+06,
+        0.100057253131543956E+06,       0.100094584675305145E+06,       0.100128612542877818E+06,       0.100159162106115866E+06,       0.100186212494174571E+06,
+        0.100209869217876141E+06,       0.100230664541801205E+06,       0.100252215827535721E+06,       0.100272507526162837E+06,       0.100291578842935764E+06,
+        0.100309849731348106E+06,       0.100327689967233746E+06,       0.100345394170965068E+06,       0.100363163535270942E+06,       0.100381092592034052E+06,
+        0.100399259031973241E+06,       0.100417513798931104E+06,       0.100435580822035801E+06,       0.100453091252954211E+06,       0.100469603339999827E+06,
+        0.100480151507121773E+06,       0.100489254638568047E+06,       0.100498595808049067E+06,       0.100508951548301586E+06,       0.100521040443233302E+06,
+        0.100536087694824993E+06,       0.100554481106296153E+06,       0.100575842199618433E+06,       0.100600284600435130E+06,       0.100627894363922838E+06,
+        0.100660998742818352E+06,       0.100699900685942383E+06,       0.100740240979155365E+06,       0.100780773089326132E+06,       0.100820325888548046E+06,
+        0.100857002425394050E+06,       0.100889306549680012E+06,       0.100918410465244044E+06,       0.100943855527829830E+06,       0.100965216993375041E+06,
+        0.100982104369596826E+06,       0.100988787448417890E+06,       0.100992039290643908E+06,       0.100992851817592629E+06,       0.100992148367721486E+06,
+        0.100990754377491627E+06,       0.100989328864528783E+06,       0.100987939282731590E+06,       0.100987019598780156E+06,       0.100986810224360001E+06,
+        0.100987461015865600E+06,       0.100989052975663959E+06,       0.100991630597561802E+06,       0.100995163025901697E+06,       0.101001875722349461E+06,
+        0.101011088720900429E+06,       0.101021084899088091E+06,       0.101031663037972830E+06,       0.101042638294081626E+06,       0.101053858103835970E+06,
+        0.101065218626100279E+06,       0.101076680586933391E+06,       0.101088283485301858E+06,       0.101099874970037970E+06,       0.101113089326713816E+06,
+        0.101125428039884195E+06,       0.101136196176455385E+06,       0.101144782354753406E+06,       0.101150661981462021E+06,       0.101153397040916956E+06,
+        0.101152632849470392E+06,       0.101148092219151222E+06,       0.101138825885236918E+06,       0.101125297346996245E+06,       0.101107998631323659E+06,
+        0.101086896343469081E+06,       0.101061954484055474E+06,       0.101033133620494526E+06,       0.101000389988487950E+06,       0.100963674428856495E+06,
+        0.100920035249967157E+06,       0.100864002050084426E+06,       0.100802954127500183E+06,       0.100739491656333426E+06,       0.100674607806506479E+06,
+        0.100609142818467881E+06,       0.100543918229119721E+06,       0.100479729438758746E+06,       0.100417340423775575E+06,       0.100357818911458060E+06,
+        0.100301549120910859E+06,       0.100249027161521051E+06,       0.100200821670612902E+06,       0.101087517829558172E+06,       0.101052015003826687E+06,
+        0.101011788745108162E+06,       0.100964536778963855E+06,       0.100915488137692053E+06,       0.100864943012846241E+06,       0.100813190048196135E+06,
+        0.100760500256302723E+06,       0.100707121731364154E+06,       0.100653275174801398E+06,       0.100599150242222226E+06,       0.100544902712618306E+06,
+        0.100490652473024573E+06,       0.100436482304513964E+06,       0.100382437448442113E+06,       0.100320280351299210E+06,       0.100257427382579408E+06,
+        0.100194846079550756E+06,       0.100132891655021755E+06,       0.100071918796184837E+06,       0.100012281557507449E+06,       0.999543340473443968E+05,
+        0.998984318951125897E+05,       0.998449344820776314E+05,       0.997942079153267550E+05,       0.997466460297804297E+05,       0.997094928681285237E+05,
+        0.996756279012622545E+05,       0.996450218538222252E+05,       0.996176735384205385E+05,       0.995936103776563396E+05,       0.995728884174646664E+05,
+        0.995555917894421727E+05,       0.995418315732738702E+05,       0.995317440033937164E+05,       0.995262628136555868E+05,       0.995329410864949314E+05,
+        0.995433141117427585E+05,       0.995568197318211314E+05,       0.995728823939344729E+05,       0.995909116272487881E+05,       0.996102999545491039E+05,
+        0.996304204174830811E+05,       0.996506239397997124E+05,       0.996702368021630245E+05,       0.996815718025470851E+05,       0.996899469928969920E+05,
+        0.996967323341972806E+05,       0.997018093255459680E+05,       0.997050766826754843E+05,       0.997064543685055542E+05,       0.997058891541211779E+05,
+        0.997033620388164272E+05,       0.996988978495463380E+05,       0.996831868676393642E+05,       0.996664226445127570E+05,       0.996504367351514375E+05,
+        0.996361908772876632E+05,       0.996245860820844246E+05,       0.996164411729444837E+05,       0.996124708057612588E+05,       0.996132638091558620E+05,
+        0.996196649575229239E+05,       0.996367110923675500E+05,       0.996583825556631200E+05,       0.996843326520396949E+05,       0.997128691088688356E+05,
+        0.997429147876210773E+05,       0.997758051592909760E+05,       0.998110107603276119E+05,       0.998478942000829556E+05,       0.998857114279977977E+05,
+        0.999214491155317955E+05,       0.999550948845939129E+05,       0.999866837454055931E+05,       0.100015951080814193E+06,       0.100042763152220112E+06,
+        0.100066833155271277E+06,       0.100088158247781059E+06,       0.100108078185884762E+06,       0.100126927297932227E+06,       0.100144951073682430E+06,
+        0.100162306504082269E+06,       0.100179972902585811E+06,       0.100197255514410528E+06,       0.100214513504718459E+06,       0.100231716678680328E+06,
+        0.100248516891677820E+06,       0.100264879167597144E+06,       0.100280677931150029E+06,       0.100295703143529230E+06,       0.100309668678237373E+06,
+        0.100317822458752169E+06,       0.100323698725186405E+06,       0.100328766123466703E+06,       0.100333617686529382E+06,       0.100338870421945830E+06,
+        0.100345146510504768E+06,       0.100353505811859010E+06,       0.100364091412822730E+06,       0.100377219192028511E+06,       0.100393145224109379E+06,
+        0.100412076822805961E+06,       0.100436536362016341E+06,       0.100466993027333549E+06,       0.100499128955239808E+06,       0.100531867585847620E+06,
+        0.100564210070354224E+06,       0.100595268938737849E+06,       0.100623389505981249E+06,       0.100648875381678285E+06,       0.100671545265182722E+06,
+        0.100691215991390258E+06,       0.100707855569253967E+06,       0.100721531568851729E+06,       0.100729765774870320E+06,       0.100736382308921660E+06,
+        0.100742049357786149E+06,       0.100747338931632839E+06,       0.100752699996680560E+06,       0.100758437644766876E+06,       0.100764492369211905E+06,
+        0.100771174162651805E+06,       0.100778897781122723E+06,       0.100791202238176033E+06,       0.100805304746492911E+06,       0.100820453141876555E+06,
+        0.100836553977341420E+06,       0.100853433691068960E+06,       0.100869804352758074E+06,       0.100885565873248357E+06,       0.100901263434718436E+06,
+        0.100916755649211860E+06,       0.100931925490762223E+06,       0.100946862129343805E+06,       0.100964994999554750E+06,       0.100982379998277524E+06,
+        0.100998599729598267E+06,       0.101013259118967748E+06,       0.101025997621651855E+06,       0.101036183051793079E+06,       0.101042991775159331E+06,
+        0.101046219174794693E+06,       0.101045436783694371E+06,       0.101037979396283830E+06,       0.101026389136987622E+06,       0.101011353849770458E+06,
+        0.100992765156084381E+06,       0.100970520839387638E+06,       0.100944522980413691E+06,       0.100914676733503889E+06,       0.100880889510173438E+06,
+        0.100843070409204898E+06,       0.100794195318855112E+06,       0.100740849916230014E+06,       0.100684368608276331E+06,       0.100625515617689191E+06,
+        0.100565057571482292E+06,       0.100503753672499588E+06,       0.100442348146381337E+06,       0.100381564680888332E+06,       0.100322120082476831E+06,
+        0.100265427081164002E+06,       0.100211108587006820E+06,       0.100159852906932778E+06,       0.100112309293580329E+06,       0.101124201328911135E+06,
+        0.101079108320663814E+06,       0.101031809144729792E+06,       0.100982479818601947E+06,       0.100931296727433786E+06,       0.100878431465452362E+06,
+        0.100824045759680885E+06,       0.100768286540631874E+06,       0.100710530566360118E+06,       0.100651851143405918E+06,       0.100592641779612633E+06,
+        0.100533088300546049E+06,       0.100473351995987294E+06,       0.100413568226339557E+06,       0.100347374189164038E+06,       0.100280419558277266E+06,
+        0.100213466642138825E+06,       0.100146884874704396E+06,       0.100081054126754942E+06,       0.100016363564741026E+06,       0.999532111494706915E+05,
+        0.998920037667682045E+05,       0.998331579776468134E+05,       0.997771013708717801E+05,       0.997242744959584961E+05,       0.996794911425569007E+05,
+        0.996421673866169731E+05,       0.996083624063458992E+05,       0.995780558571076108E+05,       0.995512438908386830E+05,       0.995279390599935141E+05,
+        0.995081697090995876E+05,       0.994919788171798573E+05,       0.994794222509916144E+05,       0.994705663858296175E+05,       0.994666304399983201E+05,
+        0.994716729317709396E+05,       0.994803098980725772E+05,       0.994920284915772354E+05,       0.995062941002977459E+05,       0.995225510997954116E+05,
+        0.995402235083560226E+05,       0.995587157137078175E+05,       0.995774134724761680E+05,       0.995956854178548674E+05,       0.996082099438724399E+05,
+        0.996146714115503564E+05,       0.996198917096476653E+05,       0.996237772972328385E+05,       0.996262556600006501E+05,       0.996272811679797160E+05,
+        0.996268420791924145E+05,       0.996249688472863927E+05,       0.996217438673883153E+05,       0.996165665480622556E+05,       0.996053672464558331E+05,
+        0.995949919441781822E+05,       0.995861528017038072E+05,       0.995795026742108748E+05,       0.995756196555683418E+05,       0.995749923295157205E+05,
+        0.995764918417123117E+05,       0.995811371618628909E+05,       0.995900021812679042E+05,       0.996053443416097725E+05,       0.996253126869847765E+05,
+        0.996485392863536254E+05,       0.996747275639752770E+05,       0.997034975235640304E+05,       0.997343816924544808E+05,       0.997668244608898967E+05,
+        0.998001857951137499E+05,       0.998337502953590738E+05,       0.998667425003782409E+05,       0.998964382191309269E+05,       0.999219732315580331E+05,
+        0.999453769704884326E+05,       0.999669632680838986E+05,       0.999870458961453260E+05,       0.100005916456012012E+06,       0.100023824889774987E+06,
+        0.100040963571971195E+06,       0.100057455775243085E+06,       0.100073413986486979E+06,       0.100089335775104671E+06,       0.100104815244426631E+06,
+        0.100119703191363587E+06,       0.100134379227022902E+06,       0.100148369375800728E+06,       0.100161370783191393E+06,       0.100173213642796953E+06,
+        0.100180378799944810E+06,       0.100185526497069281E+06,       0.100189324284954535E+06,       0.100192153267272603E+06,       0.100194434190503976E+06,
+        0.100196610662858875E+06,       0.100198905421094794E+06,       0.100201850991823914E+06,       0.100206163107215340E+06,       0.100212230663632377E+06,
+        0.100220378132198122E+06,       0.100230869811071767E+06,       0.100245444302250398E+06,       0.100264473811748554E+06,       0.100285188354245533E+06,
+        0.100306907645131752E+06,       0.100328990026887506E+06,       0.100350863943610893E+06,       0.100371839758985952E+06,       0.100391444833452260E+06,
+        0.100409831169643890E+06,       0.100426823791286341E+06,       0.100442350551841242E+06,       0.100456434485740057E+06,       0.100469179887128601E+06,
+        0.100480095078871280E+06,       0.100490844862516460E+06,       0.100501773469729742E+06,       0.100513473090107072E+06,       0.100529036405637875E+06,
+        0.100544944618372494E+06,       0.100561407314039185E+06,       0.100578441255079553E+06,       0.100596158161423402E+06,       0.100614688506316757E+06,
+        0.100634037456854698E+06,       0.100654132781311564E+06,       0.100674831301503669E+06,       0.100695930204477670E+06,       0.100717182634869590E+06,
+        0.100738316734543623E+06,       0.100757949561458212E+06,       0.100778269263575014E+06,       0.100798138776316147E+06,       0.100817212656416305E+06,
+        0.100835135245772617E+06,       0.100851545416907000E+06,       0.100866083297882986E+06,       0.100878398135237148E+06,       0.100888156496614407E+06,
+        0.100895050095971907E+06,       0.100897946875170004E+06,       0.100893038607802475E+06,       0.100884438418173842E+06,       0.100872056807847897E+06,
+        0.100855733686039923E+06,       0.100836196267254127E+06,       0.100813309503127763E+06,       0.100786948600525633E+06,       0.100756997497101227E+06,
+        0.100723347939641535E+06,       0.100681497385685245E+06,       0.100634489632593322E+06,       0.100584469640955329E+06,       0.100531975070484972E+06,
+        0.100477580490852386E+06,       0.100421885399875624E+06,       0.100365503956835804E+06,       0.100309056337240749E+06,       0.100253161585176160E+06,
+        0.100199112753698049E+06,       0.100147837599931416E+06,       0.100098570404209735E+06,       0.100051904767761502E+06,       0.100008417383464068E+06,
+        0.101133829804470908E+06,       0.101086063734912168E+06,       0.101036163378778583E+06,       0.100984272823056410E+06,       0.100930541473297533E+06,
+        0.100875120408097937E+06,       0.100818158832696005E+06,       0.100759800682388610E+06,       0.100700181428799915E+06,       0.100639425144117529E+06,
+        0.100577641880169904E+06,       0.100514925420599073E+06,       0.100451351465310479E+06,       0.100382775391041228E+06,       0.100313407558045423E+06,
+        0.100244124043691409E+06,       0.100175160300200252E+06,       0.100106643005048623E+06,       0.100038955227867787E+06,       0.999724957502307661E+05,
+        0.999076781431158888E+05,       0.998449303055831406E+05,       0.997846944474534976E+05,       0.997274274929867825E+05,       0.996741803525597352E+05,
+        0.996341923290063423E+05,       0.995977652427823923E+05,       0.995648719529626542E+05,       0.995354913787664409E+05,       0.995096084222995123E+05,
+        0.994872134460891248E+05,       0.994683012796486000E+05,       0.994528697284307418E+05,       0.994409175579627627E+05,       0.994324419258456037E+05,
+        0.994284685420939932E+05,       0.994314645232595940E+05,       0.994376508028579119E+05,       0.994465880324430618E+05,       0.994578122019961011E+05,
+        0.994708370980191394E+05,       0.994851569440643361E+05,       0.995002493657292362E+05,       0.995155788435459253E+05,       0.995306008387735346E+05,
+        0.995442855494334071E+05,       0.995482724169068970E+05,       0.995511559961705934E+05,       0.995528872179506288E+05,       0.995534386606523331E+05,
+        0.995528106454166118E+05,       0.995510380683528929E+05,       0.995481980155677447E+05,       0.995444181794313772E+05,       0.995389426918443642E+05,
+        0.995326299748121528E+05,       0.995248068651720969E+05,       0.995181203502452699E+05,       0.995131485287031392E+05,       0.995104093839186244E+05,
+        0.995103487778951967E+05,       0.995133292577804386E+05,       0.995196200330811116E+05,       0.995293885226779821E+05,       0.995426939068978973E+05,
+        0.995594831481808505E+05,       0.995804466354603064E+05,       0.996042013257502404E+05,       0.996303970501146687E+05,       0.996586123005633417E+05,
+        0.996883528051014437E+05,       0.997188265847352159E+05,       0.997490367113701504E+05,       0.997788526495865081E+05,       0.998078707819837873E+05,
+        0.998356993938613014E+05,       0.998619800562695164E+05,       0.998837326032437413E+05,       0.999030588156207523E+05,       0.999213959026974480E+05,
+        0.999389528776631778E+05,       0.999559737390779337E+05,       0.999728528505193826E+05,       0.999889548460716323E+05,       0.100004292017804837E+06,
+        0.100018822423468373E+06,       0.100032457501698547E+06,       0.100045070251751036E+06,       0.100056503593779649E+06,       0.100066444229329674E+06,
+        0.100073267298309525E+06,       0.100078208907556284E+06,       0.100081428306994378E+06,       0.100083145646425299E+06,       0.100084490398295631E+06,
+        0.100085214798590619E+06,       0.100085235536889129E+06,       0.100083644141418641E+06,       0.100082296767241191E+06,       0.100081573165770096E+06,
+        0.100081814208376789E+06,       0.100083316094140551E+06,       0.100086326553815597E+06,       0.100092077248113128E+06,       0.100100913993150592E+06,
+        0.100111107468981296E+06,       0.100122323217253404E+06,       0.100134231875447673E+06,       0.100146529461883110E+06,       0.100158953738958458E+06,
+        0.100172103739167927E+06,       0.100185442550333013E+06,       0.100198870033114930E+06,       0.100214743046030431E+06,       0.100230501702414200E+06,
+        0.100246186063517438E+06,       0.100261900880765723E+06,       0.100278280962620207E+06,       0.100294975745097370E+06,       0.100311878419328103E+06,
+        0.100329065054564679E+06,       0.100346610730169734E+06,       0.100364576981339662E+06,       0.100382997190169379E+06,       0.100401860048637522E+06,
+        0.100421460558640218E+06,       0.100441987614432976E+06,       0.100463274519939529E+06,       0.100485156332498926E+06,       0.100507667562079601E+06,
+        0.100531755712309474E+06,       0.100555537683995659E+06,       0.100578784151641899E+06,       0.100601239956125326E+06,       0.100622628756313949E+06,
+        0.100641873088256354E+06,       0.100658680264014634E+06,       0.100673598187900920E+06,       0.100686312726101605E+06,       0.100696503456104270E+06,
+        0.100703849613094353E+06,       0.100704152415214849E+06,       0.100700762505721214E+06,       0.100694332357036590E+06,       0.100684801738842943E+06,
+        0.100672137064367969E+06,       0.100656329651135165E+06,       0.100637393206196401E+06,       0.100615360755861184E+06,       0.100590281222544916E+06,
+        0.100562215831141861E+06,       0.100526781016220033E+06,       0.100486348156266336E+06,       0.100442798181998849E+06,       0.100397163429546563E+06,
+        0.100349807344903311E+06,       0.100301139976506107E+06,       0.100251607747954069E+06,       0.100201684250218939E+06,       0.100151862062679153E+06,
+        0.100102645581508201E+06,       0.100056044918004729E+06,       0.100011301942910883E+06,       0.999684520456376777E+05,       0.999279531311431929E+05,
+        0.998902646792392770E+05,       0.101126663346454399E+06,       0.101077325354608969E+06,       0.101025975734916894E+06,       0.100972737972671399E+06,
+        0.100917744423974829E+06,       0.100861133803490855E+06,       0.100803048766821448E+06,       0.100743633625432005E+06,       0.100683032233185906E+06,
+        0.100621386084403202E+06,       0.100558832663878042E+06,       0.100495211427552291E+06,       0.100428081646754872E+06,       0.100360053702616802E+06,
+        0.100291421804985934E+06,       0.100222501857581025E+06,       0.100153629396011398E+06,       0.100085157752426705E+06,       0.100017456492403435E+06,
+        0.999509101650603116E+05,       0.998859174013813172E+05,       0.998228903882164013E+05,       0.997622547363343474E+05,       0.997044497501409787E+05,
+        0.996565808532324445E+05,       0.996171954030033376E+05,       0.995813735590216529E+05,       0.995490780595074320E+05,       0.995202664706442010E+05,
+        0.994948916653312772E+05,       0.994731497863732366E+05,       0.994547373765991215E+05,       0.994395024448596523E+05,       0.994273918334258487E+05,
+        0.994183417080185318E+05,       0.994131115873192466E+05,       0.994138210062121798E+05,       0.994170868554473127E+05,       0.994225572846895811E+05,
+        0.994298923767942179E+05,       0.994385978253560606E+05,       0.994482495116238133E+05,       0.994584440096453618E+05,       0.994687785322086420E+05,
+        0.994788546658055129E+05,       0.994882828035313869E+05,       0.994927040708071727E+05,       0.994917547439376503E+05,       0.994895539007886109E+05,
+        0.994862075166797877E+05,       0.994818501581585733E+05,       0.994766470759525691E+05,       0.994707963627129502E+05,       0.994645310337857954E+05,
+        0.994581208250226337E+05,       0.994518734280974313E+05,       0.994461348017268174E+05,       0.994415182672292285E+05,       0.994388346879257297E+05,
+        0.994384357346413162E+05,       0.994406125032009149E+05,       0.994455917032776051E+05,       0.994535286747415666E+05,       0.994645016916688619E+05,
+        0.994785078337676387E+05,       0.994954607091662765E+05,       0.995151903074341826E+05,       0.995379744989390892E+05,       0.995645762978403654E+05,
+        0.995919660907828365E+05,       0.996199268533732247E+05,       0.996482101418556267E+05,       0.996765332991438627E+05,       0.997045938426658686E+05,
+        0.997320840835444978E+05,       0.997587053657859215E+05,       0.997841813092843222E+05,       0.998082694645679585E+05,       0.998307708426059398E+05,
+        0.998521847777656949E+05,       0.998731316336951131E+05,       0.998915223579208832E+05,       0.999088069900928822E+05,       0.999250655468217301E+05,
+        0.999403321942196199E+05,       0.999545992766920099E+05,       0.999678219791941956E+05,       0.999799234377201792E+05,       0.999908557408674824E+05,
+        0.100000288315772239E+06,       0.100007974659642932E+06,       0.100013912274213857E+06,       0.100018152445268570E+06,       0.100020792433534516E+06,
+        0.100021965384116600E+06,       0.100021828600707202E+06,       0.100018978825766098E+06,       0.100014638020503815E+06,       0.100010038309740252E+06,
+        0.100005576575099418E+06,       0.100001604858675491E+06,       0.999984320892866672E+05,       0.999963266886948113E+05,       0.999958737477183749E+05,
+        0.999972975927051302E+05,       0.100000048030566773E+06,       0.100004042344745598E+06,       0.100009194673973179E+06,       0.100015426118827090E+06,
+        0.100022673026545686E+06,       0.100031009563329135E+06,       0.100040766570146734E+06,       0.100051217540583049E+06,       0.100062248668533124E+06,
+        0.100073786795171531E+06,       0.100085797503990121E+06,       0.100098280610450573E+06,       0.100111262656178049E+06,       0.100125001802413579E+06,
+        0.100139645695878644E+06,       0.100154900063508263E+06,       0.100170710309353148E+06,       0.100187004814548171E+06,       0.100203682971120987E+06,
+        0.100220602392753455E+06,       0.100237565502663623E+06,       0.100256278549938754E+06,       0.100276900404893633E+06,       0.100298794291387065E+06,
+        0.100320557514765664E+06,       0.100342058165774986E+06,       0.100363130678741916E+06,       0.100383577435456726E+06,       0.100403171366828377E+06,
+        0.100421659429775435E+06,       0.100438766794516225E+06,       0.100454201546808938E+06,       0.100467659691497232E+06,       0.100478830237807808E+06,
+        0.100481024801078907E+06,       0.100479810484167552E+06,       0.100476403382797740E+06,       0.100470673041393165E+06,       0.100462504496619513E+06,
+        0.100451800234604845E+06,       0.100438481209722173E+06,       0.100422487058078696E+06,       0.100403775642287073E+06,       0.100382322062990715E+06,
+        0.100358117267813446E+06,       0.100327534199358997E+06,       0.100293850879764213E+06,       0.100257806725219358E+06,       0.100219741686727677E+06,
+        0.100180023194298759E+06,       0.100139040711945461E+06,       0.100097200477411025E+06,       0.100054920551059535E+06,       0.100012626265403043E+06,
+        0.999707461374165723E+05,       0.999303503014407033E+05,       0.998922229704366764E+05,       0.998554721656402544E+05,       0.998204850080980395E+05,
+        0.997876409225251264E+05,       0.997573084048583696E+05,       0.101103863341862932E+06,       0.101054198041262367E+06,       0.101002678396138304E+06,
+        0.100949414469850730E+06,       0.100894527371675096E+06,       0.100838147558637153E+06,       0.100780413214267071E+06,       0.100721468731159111E+06,
+        0.100661463324523051E+06,       0.100600549803942500E+06,       0.100538495641508489E+06,       0.100474499779926511E+06,       0.100409614880186520E+06,
+        0.100344074690081019E+06,       0.100278137807477731E+06,       0.100212086086552372E+06,       0.100146223109295490E+06,       0.100080872747272268E+06,
+        0.100016377835126099E+06,       0.999530989729176799E+05,       0.998914134690468200E+05,       0.998317144291724107E+05,       0.997744099892116501E+05,
+        0.997208338934957865E+05,       0.996799309689324291E+05,       0.996422327801534993E+05,       0.996077247089604498E+05,       0.995763830833266111E+05,
+        0.995481752007196337E+05,       0.995230592311468208E+05,       0.995009839760444302E+05,       0.994818884619951277E+05,       0.994657013515687577E+05,
+        0.994523401572802686E+05,       0.994417102486785589E+05,       0.994338127166474005E+05,       0.994291184813256987E+05,       0.994266081659517949E+05,
+        0.994259833524572168E+05,       0.994269351914163999E+05,       0.994291475057475909E+05,       0.994323001129119220E+05,       0.994360724062380032E+05,
+        0.994401472289394151E+05,       0.994442150616938598E+05,       0.994479785254193557E+05,       0.994511571742526139E+05,       0.994472284598653205E+05,
+        0.994408965796853736E+05,       0.994339336034472362E+05,       0.994264710020695638E+05,       0.994186660048548511E+05,       0.994107025256855122E+05,
+        0.994027916086733312E+05,       0.993951711926945572E+05,       0.993881049497915083E+05,       0.993818799057818542E+05,       0.993768025040628709E+05,
+        0.993745371453054540E+05,       0.993758273945832625E+05,       0.993797480709728989E+05,       0.993864179439653672E+05,       0.993959015946626314E+05,
+        0.994106666848780587E+05,       0.994280957797027659E+05,       0.994479062249146809E+05,       0.994699024606817256E+05,       0.994938326370272989E+05,
+        0.995193970618178137E+05,       0.995462575961586117E+05,       0.995732238058578514E+05,       0.995996836683722795E+05,       0.996264076540508540E+05,
+        0.996531520384603791E+05,       0.996796729134591151E+05,       0.997057352581914602E+05,       0.997311214531925361E+05,       0.997565307292698708E+05,
+        0.997809628500159452E+05,       0.998041926037547237E+05,       0.998260922842872533E+05,       0.998465616497438023E+05,       0.998655323213428928E+05,
+        0.998829702013785281E+05,       0.998988759405013552E+05,       0.999132835855504527E+05,       0.999267531384376343E+05,       0.999401187534305645E+05,
+        0.999522829859957856E+05,       0.999629705900948175E+05,       0.999720750719777716E+05,       0.999795225775888684E+05,       0.999852704402040836E+05,
+        0.999893033756584045E+05,       0.999916276698245056E+05,       0.999912215328864258E+05,       0.999874978505536856E+05,       0.999827294697511534E+05,
+        0.999772668831095216E+05,       0.999714403004270425E+05,       0.999655543840146129E+05,       0.999598844544293243E+05,       0.999546738384171913E+05,
+        0.999501503361758805E+05,       0.999464612795733119E+05,       0.999436472754112765E+05,       0.999417478240415512E+05,       0.999407845190346270E+05,
+        0.999407674168311496E+05,       0.999417003681598144E+05,       0.999435850419050112E+05,       0.999466778359479795E+05,       0.999509741170870548E+05,
+        0.999561184478715149E+05,       0.999620266396879451E+05,       0.999686260435519798E+05,       0.999758509523019893E+05,       0.999836356497705565E+05,
+        0.999919049957114039E+05,       0.100000562486864073E+06,       0.100011784952549118E+06,       0.100025750768122278E+06,       0.100039950549839836E+06,
+        0.100054145017178846E+06,       0.100068316891848794E+06,       0.100082450146767165E+06,       0.100096523400557431E+06,       0.100110501610887819E+06,
+        0.100124326095454249E+06,       0.100137903024072584E+06,       0.100153035210029513E+06,       0.100168028234449826E+06,       0.100182528489386037E+06,
+        0.100196311615898419E+06,       0.100209129758123207E+06,       0.100220714305906484E+06,       0.100227674075086179E+06,       0.100228582862959636E+06,
+        0.100228182141282334E+06,       0.100226441566948473E+06,       0.100223301716988630E+06,       0.100218680617939594E+06,       0.100212480375930187E+06,
+        0.100204593660852275E+06,       0.100193237399701000E+06,       0.100179608999797390E+06,       0.100163806561057383E+06,       0.100145763706322687E+06,
+        0.100124166108882637E+06,       0.100097853920290698E+06,       0.100069603397772837E+06,       0.100039598196173276E+06,       0.100008052525304520E+06,
+        0.999752085984543955E+05,       0.999413336779185047E+05,       0.999067168729345140E+05,       0.998716658233869821E+05,       0.998365033809807937E+05,
+        0.998015643788216548E+05,       0.997673503212209471E+05,       0.997368095318123815E+05,       0.997072417009385681E+05,       0.996789372306682053E+05,
+        0.996521942416031088E+05,       0.996273141486202512E+05,       0.996045978845247591E+05,       0.101067589111213412E+06,       0.101018770688517165E+06,
+        0.100968154311929655E+06,       0.100916004392167699E+06,       0.100862587963118029E+06,       0.100807829042751429E+06,       0.100751860689524168E+06,
+        0.100694824678955032E+06,       0.100636870575220571E+06,       0.100578085861079686E+06,       0.100518387120511878E+06,       0.100457910498338359E+06,
+        0.100396827710058526E+06,       0.100335334776766380E+06,       0.100273650785659062E+06,       0.100212016619918053E+06,       0.100150693670614579E+06,
+        0.100089962540906286E+06,       0.100030121749858867E+06,       0.999714864397286292E+05,       0.999143870864777564E+05,       0.998591682086720684E+05,
+        0.998061870647466858E+05,       0.997614041189860436E+05,       0.997232133410041570E+05,       0.996877601571912237E+05,       0.996550329117300425E+05,
+        0.996250097998356068E+05,       0.995976585142769036E+05,       0.995729358349222894E+05,       0.995507871467952355E+05,       0.995311458738776855E+05,
+        0.995139328178480646E+05,       0.994990553930397000E+05,       0.994864067510919558E+05,       0.994758647909620777E+05,       0.994662936172032933E+05,
+        0.994584116138104437E+05,       0.994520440064580325E+05,       0.994469670430250553E+05,       0.994429511205758317E+05,       0.994397638951787376E+05,
+        0.994371735196124209E+05,       0.994349519828108314E+05,       0.994328785098660155E+05,       0.994307429622300406E+05,       0.994283491541375697E+05,
+        0.994255179730021191E+05,       0.994164893114872393E+05,       0.994067289084808290E+05,       0.993968888922061742E+05,       0.993871232560968492E+05,
+        0.993776052903232921E+05,       0.993685268314349669E+05,       0.993600967438642401E+05,       0.993525384531912714E+05,       0.993461969112091901E+05,
+        0.993435709722199681E+05,       0.993430289823759958E+05,       0.993448240458555374E+05,       0.993518125064813066E+05,       0.993620332314667612E+05,
+        0.993746322170980275E+05,       0.993895541802843509E+05,       0.994066995366652700E+05,       0.994259271220238734E+05,       0.994470579336317896E+05,
+        0.994698797554098419E+05,       0.994941524985713913E+05,       0.995196140617028141E+05,       0.995459864926176379E+05,       0.995729822203312797E+05,
+        0.996003101205446874E+05,       0.996273070851956145E+05,       0.996547798040555062E+05,       0.996819738131592894E+05,       0.997085378998868837E+05,
+        0.997343278080748278E+05,       0.997592022275180498E+05,       0.997830289890008135E+05,       0.998056904289906088E+05,       0.998270877683784638E+05,
+        0.998471443932554248E+05,       0.998658079734391795E+05,       0.998830514038870024E+05,       0.998996025676379795E+05,       0.999153229697452334E+05,
+        0.999295566639472963E+05,       0.999422722019988432E+05,       0.999534500054842792E+05,       0.999630795823789667E+05,       0.999711562553596450E+05,
+        0.999776774721563124E+05,       0.999826387612595136E+05,       0.999854644320731022E+05,       0.999828794177739328E+05,       0.999789847225893318E+05,
+        0.999739838414557307E+05,       0.999680998532223457E+05,       0.999615553821963986E+05,       0.999545658866950980E+05,       0.999473341203756863E+05,
+        0.999400456392968772E+05,       0.999327953721481608E+05,       0.999256989141568774E+05,       0.999189700236989156E+05,       0.999127048128768074E+05,
+        0.999069798769329791E+05,       0.999018544683639047E+05,       0.998973722234758170E+05,       0.998935621850836178E+05,       0.998904388907014218E+05,
+        0.998896448727687675E+05,       0.998900344972452294E+05,       0.998911970826382749E+05,       0.998931396187662176E+05,       0.998958769268335309E+05,
+        0.998994275255013781E+05,       0.999038084460577520E+05,       0.999090289824781794E+05,       0.999150833667861443E+05,       0.999217240524284571E+05,
+        0.999282473433497362E+05,       0.999348833579850179E+05,       0.999415375242985901E+05,       0.999481154404054105E+05,       0.999545171017064131E+05,
+        0.999606302661866066E+05,       0.999663230149861483E+05,       0.999714356178636663E+05,       0.999757718627941504E+05,       0.999790900530105428E+05,
+        0.999810939111108019E+05,       0.999819561511524662E+05,       0.999789948862129386E+05,       0.999752827398946683E+05,       0.999708888630344300E+05,
+        0.999658466886194801E+05,       0.999601566475907457E+05,       0.999537895884533064E+05,       0.999466907368066168E+05,       0.999387840276392963E+05,
+        0.999299766462147236E+05,       0.999201636218782805E+05,       0.999092323322767916E+05,       0.998970667923400615E+05,       0.998831789013588714E+05,
+        0.998636939941647142E+05,       0.998431119746374316E+05,       0.998214963412640354E+05,       0.997970862666926550E+05,       0.997712444170942908E+05,
+        0.997445906917362154E+05,       0.997173029439411330E+05,       0.996895795051780588E+05,       0.996616375682111830E+05,       0.996337113354519679E+05,
+        0.996060500180081726E+05,       0.995789157595469587E+05,       0.995557562522905791E+05,       0.995337048495515774E+05,       0.995126888312002120E+05,
+        0.994929130817774712E+05,       0.994745951235418033E+05,       0.994579612022724759E+05,       0.994432427594338078E+05,       0.101021034351216382E+06,
+        0.100974523158164724E+06,       0.100926407272977900E+06,       0.100876804093661282E+06,       0.100825841471867636E+06,       0.100773656698396328E+06,
+        0.100720395485641522E+06,       0.100666210969990992E+06,       0.100612099345619077E+06,       0.100557249279083626E+06,       0.100501677971650905E+06,
+        0.100445572670880414E+06,       0.100389253853780203E+06,       0.100332968905338319E+06,       0.100276665148379936E+06,       0.100220537893264976E+06,
+        0.100164799821054621E+06,       0.100109679736971462E+06,       0.100055421257730064E+06,       0.100002281430952105E+06,       0.999505292822571937E+05,
+        0.999004442827473104E+05,       0.998530843548639095E+05,       0.998156761219489854E+05,       0.997805278523404413E+05,       0.997476323427424795E+05,
+        0.997169731242686539E+05,       0.996885239311042969E+05,       0.996622481616842706E+05,       0.996380983225617529E+05,       0.996160154459489713E+05,
+        0.995959284728124476E+05,       0.995777535943772964E+05,       0.995613935458951310E+05,       0.995467368475156691E+05,       0.995336569880241732E+05,
+        0.995208266243795515E+05,       0.995087482639954542E+05,       0.994977965334250039E+05,       0.994878249241337762E+05,       0.994786826211323350E+05,
+        0.994702168427006691E+05,       0.994622751834644587E+05,       0.994547079083998542E+05,       0.994473701327138842E+05,       0.994401238077413873E+05,
+        0.994328394160198222E+05,       0.994254188335577346E+05,       0.994184404922492249E+05,       0.994087127432848210E+05,       0.993987930235803360E+05,
+        0.993894574291334138E+05,       0.993808966627234331E+05,       0.993733080854502186E+05,       0.993668924009867187E+05,       0.993618498078672274E+05,
+        0.993583756460734730E+05,       0.993566555807828554E+05,       0.993568603838800627E+05,       0.993591403923829785E+05,       0.993636197419046657E+05,
+        0.993703904921866488E+05,       0.993811197203903430E+05,       0.993950856599565304E+05,       0.994111457979586703E+05,       0.994291602554974379E+05,
+        0.994489675444759632E+05,       0.994703876196585625E+05,       0.994932253351752443E+05,       0.995172741944998997E+05,       0.995426559018634871E+05,
+        0.995694776827033347E+05,       0.995970389008766942E+05,       0.996251091056232981E+05,       0.996534496905636333E+05,       0.996818187512539298E+05,
+        0.997099760279327893E+05,       0.997374141751707793E+05,       0.997622618739524623E+05,       0.997862435467323085E+05,       0.998092414887019404E+05,
+        0.998311505958143825E+05,       0.998518805596518214E+05,       0.998718102890837035E+05,       0.998910750046514877E+05,       0.999090219912788452E+05,
+        0.999255559670365765E+05,       0.999405919139345788E+05,       0.999540538378546335E+05,       0.999658730563341524E+05,       0.999759860512857849E+05,
+        0.999843319314751134E+05,       0.999908495555851987E+05,       0.999954743712658383E+05,       0.999944404784162907E+05,       0.999915968456238916E+05,
+        0.999872439634975599E+05,       0.999816171531630534E+05,       0.999749362615833961E+05,       0.999674042229870247E+05,       0.999592064518093102E+05,
+        0.999505109123499715E+05,       0.999414687118180882E+05,       0.999323665105546679E+05,       0.999233975283402833E+05,       0.999144981369005836E+05,
+        0.999058003303556034E+05,       0.998974241845954093E+05,       0.998894782591478870E+05,       0.998820595750179200E+05,       0.998752530846157169E+05,
+        0.998691305778080132E+05,       0.998637489957377547E+05,       0.998586746844062873E+05,       0.998541772928227729E+05,       0.998502966627068381E+05,
+        0.998469966131329420E+05,       0.998442320106148400E+05,       0.998419453691209637E+05,       0.998400626589490130E+05,       0.998384883490106731E+05,
+        0.998370997211475333E+05,       0.998357405118142487E+05,       0.998339247931384743E+05,       0.998316580178510631E+05,       0.998293639855545480E+05,
+        0.998269017565975373E+05,       0.998241201967542729E+05,       0.998208528853709577E+05,       0.998098081032783375E+05,       0.997954370825381193E+05,
+        0.997808296869748592E+05,       0.997662255405725009E+05,       0.997518145513712225E+05,       0.997377288090598740E+05,       0.997240360167264153E+05,
+        0.997115902471897134E+05,       0.997002807779587602E+05,       0.996889928911353927E+05,       0.996776906921413611E+05,       0.996663184120892256E+05,
+        0.996548031405013462E+05,       0.996430577981460665E+05,       0.996309842516777717E+05,       0.996172720856796950E+05,       0.995989960463366879E+05,
+        0.995803026148819772E+05,       0.995612677891255880E+05,       0.995419614978694444E+05,       0.995224517021402135E+05,       0.995028080337064894E+05,
+        0.994831049415358284E+05,       0.994634243322594411E+05,       0.994438577049017331E+05,       0.994245077928505052E+05,       0.994054897371244297E+05,
+        0.993869318243143207E+05,       0.993690043020055746E+05,       0.993554308490509575E+05,       0.993412332136938494E+05,       0.993276308539287711E+05,
+        0.993151162456799066E+05,       0.993038276851009432E+05,       0.992939167429839872E+05,       0.992855451787946949E+05,       0.992788820449725754E+05,
+        0.100964847544612581E+06,       0.100921528597807934E+06,       0.100876819617514033E+06,       0.100830819119977881E+06,       0.100783635790840315E+06,
+        0.100735387872604493E+06,       0.100686849362626730E+06,       0.100638850722815405E+06,       0.100589987206303587E+06,       0.100540391690949080E+06,
+        0.100490207838124057E+06,       0.100439589213655403E+06,       0.100388698427470110E+06,       0.100337706295036201E+06,       0.100286791022897989E+06,
+        0.100236137419730803E+06,       0.100185936133379830E+06,       0.100136382913311769E+06,       0.100087677896791603E+06,       0.100040024915916016E+06,
+        0.999936308213850425E+05,       0.999487048175969685E+05,       0.999098959263045108E+05,       0.998760905821691704E+05,       0.998440744381323602E+05,
+        0.998138388707919803E+05,       0.997853639904371375E+05,       0.997586190608742472E+05,       0.997335630315415328E+05,       0.997101451748205582E+05,
+        0.996883058208672010E+05,       0.996679771815481945E+05,       0.996490842541338643E+05,       0.996315457942174835E+05,       0.996152753458579973E+05,
+        0.996001823151213321E+05,       0.995855679555827810E+05,       0.995705558364965109E+05,       0.995563634129148850E+05,       0.995429286082849721E+05,
+        0.995301928975228802E+05,       0.995181034121451230E+05,       0.995066149374921079E+05,       0.994956917495421949E+05,       0.994853092368055950E+05,
+        0.994754552514231473E+05,       0.994661311329740856E+05,       0.994573523487461207E+05,       0.994491486954472930E+05,       0.994415640096655407E+05,
+        0.994332401191460376E+05,       0.994242851325149240E+05,       0.994162875697421550E+05,       0.994093942955236271E+05,       0.994037502528714977E+05,
+        0.993994957235938200E+05,       0.993967633485402912E+05,       0.993956749460767023E+05,       0.993963381773120200E+05,       0.993988431167032832E+05,
+        0.994032587965396087E+05,       0.994096298031491460E+05,       0.994179730111528625E+05,       0.994282745493404218E+05,       0.994404870973938814E+05,
+        0.994568186139204772E+05,       0.994754658271223161E+05,       0.994958964449326450E+05,       0.995177045414582390E+05,       0.995407458140571835E+05,
+        0.995648609237595665E+05,       0.995898777201360062E+05,       0.996156137473152776E+05,       0.996418789751202567E+05,       0.996684786927591776E+05,
+        0.996952164972683240E+05,       0.997218973051197536E+05,       0.997483303132390720E+05,       0.997743318352098577E+05,       0.997997279397391831E+05,
+        0.998243568215117266E+05,       0.998484029817739647E+05,       0.998715185643880104E+05,       0.998929709407826740E+05,       0.999121391071011894E+05,
+        0.999300598538423073E+05,       0.999466118827012979E+05,       0.999616803026846756E+05,       0.999751558213879034E+05,       0.999869336418048333E+05,
+        0.999969120922718139E+05,       0.100004991024896648E+06,       0.100011070025070803E+06,       0.100011361902027944E+06,       0.100009689874259901E+06,
+        0.100006354866167210E+06,       0.100001521961853068E+06,       0.999953569047140481E+05,       0.999880229251482233E+05,       0.999796782529097254E+05,
+        0.999704742484093149E+05,       0.999605540801449097E+05,       0.999500518713602651E+05,       0.999395620634615480E+05,       0.999293797224061564E+05,
+        0.999189780037119199E+05,       0.999084634603603772E+05,       0.998979305732036155E+05,       0.998874607924644370E+05,       0.998771215026191203E+05,
+        0.998669648551638238E+05,       0.998570264274643996E+05,       0.998473236800365266E+05,       0.998378541987464268E+05,       0.998280094515223464E+05,
+        0.998183015118441253E+05,       0.998087584599398106E+05,       0.997993088922536845E+05,       0.997898632369703118E+05,       0.997803110261358233E+05,
+        0.997705176970055909E+05,       0.997603209573400527E+05,       0.997495267616314668E+05,       0.997338504371996823E+05,       0.997144148866953765E+05,
+        0.996946194589021616E+05,       0.996748889962201501E+05,       0.996543973099300492E+05,       0.996333799061114987E+05,       0.996120632551793096E+05,
+        0.995906575155593600E+05,       0.995693496108486434E+05,       0.995482968337894126E+05,       0.995276211300861032E+05,       0.995074041910853848E+05,
+        0.994876834578204434E+05,       0.994684491110481467E+05,       0.994496420937635121E+05,       0.994311531852242333E+05,       0.994128231195840344E+05,
+        0.993950629246981553E+05,       0.993796705843183881E+05,       0.993609699415756186E+05,       0.993418055421917088E+05,       0.993226794637357671E+05,
+        0.993037059687493893E+05,       0.992849845648908376E+05,       0.992666033190360467E+05,       0.992486420429716236E+05,       0.992311752996093419E+05,
+        0.992142751883332967E+05,       0.991980138777397078E+05,       0.991824658634138323E+05,       0.991677099373037345E+05,       0.991538308635238063E+05,
+        0.991409207629147422E+05,       0.991303845164175582E+05,       0.991233478553789610E+05,       0.991173123854586884E+05,       0.991122941300806997E+05,
+        0.991083274217430298E+05,       0.991054636978437338E+05,       0.991037699911700765E+05,       0.991033272031231463E+05,       0.991042282352598704E+05,
+        0.991065760427079076E+05,       0.100899327711180042E+06,       0.100860014589195416E+06,       0.100819531202107522E+06,       0.100777959510744709E+06,
+        0.100735390607726556E+06,       0.100694036465613695E+06,       0.100652089405901919E+06,       0.100609367247066592E+06,       0.100565963600471325E+06,
+        0.100521982301190656E+06,       0.100477536683349797E+06,       0.100432748853070138E+06,       0.100387748961175384E+06,       0.100342674477306704E+06,
+        0.100297669466538631E+06,       0.100252883868987425E+06,       0.100208472782261073E+06,       0.100164595745919316E+06,       0.100121416026401625E+06,
+        0.100079099900142377E+06,       0.100037815931840771E+06,       0.999981416469988617E+05,       0.999662389876496309E+05,       0.999356748708466621E+05,
+        0.999064575822306797E+05,       0.998785877324428584E+05,       0.998520583580002858E+05,       0.998268551135048328E+05,       0.998029565487271466E+05,
+        0.997803344633126544E+05,       0.997589543309666333E+05,       0.997387757839643018E+05,       0.997197531476882141E+05,       0.997018360135869007E+05,
+        0.996849698374662257E+05,       0.996690965483438340E+05,       0.996541551512074802E+05,       0.996382689559327409E+05,       0.996225861026435014E+05,
+        0.996075569737299666E+05,       0.995931690202676109E+05,       0.995794128974490304E+05,       0.995662834351470083E+05,       0.995537804808199580E+05,
+        0.995419095816340414E+05,       0.995306824727639178E+05,       0.995201173394836951E+05,       0.995102388219246932E+05,       0.995010777333177539E+05,
+        0.994926704652096669E+05,       0.994850580565927958E+05,       0.994782849081547320E+05,       0.994712945317966660E+05,       0.994652135801002441E+05,
+        0.994603804881314572E+05,       0.994568932856863394E+05,       0.994548423780885496E+05,       0.994543085284921108E+05,       0.994553608083860745E+05,
+        0.994580545552721160E+05,       0.994624293810699601E+05,       0.994689205148530309E+05,       0.994771599445407046E+05,       0.994871232315969537E+05,
+        0.994987933987223369E+05,       0.995121358180468815E+05,       0.995270974554495333E+05,       0.995436065119199775E+05,       0.995623452046183083E+05,
+        0.995829609157189843E+05,       0.996045871363499173E+05,       0.996270734208106005E+05,       0.996502628846515872E+05,       0.996739938804089179E+05,
+        0.996981017517049913E+05,       0.997224206254554738E+05,       0.997467852001343563E+05,       0.997710324871725461E+05,       0.997951466602976434E+05,
+        0.998195365345201863E+05,       0.998432686447168817E+05,       0.998661797675172566E+05,       0.998881192989034753E+05,       0.999089497794278432E+05,
+        0.999285470134942298E+05,       0.999467997752335650E+05,       0.999636091025751084E+05,       0.999788871899545629E+05,       0.999925558984901872E+05,
+        0.100004544910230834E+06,       0.100014789560105870E+06,       0.100022807416958167E+06,       0.100024265952704969E+06,       0.100023783498597622E+06,
+        0.100021339437537274E+06,       0.100017269778783608E+06,       0.100011871918673860E+06,       0.100005243624383627E+06,       0.999974886843563872E+05,
+        0.999887143337349553E+05,       0.999790290942598513E+05,       0.999685409989449690E+05,       0.999573561671147618E+05,       0.999457665900857537E+05,
+        0.999339297350767738E+05,       0.999216537925987359E+05,       0.999089986755408318E+05,       0.998960156700364460E+05,       0.998827458376240684E+05,
+        0.998692184851955972E+05,       0.998554496711306274E+05,       0.998414407220986322E+05,       0.998266607131311466E+05,       0.998100194463602238E+05,
+        0.997926225952954846E+05,       0.997741943883323111E+05,       0.997546758201429911E+05,       0.997340957313024119E+05,       0.997124527623238246E+05,
+        0.996897658681415196E+05,       0.996660748766462057E+05,       0.996414402768971777E+05,       0.996159421531026164E+05,       0.995896781945527619E+05,
+        0.995627607309631567E+05,       0.995353127665240754E+05,       0.995074630135256157E+05,       0.994793399566985754E+05,       0.994514054125879338E+05,
+        0.994238487412724935E+05,       0.993966902679466439E+05,       0.993700475395201356E+05,       0.993440177799105440E+05,       0.993186743649216805E+05,
+        0.992940638036397431E+05,       0.992702032829608506E+05,       0.992470788181921816E+05,       0.992246440384727030E+05,       0.992011645870204229E+05,
+        0.991746701100545615E+05,       0.991489545634662645E+05,       0.991241218039765226E+05,       0.991002500071589602E+05,       0.990773923979805404E+05,
+        0.990555784783537238E+05,       0.990348157029355934E+05,       0.990159736965085758E+05,       0.989981835313982592E+05,       0.989814199610305950E+05,
+        0.989657585620708269E+05,       0.989512713805230014E+05,       0.989380287548638735E+05,       0.989261010103145527E+05,       0.989155600070171640E+05,
+        0.989065271083586849E+05,       0.989035472935256403E+05,       0.989017382893972535E+05,       0.989010885106625501E+05,       0.989015950018414442E+05,
+        0.989032643180148880E+05,       0.989061129372854630E+05,       0.989101672753579624E+05,       0.989154633681022387E+05,       0.989220462827519368E+05,
+        0.989299693127524224E+05,       0.989392930054068274E+05,       0.100824204136130124E+06,       0.100789629875414903E+06,       0.100754101269738283E+06,
+        0.100718965766187423E+06,       0.100683784943369043E+06,       0.100647901733698469E+06,       0.100611367338035154E+06,       0.100574242617115160E+06,
+        0.100536597536512694E+06,       0.100498510595931759E+06,       0.100460068244709808E+06,       0.100421364285146075E+06,       0.100382499264969942E+06,
+        0.100343579859943900E+06,       0.100304718247249199E+06,       0.100266031469940950E+06,       0.100227640792377366E+06,       0.100189671046138596E+06,
+        0.100152249965554060E+06,       0.100115507511560325E+06,       0.100079575182221481E+06,       0.100047602801154819E+06,       0.100019322376832803E+06,
+        0.999920409995853261E+05,       0.999657674355637573E+05,       0.999405058915761474E+05,       0.999162559646318405E+05,       0.998930126550737332E+05,
+        0.998707664374257292E+05,       0.998495033822863334E+05,       0.998292053217475768E+05,       0.998098500498988724E+05,       0.997914115489896358E+05,
+        0.997738602307620895E+05,       0.997571631813267886E+05,       0.997412843967411318E+05,       0.997261849951640761E+05,       0.997116241750995250E+05,
+        0.996956516613714484E+05,       0.996802443385057850E+05,       0.996654141346137912E+05,       0.996511746410201595E+05,       0.996375414807133056E+05,
+        0.996245325880948803E+05,       0.996121683814974822E+05,       0.996004718105865177E+05,       0.995894682617738144E+05,       0.995791853061816655E+05,
+        0.995696522765213740E+05,       0.995608996615122596E+05,       0.995529583091799286E+05,       0.995458584335334599E+05,       0.995396284227406868E+05,
+        0.995343367855710967E+05,       0.995305561580702051E+05,       0.995281233336275036E+05,       0.995270277929425938E+05,       0.995273063084702299E+05,
+        0.995289897428417025E+05,       0.995321019769720151E+05,       0.995366588694784150E+05,       0.995426672761023801E+05,       0.995501241589093697E+05,
+        0.995590158153962548E+05,       0.995693172571642208E+05,       0.995809917664462992E+05,       0.995939906564428093E+05,       0.996082532580851985E+05,
+        0.996237071514999261E+05,       0.996402686551040679E+05,       0.996578435789826035E+05,       0.996763282420650648E+05,       0.996956299728876329E+05,
+        0.997162410862197139E+05,       0.997372387307632453E+05,       0.997586353656998253E+05,       0.997808433601890720E+05,       0.998030187608370179E+05,
+        0.998249872889569233E+05,       0.998465794208683947E+05,       0.998676313277232548E+05,       0.998879856224390824E+05,       0.999074918951320724E+05,
+        0.999260070231147402E+05,       0.999433952465451439E+05,       0.999595280060564692E+05,       0.999742835440646595E+05,       0.999875462768208236E+05,
+        0.999992059495608264E+05,       0.100009156592205647E+06,       0.100016063172606460E+06,       0.100019024917317467E+06,       0.100020084175617667E+06,
+        0.100019327613303438E+06,       0.100016848817808917E+06,       0.100012745044390162E+06,       0.100007114161981110E+06,       0.100000051820447916E+06,
+        0.999916488518789411E+05,       0.999819889104085451E+05,       0.999711463483044645E+05,       0.999591843210265215E+05,       0.999461531109617499E+05,
+        0.999321525809828890E+05,       0.999172469778668019E+05,       0.999013989306642325E+05,       0.998846455567706289E+05,       0.998670119376398798E+05,
+        0.998485130268999492E+05,       0.998291555936072982E+05,       0.998089401641651202E+05,       0.997878629283593327E+05,       0.997659175757975609E+05,
+        0.997430970289848337E+05,       0.997193950386116485E+05,       0.996948076057053986E+05,       0.996688019987970183E+05,       0.996412728663371527E+05,
+        0.996128531282160839E+05,       0.995835822131826571E+05,       0.995535100083936413E+05,       0.995226963046177698E+05,       0.994912096890770918E+05,
+        0.994591258685886423E+05,       0.994265254172218556E+05,       0.993934909557864739E+05,       0.993601037847762636E+05,       0.993264400074980804E+05,
+        0.992925661955399555E+05,       0.992585346639741329E+05,       0.992243784382298763E+05,       0.991926785386021656E+05,       0.991631423960881948E+05,
+        0.991346701590620942E+05,       0.991043957205902552E+05,       0.990738404866020282E+05,       0.990437385072277393E+05,       0.990142493709584378E+05,
+        0.989855195191612147E+05,       0.989576810877346288E+05,       0.989308511084253696E+05,       0.989051310684979690E+05,       0.988806068206827622E+05,
+        0.988573488291608082E+05,       0.988354127318868268E+05,       0.988148401948802202E+05,       0.987956600302788138E+05,       0.987778895469693816E+05,
+        0.987615361004738952E+05,       0.987465988074585912E+05,       0.987330703896907362E+05,       0.987209391124356771E+05,       0.987108234055703360E+05,
+        0.987097019913824042E+05,       0.987103429529451387E+05,       0.987122111650228762E+05,       0.987153073516145814E+05,       0.987196321217762743E+05,
+        0.987251875827369804E+05,       0.987319785667343094E+05,       0.987400135082831985E+05,       0.987493050090511242E+05,       0.987598701271371101E+05,
+        0.987717304264797713E+05,       0.987849118205066625E+05,       0.987994442421061685E+05,       0.100725315299336173E+06,       0.100698574995327697E+06,
+        0.100671977068823689E+06,       0.100644595052366465E+06,       0.100616468093977863E+06,       0.100587642901921921E+06,       0.100558173361375360E+06,
+        0.100528120104899528E+06,       0.100497550042423565E+06,       0.100466272904751735E+06,       0.100434015096099785E+06,       0.100401562459773442E+06,
+        0.100368989820934105E+06,       0.100336376879503077E+06,       0.100303807689072302E+06,       0.100271370122519947E+06,       0.100239155324566673E+06,
+        0.100207257151323618E+06,       0.100175771596705425E+06,       0.100144796205413048E+06,       0.100114429472040734E+06,       0.100088940515445298E+06,
+        0.100064277849083956E+06,       0.100040376776062651E+06,       0.100017243413296688E+06,       0.999948816446533019E+05,       0.999732929686431889E+05,
+        0.999524763863759727E+05,       0.999324283249947912E+05,       0.999131425911760016E+05,       0.998946103486297798E+05,       0.998768201128693472E+05,
+        0.998597577558295598E+05,       0.998434065122163738E+05,       0.998277469787591108E+05,       0.998127570968272776E+05,       0.997984121081719059E+05,
+        0.997846844728672440E+05,       0.997711641937448148E+05,       0.997562547182444541E+05,       0.997418715469619347E+05,       0.997280378138771339E+05,
+        0.997149197421024874E+05,       0.997024870178837737E+05,       0.996907061322415975E+05,       0.996795848806745926E+05,       0.996691347733205621E+05,
+        0.996593714260480774E+05,       0.996503148183509184E+05,       0.996419894088608416E+05,       0.996344241017298482E+05,       0.996276520598402276E+05,
+        0.996217103637612599E+05,       0.996166395185360743E+05,       0.996124828137155564E+05,       0.996092855454927922E+05,       0.996072490608482622E+05,
+        0.996076113749229989E+05,       0.996091697144805221E+05,       0.996119324075692421E+05,       0.996159015340781625E+05,       0.996210724174448842E+05,
+        0.996274331797853811E+05,       0.996349643746027868E+05,       0.996436387104583700E+05,       0.996534208777727908E+05,       0.996642674892599607E+05,
+        0.996761271423777071E+05,       0.996889406096304010E+05,       0.997026411596077960E+05,       0.997171550083373149E+05,       0.997324018969322351E+05,
+        0.997493713951271493E+05,       0.997669298086039198E+05,       0.997847561118552549E+05,       0.998027246306509041E+05,       0.998207116516734968E+05,
+        0.998385964503245486E+05,       0.998562622533936083E+05,       0.998740649961419404E+05,       0.998916906165886030E+05,       0.999087089343172702E+05,
+        0.999249770553750277E+05,       0.999403560696216737E+05,       0.999547111717594089E+05,       0.999679116588610341E+05,       0.999798308071318752E+05,
+        0.999903456338236865E+05,       0.999993365533926699E+05,       0.100004220125714884E+06,       0.100007207317976179E+06,       0.100008572293640507E+06,
+        0.100008322094038289E+06,       0.100006474067698131E+06,       0.100003053654514384E+06,       0.999980922203631635E+05,       0.999916249686873634E+05,
+        0.999836889524048456E+05,       0.999743212064066029E+05,       0.999635570180646901E+05,       0.999514283507113723E+05,       0.999379624331032392E+05,
+        0.999231805265346338E+05,       0.999068710521996836E+05,       0.998889830637409177E+05,       0.998698844492443604E+05,       0.998496268247692351E+05,
+        0.998282550606056902E+05,       0.998058081407207792E+05,       0.997823201056188700E+05,       0.997578210428315797E+05,       0.997323380908236431E+05,
+        0.997058964236216998E+05,       0.996785201849737350E+05,       0.996502333423933014E+05,       0.996210604331023060E+05,       0.995910271757503942E+05,
+        0.995601609239409008E+05,       0.995275572850741737E+05,       0.994942010526460217E+05,       0.994602086162104097E+05,       0.994256424562004540E+05,
+        0.993905674250224547E+05,       0.993550495610398939E+05,       0.993191545857771562E+05,       0.992829460972773086E+05,       0.992464834802344849E+05,
+        0.992093627746182028E+05,       0.991704192318807618E+05,       0.991313574404489191E+05,       0.990923405318182195E+05,       0.990535358095906413E+05,
+        0.990151121756168286E+05,       0.989772373919561505E+05,       0.989400752255912812E+05,       0.989077617710938066E+05,       0.988763612273478793E+05,
+        0.988459508623079601E+05,       0.988166439660097676E+05,       0.987885464355162840E+05,       0.987617561295779306E+05,       0.987363624383705755E+05,
+        0.987124460655073344E+05,       0.986900790161369223E+05,       0.986693247818405216E+05,       0.986502387102765642E+05,       0.986328685451310157E+05,
+        0.986172551199377485E+05,       0.986034331877511868E+05,       0.985914323674813641E+05,       0.985849022212989948E+05,       0.985815381689221977E+05,
+        0.985799833097597439E+05,       0.985801745721993211E+05,       0.985820463347552868E+05,       0.985855324877461535E+05,       0.985905682465279388E+05,
+        0.985970917144189152E+05,       0.986050451971537113E+05,       0.986143762739106751E+05,       0.986250386326789885E+05,       0.986369926800004905E+05,
+        0.986502059369656636E+05,       0.986646532347960892E+05,       0.986803686823803437E+05,       0.986978893846687570E+05,       0.100614832696455240E+06,
+        0.100593867821148029E+06,       0.100572316446986515E+06,       0.100550197550235505E+06,       0.100527535703133908E+06,       0.100504360904461792E+06,
+        0.100480708372667563E+06,       0.100456618304392017E+06,       0.100432135601374786E+06,       0.100407309568833982E+06,       0.100382193588466369E+06,
+        0.100356844769226343E+06,       0.100331323579001226E+06,       0.100305693460217895E+06,       0.100280020432285120E+06,       0.100254372683605921E+06,
+        0.100228820155686772E+06,       0.100203434121630358E+06,       0.100178286761032883E+06,       0.100153450733022924E+06,       0.100130475669895299E+06,
+        0.100109956889046269E+06,       0.100089889070985242E+06,       0.100070296914338702E+06,       0.100051202164876013E+06,       0.100032623579079911E+06,
+        0.100014576934231576E+06,       0.999970750815462088E+05,       0.999801280379814852E+05,       0.999637431114950741E+05,       0.999479250537698827E+05,
+        0.999326762337752152E+05,       0.999179968250171223E+05,       0.999038849989644077E+05,       0.998903371169458405E+05,       0.998773479128125327E+05,
+        0.998649106588674185E+05,       0.998530173079915839E+05,       0.998416586055586959E+05,       0.998308241656294995E+05,       0.998183931314519723E+05,
+        0.998063026544255990E+05,       0.997946768033270637E+05,       0.997835353574148758E+05,       0.997728988116216497E+05,       0.997627886474906263E+05,
+        0.997532275467060972E+05,       0.997442395412217011E+05,       0.997358500950898597E+05,       0.997280861143391958E+05,       0.997209758826208854E+05,
+        0.997145489218259900E+05,       0.997088357784521941E+05,       0.997038677381365414E+05,       0.996996764724488748E+05,       0.996962936237215035E+05,
+        0.996937503353465436E+05,       0.996920767365576030E+05,       0.996913013921977254E+05,       0.996914507293131610E+05,       0.996938892044791864E+05,
+        0.996979235599974199E+05,       0.997029058021154924E+05,       0.997088141832942201E+05,       0.997156214047231770E+05,       0.997232945456081070E+05,
+        0.997317950535919081E+05,       0.997416867970129533E+05,       0.997530959050235106E+05,       0.997652059203542885E+05,       0.997779192013086576E+05,
+        0.997911354948921798E+05,       0.998047524629107502E+05,       0.998186662279794255E+05,       0.998327719289349043E+05,       0.998469642740837880E+05,
+        0.998611380798811879E+05,       0.998751887820599950E+05,       0.998890129059611209E+05,       0.999025084828911640E+05,       0.999155753997843713E+05,
+        0.999281156702924636E+05,       0.999400336166881025E+05,       0.999512359536410950E+05,       0.999616317670096760E+05,       0.999711323832548660E+05,
+        0.999796511279028782E+05,       0.999849269357346784E+05,       0.999879656837563089E+05,       0.999896251175745128E+05,       0.999900253003605030E+05,
+        0.999893361854775139E+05,       0.999873542140159407E+05,       0.999840556297011499E+05,       0.999794245840091753E+05,       0.999734518744631496E+05,
+        0.999661337157758971E+05,       0.999574705623641785E+05,       0.999474659997932467E+05,       0.999361257217314414E+05,       0.999234566080410732E+05,
+        0.999094659187412326E+05,       0.998941606177814683E+05,       0.998764809352623415E+05,       0.998560560817922524E+05,       0.998343967946635821E+05,
+        0.998115510889874568E+05,       0.997875653304692096E+05,       0.997624843255732849E+05,       0.997363514996802405E+05,       0.997092091386610118E+05,
+        0.996810986700549984E+05,       0.996520609610099054E+05,       0.996221366113048280E+05,       0.995913662211383053E+05,       0.995597906149207993E+05,
+        0.995273916799414146E+05,       0.994941482859833632E+05,       0.994601365478679945E+05,       0.994253058448178053E+05,       0.993891469979643734E+05,
+        0.993522589965478983E+05,       0.993147135957212886E+05,       0.992765913082987827E+05,       0.992379812368316198E+05,       0.991989807125657680E+05,
+        0.991596947441791563E+05,       0.991202352822574612E+05,       0.990807203086648369E+05,       0.990412727632243623E+05,       0.990020193233719183E+05,
+        0.989630890556004597E+05,       0.989246119604841224E+05,       0.988867174357804033E+05,       0.988495326844704396E+05,       0.988131810965392942E+05,
+        0.987777806347563455E+05,       0.987434422556348145E+05,       0.987102683970903163E+05,       0.986800386904530314E+05,       0.986539370199152036E+05,
+        0.986295226205249346E+05,       0.986068636404624995E+05,       0.985860239517589507E+05,       0.985670631337701197E+05,       0.985500365691113984E+05,
+        0.985358556718200416E+05,       0.985278808654735767E+05,       0.985216145256253949E+05,       0.985170549437755544E+05,       0.985141907191163773E+05,
+        0.985130023621957516E+05,       0.985134638334888878E+05,       0.985155439987927239E+05,       0.985192079865073320E+05,       0.985244184348827694E+05,
+        0.985311366201568162E+05,       0.985393234591571963E+05,       0.985489403823850007E+05,       0.985599500758101349E+05,       0.985723170916025701E+05,
+        0.985860083297847013E+05,       0.986009933943283249E+05,       0.986172448285415594E+05,       0.986347382357068564E+05,       0.986534522918489238E+05,
+        0.100501068864754794E+06,       0.100484535396120875E+06,       0.100467601980879481E+06,       0.100450280398188552E+06,       0.100432586236747622E+06,
+        0.100414538813697291E+06,       0.100396161067221547E+06,       0.100377479424244724E+06,       0.100358523644725865E+06,       0.100339326644139262E+06,
+        0.100319924295798162E+06,       0.100300355214719486E+06,       0.100280660524754756E+06,       0.100260883610713514E+06,       0.100241069857193317E+06,
+        0.100221266375801104E+06,       0.100201521722408346E+06,       0.100181885606032156E+06,       0.100162408590875246E+06,       0.100143141793000657E+06,
+        0.100126731204709198E+06,       0.100111095964644017E+06,       0.100095755686584438E+06,       0.100080729264227775E+06,       0.100066034373636823E+06,
+        0.100051687390123538E+06,       0.100037703324969872E+06,       0.100024095780550211E+06,       0.100010876922054129E+06,       0.999980574636844394E+05,
+        0.999856466669404908E+05,       0.999736523483940109E+05,       0.999620808942374570E+05,       0.999509372788386972E+05,       0.999402250845782837E+05,
+        0.999299465203828877E+05,       0.999201024366045604E+05,       0.999106923342315858E+05,       0.999017143668564822E+05,       0.998931653343625367E+05,
+        0.998850406679233711E+05,       0.998765024783978733E+05,       0.998667989571770595E+05,       0.998574263414941233E+05,       0.998484104846885893E+05,
+        0.998397772139483568E+05,       0.998315523922983994E+05,       0.998237619509676297E+05,       0.998164318901620281E+05,       0.998095882469221542E+05,
+        0.998032570294378238E+05,       0.997974641179290484E+05,       0.997922351329589583E+05,       0.997875952728177945E+05,       0.997835691223818721E+05,
+        0.997801804366022552E+05,       0.997774519024890033E+05,       0.997754048841174226E+05,       0.997740591557720181E+05,       0.997734326288465818E+05,
+        0.997735410785172280E+05,       0.997747073495277582E+05,       0.997769755457649590E+05,       0.997800038461367949E+05,       0.997839110555756342E+05,
+        0.997903666077980015E+05,       0.997975557260811329E+05,       0.998054075409305369E+05,       0.998138481350147340E+05,       0.998228007968337915E+05,
+        0.998321862933507946E+05,       0.998419231581400672E+05,       0.998519279910743644E+05,       0.998621157651026879E+05,       0.998724001352771593E+05,
+        0.998826937448957033E+05,       0.998929085234460072E+05,       0.999029559709882014E+05,       0.999127474237070273E+05,       0.999221942956127314E+05,
+        0.999312082917789958E+05,       0.999397015890797338E+05,       0.999475869811254670E+05,       0.999547779849950166E+05,       0.999611889084034483E+05,
+        0.999655508333875332E+05,       0.999687521058104176E+05,       0.999708756209590647E+05,       0.999718892905484245E+05,       0.999717672485314106E+05,
+        0.999704891389138356E+05,       0.999680393573227484E+05,       0.999644062616458687E+05,       0.999595813666838658E+05,       0.999535585371076886E+05,
+        0.999463331921408535E+05,       0.999379015343325445E+05,       0.999282598136142769E+05,       0.999174036365871580E+05,       0.999053273297332198E+05,
+        0.998920233640268561E+05,       0.998774818472951010E+05,       0.998616900896773586E+05,       0.998432094200693391E+05,       0.998215258930813725E+05,
+        0.997986442532860819E+05,       0.997746159978670912E+05,       0.997494898657428857E+05,       0.997233122677003994E+05,       0.996961277569055965E+05,
+        0.996679795269207534E+05,       0.996389099249155406E+05,       0.996089609684258903E+05,       0.995781748547828611E+05,       0.995465944531801651E+05,
+        0.995142637702681968E+05,       0.994812283811399975E+05,       0.994475358185973892E+05,       0.994132359146495874E+05,       0.993783810892878100E+05,
+        0.993430265826917603E+05,       0.993072306281462952E+05,       0.992699361805924273E+05,       0.992322369590151648E+05,       0.991942880496349680E+05,
+        0.991561790488717525E+05,       0.991180035697510175E+05,       0.990798588542613288E+05,       0.990418452912010980E+05,       0.990040658471643255E+05,
+        0.989666254199359537E+05,       0.989296301250896213E+05,       0.988931865279689664E+05,       0.988574008344593603E+05,       0.988223780549877847E+05,
+        0.987882211569994834E+05,       0.987550302217251592E+05,       0.987229016213559953E+05,       0.986919272327695508E+05,       0.986621937036891904E+05,
+        0.986337817866148835E+05,       0.986067657550310105E+05,       0.985855251179539773E+05,       0.985675277620845591E+05,       0.985515831726142933E+05,
+        0.985391751050558669E+05,       0.985310659201639937E+05,       0.985245080408891663E+05,       0.985195088048070465E+05,       0.985160685473306512E+05,
+        0.985141813574870466E+05,       0.985138358391387155E+05,       0.985150158641151211E+05,       0.985177013051926042E+05,       0.985218687383599317E+05,
+        0.985274921053063881E+05,       0.985345433285448526E+05,       0.985429928730166866E+05,       0.985528102493964543E+05,       0.985639644556170097E+05,
+        0.985764243543491611E+05,       0.985901589852987236E+05,       0.986051378122090100E+05,       0.986213309053895937E+05,       0.986387090614195185E+05,
+        0.986574141307979880E+05
+};
+
+#define NLON  81
+#define NLAT 166
+
+int main (int argc, char * argv[])
+{
+    size_t len, slen;
+    grib_handle * h;
+    const char * packingType[2] = {"grid_second_order", "grid_complex_spatial_differencing"};
+    int ipackingType;
+    const double zmiss = 9999999999.;
+    long numberOfValues, numberOfDataPoints;
+    int i, numberOfMissing;
+
+    for (ipackingType = 0; ipackingType < 2; ipackingType++) {
+        GRIB_CHECK (((h = grib_handle_new_from_samples (NULL, "regular_ll_pl_grib2")) == NULL), 0);
+        GRIB_CHECK (grib_set_long (h, "Ni", NLON), 0);
+        GRIB_CHECK (grib_set_long (h, "Nj", NLAT), 0);
+        GRIB_CHECK (grib_set_double (h, "latitudeOfFirstGridPointInDegrees",  80.), 0);
+        GRIB_CHECK (grib_set_double (h, "longitudeOfFirstGridPointInDegrees", -100.), 0);
+        GRIB_CHECK (grib_set_double (h, "latitudeOfLastGridPointInDegrees",   0.) , 0);
+        GRIB_CHECK (grib_set_double (h, "longitudeOfLastGridPointInDegrees",  65.), 0);
+        GRIB_CHECK (grib_set_long (h, "iScansNegatively", 0), 0);
+        GRIB_CHECK (grib_set_long (h, "jScansPositively", 0), 0);
+        GRIB_CHECK (grib_set_long (h, "NV", 0), 0);
+        slen = strlen ("sfc");
+        GRIB_CHECK (grib_set_string (h, "typeOfFirstFixedSurface", "sfc", &slen), 0);
+
+        GRIB_CHECK (grib_set_long (h, "bitsPerValue", 16), 0);
+        slen = strlen (packingType[ipackingType]);
+        GRIB_CHECK (grib_set_string (h, "packingType", packingType[ipackingType], &slen), 0);
+
+        GRIB_CHECK (grib_set_long (h, "bitmapPresent", 1), 0);
+        GRIB_CHECK (grib_set_double (h, "missingValue", zmiss), 0);
+
+        for (i = 0, numberOfMissing = 0; i < NLON * NLAT; i += 100, numberOfMissing++) {
+            values[i] = zmiss;
+        }
+
+        len = NLON * NLAT;
+        GRIB_CHECK (grib_set_double_array (h, "values", values, len), 0);
+
+        GRIB_CHECK (grib_get_long (h, "numberOfValues", &numberOfValues), 0);
+        GRIB_CHECK (grib_get_long (h, "numberOfDataPoints", &numberOfDataPoints), 0);
+
+        if (numberOfValues + numberOfMissing != numberOfDataPoints) {
+            printf (" numberOfValues = %ld, numberOfDataPoints = %ld, numberOfMissing = %d\n", numberOfValues, numberOfDataPoints, numberOfMissing);
+            printf (" numberOfValues appears to be incorrect\n");
+            return 1;
+        }
+
+        GRIB_CHECK (grib_handle_delete (h), 0);
+    }
+
+    printf("ALL OK\n");
+    return 0;
+}
diff --git a/tests/grib_2nd_order_numValues.sh b/tests/grib_2nd_order_numValues.sh
new file mode 100755
index 0000000..52adad3
--- /dev/null
+++ b/tests/grib_2nd_order_numValues.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Copyright 2005-2015 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+exec $test_dir/grib_2nd_order_numValues
diff --git a/tests/grib_check_param_concepts.sh b/tests/grib_check_param_concepts.sh
new file mode 100755
index 0000000..07491aa
--- /dev/null
+++ b/tests/grib_check_param_concepts.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+REDIRECT=/dev/null
+
+# This script will check the following concept files:
+#   name.def paramId.def shortName.def units.def cfVarName.def
+#
+CHECK_DEFS=$ECCODES_DEFINITION_PATH/check_grib_defs.pl
+
+defs_dirs="
+ $ECCODES_DEFINITION_PATH/grib1
+ $ECCODES_DEFINITION_PATH/grib2
+ $ECCODES_DEFINITION_PATH/grib1/localConcepts/ecmf
+ $ECCODES_DEFINITION_PATH/grib2/localConcepts/ecmf
+"
+
+for dir in $defs_dirs; do
+  cd $dir
+  $CHECK_DEFS
+done
diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh
new file mode 100755
index 0000000..7524569
--- /dev/null
+++ b/tests/grib_compare.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+REDIRECT=/dev/null
+
+infile="${data_dir}/regular_latlon_surface.grib1"
+outfile=${infile}.compare.$$
+
+rm -f $outfile
+
+${tools_dir}grib_set -s shortName=2d $infile $outfile
+${tools_dir}grib_compare -b indicatorOfParameter,paramId,shortName $infile $outfile > $REDIRECT
+
+# Test the -r switch
+# ----------------------------------------
+infile=${data_dir}/v.grib2
+for i in 1 2 3; do
+  ${tools_dir}grib_copy -wcount=$i $infile temp_comp.$i
+done
+cat temp_comp.1 temp_comp.2 temp_comp.3 > temp_comp.123
+cat temp_comp.3 temp_comp.2 temp_comp.1 > temp_comp.321
+
+# Compare files in which the messages are not in the same order
+${tools_dir}grib_compare -r temp_comp.123 temp_comp.321
+
+rm -f temp_comp.1 temp_comp.2 temp_comp.3 temp_comp.123 temp_comp.321
+
+# GRIB-797: test last argument being a directory
+# ----------------------------------------
+temp_dir=tempdir.grib_compare
+mkdir -p $temp_dir
+cp $infile $temp_dir
+${tools_dir}grib_compare $infile  $temp_dir
+rm -rf $temp_dir
+
+# ECC-245: blacklist and 2nd order packing
+# ----------------------------------------
+temp1=grib_compare_temp1.grib
+temp2=grib_compare_temp2.grib
+${tools_dir}grib_copy -w count=25 ${data_dir}/lfpw.grib1 $temp1
+${tools_dir}grib_copy -w count=30 ${data_dir}/lfpw.grib1 $temp2
+
+# This should fail but not crash! so check exit code is not 134
+set +e
+${tools_dir}grib_compare -b firstOrderValues $temp1 $temp2 >/dev/null
+status=$?
+set -e
+[ $status -eq 1 ]
+
+# GRIB-915: blacklisting totalLength key
+${tools_dir}grib_copy -w count=1 ${data_dir}/v.grib2 $temp1
+${tools_dir}grib_copy -w count=2 ${data_dir}/v.grib2 $temp2
+# This should fail as we only blacklisted one key
+set +e
+${tools_dir}grib_compare -b totalLength $temp1 $temp2 >/dev/null
+status=$?
+set -e
+[ $status -eq 1 ]
+
+
+rm -f $temp1 $temp2
+rm -f $outfile
diff --git a/tests/grib_double_cmp.c b/tests/grib_double_cmp.c
new file mode 100644
index 0000000..51e1819
--- /dev/null
+++ b/tests/grib_double_cmp.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+/*
+ * Description: compare values retrieved with grib_get_double_array and
+ *               grib_get_double_element
+ *
+ * Author: Cristian D. Codorean
+ *
+ */
+#include "grib_api.h"
+
+void usage(char* prog) {
+    printf("usage: %s filename\n",prog);
+    exit(1);
+}
+
+int main(int argc, char** argv)
+{
+    int err = 0,i = 0;
+    double *values = NULL;
+    size_t values_len= 0;
+    double element_value=0;
+
+    FILE* in = NULL;
+    char* filename = NULL;
+    grib_handle *h = NULL;
+
+    if (argc<2) usage(argv[0]);
+    filename=argv[1];
+
+    in = fopen(filename,"r");
+    if(!in) {
+        printf("ERROR: unable to open file %s\n",filename);
+        return 1;
+    }
+
+    /* create new handle from a message in a file*/
+    h = grib_handle_new_from_file(0,in,&err);
+    if (h == NULL) {
+        printf("Error: unable to create handle from file %s\n",filename);
+        return 1;
+    }
+
+    /* get the size of the values array */
+    GRIB_CHECK(grib_get_size(h,"values",&values_len),0);
+    values = (double*)malloc(values_len*sizeof(double));
+
+    /* get data values*/
+    GRIB_CHECK(grib_get_double_array(h,"values",values,&values_len),0);
+
+    if (values_len < 100) exit(1);
+
+    for (i = 0; i < 100; i++) {
+        /* get a particular data value */
+        GRIB_CHECK(grib_get_double_element(h, "values", i, &element_value),0);
+
+        if (element_value != values[i]) {
+            exit(1);
+        }
+    }
+
+    free(values);
+    grib_handle_delete(h);
+
+    fclose(in);
+    return 0;
+}
diff --git a/tests/grib_double_cmp.sh b/tests/grib_double_cmp.sh
new file mode 100755
index 0000000..b84a424
--- /dev/null
+++ b/tests/grib_double_cmp.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+# --- test on the grid_ieee type of packing
+# ---   check if retrieving data through grib_get_double_array and
+# ---   grib_get_double_element provides the same result
+
+. ./include.sh
+
+infile=${data_dir}/grid_ieee.grib
+
+if [ ! -f ${infile} ]
+then
+  echo no data to test
+  exit 1
+fi
+
+${test_dir}/grib_double_cmp ${infile}
diff --git a/tests/grib_png.sh b/tests/grib_png.sh
new file mode 100755
index 0000000..c209da0
--- /dev/null
+++ b/tests/grib_png.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+REDIRECT=/dev/null
+label="grib_png"
+temp=${label}".grib.tmp"
+temp1=${label}".1.tmp"
+temp2=${label}".2.tmp"
+
+files="
+ multi.grib2
+ reduced_gaussian_model_level.grib2
+ reduced_gaussian_sub_area.grib2
+ v.grib2
+ regular_latlon_surface_constant.grib2
+"
+
+# TODO: For the following the PNG packing fails with an assert!
+#       grib_accessor_class_data_png_packing.c: Assert(p->offset + length <= p->length)
+#  data/sample.grib2
+#  data/missing.grib2
+#  data/tigge_af_ecmwf.grib2
+
+for file in $files; do
+  infile=${data_dir}/$file
+  ${tools_dir}grib_set -r -s packingType=grid_png $infile $temp >/dev/null
+
+  ${tools_dir}grib_get '-F%.2f' -p min,max,avg $infile > $temp1
+  ${tools_dir}grib_get '-F%.2f' -p min,max,avg $temp   > $temp2
+  diff $temp1 $temp2
+
+  rm -f $temp $temp1 $temp2
+done
diff --git a/tests/gts_compare.sh b/tests/gts_compare.sh
new file mode 100755
index 0000000..5e7ca7e
--- /dev/null
+++ b/tests/gts_compare.sh
@@ -0,0 +1,63 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+#set -x
+
+#Enter data dir
+cd ${data_dir}/gts
+
+#Define a common label for all the tmp files
+label="gts_compare_test"
+
+#Create log file
+fLog=${label}".log"
+rm -f $fLog
+touch $fLog
+
+#Define tmp GTS file
+fGtsTmp=${label}".gts.tmp"
+fRules=${label}".filt"
+fBufrInput1=${label}".bufr.input1"
+fBufrInput2=${label}".bufr.input2"
+
+#----------------------------------------------------
+# Test: comparing same files
+#----------------------------------------------------
+gts_file="EGRR20150317121020_00493212.DAT"
+echo "Test: comparing the same files" >> $fLog
+echo "file: $gts_file" >> $fLog
+${tools_dir}/gts_compare $gts_file $gts_file
+
+#----------------------------------------------------
+# Test: comparing two different files
+#----------------------------------------------------
+cat > $fRules<<EOF
+ if (count == 1) { set GG="01"; }
+ write;
+EOF
+${tools_dir}gts_filter -o $fGtsTmp $fRules $gts_file
+set +e
+${tools_dir}/gts_compare $gts_file $fGtsTmp
+status=$?
+set -e
+if [ $status -eq 0 ]; then
+   echo "gts_compare should have failed if files are different" >&2
+   exit 1
+fi
+
+#----------------------------------------------------
+# Test: comparing with and witout the -b switch
+#----------------------------------------------------
+${tools_dir}/gts_compare -b GG $gts_file $fGtsTmp >> $fLog
+
+#Clean up
+rm -f $fLog $fGtsTmp $fRules
diff --git a/tests/gts_get.sh b/tests/gts_get.sh
new file mode 100755
index 0000000..810fc57
--- /dev/null
+++ b/tests/gts_get.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+#Enter data dir
+cd ${data_dir}/gts
+
+#Define a common label for all the tmp files
+label="gts_get_test"
+
+#Create log file
+fLog=${label}".log"
+rm -f $fLog
+touch $fLog
+
+#Define tmp file
+fTmp=${label}".tmp.txt"
+rm -f $fTmp
+
+#----------------------------------------------
+# Test "-p" switch
+#----------------------------------------------
+gts_file=EGRR20150317121020_00493212.DAT
+${tools_dir}/gts_get -p TT,AA,II,CCCC,YY,GG,gg,BBB $gts_file >/dev/null
+
+rm -f $fLog $res_ls 
+
diff --git a/tests/local_MeteoFrance.c b/tests/local_MeteoFrance.c
new file mode 100644
index 0000000..0d713bf
--- /dev/null
+++ b/tests/local_MeteoFrance.c
@@ -0,0 +1,909 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+#include "grib_api.h"
+
+/*
+ * Test FA conversion to grib_api
+ * philippe.marguinaud at meteo.fr 02/2016
+ */
+
+static double values[] = {
+        276.857846883478, 276.794176778727, 277.181087123710, 277.271328891367, 277.738150007595,
+        277.811501271569, 277.782801498740, 277.720243049346, 277.697362352800, 277.645937156907,
+        277.434690429892, 277.479415166828, 277.480779740851, 277.470370683483, 277.466233617218,
+        277.519636477424, 277.546507075768, 277.533196530853, 277.638535538066, 277.660223799155,
+        277.516239354148, 277.435042994882, 277.233848743540, 277.204873528392, 277.217411121384,
+        277.145056043542, 277.359707505178, 277.563426568591, 277.359606573371, 277.302689400583,
+        277.135925984483, 277.013670202527, 277.249004656066, 277.362196243717, 277.472882266866,
+        277.551374864505, 277.332048151829, 277.879973060166, 277.925942918285, 278.260846010953,
+        278.144732099878, 278.206939585072, 277.936934540523, 278.025569678971, 278.307756924958,
+        278.369318574429, 278.609267078466, 278.634490902502, 278.686706704875, 278.328553888493,
+        278.418908930386, 279.060194431430, 279.114168787979, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 276.922836958812,
+        276.932069336471, 277.225397205068, 277.545476457484, 277.807111956190, 277.768185575062,
+        277.713814690105, 277.662213334460, 277.653334089351, 277.591821807616, 277.519290878870,
+        277.499671640950, 277.471580060430, 277.398162354734, 277.371544952255, 277.453879058484,
+        277.474032112632, 277.458747675572, 277.588871038908, 277.540124772655, 277.464264615292,
+        277.039835665510, 277.050815441941, 277.165791541588, 277.284327024201, 277.353876090779,
+        277.399785414714, 277.512330802008, 277.438449711794, 277.419894070553, 277.165764618769,
+        277.034846715507, 277.230872118099, 277.277310155004, 277.272952146249, 277.486209474088,
+        277.453656185210, 277.613143953527, 278.070672412350, 278.079989482462, 278.338031969208,
+        278.163685044856, 278.214343856183, 278.255744502346, 277.941149161137, 278.165921759503,
+        278.022894706983, 278.499780589025, 278.158397461806, 278.611643581705, 278.438079674786,
+        278.816122996613, 278.628190436440, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.048057829677, 277.280372081890,
+        277.423859756998, 277.465672699176, 277.728939006340, 277.726575834584, 277.688480429396,
+        277.635385647721, 277.626062350091, 277.604239400215, 277.556926439833, 277.519394378669,
+        277.425044031161, 277.318865067295, 277.309205651263, 277.348943116883, 277.361861210203,
+        277.430978988228, 277.477408565654, 277.638923535542, 277.418799606607, 277.017513285449,
+        276.976808425920, 277.159242736589, 277.315106840602, 277.327868258207, 277.390541905514,
+        277.608373786211, 277.473011211489, 277.578037079299, 277.353975261579, 277.253195520645,
+        277.219244477693, 277.303161046293, 277.197720889628, 277.568280002996, 277.565774183730,
+        278.056333010069, 278.360857981015, 278.182020399473, 278.393376099219, 278.363774312832,
+        278.203283980677, 278.146185013281, 278.348861342242, 278.330399393385, 278.059284960522,
+        277.920499351734, 278.030061320993, 278.226766351540, 278.217750387710, 278.516389162421,
+        278.535938385310, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.255920436446, 277.480949345724, 277.444597425498,
+        277.647882845088, 277.496111688818, 277.670322939349, 277.765213822002, 277.666760657851,
+        277.656928637994, 277.678906056191, 277.667906868059, 277.539641562735, 277.369487702737,
+        277.285648882293, 277.326341650870, 277.351600146853, 277.359573895370, 277.493766228910,
+        277.649003177440, 277.460872384943, 277.243514998577, 277.056578101319, 277.226617780177,
+        277.271740370610, 277.294132332584, 277.308093611741, 277.378433184955, 277.570114302521,
+        277.548859645865, 277.723889890260, 277.429263433352, 277.272737053512, 277.398599847739,
+        277.309448997716, 277.328344724582, 277.207058029377, 277.696248070705, 277.835043755662,
+        278.062452681475, 277.850550227440, 278.265559859820, 278.272872090840, 278.465229599008,
+        278.217031341802, 278.386132964535, 278.224365564792, 278.232702192636, 278.099733855522,
+        278.082038386312, 278.064057694079, 278.385342869231, 278.700953905968, 278.673157999290,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.459327717938, 277.559547836427, 277.422638507574, 277.572825627337,
+        277.571463907280, 277.548694860479, 277.544037804342, 277.524653326012, 277.693130140178,
+        277.706143234839, 277.497931516767, 277.349914202908, 277.161676307980, 277.258114023397,
+        277.410663587516, 277.481076538026, 277.519833710823, 277.631696408897, 277.418308903785,
+        277.304804629716, 277.259147844963, 277.382350427133, 277.299040041596, 277.256710875078,
+        277.280373232168, 277.342518042564, 277.164290846344, 277.428166532894, 277.401545619979,
+        277.739369780501, 277.395945166703, 277.460368035024, 277.476322888924, 277.493513518766,
+        277.351824398612, 277.358401183558, 277.509306514214, 278.029530363332, 278.214265489018,
+        278.152451178774, 278.452249056059, 278.282135844771, 278.031146456185, 278.126155437803,
+        278.340924990343, 278.274408568623, 278.095792700955, 278.045155910991, 278.044971189736,
+        278.227690671411, 278.277414153890, 278.322932576059, 278.574745416009, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        277.352885697217, 277.465676965878, 277.313718088585, 277.571636446583, 277.752813057885,
+        277.876072319293, 277.600399390414, 277.629804333290, 277.509786900336, 277.350032286595,
+        277.710697230771, 277.302689293788, 276.964102591939, 277.129868245471, 277.506377821286,
+        277.620243311629, 277.670677617944, 277.590396381881, 277.259332104000, 277.282466682171,
+        277.510494889930, 277.420372093899, 277.372440940559, 277.334025248344, 277.133405320679,
+        277.432373537602, 277.458193421654, 277.573994485106, 277.560836748035, 277.504546294795,
+        277.722963359918, 277.429148743501, 277.415671650080, 277.296250262619, 277.426094729653,
+        277.013478567167, 277.173619712680, 277.722720050144, 278.152541665310, 278.471048817117,
+        278.595955610324, 278.466217631891, 278.437646585921, 278.321089675788, 278.198112904595,
+        277.952153564447, 278.065664545600, 278.357066253341, 277.965448681613, 278.124513612433,
+        278.162667811909, 278.277405316586, 278.574537792479, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.390479450263,
+        277.345673673084, 277.364302907561, 277.605928275352, 277.789929872344, 277.903984493908,
+        277.966933216759, 277.912882971090, 277.703988459187, 277.351015681331, 277.674063100141,
+        277.408395530420, 277.007259003699, 276.877336007904, 277.057623772846, 277.601455267293,
+        277.323874590069, 277.238673158792, 277.337325747808, 277.439493917521, 277.541788857115,
+        277.749810750892, 277.278504087019, 277.414256185858, 277.429899941764, 277.493551649852,
+        277.511929075685, 277.190651115649, 277.443504438646, 277.605668250438, 277.771466436681,
+        277.767262688689, 277.716100034677, 277.618374865972, 277.415460290735, 277.086306373890,
+        277.176226842383, 277.650329975958, 277.765271071796, 278.463221024006, 278.702998001410,
+        278.624355987396, 278.467009674144, 278.568028046137, 278.284237092204, 278.456297664446,
+        278.609188468591, 278.571107283134, 278.248413926530, 278.155161517380, 278.404700226527,
+        278.246987177160, 278.091060834030, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.419054703888, 277.313454081577,
+        277.427414463702, 277.682584699189, 277.791193561005, 277.837885785253, 277.920062626646,
+        277.919899324178, 277.689677224346, 277.410500912168, 277.630756408261, 277.629189004816,
+        277.397411408199, 277.319060037245, 277.402102256687, 277.322768000649, 277.822242558531,
+        277.887351499372, 277.454007146918, 277.676721339532, 277.602004218075, 277.714201570065,
+        277.566677175978, 277.587799289763, 277.530615330753, 277.556498697055, 277.452480002766,
+        277.522252203614, 277.645085515486, 277.845531596217, 277.946658451859, 277.602481754126,
+        277.727335587639, 277.560791900289, 277.284230600351, 277.484662737021, 277.763836962967,
+        277.845000815162, 278.010847594804, 278.693344887027, 278.809251065654, 278.723035732378,
+        278.424896815390, 278.623465372965, 278.347354282196, 278.788885219380, 278.765666653428,
+        278.053095427463, 278.334108537083, 278.163143059112, 278.791210402345, 278.564612083899,
+        278.156097707067, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.260418446226, 277.335071352700, 277.491938938790,
+        277.691206395263, 277.704209378278, 277.669286596309, 277.754719412166, 277.870079071509,
+        277.502780644528, 277.754473095834, 277.727974436459, 277.557807112427, 277.336457025286,
+        277.383919705566, 277.656951776528, 277.778531969694, 277.546679431981, 277.433886594239,
+        277.849054763829, 277.827905512882, 277.852324775739, 277.715592971272, 277.705949179344,
+        277.784233780020, 277.513796321220, 277.651505656888, 277.679417351708, 277.712133821933,
+        277.640023428435, 277.845573550891, 277.939074922095, 277.983471194163, 277.686692172136,
+        277.654194453924, 277.864032570137, 277.868319164885, 277.949388853803, 278.090141829888,
+        278.064378565379, 278.473111038064, 278.567543171754, 278.829326294043, 278.294846275015,
+        278.860106433048, 278.796593070403, 278.824386010090, 278.760223015153, 278.048034602279,
+        278.456786976534, 278.270707527732, 278.883481216381, 278.331828953117, 278.594265837323,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.265976322594, 277.170431045594, 277.485489657589, 277.518150163777,
+        277.594346099824, 277.525106574839, 277.660446242218, 277.653585064744, 277.344627321906,
+        277.549004645704, 277.850802344347, 277.583257392330, 277.353933834212, 277.483162324227,
+        277.802093742320, 277.620873269675, 277.778845766219, 277.705264213562, 277.541346709049,
+        277.429472445857, 277.832567758240, 277.874496054447, 277.713531133238, 277.960569830321,
+        277.669206881492, 277.755260958946, 277.586916719101, 277.841135564379, 277.718811273917,
+        277.786742393662, 277.829134182740, 277.760954990401, 277.727290357312, 277.802718821044,
+        277.926844650633, 277.940517920966, 277.860498676370, 277.948632515039, 278.482136788291,
+        278.576025918865, 278.759903750249, 278.682290037298, 278.803929269590, 278.813600952805,
+        278.879253548731, 278.646151177629, 278.776315233178, 278.693319468861, 278.379375494188,
+        278.648541321932, 278.852157864598, 278.997643614525, 279.027698942229, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        277.366680878019, 277.381150787692, 277.486313780854, 277.312232782158, 277.401101882668,
+        277.567697032357, 277.761418956830, 277.631564641376, 277.355216207498, 277.579622423646,
+        277.946803922538, 277.745864795866, 277.554670208171, 277.653554412702, 277.886277698790,
+        277.865648942958, 277.749235588755, 277.653323813329, 277.549350491474, 277.771809470937,
+        277.894339690909, 277.969462462647, 278.118951046477, 278.108173032796, 277.923612184096,
+        277.725656808996, 277.917004359488, 278.013510348155, 277.903413295852, 277.848269398192,
+        277.837731396906, 277.733960635088, 277.766101554254, 277.546687146201, 277.856867293302,
+        277.905478550194, 277.736223835135, 278.472986192106, 278.717220540209, 278.760841954155,
+        278.638659440517, 278.681901711759, 278.363012975511, 278.807884722018, 278.838462052377,
+        278.928798765744, 278.952453872397, 278.865733112592, 278.729566964511, 278.884998970494,
+        278.942907006798, 278.960762454434, 278.688569887665, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.591550421937,
+        277.499030877279, 277.305275168613, 277.541796080983, 277.195139366615, 277.331665964937,
+        277.445626505916, 277.215335680856, 277.530907774801, 277.843341282378, 277.963214149135,
+        277.927219319293, 277.797424178773, 277.813442210719, 277.933664495794, 277.858047474598,
+        277.696277323311, 277.361473125741, 277.479932829295, 277.389415841575, 277.553020377427,
+        277.924940171380, 278.159459379598, 278.037019105043, 277.914055069608, 277.647200588818,
+        277.916937939818, 277.909534469069, 277.749633166238, 277.904591816623, 277.826866398276,
+        277.903480594745, 277.699082807175, 277.688363481753, 277.605172407277, 277.842865865160,
+        278.021216292518, 278.414517122505, 278.681556989763, 278.680320091635, 278.574125022233,
+        278.370197434153, 278.734504756703, 278.493143759543, 278.779235286269, 278.935546444982,
+        278.663643683160, 278.899996705338, 278.900791563301, 278.879832866026, 278.858705900529,
+        278.815825789004, 278.824798215775, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.567216721718, 277.522475814565,
+        277.303456918119, 277.208997427907, 277.424224609638, 277.567326891009, 277.516826173608,
+        277.498907180864, 277.469773038402, 277.832555441150, 277.982833034908, 278.034185232461,
+        277.939076079863, 277.902634532238, 277.970739026974, 277.895772802147, 277.735591951345,
+        277.571305898374, 277.401061840836, 277.802603400487, 277.964968147081, 278.120946309288,
+        278.120357306337, 278.027951015641, 277.674224913903, 277.745718315661, 277.676284056601,
+        277.869144896292, 277.970562609159, 277.897871250900, 277.988896836592, 277.828464108029,
+        277.787944526233, 277.592034339979, 277.887975166605, 277.726333366592, 278.031409362000,
+        278.341449368467, 278.429430372404, 278.651974989787, 278.066148305173, 278.615426251337,
+        278.658109595447, 278.764842621618, 278.797171571925, 278.930322025553, 278.589836306622,
+        278.878563250804, 278.928365819420, 278.890061138998, 278.711334675770, 278.384119162997,
+        278.646351915830, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.663311094642, 277.507469698425, 277.389870268662,
+        277.406179041586, 277.420737084474, 277.458518864884, 277.735139471721, 277.538528827908,
+        277.851206036120, 277.883910964943, 277.957774069964, 277.977068942386, 277.944430734847,
+        277.548495261116, 277.973300201287, 277.918203113366, 277.766347699266, 277.602195991588,
+        277.779284913253, 277.876179934937, 277.970720881483, 278.083009243663, 278.104572434708,
+        277.809070170494, 277.861807626314, 277.891365545407, 277.598480819644, 277.808955771559,
+        277.877037325444, 277.848094780278, 277.931719704904, 277.914973085381, 277.584619210738,
+        277.926657140828, 278.195616408992, 278.085463190691, 277.980335449674, 278.380371866981,
+        278.427298049019, 278.662228114450, 278.596051250816, 278.616744598565, 278.803046455795,
+        278.791647475311, 278.497809355494, 278.866809060531, 278.869411961323, 278.852587248998,
+        278.873678034993, 278.840736102112, 278.718548564065, 278.079520049554, 278.242255144442,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.663037557399, 277.570818671989, 277.407747457760, 277.335813345664,
+        277.408696086859, 277.372137478768, 277.687262360450, 277.795853080682, 277.908241927909,
+        277.869637561962, 277.892224175058, 277.606701811400, 277.922429208801, 277.536273731865,
+        277.514854228159, 277.491556490133, 277.238066098239, 277.372640648916, 277.841348851264,
+        277.929444260057, 277.976213790096, 278.044032057611, 277.835719155503, 277.767503822122,
+        277.843943315539, 277.920171435982, 277.647907981291, 277.916193738411, 277.839013360636,
+        277.803033017271, 277.864319377224, 277.746027317625, 277.651770176824, 278.063583343182,
+        278.140685366536, 278.122090447834, 278.051809880199, 278.142408676546, 278.306266717218,
+        278.732451854741, 278.748488287575, 278.749619678915, 278.800360568621, 278.706276462243,
+        278.492046737934, 278.862935429038, 278.836729260372, 278.789661732480, 278.792523085067,
+        278.785266852082, 278.004813712433, 278.206206534037, 278.268595922962, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        277.655861325454, 277.470105519071, 277.399821904234, 277.079715748819, 277.206531740859,
+        277.468381791645, 277.363994499400, 277.823385911566, 277.933105323249, 277.866664229846,
+        277.852775583871, 277.877579704086, 277.963875663629, 277.928717010393, 277.828398792983,
+        277.296954832861, 277.401013285608, 277.627465823518, 277.658221668447, 277.774377222669,
+        277.868027943365, 278.023351410815, 277.746712993709, 278.009216578254, 277.993159001656,
+        277.680853664988, 277.661928822189, 277.876061141195, 277.861750611024, 277.598049579725,
+        277.828212743813, 277.655101339813, 277.951762031896, 277.838019817885, 278.179159164042,
+        278.237226454496, 278.178567686687, 278.271357845148, 278.743948910507, 278.860705502890,
+        278.683448271915, 278.784519721920, 278.823631988977, 278.720806055127, 278.798185740840,
+        278.751147075398, 278.657468304086, 278.445253830843, 278.647530368995, 278.649158962300,
+        278.320344550426, 278.521904549617, 278.418647841440, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.402768933310,
+        277.337648751023, 277.288997139047, 277.307430980466, 277.273543109168, 277.307022035080,
+        277.641453325741, 277.844770093515, 277.953627149863, 277.942556409526, 278.215884948157,
+        277.975149183501, 277.975145850398, 277.900981141501, 277.505402827533, 277.362760181571,
+        277.548236940679, 277.664353875572, 277.502568484867, 277.584445002441, 277.713270317726,
+        277.965355998582, 277.690792988212, 278.006179713121, 278.001384579859, 277.828691144649,
+        277.561216736042, 277.889988864492, 277.754326137754, 277.904050492162, 277.709121972134,
+        277.690236890821, 278.007302124024, 278.153784599132, 278.279221305941, 278.375074001404,
+        278.132932590898, 278.527166347114, 278.731939115244, 278.786940471844, 278.668914201410,
+        278.548949997938, 278.592784358004, 278.703220908555, 278.607776530910, 278.504228677905,
+        278.163645789480, 278.248484564569, 278.501193898172, 278.642560007634, 278.370053886907,
+        278.408249992376, 278.403262082509, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.207648756580, 277.331137219044,
+        277.479780517975, 277.377551184413, 277.272600399963, 277.500350726646, 277.705863349177,
+        277.864606993211, 277.966389026012, 278.042544067771, 278.322542195089, 278.031457007641,
+        277.941373758310, 277.636410155692, 277.858031016031, 277.252349029484, 277.532160327080,
+        277.374767480318, 277.358447349268, 277.596000095572, 277.677202591650, 277.510417183120,
+        277.771541403309, 277.999812504068, 277.710912956346, 277.651416447672, 277.782845548063,
+        277.920184623648, 278.100817677521, 277.830890386789, 277.549163570987, 277.924816153170,
+        277.939889612067, 278.226842544695, 278.334446154499, 278.384165815707, 278.595962695245,
+        278.279446869139, 278.639495704751, 278.773812076980, 278.436948614430, 278.920203762416,
+        278.841422131634, 278.427836855974, 278.741570912682, 278.508545454593, 278.339874209391,
+        278.557063084230, 278.416922724100, 278.706534660227, 278.334083779964, 278.643830203774,
+        278.639844363161, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.374416670460, 277.500945802563, 277.426407890967,
+        277.396874709479, 277.318086237064, 277.616856624914, 277.899994797892, 277.698238913389,
+        277.977172419143, 278.341279558064, 278.388060688379, 278.293360918814, 277.904418999468,
+        277.876108809024, 277.943923864864, 277.721133375911, 277.442202818399, 277.253739466136,
+        277.509607250232, 277.667492305596, 277.591852155885, 277.835292482825, 277.968936425109,
+        277.955535101385, 277.936720370208, 277.583707892174, 277.868800957519, 277.945079514213,
+        278.033236526786, 277.903343895031, 278.056619912872, 278.157071041598, 278.283239136885,
+        278.176795659042, 278.214399736990, 278.377534497257, 278.505800329270, 278.397309694119,
+        278.669295404261, 278.768294086585, 278.677030612244, 278.800406330589, 278.667560270694,
+        278.786628105936, 278.570032149640, 278.492115471478, 278.447513823625, 278.631423391505,
+        278.397821811388, 278.495161908060, 278.272485916042, 278.556447973070, 278.677966110168,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.317281721922, 277.505968584604, 277.114499942864, 277.204273695860,
+        277.333957324466, 277.623957317731, 277.644603479615, 278.000151120404, 277.641642354499,
+        278.324675421874, 278.417063688056, 278.331839246209, 277.968470256881, 277.964794190107,
+        278.037060222090, 277.649723985672, 277.168203186638, 277.143187050201, 277.273553266251,
+        277.552393261269, 277.634517104997, 277.802271465379, 277.881739212292, 277.940910603072,
+        277.879001692426, 277.745720318329, 277.913410218013, 278.101729803357, 277.802314274772,
+        277.915739600581, 278.217977656900, 278.416638900017, 278.379485432682, 278.328422581059,
+        278.343399135787, 278.412171676156, 278.436343517073, 278.543604914389, 278.063377717316,
+        278.540875146925, 278.533646068312, 278.735677942685, 278.780712168233, 278.761366160987,
+        278.038154721897, 277.866532120266, 278.165321893048, 278.680388296020, 278.573200036194,
+        278.586831345728, 278.488241868816, 278.717947283378, 278.836911122056, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        277.480116247201, 277.368756132519, 277.384832941860, 277.308509322704, 277.345442414908,
+        277.590676884641, 277.990539450091, 278.008983298761, 277.523442305010, 277.718274275941,
+        277.715931444292, 277.879291396559, 277.831199273422, 277.864571039565, 277.936717108059,
+        277.383879543378, 277.479777256307, 277.499848020363, 277.547859827789, 277.305533315021,
+        277.482950172282, 277.774397519738, 277.898868170053, 277.817079364159, 277.711025079660,
+        277.980058933637, 278.099658611097, 278.100938650431, 278.142922246411, 277.996704723186,
+        278.305020752925, 278.407688919361, 278.163649151564, 278.023096003471, 278.332110722164,
+        278.268480918882, 278.421591670262, 278.546119434891, 278.568382938671, 278.587036101537,
+        278.647194694244, 278.632463274801, 278.809178187614, 278.560416104309, 278.581259006153,
+        278.321975280033, 278.397446094076, 278.464681382615, 278.596423306474, 278.667946458021,
+        278.738020433360, 278.814420875995, 279.011631604617, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.428218736626,
+        277.508626172290, 277.415642785172, 277.326956949725, 277.422044581352, 277.628551397821,
+        278.032568055647, 277.613158572540, 277.713901836099, 277.885738420719, 277.917749048996,
+        278.013884830796, 277.837463066963, 278.076080916673, 277.808832386222, 277.917564486129,
+        277.577955670404, 277.241692902309, 277.577689403392, 277.226372942221, 277.416783611213,
+        277.772320420235, 277.599211176025, 277.836487250781, 277.809253831983, 277.951052110206,
+        278.127684219100, 277.805451324327, 278.205782665344, 277.865170697282, 278.375832904428,
+        278.485020997838, 278.294257990030, 277.778871781181, 278.041861178526, 278.230259905805,
+        278.579538089333, 278.512225093511, 278.620858449128, 278.484717004610, 278.559119647309,
+        278.617542855681, 278.820763331162, 278.736385000030, 278.489854683578, 278.188909713201,
+        278.004895490409, 278.007836877641, 278.638253545765, 278.730478954238, 278.787710783790,
+        278.859125519494, 279.227392202470, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.393891145112, 277.465694686045,
+        277.467507921517, 277.411878635866, 277.504059151580, 277.630651160882, 277.879970074861,
+        277.995167439470, 277.902552985162, 277.839877260391, 277.886479575329, 277.964201298207,
+        277.748472501319, 278.029116825528, 278.009583787838, 277.934526840383, 277.918798670404,
+        277.415532843179, 277.226805056122, 277.387098345780, 277.370489382575, 277.592402088486,
+        277.700296833394, 277.892605230371, 277.891485508185, 278.129626663091, 278.237884596150,
+        278.280404041963, 278.283057722739, 278.176984809500, 278.428645957507, 278.109976506484,
+        278.299865428307, 277.995343116520, 277.977547389843, 278.172188036825, 278.514038655551,
+        278.675018218984, 278.625249773115, 278.608351762487, 278.536197132141, 278.726854763747,
+        278.805234471385, 278.674105241850, 278.663153403020, 278.298350908914, 278.124861199903,
+        278.252964651486, 278.482059693182, 278.696680548966, 278.654309837275, 278.837647755382,
+        278.841089485443, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.328655950263, 277.427619472960, 277.487446231366,
+        277.482177271494, 277.494902394691, 277.591252248805, 277.971747475921, 278.009447854320,
+        277.958400013211, 277.920394743774, 277.910344201103, 277.904280958818, 277.937158186883,
+        278.076707899491, 278.062378531395, 277.668974757625, 277.800233651596, 277.541009600309,
+        277.635857852503, 277.317816179233, 277.324195107430, 277.304573477618, 277.583966858675,
+        277.801468375244, 277.858184963214, 278.015052891651, 278.279565568836, 278.150440976593,
+        278.333103904681, 278.001182976533, 278.378488809734, 278.398697539971, 278.106032442229,
+        277.965961371387, 278.143415892015, 278.377058446346, 278.574510298617, 278.436449113920,
+        278.556672883167, 278.474960861679, 277.671139137360, 278.608670196079, 278.823152806552,
+        278.860633331916, 278.712151986816, 278.295366943143, 277.973512496151, 278.147084138199,
+        278.272905044223, 278.608690016513, 278.742172545861, 278.836415342435, 278.950088390739,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.310255947307, 277.438715269565, 277.535027802511, 277.514844555789,
+        277.462658101701, 277.525339149085, 277.905885035111, 278.029200074722, 278.012440418427,
+        277.996696426728, 277.957260620693, 277.882273913448, 277.923722117905, 278.057432597146,
+        278.044128097293, 277.761271445925, 277.825323905342, 277.691879001328, 277.446628829196,
+        277.285529192993, 277.207992853587, 277.564191085190, 277.712353241969, 277.873266532172,
+        278.065423477158, 278.272705886866, 278.158741722804, 278.295227598450, 278.196699266996,
+        278.353184502646, 278.349997851807, 278.141054038599, 277.886475692701, 277.859485979835,
+        277.988073922406, 278.056957014442, 278.165448109257, 278.437202004743, 278.532793916627,
+        278.729865755553, 278.336824160806, 278.305882985596, 278.713096825648, 278.851216364801,
+        278.766735587507, 278.187401602110, 277.936089073750, 278.098752788839, 278.239953058972,
+        278.622711192950, 278.843801280644, 278.884179584854, 278.970925282742, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        277.333993153785, 277.421151644708, 277.494771266272, 277.504859778772, 277.471450172707,
+        277.495380050697, 277.897156708496, 278.087047727013, 278.045437799738, 278.056224065926,
+        278.016178427298, 277.909517544432, 277.875464078132, 277.670207024597, 277.846114070057,
+        277.728674807606, 277.481683080213, 277.678434290214, 277.452220611572, 277.118933743421,
+        277.289809580767, 277.553585984918, 277.846040916297, 277.958533555517, 277.851453386475,
+        277.929222688602, 278.241588928175, 278.028359727517, 278.357330703968, 278.540247369890,
+        278.402603488606, 278.262877702620, 278.294646895428, 278.106029411922, 277.786973188420,
+        277.901937357612, 278.009410152606, 278.354845055124, 278.644262693781, 278.840216526960,
+        278.726204045146, 278.600937232653, 278.803160024776, 278.814239641429, 278.406107089989,
+        278.204915060477, 278.086114594041, 277.967943887986, 278.030839062421, 278.631386341730,
+        278.299910112812, 278.884560848832, 278.886180066033, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.403818020342,
+        277.385736612011, 277.419079763626, 277.484883608931, 277.520716730724, 277.513550730617,
+        277.891587970187, 278.087015712643, 278.064211437361, 278.083756882686, 278.081608204113,
+        278.004930191931, 277.667983116988, 277.465515703008, 277.770465817560, 277.486273012311,
+        277.812487190729, 277.521348154187, 277.263007792215, 277.559643310698, 277.428266858300,
+        277.713431147430, 277.934927582205, 278.100297973144, 278.141264584283, 278.086993250781,
+        278.379658327306, 278.359962783622, 278.333521305086, 278.570844647226, 278.406928088404,
+        278.423636196882, 278.392152949565, 278.201452070097, 277.856477990354, 277.873435248789,
+        278.096769778375, 278.407680402316, 278.908043981651, 278.827575506572, 278.712139062362,
+        278.769591044403, 278.756261553376, 278.826156376636, 278.419163229658, 278.090389246096,
+        278.124356160438, 278.035593626588, 278.254910218263, 277.366924718560, 278.253233151469,
+        278.902280750162, 279.023193013234, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.489905843838, 277.288144403828,
+        277.451382178926, 277.543372549140, 277.562640697184, 277.535439380058, 277.787699174599,
+        277.995109516110, 278.012353528589, 278.018214990669, 278.026842232206, 278.025758889394,
+        278.001468911932, 277.958981418954, 277.934824068020, 277.751018859661, 277.513289938194,
+        277.478190521822, 277.696713037172, 277.504466132445, 277.486066884529, 277.853056781128,
+        278.077295875773, 278.234774297493, 278.327662456752, 278.433621081338, 278.296684198791,
+        278.342578057961, 278.285379040344, 277.983925074627, 278.248926266098, 278.525007446921,
+        278.445876128392, 278.104398493173, 277.910536085917, 277.940945008878, 278.081826796893,
+        278.529637105590, 278.698715957456, 278.794762804276, 278.861716433298, 278.335244079482,
+        278.692137237630, 278.680804581213, 278.556629862749, 278.398770705898, 278.455259276313,
+        278.292491405216, 278.409341863253, 278.567127873446, 278.775114227671, 278.952795140027,
+        279.084767747687, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.524648375830, 277.496311267119, 277.564912458774,
+        277.619013556894, 277.606746819707, 277.595920519719, 277.854151971529, 278.023987432708,
+        278.002073841870, 277.986021680999, 278.024941876269, 278.000914649286, 277.592433020840,
+        277.681860660305, 277.885631704720, 277.778259318705, 277.871014021210, 277.876428015559,
+        277.788723284443, 277.787820645805, 277.938530551964, 277.864376078717, 278.173275923391,
+        278.289334853041, 278.451226379450, 278.501430038586, 278.374869508469, 278.453566275875,
+        278.262940769041, 278.201339865362, 278.504357434437, 278.550458514972, 278.415280015529,
+        278.309083469218, 278.099364666955, 278.034272070086, 278.181290664566, 278.418559586295,
+        278.627322595506, 278.729885168807, 278.788171788983, 278.676468137618, 278.430465953748,
+        278.583736392926, 278.738818934276, 278.497103463576, 278.513281650723, 278.121679354076,
+        278.516294602332, 278.829577561129, 278.956682360007, 279.057955060579, 279.348107461088,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.474572686648, 277.620526101819, 277.579876191216, 277.360462826964,
+        277.549474136816, 277.588274409193, 277.894949427885, 278.083728110620, 277.555347984217,
+        277.733247247895, 278.015445953589, 277.664549184972, 277.226566090387, 277.319835583899,
+        277.669759532369, 277.815087621214, 277.874161852679, 278.107783063761, 278.140316595456,
+        278.161088443851, 278.102908173169, 278.119213950167, 278.224356967513, 278.368545269317,
+        278.424386685907, 278.174769159603, 278.434721663051, 278.475700763337, 278.510069020504,
+        278.551175436030, 278.571361830045, 278.638092447369, 278.646605205673, 278.513270253124,
+        278.141327144780, 278.115950680075, 278.337373363097, 278.274464616686, 278.499148651879,
+        278.595423351542, 278.569133302757, 278.443504364184, 278.470116786663, 278.405474202063,
+        278.476174607142, 278.351734796539, 278.057044240619, 278.525864307774, 278.636236054564,
+        278.673533956426, 278.958480628853, 279.107513277297, 279.177226197697, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        277.580570122543, 277.634318472725, 277.659616485035, 277.618057346549, 277.522030659488,
+        277.362267071782, 277.372186333198, 278.055229170801, 277.784391394722, 277.537574683026,
+        277.784340466299, 277.547947537627, 277.451990151210, 277.480643933265, 277.666856164943,
+        277.711808172746, 277.673179528355, 278.161015825933, 277.956039470577, 278.147107822033,
+        277.923934558538, 278.104047544295, 277.992356939665, 278.206672410603, 278.508947854374,
+        278.256305068195, 278.356204246512, 278.556714187128, 278.604795250140, 278.664440436865,
+        278.766423700238, 278.736535640997, 278.720042846867, 278.499145050840, 278.185061618328,
+        278.500779492250, 278.288933571022, 278.296811610179, 278.411719697789, 278.517980608444,
+        278.463145591579, 278.387209307015, 278.498542676419, 278.586457379716, 278.312529862807,
+        278.273753392221, 278.452376606509, 278.515187531602, 278.424686213262, 278.745884182673,
+        279.143006916710, 278.919075152226, 279.321139034238, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.662378493687,
+        277.678435934163, 277.662375895032, 277.591158494953, 277.510569010252, 277.571350359624,
+        277.754121208130, 277.990973977522, 277.757628494100, 277.561287021943, 277.486634316690,
+        277.525042945477, 277.532619439937, 277.572471674363, 277.443489464657, 277.644319445620,
+        277.665981899947, 278.128702193914, 278.134993079919, 277.939643867877, 277.829674444778,
+        277.920407262541, 278.225109521812, 278.454420846245, 278.335636048648, 278.439755866968,
+        278.556282205556, 278.641783528936, 278.681789272875, 278.705946366072, 278.807551296203,
+        278.775139246657, 278.816740548483, 278.723779732785, 278.140623274423, 278.551611396458,
+        278.438468292334, 278.371046387243, 278.432387336449, 278.271114366293, 278.280713350360,
+        278.328592293660, 278.509010393596, 278.315046309223, 278.168349319322, 278.279893722304,
+        278.388489929202, 278.028546414610, 278.067008312878, 278.735603677916, 278.875197099938,
+        278.916380807791, 279.081185555734, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.675564771386, 277.635443490043,
+        277.555593388636, 277.474215655524, 277.508785537502, 277.559272826965, 277.898963108355,
+        278.160478537993, 277.698446328836, 277.535506294291, 277.650670399939, 277.713715654254,
+        277.734628640441, 277.634344419146, 277.955083825013, 277.839312734512, 278.032298048669,
+        277.878980044522, 277.940977547635, 278.228734022884, 278.183322722407, 278.317956053497,
+        278.223938712345, 278.281454807630, 278.286552318883, 278.286369796342, 278.414024043537,
+        278.659360323843, 278.716814326172, 278.768624030203, 278.839142757595, 278.825723621249,
+        278.854881582904, 278.492476448520, 278.560515417031, 278.575788272122, 278.498507193087,
+        278.406864865871, 278.466947148140, 278.325092661631, 278.469051212641, 278.408787619500,
+        278.661902048190, 278.661367318075, 278.459305901808, 278.222284106910, 278.377818887784,
+        277.959327267209, 278.623834307258, 278.738685964726, 278.800554549259, 278.851954436327,
+        278.995254298110, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.584969222118, 277.627926693726, 277.432600717237,
+        277.459047042982, 277.597393070604, 277.234297430406, 277.627802486716, 277.768761653507,
+        277.858521156621, 277.718058564950, 277.536424253963, 277.886264022321, 277.953425182639,
+        277.898146408245, 277.845543290783, 278.043517097872, 278.101299101003, 278.285342963779,
+        278.272056517909, 277.993274994819, 277.857694108392, 278.387036994248, 278.124588570184,
+        278.166963674206, 278.394923902234, 278.402876708228, 277.959213287923, 278.570898673058,
+        278.714369994443, 278.790925545959, 278.865460063705, 278.887653108598, 278.925165577904,
+        278.445683950808, 278.454662353423, 278.661881572607, 278.503970146357, 278.416849170500,
+        278.313604733026, 278.551157387306, 278.536725681615, 278.621164456571, 278.693420303848,
+        278.659085456184, 278.410157301715, 278.248100222314, 278.068519937287, 277.489258886793,
+        278.582901560003, 278.758730417454, 278.753965383538, 278.760787016072, 279.095432709613,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.617881541072, 277.711309115784, 277.528121492641, 277.692656014265,
+        277.729855515134, 277.324286569399, 277.806867446539, 277.771307124788, 277.941974315568,
+        277.793422663721, 277.560140843400, 277.640329086171, 277.719016393704, 277.775996718354,
+        277.776543735559, 278.069109429862, 278.047555848040, 278.042547866743, 277.879970814221,
+        278.078945404616, 278.172068463404, 278.338754643149, 278.107330216076, 278.112910048865,
+        278.445453513808, 278.413972889685, 278.281435948761, 278.688102249953, 278.748755950831,
+        278.825775954851, 278.864385587829, 278.887954649503, 278.923518570963, 278.497911197741,
+        278.577311671993, 278.567434824410, 278.538279003744, 278.579915443113, 278.528959489854,
+        278.497061723077, 278.590410175821, 278.685518588178, 278.714343026087, 278.633658175898,
+        278.394357807741, 278.239312017157, 278.085722164932, 278.380059590956, 278.739705486505,
+        278.694694263682, 278.672923745762, 278.696715687286, 278.853484672915, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        277.864490745271, 277.943292827263, 277.719654098130, 277.620485639589, 277.472319039130,
+        277.693129006556, 278.133689973093, 277.965457344363, 278.104287602920, 277.823621279948,
+        277.618839688350, 277.615190026184, 277.755976640115, 277.813120706528, 277.967931066943,
+        277.982623081629, 277.997140146694, 277.975617671251, 278.039568336506, 277.889611169291,
+        278.218105661708, 278.124968954386, 278.376454955636, 278.278665136291, 278.301183298592,
+        278.397428714062, 278.196778796572, 278.746656377329, 278.846907930532, 278.786561698973,
+        278.841304821452, 278.874397654021, 278.909276839009, 278.143937356126, 278.097256838341,
+        278.545815137404, 278.494309833488, 278.700417405390, 278.612579318198, 278.560830208376,
+        278.548054206682, 278.619008303868, 278.609079484424, 278.483923041726, 278.208681314237,
+        278.090402297370, 278.747716499947, 278.515614144343, 278.526325760542, 278.605377647849,
+        278.717274877437, 278.819420463325, 278.599577926182, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 278.068675398310,
+        277.997973826578, 277.749167591392, 277.971702730095, 277.895766091276, 277.766323744104,
+        278.114006780512, 278.215465587629, 277.865744497808, 277.621846139857, 277.619176720160,
+        277.665176866961, 277.892488116900, 277.825831734535, 277.991463449834, 277.928833353682,
+        277.746440198884, 277.792686927302, 277.910135077567, 277.533121937113, 278.131357931757,
+        278.388181942261, 278.402417692803, 278.227304284300, 278.415814342073, 278.378254025897,
+        278.601248279164, 278.758242092388, 278.847426423313, 278.280248973563, 278.725834255314,
+        278.842186363034, 278.868778923155, 278.494225795144, 278.020128379151, 278.679498884784,
+        278.912318616850, 278.814308937895, 278.701152379232, 278.573422817796, 278.532102069194,
+        278.542072630317, 278.495785291661, 278.388540928046, 277.931685199925, 278.182962322534,
+        278.499946233316, 278.539211829192, 278.586336069633, 278.553089371418, 278.596056981041,
+        278.533478404021, 278.457299600740, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 278.084632811174, 277.820012443785,
+        277.847308696263, 277.849503278643, 277.798568623574, 277.797575835420, 278.095663099731,
+        278.176160746854, 278.055153965908, 277.658857926577, 277.600990658349, 277.654026836536,
+        277.704990323093, 277.793048321917, 277.910121578336, 277.820873697740, 277.745501713345,
+        277.917800418041, 277.944391515021, 278.049145512055, 278.043694650275, 278.359223099294,
+        278.070771695770, 278.214994954607, 278.330759821265, 278.205028068094, 278.559361787443,
+        278.733217829340, 278.744268100279, 278.596208016795, 278.640483841563, 278.694916381717,
+        278.907613386036, 278.818024141397, 278.832740735832, 278.864929258857, 279.066035941021,
+        278.954370093400, 278.808689512194, 278.608053707239, 278.495744514278, 278.455081259502,
+        278.372791655716, 278.141900258419, 278.157538472382, 278.129509127672, 278.226019505944,
+        278.517786152116, 278.439174014992, 278.709414812548, 278.622228174999, 278.479038464346,
+        278.411419063810, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 278.059317675418, 277.775909541424, 277.981685147100,
+        277.820433102725, 277.757691649352, 277.791125337952, 278.114244862593, 278.017847302545,
+        277.739587601083, 277.595204498445, 277.444481155752, 277.508867798333, 277.654580807842,
+        277.801555631030, 277.946216001618, 277.717518898982, 277.766353468943, 277.682654248428,
+        277.981754049258, 278.135151366502, 278.237042418896, 278.307870507241, 278.340706625625,
+        278.321035354200, 278.320273358697, 278.158571181206, 278.405855009476, 278.698752162175,
+        278.489714021957, 278.447399946515, 278.208281541154, 278.274999857765, 278.742819250719,
+        278.267292067544, 278.472633364801, 278.954199073712, 278.507525942737, 278.740647038251,
+        278.712056316088, 278.578495872832, 278.539513494423, 278.291124747294, 278.285971725264,
+        278.217669844021, 278.204961536595, 278.111539468452, 277.987196715585, 278.301219174750,
+        278.308770143463, 278.450474529455, 278.387913656980, 278.345354979068, 278.308192795967,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 278.078766967738, 278.054694472586, 277.996546131957, 277.478107514078,
+        277.498293431515, 277.439272646630, 278.170812997380, 278.031766350648, 277.926719630068,
+        277.660631490707, 277.405466505229, 277.448131221500, 277.639980374018, 277.771980499881,
+        277.699632610951, 277.872363280302, 277.869398539167, 277.927769742648, 277.856196077938,
+        278.052767006803, 278.215030316361, 277.961917700862, 278.291818910231, 278.337805197442,
+        278.117323423329, 278.455733028684, 278.701018948664, 278.676322213600, 278.350822146256,
+        278.266243351366, 278.328051517560, 278.614915559626, 278.558300997375, 278.813314535584,
+        278.881108562772, 278.123693523522, 278.802821050470, 278.781438747715, 278.621781876457,
+        278.564387365762, 278.583461368131, 278.350036130682, 278.383351889379, 278.383019058144,
+        278.217555758541, 278.167422809838, 278.238477919987, 278.226153636247, 278.084761209123,
+        278.088484041540, 278.083492218972, 278.205027655804, 278.230216899737, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        278.045557859900, 277.849040307617, 277.906197759880, 277.593465692124, 277.699758481137,
+        277.871410461793, 278.058125626538, 278.204525836660, 277.952696685466, 277.738482364071,
+        277.391817333672, 277.414211293355, 277.713291394110, 277.795254016927, 277.757654239367,
+        277.707136929518, 277.820516499087, 277.833903133206, 277.958888974124, 277.727592050621,
+        277.979297315556, 278.041516057377, 278.241728050372, 278.352662301885, 278.378421828891,
+        278.668011089711, 278.720413573120, 278.293463018845, 278.471858803908, 278.456120759094,
+        278.451834597551, 278.400966141086, 278.228702595541, 278.199778173421, 278.229599019782,
+        278.763504882934, 278.797467161442, 278.406340958912, 278.639263357618, 278.738466024170,
+        278.356147734832, 278.377301134964, 278.324739430270, 278.365219303220, 278.277074392752,
+        278.246691447173, 278.325438536989, 278.410510194260, 278.004569449865, 277.972537483973,
+        277.956821946510, 278.172942728027, 278.345344049598, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.996969175390,
+        277.862497775047, 277.649762377272, 277.559149409384, 277.580356760509, 277.718009367429,
+        278.068756822897, 277.878009666029, 277.969360198421, 277.610090666218, 277.828347857057,
+        277.544325721216, 277.732583265551, 278.116016214294, 277.972299696618, 277.687262934771,
+        277.957182102556, 277.863999567218, 278.051999720662, 278.158060596001, 278.155762387840,
+        278.127890904723, 278.223511374158, 278.356916537157, 278.639719890896, 278.714037786705,
+        278.558389050067, 278.315362526995, 278.636748281842, 278.421360309160, 278.615746331257,
+        278.298886265158, 278.533659911339, 278.333792298766, 278.643055170670, 278.858025832867,
+        279.020835079354, 278.870273814320, 278.740600676717, 278.482283444293, 278.534910048501,
+        278.346778954967, 278.353117018506, 278.419908994646, 278.281125729824, 278.285144148911,
+        278.365767158905, 278.333351670498, 277.972629892376, 277.989686782478, 278.095826308077,
+        278.302698360631, 278.382668003966, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.875713517719, 277.634128413762,
+        277.832973471346, 277.448621515103, 277.593144967346, 277.620070785560, 278.022268231048,
+        277.650661530718, 277.728550931249, 277.789574269136, 277.607135652596, 277.558983827518,
+        277.867823445271, 277.980868124118, 278.152155038418, 277.872425545108, 278.032213134824,
+        278.055596269546, 277.794984263919, 277.846180947964, 278.137493702594, 278.095071965260,
+        278.130969913741, 278.103726648322, 278.796162214483, 278.772300848655, 278.550498461136,
+        278.394793765962, 278.623206154742, 278.611024899396, 278.578628218960, 278.276590748045,
+        278.468413343561, 278.450779339504, 278.554459701664, 278.806252974651, 279.013699273923,
+        278.748514001816, 278.788419863602, 278.642315613660, 278.454524896995, 278.491218667764,
+        278.463773729676, 278.435969444734, 278.300796479766, 278.136749416946, 278.373140364489,
+        278.132948804942, 278.027912210990, 278.148274414281, 278.336173789580, 278.280453796923,
+        278.416601405752, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.958466871634, 277.914274026264, 277.771935237925,
+        277.604840373088, 277.681191841525, 277.734814857704, 277.836253334677, 277.790546207519,
+        277.679698274453, 277.762322999726, 277.735323729530, 277.547356221084, 277.724659181931,
+        278.062792028695, 277.919073079645, 277.773076074541, 278.020996741625, 278.022325061818,
+        277.919346621275, 277.950865675377, 278.008524131751, 278.023480753982, 277.924336723588,
+        278.332258375312, 278.736366682898, 278.523695501482, 278.502092576710, 278.225439092820,
+        278.256232776798, 278.449499552010, 278.137549943998, 278.422050300432, 278.431511965178,
+        278.274661992411, 278.431568551580, 278.753808621318, 278.761885574921, 278.415607975957,
+        278.555121959527, 278.654993170504, 278.544139116180, 278.520795378936, 278.533770309691,
+        278.547957275597, 278.407434870158, 278.298762571130, 278.487164079960, 278.392357298054,
+        278.268034972770, 278.187199824354, 278.276694644393, 278.256517908057, 278.378067854440,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.976299775529, 278.042031136275, 277.464188145920, 277.771621894762,
+        277.784361473567, 277.859883815950, 277.814022087487, 277.852386883815, 277.843778414429,
+        277.700529593730, 277.720782097285, 277.895752429155, 278.233578251075, 278.276392982912,
+        277.953661711230, 277.591545218148, 277.985804556808, 277.938997069968, 277.916409711425,
+        277.888611552732, 277.925456871836, 277.977042887254, 278.082218353152, 278.472003946117,
+        278.646240659087, 278.404855822350, 278.163989456392, 277.954560473176, 278.556236453466,
+        278.296451614769, 278.277688882445, 278.374637286269, 278.332791290590, 278.203289210287,
+        278.562584129166, 278.329198281083, 278.823530241748, 278.763160870026, 278.543114999088,
+        278.556718492736, 278.657498589218, 278.499789731658, 278.592487422433, 278.649244580966,
+        278.669257850905, 278.201148346028, 278.586350077861, 278.457878133903, 278.245990792454,
+        278.112034510986, 278.055946777769, 278.159436781041, 278.294828313829, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        278.055463728037, 277.938769906207, 277.908616747506, 277.697182984726, 277.767438599440,
+        277.618954673948, 277.849284086165, 277.888500733412, 277.803726801356, 277.887984809149,
+        277.963831684250, 278.063254030007, 278.264222060266, 278.247209209771, 278.010146150856,
+        277.737515908542, 277.889412006510, 277.981344866797, 277.913904542254, 277.836061245756,
+        277.808859499689, 277.970758433246, 278.239527080226, 278.275624726729, 278.397363141215,
+        278.343527616747, 278.259845839951, 278.368292580968, 278.583172394714, 278.290379278148,
+        278.385955212872, 278.352217326569, 278.420090515247, 278.134725529508, 278.418675419067,
+        278.363034465810, 278.431779148022, 278.438454682849, 278.264539348808, 278.429698158323,
+        278.607118714023, 278.464672697985, 278.443469155020, 278.604002661624, 278.807929770258,
+        278.629594459038, 278.763699668360, 278.301897413578, 278.088831652212, 277.971815866599,
+        277.908876996953, 277.949580119805, 277.929385688745, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 278.164247814763,
+        278.017634128271, 278.126496201983, 278.041275562602, 277.963103307992, 277.882098915321,
+        277.832817052899, 278.194630071008, 277.940734107132, 278.028855985157, 277.589337692257,
+        278.007707016965, 278.159356263938, 278.097452374726, 277.964902829032, 277.890310856301,
+        277.995095341973, 277.660207908446, 277.786361546086, 277.815119589775, 277.914655235766,
+        278.276761510933, 278.028707200239, 278.334143087463, 278.232784850170, 278.182589303626,
+        278.197293256951, 278.305926587915, 278.318792747211, 278.484167044288, 278.357400768639,
+        278.328509261854, 278.448253183213, 278.163374893923, 278.104866385859, 278.044914087322,
+        278.173224770928, 278.338413210359, 278.380896912261, 278.730673471804, 278.450424564609,
+        278.503155223128, 278.491430165703, 278.474964969620, 278.246765035551, 278.931615118388,
+        278.559599207653, 278.156636961710, 278.008740658705, 277.932135871154, 277.822627679854,
+        277.736249285180, 277.878138412578, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 278.082480645173, 278.043241069493,
+        277.697041095551, 277.989863518743, 277.717897740312, 277.701839125518, 277.861708621096,
+        278.280953208980, 277.804372502188, 277.704826013697, 277.596403430525, 277.712365023901,
+        278.034041843709, 277.947346670070, 277.846022907482, 277.820870191912, 277.874461715493,
+        277.769161099427, 277.750268832592, 277.850701911325, 277.878534019060, 278.027904999404,
+        278.090516114696, 278.109187477565, 278.190939004850, 278.278788556568, 278.380627825278,
+        278.407390272678, 278.511725032938, 278.506674787575, 278.442874478011, 278.405398330435,
+        278.395518040659, 278.357905587250, 278.210737031126, 278.122068999623, 278.170689655080,
+        278.152435924905, 278.236404166308, 278.676963499355, 278.364031374287, 278.396399598455,
+        278.375591815009, 278.342047071761, 278.407524619964, 278.529076426794, 278.148144221518,
+        278.042521318864, 277.942078734795, 277.821562712711, 277.728530388654, 277.736969229001,
+        277.907471093473, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 277.819603551272, 277.828647314803, 277.754535652466,
+        277.824122707543, 277.762454320427, 277.748628587305, 278.031167797444, 277.857054897891,
+        277.780437750936, 277.673341198976, 277.580777138276, 277.728655867446, 277.897137734936,
+        277.750051876006, 277.442585133617, 277.536109280911, 277.666042104756, 277.637084619762,
+        277.954517294964, 277.933011800326, 277.638355177335, 277.771459546012, 277.907366166404,
+        278.038032680944, 278.223370782900, 278.077760957702, 278.513395348027, 278.519194273139,
+        278.542309039934, 278.482080267916, 278.340394482155, 278.341759181533, 278.301704207586,
+        278.255804929780, 278.195762993763, 278.152065600453, 278.109495057418, 278.225701450697,
+        278.493902456915, 278.637437629165, 278.359832350456, 278.305034727926, 278.296015493113,
+        278.356150546679, 278.036917652359, 277.636846916859, 278.031252957091, 278.053317552121,
+        277.856967881711, 277.828489726312, 277.819981618468, 277.859938918796, 277.956551311373,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 277.884653219230, 277.884698802114, 277.844277877433, 277.934802186492,
+        277.864463150351, 277.803952962222, 277.862512817816, 278.030331030810, 277.751952165263,
+        277.680464702272, 277.585446567641, 277.958894193742, 277.524642689383, 277.589772555767,
+        277.547487191290, 277.553287779719, 277.547903182893, 277.780326455565, 278.007585878669,
+        277.822118711121, 277.682976359764, 277.843136947080, 277.894178961775, 277.954909292289,
+        278.221226702389, 278.236512222249, 278.471628587781, 278.517076530718, 278.553486136797,
+        278.548068978131, 278.394215898281, 278.289120256620, 278.234843510822, 278.157199428167,
+        278.206792433064, 278.242705298579, 278.226263767876, 278.437906673139, 278.580162411397,
+        278.567277080119, 278.296662334949, 278.275257848275, 278.404346162035, 278.002008395328,
+        277.160000000000, 277.422452606158, 278.124308422995, 278.212576318432, 278.016005178567,
+        277.861666847072, 277.831807919342, 277.987901581353, 278.061939469824, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        277.932091130649, 277.951064758320, 277.839412458507, 277.841315615141, 277.806577252520,
+        277.842248927079, 277.988730868827, 277.881229491595, 277.827771128070, 277.852117171922,
+        277.977131550724, 277.890734880932, 277.363447936035, 277.674357318546, 277.874045802482,
+        277.619616361043, 277.959695749966, 278.034434774544, 278.011503092349, 277.792532523158,
+        277.883473108928, 277.906659808602, 277.859039495732, 277.950830457718, 278.150472303852,
+        278.280666827875, 278.497788485655, 278.510726053483, 278.601565268380, 278.496480151954,
+        278.430095137542, 278.316738350851, 278.171640925745, 278.099215960220, 278.139092052815,
+        278.217292849195, 278.260283772674, 278.395024109814, 278.411196388457, 278.432581257165,
+        278.381536736126, 278.363111710685, 278.429680484566, 277.793989872273, 277.160000000000,
+        277.160000000000, 278.256273592222, 278.264019723457, 278.140777061859, 277.960057434051,
+        277.915191160621, 277.936547331889, 278.099249337367, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 277.917465588048,
+        277.806536213298, 277.829468329766, 277.894769654517, 277.878874487338, 278.213198285885,
+        277.882881751217, 277.892374439465, 277.858339532912, 277.923051748953, 277.681370662730,
+        277.510761769121, 277.346031782172, 277.635591850736, 277.505752171465, 277.838565919297,
+        278.145230449989, 278.110256581579, 277.857261961129, 277.892771986443, 277.933046869362,
+        277.858290703051, 277.761688955039, 277.868954215183, 278.100209314485, 278.316913494119,
+        278.444218906419, 278.557360529658, 278.561171208143, 278.461978486569, 278.557371359122,
+        278.268552022994, 278.168263392393, 278.004287261093, 278.100378738598, 278.174276275285,
+        278.571381129483, 278.432024829889, 278.351912980210, 278.426658874171, 278.422291931680,
+        278.425551948989, 278.455607158869, 278.142898669707, 277.160000000000, 277.160000000000,
+        278.358691525700, 278.271973931751, 278.175217065772, 278.113413453687, 278.060115945570,
+        278.072147299547, 278.221325526498, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 277.947472331137, 277.986181501038,
+        277.984568003653, 278.110290656444, 277.897470824458, 277.874164089902, 277.898939913517,
+        277.902875083266, 277.889547948396, 277.798750008214, 277.895056427821, 277.559027635660,
+        277.397787394390, 277.415750853834, 277.795000812736, 278.022111292969, 278.209968407002,
+        278.081682250882, 278.091845240573, 277.941999949457, 277.909072268308, 277.784844781870,
+        277.659181293741, 277.950679245143, 278.025258482602, 278.291405558634, 278.461051894477,
+        278.543413260710, 278.637341256470, 278.536026584681, 278.345094023061, 278.314548843661,
+        278.141679812436, 277.941455855832, 278.086647453443, 278.112323026882, 278.109913998848,
+        278.098115462881, 278.381213778877, 278.424512212838, 278.401413477507, 278.394564786766,
+        277.894149214730, 277.375874807682, 277.160000000000, 278.149965464308, 278.077148773966,
+        278.225807651780, 278.284892879974, 278.351353534523, 278.240233215773, 278.349246487147,
+        278.349466760844, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000, 288.000000000000,
+        288.000000000000, 288.000000000000, 279.240455299468, 279.223818551588, 279.285849037670,
+        279.376293488344, 279.461192356391, 279.551808319930, 279.628646083334, 279.652829397263,
+        279.616525840893, 279.502069589155, 279.291108765522, 279.053106080215, 278.902689297837,
+        278.875704607117, 278.947740010309, 279.107704342158, 279.293681458493, 279.389614320839,
+        279.411224941796, 279.444212582782, 279.386698602138, 279.136632845345, 278.940936666674,
+        279.114221831018, 279.555753115819, 279.953434278201, 280.226196904095, 280.405256334886,
+        280.410401720828, 280.251580808077, 280.098019623178, 279.974301676744, 279.757509415710,
+        279.521564884780, 279.499039528544, 279.701996418489, 279.925134655518, 280.065775204607,
+        280.157363074379, 280.210875088178, 280.228483742292, 280.242147600516, 280.253696133409,
+        280.268103214047, 280.320185953974, 280.334307179838, 280.179831259660, 279.974644702474,
+        279.996541178206, 280.236144650250, 280.430297213138, 280.482837320704, 280.457167561948,
+        280.368438239921, 280.237631095078, 280.139468565491, 280.058914690017, 279.931995170108,
+        279.790325543831, 279.694221168621, 279.601661392615, 279.495094732655, 279.400305289408,
+        279.315406421361, 279.170992589248, 279.122968987120, 279.185857037526, 279.307459658628,
+        279.447414156257, 279.576963540092, 279.657803270340, 279.678727839839, 279.638593829489,
+        279.510130693798, 279.301628221226, 279.100500801839, 278.988560072117, 278.974724701028,
+        279.039385051036, 279.169048776781, 279.318322140061, 279.420543807447, 279.465423007055,
+        279.468796093395, 279.383211173889, 279.191917158746, 279.053391934990, 279.156356824790,
+        279.471311615411, 279.820168782296, 280.098305477953, 280.261471383277, 280.248379234602,
+        280.089100954212, 279.926106561752, 279.809077617043, 279.659975766627, 279.501440708651,
+        279.482574293529, 279.633677127367, 279.825485681103, 279.976645685896, 280.097276400764,
+        280.174628702763, 280.192294527831, 280.188521244807, 280.196296494675, 280.219850928100,
+        280.263243682879, 280.275020899592, 280.180917507803, 280.066804281795, 280.125290168672,
+        280.362949828249, 280.587574510106, 280.668985949904, 280.616788868068, 280.490498228663,
+        280.363864563528, 280.257412245478, 280.131064435118, 279.982362781387, 279.855843458162,
+        279.757509415710, 279.634477520736, 279.518134627486, 279.422430448960, 279.301399537407,
+        279.066598425575, 279.006454581005, 279.065626519341, 279.211698309147, 279.406079555854,
+        279.575362753355, 279.659346886123, 279.668951606549, 279.614810712245, 279.477714762361,
+        279.291623304116, 279.135260742427, 279.045559514167, 279.027379150504, 279.089638320405,
+        279.211583967237, 279.338331974281, 279.433350101348, 279.488062705201, 279.486633431328,
+        279.403907059567, 279.254061986738, 279.134288836193, 279.172764888850, 279.399447725084,
+        279.708456736394, 279.964353930589, 280.087328654609, 280.053540620255, 279.905525017983,
+        279.744302925125, 279.629846673388, 279.535743281599, 279.456733021908, 279.457876441006,
+        279.562213433724, 279.709028445943, 279.857215561080, 280.002143931787, 280.100420803284,
+        280.113627293870, 280.091559305273, 280.106995463100, 280.164566614698, 280.221223031018,
+        280.227511836058, 280.166796281940, 280.117915115488, 280.205157992687, 280.436986214863,
+        280.676989883592, 280.785042988379, 280.731302290760, 280.595006734245, 280.462141435025,
+        280.330190871084, 280.161879579817, 280.001686564148, 279.887230312410, 279.769572487197,
+        279.608579078159, 279.472969573104, 279.366345742189, 279.220731320023, 278.926872611765,
+        278.881364531654, 278.941165350494, 279.107361316429, 279.349823336219, 279.555124235315,
+        279.648370062780, 279.657231560791, 279.594858048980, 279.449300797769, 279.279102864990,
+        279.156814192429, 279.084607276373, 279.061052842948, 279.111248941363, 279.216443498405,
+        279.328441399081, 279.431749314611, 279.511274112896, 279.525624022579, 279.454617696576,
+        279.326783441388, 279.211183770552, 279.203065494955, 279.353482277333, 279.594915219935,
+        279.794384681630, 279.871851325538, 279.829087451263, 279.710686403636, 279.579536233063,
+        279.486233234644, 279.434950888086, 279.410081522698, 279.424259919517, 279.498524989950,
+        279.624358261716, 279.778090959479, 279.931023263874, 280.032330195982, 280.046737276620,
+        280.015807790012, 280.018609166803, 280.078867353282, 280.150102363105, 280.176515344275,
+        280.155247749047, 280.155933800506, 280.263815392429, 280.485638697495, 280.723469869937,
+        280.847759525920, 280.806825122202, 280.666184573113, 280.512566217259, 280.352087346816,
+        280.173428112710, 280.012091677942, 279.876825198616, 279.728295057749, 279.552723055209,
+        279.402363443785, 279.254576525332, 279.074545188308, 278.792063500078, 278.765650518908,
+        278.830882578465, 279.019032191087, 279.293738629448, 279.517277063162, 279.622357278294,
+        279.646254737448, 279.592056672189, 279.448328891536, 279.283562199474, 279.169791999195,
+        279.110905915633, 279.105703358736, 279.159043859671, 279.239997931829, 279.325754364200,
+        279.426489586758, 279.520307123772, 279.551522465155, 279.502412614884, 279.403907059567,
+        279.305458675206, 279.267725844962, 279.333072246429, 279.477371736632, 279.617554918081,
+        279.673753966761, 279.623843723122, 279.509902009978, 279.398532989806, 279.334215665527,
+        279.320437465393, 279.333072246429, 279.360399962878, 279.425917877209, 279.551751148975,
+        279.712973241832, 279.857558586810, 279.950404217590, 279.981390875154, 279.965840375417,
+        279.949546653266, 279.977160224490, 280.044278925559, 280.106423753550, 280.144328096658,
+        280.197382742819, 280.319728586334, 280.514567200681, 280.716094816753, 280.831294290905,
+        280.809912353767, 280.682078098579, 280.512966413944, 280.338595001456, 280.166338914300,
+        279.997684597304, 279.819425559882, 279.641966915829, 279.479658574828, 279.323296013139,
+        279.126284902505, 278.919611900491, 278.663943390116, 278.635872451253, 278.714768369034,
+        278.939335879936, 279.234966887797, 279.462164262625, 279.579536233063, 279.613667293147,
+        279.557754099241, 279.422258936095, 279.273099914724, 279.160301620679, 279.104045401044,
+        279.120339123194, 279.186371576120, 279.254633696287, 279.324610945102, 279.415912960099,
+        279.503327350163, 279.544947805340, 279.525223825895, 279.451873490740, 279.359942595239,
+        279.299512895895, 279.299970263534, 279.366460084099, 279.468510238620, 279.518877849899,
+        279.450730071642, 279.310718403058, 279.198949186201, 279.159386885400, 279.179282377710,
+        279.227706176523, 279.276816026794, 279.339704077199, 279.455246577080, 279.610637232536,
+        279.746761276187, 279.834861717709, 279.879798088271, 279.885629525673, 279.875395924743,
+        279.895577271828, 279.960923673294, 280.039133539617, 280.106137898776, 280.185090987512,
+        280.316469841904, 280.499531239539, 280.676532515953, 280.779268721933, 280.774980900315,
+        280.668928778949, 280.494271511687, 280.303091838455, 280.126605100635, 279.943315019181,
+        279.733497614647, 279.533456443403, 279.369032777070, 279.193232090709, 278.974724701028,
+        278.776684513206, 278.477337393277, 278.425769191944, 278.545142145805, 278.845003804328,
+        279.186257234210, 279.442668966999, 279.589884175903, 279.616983208532, 279.523623039157,
+        279.377551249352, 279.241884573341, 279.128514569747, 279.069113947591, 279.093354432475,
+        279.156013799060, 279.215357250261, 279.294424680907, 279.396417664474, 279.488805927615,
+        279.561470211310, 279.584338593276, 279.506586094593, 279.365716861685, 279.260465133688,
+        279.228049202252, 279.263152168569, 279.346850446563, 279.384926302536, 279.287735679182,
+        279.118681165502, 279.009884838300, 278.999765579281, 279.055793115096, 279.139091196406,
+        279.206552923204, 279.259093030770, 279.356112141259, 279.517105550297, 279.681186190900,
+        279.784379764520, 279.807991368899, 279.779234378578, 279.764598614120, 279.813822806301,
+        279.907468830450, 279.993796972370, 280.053540620255, 280.119458731271, 280.251409295212,
+        280.463342025078, 280.675217583990, 280.789616664772, 280.782813321138, 280.675389096854,
+        280.489526322429, 280.273134258080, 280.072292693467, 279.874195334690, 279.652486371533,
+        279.437866606786, 279.233594784879, 279.015659104747, 278.793149748221, 278.609916837722,
+        278.278039444447, 278.221211515262, 278.401014168466, 278.772568204452, 279.153212422270,
+        279.444384095647, 279.618984191954, 279.628074373785, 279.498410648040, 279.344049069773,
+        279.206610094159, 279.080376625709, 279.029322962971, 279.074373675443, 279.126685099190,
+        279.162645629830, 279.242742137665, 279.351767148686, 279.452445200289, 279.569245461179,
+        279.648770259464, 279.570846247916, 279.375721778795, 279.219645071880, 279.156013799060,
+        279.166704767629, 279.232965904375, 279.254862380107, 279.131601801312, 278.940307786170,
+        278.834598690534, 278.852035831783, 278.945624684977, 279.059509227166, 279.135375084336,
+        279.175966462325, 279.264581442442, 279.446042053339, 279.658031954160, 279.793812972081,
+        279.790782911470, 279.698680503104, 279.650028020472, 279.710629232681, 279.826171732562,
+        279.931480631514, 280.008375565873, 280.071149274369, 280.185319671332, 280.405427847751,
+        280.652120518204, 280.782241611589, 280.760745332541, 280.639542908123, 280.451907834096,
+        280.226482758870, 280.002544128472, 279.780835165315, 279.552780226163, 279.330785408232,
+        279.096041467356, 278.847748010164, 278.625009969819, 278.440576469267, 278.096350149730,
+        278.070394536199, 278.305481502805, 278.723172499407, 279.140120273594, 279.458219466736,
+        279.619441559593, 279.587482995796, 279.450272704003, 279.311976164066, 279.151897490307,
+        278.991590132728, 278.964262416279, 279.057565414699, 279.110848744678, 279.115708275846,
+        279.175451923731, 279.273671624273, 279.378923352270, 279.532427366214, 279.652257687714,
+        279.582966490358, 279.372234350545, 279.184370592698, 279.073115914435, 279.055564431277,
+        279.140348957414, 279.183455857419, 279.030009014430, 278.774740700739, 278.632785219688,
+        278.674634358685, 278.827795346899, 278.977697590684, 279.039842418675, 279.051848319207,
+        279.138576657812, 279.348279720436, 279.602690469803, 279.771058932025, 279.762711972608,
+        279.633848640231, 279.556153312503, 279.607664342881, 279.721663226979, 279.841322035614,
+        279.946287908836, 280.009804839746, 280.088243389888, 280.289885347869, 280.563848563817,
+        280.727185982006, 280.709577327893, 280.579627747373, 280.394736879182, 280.175657779951,
+        279.933024247296, 279.673182257212, 279.415970131054, 279.180025600124, 278.938421144658,
+        278.683210001922, 278.455841114229, 278.261631380386, 277.941131007138, 277.966000372526,
+        278.239391878925, 278.690642226061, 279.154870379962, 279.488577243795, 279.591484962640,
+        279.499382554274, 279.378065787946, 279.270984589392, 279.083235173455, 278.890283200620,
+        278.882622292662, 279.001137682198, 279.046359907535, 279.033553613635, 279.073458940165,
+        279.153498277044, 279.279102864990, 279.478858181460, 279.608007368610, 279.522536791014,
+        279.321638055446, 279.132745220410, 278.967120964025, 278.916810523700, 279.055735944141,
+        279.162588458876, 278.986158892011, 278.647764009875, 278.455212233725, 278.525875533999,
+        278.751586463999, 278.936991870785, 278.962775971451, 278.923213670651, 279.010285034985,
+        279.265381835811, 279.562499288499, 279.744017070351, 279.719890927377, 279.567816187306,
+        279.484632447906, 279.544033070062, 279.658603663709, 279.771058932025, 279.864419101400,
+        279.899522067717, 279.941314035759, 280.136266992016, 280.447905867252, 280.660295964757,
+        280.667213650302, 280.534005325352, 280.343283019759, 280.121574056603, 279.869335803522,
+        279.580336626432, 279.282304438465, 279.009084444932, 278.747527326200, 278.486313233198,
+        278.257286387813, 278.072967229170, 277.832734876621, 277.928782080877, 278.259516055054,
+        278.741524375934, 279.215242908351, 279.510416548572, 279.531626972845, 279.398304305986,
+        279.305801700935, 279.217586917503, 279.013715292280, 278.826308902072, 278.825336995838,
+        278.901088511099, 278.911836650623, 278.914523685504, 278.944767120653, 278.984443763364,
+        279.143607701844, 279.421115516997, 279.532198682394, 279.369490144709, 279.175623436596,
+        279.045273659392, 278.877476906720, 278.808128538409, 278.992847893736, 279.154127157548,
+        278.970494050365, 278.596996201912, 278.388550900295, 278.466303398978, 278.711623966514,
+        278.898973185767, 278.883880053670, 278.801782562413, 278.914009146910, 279.254004815783,
+        279.617497747126, 279.797872109880, 279.722920987987, 279.523508697248, 279.433064246574,
+        279.512074506265, 279.634420349781, 279.724636116635, 279.773059915447, 279.762197434013,
+        279.783636542106, 279.992196185632, 280.333335273604, 280.578827354005, 280.616388671383,
+        280.501589393916, 280.301891248401, 280.061601724898, 279.796328494097, 279.497438741807,
+        279.181626386862, 278.861812065073, 278.555661601509, 278.284156736622, 278.068336381822,
+        277.909000930477
+};
+
+#define ILCHAM 3128 
+#define NSTRON   10
+#define NSMAX    31
+#define NMSMAX   31
+
+int main (int argc, char * argv[])
+{
+    grib_handle* h = NULL;
+    size_t len = 0;
+
+    GRIB_CHECK (((h = grib_handle_new_from_samples (NULL, "reduced_gg_ml_grib2")) == NULL), 0);
+    len = strlen ("lambert");
+    GRIB_CHECK (grib_set_string (h, "gridType", "lambert", &len), 0);
+    GRIB_CHECK (grib_set_long (h, "centre", 85), 0);
+
+    GRIB_CHECK (grib_set_long (h, "grib2LocalSectionPresent", 1), 0);
+    GRIB_CHECK (grib_set_long (h, "grib2LocalSectionNumber", 1), 0);
+    len = strlen ("SURFTEMPERATURE");
+    GRIB_CHECK (grib_set_string (h, "faFieldName", "SURFTEMPERATURE", &len), 0);
+
+    GRIB_CHECK (grib_set_long (h, "Nx", 64), 0);
+    GRIB_CHECK (grib_set_long (h, "Ny", 64), 0);
+    GRIB_CHECK (grib_set_double (h, "DxInMetres", 2500.00000000000), 0);
+    GRIB_CHECK (grib_set_double (h, "DyInMetres", 2500.00000000000), 0);
+    GRIB_CHECK (grib_set_long (h, "iScansNegatively", 0), 0);
+    GRIB_CHECK (grib_set_long (h, "jScansPositively", 1), 0);
+    GRIB_CHECK (grib_set_long (h, "jPointsAreConsecutive", 0), 0);
+    GRIB_CHECK (grib_set_long (h, "uvRelativeToGrid", 1), 0);
+    GRIB_CHECK (grib_set_double (h, "latitudeOfFirstGridPointInDegrees", 66.7684949529709), 0);
+    GRIB_CHECK (grib_set_double (h, "longitudeOfFirstGridPointInDegrees", 25.1580207144963), 0);
+    GRIB_CHECK (grib_set_double (h, "latitudeOfSouthernPoleInDegrees", 0.000000000000000E+000), 0);
+    GRIB_CHECK (grib_set_double (h, "longitudeOfSouthernPoleInDegrees", 0.000000000000000E+000), 0);
+    GRIB_CHECK (grib_set_double (h, "LaDInDegrees", 67.3600000000000), 0);
+    GRIB_CHECK (grib_set_double (h, "LoVInDegrees", 26.6400000000000), 0);
+    GRIB_CHECK (grib_set_double (h, "Latin1InDegrees", 67.3600000000000), 0);
+    GRIB_CHECK (grib_set_double (h, "Latin2InDegrees", 67.3600000000000), 0);
+    GRIB_CHECK (grib_set_long (h, "projectionCentreFlag", 0), 0);
+    GRIB_CHECK (grib_set_long (h, "NV", 0), 0);
+    GRIB_CHECK (grib_set_long (h, "year", 2009), 0);
+    GRIB_CHECK (grib_set_long (h, "month", 5), 0);
+    GRIB_CHECK (grib_set_long (h, "day", 28), 0);
+    GRIB_CHECK (grib_set_long (h, "hour", 0), 0);
+    GRIB_CHECK (grib_set_long (h, "minute", 0), 0);
+    GRIB_CHECK (grib_set_long (h, "second", 0), 0);
+    len = strlen ("s");
+    GRIB_CHECK (grib_set_string (h, "indicatorOfUnitOfTimeRange", "s", &len), 0);
+    len = strlen ("s");
+    GRIB_CHECK (grib_set_string (h, "stepUnits", "s", &len), 0);
+    GRIB_CHECK (grib_set_long (h, "endStep", 3600), 0);
+    GRIB_CHECK (grib_set_long (h, "bitsPerValue", 16), 0);
+    len = strlen ("grid_simple");
+    GRIB_CHECK (grib_set_string (h, "packingType", "grid_simple", &len), 0);
+    GRIB_CHECK (grib_set_long (h, "numberOfDataPoints", 4096), 0);
+    
+    len = sizeof(values)/sizeof(values[0]);
+    GRIB_CHECK (grib_set_double_array (h, "values", values, len), 0);
+    len = strlen ("SURFTEMPERATURE");
+    GRIB_CHECK (grib_set_string (h, "CLNOMA", "SURFTEMPERATURE", &len), 0);
+    GRIB_CHECK (grib_set_long (h, "INGRIB", 120), 0);
+    GRIB_CHECK (grib_set_long (h, "LLCOSP", 0), 0);
+    GRIB_CHECK (grib_set_long (h, "INBITS", 16), 0);
+
+    /*GRIB_CHECK(grib_write_message(h, "output.meteoFrance.grib", "w"), 0);*/
+
+    GRIB_CHECK (grib_handle_delete (h), 0);
+
+    printf("ALL OK\n");
+    return 0;
+}
diff --git a/tests/local_MeteoFrance.sh b/tests/local_MeteoFrance.sh
new file mode 100755
index 0000000..1f7fc20
--- /dev/null
+++ b/tests/local_MeteoFrance.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+exec ${test_dir}/local_MeteoFrance
diff --git a/tests/metar_compare.sh b/tests/metar_compare.sh
new file mode 100755
index 0000000..f214c41
--- /dev/null
+++ b/tests/metar_compare.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+#set -x
+
+#Enter data dir
+cd ${data_dir}/metar
+
+#Define a common label for all the tmp files
+label="metar_compare_test"
+
+#Create log file
+fLog=${label}".log"
+rm -f $fLog
+touch $fLog
+
+#Define tmp METAR file
+fMetarTmp=${label}".metar.tmp"
+
+#----------------------------------------------------
+# Test: comparing same files
+#----------------------------------------------------
+metar_file="metar.txt"
+echo "Test: comparing the same files" >> $fLog
+echo "file: $metar_file" >> $fLog
+${tools_dir}/metar_compare $metar_file $metar_file
+
+#----------------------------------------------------
+# Test: comparing two different files
+#----------------------------------------------------
+sed -e 's:^METAR VECC 022350Z 00000KT 1600 BR NSC 15/13 Q1013 NOSIG:METAR VECC 022349Z 00000KT 1600 BR NSC 15/13 Q1013 NOSIG:' < metar.txt > $fMetarTmp
+set +e
+${tools_dir}/metar_compare $metar_file $fMetarTmp
+status=$?
+set -e
+if [ $status -eq 0 ]; then
+   echo "metar_compare should have failed if files are different" >&2
+   exit 1
+fi
+
+#----------------------------------------------------
+# Test: comparing with and witout the -b switch
+#----------------------------------------------------
+# ${tools_dir}/metar_compare -b GG $metar_file $fMetarTmp >> $fLog
+
+#Clean up
+rm -f $fLog $fMetarTmp
diff --git a/tests/metar_get.sh b/tests/metar_get.sh
new file mode 100755
index 0000000..88d43bd
--- /dev/null
+++ b/tests/metar_get.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+# 
+# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+#
+
+. ./include.sh
+
+#Enter data dir
+cd ${data_dir}/metar
+
+#Define a common label for all the tmp files
+label="metar_get_test"
+
+#Create log file
+fLog=${label}".log"
+rm -f $fLog
+touch $fLog
+
+#Define tmp file
+fTmp=${label}".tmp.txt"
+rm -f $fTmp
+
+#----------------------------------------------
+# Test default "ls" on all the metar data files
+#----------------------------------------------
+metar_file=metar.txt
+export METAR_YEAR=2015
+export METAR_MONTH=4
+
+${tools_dir}metar_get -n ls $metar_file >/dev/null
+${tools_dir}metar_get -w count=1/2/3 -p CCCC,latitude,longitude,dateTime,elevation,temperature,dewPointTemperature,qnh $metar_file
+
+rm -f $fLog
diff --git a/tests/mybufrdc_ref.sh b/tests/mybufrdc_ref.sh
index cd37f0c..cc4bdbb 100755
--- a/tests/mybufrdc_ref.sh
+++ b/tests/mybufrdc_ref.sh
@@ -28,7 +28,7 @@ do
   rm -f $res_num | true
 
   set +e
-  ${tools_dir}bufr_filter bufrdc_num_ref.filter $file 2> $REDIRECT > $res_num
+  ${tools_dir}codes_bufr_filter bufrdc_num_ref.filter $file 2> $REDIRECT > $res_num
   if [ $? != 0 ]
   then
     mv $file $file.no
diff --git a/tests/set.sh b/tests/set.sh
index 939d3cd..388a8d1 100755
--- a/tests/set.sh
+++ b/tests/set.sh
@@ -53,9 +53,24 @@ centre=`${tools_dir}grib_get -p centre:l $outfile`
 [ $centre -eq 80 ]
 
 set +e
-
+# This is expected to fail
 ${tools_dir}grib_set -p levtype $infile $outfile 2> $REDIRECT > $REDIRECT
-
 [ $? -ne 0 ]
+set -e
+
+# GRIB-941: encoding of grib2 angles
+angleInDegrees=130.9989
+angleInMicroDegrees=130998900
+files="GRIB2.tmpl regular_gg_pl_grib2.tmpl reduced_gg_pl_320_grib2.tmpl polar_stereographic_pl_grib2.tmpl"
+for f in $files; do
+    f=$ECCODES_SAMPLES_PATH/$f
+    ${tools_dir}grib_set -s longitudeOfFirstGridPointInDegrees=$angleInDegrees $f $outfile
+    grib_check_key_equals $outfile longitudeOfFirstGridPoint $angleInMicroDegrees
+done
+
+# GRIB-943: centre code table
+${tools_dir}grib_set -s centre=289 $ECCODES_SAMPLES_PATH/GRIB2.tmpl $outfile
+${tools_dir}grib_dump -O $outfile | grep -q 'centre = 289.*Zambia'
+
 
 rm -f $outfile || true
diff --git a/tests/uerra.sh b/tests/uerra.sh
index 5e82936..40629ad 100755
--- a/tests/uerra.sh
+++ b/tests/uerra.sh
@@ -40,7 +40,7 @@ test_stream_and_type()
 
     ${tools_dir}grib_set -s typeOfProcessedData=0 $tempSample $temp1
     grib_check_key_equals $temp1 'mars.type' 'an'
-    ${tools_dir}grib_set -s typeOfProcessedData=2 $tempSample $temp1
+    ${tools_dir}grib_set -s typeOfProcessedData=1 $tempSample $temp1
     grib_check_key_equals $temp1 'mars.type' 'fc'
 
     ${tools_dir}grib_set -s marsStream=enda $tempSample $temp1    # ENSEMBLE
diff --git a/tests/unit_tests.sh b/tests/unit_tests.sh
index 4cc2668..8611aed 100755
--- a/tests/unit_tests.sh
+++ b/tests/unit_tests.sh
@@ -10,5 +10,4 @@
 
 
 . ./include.sh
-${test_dir}/unit_tests
-
+exec ${test_dir}/unit_tests
diff --git a/tests/utils.sh b/tests/utils.sh
index 269c89e..cf3934b 100644
--- a/tests/utils.sh
+++ b/tests/utils.sh
@@ -17,17 +17,23 @@ set -ea
 # several lines
 grib_check_key_equals()
 {
-   file=$1
-   key=$2
-   val=$3
-   result=`${tools_dir}grib_get -p $key $file`
-   [ "$result" = "$val" ]
+   a_file=$1
+   a_key=$2
+   a_expected=$3
+   a_result=`${tools_dir}grib_get -p $a_key $a_file`
+   if [ "$a_result" != "$a_expected" ]; then
+      echo "File:     $a_file"
+      echo "Key(s):   $a_key"
+      echo "Expected: $a_expected"
+      echo "Result:   $a_result"
+      exit 1
+   fi
 }
 
 grib_check_key_exists()
 {
-   file=$1
-   key=$2
+   a_file=$1
+   a_key=$2
    # grib_get will fail if the key is not found
-   $tools_dir/grib_get -p $key $file >/dev/null
+   $tools_dir/grib_get -p $a_key $a_file >/dev/null
 }
diff --git a/tigge/tigge_check.c b/tigge/tigge_check.c
index e9efae4..94a9b9f 100755
--- a/tigge/tigge_check.c
+++ b/tigge/tigge_check.c
@@ -56,6 +56,7 @@ struct parameter {
 static void point_in_time(grib_handle*,const parameter*,double,double);
 static void statistical_process(grib_handle*,const parameter*,double,double);
 static void six_hourly(grib_handle*,const parameter*,double,double);
+static void since_prev_pp(grib_handle*,const parameter*,double,double);
 static void three_hourly(grib_handle* h,const parameter* p,double min,double max);
 static void from_start(grib_handle*,const parameter*,double,double);
 static void daily_average(grib_handle*,const parameter*,double,double);
@@ -65,6 +66,7 @@ static void predefined_thickness(grib_handle*,const parameter*,double,double);
 static void given_thickness(grib_handle*,const parameter*,double,double);
 static void has_bitmap(grib_handle*,const parameter*,double,double);
 
+static void height_level(grib_handle*,const parameter*,double,double);
 static void pressure_level(grib_handle*,const parameter*,double,double);
 static void potential_temperature_level(grib_handle*,const parameter*,double,double);
 static void potential_vorticity_level(grib_handle*,const parameter*,double,double);
@@ -86,9 +88,10 @@ int valueflg = 0;
 const char* param = "unknown";
 int warnflg = 0;
 int zeroflg = 0;
-int is_lam =0;
-int is_s2s =0;
-int is_s2s_refcst =0;
+int is_lam = 0;
+int is_s2s = 0;
+int is_s2s_refcst = 0;
+int is_uerra = 0;
 
 const char* good = NULL;
 const char* bad = NULL;
@@ -96,7 +99,7 @@ const char* bad = NULL;
 FILE* fgood = NULL;
 FILE* fbad  = NULL;
 
-void check(const char* name,int a)
+static void check(const char* name,int a)
 {
     if(!a) {
         printf("%s, field %d [%s]: %s failed\n",file,field,param,name);
@@ -104,15 +107,17 @@ void check(const char* name,int a)
     }
 }
 
-void warn(const char* name,int a)
+/*
+static void warn(const char* name,int a)
 {
     if(!a) {
         printf("%s, field %d [%s]: %s failed\n",file,field,param,name);
         warning++;
     }
 }
+*/
 
-void save(grib_handle* h, const char *name,FILE* f)
+static void save(grib_handle* h, const char *name,FILE* f)
 {
     size_t size;
     const void *buffer;
@@ -133,7 +138,7 @@ void save(grib_handle* h, const char *name,FILE* f)
     }
 }
 
-long get(grib_handle *h,const char* what)
+static long get(grib_handle *h,const char* what)
 {
     int e; long val;
     if((e = grib_get_long(h,what,&val)) != GRIB_SUCCESS)
@@ -145,7 +150,7 @@ long get(grib_handle *h,const char* what)
     return val;
 }
 
-double dget(grib_handle *h,const char* what)
+static double dget(grib_handle *h,const char* what)
 {
     int e; double val;
     if((e = grib_get_double(h,what,&val)) != GRIB_SUCCESS)
@@ -157,28 +162,28 @@ double dget(grib_handle *h,const char* what)
     return val;
 }
 
-int missing(grib_handle *h,const char* what)
+static int missing(grib_handle *h,const char* what)
 {
     int err=0;
     return grib_is_missing(h,what,&err);
 }
 
-int eq(grib_handle *h,const char* what,long value)
+static int eq(grib_handle *h,const char* what,long value)
 {
     return get(h,what) == value;
 }
 
-int ne(grib_handle *h,const char* what,long value)
+static int ne(grib_handle *h,const char* what,long value)
 {
     return get(h,what) != value;
 }
 
-int ge(grib_handle *h,const char* what,long value)
+static int ge(grib_handle *h,const char* what,long value)
 {
     return get(h,what) >= value;
 }
 
-int le(grib_handle *h,const char* what,long value)
+static int le(grib_handle *h,const char* what,long value)
 {
     return get(h,what) <= value;
 }
@@ -188,7 +193,7 @@ static int DBL_EQUAL(double d1, double d2, double tolerance)
     return fabs(d1-d2) <= tolerance;
 }
 
-void gaussian_grid(grib_handle* h)
+static void gaussian_grid(grib_handle* h)
 {
     const double tolerance = 1.0/1000000.0; /* angular tolerance for grib2: micro degrees */
     long n = get(h,"numberOfParallelsBetweenAPoleAndTheEquator"); /* This is the key N */
@@ -238,7 +243,7 @@ void gaussian_grid(grib_handle* h)
     if(missing(h,"numberOfPointsAlongAParallel"))   /* same as key Ni */
     {
         /* If missing, this is a REDUCED gaussian grid */
-        const long MAXIMUM_RESOLUTION = 320;
+        const long MAXIMUM_RESOLUTION = 640;
         CHECK(get(h,"PLPresent"));
         CHECK(DBL_EQUAL(west, 0.0, tolerance));
         if (n > MAXIMUM_RESOLUTION) {
@@ -249,8 +254,8 @@ void gaussian_grid(grib_handle* h)
     else
     {
         /* REGULAR gaussian grid */
-        long west = get(h,"longitudeOfFirstGridPoint");
-        long east = get(h,"longitudeOfLastGridPoint");
+        long l_west = get(h,"longitudeOfFirstGridPoint");
+        long l_east = get(h,"longitudeOfLastGridPoint");
         long parallel = get(h,"numberOfPointsAlongAParallel");
         long we = get(h,"iDirectionIncrement");
         double dwest  = dget(h,"longitudeOfFirstGridPointInDegrees");
@@ -258,7 +263,7 @@ void gaussian_grid(grib_handle* h)
         double dwe = dget(h,"iDirectionIncrementInDegrees");
         /*printf("parallel=%ld east=%ld west=%ld we=%ld\n",parallel,east,west,we);*/
 
-        CHECK(parallel == (east-west)/we + 1);
+        CHECK(parallel == (l_east-l_west)/we + 1);
         CHECK(fabs((deast-dwest)/dwe + 1 - parallel) < 1e-10);
         CHECK(!get(h,"PLPresent"));
     }
@@ -267,15 +272,15 @@ void gaussian_grid(grib_handle* h)
 
     if(get(h,"PLPresent")) {
         size_t count, i, nPl;
-        int e = grib_get_size(h,"pl",&count);
+        int err_code = grib_get_size(h,"pl",&count);
         double *pl;
         double expected_lon2 = 0;
         long total, max_pl = 0;
         long numberOfValues = get(h,"numberOfValues");
         long numberOfDataPoints = get(h,"numberOfDataPoints");
 
-        if(e) {
-            printf("%s, field %d [%s]: cannot number of pl: %s\n",file,field,param,grib_get_error_message(e));
+        if(err_code) {
+            printf("%s, field %d [%s]: cannot number of pl: %s\n",file,field,param,grib_get_error_message(err_code));
             error++;
             return;
         }
@@ -284,9 +289,9 @@ void gaussian_grid(grib_handle* h)
         CHECK(pl != NULL);
 
         nPl = count;
-        if((e =  grib_get_double_array(h,"pl",pl,&count)))
+        if((err_code =  grib_get_double_array(h,"pl",pl,&count)))
         {
-            printf("%s, field %d [%s]: cannot get pl: %s\n",file,field,param,grib_get_error_message(e));
+            printf("%s, field %d [%s]: cannot get pl: %s\n",file,field,param,grib_get_error_message(err_code));
             free(pl);
             error++;
             return;
@@ -363,6 +368,24 @@ static void point_in_time(grib_handle* h,const parameter* p,double min,double ma
 {
     switch(get(h,"typeOfProcessedData"))
     {
+    case 0: /* Analysis */
+        if (is_uerra)
+            CHECK(eq(h,"productDefinitionTemplateNumber",0)||eq(h,"productDefinitionTemplateNumber",1));
+        if (get(h,"productDefinitionTemplateNumber") == 1){
+            CHECK(ne(h,"numberOfForecastsInEnsemble",0));
+            CHECK(le(h,"perturbationNumber",get(h,"numberOfForecastsInEnsemble")));
+        }
+        break;
+
+    case 1: /* Forecast */
+        if (is_uerra)
+            CHECK(eq(h,"productDefinitionTemplateNumber",0)||eq(h,"productDefinitionTemplateNumber",1));
+        if (get(h,"productDefinitionTemplateNumber") == 1){
+            CHECK(ne(h,"numberOfForecastsInEnsemble",0));
+            CHECK(le(h,"perturbationNumber",get(h,"numberOfForecastsInEnsemble")));
+        }
+        break;
+
     case 2: /* Analysis and forecast products */
         CHECK(eq(h,"productDefinitionTemplateNumber",0));
         break;
@@ -373,7 +396,8 @@ static void point_in_time(grib_handle* h,const parameter* p,double min,double ma
         if (is_s2s_refcst)
             CHECK(eq(h,"productDefinitionTemplateNumber",60));
         else if (is_s2s)
-            CHECK(eq(h,"productDefinitionTemplateNumber",60)||eq(h,"productDefinitionTemplateNumber",11)||eq(h,"productDefinitionTemplateNumber",1));
+          /*CHECK(eq(h,"productDefinitionTemplateNumber",60)||eq(h,"productDefinitionTemplateNumber",11)||eq(h,"productDefinitionTemplateNumber",1));*/
+            CHECK(eq(h,"productDefinitionTemplateNumber",1));
         else
             CHECK(eq(h,"productDefinitionTemplateNumber",1));
         break;
@@ -384,7 +408,8 @@ static void point_in_time(grib_handle* h,const parameter* p,double min,double ma
         if (is_s2s_refcst)
             CHECK(eq(h,"productDefinitionTemplateNumber",60));
         else if (is_s2s)
-            CHECK(eq(h,"productDefinitionTemplateNumber",60)||eq(h,"productDefinitionTemplateNumber",11)||eq(h,"productDefinitionTemplateNumber",1));
+          /*CHECK(eq(h,"productDefinitionTemplateNumber",60)||eq(h,"productDefinitionTemplateNumber",11)||eq(h,"productDefinitionTemplateNumber",1));*/
+            CHECK(eq(h,"productDefinitionTemplateNumber",1));
         else
             CHECK(eq(h,"productDefinitionTemplateNumber",1));
         if (is_lam) {
@@ -401,52 +426,98 @@ static void point_in_time(grib_handle* h,const parameter* p,double min,double ma
         break;
     }
 
-    if (!is_lam)
+    if (is_uerra)
     {
-        if(get(h,"indicatorOfUnitOfTimeRange") == 11) /*  six hours */
+        if(get(h,"indicatorOfUnitOfTimeRange") == 1) /*  hourly */
         {
-            /* Six hourly is OK */
+            CHECK((eq(h,"forecastTime",1)||eq(h,"forecastTime",2)||eq(h,"forecastTime",4)||eq(h,"forecastTime",5))||(get(h,"forecastTime") % 3) == 0);
+        }
+    }
+    else if (is_lam) {
+        if(get(h,"indicatorOfUnitOfTimeRange") == 10 ) /*  three hours */
+        {
+            /* Three hourly is OK */
             ;
         }
         else
         {
             CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */
-            CHECK((get(h,"forecastTime") % 6) == 0);  /* Every six hours */
+            CHECK((get(h,"forecastTime") % 3) == 0);  /* Every three hours */
         }
-    }
-    else
-    {
-        if(get(h,"indicatorOfUnitOfTimeRange") == 10 ) /*  three hours */
+    } else {
+        if(get(h,"indicatorOfUnitOfTimeRange") == 11) /*  six hours */
         {
-            /* Three hourly is OK */
+            /* Six hourly is OK */
             ;
         }
         else
         {
             CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */
-            CHECK((get(h,"forecastTime") % 3) == 0);  /* Every three hours */
+            CHECK((get(h,"forecastTime") % 6) == 0);  /* Every six hours */
         }
     }
 
     check_range(h,p,min,max);
 }
 
-static void pressure_level(grib_handle* h,const parameter* p,double min,double max)
+static void height_level(grib_handle* h,const parameter* p,double min,double max)
 {
     long level = get(h,"level");
 
-    if (!is_s2s){
+    if (is_uerra){
         switch(level)
         {
-        case 1000:
+        case   15:
+        case   30:
+        case   50:
+        case   75:
+        case  100:
+        case  150:
         case  200:
         case  250:
         case  300:
+        case  400:
         case  500:
-        case  700:
-        case  850:
+            break;
+        default:
+            printf("%s, field %d [%s]: invalid height level %ld\n",file,field,param,level);
+            error++;
+            break;
+        }
+    }
+}
+
+static void pressure_level(grib_handle* h,const parameter* p,double min,double max)
+{
+    long level = get(h,"level");
+
+    if (is_uerra){
+        switch(level)
+        {
+        case 1000:
+        case  975:
+        case  950:
         case  925:
+        case  900:
+        case  875:
+        case  850:
+        case  825:
+        case  800:
+        case  750:
+        case  700:
+        case  600:
+        case  500:
+        case  400:
+        case  300:
+        case  250:
+        case  200:
+        case  150:
+        case  100:
+        case   70:
         case  50:
+        case   30:
+        case   20:
+        case   10:
             break;
         default:
             printf("%s, field %d [%s]: invalid pressure level %ld\n",file,field,param,level);
@@ -454,8 +525,7 @@ static void pressure_level(grib_handle* h,const parameter* p,double min,double m
             break;
         }
     }
-    else
-    {
+    else if (is_s2s){
         switch(level)
         {
         case 1000:
@@ -474,6 +544,24 @@ static void pressure_level(grib_handle* h,const parameter* p,double min,double m
             error++;
             break;
         }
+    } else {
+        switch(level)
+        {
+        case 1000:
+        case  200:
+        case  250:
+        case  300:
+        case  500:
+        case  700:
+        case  850:
+        case  925:
+        case  50:
+            break;
+        default:
+            printf("%s, field %d [%s]: invalid pressure level %ld\n",file,field,param,level);
+            error++;
+            break;
+        }
     }
 }
 
@@ -511,6 +599,16 @@ static void statistical_process(grib_handle* h,const parameter* p,double min,dou
 {
     switch(get(h,"typeOfProcessedData"))
     {
+    case 0: /* Analysis */
+        if (is_uerra)
+            CHECK(eq(h,"productDefinitionTemplateNumber",8)||eq(h,"productDefinitionTemplateNumber",11));
+        break;
+
+    case 1: /* Forecast */
+        if (is_uerra)
+            CHECK(eq(h,"productDefinitionTemplateNumber",8)||eq(h,"productDefinitionTemplateNumber",11));
+        break;
+
     case 2: /* Analysis and forecast products */
         CHECK(eq(h,"productDefinitionTemplateNumber",8));
         break;
@@ -536,30 +634,34 @@ static void statistical_process(grib_handle* h,const parameter* p,double min,dou
         break;
     }
 
-    if (!is_lam)
+    if (is_uerra)
     {
-        if(get(h,"indicatorOfUnitOfTimeRange") == 11) /*  six hours */
+        if(get(h,"indicatorOfUnitOfTimeRange") == 1) /*  hourly */
         {
-            /* Six hourly is OK */
+            CHECK((eq(h,"forecastTime",1)||eq(h,"forecastTime",2)||eq(h,"forecastTime",4)||eq(h,"forecastTime",5))||(get(h,"forecastTime") % 3) == 0);
+        }
+    }
+    else if (is_lam) {
+        if(get(h,"indicatorOfUnitOfTimeRange") == 10 ) /*  three hours */
+        {
+            /* Three hourly is OK */
             ;
         }
         else
         {
             CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */
-            CHECK((get(h,"forecastTime") % 6) == 0);  /* Every six hours */
+            CHECK((get(h,"forecastTime") % 3) == 0);  /* Every three hours */
         }
-    }
-    else
+    } else {
+        if(get(h,"indicatorOfUnitOfTimeRange") == 11) /*  six hours */
     {
-        if(get(h,"indicatorOfUnitOfTimeRange") == 10 ) /*  three hours */
-        {
-            /* Three hourly is OK */
+            /* Six hourly is OK */
             ;
         }
         else
         {
             CHECK(eq(h,"indicatorOfUnitOfTimeRange",1));/* Hours */
-            CHECK((get(h,"forecastTime") % 3) == 0);  /* Every three hours */
+            CHECK((get(h,"forecastTime") % 6) == 0);  /* Every six hours */
         }
     }
 
@@ -576,20 +678,24 @@ static void statistical_process(grib_handle* h,const parameter* p,double min,dou
     else
         CHECK(eq(h,"timeIncrementBetweenSuccessiveFields",0));
 
-    {
+    
         CHECK(eq(h,"minuteOfEndOfOverallTimeInterval",0));
         CHECK(eq(h,"secondOfEndOfOverallTimeInterval",0));
 
-        if (!is_lam)
+    if (is_uerra)
         {
-            CHECK((get(h,"endStep") % 6) == 0); /* Every six hours */
+        CHECK((eq(h,"endStep",1)||eq(h,"endStep",2)||eq(h,"endStep",4)||eq(h,"endStep",5))||(get(h,"endStep") % 3) == 0);
         }
-        else
+    else if (is_lam)
         {
             CHECK((get(h,"endStep") % 3) == 0);  /* Every three hours */
         }
+    else
+    {
+        CHECK((get(h,"endStep") % 6) == 0); /* Every six hours */
     }
 
+
     if(get(h,"indicatorOfUnitForTimeRange") == 11)
     {
         /* Six hourly is OK */
@@ -626,6 +732,15 @@ static void six_hourly(grib_handle* h,const parameter* p,double min,double max)
     check_range(h,p,min,max);
 }
 
+static void since_prev_pp(grib_handle* h,const parameter* p,double min,double max)
+{
+    statistical_process(h,p,min,max);
+
+    CHECK(eq(h,"indicatorOfUnitForTimeRange",1));
+    CHECK(get(h,"endStep") == get(h,"startStep") + get(h,"lengthOfTimeRange"));
+    check_range(h,p,min,max);
+}
+
 static void three_hourly(grib_handle* h,const parameter* p,double min,double max)
 {
     statistical_process(h,p,min,max);
@@ -645,8 +760,11 @@ static void from_start(grib_handle* h,const parameter* p,double min,double max)
     statistical_process(h,p,min,max);
     CHECK(eq(h,"startStep",0));
 
-    if(step == 0)
-        CHECK(min == 0 && max == 0);
+    if(step == 0){
+        if(!is_uerra){
+            CHECK(min == 0 && max == 0); /* ??? xxx */
+        }
+    }
     else
     {
         check_range(h,p,min/step,max/step);
@@ -711,7 +829,7 @@ static void given_thickness(grib_handle* h,const parameter* p,double min,double
     CHECK(!missing(h,"scaledValueOfSecondFixedSurface"));
 }
 
-void latlon_grid(grib_handle* h)
+static void latlon_grid(grib_handle* h)
 {
     const double tolerance = 1.0/1000000.0; /* angular tolerance for grib2: micro degrees */
     long data_points = get(h,"numberOfDataPoints");
@@ -824,7 +942,7 @@ void latlon_grid(grib_handle* h)
 
 #define X(x) printf("%s=%ld ",#x,get(h,#x))
 
-void check_parameter(grib_handle* h,double min,double max)
+static void check_parameter(grib_handle* h,double min,double max)
 {
     int err;
     int best = -1;
@@ -849,6 +967,10 @@ void check_parameter(grib_handle* h,double min,double max)
             else if (ktype == GRIB_TYPE_STRING) {
                 char strval[256]={0,};
                 size_t len = 256;
+                if (is_uerra && strcasecmp(parameters[i].pairs[j].key,"model")==0) {
+                    /* printf("Skipping model keyword for UERRA class\n"); */
+                    matches++; /*xxx hack to pretend that model key was matched.. */
+                } else {
                 if (strcasecmp(parameters[i].pairs[j].value_string,"MISSING")==0) {
                     int is_miss = grib_is_missing(h, parameters[i].pairs[j].key, &err);
                     if (err == GRIB_SUCCESS && is_miss) {
@@ -861,6 +983,7 @@ void check_parameter(grib_handle* h,double min,double max)
                     }
                 }
             }
+            }
             else {
                 assert(!"Unknown key type");
             }
@@ -909,18 +1032,18 @@ void check_parameter(grib_handle* h,double min,double max)
         X(discipline);
         X(parameterCategory);
         X(parameterNumber);
+        X(typeOfFirstFixedSurface);
         X(scaleFactorOfFirstFixedSurface);
-        X(scaleFactorOfSecondFixedSurface);
         X(scaledValueOfFirstFixedSurface);
-        X(scaledValueOfSecondFixedSurface);
-        X(typeOfFirstFixedSurface);
         X(typeOfSecondFixedSurface);
+        X(scaleFactorOfSecondFixedSurface);
+        X(scaledValueOfSecondFixedSurface);
         printf("\n");
         error++;
     }
 }
 
-void verify(grib_handle* h)
+static void verify(grib_handle* h)
 {
     double min = 0,max = 0;
 
@@ -1026,28 +1149,41 @@ void verify(grib_handle* h)
     CHECK(eq(h,"second",0));
     CHECK(ge(h,"startStep",0));
 
-    if (!is_s2s){
+    if (is_s2s){
+        CHECK(eq(h,"productionStatusOfProcessedData",6)||eq(h,"productionStatusOfProcessedData",7)); /*  S2S prod||test */
+        CHECK(le(h,"endStep",100*24));
+    }
+    else if (!is_uerra)
+    {
         CHECK(eq(h,"productionStatusOfProcessedData",4)||eq(h,"productionStatusOfProcessedData",5)); /*  TIGGE prod||test */
         CHECK(le(h,"endStep",30*24));
     }
-    else
+
+    else if (is_lam){
+        CHECK((get(h,"step") % 3) == 0);
+    }
+    else if (!is_uerra)
     {
-        CHECK(eq(h,"productionStatusOfProcessedData",6)||eq(h,"productionStatusOfProcessedData",7)); /*  S2S prod||test */
-        CHECK(le(h,"endStep",100*24));
+        CHECK((get(h,"step") % 6) == 0);
     }
 
-    if (!is_lam){
-        CHECK((get(h,"step") % 6) == 0);
+    if (is_uerra){
+        CHECK(eq(h,"productionStatusOfProcessedData",8)||eq(h,"productionStatusOfProcessedData",9)); /*  UERRA prod||test */
+        CHECK(le(h,"endStep",30));
+        /* 0 = analysis , 1 = forecast */
+        CHECK(eq(h,"typeOfProcessedData",0)||eq(h,"typeOfProcessedData",1));
+        if (get(h,"typeOfProcessedData") == 0)
+            CHECK(eq(h,"step",0));
+        else
+            CHECK((eq(h,"step",1)||eq(h,"step",2)||eq(h,"step",4)||eq(h,"step",5))||(get(h,"step") % 3) == 0);
     }
     else
     {
-        CHECK((get(h,"step") % 3) == 0);
+        /* 2 = analysis or forecast , 3 = control forecast, 4 = perturbed forecast */
+        CHECK(eq(h,"typeOfProcessedData",2)||eq(h,"typeOfProcessedData",3)||eq(h,"typeOfProcessedData",4));
     }
 
-    /* 2 = analysis or forecast , 3 = control forecast, 4 = perturbed forecast */
-    CHECK(eq(h,"typeOfProcessedData",2)||eq(h,"typeOfProcessedData",3)||eq(h,"typeOfProcessedData",4));
-
-    /* TODO: validate local usage. Empty for now */
+    /* TODO: validate local usage. Empty for now xxx*/
     /* CHECK(eq(h,"section2.sectionLength",5)); */
 
     /* Section 3 */
@@ -1061,6 +1197,11 @@ void verify(grib_handle* h)
         latlon_grid(h);
         break;
 
+    case 30: /*Lambert conformal*/
+      /*lambert_grid(h); # TODO xxx
+        printf("warning: Lambert grid - geometry checking not implemented yet!\n"); */
+        break;
+
     case 40: /* gaussian grid (regular or reduced) */
         gaussian_grid(h);
         break;
@@ -1093,7 +1234,7 @@ void verify(grib_handle* h)
 
 }
 
-void validate(const char* path)
+static void validate(const char* path)
 {
     FILE *f = fopen(path,"r");
     grib_handle *h = 0;
@@ -1142,7 +1283,7 @@ void validate(const char* path)
     }
 }
 
-void scan(const char* name)
+static void scan(const char* name)
 {
     DIR *dir;
     if((dir = opendir(name)) != NULL)
@@ -1162,7 +1303,7 @@ void scan(const char* name)
         validate(name);
 }
 
-void usage()
+static void usage()
 {
     printf("tigge_check [options] grib_file grib_file ...\n");
     printf("   -l: check local area model fields\n");
@@ -1176,7 +1317,7 @@ void usage()
     exit(1);
 }
 
-int main(int argc,const char** argv)
+int main(int argc, char** argv)
 {
     int i;
     int err = 0;
@@ -1225,6 +1366,10 @@ int main(int argc,const char** argv)
                 is_s2s_refcst=1;
                 break;
 
+            case 'u':
+                is_uerra=1;
+                break;
+
             default:
                 usage();
                 break;
diff --git a/tigge/tigge_check.h b/tigge/tigge_check.h
index 2a43aa9..a708a0b 100644
--- a/tigge/tigge_check.h
+++ b/tigge/tigge_check.h
@@ -53,9 +53,6 @@ parameter parameters[] = {
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
 
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -87,9 +84,6 @@ parameter parameters[] = {
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
 
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -137,9 +131,6 @@ parameter parameters[] = {
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
 
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -170,9 +161,6 @@ parameter parameters[] = {
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
 
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -217,12 +205,7 @@ parameter parameters[] = {
          {"parameterNumber", GRIB_TYPE_LONG, 6},
 
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-
          {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &predefined_thickness},
@@ -245,12 +228,7 @@ parameter parameters[] = {
          {"parameterNumber", GRIB_TYPE_LONG, 6},
 
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-
          {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &predefined_thickness},
@@ -299,12 +277,7 @@ parameter parameters[] = {
          {"parameterNumber", GRIB_TYPE_LONG, 7},
 
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-
          {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &predefined_thickness},
@@ -369,12 +342,6 @@ parameter parameters[] = {
          {"parameterNumber", GRIB_TYPE_LONG, 0},
 
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &predefined_level},
@@ -397,34 +364,6 @@ parameter parameters[] = {
          {"parameterNumber", GRIB_TYPE_LONG, 0},
 
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {NULL, },
-      },
-      {&point_in_time, &predefined_level},
-   },
-
-
-   {
-      "orography_sfc.glob",
-      -1300,
-      0,
-      2000,
-      8888,
-      {
-         {"model", GRIB_TYPE_STRING, 0, "glob"},
-
-         {"paramId", GRIB_TYPE_LONG, 228002},
-
-         {"discipline", GRIB_TYPE_LONG, 0},
-         {"parameterCategory", GRIB_TYPE_LONG, 3},
-         {"parameterNumber", GRIB_TYPE_LONG, 5},
-
-         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
       {&point_in_time, &predefined_level},
@@ -436,27 +375,17 @@ parameter parameters[] = {
 */
 
    {
-      "orography_sfc.lam",
+      "orography_sfc",
       -1300,
       0,
       1000,
       8888,
       {
-        {"model", GRIB_TYPE_STRING, 0, "lam"},
-
         {"paramId", GRIB_TYPE_LONG, 228002},
-
         {"discipline", GRIB_TYPE_LONG, 0},
         {"parameterCategory", GRIB_TYPE_LONG, 3},
         {"parameterNumber", GRIB_TYPE_LONG, 5},
-
         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-        {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-        {"scaledValueOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-
-        {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-        {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-        {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
         {NULL, },
       },
       {&point_in_time, &predefined_level},
@@ -674,10 +603,6 @@ mogreps in the past -> min <180, 290>
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 2},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -702,10 +627,6 @@ mogreps in the past -> min <180, 290>
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 15},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -735,10 +656,6 @@ mogreps in the past -> min <180, 290>
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 2},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -764,10 +681,6 @@ mogreps in the past -> min <180, 290>
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 15},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -1072,12 +985,6 @@ s2s/ammc: warning: s2s.mx2t6_20151224_26.grib2, field 47 [surface_air_maximum_te
          {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
 
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&from_start, &predefined_level},
@@ -1129,12 +1036,6 @@ s2s/ammc: warning: s2s.mx2t6_20151224_26.grib2, field 47 [surface_air_maximum_te
          {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
 
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&from_start, &predefined_level},
@@ -1181,7 +1082,6 @@ s2s/ammc: warning: s2s.mx2t6_20151224_26.grib2, field 47 [surface_air_maximum_te
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
 
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
          {NULL, },
       },
       {&three_hourly, &given_level},
@@ -1211,10 +1111,6 @@ s2s/ammc: warning: s2s.mx2t6_20151224_26.grib2, field 47 [surface_air_maximum_te
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&three_hourly, &given_level},
@@ -1252,10 +1148,6 @@ s2s/ammc: warning: s2s.mx2t6_20151224_26.grib2, field 47 [surface_air_maximum_te
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
-
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 255},
-         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
-         {"scaledValueOfSecondFixedSurface", GRIB_TYPE_STRING, 0, "missing"},
          {NULL, },
       },
       {&three_hourly, &given_level},
@@ -1489,9 +1381,6 @@ warning: s2s.z_tigge_c_kwbc_20150817000000_ncep_prod_pf_pl_0000_015_0500_w.grib2
       12,
       {
          {"model", GRIB_TYPE_STRING, 0, "glob"},
-
-         {"paramId", GRIB_TYPE_LONG, 135},
-
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 2},
          {"parameterNumber", GRIB_TYPE_LONG, 8},
@@ -1762,7 +1651,7 @@ warning: s2s.z_tigge_c_kwbc_20090829000000_ncep_prod_pf_sl_0024_003_0000_tcw.gri
    },
 
 /*
-   s2s/rums warning: s2s.z_s2s_c_rhmc_20150819000000_glob_prod_0336_017.sl.grib2, field 4 [surface_air_temperature_sfc.glob]: surface_air_temperature_sfc.glob minimum value 177.17 is not in [180,290]
+s2s/rums warning: s2s.z_s2s_c_rhmc_20150819000000_glob_prod_0336_017.sl.grib2, field 4 [surface_air_temperature_sfc.glob]: surface_air_temperature_sfc.glob minimum value 177.17 is not in [180,290]
 s2s/ammc: warning: s2s.2t_20151224_26.grib2, field 12 [surface_air_temperature_sfc.glob.s2]: surface_air_temperature_sfc.glob.s2 maximum value 353.017 is not in [270,350]
 */
 
@@ -2309,5 +2198,881 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
       {&daily_average, &predefined_level},
    },
 
+/* UERRA */
+   {
+      "high_cloud_cover_sfc",
+      0,
+      1e-10,
+      0.9999,
+      100.00001,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 5},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_thickness},
+   },
+   {
+      "medium_cloud_cover_sfc",
+      0,
+      1e-10,
+      0.9999,
+      100.00001,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 5},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_thickness},
+   },
+   {
+      "medium_cloud_cover_sfc",
+      0,
+      1e-10,
+      0.9999,
+      100.00001,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 4},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_thickness},
+   },
+   {
+      "low_cloud_cover_sfc",
+      0,
+      1e-10,
+      0.9999,
+      100.00001,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 3},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_thickness},
+   },
+   /* uerra model levels */
+   {
+      "pressure_ml",
+      100,
+      100000,
+      100,
+      108000,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+   {
+      "specific_humidity_ml",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+   {
+      "temperature_ml",
+      150,
+      260,
+      200,
+      330,
+      {
+         {"paramId", GRIB_TYPE_LONG, 130},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+   {
+      "u_velocity_ml",
+      -200,
+      1,
+      10,
+      200,
+      {
+         {"paramId", GRIB_TYPE_LONG, 131},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 2},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+   {
+      "v_velocity_ml",
+      -190,
+      -4,
+      4,
+      190,
+      {
+         {"paramId", GRIB_TYPE_LONG, 132},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 3},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+   {
+      "cloud_cover_ml",
+      0,
+      1e-10,
+      100,
+      100.00001,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 22},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+
+   /* pressure level */
+
+   {
+      "geopotential_height_pl.ur",
+      -1300,
+      300000,
+      2000,
+      350000,
+      {
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 5},
+
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &pressure_level},
+   },
+
+   {
+      "specific_cloud_ice_water_content_pl",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 84},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &pressure_level},
+   },
+
+   {
+      "cloud_cover_pl",
+      0,
+      1e-10,
+      100,
+      100.00001,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 22},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &pressure_level},
+   },
+   {
+      "specific_cloud_liquid_water_content_pl",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 83},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &pressure_level},
+   },
+   {
+      "specific_cloud_ice_water_content_ml",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 84},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+   {
+      "specific_cloud_liquid_water_content_ml",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 83},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+   {
+      "relative_humidity_pl",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 157},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 1},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &pressure_level},
+   },
+
+   /* uerra height levels */
+
+   {
+      "cloud_cover_hl",
+      0,
+      1e-10,
+      100,
+      100.00001,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 22},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &height_level},
+   },
+   {
+      "pressure_hl",
+      100,
+      100000,
+      100,
+      108000,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &height_level},
+   },
+   {
+      "specific_cloud_liquid_water_content_hl",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 83},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &height_level},
+   },
+   {
+      "specific_cloud_ice_water_content_hl",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 84},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &height_level},
+   },
+   {
+      "relative_humidity_hl",
+      0,
+      0.005,
+      0.01,
+      1.001,
+      {
+         {"paramId", GRIB_TYPE_LONG, 157},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 1},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &height_level},
+   },
+   {
+      "temperature_hl",
+      150,
+      260,
+      200,
+      330,
+      {
+         {"paramId", GRIB_TYPE_LONG, 130},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &height_level},
+   },
+   {
+      "wind_speed_hl",
+      0.001,
+      10,
+      10,
+      150,
+      {
+         {"paramId", GRIB_TYPE_LONG, 10},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 1},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &height_level},
+   },
+   {
+      "wind_direction_hl",
+      0,
+      0.01,
+      359,
+      360,
+      {
+         {"paramId", GRIB_TYPE_LONG, 3031},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &height_level},
+   },
+
+   /* uerra single level (surface) */
+
+   {
+      "percolation_sfc",
+      -1e+10, /* TBD xxx */
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260430},
+         {"discipline", GRIB_TYPE_LONG, 1},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 16},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+/*     {&from_start, &predefined_level}, xxx typeOfFirstFixedSurface ??? */
+      {&from_start},
+   },
+   {
+      "2_metre_relative_humidity",
+      0,
+      0.3,
+      0.5,
+      1.001,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260242},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 1},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {NULL, },
+      },
+      {&point_in_time, &given_level},
+   },
+   {
+      "surface_runoff",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 174008},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 34},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&from_start, &predefined_level},
+   },
+   {
+      "albedo_sfc",
+      0,
+      5,
+      90,
+      100,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260509},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 19},
+         {"parameterNumber", GRIB_TYPE_LONG, 1},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_level},
+   },
+   {
+      "time_integrated_surface_clear-sky_solar_radiation_downwards",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260423},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 4},
+         {"parameterNumber", GRIB_TYPE_LONG, 52},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&from_start, &predefined_level},
+   },
+   {
+      "time_integrated_surface_clear-sky_solar_radiation_upwards",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260427},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 4},
+         {"parameterNumber", GRIB_TYPE_LONG, 53},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&from_start, &predefined_level},
+   },
+   {
+      "time_integrated_surface_clear-sky_thermal_radiation_downwards",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260428},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 5},
+         {"parameterNumber", GRIB_TYPE_LONG, 8},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&from_start, &predefined_level},
+   },
+   {
+      "time_integrated_surface_direct_solar_radiation",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260264},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 4},
+         {"parameterNumber", GRIB_TYPE_LONG, 13},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&from_start, &predefined_level},
+   },
+   {
+      "10_metre_wind_speed",
+      0.001,
+      10,
+      10,
+      150,
+      {
+         {"paramId", GRIB_TYPE_LONG, 207},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 1},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
+         {NULL, },
+      },
+      {&point_in_time, &given_level},
+   },
+   {
+      "10_metre_wind_direction",
+      0,
+      0.001,
+      359.999,
+      360,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260260},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
+         {NULL, },
+      },
+      {&point_in_time, &given_level},
+   },
+   {
+      "10_metre_wind_gust_uerra", /* TBD xxx Length of time range 1/3/6 checks? */
+      0.001,
+      10,
+      10,
+      150,
+      {
+         {"paramId", GRIB_TYPE_LONG, 49},
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 22},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 2},
+         {NULL, },
+      },
+      {&since_prev_pp, &given_level},
+   },
+   {
+      "2_metre_maximum_temperature_uerra",
+      200,
+      340,
+      200,
+      340,
+      {
+         {"paramId", GRIB_TYPE_LONG, 201},
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 2},
+         {NULL, },
+      },
+      {&since_prev_pp, &given_level},
+   },
+   {
+      "2_metre_minimum_temperature_uerra",
+      200,
+      340,
+      200,
+      340,
+      {
+         {"paramId", GRIB_TYPE_LONG, 202},
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 3},
+         {NULL, },
+      },
+      {&since_prev_pp, &given_level},
+   },
+   {
+      "evaporation_sfc",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260259},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 79},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&from_start, &predefined_level},
+   },
+   {
+      "snow_depth_sfc",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 3066},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 11},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_level},
+   },
+   {
+      "surface_roughness_sfc",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 173},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 1},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_level},
+   },
+   {
+      "liquid_non-frozen_soil_moisture_level",
+      -1e-19,
+      0,
+      450,
+      800,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260210},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 10},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151},
+         {NULL, },
+      },
+      {&point_in_time, &given_level},
+   },
+   {
+      "liquid_non-frozen_soil_moisture_layer",
+      -1e-19,
+      0,
+      450,
+      800,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260210},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 10},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 151},
+         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_thickness},
+   },
+   {
+      "volumetric_soil_moisture_level",
+      -1e-19,
+      0,
+      450,
+      800,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260199},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 25},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151},
+         {NULL, },
+      },
+      {&point_in_time, &given_level},
+   },
+   {
+      "volumetric_soil_moisture_layer",
+      -1e-19,
+      0,
+      450,
+      800,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260199},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 25},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 151},
+         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_thickness},
+   },
+   {
+      "soil_heat_flux_sfc",
+      -1e+10,
+       1e+10,
+      -1e+10,
+       1e+10,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260364},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 26},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_level},
+   },
+   {
+      "soil_temperature_level",
+      200,
+      230,
+      300,
+      350,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260360},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 18},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level},
+   },
+   {
+      "soil_temperature_level",
+      200,
+      230,
+      300,
+      350,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260360},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 18},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level},
+   },
+
+   {
+      "soil_temperature_layer",
+      200,
+      230,
+      300,
+      350,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260360},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 18},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 151},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 151},
+         {"scaleFactorOfSecondFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_thickness},
+   },
+   {
+      "total_column_water_sfc.ur",
+      0,
+      0.5,
+      20,
+      150,
+      {
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 51},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
+         {NULL, },
+      },
+      {&point_in_time, &predefined_thickness},
+   },
+
+   {
+      "w_vertical_velocity_pl",
+      -20,
+      0,
+      0,
+      20,
+      {
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+         {"paramId", GRIB_TYPE_LONG, 135},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 8},
+
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &pressure_level},
+   },
+
 };
 
diff --git a/tigge/tigge_split.c b/tigge/tigge_split.c
index 60f95cb..1f59ac5 100755
--- a/tigge/tigge_split.c
+++ b/tigge/tigge_split.c
@@ -30,8 +30,6 @@
 
 
 #define CHECK(a) check(#a,a)
-#define NUMBER(a) (sizeof(a)/sizeof(a[0]))
-
 
 const char* file = 0;
 int field = 0;
@@ -40,134 +38,128 @@ const char* param = "unknown";
 int print_names = 0;
 int unique      = 0;
 
-void check(const char* name,int a)
+static void check(const char* name,int a)
 {
-	if(!a) {
-		fprintf(stderr,"%s, field %d [%s]: %s failed\n",file,field,param,name);
-		exit(1);
-	}
+    if(!a) {
+        fprintf(stderr,"%s, field %d [%s]: %s failed\n",file,field,param,name);
+        exit(1);
+    }
 }
 
-
-
-
-long get(grib_handle *h,const char* what)
+static long get(grib_handle *h,const char* what)
 {
-	int e; long val;
-	if((e = grib_get_long(h,what,&val)) != GRIB_SUCCESS)
-	{
-		fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e));
-		exit(1);
-		val = -1;
-	}
-	return val;
+    int e; long val;
+    if((e = grib_get_long(h,what,&val)) != GRIB_SUCCESS)
+    {
+        fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e));
+        exit(1);
+        val = -1;
+    }
+    return val;
 }
 
-char* sget(grib_handle *h,const char* what,char* val,size_t size)
+static char* sget(grib_handle *h,const char* what,char* val,size_t size)
 {
-	int e; 
-	if((e = grib_get_string(h,what,val,&size)) != GRIB_SUCCESS)
-	{
-		fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e));
-		exit(1);
-	}
-	return val;
+    int e;
+    if((e = grib_get_string(h,what,val,&size)) != GRIB_SUCCESS)
+    {
+        fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e));
+        exit(1);
+    }
+    return val;
 }
 
-
-double dget(grib_handle *h,const char* what)
+/*
+static double dget(grib_handle *h,const char* what)
 {
-	int e; double val;
-	if((e = grib_get_double(h,what,&val)) != GRIB_SUCCESS)
-	{
-		fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e));
-		exit(1);
-		val = -1;
-	}
-	return val;
+    int e; double val;
+    if((e = grib_get_double(h,what,&val)) != GRIB_SUCCESS)
+    {
+        fprintf(stderr,"%s, field %d [%s]: cannot get %s: %s\n",file,field,param,what,grib_get_error_message(e));
+        exit(1);
+        val = -1;
+    }
+    return val;
 }
 
-int missing(grib_handle *h,const char* what)
+static int missing(grib_handle *h,const char* what)
 {
-	int err=0;
-	return grib_is_missing(h,what,&err);
+    int err=0;
+    return grib_is_missing(h,what,&err);
 }
 
-int eq(grib_handle *h,const char* what,long value)
+static int eq(grib_handle *h,const char* what,long value)
 {
-	return get(h,what) == value;
+    return get(h,what) == value;
 }
 
-int ne(grib_handle *h,const char* what,long value)
+static int ne(grib_handle *h,const char* what,long value)
 {
-	return get(h,what) != value;
+    return get(h,what) != value;
 }
 
-int ge(grib_handle *h,const char* what,long value)
+static int ge(grib_handle *h,const char* what,long value)
 {
-	return get(h,what) >= value;
+    return get(h,what) >= value;
 }
+*/
 
-
-/* 
- */
-
-void split(grib_handle *h)
+static void split(grib_handle *h)
 {
-	char wmo_name[1024];
-	char origin[80];
-	char model[80];
-	char expver[80];
-	char levtype[80];
-	char type[80];
-	char tigge_name[80];
-
-	long level = 0;
-	long number = 0;
-
-	size_t size;
-	const void* buffer;
-	FILE *f;
-
-	sget(h,"type",type,sizeof(type));
-	sget(h,"levtype",levtype,sizeof(levtype));
-
-	if(strcmp(type,"fc") != 0) 
-		number = get(h,"number");
-
-	if(strcmp(levtype,"sfc") == 0) 
-		strcpy(levtype,"sl");
-	else
-		level = get(h,"level");
-
-	sprintf(wmo_name,"z_tigge_c_%s_%08ld%04ld00_%s_%s_%s_%s_%04ld_%03ld_%04ld_%s.grib",
-			sget(h,"origin",origin,sizeof(origin)),
-			get(h,"date"),
-			get(h,"time"),
-			sget(h,"model",model,sizeof(model)),
-			sget(h,"expver",expver,sizeof(expver)),
-			type,
-			levtype,
-			get(h,"endStep"),
-			number,
-			level,
-			sget(h,"tigge_short_name",tigge_name,sizeof(tigge_name))
-
-		   );
-
-	if(print_names) printf("%s\n",wmo_name);
-
-	if(unique)
-	{
-		if(access(wmo_name,F_OK) == 0)
-		{
-			fprintf(stderr,"tigge_split: %s already exists\n",wmo_name);
-			exit(1);
-		}
-	}
-
-	f = fopen(wmo_name,"w");
-	if(!f) { perror(wmo_name); exit(1); }
+    char wmo_name[1024];
+    char origin[80];
+    char model[80];
+    char expver[80];
+    char levtype[80];
+    char type[80];
+    char tigge_name[80];
+
+    long level = 0;
+    long number = 0;
+
+    size_t size;
+    const void* buffer;
+    FILE *f;
+
+    sget(h,"type",type,sizeof(type));
+    sget(h,"levtype",levtype,sizeof(levtype));
+
+    if(strcmp(type,"fc") != 0)
+        number = get(h,"number");
+
+    if(strcmp(levtype,"sfc") == 0)
+        strcpy(levtype,"sl");
+    else
+        level = get(h,"level");
+
+    sprintf(wmo_name,"z_tigge_c_%s_%08ld%04ld00_%s_%s_%s_%s_%04ld_%03ld_%04ld_%s.grib",
+            sget(h,"origin",origin,sizeof(origin)),
+            get(h,"date"),
+            get(h,"time"),
+            sget(h,"model",model,sizeof(model)),
+            sget(h,"expver",expver,sizeof(expver)),
+            type,
+            levtype,
+            get(h,"endStep"),
+            number,
+            level,
+            sget(h,"tigge_short_name",tigge_name,sizeof(tigge_name))
+
+    );
+
+    if(print_names) printf("%s\n",wmo_name);
+
+    if(unique)
+    {
+        if(access(wmo_name,F_OK) == 0)
+        {
+            fprintf(stderr,"tigge_split: %s already exists\n",wmo_name);
+            exit(1);
+        }
+    }
+
+    f = fopen(wmo_name,"w");
+    if(!f) { perror(wmo_name); exit(1); }
 
     CHECK(grib_get_message(h,&buffer,&size) == 0);
 
@@ -176,87 +168,83 @@ void split(grib_handle *h)
         exit(1);
     }
 
-	if(fclose(f)) { perror(wmo_name); exit(1); }
+    if(fclose(f)) { perror(wmo_name); exit(1); }
+}
 
+static void validate(const char* path)
+{
+    FILE *f = fopen(path,"r");
+    grib_handle *h = 0;
+    int err;
+    int count = 0;
 
+    if(!f) {
+        fprintf(stderr,"%s: %s\n",path,strerror(errno));
+        exit(1);
+    }
 
-}
+    while( (h= grib_handle_new_from_file(0,f,&err)) != NULL)
+    {
+        ++field;
+        split(h);
+        grib_handle_delete(h);
+        count++;
+        param = "unknown";
+    }
+    fclose(f);
 
-void validate(const char* path)
-{
-	FILE *f = fopen(path,"r");
-	grib_handle *h = 0;
-	int err;
-	int count = 0;
-
-	if(!f) {
-		fprintf(stderr,"%s: %s\n",path,strerror(errno));
-		exit(1);
-	}
-
-	while( (h= grib_handle_new_from_file(0,f,&err)) != NULL)
-	{
-		++field;
-		split(h);
-		grib_handle_delete(h);
-		count++;
-		param = "unknown";
-	}
-	fclose(f);
-
-	if(err) {
-		fprintf(stderr,"%s: grib_handle_new_from_file: %s\n",path,grib_get_error_message(err));
-		exit(1);
-	}
-
-	if(count == 0) {
-		fprintf(stderr,"%s does not contain any GRIBs\n",path);
-		exit(1);
-	}
+    if(err) {
+        fprintf(stderr,"%s: grib_handle_new_from_file: %s\n",path,grib_get_error_message(err));
+        exit(1);
+    }
 
+    if(count == 0) {
+        fprintf(stderr,"%s does not contain any GRIBs\n",path);
+        exit(1);
+    }
 }
 
-void usage()
+static void usage()
 {
-	printf("tigge_split [-p] files ....\n");
-	printf("   -p: print names of files created\n");
-	exit(1);
+    printf("tigge_split [-p] files ....\n");
+    printf("   -p: print names of files created\n");
+    exit(1);
 }
 
 int main(int argc,const char** argv)
 {
-	int i = 1;
-
-	for(i = 1; i < argc; i++)
-	{
-		if(argv[i][0] == '-')
-		{
-			switch(argv[i][1])
-			{
-				case 'p':
-					print_names++;
-					break;
-
-				case 'u':
-					unique++;
-					break;
-
-				default:
-					usage();
-					break;
-			}
-		}		
-		else
-		{
-			break;
-		}
-	}
-
-	if(i == argc)
-		usage();
-
-	for(; i < argc; i++)
-		validate(argv[i]);
-
-	return 0;
+    int i = 1;
+
+    for(i = 1; i < argc; i++)
+    {
+        if(argv[i][0] == '-')
+        {
+            switch(argv[i][1])
+            {
+            case 'p':
+                print_names++;
+                break;
+
+            case 'u':
+                unique++;
+                break;
+
+            default:
+                usage();
+                break;
+            }
+        }
+        else
+        {
+            break;
+        }
+    }
+
+    if(i == argc)
+        usage();
+
+    for(; i < argc; i++)
+        validate(argv[i]);
+
+    return 0;
 }
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 4aa0ed1..7efefdf 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -1,3 +1,14 @@
+#
+# Copyright 2005-2016 ECMWF.
+#
+# This software is licensed under the terms of the Apache Licence Version 2.0
+# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+#
+# In applying this licence, ECMWF does not waive the privileges and immunities
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
+#
+
 # tools library
 ecbuild_add_library( TARGET    grib_tools
                      TYPE      STATIC
@@ -11,10 +22,10 @@ list( APPEND grib_tools_bins
              grib_histogram grib_filter grib_ls grib_dump grib_merge
              grib2ppm grib_set grib_get grib_get_data grib_copy
              grib_compare codes_parser grib_index_build
-             bufr_filter bufr_ls bufr_dump bufr_set bufr_get
+             bufr_ls bufr_dump bufr_set bufr_get
              bufr_copy bufr_compare bufr_index_build
-             gts_copy gts_dump gts_filter gts_ls
-             metar_dump metar_ls
+             gts_get gts_compare gts_copy gts_dump gts_filter gts_ls
+             metar_dump metar_ls metar_compare metar_get metar_filter metar_copy
              )
 
 list( APPEND grib_tools_bins_EXTRA
@@ -63,6 +74,11 @@ ecbuild_add_executable( TARGET     grib_list_keys
                         CONDITION  ECCODES_INSTALL_EXTRA_TOOLS
                         LIBS       grib_tools  )
 
+ecbuild_add_executable( TARGET     codes_bufr_filter
+                        SOURCES    bufr_filter.c
+                        LIBS       grib_tools  )
+
+
 # grib1to2 script needs to be generated before installation
 if (ECCODES_INSTALL_EXTRA_TOOLS)
     configure_file( grib1to2.in  grib1to2 )
@@ -81,3 +97,15 @@ install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/bufr_compare_dir
                      GROUP_EXECUTE GROUP_READ
                      WORLD_EXECUTE WORLD_READ )
 
+
+# bufr_filter script (See ECC-205)
+execute_process( COMMAND ${CMAKE_COMMAND} -E copy_if_different
+    ${PROJECT_SOURCE_DIR}/tools/bufr_filter
+    ${CMAKE_BINARY_DIR}/bin/ )
+
+install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/bufr_filter
+         DESTINATION ${INSTALL_BIN_DIR}
+         PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
+                     GROUP_EXECUTE GROUP_READ
+                     WORLD_EXECUTE WORLD_READ )
+
diff --git a/tools/Makefile.am b/tools/Makefile.am
index e605334..b92d617 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -17,7 +17,7 @@ bin_PROGRAMS = grib_histogram big2gribex \
                grib2ppm grib_set grib_get grib_get_data grib_copy grib_repair \
                grib_compare grib_list_keys codes_parser grib_count grib_index_build grib1to2 \
                gg_sub_area_check grib_to_netcdf grib_to_json \
-               bufr_count bufr_filter bufr_ls bufr_dump bufr_set bufr_get \
+               bufr_count codes_bufr_filter bufr_ls bufr_dump bufr_set bufr_get \
                bufr_copy bufr_compare bufr_index_build \
                gts_copy gts_dump gts_filter gts_ls \
 							 metar_dump metar_ls
@@ -57,9 +57,9 @@ xref_SOURCES                  =  xref.c
 #compile_SOURCES              =  compile.c
 gaussian_SOURCES              =  gaussian.c
 gg_sub_area_check_SOURCES     =  gg_sub_area_check.c
-grib1to2_SOURCES              = grib1to2.in
+grib1to2_SOURCES              =  grib1to2.in
 
-bufr_filter_SOURCES   = bufr_filter.c
+codes_bufr_filter_SOURCES   = bufr_filter.c
 bufr_ls_SOURCES   = bufr_ls.c
 bufr_dump_SOURCES   = bufr_dump.c
 bufr_set_SOURCES   = bufr_set.c
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 0321e47..bf8ced7 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -90,12 +90,12 @@ bin_PROGRAMS = grib_histogram$(EXEEXT) big2gribex$(EXEEXT) \
 	codes_parser$(EXEEXT) grib_count$(EXEEXT) \
 	grib_index_build$(EXEEXT) grib1to2$(EXEEXT) \
 	gg_sub_area_check$(EXEEXT) grib_to_netcdf$(EXEEXT) \
-	grib_to_json$(EXEEXT) bufr_count$(EXEEXT) bufr_filter$(EXEEXT) \
-	bufr_ls$(EXEEXT) bufr_dump$(EXEEXT) bufr_set$(EXEEXT) \
-	bufr_get$(EXEEXT) bufr_copy$(EXEEXT) bufr_compare$(EXEEXT) \
-	bufr_index_build$(EXEEXT) gts_copy$(EXEEXT) gts_dump$(EXEEXT) \
-	gts_filter$(EXEEXT) gts_ls$(EXEEXT) metar_dump$(EXEEXT) \
-	metar_ls$(EXEEXT)
+	grib_to_json$(EXEEXT) bufr_count$(EXEEXT) \
+	codes_bufr_filter$(EXEEXT) bufr_ls$(EXEEXT) bufr_dump$(EXEEXT) \
+	bufr_set$(EXEEXT) bufr_get$(EXEEXT) bufr_copy$(EXEEXT) \
+	bufr_compare$(EXEEXT) bufr_index_build$(EXEEXT) \
+	gts_copy$(EXEEXT) gts_dump$(EXEEXT) gts_filter$(EXEEXT) \
+	gts_ls$(EXEEXT) metar_dump$(EXEEXT) metar_ls$(EXEEXT)
 noinst_PROGRAMS = gaussian$(EXEEXT) grib_diff$(EXEEXT) \
 	mars_request$(EXEEXT) xref$(EXEEXT) all_keys$(EXEEXT)
 subdir = tools
@@ -154,11 +154,6 @@ bufr_dump_OBJECTS = $(am_bufr_dump_OBJECTS)
 bufr_dump_LDADD = $(LDADD)
 bufr_dump_DEPENDENCIES = libgrib_tools.la \
 	$(top_builddir)/src/libeccodes.la
-am_bufr_filter_OBJECTS = bufr_filter.$(OBJEXT)
-bufr_filter_OBJECTS = $(am_bufr_filter_OBJECTS)
-bufr_filter_LDADD = $(LDADD)
-bufr_filter_DEPENDENCIES = libgrib_tools.la \
-	$(top_builddir)/src/libeccodes.la
 am_bufr_get_OBJECTS = bufr_get.$(OBJEXT)
 bufr_get_OBJECTS = $(am_bufr_get_OBJECTS)
 bufr_get_LDADD = $(LDADD)
@@ -179,6 +174,11 @@ bufr_set_OBJECTS = $(am_bufr_set_OBJECTS)
 bufr_set_LDADD = $(LDADD)
 bufr_set_DEPENDENCIES = libgrib_tools.la \
 	$(top_builddir)/src/libeccodes.la
+am_codes_bufr_filter_OBJECTS = bufr_filter.$(OBJEXT)
+codes_bufr_filter_OBJECTS = $(am_codes_bufr_filter_OBJECTS)
+codes_bufr_filter_LDADD = $(LDADD)
+codes_bufr_filter_DEPENDENCIES = libgrib_tools.la \
+	$(top_builddir)/src/libeccodes.la
 am_codes_count_OBJECTS = codes_count.$(OBJEXT)
 codes_count_OBJECTS = $(am_codes_count_OBJECTS)
 codes_count_LDADD = $(LDADD)
@@ -402,45 +402,45 @@ am__v_CCLD_1 =
 SOURCES = $(libgrib_tools_la_SOURCES) $(all_keys_SOURCES) \
 	$(big2gribex_SOURCES) $(bufr_compare_SOURCES) \
 	$(bufr_copy_SOURCES) $(bufr_count_SOURCES) \
-	$(bufr_dump_SOURCES) $(bufr_filter_SOURCES) \
-	$(bufr_get_SOURCES) $(bufr_index_build_SOURCES) \
-	$(bufr_ls_SOURCES) $(bufr_set_SOURCES) $(codes_count_SOURCES) \
-	$(codes_info_SOURCES) $(codes_parser_SOURCES) \
-	$(gaussian_SOURCES) $(gg_sub_area_check_SOURCES) \
-	$(grib1to2_SOURCES) $(grib2ppm_SOURCES) \
-	$(grib_compare_SOURCES) $(grib_copy_SOURCES) \
-	$(grib_count_SOURCES) $(grib_diff_SOURCES) \
-	$(grib_dump_SOURCES) $(grib_filter_SOURCES) \
-	$(grib_get_SOURCES) $(grib_get_data_SOURCES) \
-	$(grib_histogram_SOURCES) $(grib_index_build_SOURCES) \
-	$(grib_list_keys_SOURCES) $(grib_ls_SOURCES) \
-	$(grib_merge_SOURCES) $(grib_repair_SOURCES) \
-	$(grib_set_SOURCES) $(grib_to_json_SOURCES) \
-	$(grib_to_netcdf_SOURCES) $(gts_copy_SOURCES) \
-	$(gts_dump_SOURCES) $(gts_filter_SOURCES) $(gts_ls_SOURCES) \
-	$(mars_request_SOURCES) $(metar_dump_SOURCES) \
-	$(metar_ls_SOURCES) $(xref_SOURCES)
+	$(bufr_dump_SOURCES) $(bufr_get_SOURCES) \
+	$(bufr_index_build_SOURCES) $(bufr_ls_SOURCES) \
+	$(bufr_set_SOURCES) $(codes_bufr_filter_SOURCES) \
+	$(codes_count_SOURCES) $(codes_info_SOURCES) \
+	$(codes_parser_SOURCES) $(gaussian_SOURCES) \
+	$(gg_sub_area_check_SOURCES) $(grib1to2_SOURCES) \
+	$(grib2ppm_SOURCES) $(grib_compare_SOURCES) \
+	$(grib_copy_SOURCES) $(grib_count_SOURCES) \
+	$(grib_diff_SOURCES) $(grib_dump_SOURCES) \
+	$(grib_filter_SOURCES) $(grib_get_SOURCES) \
+	$(grib_get_data_SOURCES) $(grib_histogram_SOURCES) \
+	$(grib_index_build_SOURCES) $(grib_list_keys_SOURCES) \
+	$(grib_ls_SOURCES) $(grib_merge_SOURCES) \
+	$(grib_repair_SOURCES) $(grib_set_SOURCES) \
+	$(grib_to_json_SOURCES) $(grib_to_netcdf_SOURCES) \
+	$(gts_copy_SOURCES) $(gts_dump_SOURCES) $(gts_filter_SOURCES) \
+	$(gts_ls_SOURCES) $(mars_request_SOURCES) \
+	$(metar_dump_SOURCES) $(metar_ls_SOURCES) $(xref_SOURCES)
 DIST_SOURCES = $(libgrib_tools_la_SOURCES) $(all_keys_SOURCES) \
 	$(big2gribex_SOURCES) $(bufr_compare_SOURCES) \
 	$(bufr_copy_SOURCES) $(bufr_count_SOURCES) \
-	$(bufr_dump_SOURCES) $(bufr_filter_SOURCES) \
-	$(bufr_get_SOURCES) $(bufr_index_build_SOURCES) \
-	$(bufr_ls_SOURCES) $(bufr_set_SOURCES) $(codes_count_SOURCES) \
-	$(codes_info_SOURCES) $(codes_parser_SOURCES) \
-	$(gaussian_SOURCES) $(gg_sub_area_check_SOURCES) \
-	$(grib1to2_SOURCES) $(grib2ppm_SOURCES) \
-	$(grib_compare_SOURCES) $(grib_copy_SOURCES) \
-	$(grib_count_SOURCES) $(grib_diff_SOURCES) \
-	$(grib_dump_SOURCES) $(grib_filter_SOURCES) \
-	$(grib_get_SOURCES) $(grib_get_data_SOURCES) \
-	$(grib_histogram_SOURCES) $(grib_index_build_SOURCES) \
-	$(grib_list_keys_SOURCES) $(grib_ls_SOURCES) \
-	$(grib_merge_SOURCES) $(grib_repair_SOURCES) \
-	$(grib_set_SOURCES) $(grib_to_json_SOURCES) \
-	$(grib_to_netcdf_SOURCES) $(gts_copy_SOURCES) \
-	$(gts_dump_SOURCES) $(gts_filter_SOURCES) $(gts_ls_SOURCES) \
-	$(mars_request_SOURCES) $(metar_dump_SOURCES) \
-	$(metar_ls_SOURCES) $(xref_SOURCES)
+	$(bufr_dump_SOURCES) $(bufr_get_SOURCES) \
+	$(bufr_index_build_SOURCES) $(bufr_ls_SOURCES) \
+	$(bufr_set_SOURCES) $(codes_bufr_filter_SOURCES) \
+	$(codes_count_SOURCES) $(codes_info_SOURCES) \
+	$(codes_parser_SOURCES) $(gaussian_SOURCES) \
+	$(gg_sub_area_check_SOURCES) $(grib1to2_SOURCES) \
+	$(grib2ppm_SOURCES) $(grib_compare_SOURCES) \
+	$(grib_copy_SOURCES) $(grib_count_SOURCES) \
+	$(grib_diff_SOURCES) $(grib_dump_SOURCES) \
+	$(grib_filter_SOURCES) $(grib_get_SOURCES) \
+	$(grib_get_data_SOURCES) $(grib_histogram_SOURCES) \
+	$(grib_index_build_SOURCES) $(grib_list_keys_SOURCES) \
+	$(grib_ls_SOURCES) $(grib_merge_SOURCES) \
+	$(grib_repair_SOURCES) $(grib_set_SOURCES) \
+	$(grib_to_json_SOURCES) $(grib_to_netcdf_SOURCES) \
+	$(gts_copy_SOURCES) $(gts_dump_SOURCES) $(gts_filter_SOURCES) \
+	$(gts_ls_SOURCES) $(mars_request_SOURCES) \
+	$(metar_dump_SOURCES) $(metar_ls_SOURCES) $(xref_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -697,7 +697,7 @@ xref_SOURCES = xref.c
 gaussian_SOURCES = gaussian.c
 gg_sub_area_check_SOURCES = gg_sub_area_check.c
 grib1to2_SOURCES = grib1to2.in
-bufr_filter_SOURCES = bufr_filter.c
+codes_bufr_filter_SOURCES = bufr_filter.c
 bufr_ls_SOURCES = bufr_ls.c
 bufr_dump_SOURCES = bufr_dump.c
 bufr_set_SOURCES = bufr_set.c
@@ -852,10 +852,6 @@ bufr_dump$(EXEEXT): $(bufr_dump_OBJECTS) $(bufr_dump_DEPENDENCIES) $(EXTRA_bufr_
 	@rm -f bufr_dump$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bufr_dump_OBJECTS) $(bufr_dump_LDADD) $(LIBS)
 
-bufr_filter$(EXEEXT): $(bufr_filter_OBJECTS) $(bufr_filter_DEPENDENCIES) $(EXTRA_bufr_filter_DEPENDENCIES) 
-	@rm -f bufr_filter$(EXEEXT)
-	$(AM_V_CCLD)$(LINK) $(bufr_filter_OBJECTS) $(bufr_filter_LDADD) $(LIBS)
-
 bufr_get$(EXEEXT): $(bufr_get_OBJECTS) $(bufr_get_DEPENDENCIES) $(EXTRA_bufr_get_DEPENDENCIES) 
 	@rm -f bufr_get$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bufr_get_OBJECTS) $(bufr_get_LDADD) $(LIBS)
@@ -872,6 +868,10 @@ bufr_set$(EXEEXT): $(bufr_set_OBJECTS) $(bufr_set_DEPENDENCIES) $(EXTRA_bufr_set
 	@rm -f bufr_set$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(bufr_set_OBJECTS) $(bufr_set_LDADD) $(LIBS)
 
+codes_bufr_filter$(EXEEXT): $(codes_bufr_filter_OBJECTS) $(codes_bufr_filter_DEPENDENCIES) $(EXTRA_codes_bufr_filter_DEPENDENCIES) 
+	@rm -f codes_bufr_filter$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(codes_bufr_filter_OBJECTS) $(codes_bufr_filter_LDADD) $(LIBS)
+
 codes_count$(EXEEXT): $(codes_count_OBJECTS) $(codes_count_DEPENDENCIES) $(EXTRA_codes_count_DEPENDENCIES) 
 	@rm -f codes_count$(EXEEXT)
 	$(AM_V_CCLD)$(LINK) $(codes_count_OBJECTS) $(codes_count_LDADD) $(LIBS)
diff --git a/tools/bufr_compare.c b/tools/bufr_compare.c
index 1d90d97..1df0692 100644
--- a/tools/bufr_compare.c
+++ b/tools/bufr_compare.c
@@ -46,8 +46,8 @@ int packingCompare=0;
 grib_string_list* blacklist=0;
 int compareAbsolute=1;
 
-static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options* options);
-static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_handle *h2,const char *name,int type);
+static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runtime_options* options);
+static int compare_values(grib_runtime_options* options, grib_handle* handle1, grib_handle *handle2, const char *name, int type);
 int error=0;
 int count=0;
 int lastPrint=0;
@@ -100,13 +100,13 @@ static void write_message(grib_handle* h,const char* str)
     fclose(fh);
 }
 
-static void write_messages(grib_handle* h1,grib_handle* h2)
+static void write_messages(grib_handle* handle1, grib_handle* handle2)
 {
     if (!write_error) return;
     write_count++;
 
-    write_message(h1,"error1");
-    write_message(h2,"error2");
+    write_message(handle1,"error1");
+    write_message(handle2,"error2");
 }
 
 static double compare_double_relative(double *a,double *b,double *err)
@@ -138,7 +138,6 @@ static int blacklisted(const char* name)
 static double relative_error(double a,double b,double err)
 {
     double relativeError;
-    double maxAbsoluteError = 1e-19;
 
     if(fabs(a) <= maxAbsoluteError || fabs(b) <= maxAbsoluteError)
         relativeError = fabs(a-b);
@@ -177,7 +176,7 @@ grib_option grib_options[]={
                 {"v",0,0,0,1,0}
 };
 
-grib_handle* h1=NULL;
+grib_handle* global_handle=NULL;
 int counter=0;
 int start=-1;
 int end=-1;
@@ -247,13 +246,13 @@ int grib_tool_init(grib_runtime_options* options)
 
     if (grib_options_on("b:")) {
         grib_string_list *next=0;
-        int i=0;
+        int ii=0;
         blacklist=(grib_string_list*)grib_context_malloc_clear(context,sizeof(grib_string_list));
         blacklist->value=grib_context_strdup(context,options->set_values[0].name);
         next=blacklist;
-        for (i=1;i<options->set_values_count;i++) {
+        for (ii=1;ii<options->set_values_count;ii++) {
             next->next=(grib_string_list*)grib_context_malloc_clear(context,sizeof(grib_string_list));
-            next->next->value=grib_context_strdup(context,options->set_values[i].name);
+            next->next->value=grib_context_strdup(context,options->set_values[ii].name);
             next=next->next;
         }
         context->blacklist=blacklist;
@@ -352,10 +351,10 @@ static void printInfo(grib_handle* h)
 
 }
 
-static void print_index_key_values(grib_index* index,int counter,const char* error_message)
+static void print_index_key_values(grib_index* index,int icounter,const char* error_message)
 {
     grib_index_key* keys=index->keys;
-    printf("== %d == ",counter);
+    printf("== %d == ",icounter);
     if (error_message) printf("%s == ",error_message);
     while (keys) {
         printf("%s=%s ",keys->name,keys->value);
@@ -370,7 +369,8 @@ static grib_handle* grib_handle_new_from_file_x(
     return codes_handle_new_from_file(c,f,PRODUCT_BUFR,err);
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
     int err=0;
     count++;
 
@@ -386,7 +386,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
         }
 
         grib_index_search_same(idx1,h);
-        h1=codes_new_from_index(idx1,CODES_BUFR,&err);
+        global_handle=codes_new_from_index(idx1,CODES_BUFR,&err);
         if (options->verbose) {
             off_t offset=0;
             char* filename=grib_get_field_file(options->index2,&offset);
@@ -396,43 +396,43 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
             print_index_key_values(options->index1,counter,NULL);
         }
 
-        if (!h1) {
+        if (!global_handle) {
             if (!options->verbose)
                 print_index_key_values(idx1,counter,"NOT FOUND ");
         }
 
-        if (!h1 || err!= GRIB_SUCCESS ) {
+        if (!global_handle || err!= GRIB_SUCCESS ) {
             morein1++;
-            if (h1) grib_handle_delete(h1);
+            if (global_handle) grib_handle_delete(global_handle);
             return 0;
         }
 
-        if(compare_handles(h,h1,options)) {
+        if(compare_handles(h,global_handle,options)) {
             error++;
             if (!force) exit(1);
         }
 
-        grib_handle_delete(h1);
+        grib_handle_delete(global_handle);
 
         return 0;
 
     } else if (options->random)
-        h1 = grib_fieldset_next_handle(options->idx,&err);
+        global_handle = grib_fieldset_next_handle(options->idx,&err);
     else
-        h1=grib_handle_new_from_file_x(h->context,options->infile_extra->file,options->mode,0,&err);
+        global_handle=grib_handle_new_from_file_x(h->context,options->infile_extra->file,options->mode,0,&err);
 
-    if (!h1 || err!= GRIB_SUCCESS ) {
+    if (!global_handle || err!= GRIB_SUCCESS ) {
         morein2++;
-        if (h1) grib_handle_delete(h1);
+        if (global_handle) grib_handle_delete(global_handle);
         return 0;
     }
 
-    if(compare_handles(h1,h,options)) {
+    if(compare_handles(global_handle,h,options)) {
         error++;
         if (!force) exit(1);
     }
 
-    grib_handle_delete(h1);
+    grib_handle_delete(global_handle);
 
     return 0;
 }
@@ -441,14 +441,12 @@ int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
 {
     int err=0;
     if (!options->through_index && !options->random)  {
-        h1=grib_handle_new_from_file(h->context,options->infile_extra->file,&err);
+        global_handle=grib_handle_new_from_file(h->context,options->infile_extra->file,&err);
 
-        if (!h1 || err!= GRIB_SUCCESS)
+        if (!global_handle || err!= GRIB_SUCCESS)
             morein2++;
 
-        grib_handle_delete(h1);
-
-
+        grib_handle_delete(global_handle);
     }
 
     grib_handle_delete(h);
@@ -474,9 +472,9 @@ int grib_tool_finalise_action(grib_runtime_options* options)
     if (error) {
         printf("\n## ERRORS SUMMARY #######\n");
     }
-    while ((h1=grib_handle_new_from_file(c,options->infile_extra->file,&err))) {
+    while ((global_handle=grib_handle_new_from_file(c,options->infile_extra->file,&err))) {
         morein1++;
-        if (h1) grib_handle_delete(h1);
+        if (global_handle) grib_handle_delete(global_handle);
     }
     if (morein1>0) {
         printf("##\n## Different number of messages \n");
@@ -542,7 +540,7 @@ static void save_error(grib_context* c,const char* key)
     }
 }
 
-static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_handle *h2,const char *name,int type)
+static int compare_values(grib_runtime_options* options, grib_handle* handle1, grib_handle *handle2, const char *name, int type)
 {
     size_t len1 = 0;
     size_t len2 = 0;
@@ -561,30 +559,30 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
     double maxdiff=0;
     double packingError1=0,packingError2=0;
     double value_tolerance=0;
-    grib_context* c=h1->context;
+    grib_context* c=handle1->context;
 
     type1=type;
     type2=type;
     if (verbose) printf("  comparing %s",name);
 
-    if( type1==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h1,name,&type1)) != GRIB_SUCCESS)
+    if( type1==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(handle1,name,&type1)) != GRIB_SUCCESS)
     {
-        printInfo(h1);
+        printInfo(handle1);
         printf("Oops... cannot get type of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
         save_error(c,name);
         return err;
     }
 
-    if(type2==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h2,name,&type2)) != GRIB_SUCCESS)
+    if(type2==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(handle2,name,&type2)) != GRIB_SUCCESS)
     {
         if(err == GRIB_NOT_FOUND)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("[%s] not found in 2nd field\n",name);
             save_error(c,name);
             return err;
         }
-        printInfo(h1);
+        printInfo(handle1);
         printf("Oops... cannot get type of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
         save_error(c,name);
         return err;
@@ -593,7 +591,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
     /*
   if(type1 != type2)
   {
-    printInfo(h1);
+    printInfo(handle1);
     printf("Warning, [%s] has different types: 1st field: [%s], 2nd field: [%s]\n",
         name,grib_get_type_name(type1),grib_get_type_name(type2));
     return GRIB_TYPE_MISMATCH; 
@@ -607,25 +605,25 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
         return err;
 
 
-    if((err = grib_get_size(h1,name,&len1)) != GRIB_SUCCESS)
+    if((err = grib_get_size(handle1,name,&len1)) != GRIB_SUCCESS)
     {
-        printInfo(h1);
+        printInfo(handle1);
         printf("Oops... cannot get size of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
         save_error(c,name);
         return err;
     }
 
-    if((err = grib_get_size(h2,name,&len2)) != GRIB_SUCCESS)
+    if((err = grib_get_size(handle2,name,&len2)) != GRIB_SUCCESS)
     {
         if(err == GRIB_NOT_FOUND)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("[%s] not found in 2nd field\n",name);
             save_error(c,name);
             return err;
         }
 
-        printInfo(h1);
+        printInfo(handle1);
         printf("Oops... cannot get size of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
         save_error(c,name);
         return err;
@@ -634,7 +632,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
     /*
   if(len1 != len2 && type1 != GRIB_TYPE_STRING)
   {
-    printInfo(h1);
+    printInfo(handle1);
     printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2);
     save_error(c,name);
     return GRIB_COUNT_MISMATCH;
@@ -643,8 +641,8 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
 
     if (options->mode != MODE_BUFR) {
         /* TODO: Ignore missing values for keys in BUFR. Not yet implemented */
-        isMissing1= ( (grib_is_missing(h1,name,&err1)==1) && (err1 == 0) ) ? 1 : 0;
-        isMissing2= ( (grib_is_missing(h2,name,&err2)==1) && (err2 == 0) ) ? 1 : 0;
+        isMissing1= ( (grib_is_missing(handle1,name,&err1)==1) && (err1 == 0) ) ? 1 : 0;
+        isMissing2= ( (grib_is_missing(handle2,name,&err2)==1) && (err2 == 0) ) ? 1 : 0;
     }
 
     if ((isMissing1==1) && (isMissing2==1)) {
@@ -654,7 +652,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
 
     if (isMissing1==1) {
         if (verbose) printf(" is set to missing in 1st field\n");
-        printInfo(h1);
+        printInfo(handle1);
         printf("%s is set to missing in 1st field is not missing in 2nd field\n",name);
         err1 = GRIB_VALUE_MISMATCH;
         save_error(c,name);
@@ -663,7 +661,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
 
     if (isMissing2==1) {
         if (verbose) printf(" is set to missing in 1st field\n");
-        printInfo(h1);
+        printInfo(handle1);
         printf("%s is set to missing in 2nd field is not missing in 1st field\n",name);
         err1 = GRIB_VALUE_MISMATCH;
         save_error(c,name);
@@ -674,22 +672,22 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
     {
     case GRIB_TYPE_STRING:
         if (verbose) printf(" as string\n");
-        grib_get_string_length(h1,name,&len1);
-        grib_get_string_length(h2,name,&len2);
-        sval1 = (char*)grib_context_malloc(h1->context,len1*sizeof(char));
-        sval2 = (char*)grib_context_malloc(h2->context,len2*sizeof(char));
+        grib_get_string_length(handle1,name,&len1);
+        grib_get_string_length(handle2,name,&len2);
+        sval1 = (char*)grib_context_malloc(handle1->context,len1*sizeof(char));
+        sval2 = (char*)grib_context_malloc(handle2->context,len2*sizeof(char));
 
-        if((err1 = grib_get_string(h1,name,sval1,&len1)) != GRIB_SUCCESS)
+        if((err1 = grib_get_string(handle1,name,sval1,&len1)) != GRIB_SUCCESS)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("Oops... cannot get string value of [%s] in 1st field: %s\n",
                     name,grib_get_error_message(err1));
             save_error(c,name);
         }
 
-        if((err2 = grib_get_string(h2,name,sval2,&len2)) != GRIB_SUCCESS)
+        if((err2 = grib_get_string(handle2,name,sval2,&len2)) != GRIB_SUCCESS)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("Oops... cannot get string value of [%s] in 2nd field: %s\n",
                     name,grib_get_error_message(err2));
             save_error(c,name);
@@ -699,7 +697,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
         {
             if(grib_inline_strcmp(sval1,sval2) != 0)
             {
-                printInfo(h1);
+                printInfo(handle1);
                 printf("string [%s]: [%s] != [%s]\n",
                         name,sval1,sval2);
                 err1 = GRIB_VALUE_MISMATCH;
@@ -707,8 +705,8 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
             }
         }
 
-        grib_context_free(h1->context,sval1);
-        grib_context_free(h2->context,sval2);
+        grib_context_free(handle1->context,sval1);
+        grib_context_free(handle2->context,sval2);
 
         if(err1) return err1;
         if(err2) return err2;
@@ -718,20 +716,20 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
     case GRIB_TYPE_LONG:
         if (verbose) printf(" as long\n");
 
-        lval1 = (long*)grib_context_malloc(h1->context,len1*sizeof(long));
-        lval2 = (long*)grib_context_malloc(h2->context,len2*sizeof(long));
+        lval1 = (long*)grib_context_malloc(handle1->context,len1*sizeof(long));
+        lval2 = (long*)grib_context_malloc(handle2->context,len2*sizeof(long));
 
-        if((err1 = grib_get_long_array(h1,name,lval1,&len1)) != GRIB_SUCCESS)
+        if((err1 = grib_get_long_array(handle1,name,lval1,&len1)) != GRIB_SUCCESS)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("Oops... cannot get long value of [%s] in 1st field: %s\n",
                     name,grib_get_error_message(err1));
             save_error(c,name);
         }
 
-        if((err2 = grib_get_long_array(h2,name,lval2,&len2)) != GRIB_SUCCESS)
+        if((err2 = grib_get_long_array(handle2,name,lval2,&len2)) != GRIB_SUCCESS)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("Oops... cannot get long value of [%s] in 2nd field: %s\n",
                     name,grib_get_error_message(err2));
             save_error(c,name);
@@ -739,20 +737,20 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
 
         if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1!=len2)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("Different size for \"%s\"  [%ld]  [%ld]\n",name,(long)len1,(long)len2);
             err1=GRIB_INTERNAL_ERROR;
             save_error(c,name);
         }
         if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1==len2)
         {
-            int i;
+            int ii;
             countdiff=0;
-            for(i = 0; i < len1; i++)
-                if(lval1[i] != lval2[i])  countdiff++;
+            for(ii = 0; ii < len1; ii++)
+                if(lval1[ii] != lval2[ii])  countdiff++;
 
             if (countdiff) {
-                printInfo(h1);
+                printInfo(handle1);
                 save_error(c,name);
                 err1 = GRIB_VALUE_MISMATCH;
                 if(len1 == 1)
@@ -765,8 +763,8 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
         }
 
 
-        grib_context_free(h1->context,lval1);
-        grib_context_free(h2->context,lval2);
+        grib_context_free(handle1->context,lval1);
+        grib_context_free(handle2->context,lval2);
 
         if(err1) return err1;
         if(err2) return err2;
@@ -774,8 +772,8 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
 
     case GRIB_TYPE_DOUBLE:
         if (verbose) printf(" as double\n");
-        dval1 = (double*)grib_context_malloc(h1->context,len1*sizeof(double));
-        dval2 = (double*)grib_context_malloc(h2->context,len2*sizeof(double));
+        dval1 = (double*)grib_context_malloc(handle1->context,len1*sizeof(double));
+        dval2 = (double*)grib_context_malloc(handle2->context,len2*sizeof(double));
 
         isangle=0;
         value_tolerance=global_tolerance;
@@ -783,15 +781,15 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
                 || !grib_inline_strcmp(name,"codedValues")) {
             packingError1=0;
             packingError2=0;
-            err1=grib_get_double(h1,"packingError",&packingError1);
-            err2=grib_get_double(h2,"packingError",&packingError2);
+            err1=grib_get_double(handle1,"packingError",&packingError1);
+            err2=grib_get_double(handle2,"packingError",&packingError2);
             if (packingCompare)
                 value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
         } else if (!grib_inline_strcmp(name,"unpackedValues") ) {
             packingError1=0;
             packingError2=0;
-            err1=grib_get_double(h1,"unpackedError",&packingError1);
-            err2=grib_get_double(h2,"unpackedError",&packingError2);
+            err1=grib_get_double(handle1,"unpackedError",&packingError1);
+            err2=grib_get_double(handle2,"unpackedError",&packingError2);
             if (packingCompare)
                 value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
         } else if ( !grib_inline_rstrcmp(name,"InDegrees")) {
@@ -802,8 +800,8 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
         } else if (!grib_inline_strcmp(name,"referenceValue") ) {
             packingError1=0;
             packingError2=0;
-            err1=grib_get_double(h1,"referenceValueError",&packingError1);
-            err2=grib_get_double(h2,"referenceValueError",&packingError2);
+            err1=grib_get_double(handle1,"referenceValueError",&packingError1);
+            err2=grib_get_double(handle2,"referenceValueError",&packingError2);
             value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
         }
 
@@ -816,17 +814,17 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
             }
         }
 
-        if((err1 = grib_get_double_array(h1,name,dval1,&len1)) != GRIB_SUCCESS)
+        if((err1 = grib_get_double_array(handle1,name,dval1,&len1)) != GRIB_SUCCESS)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("Oops... cannot get double value of [%s] in 1st field: %s\n",
                     name,grib_get_error_message(err1));
             save_error(c,name);
         }
 
-        if((err2 = grib_get_double_array(h2,name,dval2,&len2)) != GRIB_SUCCESS)
+        if((err2 = grib_get_double_array(handle2,name,dval2,&len2)) != GRIB_SUCCESS)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("Oops... cannot get double value of [%s] in 2nd field: %s\n",
                     name,grib_get_error_message(err2));
             save_error(c,name);
@@ -834,7 +832,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
 
         if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1!=len2)
         {
-            printInfo(h1);
+            printInfo(handle1);
             printf("Different size for \"%s\"  [%ld]  [%ld]\n",name,(long)len1,(long)len2);
             save_error(c,name);
         }
@@ -867,7 +865,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
             }
 
             if (countdiff) {
-                printInfo(h1);
+                printInfo(handle1);
                 save_error(c,name);
                 if (len1>1) {
                     printf("double [%s]: %d out of %ld different\n",name,countdiff,(long)len1);
@@ -884,10 +882,10 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
                     if (!grib_inline_strcmp(name,"packedValues") || !grib_inline_strcmp(name,"values")
                             || !grib_inline_strcmp(name,"codedValues")) {
                         double max1,min1,max2,min2;
-                        grib_get_double(h1,"max",&max1);
-                        grib_get_double(h1,"min",&min1);
-                        grib_get_double(h2,"max",&max2);
-                        grib_get_double(h2,"min",&min2);
+                        grib_get_double(handle1,"max",&max1);
+                        grib_get_double(handle1,"min",&min1);
+                        grib_get_double(handle2,"max",&max2);
+                        grib_get_double(handle2,"min",&min2);
                         printf("\n\tvalues max= [%g]  [%g]         min= [%g] [%g]",max1,max2,min1,min2);
                     }
                     printf("\n");
@@ -901,8 +899,8 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
             }
         }
 
-        grib_context_free(h1->context,dval1);
-        grib_context_free(h2->context,dval2);
+        grib_context_free(handle1->context,dval1);
+        grib_context_free(handle2->context,dval2);
 
         if(err1) return err1;
         if(err2) return err2;
@@ -913,20 +911,20 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
         if (options->mode==MODE_BUFR) return 0;
         if (len1<2) len1=512;
         if (len2<2) len2=512;
-        uval1 = (unsigned char*)grib_context_malloc(h1->context,len1*sizeof(unsigned char));
-        uval2 = (unsigned char*)grib_context_malloc(h2->context,len2*sizeof(unsigned char));
+        uval1 = (unsigned char*)grib_context_malloc(handle1->context,len1*sizeof(unsigned char));
+        uval2 = (unsigned char*)grib_context_malloc(handle2->context,len2*sizeof(unsigned char));
 
-        if((err1 = grib_get_bytes(h1,name,uval1,&len1)) != GRIB_SUCCESS)
+        if((err1 = grib_get_bytes(handle1,name,uval1,&len1)) != GRIB_SUCCESS)
         {
-            printInfo(h1);
+            printInfo(handle1);
             save_error(c,name);
             printf("Oops... cannot get bytes value of [%s] in 1st field: %s\n",
                     name,grib_get_error_message(err1));
         }
 
-        if((err2 = grib_get_bytes(h2,name,uval2,&len2)) != GRIB_SUCCESS)
+        if((err2 = grib_get_bytes(handle2,name,uval2,&len2)) != GRIB_SUCCESS)
         {
-            printInfo(h1);
+            printInfo(handle1);
             save_error(c,name);
             printf("Oops... cannot get bytes value of [%s] in 2nd field: %s\n",
                     name,grib_get_error_message(err2));
@@ -940,7 +938,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
                 for(i = 0; i < len1; i++)
                     if(uval1[i] != uval2[i])
                     {
-                        printInfo(h1);
+                        printInfo(handle1);
                         save_error(c,name);
                         if(len1 == 1)
                             printf("[%s] byte values are different: [%02x] and [%02x]\n",
@@ -956,8 +954,8 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
             }
         }
 
-        grib_context_free(h1->context,uval1);
-        grib_context_free(h2->context,uval2);
+        grib_context_free(handle1->context,uval1);
+        grib_context_free(handle2->context,uval2);
 
         if(err1) return err1;
         if(err2) return err2;
@@ -969,7 +967,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
 
     default:
         if (verbose) printf("\n");
-        printInfo(h1);
+        printInfo(handle1);
         save_error(c,name);
         printf("Cannot compare [%s], unsupported type %d\n",name,type1);
         return GRIB_UNABLE_TO_COMPARE_ACCESSORS;
@@ -980,13 +978,13 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
 
 }
 
-static int compare_all_dump_keys(grib_handle* h1,grib_handle* h2,grib_runtime_options* options,int *err) {
+static int compare_all_dump_keys(grib_handle* handle1, grib_handle* handle2, grib_runtime_options* options, int *err) {
     int ret=0;
     const char* name=NULL;
     grib_keys_iterator* iter  = NULL;
-    grib_set_long(h1,"unpack",1);
-    grib_set_long(h2,"unpack",1);
-    iter=grib_keys_iterator_new(h1,0,NULL);
+    grib_set_long(handle1,"unpack",1);
+    grib_set_long(handle2,"unpack",1);
+    iter=grib_keys_iterator_new(handle1,0,NULL);
 
     if (!iter) {
         printf("ERROR: unable to get iterator\n");
@@ -1001,9 +999,9 @@ static int compare_all_dump_keys(grib_handle* h1,grib_handle* h2,grib_runtime_op
 
         if (blacklisted(name)) continue;
         if (xa==NULL || ( xa->flags & GRIB_ACCESSOR_FLAG_DUMP )==0 ) continue;
-        if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED))  {
+        if(compare_values(options,handle1,handle2,name,GRIB_TYPE_UNDEFINED))  {
             err++;
-            write_messages(h1,h2);
+            write_messages(handle1,handle2);
             ret=1;
         }
     }
@@ -1012,7 +1010,7 @@ static int compare_all_dump_keys(grib_handle* h1,grib_handle* h2,grib_runtime_op
     return ret;
 }
 
-static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options* options)
+static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runtime_options* options)
 {
     int err = 0;
     int i=0;
@@ -1023,8 +1021,8 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
     if (blacklist && ( !listFromCommandLine || headerMode )) {
         grib_string_list* nextb=blacklist;
         while (nextb) {
-            grib_clear(h1,nextb->value);
-            grib_clear(h2,nextb->value);
+            grib_clear(handle1,nextb->value);
+            grib_clear(handle2,nextb->value);
             nextb=nextb->next;
         }
     }
@@ -1033,14 +1031,14 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
         const void *msg1=NULL,*msg2=NULL;
         size_t size1=0,size2=0;
         grib_handle *h11, *h22;
-        GRIB_CHECK_NOLINE(grib_get_message_headers(h1,&msg1,&size1),0);
-        GRIB_CHECK_NOLINE(grib_get_message_headers(h2,&msg2,&size2),0);
+        GRIB_CHECK_NOLINE(grib_get_message_headers(handle1,&msg1,&size1),0);
+        GRIB_CHECK_NOLINE(grib_get_message_headers(handle2,&msg2,&size2),0);
         if (size1==size2 && !memcmp(msg1,msg2,size1))
             return 0;
 
         err=0;
-        h11=grib_handle_new_from_partial_message(h1->context,(void*)msg1,size1);
-        h22=grib_handle_new_from_partial_message(h1->context,(void*)msg2,size2);
+        h11=grib_handle_new_from_partial_message(handle1->context,(void*)msg1,size1);
+        h22=grib_handle_new_from_partial_message(handle1->context,(void*)msg2,size2);
 
         iter=grib_keys_iterator_new(h11,
                 GRIB_KEYS_ITERATOR_SKIP_COMPUTED,NULL);
@@ -1072,7 +1070,7 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
         for (i=0; i< options->compare_count; i++) {
             if (blacklisted((char*)options->compare[i].name)) continue;
             if (options->compare[i].type == GRIB_NAMESPACE) {
-                iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name);
+                iter=grib_keys_iterator_new(handle1,0,(char*)options->compare[i].name);
                 if (!iter) {
                     printf("ERROR: unable to get iterator\n");
                     exit(1);
@@ -1083,16 +1081,16 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
                     /*printf("----- comparing %s\n",name);*/
 
                     if (blacklisted(name)) continue;
-                    if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED))  {
+                    if(compare_values(options,handle1,handle2,name,GRIB_TYPE_UNDEFINED))  {
                         err++;
-                        write_messages(h1,h2);
+                        write_messages(handle1,handle2);
                     }
                 }
                 grib_keys_iterator_delete(iter);
             } else {
-                if( compare_values(options,h1,h2,options->compare[i].name,options->compare[i].type))
+                if( compare_values(options,handle1,handle2,options->compare[i].name,options->compare[i].type))
                     err++;
-                write_messages(h1,h2);
+                write_messages(handle1,handle2);
             }
         }
     } else {
@@ -1100,8 +1098,8 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
         size_t size1=0,size2=0;
         int memcmp_ret=0;
         /* int ii=0; */
-        GRIB_CHECK_NOLINE(grib_get_message(h1,&msg1,&size1),0);
-        GRIB_CHECK_NOLINE(grib_get_message(h2,&msg2,&size2),0);
+        GRIB_CHECK_NOLINE(grib_get_message(handle1,&msg1,&size1),0);
+        GRIB_CHECK_NOLINE(grib_get_message(handle2,&msg2,&size2),0);
         if (size1==size2 && !(memcmp_ret=memcmp(msg1,msg2,size1))) {
             return 0;
         } 
@@ -1132,7 +1130,7 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
             for (i=0; i< options->compare_count; i++) {
                 if (blacklisted(name)) continue;
                 if (options->compare[i].type == GRIB_NAMESPACE) {
-                    iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name);
+                    iter=grib_keys_iterator_new(handle1,0,(char*)options->compare[i].name);
                     if (!iter) {
                         printf("ERROR: unable to get iterator for %s\n",options->compare[i].name );
                         exit(1);
@@ -1143,27 +1141,27 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
                         /*printf("----- comparing %s\n",name);*/
 
                         if (blacklisted(name)) continue;
-                        if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED)) {
+                        if(compare_values(options,handle1,handle2,name,GRIB_TYPE_UNDEFINED)) {
                             err++;
-                            write_messages(h1,h2);
-                            if (compare_all_dump_keys(h1,h2,options,&err)) {
+                            write_messages(handle1,handle2);
+                            if (compare_all_dump_keys(handle1,handle2,options,&err)) {
                                 err++;
                             }
                         }
                     }
                     grib_keys_iterator_delete(iter);
                 } else {
-                    if( compare_values(options,h1,h2,options->compare[i].name,options->compare[i].type)) {
+                    if( compare_values(options,handle1,handle2,options->compare[i].name,options->compare[i].type)) {
                         err++;
-                        write_messages(h1,h2);
-                        if (compare_all_dump_keys(h1,h2,options,&err)) {
+                        write_messages(handle1,handle2);
+                        if (compare_all_dump_keys(handle1,handle2,options,&err)) {
                             err++;
                         }
                     }
                 }
             }
         } else {
-            if (compare_all_dump_keys(h1,h2,options,&err)) {
+            if (compare_all_dump_keys(handle1,handle2,options,&err)) {
                 err++;
             }
         }
@@ -1172,8 +1170,8 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
     return err;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/bufr_copy.c b/tools/bufr_copy.c
index 6c005f1..d958236 100644
--- a/tools/bufr_copy.c
+++ b/tools/bufr_copy.c
@@ -24,7 +24,7 @@ grib_option grib_options[]={
         /*  {id, args, help}, on, command_line, value */
         {"f",0,0,0,1,0},
         {"c",0,0,1,0,0},
-/*      {"r",0,0,0,1,0}, */
+        /*      {"r",0,0,0,1,0}, */
         {"q",0,0,1,0,0},
         {"p:",0,0,1,1,0},
         {"s:",0,0,0,1,0},
@@ -42,7 +42,6 @@ grib_option grib_options[]={
         {"T:",0,0,1,0,"B"},
         {"S",0,0,1,0,0},
         {"g",0,0,0,1,0},
-/*      {"G",0,0,0,1,0}, */
         {"7",0,0,0,1,0},
         {"v",0,0,0,1,0}
 };
@@ -88,7 +87,6 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
 {
     int err=0;
     if (!options->skip) {
-
         if (options->set_values_count != 0)
             err=grib_set_values(h,options->set_values,options->set_values_count);
 
@@ -117,8 +115,8 @@ int grib_tool_finalise_action(grib_runtime_options* options)
     return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/bufr_dump.c b/tools/bufr_dump.c
index 0488c3f..10f0368 100644
--- a/tools/bufr_dump.c
+++ b/tools/bufr_dump.c
@@ -18,25 +18,27 @@
 grib_option grib_options[]={
         /*  {id, args, help}, on, command_line, value*/
         {"j:","s/f/a","\n\t\tJSON mode (JavaScript Object Notation)."
-                    "\n\t\tOptions: s->structure, f->flat (only data), a->all attributes\n",1,1,"s"},
+                "\n\t\tOptions: s->structure, f->flat (only data), a->all attributes"
+                "\n\t\tDefault mode is structure.\n",
+                1,1,"s"},
         {"S",0,0,1,0,0},
         {"O",0,"Octet mode. WMO documentation style dump.\n",0,1,0},
-        {"D",0,0,0,1,0},
+        /* {"D",0,0,0,1,0},  */  /* See ECC-215 */
         {"d",0,"Print all data values.\n",1,1,0},
         {"u",0,"Print only some values.\n",0,1,0},
-        /*     {"C",0,0,0,1,0}, */
+        /* {"C",0,0,0,1,0}, */
         {"t",0,0,0,1,0},
         {"f",0,0,0,1,0},
         {"H",0,0,0,1,0},
         {"a",0,0,0,1,0},
         {"w:",0,0,0,1,0},
         {"s:",0,0,0,1,0},
-        /*     {"M",0,0,0,1,0}, */
+        /* {"M",0,0,0,1,0}, */
         {"T:",0,0,1,0,"B"},
         {"7",0,0,0,1,0},
         {"V",0,0,0,1,0},
         {"q",0,0,1,0,0}
-       /* {"x",0,0,0,1,0} */
+        /* {"x",0,0,0,1,0} */
 };
 
 char* grib_tool_description="Dump the content of a BUFR file in different formats.";
@@ -49,8 +51,8 @@ static int first_handle=1;
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
 /**
- *grib_dump
- *Dump the content of a BUFR file
+ * bufr_dump
+ * Dump the content of a BUFR file
  *
  */
 int main(int argc, char *argv[])
@@ -65,12 +67,12 @@ int grib_tool_before_getopt(grib_runtime_options* options)
 
 int grib_tool_init(grib_runtime_options* options)
 {
-    int opt=grib_options_on("C")+grib_options_on("O")+grib_options_on("D");
+    int opt=grib_options_on("C")+grib_options_on("O");
 
     options->dump_mode = "default";
 
     if (opt > 1) {
-        printf("%s: simultaneous j/C/O/D options not allowed\n",grib_tool_name);
+        printf("%s: simultaneous j/C/O options not allowed\n",grib_tool_name);
         exit(1);
     }
 
@@ -78,8 +80,8 @@ int grib_tool_init(grib_runtime_options* options)
         options->dump_mode = "json";
         json_option=grib_options_get_option("j:");
         if (strlen(json_option)>1 || ( json_option[0] != 's' && json_option[0]!= 'f' && json_option[0]!= 'a')) {
-          printf("wrong json option %s\n",json_option);
-          exit(1);
+            printf("wrong json option %s\n",json_option);
+            exit(1);
         }
         json=1;
     }
@@ -101,11 +103,12 @@ int grib_tool_init(grib_runtime_options* options)
                 | GRIB_DUMP_FLAG_READ_ONLY;
     }
 
+    /* See ECC-215
     if (grib_options_on("D")) {
         options->dump_mode = "debug";
         options->dump_flags = GRIB_DUMP_FLAG_VALUES
                 |  GRIB_DUMP_FLAG_READ_ONLY;
-    }
+    }  */
 
     if (grib_options_on("a"))
         options->dump_flags |= GRIB_DUMP_FLAG_ALIASES;
@@ -119,7 +122,6 @@ int grib_tool_init(grib_runtime_options* options)
     if (grib_options_on("d") && !grib_options_on("u"))
         options->dump_flags |= GRIB_DUMP_FLAG_ALL_DATA;
 
-
     return 0;
 }
 
@@ -161,44 +163,47 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
         grib_set_flag(h,options->print_keys[i].name,GRIB_ACCESSOR_FLAG_DUMP);
 
     if (json) {
-        if (options->handle_count>1) fprintf(stdout,",\n");
+        /* ECC-233: print comma as separator between messages */
+        if (!first_handle && options->handle_count>1) {
+            fprintf(stdout,",\n");
+        }
         if (json && first_handle) {
-          fprintf(stdout,"{ \"messages\" : [ \n");
-          first_handle=0;
+            fprintf(stdout,"{ \"messages\" : [ \n");
+            first_handle=0;
         }
         switch (json_option[0]) {
-          case 'f':
+        case 'f':
             err=grib_set_long(h,"unpack",2);
             if (err) {
-              fprintf(stdout,"\"ERROR: unable to unpack data section\"");
-              options->error=err;
-              return err;
+                fprintf(stdout,"\"ERROR: unable to unpack data section\"");
+                options->error=err;
+                return err;
             }
             a=grib_find_accessor(h,"numericValues");
             al=accessor_bufr_data_array_get_dataAccessors(a);
             options->dump_flags=GRIB_DUMP_FLAG_ALL_ATTRIBUTES;
-            grib_dump_bufr_flat(al,h,stdout,options->dump_mode,options->dump_flags,0);
+            codes_dump_bufr_flat(al,h,stdout,options->dump_mode,options->dump_flags,0);
             break;
-          case 's':
+        case 's':
             err=grib_set_long(h,"unpack",1);
             if (err) {
-              fprintf(stdout,"\"ERROR: unable to unpack data section\"");
-              options->error=err;
-              return err;
+                fprintf(stdout,"\"ERROR: unable to unpack data section\"");
+                options->error=err;
+                return err;
             }
             grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0);
             break;
-          case 'a':
+        case 'a':
             err=grib_set_long(h,"unpack",1);
             if (err) {
-              fprintf(stdout,"\"ERROR: unable to unpack data section\"");
-              options->error=err;
-              return err;
+                fprintf(stdout,"\"ERROR: unable to unpack data section\"");
+                options->error=err;
+                return err;
             }
             options->dump_flags=GRIB_DUMP_FLAG_ALL_ATTRIBUTES;
             grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0);
             break;
-          default :
+        default :
             printf("unknown json option %s\n",json_option);
             exit(1);
         }
@@ -206,7 +211,12 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
         sprintf(tmp,"MESSAGE %d ( length=%ld )",options->handle_count,length);
         if (!grib_options_on("C"))
             fprintf(stdout,"#==============   %-38s   ==============\n",tmp);
-        grib_set_long(h,"unpack",1);
+        err=grib_set_long(h,"unpack",1);
+        if (err) {
+            fprintf(stdout,"\"ERROR: unable to unpack data section\"");
+            options->error=err;
+            return err;
+        }
         grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0);
     }
 
@@ -233,15 +243,14 @@ int grib_tool_finalise_action(grib_runtime_options* options)
 }
 
 int grib_no_handle_action(int err) {
-  if (json ){
-    if (first_handle) {
-      fprintf(dump_file,"{ \"messages\" : [ \n");
-      first_handle=0;
-    } else {
-      fprintf(dump_file,",\n");
+    if (json ){
+        if (first_handle) {
+            fprintf(dump_file,"{ \"messages\" : [ \n");
+            first_handle=0;
+        } else {
+            fprintf(dump_file,",\n");
+        }
     }
-  }
-  fprintf(dump_file,"\"ERROR: unreadable message\"\n");
-  return 0;
+    fprintf(dump_file,"\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/bufr_filter.sh b/tools/bufr_filter.sh
index a0d7a96..0314dcd 100755
--- a/tools/bufr_filter.sh
+++ b/tools/bufr_filter.sh
@@ -1,14 +1,19 @@
 #!/bin/sh
 set -e 
 
-echo "-# The bufr_filter processes sequentially all bufr messages contained in the input files and applies the rules to each of them. \\n"
+echo "-# The bufr_filter sequentially processes all bufr messages contained in the input files and applies the rules to each of them. \\n"
 echo " Input messages can be written to the output by using the \"write\" statement. The write statement can be parameterised so that output "
 echo " is sent to multiple files depending on key values used in the output file name. \\n"
-echo " If we write a rules_file containing the only statement:\\n \\n"
+echo " First we write a rules_file containing the following statement:\\n \\n"
 echo "\\verbatim"
-echo "write \"../data/split/[bufrHeaderCentre:l]_[dataCategory].bufr[editionNumber]\";"
+echo "write \"../data/split/[bufrHeaderCentre:i]_[dataCategory].bufr[editionNumber]\";"
 echo "\\endverbatim\\n"
-echo "Applying this rules_file to the \"../data/bufr/mutitype.bufr\" bufr file we obtain several files in the ../data/split directory containing "
+echo "Then we create the BUFR file multitype.bufr from three others: \\n"
+echo "\\verbatim"
+echo "mkdir ../data/split \\n"
+echo "cat ../data/bufr/syno_1.bufr ../data/bufr/goes_87.bufr ../data/bufr/gosat.bufr > ../data/split/multitype.bufr \\n"
+echo "\\endverbatim\\n"
+echo "Applying this rules_file to the \"../data/split/multitype.bufr\" bufr file we obtain several files in the ../data/split directory containing "
 echo " messages split according to their key values\\n "
 echo "\\verbatim"
 
@@ -23,10 +28,10 @@ cat ../data/bufr/syno_1.bufr ../data/bufr/goes_87.bufr ../data/bufr/gosat.bufr >
 
 
 cat > rules_file <<EOF
-write "../data/split/[bufrHeaderCentre:l]_[dataCategory].bufr[editionNumber]";
+write "../data/split/[bufrHeaderCentre:i]_[dataCategory].bufr[editionNumber]";
 EOF
 
-echo ">bufr_filter rules_file ../data/bufr/multitype.bufr"
+echo ">bufr_filter rules_file ../data/split/multitype.bufr"
 echo ">ls ../data/split"
 
 ./bufr_filter rules_file ../data/split/multitype.bufr
diff --git a/tools/codes_info.c b/tools/codes_info.c
index 9ef2a19..bc1656c 100644
--- a/tools/codes_info.c
+++ b/tools/codes_info.c
@@ -8,13 +8,6 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: codes_info
- *
- * Description:
- *
- */
-
 #include "grib_tools.h"
 
 void usage( char*);
@@ -27,7 +20,6 @@ void usage( char*);
 int main( int argc,char* argv[])
 {
     char* path=NULL;
-    int c=0;
     int nfiles=0;
     unsigned long print_flags=0;
     int major=ECCODES_MAJOR_VERSION;
@@ -35,7 +27,7 @@ int main( int argc,char* argv[])
     int revision=ECCODES_REVISION_VERSION;
 
     while (1) {
-        c = getopt (argc, argv, "vds");
+        int c = getopt (argc, argv, "vds");
 
         if (c == -1)
             break;
@@ -68,18 +60,31 @@ int main( int argc,char* argv[])
 #if GRIB_PTHREADS
         grib_context_log(grib_context_get_default(), GRIB_LOG_DEBUG, "PTHREADS enabled");
 #endif
-        if ((path=codes_getenv("ECCODES_DEFINITION_PATH")) != NULL) {
+#ifdef HAVE_MEMFS
+        grib_context_log(grib_context_get_default(), GRIB_LOG_DEBUG, "MEMFS enabled");
+#endif
+        if ((path=getenv("ECCODES_DEFINITION_PATH")) != NULL) {
             printf("Definition files path from environment variable");
             printf(" ECCODES_DEFINITION_PATH=%s\n",path);
+        } else if ((path=getenv("GRIB_DEFINITION_PATH")) != NULL) {
+            printf("Definition files path from environment variable");
+            printf(" GRIB_DEFINITION_PATH=%s\n",path);
+            printf("(This is for backward compatibility. "
+                   "It is recommended you use ECCODES_DEFINITION_PATH instead!)\n");
         } else {
             printf("Default definition files path is used: %s\n",ECCODES_DEFINITION_PATH);
             printf("Definition files path can be changed setting ECCODES_DEFINITION_PATH environment variable\n");
         }
         printf("\n");
 
-        if ((path=codes_getenv("ECCODES_SAMPLES_PATH")) != NULL) {
+        if ((path=getenv("ECCODES_SAMPLES_PATH")) != NULL) {
             printf("SAMPLES path from environment variable");
             printf(" ECCODES_SAMPLES_PATH=%s\n",path);
+        } else if ((path=getenv("GRIB_SAMPLES_PATH")) != NULL) {
+            printf("SAMPLES path from environment variable");
+            printf(" GRIB_SAMPLES_PATH=%s\n",path);
+            printf("(This is for backward compatibility. "
+                   "It is recommended you use ECCODES_SAMPLES_PATH instead!)\n");
         } else {
             printf("Default SAMPLES path is used: %s\n",ECCODES_SAMPLES_PATH);
             printf("SAMPLES path can be changed setting ECCODES_SAMPLES_PATH environment variable\n");
diff --git a/tools/grib_compare.c b/tools/grib_compare.c
index 0f5cda4..8e56aac 100644
--- a/tools/grib_compare.c
+++ b/tools/grib_compare.c
@@ -29,7 +29,7 @@ GRIB_INLINE static int grib_inline_rstrcmp(const char* a,const char* b)
     return (q==b) ? 0 : 1;
 }
 
-typedef double (*compare_double_proc) (double*,double*,double*);
+typedef double (*compare_double_proc) (double*,double*,double);
 
 typedef struct grib_error grib_error;
 struct grib_error {
@@ -59,20 +59,22 @@ int morein1=0;
 int morein2=0;
 int listFromCommandLine;
 int verbose=0;
-int tolerance_factor=1;
+double tolerance_factor=1;
 
-GRIB_INLINE static double compare_double_absolute(double *a,double *b,double *err)
+/* Returns 0 when the values are considered the same */
+static double compare_double_absolute(double *a,double *b,double tolerance)
 {
     double ret=0;
     double d=fabs(*a-*b);
-    if (d > *err) {
+    if (d > tolerance) {
         ret=d;
     }
     return ret;
     /* return fabs(*a-*b) > *err ? fabs(*a-*b) : 0; */
 }
 
-static double compare_double_relative(double *a,double *b,double *err)
+/* Returns 0 when the values are considered the same */
+static double compare_double_relative(double *a, double *b, double tolerance)
 {
     double relativeError;
 
@@ -83,7 +85,7 @@ static double compare_double_relative(double *a,double *b,double *err)
     else
         relativeError = fabs((*a-*b) / *a);
 
-    return relativeError > *err ? relativeError : 0;
+    return relativeError > tolerance ? relativeError : 0;
 }
 
 static int blacklisted(const char* name)
@@ -101,7 +103,6 @@ static int blacklisted(const char* name)
 static double relative_error(double a,double b,double err)
 {
     double relativeError;
-    double maxAbsoluteError = 1e-19;
 
     if(fabs(a) <= maxAbsoluteError || fabs(b) <= maxAbsoluteError)
         relativeError = fabs(a-b);
@@ -139,7 +140,7 @@ grib_option grib_options[]={
     {"v",0,0,0,1,0}
 };
 
-grib_handle* h1=NULL;
+grib_handle* global_handle=NULL;
 int counter=0;
 int theStart=-1;
 int theEnd=-1;
@@ -258,16 +259,27 @@ int grib_tool_init(grib_runtime_options* options)
         compareAbsolute=0;
     }
     if (grib_options_on("A:")){
+        const char* absTolStr = grib_options_get_option("A:");
+        char* endPtr = NULL; /* for error handling */
         if (grib_options_on("R:")) {
-            maxAbsoluteError = atof(grib_options_get_option("A:"));
+            maxAbsoluteError = strtod(absTolStr,&endPtr);
+            if (*endPtr) {
+                fprintf(stderr, "Invalid absolute error: '%s'\n", absTolStr);
+                exit(1);
+            }
         } else {
             compare_double= &compare_double_absolute;
-            global_tolerance = atof(grib_options_get_option("A:"));
+            global_tolerance= strtod(absTolStr,&endPtr);
+            if (*endPtr) {
+                fprintf(stderr, "Invalid absolute error: '%s'\n", absTolStr);
+                exit(1);
+            }
         }
     }
     if (grib_options_on("P")) {
         packingCompare=1;
-        compare_double= &compare_double_absolute;
+        /* GRIB-972: Do not change the comparator yet. Not all GRIBs have packingError key! */
+        /*compare_double= &compare_double_absolute;*/
     }
 
     if (grib_options_on("T:"))
@@ -377,7 +389,7 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
         }
 
         grib_index_search_same(idx1,h);
-        h1=grib_handle_new_from_index(idx1,&err);
+        global_handle=grib_handle_new_from_index(idx1,&err);
         if (options->verbose) {
             off_t offset=0;
             char* filename=grib_get_field_file(options->index2,&offset);
@@ -387,44 +399,44 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
             print_index_key_values(options->index1,counter);
         }
 
-        if (!h1) {
+        if (!global_handle) {
             if (!options->verbose)
                 print_index_key_values(idx1,counter);
             printf("====== NOT FOUND in %s\n",options->infile->name);
         }
 
-        if (!h1 || err!= GRIB_SUCCESS ) {
+        if (!global_handle || err!= GRIB_SUCCESS ) {
             morein1++;
-            if (h1) grib_handle_delete(h1);
+            if (global_handle) grib_handle_delete(global_handle);
             return 0;
         }
 
-        if(compare_handles(h,h1,options)) {
+        if(compare_handles(h,global_handle,options)) {
             error++;
             if (!force) exit(1);
         }
 
-        grib_handle_delete(h1);
+        grib_handle_delete(global_handle);
 
         return 0;
 
     } else if (options->random)
-        h1 = grib_fieldset_next_handle(options->idx,&err);
+        global_handle = grib_fieldset_next_handle(options->idx,&err);
     else
-        h1=grib_handle_new_from_file(h->context,options->infile_extra->file,&err);
+        global_handle=grib_handle_new_from_file(h->context,options->infile_extra->file,&err);
 
-    if (!h1 || err!= GRIB_SUCCESS ) {
+    if (!global_handle || err!= GRIB_SUCCESS ) {
         morein2++;
-        if (h1) grib_handle_delete(h1);
+        if (global_handle) grib_handle_delete(global_handle);
         return 0;
     }
 
-    if(compare_handles(h1,h,options)) {
+    if(compare_handles(global_handle,h,options)) {
         error++;
         if (!force) exit(1);
     }
 
-    grib_handle_delete(h1);
+    grib_handle_delete(global_handle);
 
     return 0;
 }
@@ -433,12 +445,12 @@ int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
 {
     int err=0;
     if (!options->through_index && !options->random)  {
-        h1=grib_handle_new_from_file(h->context,options->infile_extra->file,&err);
+        global_handle=grib_handle_new_from_file(h->context,options->infile_extra->file,&err);
 
-        if (!h1 || err!= GRIB_SUCCESS)
+        if (!global_handle || err!= GRIB_SUCCESS)
             morein2++;
 
-        grib_handle_delete(h1);
+        grib_handle_delete(global_handle);
 
 
     }
@@ -466,9 +478,9 @@ int grib_tool_finalise_action(grib_runtime_options* options)
     if (error) {
         printf("\n## ERRORS SUMMARY #######\n");
     }
-    while ((h1=grib_handle_new_from_file(c,options->infile_extra->file,&err))) {
+    while ((global_handle=grib_handle_new_from_file(c,options->infile_extra->file,&err))) {
         morein1++;
-        if (h1) grib_handle_delete(h1);
+        if (global_handle) grib_handle_delete(global_handle);
     }
     if (morein1>0) {
         printf("##\n## Different number of messages \n");
@@ -559,6 +571,9 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
     type2=type;
     if (verbose) printf("  comparing %s",name);
 
+    /* If key was blacklisted, then we should not have got here */
+    DebugAssert( !blacklisted(name) );
+
     if( type1==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h1,name,&type1)) != GRIB_SUCCESS)
     {
         printInfo(h1);
@@ -773,15 +788,25 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
             packingError2=0;
             err1=grib_get_double(h1,"packingError",&packingError1);
             err2=grib_get_double(h2,"packingError",&packingError2);
-            if (packingCompare)
+            if (packingCompare && !err1 && !err2) {
+                /* packingError specified by user and message supports it */
+                /* GRIB-972: Not all GRIBs have packingError key! */
                 value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
+                compare_double= &compare_double_absolute;
+                compareAbsolute=1;
+            }
         } else if (!grib_inline_strcmp(name,"unpackedValues") ) {
             packingError1=0;
             packingError2=0;
             err1=grib_get_double(h1,"unpackedError",&packingError1);
             err2=grib_get_double(h2,"unpackedError",&packingError2);
-            if (packingCompare)
+            if (packingCompare && !err1 && !err2) {
+                /* packingError specified by user and message supports it */
+                /* GRIB-972: Not all GRIBs have unpackedError key! */
                 value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
+                compare_double= &compare_double_absolute;
+                compareAbsolute=1;
+            }
         } else if ( !grib_inline_rstrcmp(name,"InDegrees")) {
             packingError1=0.0005;
             packingError2=0.0005;
@@ -845,9 +870,14 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
                 if (*dval2 > 360 ) dnew2 -= 360.0 ;
             }
             value_tolerance*=tolerance_factor;
-            if (verbose) printf("  (%d values) tolerance=%g\n",(int)len1,value_tolerance);
+            if (verbose) {
+                printf("  (%d values) tolerance=%g \t",(int)len1,value_tolerance);
+                if (compare_double == &compare_double_absolute) printf("using compare_double_absolute");
+                if (compare_double == &compare_double_relative) printf("using compare_double_relative");
+                printf("\n");
+            }
             for(i = 0; i < len1; i++) {
-                if((diff=compare_double(pv1++,pv2++,&value_tolerance))!=0) {
+                if((diff=compare_double(pv1++, pv2++, value_tolerance))!=0) {
                     countdiff++;
                     if (maxdiff < diff) {maxdiff=diff;imaxdiff=i;}
                     err1 = GRIB_VALUE_MISMATCH;
@@ -936,7 +966,7 @@ static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_han
                             printf("[%s] byte values are different: [%02x] and [%02x]\n",
                                     name,uval1[i],uval2[i]);
                         else
-                            printf("[%s] byte value %d of %ld are different: [%02x] and [%02x]\n",
+                            printf("[%s] byte value %d of %ld is different: [%02x] and [%02x]\n",
                                     name,i,(long)len1,uval1[i],uval2[i]);
 
                         err1 = GRIB_VALUE_MISMATCH;
@@ -978,12 +1008,13 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
 
     /* mask only if no -c option or headerMode (-H)*/
     if (blacklist && ( !listFromCommandLine || headerMode )) {
-        grib_string_list* nextb=blacklist;
+        /* See ECC-245, GRIB-573, GRIB-915: Do not change handles in memory */
+        /* grib_string_list* nextb=blacklist;
         while (nextb) {
             grib_clear(h1,nextb->value);
             grib_clear(h2,nextb->value);
             nextb=nextb->next;
-        }
+        } */
     }
 
     if (headerMode) {
@@ -999,11 +1030,10 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
         h11=grib_handle_new_from_partial_message(h1->context,(void*)msg1,size1);
         h22=grib_handle_new_from_partial_message(h1->context,(void*)msg2,size2);
 
-        iter=grib_keys_iterator_new(h11,
-                GRIB_KEYS_ITERATOR_SKIP_COMPUTED,NULL);
+        iter=grib_keys_iterator_new(h11, GRIB_KEYS_ITERATOR_SKIP_COMPUTED, NULL);
 
         if (!iter) {
-            printf("ERROR: unable to get iterator\n");
+            printf("ERROR: unable to get keys iterator\n");
             exit(1);
         }
 
@@ -1024,11 +1054,11 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
 
     if ( listFromCommandLine && onlyListed ) {
         for (i=0; i< options->compare_count; i++) {
-            if (blacklisted((char*)options->compare[i].name)) continue;
+            if (blacklisted(options->compare[i].name)) continue;
             if (options->compare[i].type == GRIB_NAMESPACE) {
-                iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name);
+                iter=grib_keys_iterator_new(h1, 0, options->compare[i].name);
                 if (!iter) {
-                    printf("ERROR: unable to get iterator\n");
+                    printf("ERROR: unable to get keys iterator\n");
                     exit(1);
                 }
                 while(grib_keys_iterator_next(iter))
@@ -1056,7 +1086,7 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
         iter=grib_keys_iterator_new(h1,GRIB_KEYS_ITERATOR_SKIP_COMPUTED,NULL);
 
         if (!iter) {
-            printf("ERROR: unable to get iterator\n");
+            printf("ERROR: unable to get keys iterator\n");
             exit(1);
         }
 
@@ -1073,9 +1103,9 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
 
         if ( listFromCommandLine ) {
             for (i=0; i< options->compare_count; i++) {
-                if (blacklisted(name)) continue;
+                if (blacklisted(options->compare[i].name)) continue;
                 if (options->compare[i].type == GRIB_NAMESPACE) {
-                    iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name);
+                    iter=grib_keys_iterator_new(h1, 0, options->compare[i].name);
                     if (!iter) {
                         printf("ERROR: unable to get iterator for %s\n",options->compare[i].name );
                         exit(1);
@@ -1095,13 +1125,12 @@ static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options*
                 }
             }
         }
-
     }
     return err;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/grib_compare.sh b/tools/grib_compare.sh
index d0d0af8..4fb35a4 100755
--- a/tools/grib_compare.sh
+++ b/tools/grib_compare.sh
@@ -79,11 +79,11 @@ is printed.
 
 echo "-# Some options are provided to compare only a set of keys in the messages. The option -H is used to compare only the headers 
 coded in the message, it doesn't compare the data values. 
-The option \"-c key1:[l/d/s/n],key2:[l/d/s/n],... \" can be used to 
+The option \"-c key1:[i/d/s/n],key2:[i/d/s/n],... \" can be used to 
 compare a set of keys or namespaces. The letter after the colon is optional and it is used to force the
 type used in the comparison which is otherwise assumed to be the native type of the key. 
 The possible types are:
- - :l ->  integer         (C type long)
+ - :i ->  integer
  - :d ->  floating point  (C type double)
  - :s ->  string
  - :n ->  namespace.
@@ -137,7 +137,7 @@ $toolsDir/grib_compare -A 2 -c data:n first.grib1 second.grib1
 set -e
 
 echo "\\endverbatim
-and we see that the comparison is successful if the absolute tolerance is set to 2. 
+and we see that the comparison is successful if the absolute tolerance is set to 2.
 We can also set the relative tolerance for each key with the option -R:"
 echo "\\verbatim 
 >grib_compare -R packedValues=0.4 -c data:n first.grib1 second.grib1"
diff --git a/tools/grib_copy.dox b/tools/grib_copy.dox
index 3889c48..a2ca31f 100644
--- a/tools/grib_copy.dox
+++ b/tools/grib_copy.dox
@@ -11,25 +11,28 @@
  \n \n -r  \n Repack data. Sometimes after setting some keys involving properties
 		of the packing algorithm a repacking of data is needed.
 		This repacking is performed setting this -r option.
- \n \n -p key[:{s/d/l}],key[:{s/d/l}],... \n 
+ \n \n -p key[:{s/d/i}],key[:{s/d/i}],... \n 
 		Declaration of keys to print.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be requested. Default type is string.
- \n \n -P key[:{s/d/l}],key[:{s/d/l}],... \n 
+ \n \n -P key[:{s/d/i}],key[:{s/d/i}],... \n 
 		As -p adding the declared keys to the default list.
- \n \n -w key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n 
+ \n \n -w key[:{s/d/i}]{=/!=}value,key[:{s/d/i}]=value,... \n 
 		Where clause.
 		Only grib messages matching the key/value constraints are copied to the
 		output_grib_file.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		A valid constraint is of type key=value or key!=value.
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be defined. Default type is string.
  \n \n -B order by directive \n 
-		Order by. The output will be ordered according the order by directive.
-		Order by example: "step asc, centre desc" (step ascending and centre discending)
+		Order by. The output will be ordered according to the order by directive.
+		Order by example: "step asc, centre desc" (step ascending and centre descending)
  \n \n -V  \n Version.
  \n \n -W width \n 
 		Minimum width of each column in output. Default is 10.
- \n \n -M  \n Multi-grib support off. Turn off support for multiple fields in single grib message.
+ \n \n -M  \n Multi-field support off. Turn off support for multiple fields in single grib message.
+ \n \n -T T | B | M | A \n Message type. T->GTS, B->BUFR, M->METAR (Experimental),A->Any (Experimental).
+			The input file is interpreted according to the message type.
  \n \n -g  \n Copy GTS header. 
  \n \n -G  \n GRIBEX compatibility mode.
  \n \n -7  \n Does not fail when the message has wrong length
@@ -44,6 +47,10 @@
 \verbatim
 > grib_copy -w levtype!=pl ../data/tigge_pf_ecmwf.grib2 out.grib
 \endverbatim\n
+-# To copy only the first three fields from a file\n
+\verbatim
+> grib_copy -w count=1/2/3 ../data/tigge_pf_ecmwf.grib2 out.grib
+\endverbatim\n
 -# A grib_file with multi field messages can be converted in single field messages
 with a simple grib_copy.\n
 \verbatim
@@ -52,6 +59,6 @@ with a simple grib_copy.\n
 -# Use the square brackets to insert the value of a key
 in the name of the output file.\n
 \verbatim
-> grib_copy in.grib out_[shortName].grib
+> grib_copy in.grib 'out_[shortName].grib'
 \endverbatim\n
 */
diff --git a/tools/grib_copy.sh b/tools/grib_copy.sh
index 6bc039e..fcb5468 100755
--- a/tools/grib_copy.sh
+++ b/tools/grib_copy.sh
@@ -11,6 +11,11 @@ echo "\verbatim"
 echo "> grib_copy -w levtype!=pl ../data/tigge_pf_ecmwf.grib2 out.grib"
 echo "\endverbatim\\n"
 
+echo "-# To copy only the first three fields from a file\\n"
+echo "\verbatim"
+echo "> grib_copy -w count=1/2/3 ../data/tigge_pf_ecmwf.grib2 out.grib"
+echo "\endverbatim\\n"
+
 echo "-# A grib_file with multi field messages can be converted in single field messages"
 echo "with a simple grib_copy.\\n"
 echo "\verbatim"
@@ -20,5 +25,5 @@ echo "\endverbatim\\n"
 echo "-# Use the square brackets to insert the value of a key"
 echo "in the name of the output file.\\n"
 echo "\verbatim"
-echo "> grib_copy in.grib out_[shortName].grib"
+echo "> grib_copy in.grib 'out_[shortName].grib'"
 echo "\endverbatim\\n"
diff --git a/tools/grib_count.c b/tools/grib_count.c
deleted file mode 100644
index 3067835..0000000
--- a/tools/grib_count.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2005-2016 ECMWF.
- *
- * This software is licensed under the terms of the Apache Licence Version 2.0
- * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
- *
- * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
- * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
- */
-
-#include "grib_api_internal.h"
-
-void usage(char* prog)
-{
-    printf("usage: %s infile1 infile2 ... \n",prog);
-    exit(1);
-}
-
-static int check_file(FILE* in,long *count)
-{
-    void* mesg=NULL;
-    size_t size=0;
-    off_t offset=0;
-    int err=0;
-    grib_context* c=grib_context_get_default();
-
-    if (!in) return 1;
-
-    while ( (mesg=wmo_read_any_from_file_malloc ( in,0,  &size,&offset,&err))!=NULL && err==GRIB_SUCCESS) {
-        grib_context_free(c,mesg);
-        (*count)++;
-    }
-
-    if (err==GRIB_END_OF_FILE) err=GRIB_SUCCESS;
-
-    return err;
-}
-
-int main(int argc,char* argv[])
-{
-
-    FILE* infh;
-    char* filename;
-    int i;
-    int err=0;
-    long n=0,nn=0;
-
-    if (argc <2) usage(argv[0]);
-
-    n=0;
-    for (i=1;i<argc;i++) {
-        filename=argv[i];
-
-        infh=fopen(filename,"r");
-        if (!infh) {
-            perror(filename);
-            exit(1);
-        }
-
-        nn=0;
-        err=check_file(infh,&nn);
-        if (err!=0) {
-            fprintf(stderr,"Invalid grib message(s) found in %s\n", filename);
-            exit(err);
-        }
-        n+=nn;
-
-        fclose(infh);
-    }
-    printf("%ld\n",n);
-
-    return 0;
-}
diff --git a/tools/grib_dump.c b/tools/grib_dump.c
index 4fd22c1..14ee0b0 100644
--- a/tools/grib_dump.c
+++ b/tools/grib_dump.c
@@ -22,7 +22,7 @@ grib_option grib_options[]={
     {"D",0,0,0,1,0},
     {"d",0,"Print all data values.\n",0,1,0},
     {"j",0,0,0,1,0},
-    {"C",0,0,0,1,0},
+    /*  {"C",0,0,0,1,0}, */   /* See ECC-234 */
     {"t",0,0,0,1,0},
     {"H",0,0,0,1,0},
     {"a",0,0,0,1,0},
@@ -66,7 +66,7 @@ int grib_tool_init(grib_runtime_options* options)
     options->dump_mode = "default";
 
     if (opt > 1) {
-        printf("%s: simultaneous j/C/O/D options not allowed\n",grib_tool_name);
+        printf("%s: simultaneous j/O/D options not allowed\n",grib_tool_name);
         exit(1);
     }
 
@@ -75,6 +75,7 @@ int grib_tool_init(grib_runtime_options* options)
         json=1;
     }
 
+    /* See ECC-234
     if (grib_options_on("C")) {
         options->dump_mode = "c_code";
         if (grib_options_on("d"))
@@ -82,6 +83,7 @@ int grib_tool_init(grib_runtime_options* options)
         else
             options->dump_flags = GRIB_DUMP_FLAG_NO_DATA;
     }
+    */
 
     if  (grib_options_on("O")) {
         options->dump_mode = "wmo";
diff --git a/tools/grib_dump.dox b/tools/grib_dump.dox
index 1ba2d0d..3cc0069 100644
--- a/tools/grib_dump.dox
+++ b/tools/grib_dump.dox
@@ -9,21 +9,29 @@
 \section OPTIONS 
 -O  \n Octet mode. WMO documentation style dump.
  \n \n -D  \n Debug mode.
- \n \n -d  \n Print all data values. Available only in C mode
- \n \n -C  \n C code mode. A C code program generating the grib message is dumped.
+ \n \n -d  \n Print all data values.
+ \n \n -j  \n JSON mode (JavaScript Object Notation).
  \n \n -t  \n Print type information.
  \n \n -H  \n Print octet content in hexadecimal format.
  \n \n -a  \n Dump aliases.
- \n \n -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... \n 
+ \n \n -w key[:{s/d/i}]{=/!=}value,key[:{s/d/i}]{=/!=}value,... \n 
 		Where clause.
-		Grib messages are processed only if they match all the key/value constraints.
+		Messages are processed only if they match all the key/value constraints.
 		A valid constraint is of type key=value or key!=value.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be specified. Default type is string.
- \n \n -M  \n Multi-grib support off. Turn off support for multiple fields in single grib message.
+ \n \n -s key[:{s/d/i}]=value,key[:{s/d/i}]=value,... \n 
+		Key/values to set.
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
+		type can be defined. By default the native type is set.
+ \n \n -M  \n Multi-field support off. Turn off support for multiple fields in single grib message.
+ \n \n -T T | B | M | A \n Message type. T->GTS, B->BUFR, M->METAR (Experimental),A->Any (Experimental).
+			The input file is interpreted according to the message type.
  \n \n -7  \n Does not fail when the message has wrong length
  \n \n -V  \n Version.
- \n \n -G  \n GRIBEX compatibility mode.
+ \n \n -X offset \n 
+		Input file offset in bytes. Processing of the input file will start from "offset".
+ \n \n -x  \n Fast parsing option, only headers are loaded.
  \n \n 
 \section grib_dump_examples grib_dump examples
 -# To dump in a WMO documentation style with hexadecimal octet values (-H).\n
@@ -38,209 +46,4 @@
 \verbatim 
 > grib_dump -D ../data/regular_latlon_surface.grib1
 \endverbatim\n
--# To obtain a C code example from a grib file.\n
-\code 
->grib_dump -C ../data/regular_latlon_surface.grib1
-#include <grib_api.h>
-
-/* This code was generated automatically */
-
-
-int main(int argc,const char** argv)
-{
-    grib_handle *h     = NULL;
-    size_t size        = 0;
-    double* vdouble    = NULL;
-    long* vlong        = NULL;
-    FILE* f            = NULL;
-    const char* p      = NULL;
-    const void* buffer = NULL;
-
-    if(argc != 2) {
-       fprintf(stderr,"usage: %s out\n",argv[0]);
-        exit(1);
-    }
-
-    h = grib_handle_new_from_samples(NULL,"GRIB1");
-    if(!h) {
-        fprintf(stderr,"Cannot create grib handle\n");
-        exit(1);
-    }
-
-    GRIB_CHECK(grib_set_long(h,"parametersVersion",1),0);
-    GRIB_CHECK(grib_set_long(h,"truncateLaplacian",0),0);
-    GRIB_CHECK(grib_set_long(h,"truncateDegrees",0),0);
-    GRIB_CHECK(grib_set_long(h,"dummy",1),0);
-    GRIB_CHECK(grib_set_long(h,"changingPrecision",0),0);
-    GRIB_CHECK(grib_set_long(h,"unitsFactor",1),0);
-    GRIB_CHECK(grib_set_long(h,"unitsBias",0),0);
-    GRIB_CHECK(grib_set_long(h,"timeRangeIndicatorFromStepRange",-1),0);
-    GRIB_CHECK(grib_set_long(h,"eps",0),0);
-    GRIB_CHECK(grib_set_long(h,"editionNumber",1),0);
-    GRIB_CHECK(grib_set_long(h,"productionStatusOfProcessedData",0),0);
-    GRIB_CHECK(grib_set_long(h,"table2Version",128),0);
-
-    /* 98 = European Center for Medium-Range Weather Forecasts (grib1/0.table)  */
-    GRIB_CHECK(grib_set_long(h,"centre",98),0);
-
-    GRIB_CHECK(grib_set_long(h,"generatingProcessIdentifier",130),0);
-    GRIB_CHECK(grib_set_long(h,"gridDefinition",255),0);
-
-    /* 128 = 10000000
-    (1=1)  Section 2 included
-    (2=0)  Section 3 omited
-    See grib1/1.table */
-    GRIB_CHECK(grib_set_long(h,"section1Flags",128),0);
-
-
-    /* 167 = 2 metre temperature  (K)  (grib1/2.98.128.table)  */
-    GRIB_CHECK(grib_set_long(h,"indicatorOfParameter",167),0);
-
-
-    /* 1 = Surface  (of the Earth, which includes sea surface)  (grib1/3.table)  */
-    GRIB_CHECK(grib_set_long(h,"indicatorOfTypeOfLevel",1),0);
-
-    GRIB_CHECK(grib_set_long(h,"level",0),0);
-    GRIB_CHECK(grib_set_long(h,"yearOfCentury",8),0);
-    GRIB_CHECK(grib_set_long(h,"month",2),0);
-    GRIB_CHECK(grib_set_long(h,"day",6),0);
-    GRIB_CHECK(grib_set_long(h,"hour",12),0);
-    GRIB_CHECK(grib_set_long(h,"minute",0),0);
-    GRIB_CHECK(grib_set_long(h,"second",0),0);
-
-    /* 1 = Hour (grib1/4.table)  */
-    GRIB_CHECK(grib_set_long(h,"unitOfTimeRange",1),0);
-
-    GRIB_CHECK(grib_set_long(h,"P1",0),0);
-    GRIB_CHECK(grib_set_long(h,"P2",0),0);
-
-    /* 0 = Forecast product valid at reference time + P1  (P1>0)  (grib1/5.table)  */
-    GRIB_CHECK(grib_set_long(h,"timeRangeIndicator",0),0);
-
-    GRIB_CHECK(grib_set_long(h,"numberIncludedInAverage",0),0);
-    GRIB_CHECK(grib_set_long(h,"numberMissingFromAveragesOrAccumulations",0),0);
-    GRIB_CHECK(grib_set_long(h,"centuryOfReferenceTimeOfData",21),0);
-
-    /* 0 = Unknown code table entry (grib1/0.ecmf.table)  */
-    GRIB_CHECK(grib_set_long(h,"subCentre",0),0);
-
-    GRIB_CHECK(grib_set_long(h,"decimalScaleFactor",0),0);
-    GRIB_CHECK(grib_set_long(h,"setLocalDefinition",0),0);
-    GRIB_CHECK(grib_set_long(h,"dataDate",20080206),0);
-    GRIB_CHECK(grib_set_long(h,"dataTime",1200),0);
-
-    /* 1 = Hour (stepUnits.table)  */
-    GRIB_CHECK(grib_set_long(h,"stepUnits",1),0);
-
-    GRIB_CHECK(grib_set_long(h,"deleteLocalDefinition",0),0);
-
-    /* 1 = MARS labelling or ensemble forecast data (grib1/localDefinitionNumber.98.table)  */
-    GRIB_CHECK(grib_set_long(h,"localDefinitionNumber",1),0);
-
-
-    /* 1 = Operational archive (mars/class.table)  */
-    GRIB_CHECK(grib_set_long(h,"marsClass",1),0);
-
-
-    /* 2 = Analysis (mars/type.table)  */
-    GRIB_CHECK(grib_set_long(h,"marsType",2),0);
-
-
-    /* 1025 = Atmospheric model (mars/stream.table)  */
-    GRIB_CHECK(grib_set_long(h,"marsStream",1025),0);
-
-    p    = "0001";
-    size = strlen(p)+1;
-    GRIB_CHECK(grib_set_string(h,"experimentVersionNumber",p,&size),0);
-    GRIB_CHECK(grib_set_long(h,"perturbationNumber",0),0);
-    GRIB_CHECK(grib_set_long(h,"numberOfForecastsInEnsemble",0),0);
-
-    /* x */
-
-    GRIB_CHECK(grib_set_long(h,"gridDescriptionSectionPresent",1),0);
-    GRIB_CHECK(grib_set_long(h,"GDSPresent",1),0);
-    GRIB_CHECK(grib_set_long(h,"bitmapPresent",0),0);
-    GRIB_CHECK(grib_set_long(h,"radius",6367470),0);
-    GRIB_CHECK(grib_set_long(h,"shapeOfTheEarth",6),0);
-    GRIB_CHECK(grib_set_long(h,"numberOfVerticalCoordinateValues",0),0);
-    GRIB_CHECK(grib_set_long(h,"pvlLocation",255),0);
-
-    /* 0 = Latitude/Longitude Grid (grib1/6.table)  */
-    GRIB_CHECK(grib_set_long(h,"dataRepresentationType",0),0);
-
-    GRIB_CHECK(grib_set_long(h,"Ni",16),0);
-    GRIB_CHECK(grib_set_long(h,"Nj",31),0);
-    GRIB_CHECK(grib_set_long(h,"latitudeOfFirstGridPoint",60000),0);
-    GRIB_CHECK(grib_set_long(h,"longitudeOfFirstGridPoint",0),0);
-
-    /* 128 = 10000000
-    (1=1)  Direction increments given
-    (2=0)  Earth assumed spherical with radius = 6367.47 km
-    (5=0)  u and v components resolved relative to easterly and northerly directions
-    See grib1/7.table */
-    GRIB_CHECK(grib_set_long(h,"resolutionAndComponentFlags",128),0);
-
-    GRIB_CHECK(grib_set_long(h,"ijDirectionIncrementGiven",1),0);
-    GRIB_CHECK(grib_set_long(h,"earthIsOblate",0),0);
-    GRIB_CHECK(grib_set_long(h,"uvRelativeToGrid",0),0);
-    GRIB_CHECK(grib_set_long(h,"latitudeOfLastGridPoint",0),0);
-    GRIB_CHECK(grib_set_long(h,"longitudeOfLastGridPoint",30000),0);
-    GRIB_CHECK(grib_set_long(h,"iDirectionIncrement",2000),0);
-    GRIB_CHECK(grib_set_long(h,"jDirectionIncrement",2000),0);
-
-    /* 0 = 00000000
-    (1=0)  Points scan in +i direction
-    (2=0)  Points scan in -j direction
-    (3=0)  Adjacent points in i direction are consecutive 
-    See grib1/8.table */
-    GRIB_CHECK(grib_set_long(h,"scanningMode",0),0);
-
-    GRIB_CHECK(grib_set_long(h,"iScansNegatively",0),0);
-    GRIB_CHECK(grib_set_long(h,"jScansPositively",0),0);
-    GRIB_CHECK(grib_set_long(h,"jPointsAreConsecutive",0),0);
-    GRIB_CHECK(grib_set_long(h,"iScansPositively",1),0);
-
-    /* ITERATOR */
-
-
-    /* NEAREST */
-
-    GRIB_CHECK(grib_set_long(h,"PVPresent",0),0);
-    GRIB_CHECK(grib_set_long(h,"PLPresent",0),0);
-    GRIB_CHECK(grib_set_long(h,"missingValue",9999),0);
-    GRIB_CHECK(grib_set_long(h,"sphericalHarmonics",0),0);
-    GRIB_CHECK(grib_set_long(h,"complexPacking",0),0);
-    GRIB_CHECK(grib_set_long(h,"integerPointValues",0),0);
-    GRIB_CHECK(grib_set_long(h,"additionalFlagPresent",0),0);
-    GRIB_CHECK(grib_set_long(h,"hideThis",0),0);
-    GRIB_CHECK(grib_set_long(h,"bitsPerValue",16),0);
-    GRIB_CHECK(grib_set_long(h,"dirty_statistics",1),0);
-    GRIB_CHECK(grib_set_long(h,"dataLength",124),0);
-    GRIB_CHECK(grib_set_long(h,"changeDecimalPrecision",0),0);
-    GRIB_CHECK(grib_set_long(h,"decimalPrecision",0),0);
-    GRIB_CHECK(grib_set_long(h,"bitsPerValueAndRepack",16),0);
-/* Save the message */
-
-    f = fopen(argv[1],"w");
-    if(!f) {
-        perror(argv[1]);
-        exit(1);
-    }
-
-    GRIB_CHECK(grib_get_message(h,&buffer,&size),0);
-
-    if(fwrite(buffer,1,size,f) != size) {
-        perror(argv[1]);
-        exit(1);
-    }
-
-    if(fclose(f)) {
-        perror(argv[1]);
-        exit(1);
-    }
-
-    grib_handle_delete(h);
-    return 0;
-}
-\endcode\n
 */
diff --git a/tools/grib_filter.c b/tools/grib_filter.c
index ac5c747..dfe3489 100644
--- a/tools/grib_filter.c
+++ b/tools/grib_filter.c
@@ -8,11 +8,6 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_filter
- *
- */
-
 #include "grib_tools.h"
 
 grib_option grib_options[]={
@@ -31,8 +26,8 @@ grib_option grib_options[]={
     {"7",0,0,0,1,0},
     {"v",0,0,0,1,0}
 };
-char* grib_tool_description="Apply the rules defined in rules_file to each grib "
-   "message\n\tin the grib files provided as arguments.\n\t"
+char* grib_tool_description="Apply the rules defined in rules_file to each GRIB "
+   "message\n\tin the GRIB files provided as arguments.\n\t"
    "If you specify '-' (a single dash) for the rules_file, the rules will be read from standard input.";
 char* grib_tool_name="grib_filter";
 char* grib_tool_usage="[options] rules_file "
@@ -71,6 +66,14 @@ int grib_tool_new_filename_action(grib_runtime_options* options,const char* file
 
 int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
 {
+    struct stat s;
+    int stat_val = stat(file->name, &s);
+    if ( stat_val == 0 ) {
+        if (S_ISDIR(s.st_mode)) {
+            fprintf(stderr, "ERROR: \"%s\": Is a directory\n", file->name);
+            exit(1);
+        }
+    }
     return 0;
 }
 
diff --git a/tools/grib_filter.dox b/tools/grib_filter.dox
index e9c0031..ac0a541 100644
--- a/tools/grib_filter.dox
+++ b/tools/grib_filter.dox
@@ -1,8 +1,8 @@
 /*!  \page grib_filter grib_filter
-Latest training course presentation on grib_filter available <a href="http://www.ecmwf.int/services/computing/training/material/grib_api/grib_api_filter.pdf">here<img src="/assets/icons/pdf.gif" width="20" height="20" align="absmiddle" border="0"></a>.
 \section DESCRIPTION 
- Apply the rules defined in rules_file to each grib message
-	in the grib files provided as arguments.
+ Apply the rules defined in rules_file to each GRIB message
+	in the GRIB files provided as arguments.
+	If you specify '-' (a single dash) for the rules_file, the rules will be read from standard input.
 
 \section USAGE 
  grib_filter 
@@ -10,13 +10,15 @@ Latest training course presentation on grib_filter available <a href="http://www
 
 \section OPTIONS 
 -f  \n Force. Force the execution not to fail on error.
- \n \n -o output_grib_file \n 
-		Output grib is written to ouput_grib_file.
-		If an ouput grib file is required and -o is not used, the ouput grib is written to filtered.out
- \n \n -M  \n Multi-grib support off. Turn off support for multiple fields in single grib message.
+ \n \n -o output_file \n 
+		Output is written to output_file.
+		If an output file is required and -o is not used, the output is written to filter.out
+ \n \n -M  \n Multi-field support off. Turn off support for multiple fields in single grib message.
  \n \n -V  \n Version.
  \n \n -g  \n Copy GTS header. 
  \n \n -G  \n GRIBEX compatibility mode.
+ \n \n -T T | B | M | A \n Message type. T->GTS, B->BUFR, M->METAR (Experimental),A->Any (Experimental).
+			The input file is interpreted according to the message type.
  \n \n -7  \n Does not fail when the message has wrong length
  \n \n -v  \n Verbose.
  \n \n 
@@ -26,7 +28,7 @@ Latest training course presentation on grib_filter available <a href="http://www
  is sent to multiple files depending on key values used in the output file name. \n
  If we write a rules_file containing the only statement:\n \n
 \verbatim
-write "../data/split/[centre]_[dataDate]_[dataType]_[levelType].grib[edition]";
+write "../data/split/[centre]_[date]_[dataType]_[levelType].grib[editionNumber]";
 \endverbatim\n
 Applying this rules_file to the "../data/tigge_pf_ecmwf.grib2" grib file we obtain several files in the ../data/split directory containing 
  fields split according to their key values\n 
@@ -41,14 +43,14 @@ ecmf_20070122_pf_pv.grib2
 ecmf_20070122_pf_sfc.grib2
 \endverbatim\n
 -# The key values in the file name can also be obtained in a different format by indicating explicitly the type required after a colon.
- - :l for long
+ - :i for integer
  - :d for double
  - :s for string
  .
 The following statement works in a slightly different way from the previous example, 
- including in the output file name the long values for centre and dataType.\n
+ including in the output file name the integer values for centre and dataType.\n
 \verbatim
-write "../data/split/[centre:l]_[dataDate]_[dataType:l]_[levelType].grib[edition]";
+write "../data/split/[centre:i]_[date]_[dataType:i]_[levelType].grib[editionNumber]";
 \endverbatim\n
 Running the same command again we obtain a different list of files.\n
 \verbatim
@@ -62,20 +64,19 @@ Running the same command again we obtain a different list of files.\n
 98_20070122_4_sfc.grib2
 \endverbatim\n
 -# Other statements are allowed in the grib_filter syntax:
-  - comments beginning with #
-  - print "string to print also with key values like in the file name"
-  - transient keyname1 = keyname2;
-  - set keyname = keyvalue;
-  - defined(keyname) to check if a key is defined in a message
   - if ( condition ) { block of rules } else { block of rules }\n
     The condition can be made using ==,!= and joining single block conditions with || and && \n
     The statement can be any valid statement also another nested condition\n
+  - set keyname = keyvalue;
+  - print "string to print also with key values like in the file name"
+  - transient keyname1 = keyname2;
+  - comments beginning with #
   .
 A complex example of grib_filter rules is the following to change temperature in a grib edition 1 file.
 \verbatim
 # Temperature
 if ( level == 850 && indicatorOfParameter == 11 ) {
-    print "found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[dataDate]";
+    print "found indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]";
     transient oldtype = type ;
     set identificationOfOriginatingGeneratingSubCentre=98;
     set gribTablesVersionNo = 128;
@@ -95,32 +96,40 @@ if ( level == 850 && indicatorOfParameter == 11 ) {
     }
     set numberOfForecastsInEnsemble=11;
     write;
-    print "indicatorOfParameter=[indicatorOfParameter] level=[level] date=[dataDate]";
+    print "indicatorOfParameter=[indicatorOfParameter] level=[level] date=[date]";
     print;
 }
 \endverbatim\n
+-# Here is an example of an IF statement comparing a key with a string. 
+Note you have to use the "is" keyword for strings and not "==", and to negate you add the "!" before the whole condition:\n \n
+\verbatim
+# Select Geopotential Height messages which are not on a Reduced Gaussian Grid
+if (shortName is "gh" && !(gridType is "reduced_gg" )) {
+    set step = 72;
+}
+\endverbatim\n
 -# The switch statement is an enhanced version of the if statement. Its syntax is the following:
 \verbatim
-switch (key1,key2,...,keyn) {
-    case val11,val12,...,val1n:
+switch (key1) {
+    case val1:
         # block of rules;
-    case val21,val22,...,val2n:
+    case val2:
         # block of rules;
     default:
-        # [ block of rules ]
+        # block of rules
 }
 \endverbatim\n
 Each value of each key given as argument to the switch statement is matched against the values specified in the case statements.\n
 If there is a match, then the block or rules corresponding to the matching case statement is executed.\n
-Otherwise, the default case is executed. The default case is mandatory, even if empty.\n
+Otherwise, the default case is executed. The default case is mandatory if the case statements do not cover all the possibilities.\n
 The "~" operator can be used to match "anything".\n\n
 Following is an example showing the use of the switch statement:\n
 \verbatim
 processing paramId=[paramId] [shortName] [stepType]
-switch (shortName,indicatorOfParameter) {
-    case tp:
+switch (shortName) {
+    case tp :
         set stepType=accum;
-    case ~,2 :
+    case 10u :
         set typeOfLevel=surface;
     default:
 }
diff --git a/tools/grib_filter.sh b/tools/grib_filter.sh
index ec27bad..2a7c60d 100755
--- a/tools/grib_filter.sh
+++ b/tools/grib_filter.sh
@@ -31,15 +31,15 @@ ls ../data/split
 echo "\\endverbatim\\n"
 
 echo "-# The key values in the file name can also be obtained in a different format by indicating explicitly the type required after a colon."
-echo " - :l for long"
+echo " - :i for integer"
 echo " - :d for double"
 echo " - :s for string"
 echo " ."
 echo "The following statement works in a slightly different way from the previous example, "
-echo " including in the output file name the long values for centre and dataType.\\n"
+echo " including in the output file name the integer values for centre and dataType.\\n"
 
 echo "\\verbatim"
-echo "write \"../data/split/[centre:l]_[date]_[dataType:l]_[levelType].grib[editionNumber]\";"
+echo "write \"../data/split/[centre:i]_[date]_[dataType:i]_[levelType].grib[editionNumber]\";"
 echo "\\endverbatim\\n"
 echo "Running the same command again we obtain a different list of files.\\n"
 echo "\\verbatim"
@@ -52,7 +52,7 @@ else
 fi
 
 cat > rules_file <<EOF
-write "../data/split/[centre:l]_[date]_[dataType:l]_[levelType].grib[editionNumber]";
+write "../data/split/[centre:i]_[date]_[dataType:i]_[levelType].grib[editionNumber]";
 EOF
 
 echo ">grib_filter rules_file ../data/tigge_pf_ecmwf.grib2"
@@ -103,6 +103,15 @@ echo "}"
 
 echo "\\endverbatim\\n"
 
+echo "-# Here is an example of an IF statement comparing a key with a string. "
+echo "Note you have to use the \"is\" keyword for strings and not \"==\", and to negate you add the \"!\" before the whole condition:\\n \\n"
+echo "\\verbatim"
+echo "# Select Geopotential Height messages which are not on a Reduced Gaussian Grid"
+echo "if (shortName is \"gh\" && !(gridType is \"reduced_gg\" )) {"
+echo "    set step = 72;"
+echo "}"
+echo "\\endverbatim\\n"
+
 echo "-# The switch statement is an enhanced version of the if statement. Its syntax is the following:"
 echo "\\verbatim"
 echo "switch (key1) {"
diff --git a/tools/grib_get.dox b/tools/grib_get.dox
index 28835ac..67e0b39 100644
--- a/tools/grib_get.dox
+++ b/tools/grib_get.dox
@@ -10,9 +10,9 @@
 
 \section OPTIONS 
 -f  \n Force. Force the execution not to fail on error.
- \n \n -p key[:{s/d/l}],key[:{s/d/l}],... \n 
+ \n \n -p key[:{s/d/i}],key[:{s/d/i}],... \n 
 		Declaration of keys to print.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be requested. Default type is string.
  \n \n -F format \n 
 		C style format for floating point values.
@@ -22,28 +22,32 @@
 		4 (4 values in the nearest points are printed) Default
 		1 (the value at the nearest point is printed)
 		file (file is used as mask. The closer point with mask value>=0.5 is printed)
- \n \n -P key[:{s/d/l}],key[:{s/d/l}],... \n 
+ \n \n -P key[:{s/d/i}],key[:{s/d/i}],... \n 
 		As -p adding the declared keys to the default list.
- \n \n -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... \n 
+ \n \n -w key[:{s/d/i}]{=/!=}value,key[:{s/d/i}]{=/!=}value,... \n 
 		Where clause.
-		Grib messages are processed only if they match all the key/value constraints.
+		Messages are processed only if they match all the key/value constraints.
 		A valid constraint is of type key=value or key!=value.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be specified. Default type is string.
  \n \n -n namespace \n 
 		All the keys belonging to namespace are printed.
- \n \n -s key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n 
+ \n \n -s key[:{s/d/i}]=value,key[:{s/d/i}]=value,... \n 
 		Key/values to set.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be defined. By default the native type is set.
  \n \n -V  \n Version.
  \n \n -W width \n 
 		Minimum width of each column in output. Default is 10.
  \n \n -m  \n Mars keys are printed.
- \n \n -M  \n Multi-grib support off. Turn off support for multiple fields in single grib message.
+ \n \n -M  \n Multi-field support off. Turn off support for multiple fields in single grib message.
  \n \n -g  \n Copy GTS header. 
  \n \n -G  \n GRIBEX compatibility mode.
+ \n \n -T T | B | M | A \n Message type. T->GTS, B->BUFR, M->METAR (Experimental),A->Any (Experimental).
+			The input file is interpreted according to the message type.
  \n \n -7  \n Does not fail when the message has wrong length
+ \n \n -X offset \n 
+		Input file offset in bytes. Processing of the input file will start from "offset".
  \n \n -i index \n 
 		Data value corresponding to the given index is printed.
  \n \n 
diff --git a/tools/grib_get_data.c b/tools/grib_get_data.c
index f26c23e..57f6984 100644
--- a/tools/grib_get_data.c
+++ b/tools/grib_get_data.c
@@ -116,7 +116,12 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
         while(grib_iterator_next(iter,lat++,lon++,val++)) {}
     } else if (err==GRIB_NOT_IMPLEMENTED || err==GRIB_SUCCESS){
         size=numberOfPoints;
-        grib_get_double_array(h,"values",data_values,&size);
+        err = grib_get_double_array(h,"values",data_values,&size);
+        if (err) {
+            grib_context_log(h->context,GRIB_LOG_ERROR,"Cannot decode values: %s",
+                    grib_get_error_message(err));
+            exit(1);
+        }
         if (size!=numberOfPoints) {
             if (!grib_options_on("q"))
                 fprintf(dump_file,"ERROR: wrong number of points %d\n",(int)numberOfPoints);
@@ -279,8 +284,9 @@ static grib_values* get_key_values(grib_runtime_options* options,grib_handle* h)
 
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
 
diff --git a/tools/grib_get_data.dox b/tools/grib_get_data.dox
index 312e26f..a50af08 100644
--- a/tools/grib_get_data.dox
+++ b/tools/grib_get_data.dox
@@ -7,26 +7,28 @@
  [options] grib_file grib_file ...
 
 \section OPTIONS 
--M  \n Multi-grib support off. Turn off support for multiple fields in single grib message.
+-M  \n Multi-field support off. Turn off support for multiple fields in single grib message.
  \n \n -m missingValue \n 
 		The missing value is given through this option.
 		Any string is allowed and it is printed in place of the missing
 		values. Default is to skip the missing values.
- \n \n -p key[:{s/d/l}],key[:{s/d/l}],... \n 
+ \n \n -p key[:{s/d/i}],key[:{s/d/i}],... \n 
 		Declaration of keys to print.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be requested. Default type is string.
  \n \n -F format \n 
 		C style format for values. Default is "%.10e"
- \n \n -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... \n 
+ \n \n -w key[:{s/d/i}]{=/!=}value,key[:{s/d/i}]{=/!=}value,... \n 
 		Where clause.
-		Grib messages are processed only if they match all the key/value constraints.
+		Messages are processed only if they match all the key/value constraints.
 		A valid constraint is of type key=value or key!=value.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be specified. Default type is string.
  \n \n -f  \n Force. Force the execution not to fail on error.
  \n \n -G  \n GRIBEX compatibility mode.
  \n \n -7  \n Does not fail when the message has wrong length
+ \n \n -X offset \n 
+		Input file offset in bytes. Processing of the input file will start from "offset".
  \n \n -V  \n Version.
  \n \n 
 \section grib_get_data_examples grib_get_data examples
diff --git a/tools/grib_histogram.c b/tools/grib_histogram.c
index fcafaeb..22b968e 100644
--- a/tools/grib_histogram.c
+++ b/tools/grib_histogram.c
@@ -14,7 +14,7 @@
 
 #include "grib_api.h"
 
-void usage(const char *prog)
+static void usage(const char *prog)
 {
 	fprintf(stderr,"%s:  in1 [in2 ... ]  out\n",prog);
 	exit(1);
diff --git a/tools/grib_index_build.c b/tools/grib_index_build.c
index d342dbb..32ee166 100644
--- a/tools/grib_index_build.c
+++ b/tools/grib_index_build.c
@@ -55,7 +55,6 @@ int grib_tool_before_getopt(grib_runtime_options* options)
 
 int grib_tool_init(grib_runtime_options* options)
 {
-
     int ret=0;
     grib_context* c=grib_context_get_default();
 
@@ -108,11 +107,10 @@ void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
 
 int grib_tool_finalise_action(grib_runtime_options* options)
 {
-    grib_index_key* keys;
+    grib_index_key* the_keys;
     grib_string_list* values;
     int first;
 
-
     if (compress_index) {
         grib_index_compress(idx);
     }
@@ -120,18 +118,18 @@ int grib_tool_finalise_action(grib_runtime_options* options)
             grib_tool_name,options->outfile->name);
     printf("--- ");
     first=1;
-    keys=idx->keys;
-    while (keys) {
+    the_keys=idx->keys;
+    while (the_keys) {
         if (!first) printf(", ");
-        printf("%s",keys->name);
-        keys=keys->next;
+        printf("%s",the_keys->name);
+        the_keys=the_keys->next;
         first=0;
     }
     printf("\n");
-    keys=idx->keys;
-    while (keys) {
-        printf("--- %s = { ",keys->name);
-        values=keys->values;
+    the_keys=idx->keys;
+    while (the_keys) {
+        printf("--- %s = { ",the_keys->name);
+        values=the_keys->values;
         first=1;
         while (values) {
             if (!first) printf(", ");
@@ -140,7 +138,7 @@ int grib_tool_finalise_action(grib_runtime_options* options)
             values=values->next;
         }
         printf(" }\n");
-        keys=keys->next;
+        the_keys=the_keys->next;
     }
     printf("--- %d messages indexed\n",idx->count);
 
@@ -150,8 +148,8 @@ int grib_tool_finalise_action(grib_runtime_options* options)
     return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/grib_index_build.dox b/tools/grib_index_build.dox
index 3abcf58..7909861 100644
--- a/tools/grib_index_build.dox
+++ b/tools/grib_index_build.dox
@@ -8,13 +8,19 @@
 
 \section OPTIONS 
 -f  \n Force. Force the execution not to fail on error.
- \n \n -o output_grib_file \n 
-		Output grib is written to ouput_grib_file.
-		If an ouput grib file is required and -o is not used, the ouput grib is written to filtered.out
+ \n \n -o output_index_file \n 
+		Output is written to output_index_file.
+		If an output index file is required and -o is not used, the output index is written to gribidx
  \n \n -k key1,key2,... \n 
 		Specify a list of keys to index on. By default the input files are indexed on the MARS keys.
+		For each key a string (key:s) or a double (key:d) or an integer (key:i)
+		type can be requested.
  \n \n -V  \n Version.
- \n \n -M  \n Multi-grib support off. Turn off support for multiple fields in single grib message.
+ \n \n -T T | B | M | A \n Message type. T->GTS, B->BUFR, M->METAR (Experimental),A->Any (Experimental).
+			The input file is interpreted according to the message type.
+ \n \n -M  \n Multi-field support off. Turn off support for multiple fields in single grib message.
+ \n \n -N  \n Do not compress index.
+		By default the index is compressed to remove keys with only one value.
  \n \n 
 \section grib_index_build_examples grib_index_build examples
 -# By default grib_index_build will index on the MARS keys. \n
diff --git a/tools/grib_ls.dox b/tools/grib_ls.dox
index 9df9f28..73fd328 100644
--- a/tools/grib_ls.dox
+++ b/tools/grib_ls.dox
@@ -8,32 +8,33 @@
  [options] grib_file grib_file ...
 
 \section OPTIONS 
--p key[:{s/d/l}],key[:{s/d/l}],... \n 
+-p key[:{s/d/i}],key[:{s/d/i}],... \n 
 		Declaration of keys to print.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be requested. Default type is string.
  \n \n -F format \n 
 		C style format for floating point values.
- \n \n -P key[:{s/d/l}],key[:{s/d/l}],... \n 
+ \n \n -P key[:{s/d/i}],key[:{s/d/i}],... \n 
 		As -p adding the declared keys to the default list.
- \n \n -w key[:{s/d/l}]{=/!=}value,key[:{s/d/l}]{=/!=}value,... \n 
+ \n \n -w key[:{s/d/i}]{=/!=}value,key[:{s/d/i}]{=/!=}value,... \n 
 		Where clause.
-		Grib messages are processed only if they match all the key/value constraints.
+		Messages are processed only if they match all the key/value constraints.
 		A valid constraint is of type key=value or key!=value.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be specified. Default type is string.
- \n \n -j  \n json output \n \n -B order by directive \n 
-		Order by. The output will be ordered according the order by directive.
-		Order by example: "step asc, centre desc" (step ascending and centre discending)
+ \n \n -j  \n json output
+ \n \n -B order by directive \n 
+		Order by. The output will be ordered according to the order by directive.
+		Order by example: "step asc, centre desc" (step ascending and centre descending)
  \n \n -l Latitude,Longitude[,MODE,file] \n 
 		Value close to the point of a Latitude/Longitude.
 		Allowed values for MODE are:
 		4 (4 values in the nearest points are printed) Default
 		1 (the value at the nearest point is printed)
 		file (file is used as mask. The closer point with mask value>=0.5 is printed)
- \n \n -s key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n 
+ \n \n -s key[:{s/d/i}]=value,key[:{s/d/i}]=value,... \n 
 		Key/values to set.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be defined. By default the native type is set.
  \n \n -i index \n 
 		Data value corresponding to the given index is printed.
@@ -43,10 +44,13 @@
  \n \n -V  \n Version.
  \n \n -W width \n 
 		Minimum width of each column in output. Default is 10.
- \n \n -M  \n Multi-grib support off. Turn off support for multiple fields in single grib message.
+ \n \n -M  \n Multi-field support off. Turn off support for multiple fields in single grib message.
  \n \n -g  \n Copy GTS header. 
- \n \n -G  \n GRIBEX compatibility mode.
+ \n \n -T T | B | M | A \n Message type. T->GTS, B->BUFR, M->METAR (Experimental),A->Any (Experimental).
+			The input file is interpreted according to the message type.
  \n \n -7  \n Does not fail when the message has wrong length
+ \n \n -X offset \n 
+		Input file offset in bytes. Processing of the input file will start from "offset".
  \n \n -x  \n Fast parsing option, only headers are loaded.
  \n \n 
 \section grib_ls_examples grib_ls examples
@@ -75,9 +79,9 @@ Only the pressure levels are listed with the following line.\n
 ../data/reduced_gaussian_surface.grib2
 paramId     shortName    value 
 167         2t          282.002     
-1 of 1 grib messages in ../data/reduced_gaussian_surface.grib2
+1 of 1 messages in ../data/reduced_gaussian_surface.grib2
 
-1 of 1 total grib messages in 1 files
+1 of 1 total messages in 1 files
 Input Point: latitude=51.46  longitude=-1.33
 Grid Point chosen #3 index=749 latitude=51.63 longitude=0.00 distance=93.81 (Km)
 Other grid Points
diff --git a/tools/grib_options.c b/tools/grib_options.c
index d761a31..84c2780 100644
--- a/tools/grib_options.c
+++ b/tools/grib_options.c
@@ -54,10 +54,10 @@ grib_options_help grib_options_help_list[] ={
   {"n:","namespace",
    "\n\t\tAll the keys belonging to namespace are printed.\n"},
   {"m",0,"Mars keys are printed.\n"},
-  {"o:","output_grib_file",
-   "\n\t\tOutput grib is written to output_grib_file."
-   "\n\t\tIf an output grib file is required and -o is not used, the"
-   " output grib is written to filtered.out\n"},
+  {"o:","output_file",
+   "\n\t\tOutput is written to output_file."
+   "\n\t\tIf an output file is required and -o is not used, the"
+   " output is written to filter.out\n"},
   {"p:","key[:{s/d/i}],key[:{s/d/i}],...",
    "\n\t\tDeclaration of keys to print."
    "\n\t\tFor each key a string (key:s), a double (key:d) or an integer (key:i)"
@@ -187,7 +187,7 @@ int grib_process_runtime_options(grib_context* context,int argc,char** argv,grib
     char *karg=NULL,*warg=NULL,*sarg=NULL,*barg=NULL;
 
     if (grib_options_on("V")) {
-        printf("\neccodes Version ");
+        printf("\necCodes Version ");
         grib_print_api_version(stdout);
         printf("\n\n");
         exit(0);
@@ -312,7 +312,7 @@ int grib_process_runtime_options(grib_context* context,int argc,char** argv,grib
     else grib_gts_header_off(context);
 
     if (grib_options_on("V")) {
-        printf("\neccodes Version ");
+        printf("\necCodes Version ");
         grib_print_api_version(stdout);
         printf("\n\n");
     }
diff --git a/tools/grib_set.c b/tools/grib_set.c
index b98919b..3a59039 100644
--- a/tools/grib_set.c
+++ b/tools/grib_set.c
@@ -120,8 +120,10 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
             GRIB_CHECK_NOLINE(grib_get_double_array(h,"values",v,&size),0);
         }
 
-        if (options->set_values_count != 0)
+        if (options->set_values_count != 0) {
             err=grib_set_values(h,options->set_values,options->set_values_count);
+            if( err != GRIB_SUCCESS && options->fail) exit(err);
+        }
 
         if ( options->repack ) {
 
@@ -136,7 +138,9 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
             }
 #endif
 
-            GRIB_CHECK_NOLINE(grib_set_double_array(h,"values",v,size),0);
+            if (err == GRIB_SUCCESS) {
+                GRIB_CHECK_NOLINE(grib_set_double_array(h,"values",v,size),0);
+            }
             free(v);
         }
 
diff --git a/tools/grib_set.dox b/tools/grib_set.dox
index 4be27f5..ce59462 100644
--- a/tools/grib_set.dox
+++ b/tools/grib_set.dox
@@ -9,35 +9,38 @@
  [options] grib_file grib_file ... output_grib_file
 
 \section OPTIONS 
--s key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n 
+-s key[:{s/d/i}]=value,key[:{s/d/i}]=value,... \n 
 		Key/values to set.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be defined. By default the native type is set.
  \n \n -r  \n Repack data. Sometimes after setting some keys involving properties
 		of the packing algorithm a repacking of data is needed.
 		This repacking is performed setting this -r option.
  \n \n -d value \n 
 		Set all the data values to "value".
- \n \n -p key[:{s/d/l}],key[:{s/d/l}],... \n 
+ \n \n -p key[:{s/d/i}],key[:{s/d/i}],... \n 
 		Declaration of keys to print.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be requested. Default type is string.
- \n \n -P key[:{s/d/l}],key[:{s/d/l}],... \n 
+ \n \n -P key[:{s/d/i}],key[:{s/d/i}],... \n 
 		As -p adding the declared keys to the default list.
- \n \n -w key[:{s/d/l}]=value,key[:{s/d/l}]=value,... \n 
+ \n \n -w key[:{s/d/i}]{=/!=}value,key[:{s/d/i}]=value,... \n 
 		Where clause.
 		Set is only executed for grib messages matching all the key/value constraints.
 		If a grib message does not match the constraints it is copied unchanged
 		to the output_grib_file. This behaviour can be changed setting the option -S.
-		For each key a string (key:s) or a double (key:d) or a long (key:l)
+		A valid constraint is of type key=value or key!=value.
+		For each key a string (key:s), a double (key:d) or an integer (key:i)
 		type can be defined. Default type is string.
  \n \n -7  \n Does not fail when the message has wrong length
  \n \n -S  \n Strict. Only grib messages matching all the constraints are copied to
 		the output file
  \n \n -V  \n Version.
- \n \n -M  \n Multi-grib support off. Turn off support for multiple fields in single grib message.
+ \n \n -M  \n Multi-field support off. Turn off support for multiple fields in single grib message.
  \n \n -g  \n Copy GTS header. 
  \n \n -G  \n GRIBEX compatibility mode.
+ \n \n -T T | B | M | A \n Message type. T->GTS, B->BUFR, M->METAR (Experimental),A->Any (Experimental).
+			The input file is interpreted according to the message type.
  \n \n -f  \n Force. Force the execution not to fail on error.
  \n \n -v  \n Verbose.
  \n \n 
diff --git a/tools/grib_to_netcdf.c b/tools/grib_to_netcdf.c
index 24d6cbe..ca98bc0 100644
--- a/tools/grib_to_netcdf.c
+++ b/tools/grib_to_netcdf.c
@@ -32,7 +32,7 @@ static char argvString[2048];
 /*=====================================================================*/
 
 static grib_context* ctx = NULL;
-static double missing_value = 9999; /* TODO: Get from GRIBs */
+static double global_missing_value = 9.9692099683868690e+36; /* See GRIB-953 */
 
 /*===============================================================================*/
 /* request from mars client */
@@ -712,8 +712,8 @@ typedef struct field {
 
     /* missing fields/values */
 
-    boolean missing; /* field is missing */
-    boolean bitmap; /* field has missing values (= bitmap) */
+    /*boolean is_missing;*/ /* field is missing */
+    boolean has_bitmap; /* field has missing values (= bitmap) */
 
     field_request *r;
 
@@ -1074,35 +1074,35 @@ static err to_expand_mem(field *g)
 
         if((e = grib_get_size(g->handle, "values", &g->value_count)))
         {
-            grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get number of values %s", grib_get_error_message(e));
+            grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get number of values %s", grib_get_error_message(e));
             return e;
         }
 
         count = g->value_count;
 
-        if((e = grib_set_double(g->handle, "missingValue", missing_value)))
+        if((e = grib_set_double(g->handle, "missingValue", global_missing_value)))
         {
-            grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot set missingValue %s", grib_get_error_message(e));
+            grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot set missingValue %s", grib_get_error_message(e));
             return e;
         }
 
         g->values = (double*) grib_context_malloc(ctx, sizeof(double) * g->value_count);
         if((e = grib_get_double_array(g->handle, "values", g->values, &count)))
         {
-            grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get decode values %s", grib_get_error_message(e));
+            grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get decode values %s", grib_get_error_message(e));
             return e;
         }
 
         if(count != g->value_count)
-            grib_context_log(ctx, GRIB_LOG_FATAL, "grib_api: value count mismatch %d %d", count, g->value_count);
+            grib_context_log(ctx, GRIB_LOG_FATAL, "ecCodes: value count mismatch %d %d", count, g->value_count);
 
         if((e = grib_get_long(g->handle, "bitmapPresent", &bitmap)))
         {
-            grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get bitmapPresent %s", grib_get_error_message(e));
+            grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get bitmapPresent %s", grib_get_error_message(e));
             return e;
         }
 
-        g->bitmap = (bitmap != 0);
+        g->has_bitmap = (bitmap != 0);
 
 #ifdef COMEBACK
         set g->missing
@@ -1845,20 +1845,20 @@ ncoptions_t setup;
 
 #define NC_TYPES 7
 struct nc_types_values {
-    double max;
-    double min;
-    double missing;
+    double nc_type_max;
+    double nc_type_min;
+    double nc_type_missing;
 } nc_type_values[NC_TYPES] =
 {
         /* In some occasions, SHRT_MIN-2 for the minimum value, makes ncview display
  missing values for -32766, while NC_FILL_SHORT=-32767, and SHRT_MIN=-32768 */
-        { 0, 0, 0 }, /* NC_NAT,   'Not A Type' (c.f. NaN) */
-        { 0x7f, NC_FILL_BYTE +1, NC_FILL_BYTE }, /* NC_BYTE,   signed 1 byte integer */
-        { 0xff, NC_FILL_CHAR +1, NC_FILL_CHAR }, /* NC_CHAR,   ISO/ASCII character */
+        { 0, 0, 0 },                                 /* NC_NAT,   'Not A Type' (c.f. NaN) */
+        { 0x7f, NC_FILL_BYTE +1, NC_FILL_BYTE },     /* NC_BYTE,   signed 1 byte integer */
+        { 0xff, NC_FILL_CHAR +1, NC_FILL_CHAR },     /* NC_CHAR,   ISO/ASCII character */
         { 0x7fff, NC_FILL_SHORT+1 , NC_FILL_SHORT }, /* NC_SHORT,  signed 2 byte integer */
         { 0x7ffffff, NC_FILL_INT + 1, NC_FILL_INT }, /* NC_INT,    signed 4 byte integer */
-        { FLT_MAX, -FLT_MAX, NC_FILL_FLOAT }, /* NC_FLOAT,  single precision floating point number */
-        { DBL_MAX, -DBL_MAX, NC_FILL_DOUBLE }, /* NC_DOUBLE, double precision floating point number */
+        { FLT_MAX, -FLT_MAX, NC_FILL_FLOAT },        /* NC_FLOAT,  single precision floating point number */
+        { DBL_MAX, -DBL_MAX, NC_FILL_DOUBLE },       /* NC_DOUBLE, double precision floating point number */
 };
 
 static long fcmonth2days(long date, long months)
@@ -2060,7 +2060,6 @@ static void get_nc_options(const request *user_r)
 
 static nc_type translate_nctype(const char *name)
 {
-
     if(!name)
         return NC_SHORT;
 
@@ -2143,7 +2142,7 @@ static int def_latlon(int ncid, fieldset *fs)
     size = sizeof(grid_type);
     if((e = grib_get_string(g->handle, "typeOfGrid", grid_type, &size)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get typeOfGrid %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get typeOfGrid %s", grib_get_error_message(e));
         return e;
     }
 
@@ -2156,7 +2155,7 @@ static int def_latlon(int ncid, fieldset *fs)
     /* Define longitude */
     if((e = grib_get_size(g->handle, "distinctLongitudes", &l)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLongitudes %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get distinctLongitudes %s", grib_get_error_message(e));
         return e;
     }
     n = l;
@@ -2165,7 +2164,7 @@ static int def_latlon(int ncid, fieldset *fs)
     /* Define latitude */
     if((e = grib_get_size(g->handle, "distinctLatitudes", &l)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLatitudes %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get distinctLatitudes %s", grib_get_error_message(e));
         return e;
     }
     n = l;
@@ -2175,7 +2174,6 @@ static int def_latlon(int ncid, fieldset *fs)
     release_field(g);
 
     (void)var_id; /* suppress gcc warning */
-
     return e;
 }
 
@@ -2200,26 +2198,26 @@ static int put_latlon(int ncid, fieldset *fs)
     /* Get info in degrees */
     if((e = grib_get_double(g->handle, "iDirectionIncrementInDegrees", &ew_stride)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get iDirectionIncrementInDegrees %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get iDirectionIncrementInDegrees %s", grib_get_error_message(e));
         return e;
     }
 
     if((e = grib_get_double(g->handle, "jDirectionIncrementInDegrees", &ns_stride)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get jDirectionIncrementInDegrees %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get jDirectionIncrementInDegrees %s", grib_get_error_message(e));
         return e;
     }
 
     /* Define longitude */
     if((e = grib_get_long(g->handle, "Ni", &ni)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Ni %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get Ni %s", grib_get_error_message(e));
         return e;
     }
     /* Define latitude */
     if((e = grib_get_long(g->handle, "Nj", &nj)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Nj %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get Nj %s", grib_get_error_message(e));
         return e;
     }
 
@@ -2227,14 +2225,14 @@ static int put_latlon(int ncid, fieldset *fs)
 
     if((e = grib_get_size(g->handle, "distinctLatitudes", &nj)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLatitudes %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get distinctLatitudes %s", grib_get_error_message(e));
         return e;
 
     }
 
     if((e = grib_get_size(g->handle, "distinctLongitudes", &ni)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLongitudes %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get distinctLongitudes %s", grib_get_error_message(e));
         return e;
 
     }
@@ -2252,7 +2250,7 @@ static int put_latlon(int ncid, fieldset *fs)
     check_err(stat, __LINE__, __FILE__);
     if((e = grib_get_double_array(g->handle, "distinctLongitudes", dvalues, &n)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLongitudes %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get distinctLongitudes %s", grib_get_error_message(e));
         return e;
     }
     Assert(n == ni);
@@ -2268,7 +2266,7 @@ static int put_latlon(int ncid, fieldset *fs)
     check_err(stat, __LINE__, __FILE__);
     if((e = grib_get_double_array(g->handle, "distinctLatitudes", dvalues, &n)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get distinctLatitudes %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get distinctLatitudes %s", grib_get_error_message(e));
         return e;
     }
 
@@ -2317,7 +2315,7 @@ static int compute_scale(dataset_t *subset)
 
         if((e = grib_get_size(g->handle, "values", &len)) != GRIB_SUCCESS)
         {
-            grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get size of values %s", grib_get_error_message(e));
+            grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get size of values %s", grib_get_error_message(e));
             return e;
         }
 
@@ -2330,16 +2328,16 @@ static int compute_scale(dataset_t *subset)
         }
         if((e = grib_get_double_array(g->handle, "values", vals, &len)) != GRIB_SUCCESS)
         {
-            grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get values %s", grib_get_error_message(e));
+            grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get values %s", grib_get_error_message(e));
             return e;
         }
 
-        if(g->bitmap)
+        if(g->has_bitmap)
         {
             subset->bitmap = TRUE;
             for(j = 0; j < len; ++j)
             {
-                if(vals[j] != (double) missing_value)
+                if(vals[j] != (double) global_missing_value)
                 {
                     if(vals[j] > max)
                         max = vals[j];
@@ -2364,10 +2362,10 @@ static int compute_scale(dataset_t *subset)
 
     median = (max + min) / 2.0;
 
-    grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: max_int: %lf, min_int: %lf", nc_type_values[idx].max, nc_type_values[idx].min);
+    grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: max_int: %lf, min_int: %lf", nc_type_values[idx].nc_type_max, nc_type_values[idx].nc_type_min);
 
-    sf = (double) ((max - min) / (double) (nc_type_values[idx].max - nc_type_values[idx].min));
-    ao = ((max + min) - sf * (nc_type_values[idx].min + nc_type_values[idx].max)) / 2;
+    sf = (double) ((max - min) / (double) (nc_type_values[idx].nc_type_max - nc_type_values[idx].nc_type_min));
+    ao = ((max + min) - sf * (nc_type_values[idx].nc_type_min + nc_type_values[idx].nc_type_max)) / 2;
 
     if (min == max) {
         sf = 1.0; /* Prevent divide by zero later. Constant field grib has max == min */
@@ -2487,45 +2485,55 @@ static void scale_bitmap(double *vals, long n, void *data, dataset_t *subset)
     case NC_BYTE:
     {
         unsigned char *vscaled = (unsigned char *) data;
-        for(i = 0; i < n; ++i)
-            if(vals[i] == missing_value)
+        for(i = 0; i < n; ++i){
+            if(vals[i] == global_missing_value){
                 vscaled[i] = (unsigned char) subset->missing;
+            }
+        }
         break;
     }
 
     case NC_SHORT:
     {
         short int *vscaled = (short int *) data;
-        for(i = 0; i < n; ++i)
-            if(vals[i] == missing_value)
+        for(i = 0; i < n; ++i){
+            if(vals[i] == global_missing_value){
                 vscaled[i] = (short int) subset->missing;
+            }
+        }
         break;
     }
 
     case NC_INT:
     {
         int *vscaled = (int *) data;
-        for(i = 0; i < n; ++i)
-            if(vals[i] == missing_value)
+        for(i = 0; i < n; ++i){
+            if(vals[i] == global_missing_value){
                 vscaled[i] = (int) subset->missing;
+            }
+        }
         break;
     }
 
     case NC_FLOAT:
     {
         float *vscaled = (float *) data;
-        for(i = 0; i < n; ++i)
-            if(vals[i] == missing_value)
+        for(i = 0; i < n; ++i){
+            if(vals[i] == global_missing_value){
                 vscaled[i] = (float) subset->missing;
+            }
+        }
         break;
     }
 
     case NC_DOUBLE:
     {
         double *vscaled = (double *) data;
-        for(i = 0; i < n; ++i)
-            if(vals[i] == missing_value)
+        for(i = 0; i < n; ++i){
+            if(vals[i] == global_missing_value){
                 vscaled[i] = (double) subset->missing;
+            }
+        }
         break;
     }
 
@@ -2533,7 +2541,6 @@ static void scale_bitmap(double *vals, long n, void *data, dataset_t *subset)
         grib_context_log(ctx, GRIB_LOG_ERROR, "scale(...): Unknown netcdf type %d", nctype);
         break;
     }
-
 }
 
 static void scale(double *vals, long n, void *data, dataset_t *g)
@@ -2558,10 +2565,10 @@ static void scale(double *vals, long n, void *data, dataset_t *g)
         unsigned char *vscaled = (unsigned char *) data;
         for(i = 0; i < n; ++i)
         {
-            if(!g->bitmap || (vals[i] != missing_value))
+            if(!g->bitmap || (vals[i] != global_missing_value))
             {
                 double d = rint((vals[i] - add_offset) / scale_factor);
-                Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max);
+                Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max);
                 vscaled[i] = d;
             }
         }
@@ -2573,12 +2580,12 @@ static void scale(double *vals, long n, void *data, dataset_t *g)
         short int *vscaled = (short int *) data;
         for(i = 0; i < n; ++i)
         {
-            if(!g->bitmap || (vals[i] != missing_value))
+            if(!g->bitmap || (vals[i] != global_missing_value))
             {
                 double d = 0;
                 Assert(scale_factor>0);
                 d = rint((vals[i] - add_offset) / scale_factor);
-                Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max);
+                Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max);
                 vscaled[i] = d;
             }
         }
@@ -2590,10 +2597,10 @@ static void scale(double *vals, long n, void *data, dataset_t *g)
         int *vscaled = (int *) data;
         for(i = 0; i < n; ++i)
         {
-            if(!g->bitmap || (vals[i] != missing_value))
+            if(!g->bitmap || (vals[i] != global_missing_value))
             {
                 double d = rint((vals[i] - add_offset) / scale_factor);
-                Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max);
+                Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max);
                 vscaled[i] = d;
             }
         }
@@ -2605,10 +2612,10 @@ static void scale(double *vals, long n, void *data, dataset_t *g)
         float *vscaled = (float *) data;
         for(i = 0; i < n; ++i)
         {
-            if(!g->bitmap || (vals[i] != missing_value))
+            if(!g->bitmap || (vals[i] != global_missing_value))
             {
                 double d = vals[i];
-                Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max);
+                Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max);
                 vscaled[i] = d;
             }
         }
@@ -2620,10 +2627,10 @@ static void scale(double *vals, long n, void *data, dataset_t *g)
         double *vscaled = (double *) data;
         for(i = 0; i < n; ++i)
         {
-            if(!g->bitmap || (vals[i] != missing_value))
+            if(!g->bitmap || (vals[i] != global_missing_value))
             {
                 double d = vals[i];
-                Assert(d >= nc_type_values[nctype].min && d <= nc_type_values[nctype].max);
+                Assert(d >= nc_type_values[nctype].nc_type_min && d <= nc_type_values[nctype].nc_type_max);
                 vscaled[i] = d;
             }
         }
@@ -2691,13 +2698,13 @@ static int put_data(hypercube *h, int ncid, const char *name, dataset_t *subset)
     /* Define longitude */
     if((e = grib_get_long(f->handle, "Ni", &ni)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Ni %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get Ni %s", grib_get_error_message(e));
         return e;
     }
     /* Define latitude */
     if((e = grib_get_long(f->handle, "Nj", &nj)) != GRIB_SUCCESS)
     {
-        grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Nj %s", grib_get_error_message(e));
+        grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get Nj %s", grib_get_error_message(e));
         return e;
     }
 
@@ -2737,7 +2744,7 @@ static int put_data(hypercube *h, int ncid, const char *name, dataset_t *subset)
 
         if((e = grib_get_size(g->handle, "values", &len)) != GRIB_SUCCESS)
         {
-            grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get size of values %s", grib_get_error_message(e));
+            grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get size of values %s", grib_get_error_message(e));
             return e;
         }
 
@@ -2750,7 +2757,7 @@ static int put_data(hypercube *h, int ncid, const char *name, dataset_t *subset)
         }
         if((e = grib_get_double_array(g->handle, "values", vals, &len)) != GRIB_SUCCESS)
         {
-            grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get values %s", grib_get_error_message(e));
+            grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get values %s", grib_get_error_message(e));
             return e;
         }
 
@@ -2777,13 +2784,13 @@ static int put_data(hypercube *h, int ncid, const char *name, dataset_t *subset)
 
             if((e = grib_get_long(g->handle, "Ni", &ni)) != GRIB_SUCCESS)
             {
-                grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Ni %s", grib_get_error_message(e));
+                grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get Ni %s", grib_get_error_message(e));
                 return e;
             }
             /* Define latitude */
             if((e = grib_get_long(g->handle, "Nj", &nj)) != GRIB_SUCCESS)
             {
-                grib_context_log(ctx, GRIB_LOG_ERROR, "grib_api: cannot get Nj %s", grib_get_error_message(e));
+                grib_context_log(ctx, GRIB_LOG_ERROR, "ecCodes: cannot get Nj %s", grib_get_error_message(e));
                 return e;
             }
 
@@ -3009,9 +3016,9 @@ static int define_netcdf_dimensions(hypercube *h, fieldset *fs, int ncid, datase
             check_err(stat, __LINE__, __FILE__);
         }
 
-        stat = nc_put_att_type(ncid, var_id, "_FillValue", subsets[i].att.nctype, 1, nc_type_values[subsets[i].att.nctype].missing);
+        stat = nc_put_att_type(ncid, var_id, "_FillValue", subsets[i].att.nctype, 1, nc_type_values[subsets[i].att.nctype].nc_type_missing);
         check_err(stat, __LINE__, __FILE__);
-        stat = nc_put_att_type(ncid, var_id, "missing_value", subsets[i].att.nctype, 1, nc_type_values[subsets[i].att.nctype].missing);
+        stat = nc_put_att_type(ncid, var_id, "missing_value", subsets[i].att.nctype, 1, nc_type_values[subsets[i].att.nctype].nc_type_missing);
         check_err(stat, __LINE__, __FILE__);
 
         if(subsets[i].att.units)
@@ -3553,7 +3560,7 @@ static int split_fieldset(fieldset *fs, request *data_r, dataset_t **subsets, co
             {
                 const char *p;
                 set_field(filters[j].fset, f, filters[j].count++);
-                filters[j].bitmap |= f->bitmap;
+                filters[j].bitmap |= f->has_bitmap;
                 if((p = get_value(f->r->r, "_units", 0)) != NULL)
                 {
                     filters[j].att.units = grib_context_strdup(ctx, p);
@@ -3586,7 +3593,7 @@ static int split_fieldset(fieldset *fs, request *data_r, dataset_t **subsets, co
     {
         filters[i].att.nctype = nctype;
         filters[i].scale = TRUE;
-        filters[i].missing = nc_type_values[nctype].missing;
+        filters[i].missing = nc_type_values[nctype].nc_type_missing;
         find_nc_attributes(filters[i].filter_request, user_r, &(filters[i].att), config_r, data_r);
         grib_context_log(ctx, GRIB_LOG_DEBUG, "grib_to_netcdf: filter[%d] found.- Var. name '%s', nctype: %d, found nctype: %d", i, filters[i].att.name, nctype, filters[i].att.nctype);
 
@@ -4176,7 +4183,7 @@ int grib_tool_finalise_action(grib_runtime_options* options)
 
     /* Create netcdf file */
 
-    printf("%s: Creating netcdf file '%s'\n", grib_tool_name, options->outfile->name);
+    printf("%s: Creating netCDF file '%s'\n", grib_tool_name, options->outfile->name);
     printf("%s: NetCDF library version: %s\n", grib_tool_name, nc_inq_libvers());
 
     creation_mode = get_creation_mode(option_kind);
@@ -4233,8 +4240,8 @@ int grib_tool_finalise_action(grib_runtime_options* options)
 
 int grib_no_handle_action(int err)
 {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
 
 
diff --git a/tools/grib_tools.c b/tools/grib_tools.c
index 67e0d4a..8e7b4c2 100644
--- a/tools/grib_tools.c
+++ b/tools/grib_tools.c
@@ -47,7 +47,7 @@ static int scan(grib_context* c,grib_runtime_options* options,const char* dir);
 
 FILE* dump_file;
 
-grib_runtime_options options={
+grib_runtime_options global_options={
 		0,         /* verbose       */
 		0,         /* fail          */
 		0,         /* skip          */
@@ -126,24 +126,24 @@ static grib_handle* grib_handle_new_from_file_x(grib_context* c,FILE* f,int mode
     if (mode==MODE_BUFR)
         return bufr_new_from_file(c,f,err);
 
-	if (mode==MODE_METAR)  
-		return metar_new_from_file(c,f,err);
+    if (mode==MODE_METAR)
+        return metar_new_from_file(c,f,err);
 
-	if (mode==MODE_TAF)  
-		return taf_new_from_file(c,f,err);
+    if (mode==MODE_TAF)
+        return taf_new_from_file(c,f,err);
 
-	if (mode==MODE_GRIB)  
-		return grib_new_from_file(c,f,headers_only,err);
+    if (mode==MODE_GRIB)
+        return grib_new_from_file(c,f,headers_only,err);
 
     Assert(!"grib_handle_new_from_file_x: unknown mode");
-	return NULL;
+    return NULL;
 }
 
 int grib_tool(int argc, char **argv)
 {
     int ret=0;
     grib_context* c=grib_context_get_default();
-    options.context=c;
+    global_options.context=c;
 
 #ifdef ENABLE_FLOATING_POINT_EXCEPTIONS
     feenableexcept(FE_ALL_EXCEPT & ~FE_INEXACT);
@@ -151,39 +151,39 @@ int grib_tool(int argc, char **argv)
 
     if (getenv("DOXYGEN_USAGE") && argc==1 ) usage_doxygen();
 
-    grib_get_runtime_options(argc,argv,&options);
+    grib_get_runtime_options(argc,argv,&global_options);
 
-    grib_tool_before_getopt(&options);
+    grib_tool_before_getopt(&global_options);
 
-    grib_process_runtime_options(c,argc,argv,&options);
+    grib_process_runtime_options(c,argc,argv,&global_options);
 
-    grib_tool_init(&options);
-    if (options.dump_filename) {
-        dump_file= fopen(options.dump_filename,"w");
+    grib_tool_init(&global_options);
+    if (global_options.dump_filename) {
+        dump_file= fopen(global_options.dump_filename,"w");
         if(!dump_file) {
-            perror(options.dump_filename);
+            perror(global_options.dump_filename);
             exit(1);
         }
     } else {
         dump_file=stdout;
     }
 
-    if (is_index_file(options.infile->name) &&
-            ( options.infile_extra && is_index_file(options.infile_extra->name))) {
-        options.through_index=1;
-        return grib_tool_index(&options);
+    if (is_index_file(global_options.infile->name) &&
+            ( global_options.infile_extra && is_index_file(global_options.infile_extra->name))) {
+        global_options.through_index=1;
+        return grib_tool_index(&global_options);
     }
 
-    if (options.onlyfiles)
-        ret=grib_tool_onlyfiles(&options);
+    if (global_options.onlyfiles)
+        ret=grib_tool_onlyfiles(&global_options);
     else {
-        if (options.orderby)
-            ret=grib_tool_with_orderby(&options);
+        if (global_options.orderby)
+            ret=grib_tool_with_orderby(&global_options);
         else
-            ret=grib_tool_without_orderby(&options);
+            ret=grib_tool_without_orderby(&global_options);
     }
 
-    if (options.dump_filename) fclose(dump_file);
+    if (global_options.dump_filename) fclose(dump_file);
     return ret;
 
 }
@@ -889,7 +889,8 @@ void grib_print_key_values(grib_runtime_options* options,grib_handle* h)
             the_index = options->index;
             if (the_index >= size) {
                 fprintf(dump_file,"\n");
-                fprintf(stderr, "invalid index value %d (should be between 0 and %ld)\n", options->index, size-1);
+                fprintf(stderr, "invalid index value %d (should be between 0 and %d)\n",
+                        options->index, (int)(size-1));
                 exit(1);
             }
             v=values[options->index];
diff --git a/tools/gts_compare.c b/tools/gts_compare.c
new file mode 100644
index 0000000..bc78c1f
--- /dev/null
+++ b/tools/gts_compare.c
@@ -0,0 +1,958 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+#include "grib_tools.h"
+
+GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b)
+{
+    if (*a != *b) return 1;
+    while((*a!=0 && *b!=0) &&  *(a) == *(b) ) {a++;b++;}
+    return (*a==0 && *b==0) ? 0 : 1;
+}
+
+typedef double (*compare_double_proc) (double*,double*,double*);
+
+typedef struct grib_error grib_error;
+struct grib_error {
+    char* key;
+    int count;
+    grib_error* next;
+};
+
+grib_error* error_summary;
+
+compare_double_proc compare_double;
+grib_string_list* blacklist=0;
+
+static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options* options);
+static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_handle *h2,const char *name,int type);
+int error=0;
+int count=0;
+int lastPrint=0;
+int force=0;
+double maxAbsoluteError = 1e-19;
+int onlyListed=1;
+int headerMode=0;
+int morein1=0;
+int morein2=0;
+int listFromCommandLine;
+int verbose=0;
+int tolerance_factor=1;
+static int write_error=0;
+
+GRIB_INLINE static double compare_double_absolute(double *a,double *b,double *err)
+{
+    double ret=0;
+    double d=fabs(*a-*b);
+    if (d > *err) {
+        ret=d;
+    }
+    return ret;
+    /* return fabs(*a-*b) > *err ? fabs(*a-*b) : 0; */
+}
+
+static int write_count=0;
+
+static void write_message(grib_handle* h,const char* str)
+{
+    const void *m; size_t s;
+    char fname[1024]={0,};
+    FILE* fh=NULL;
+
+    grib_get_message(h,&m,&s);
+    sprintf(fname,"%s_%d.gts",str,write_count);
+
+    fh= fopen(fname,"w");
+    if(!fh) {
+        grib_context_log(h->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),
+                "Error opening %s",fname);
+        exit(GRIB_IO_PROBLEM);
+    }
+
+    if(fwrite(m,1,s,fh) != s) {
+        grib_context_log(h->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),
+                "Error writing to %s",fname);
+        exit(GRIB_IO_PROBLEM);
+    }
+
+    fclose(fh);
+}
+
+static void write_messages(grib_handle* h1,grib_handle* h2)
+{
+    if (!write_error) return;
+    write_count++;
+
+    write_message(h1,"error1");
+    write_message(h2,"error2");
+}
+
+static int blacklisted(const char* name)
+{
+    grib_string_list* b=blacklist;
+    while (b) {
+        Assert(b->value);
+        if (!strcmp(name,b->value))
+            return 1;
+        b=b->next;
+    }
+    return 0;
+}
+
+grib_option grib_options[]={
+        /*  {id, args, help}, on, command_line, value*/
+        /*{"r",0,"Compare files in which the messages are not in the same order. This option is time expensive.\n",0,1,0},*/
+        {"b:",0,0,0,1,0},
+        {"d",0,"Write different messages on files\n",0,1,0},
+        {"T:",0,0,1,0,"T"}, /* GTS */
+        {"c:",0,0,0,1,0},
+        {"S:","start","First field to be processed.\n",0,1,0},
+        {"E:","end","Last field to be processed.\n",0,1,0},
+        {"a",0,"-c option modifier. The keys listed with the option -c will be added to the list of keys compared without -c.\n"
+                ,0,1,0},
+        /*{"H",0,"Compare only message headers. Bit-by-bit compare on. Incompatible with -c option.\n",0,1,0},*/
+        /*{"R:",0,0,0,1,0},*/
+        /*{"A:",0,0,0,1,0},*/
+        {"w:",0,0,0,1,0},
+        {"f",0,0,0,1,0},
+        {"F",0,0,1,0,0},
+        {"q",0,0,1,0,0},
+        {"I",0,0,1,0,0},
+        {"V",0,0,0,1,0},
+        {"7",0,0,0,1,0},
+        {"v",0,0,0,1,0}
+};
+
+grib_handle* global_handle=NULL;
+int counter=0;
+int start=-1;
+int end=-1;
+
+char* grib_tool_description=
+        "Compare GTS messages contained in two files."
+        "\n\tIf some differences are found it fails returning an error code."
+        "\n\tDefault behaviour: bit-by-bit compare, same order in files.";
+
+char* grib_tool_name="gts_compare";
+char* grib_tool_usage="[options] "
+        "file file";
+
+int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
+
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
+}
+
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
+}
+
+int grib_tool_init(grib_runtime_options* options)
+{
+    int ret=0;
+    int nfiles=1;
+    char orderby[]="md5Headers";
+    grib_context* context=grib_context_get_default();
+
+    options->strict=1;
+    if (grib_options_on("S:"))
+        start=atoi(grib_options_get_option("S:"));
+
+    if (grib_options_on("E:"))
+        end=atoi(grib_options_get_option("E:"));
+
+    if (grib_options_on("f")) force=1;
+    else force=0;
+
+    if (grib_options_on("d")) write_error=1;
+    else write_error=0;
+
+    verbose = grib_options_on("v");
+
+    listFromCommandLine=0;
+    if (grib_options_on("c:") || grib_options_on("e"))
+        listFromCommandLine=1;
+
+    if (grib_options_on("a")) onlyListed=0;
+    else onlyListed=1;
+
+    if (grib_options_on("H")) headerMode=1;
+    else headerMode=0;
+
+    if (grib_options_on("H") && grib_options_on("c:")) {
+        printf("Error: -H and -c options are incompatible. Choose one of the two please.\n");
+        exit(1);
+    }
+    if (grib_options_on("a") && !grib_options_on("c:")) {
+        printf("Error: -a option requires -c option. Please define a list of keys with the -c option.\n");
+        exit(1);
+    }
+
+    if (grib_options_on("b:")) {
+        grib_string_list *next=0;
+        int i=0;
+        blacklist=(grib_string_list*)grib_context_malloc_clear(context,sizeof(grib_string_list));
+        blacklist->value=grib_context_strdup(context,options->set_values[0].name);
+        next=blacklist;
+        for (i=1;i<options->set_values_count;i++) {
+            next->next=(grib_string_list*)grib_context_malloc_clear(context,sizeof(grib_string_list));
+            next->next->value=grib_context_strdup(context,options->set_values[i].name);
+            next=next->next;
+        }
+        context->blacklist=blacklist;
+    }
+
+    if (grib_options_on("r")) {
+        char* filename[1];
+        filename[0]=options->infile_extra->name;
+        options->random=1;
+        options->orderby=strdup(orderby);
+        options->idx=grib_fieldset_new_from_files(context,filename,
+                nfiles,0,0,0,orderby,&ret);
+        if (ret) {
+            printf("unable to create index for input file %s (%s)",
+                    options->infile_extra->name,grib_get_error_message(ret));
+            exit(ret);
+        }
+    } else {
+        options->random=0;
+        options->infile_extra->file=fopen(options->infile_extra->name,"r");
+
+        if (!options->infile_extra->file) {
+            perror(options->infile_extra->name);
+            exit(1);
+        }
+    }
+
+    if (grib_options_on("t:"))
+        tolerance_factor=atof(grib_options_get_option("t:"));
+
+    {
+        /* Check for 2nd file being a directory. If so, we assume user is comparing to a file */
+        /* with the same name as first file in that directory */
+        struct stat s;
+        grib_tools_file* infile = options->infile; /* the 2nd file in comparison */
+        if (infile) {
+            int stat_val = stat(infile->name, &s);
+            if ( stat_val == 0 && S_ISDIR(s.st_mode)) {
+                /* Take the filename of the 1st file and append to dir */
+                char bufr[2048] = {0,};
+                /* options->infile_extra->name is the 1st file */
+                sprintf(bufr, "%s%c%s",
+                        infile->name,
+                        get_dir_separator_char(),
+                        extract_filename(options->infile_extra->name));
+                infile->name = strdup(bufr);
+            }
+        }
+    }
+    return 0;
+}
+
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
+}
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
+}
+
+static void printInfo(grib_handle* h)
+{
+    printf("== %d == DIFFERENCE == ",count);
+    lastPrint=count;
+}
+
+static void print_index_key_values(grib_index* index,int counter,const char* error_message)
+{
+    grib_index_key* keys=index->keys;
+    printf("== %d == ",counter);
+    if (error_message) printf("%s == ",error_message);
+    while (keys) {
+        printf("%s=%s ",keys->name,keys->value);
+        keys=keys->next;
+    }
+    printf("\n");
+}
+
+static grib_handle* grib_handle_new_from_file_x(
+        grib_context* c,FILE* f,int mode,int headers_only,int *err)
+{
+    return codes_handle_new_from_file(c,f,PRODUCT_GTS,err);
+}
+
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
+    int err=0;
+    count++;
+
+    if (options->through_index) {
+        grib_index* idx1=options->index1;
+        verbose=0;
+        counter++;
+
+        if ( start>0 && counter < start ) return 0;
+        if ( end>0 && counter > end ) {
+            options->stop=1;
+            return 0;
+        }
+
+        grib_index_search_same(idx1,h);
+        global_handle=codes_new_from_index(idx1,CODES_GTS,&err);
+        if (options->verbose) {
+            off_t offset=0;
+            char* filename=grib_get_field_file(options->index2,&offset);
+            printf("file1=\"%s\" ",filename);
+            filename=grib_get_field_file(options->index1,&offset);
+            printf("file2=\"%s\" \n",filename);
+            print_index_key_values(options->index1,counter,NULL);
+        }
+
+        if (!global_handle) {
+            if (!options->verbose)
+                print_index_key_values(idx1,counter,"NOT FOUND ");
+        }
+
+        if (!global_handle || err!= GRIB_SUCCESS ) {
+            morein1++;
+            if (global_handle) grib_handle_delete(global_handle);
+            return 0;
+        }
+
+        if(compare_handles(h,global_handle,options)) {
+            error++;
+            if (!force) exit(1);
+        }
+
+        grib_handle_delete(global_handle);
+
+        return 0;
+
+    } else if (options->random)
+        global_handle = grib_fieldset_next_handle(options->idx,&err);
+    else
+        global_handle=grib_handle_new_from_file_x(h->context,options->infile_extra->file,options->mode,0,&err);
+
+    if (!global_handle || err!= GRIB_SUCCESS ) {
+        morein2++;
+        if (global_handle) grib_handle_delete(global_handle);
+        return 0;
+    }
+
+    if(compare_handles(global_handle,h,options)) {
+        error++;
+        if (!force) exit(1);
+    }
+
+    grib_handle_delete(global_handle);
+
+    return 0;
+}
+
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    int err=0;
+    if (!options->through_index && !options->random)  {
+        global_handle=grib_handle_new_from_file(h->context,options->infile_extra->file,&err);
+
+        if (!global_handle || err!= GRIB_SUCCESS)
+            morein2++;
+
+        grib_handle_delete(global_handle);
+    }
+
+    grib_handle_delete(h);
+    count++;
+
+    return 0;
+}
+
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
+}
+
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    grib_error* e=error_summary;
+    int err=0;
+    grib_context* c=grib_context_get_default();
+    error+=morein1+morein2;
+
+    /*if (grib_options_on("w:")) return 0;*/
+
+    if (error) {
+        printf("\n## ERRORS SUMMARY #######\n");
+    }
+    while ((global_handle=grib_handle_new_from_file(c,options->infile_extra->file,&err))) {
+        morein1++;
+        if (global_handle) grib_handle_delete(global_handle);
+    }
+    if (morein1>0) {
+        printf("##\n## Different number of messages \n");
+        printf("## %d more messages in %s than in %s\n",morein1,
+                options->infile_extra->name,options->infile->name);
+    }
+
+    if (morein2>0) {
+        printf("##\n## Different number of messages \n");
+        printf("## %d more messages in %s than in %s\n",morein2,
+                options->infile->name,options->infile_extra->name);
+    }
+
+    if (error) {
+        printf("##\n## Summary of different key values \n");
+        while (e) {
+            printf ("## %s ( %d different )\n",e->key,e->count);
+            e=e->next;
+        }
+
+        printf("##\n## %d different messages out of %d\n\n",error,count);
+    }
+    if (options->through_index) {
+        grib_index_delete(options->index1);
+        grib_index_delete(options->index2);
+    }
+
+    if (error !=0) exit(1);
+    return 0;
+}
+
+static void save_error(grib_context* c,const char* key)
+{
+    grib_error* e=0;
+    grib_error* next=0;
+    int saved=0;
+
+    if (!error_summary) {
+        error_summary=(grib_error*)grib_context_malloc_clear(c,sizeof(grib_error));
+        error_summary->count=1;
+        error_summary->key=grib_context_strdup(c,key);
+        return;
+    }
+
+    e=error_summary;
+    next=e;
+
+    while (next) {
+        if (!strcmp(next->key,key)) {
+            next->count++;
+            saved=1;
+            break;
+        }
+        e=next;
+        next=next->next;
+    }
+
+    if (!saved) {
+        e->next=(grib_error*)grib_context_malloc_clear(c,sizeof(grib_error));
+        e->next->count=1;
+        e->next->key=grib_context_strdup(c,key);
+    }
+}
+
+static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_handle *h2,const char *name,int type)
+{
+    size_t len1 = 0;
+    size_t len2 = 0;
+    int err=0;
+    int err1;
+    int err2;
+    int type1,type2;
+    int countdiff;
+    int isMissing1=0,isMissing2=0;
+
+    char *sval1 = NULL,*sval2 = NULL;
+    unsigned char *uval1 = NULL,*uval2 = NULL;
+    long *lval1 = NULL, *lval2 = NULL;
+    grib_context* c=h1->context;
+
+    type1=type;
+    type2=type;
+    if (verbose) printf("  comparing %s",name);
+
+    if( type1==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h1,name,&type1)) != GRIB_SUCCESS)
+    {
+        printInfo(h1);
+        printf("Oops... cannot get type of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
+        save_error(c,name);
+        return err;
+    }
+
+    if(type2==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h2,name,&type2)) != GRIB_SUCCESS)
+    {
+        if(err == GRIB_NOT_FOUND)
+        {
+            printInfo(h1);
+            printf("[%s] not found in 2nd field\n",name);
+            save_error(c,name);
+            return err;
+        }
+        printInfo(h1);
+        printf("Oops... cannot get type of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
+        save_error(c,name);
+        return err;
+    }
+
+    /*
+  if(type1 != type2)
+  {
+    printInfo(h1);
+    printf("Warning, [%s] has different types: 1st field: [%s], 2nd field: [%s]\n",
+        name,grib_get_type_name(type1),grib_get_type_name(type2));
+    return GRIB_TYPE_MISMATCH; 
+  }
+     */
+
+    if(type1 == GRIB_TYPE_LABEL)
+        return err;
+
+    if(type1 == GRIB_TYPE_SECTION)
+        return err;
+
+
+    if((err = grib_get_size(h1,name,&len1)) != GRIB_SUCCESS)
+    {
+        printInfo(h1);
+        printf("Oops... cannot get size of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
+        save_error(c,name);
+        return err;
+    }
+
+    if((err = grib_get_size(h2,name,&len2)) != GRIB_SUCCESS)
+    {
+        if(err == GRIB_NOT_FOUND)
+        {
+            printInfo(h1);
+            printf("[%s] not found in 2nd field\n",name);
+            save_error(c,name);
+            return err;
+        }
+
+        printInfo(h1);
+        printf("Oops... cannot get size of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
+        save_error(c,name);
+        return err;
+    }
+
+    /*
+  if(len1 != len2 && type1 != GRIB_TYPE_STRING)
+  {
+    printInfo(h1);
+    printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2);
+    save_error(c,name);
+    return GRIB_COUNT_MISMATCH;
+  }
+     */
+
+    if (options->mode != MODE_GTS) {
+        /* TODO: Ignore missing values for keys in GTS. Not yet implemented */
+        isMissing1= ( (grib_is_missing(h1,name,&err1)==1) && (err1 == 0) ) ? 1 : 0;
+        isMissing2= ( (grib_is_missing(h2,name,&err2)==1) && (err2 == 0) ) ? 1 : 0;
+    }
+
+    if ((isMissing1==1) && (isMissing2==1)) {
+        if (verbose) printf(" is set to missing in both fields\n");
+        return GRIB_SUCCESS;
+    }
+
+    if (isMissing1==1) {
+        if (verbose) printf(" is set to missing in 1st field\n");
+        printInfo(h1);
+        printf("%s is set to missing in 1st field is not missing in 2nd field\n",name);
+        err1 = GRIB_VALUE_MISMATCH;
+        save_error(c,name);
+        return GRIB_VALUE_MISMATCH;
+    }
+
+    if (isMissing2==1) {
+        if (verbose) printf(" is set to missing in 1st field\n");
+        printInfo(h1);
+        printf("%s is set to missing in 2nd field is not missing in 1st field\n",name);
+        err1 = GRIB_VALUE_MISMATCH;
+        save_error(c,name);
+        return GRIB_VALUE_MISMATCH;
+    }
+
+    switch(type1)
+    {
+    case GRIB_TYPE_STRING:
+        if (verbose) printf(" as string\n");
+        grib_get_string_length(h1,name,&len1);
+        grib_get_string_length(h2,name,&len2);
+        sval1 = (char*)grib_context_malloc(h1->context,len1*sizeof(char));
+        sval2 = (char*)grib_context_malloc(h2->context,len2*sizeof(char));
+
+        if((err1 = grib_get_string(h1,name,sval1,&len1)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get string value of [%s] in 1st field: %s\n",
+                    name,grib_get_error_message(err1));
+            save_error(c,name);
+        }
+
+        if((err2 = grib_get_string(h2,name,sval2,&len2)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get string value of [%s] in 2nd field: %s\n",
+                    name,grib_get_error_message(err2));
+            save_error(c,name);
+        }
+
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS)
+        {
+            if(grib_inline_strcmp(sval1,sval2) != 0)
+            {
+                printInfo(h1);
+                printf("string [%s]: [%s] != [%s]\n",
+                        name,sval1,sval2);
+                err1 = GRIB_VALUE_MISMATCH;
+                save_error(c,name);
+            }
+        }
+
+        grib_context_free(h1->context,sval1);
+        grib_context_free(h2->context,sval2);
+
+        if(err1) return err1;
+        if(err2) return err2;
+
+        break;
+
+    case GRIB_TYPE_LONG:
+        if (verbose) printf(" as long\n");
+
+        lval1 = (long*)grib_context_malloc(h1->context,len1*sizeof(long));
+        lval2 = (long*)grib_context_malloc(h2->context,len2*sizeof(long));
+
+        if((err1 = grib_get_long_array(h1,name,lval1,&len1)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get long value of [%s] in 1st field: %s\n",
+                    name,grib_get_error_message(err1));
+            save_error(c,name);
+        }
+
+        if((err2 = grib_get_long_array(h2,name,lval2,&len2)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get long value of [%s] in 2nd field: %s\n",
+                    name,grib_get_error_message(err2));
+            save_error(c,name);
+        }
+
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1!=len2)
+        {
+            printInfo(h1);
+            printf("Different size for \"%s\"  [%ld]  [%ld]\n",name,(long)len1,(long)len2);
+            err1=GRIB_INTERNAL_ERROR;
+            save_error(c,name);
+        }
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1==len2)
+        {
+            int i;
+            countdiff=0;
+            for(i = 0; i < len1; i++)
+                if(lval1[i] != lval2[i])  countdiff++;
+
+            if (countdiff) {
+                printInfo(h1);
+                save_error(c,name);
+                err1 = GRIB_VALUE_MISMATCH;
+                if(len1 == 1)
+                    printf("long [%s]: [%ld] != [%ld]\n",
+                            name,*lval1,*lval2);
+                else
+                    printf("long [%s] %d out of %ld different\n",
+                            name,countdiff,(long)len1);
+            }
+        }
+
+
+        grib_context_free(h1->context,lval1);
+        grib_context_free(h2->context,lval2);
+
+        if(err1) return err1;
+        if(err2) return err2;
+        break;
+
+    case GRIB_TYPE_DOUBLE:
+        Assert(!"GTS cannot contain keys of type DOUBLE");
+        break;
+
+    case GRIB_TYPE_BYTES:
+        if (verbose) printf(" as bytes\n");
+        if (options->mode==MODE_GTS) return 0;
+        if (len1<2) len1=512;
+        if (len2<2) len2=512;
+        uval1 = (unsigned char*)grib_context_malloc(h1->context,len1*sizeof(unsigned char));
+        uval2 = (unsigned char*)grib_context_malloc(h2->context,len2*sizeof(unsigned char));
+
+        if((err1 = grib_get_bytes(h1,name,uval1,&len1)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            save_error(c,name);
+            printf("Oops... cannot get bytes value of [%s] in 1st field: %s\n",
+                    name,grib_get_error_message(err1));
+        }
+
+        if((err2 = grib_get_bytes(h2,name,uval2,&len2)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            save_error(c,name);
+            printf("Oops... cannot get bytes value of [%s] in 2nd field: %s\n",
+                    name,grib_get_error_message(err2));
+        }
+
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS)
+        {
+            if(memcmp(uval1,uval2,len1) != 0)
+            {
+                int i;
+                for(i = 0; i < len1; i++)
+                    if(uval1[i] != uval2[i])
+                    {
+                        printInfo(h1);
+                        save_error(c,name);
+                        if(len1 == 1)
+                            printf("[%s] byte values are different: [%02x] and [%02x]\n",
+                                    name,uval1[i],uval2[i]);
+                        else
+                            printf("[%s] byte value %d of %ld are different: [%02x] and [%02x]\n",
+                                    name,i,(long)len1,uval1[i],uval2[i]);
+
+                        err1 = GRIB_VALUE_MISMATCH;
+                        break;
+                    }
+                err1 = GRIB_VALUE_MISMATCH;
+            }
+        }
+
+        grib_context_free(h1->context,uval1);
+        grib_context_free(h2->context,uval2);
+
+        if(err1) return err1;
+        if(err2) return err2;
+        break;
+
+    case GRIB_TYPE_LABEL:
+        if (verbose) printf(" as label\n");
+        break;
+
+    default:
+        if (verbose) printf("\n");
+        printInfo(h1);
+        save_error(c,name);
+        printf("Cannot compare [%s], unsupported type %d\n",name,type1);
+        return GRIB_UNABLE_TO_COMPARE_ACCESSORS;
+        break;
+    }
+
+    return GRIB_SUCCESS;
+}
+
+static int compare_all_dump_keys(grib_handle* h1,grib_handle* h2,grib_runtime_options* options,int *err)
+{
+    int ret=0;
+    const char* name=NULL;
+    grib_keys_iterator* iter  = NULL;
+    iter=grib_keys_iterator_new(h1,0,NULL);
+
+    if (!iter) {
+        printf("ERROR: unable to get iterator\n");
+        exit(1);
+    }
+
+    while(grib_keys_iterator_next(iter))
+    {
+        grib_accessor* xa=grib_keys_iterator_get_accessor(iter);
+        name=grib_keys_iterator_get_name(iter);
+        /* printf("----- comparing %s\n",name); */
+
+        if (blacklisted(name)) continue;
+        if (xa==NULL || ( xa->flags & GRIB_ACCESSOR_FLAG_DUMP )==0 ) continue;
+        if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED))  {
+            err++;
+            write_messages(h1,h2);
+            ret=1;
+        }
+    }
+
+    grib_keys_iterator_delete(iter);
+    return ret;
+}
+
+static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options* options)
+{
+    int err = 0;
+    int i=0;
+    grib_keys_iterator* iter  = NULL;
+    const char* name=NULL;
+
+    /* mask only if no -c option or headerMode (-H)*/
+    if (blacklist && ( !listFromCommandLine || headerMode )) {
+        grib_string_list* nextb=blacklist;
+        while (nextb) {
+            grib_clear(h1,nextb->value);
+            grib_clear(h2,nextb->value);
+            nextb=nextb->next;
+        }
+    }
+
+    if (headerMode) {
+        const void *msg1=NULL,*msg2=NULL;
+        size_t size1=0,size2=0;
+        grib_handle *h11, *h22;
+        GRIB_CHECK_NOLINE(grib_get_message_headers(h1,&msg1,&size1),0);
+        GRIB_CHECK_NOLINE(grib_get_message_headers(h2,&msg2,&size2),0);
+        if (size1==size2 && !memcmp(msg1,msg2,size1))
+            return 0;
+
+        err=0;
+        h11=grib_handle_new_from_partial_message(h1->context,(void*)msg1,size1);
+        h22=grib_handle_new_from_partial_message(h1->context,(void*)msg2,size2);
+
+        iter=grib_keys_iterator_new(h11,
+                GRIB_KEYS_ITERATOR_SKIP_COMPUTED,NULL);
+
+        if (!iter) {
+            printf("ERROR: unable to get iterator\n");
+            exit(1);
+        }
+
+        while(grib_keys_iterator_next(iter))
+        {
+            name=grib_keys_iterator_get_name(iter);
+            /*printf("----- comparing %s\n",name);*/
+
+            if (blacklisted(name)) continue;
+            if(compare_values(options,h11,h22,name,GRIB_TYPE_UNDEFINED))  {
+                err++;
+                write_messages(h11,h22);
+            }
+        }
+
+        grib_keys_iterator_delete(iter);
+        grib_handle_delete(h11);
+        grib_handle_delete(h22);
+        return err;
+    }
+
+    if ( listFromCommandLine && onlyListed ) {
+        for (i=0; i< options->compare_count; i++) {
+            if (blacklisted((char*)options->compare[i].name)) continue;
+            if (options->compare[i].type == GRIB_NAMESPACE) {
+                iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name);
+                if (!iter) {
+                    printf("ERROR: unable to get iterator\n");
+                    exit(1);
+                }
+                while(grib_keys_iterator_next(iter))
+                {
+                    name=grib_keys_iterator_get_name(iter);
+                    /*printf("----- comparing %s\n",name);*/
+
+                    if (blacklisted(name)) continue;
+                    if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED))  {
+                        err++;
+                        write_messages(h1,h2);
+                    }
+                }
+                grib_keys_iterator_delete(iter);
+            } else {
+                if( compare_values(options,h1,h2,options->compare[i].name,options->compare[i].type))
+                    err++;
+                write_messages(h1,h2);
+            }
+        }
+    } else {
+        const void *msg1=NULL,*msg2=NULL;
+        size_t size1=0,size2=0;
+        int memcmp_ret=0;
+        /* int ii=0; */
+        GRIB_CHECK_NOLINE(grib_get_message(h1,&msg1,&size1),0);
+        GRIB_CHECK_NOLINE(grib_get_message(h2,&msg2,&size2),0);
+        if (size1==size2 && !(memcmp_ret=memcmp(msg1,msg2,size1))) {
+            return 0;
+        } 
+#if 0
+        else {
+            int lcount=count,ii;
+            if (options->current_infile) lcount=options->current_infile->filter_handle_count;
+            if (size1 != size2) {
+                printf("#%d different size: %d!=%d\n",lcount,(int)size1,(int)size2);
+            }
+            if (memcmp_ret) {
+                unsigned char *m1=(unsigned char*)msg1;
+                unsigned char *m2=(unsigned char*)msg2;
+                printf("=== list of different bytes for message %d\n",lcount);
+                for (ii=0;ii<size1;ii++) {
+                    if (memcmp(m1,m2,1)) {
+                        printf("  %d 0x%.2X != 0x%.2X\n",ii,*m1,*m2);
+                    }
+                    m1++; m2++;
+                }
+            }
+            return err;
+        }
+#endif
+
+
+        if ( listFromCommandLine ) {
+            for (i=0; i< options->compare_count; i++) {
+                if (blacklisted(name)) continue;
+                if (options->compare[i].type == GRIB_NAMESPACE) {
+                    iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name);
+                    if (!iter) {
+                        printf("ERROR: unable to get iterator for %s\n",options->compare[i].name );
+                        exit(1);
+                    }
+                    while(grib_keys_iterator_next(iter))
+                    {
+                        name=grib_keys_iterator_get_name(iter);
+                        /*printf("----- comparing %s\n",name);*/
+
+                        if (blacklisted(name)) continue;
+                        if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED)) {
+                            err++;
+                            write_messages(h1,h2);
+                            if (compare_all_dump_keys(h1,h2,options,&err)) {
+                                err++;
+                            }
+                        }
+                    }
+                    grib_keys_iterator_delete(iter);
+                } else {
+                    if( compare_values(options,h1,h2,options->compare[i].name,options->compare[i].type)) {
+                        err++;
+                        write_messages(h1,h2);
+                        if (compare_all_dump_keys(h1,h2,options,&err)) {
+                            err++;
+                        }
+                    }
+                }
+            }
+        } else {
+            if (compare_all_dump_keys(h1,h2,options,&err)) {
+                err++;
+            }
+        }
+    }
+    return err;
+}
+
+int grib_no_handle_action(int err)
+{
+  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+  return 0;
+}
diff --git a/tools/gts_copy.c b/tools/gts_copy.c
index 9c4dfc3..8c101a1 100644
--- a/tools/gts_copy.c
+++ b/tools/gts_copy.c
@@ -8,121 +8,111 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_copy
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
-
 #include "grib_tools.h"
 
-char* grib_tool_description="Copies the content of grib files printing"
-                            " values of some keys.";
+char* grib_tool_description="Copies the content of GTS files printing"
+        " values of some keys.";
 char* grib_tool_name="gts_copy";
 char* grib_tool_usage="[options] file file ... output_file";
 
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value */
-    {"f",0,0,0,1,0},
-    {"c",0,0,1,0,0},
-    {"r",0,0,0,1,0},
-    {"q",0,0,1,0,0},
-    {"p:",0,0,1,1,0},
-    {"P:",0,0,0,1,0},
-    {"w:","key[:{s/d/i}]=value,key[:{s/d/i}]=value,...","\n\t\tWhere clause."
-     "\n\t\tOnly grib messages matching the key/value constraints are "
-     "copied to the\n\t\toutput_grib_file.\n\t\tFor each key a string (key:s), a "
-     "double (key:d) or an integer (key:i)\n\t\ttype can be defined. Default type "
-     "is string.\n",0,1,0},
-    {"B:",0,0,0,1,0},
-    {"V",0,0,0,1,0},
-    {"W:",0,0,0,1,0},
-    {"M",0,0,0,1,0},
-    {"U",0,0,1,0,0},
-    {"H",0,0,1,0,0},
-    {"T:",0,0,1,0,"T"},
-    {"S",0,0,1,0,0},
-    {"g",0,0,0,1,0},
-    {"G",0,0,0,1,0},
-    {"7",0,0,0,1,0},
-    {"v",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value */
+        {"f",0,0,0,1,0},
+        {"c",0,0,1,0,0},
+        {"q",0,0,1,0,0},
+        {"p:",0,0,1,1,0},
+        {"P:",0,0,0,1,0},
+        {"w:","key[:{s/d/i}]=value,key[:{s/d/i}]=value,...","\n\t\tWhere clause."
+                "\n\t\tOnly GTS messages matching the key/value constraints are "
+                "copied to the\n\t\toutput_gts_file.\n\t\tFor each key a string (key:s), a "
+                "double (key:d) or an integer (key:i)\n\t\ttype can be defined. Default type "
+                "is string.\n",0,1,0},
+        {"B:",0,0,0,1,0},
+        {"V",0,0,0,1,0},
+        {"W:",0,0,0,1,0},
+        {"U",0,0,1,0,0},
+        {"H",0,0,1,0,0},
+        {"T:",0,0,1,0,"T"}, /* GTS */
+        {"S",0,0,1,0,0},
+        {"g",0,0,0,1,0},
+        {"7",0,0,0,1,0},
+        {"v",0,0,0,1,0}
 };
 
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
-int main(int argc, char *argv[]) {
-  int ret=grib_tool(argc,argv);
-  return ret;
+int main(int argc, char *argv[])
+{
+    int ret=grib_tool(argc,argv);
+    return ret;
 }
 
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  return 0;
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
 }
 
-int grib_tool_init(grib_runtime_options* options) {
+int grib_tool_init(grib_runtime_options* options)
+{
 #if 0
-  if (options->outfile && options->outfile->name) {
-    options->outfile->file = fopen(options->outfile->name,"w");
-    if(!options->outfile->file) {
-      perror(options->outfile->name);
-      exit(1);
+    if (options->outfile && options->outfile->name) {
+        options->outfile->file = fopen(options->outfile->name,"w");
+        if(!options->outfile->file) {
+            perror(options->outfile->name);
+            exit(1);
+        }
     }
-  }
 #endif
-  return 0;
+    return 0;
 }
 
-
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
 }
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
-  double* v;
-  size_t size=0;
-  if ( options->repack ) {
-    GRIB_CHECK_NOLINE(grib_get_size(h,"values",&size),0);
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
+    int err=0;
+    if (!options->skip) {
+        if (options->set_values_count != 0)
+            err=grib_set_values(h,options->set_values,options->set_values_count);
 
-    v    = (double*)calloc(size,sizeof(double));
-    if(!v) {
-        fprintf(stderr,"failed to allocate %ld bytes\n",(long)(size*sizeof(double)));
-        exit(1);
+        if( err != GRIB_SUCCESS && options->fail) exit(err);
     }
 
-    GRIB_CHECK_NOLINE(grib_get_double_array(h,"values",v,&size),0);
-    GRIB_CHECK_NOLINE(grib_set_double_array(h,"values",v,size),0);
-    free(v);
-  }
-  grib_tools_write_message(options,h);
-  return 0;
+    grib_tools_write_message(options,h);
+    return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
-/*
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    /*
   if (options->outfile->file) {
     fclose(options->outfile->file);
   }
-*/
-  return 0;
+     */
+    return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/gts_dump.c b/tools/gts_dump.c
index 1068472..a20191e 100644
--- a/tools/gts_dump.c
+++ b/tools/gts_dump.c
@@ -9,9 +9,7 @@
  */
 
 /*
- * C Implementation: grib_dump
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
+ * C Implementation: gts_dump
  *
  *
  */
@@ -24,12 +22,10 @@ grib_option grib_options[]={
     {"O",0,"Octet mode. WMO documentation style dump.\n",0,1,0},
     {"D",0,0,0,1,0},
     {"d",0,"Print all data values.\n",0,1,0},
-    {"C",0,0,0,1,0},
     {"t",0,0,0,1,0},
     {"H",0,0,0,1,0},
     {"a",0,0,0,1,0},
     {"w:",0,0,0,1,0},
-    {"M",0,0,0,1,0},
     {"T:",0,0,1,0,"T"},
     {"7",0,0,0,1,0},
     {"V",0,0,0,1,0},
@@ -37,24 +33,26 @@ grib_option grib_options[]={
     {"x",0,0,0,1,0}
 };
 
-char* grib_tool_description="Dump the content of a grib file in different formats.";
+char* grib_tool_description="Dump the content of a GTS file in different formats.";
 char* grib_tool_name="gts_dump";
 char* grib_tool_usage="[options] file file ...";
 
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
 /**
-*grib_dump
-*Dump the content of a grib file
+* gts_dump
+* Dump the content of a GTS file
 *
 */
 int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
 
-int grib_tool_before_getopt(grib_runtime_options* options) {
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
   return 0;
 }
 
-int grib_tool_init(grib_runtime_options* options) {
+int grib_tool_init(grib_runtime_options* options)
+{
 
   int opt=grib_options_on("C")+grib_options_on("O")+grib_options_on("D");
 
@@ -62,18 +60,10 @@ int grib_tool_init(grib_runtime_options* options) {
 
 
   if (opt > 1) {
-    printf("%s: simultaneous C/O/D options not allowed\n",grib_tool_name);
+    printf("%s: simultaneous O/D options not allowed\n",grib_tool_name);
     exit(1);
   }
 
-  if (grib_options_on("C")) {
-    options->dump_mode = "c_code";
-    if (grib_options_on("d"))
-      options->dump_flags = 0;
-    else
-      options->dump_flags = GRIB_DUMP_FLAG_NO_DATA;
-  }
-
   if  (grib_options_on("O")) {
     options->dump_mode = "wmo";
     options->dump_flags = GRIB_DUMP_FLAG_CODED
@@ -103,11 +93,13 @@ int grib_tool_init(grib_runtime_options* options) {
   return 0;
 }
 
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
    return 0;
 }
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
   char tmp[1024];
   if (!options->current_infile->name) return 0;
   sprintf(tmp,"FILE: %s ",options->current_infile->name);
@@ -116,7 +108,8 @@ int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* fil
    return 0;
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
   long length=0;
   char tmp[1024];
   char identifier[100];
@@ -143,21 +136,24 @@ int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
   return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
   grib_handle_delete(h);
   return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
   grib_print_key_values(options,h);
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
   return 0;
 }
 
-int grib_no_handle_action(int err) {
+int grib_no_handle_action(int err)
+{
   fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
   return 0;
 }
-
diff --git a/tools/gts_filter.c b/tools/gts_filter.c
index d70843e..1b520e3 100644
--- a/tools/gts_filter.c
+++ b/tools/gts_filter.c
@@ -8,17 +8,8 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_filter
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
-
 #include "grib_tools.h"
 
-
 grib_option grib_options[]={
 /*  {id, args, help}, on, command_line, value */
     {"f",0,0,0,1,0},
@@ -31,78 +22,88 @@ grib_option grib_options[]={
     {"V",0,0,0,1,0},
     {"g",0,0,0,1,0},
     {"G",0,0,0,1,0},
-    {"T:",0,0,1,0,"T"},
+    {"T:",0,0,1,0,"T"}, /* GTS */
     {"7",0,0,0,1,0},
     {"v",0,0,0,1,0}
 };
-char* grib_tool_description="Apply the rules defined in rules_file to each grib "
-   "message\n\tin the grib files provided as arguments.";
+char* grib_tool_description="Apply the rules defined in rules_file to each GTS "
+   "message\n\tin the GTS files provided as arguments.\n\t"
+        "If you specify '-' (a single dash) for the rules_file, the rules will be read from standard input.";
 char* grib_tool_name="gts_filter";
 char* grib_tool_usage="[options] rules_file "
                       "file file ...";
 int fail=0;
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
-int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
-
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  return 0;
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
 }
 
-int grib_tool_init(grib_runtime_options* options) {
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
+}
 
-  options->action = grib_action_from_filter(options->infile_extra->name);
-  if (!options->action) {
-      fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name);
-      exit(1);
-  }
+int grib_tool_init(grib_runtime_options* options)
+{
+    options->action = grib_action_from_filter(options->infile_extra->name);
+    if (!options->action) {
+        fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name);
+        exit(1);
+    }
 
-  if ( options->outfile && options->outfile->name )
-    options->action->context->outfilename=options->outfile->name;
+    if ( options->outfile && options->outfile->name )
+        options->action->context->outfilename=options->outfile->name;
 
-  return 0;
+    return 0;
 }
 
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
 }  
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
 int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
-  int err=0;
-  
-  if (options->current_infile->name) {
-    size_t len=strlen(options->current_infile->name);
-    grib_set_string(h,"file",options->current_infile->name,&len);
-  }
-
-  err=grib_handle_apply_action(h,options->action);
-  if (err != GRIB_SUCCESS && options->fail && err!=GRIB_NOT_FOUND) {
-     printf("ERROR: %s\n",grib_get_error_message(err));
-     exit(err);
-  }
-  return 0;
+    int err=0;
+
+    if (options->current_infile->name) {
+        size_t len=strlen(options->current_infile->name);
+        grib_set_string(h,"file",options->current_infile->name,&len);
+    }
+
+    err=grib_handle_apply_action(h,options->action);
+    if (err != GRIB_SUCCESS && options->fail && err!=GRIB_NOT_FOUND) {
+        printf("ERROR: %s\n",grib_get_error_message(err));
+        exit(err);
+    }
+    return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
-  grib_file_pool_clean();
-  return 0;
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    grib_file_pool_clean();
+    return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/gts_get.c b/tools/gts_get.c
index c90833a..26241d1 100644
--- a/tools/gts_get.c
+++ b/tools/gts_get.c
@@ -8,211 +8,98 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_get
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
-
 #include "grib_tools.h"
 
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value*/
-    {"f",0,0,0,1,0},
-    {"p:",0,0,0,1,0},
-    {"F:",0,0,1,1,"%g"},
-    {"l:",0,0,0,1,0},
-    {"P:",0,0,0,1,0},
-    {"w:",0,0,0,1,0},
-    {"n:",0,0,1,1,0},
-    {"s:",0,0,0,1,0},
-    {"V",0,0,0,1,0},
-    {"W:",0,0,1,1,"8"},
-    {"m",0,0,0,1,0},
-    {"M",0,0,0,1,0},
-    {"S",0,0,1,0,0},
-    {"g",0,0,0,1,0},
-    {"G",0,0,0,1,0},
-    {"T:",0,0,1,0,"T"},
-    {"7",0,0,0,1,0},
-    {"v",0,0,1,0,0},
-    {"i:",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value*/
+        {"f",0,0,0,1,0},
+        {"p:",0,0,0,1,0},
+        {"F:",0,0,1,1,"%g"},
+        {"P:",0,0,0,1,0},
+        {"w:",0,0,0,1,0},
+        {"n:",0,0,1,1,0},
+        {"s:",0,0,0,1,0},
+        {"V",0,0,0,1,0},
+        {"W:",0,0,1,1,"8"},
+        {"S",0,0,1,0,0},
+        {"g",0,0,0,1,0},
+        {"T:",0,0,1,0,"T"},/* GTS */
+        {"7",0,0,0,1,0},
+        {"v",0,0,1,0,0}
 };
 
-char* grib_tool_description="Get values of some keys from a grib file."
-                 "\n\tIt is similar to grib_ls, but fails returning an error code "
-         "\n\twhen an error occurs (e.g. key not found).";
+char* grib_tool_description="Get values of some keys from a GTS file."
+        "\n\tIt is similar to gts_ls, but fails returning an error code "
+        "\n\twhen an error occurs (e.g. key not found).";
 char* grib_tool_name="gts_get";
 char* grib_tool_usage="[options] file file ...";
 
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
-double lat=0;
-double lon=0;
 int mode=0;
-grib_nearest* n=NULL;
 
-int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
-
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  options->print_keys_count=-1;
-  return 0;
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
 }
 
-int grib_tool_init(grib_runtime_options* options) {
-  char  *end = NULL, *end1=NULL;
-  size_t size=4;
-  int ret=0;
-  double min=0,max=0;
-  int i=0,idx=0;
-  char* p=NULL;
-  
-  options->print_header=0;
-  options->print_statistics=0;
-  options->default_print_width=-1;
-
-  if (options->latlon) {
-
-    lat = strtod(options->latlon,&end);
-    if (*end != ',') {
-      printf("ERROR: wrong latitude value\n");
-      exit(1);
-    }
-    lon= strtod(++end,&end1);
-    
-    mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID;
-
-    if (end1 && *end1 == ',') {
-      end1++;
-      if (*end1 != '0') {
-        p=end1;
-        while (*p != ',' && *p !='\0') p++;
-        if (*end1 == '4') {
-          options->latlon_mode=4;
-        } else if (*end1 == '1') {
-          options->latlon_mode=1;
-        } else {
-          printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name);
-          exit(1);
-        }
-      }
-      if (*p == ',') {
-        p++;
-        options->latlon_mask=strdup(p);
-      }
-    }
-
-
-  }
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    options->print_keys_count=-1;
+    return 0;
+}
 
-  if (options->latlon && options->latlon_mask) {
-    FILE* f=NULL;
-    grib_handle* hh;
-    f=fopen(options->latlon_mask,"r");
-    if(!f) {
-      perror(options->latlon_mask);
-      exit(1);
-    }
-    hh=grib_handle_new_from_file(0,f,&ret);
-    fclose(f);
-    GRIB_CHECK_NOLINE(ret,0);
-    n=grib_nearest_new(hh,&ret);
-    GRIB_CHECK_NOLINE(ret,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode,
-               options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0);
-    grib_nearest_delete(n);
-    n=NULL;
-    grib_handle_delete( hh);
-
-    options->latlon_idx=-1;
-    max=options->distances[0];
-    for (i=0;i<4;i++)
-      if (max<options->distances[i]) {max=options->distances[i];idx=i;}
-    min=max;
-    for (i=0;i<4;i++) {
-      if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) {
-        options->latlon_idx=i;
-        min = options->distances[i];
-      }
-    }
+int grib_tool_init(grib_runtime_options* options)
+{
+    options->print_header=0;
+    options->print_statistics=0;
+    options->default_print_width=-1;
 
-    if (options->latlon_idx<0){
-      min=0;
-      options->latlon_idx=0;
-      for (i=1;i<4;i++)
-        if (min>options->distances[i]) {
-        min = options->distances[i];
-        options->latlon_idx=i;
-        }
-    }
-  }
-  
-  return 0;
+    return 0;
 }
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
-   }
 
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
+}
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h) {
-  size_t size=4;
-  int err = 0;
+int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h)
+{
+    int err = 0;
+
+    if (!options->skip) {
+        if (options->set_values_count != 0) {
+            err=grib_set_values(h,options->set_values,options->set_values_count);
+        }
 
-  if (!options->skip) {
-	  if (options->set_values_count != 0) {
-		  err=grib_set_values(h,options->set_values,options->set_values_count);
+        if (err != GRIB_SUCCESS && options->fail) exit(err);
     }
 
-	  if (err != GRIB_SUCCESS && options->fail) exit(err);
-  }
-
-  if (options->latlon) {
-	  int err=0;
-	  double min;
-	  int i;
-    if (!n) n=grib_nearest_new(h,&err);
-    GRIB_CHECK_NOLINE(err,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,mode,
-               options->lats,options->lons,options->values,
-               options->distances,options->indexes,&size),0);
-	min=options->distances[0];
-	options->latlon_idx=0;
-	i=0;
-	for (i=1;i<4;i++) {
-		if (min>options->distances[i]) {
-			min=options->distances[i];
-			options->latlon_idx=i;
-		}
-	}
-
-  }
-  
-  return 0;
+    return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
-
-  if (n) grib_nearest_delete(n);
-  
-  return 0;
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/gts_ls.c b/tools/gts_ls.c
index 4710cc9..455bba8 100644
--- a/tools/gts_ls.c
+++ b/tools/gts_ls.c
@@ -8,349 +8,119 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_ls
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
 #include "grib_tools.h"
 
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value*/
-    {"f",0,0,1,0,0},
-    {"p:",0,0,0,1,0},
-    {"F:",0,0,1,1,"%g"},
-    {"P:",0,0,0,1,0},
-    {"w:",0,0,0,1,0},
-    {"j",0,"json output\n",0,1,0},
-    {"B:",0,0,0,1,0},
-    {"l:",0,0,0,1,0},
-    {"s:",0,0,0,1,0},
-    {"i:",0,0,0,1,0},
-    {"n:",0,0,1,1,"ls"},
-    {"m",0,0,0,1,0},
-    {"V",0,0,0,1,0},
-    {"W:",0,0,1,1,"10"},
-    {"S",0,0,1,0,0},
-    {"M",0,0,0,1,0},
-    {"H",0,0,1,0,0},
-    {"g",0,0,0,1,0},
-    {"P",0,0,1,0,0},
-    {"T:",0,0,1,0,"T"},
-    {"7",0,0,0,1,0},
-    {"v",0,0,1,0,0},
-    {"x",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value*/
+        {"f",0,0,1,0,0},
+        {"p:",0,0,0,1,0},
+        {"F:",0,0,1,1,"%g"},
+        {"P:",0,0,0,1,0},
+        {"w:",0,0,0,1,0},
+        /*{"j",0,"json output\n",0,1,0},*/
+        {"B:",0,0,0,1,0},
+        {"s:",0,0,0,1,0},
+        {"n:",0,0,1,1,"ls"},
+        {"V",0,0,0,1,0},
+        {"W:",0,0,1,1,"10"},
+        {"S",0,0,1,0,0},
+        {"H",0,0,1,0,0},
+        {"g",0,0,0,1,0},
+        {"P",0,0,1,0,0},
+        {"T:",0,0,1,0,"T"}, /* GTS */
+        {"7",0,0,0,1,0},
+        {"v",0,0,1,0,0}
 };
 
-char* grib_tool_description="List content of grib files printing values of "
-                  "some keys.\n\tIt does not fail when a key is not found.";
+char* grib_tool_description="List content of GTS files printing values of "
+        "some keys.\n\tIt does not fail when a key is not found.";
 char* grib_tool_name="gts_ls";
 char* grib_tool_usage="[options] file file ...";
 static char* new_handle="";
 
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
-double lat=0;
-double lon=0;
 int mode=0;
-static int json=0;
 
-grib_nearest* n=NULL;
-/*double *outlats,*outlons,*values,*lsm_values,*distances;*/
-
-int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
+}
 
 /*
 This is executed before processing the options with i
 getopt and therfore it is the right place for hacking 
 the arguments if needed
-*/
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  return 0;
+ */
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
 }
 
 /*
 The options have been parsed and the structure
 grib_runtime_options* options has been loaded.
-Initialization and startup can be done here
-*/
-int grib_tool_init(grib_runtime_options* options) {
-  char  *end = NULL, *end1=NULL;
-  size_t size=4;
-  int ret=0;
-  double min=0,max=0;
-  int i=0;
-  char* p=NULL;
-  if (grib_options_on("j")) {
-	options->verbose=0;
-	json=1;
-  }
-
-  if (options->latlon) {
-
-    lat = strtod(options->latlon,&end);
-    if (*end != ',') {
-      printf("ERROR: wrong latitude value\n");
-      exit(1);
-    }
-    lon= strtod(++end,&end1);
-    
-    mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID;
-
-    if (end1 && *end1 == ',') {
-      end1++;
-      if (*end1 != '0') {
-        p=end1;
-        while (*p != ',' && *p !='\0') p++;
-        if (*end1 == '4') {
-            options->latlon_mode=4;
-        } else if (*end1 == '1') {
-            options->latlon_mode=1;
-        } else {
-          printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name);
-          exit(1);
-        }
-      }
-      if (*p == ',') {
-        p++;
-        options->latlon_mask=strdup(p);
-      }
-    }
-
-  }
-
-  if (options->latlon && options->latlon_mask) {
-    FILE* f=NULL;
-    grib_handle* hh;
-    f=fopen(options->latlon_mask,"r");
-    if(!f) {
-      perror(options->latlon_mask);
-      exit(1);
-    }
-    hh=grib_handle_new_from_file(0,f,&ret);
-    fclose(f);
-    GRIB_CHECK_NOLINE(ret,0);
-    n=grib_nearest_new(hh,&ret);
-    GRIB_CHECK_NOLINE(ret,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode,
-        options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0);
-    grib_nearest_delete(n);
-    n=NULL;
-    grib_handle_delete( hh);
-
-    options->latlon_idx=-1;
-    max=options->distances[0];
-    for (i=0;i<4;i++)
-      if (max<options->distances[i]) {max=options->distances[i];}
-    min=max;
-    for (i=0;i<4;i++) {
-      if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) {
-        options->latlon_idx=i;
-        min = options->distances[i];
-      }
-    }
-
-    if (options->latlon_idx<0){
-      min=0;
-      options->latlon_idx=0;
-      for (i=1;i<4;i++)
-        if (min>options->distances[i]) {
-          min = options->distances[i];
-          options->latlon_idx=i;
-        }
-    }
-  }
-  if (json) printf("[\n");
-
-  return 0;
+Initialisation and startup can be done here
+ */
+int grib_tool_init(grib_runtime_options* options)
+{
+    return 0;
 }
 
 /*
 A new file is being parsed. The file name is file. This function is called every time
 a new input file name is processed, before opening the file.
-*/
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
-   }
-
-
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+ */
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
 }
 
-static void print_key_values(grib_runtime_options* options,grib_handle* h) {
-	int i;
-	int ret=0;
-	char* s="\"keys\" : {";
-	double dvalue=0;
-	long lvalue=0;
-	char value[MAX_STRING_LEN];
-	size_t len=MAX_STRING_LEN;
-	for (i=0;i<options->print_keys_count;i++) {
-		ret=GRIB_SUCCESS;
-		printf("%s",s);
-		len=MAX_STRING_LEN;
-		printf("\"%s\" : ",options->print_keys[i].name);
-		if (grib_is_missing(h,options->print_keys[i].name,&ret) && ret==GRIB_SUCCESS)
-			printf("\"missing\"");
-		else if ( ret == GRIB_SUCCESS ) {
-			if (options->print_keys[i].type == GRIB_TYPE_UNDEFINED)
-				grib_get_native_type(h,options->print_keys[i].name,&(options->print_keys[i].type));
-			switch (options->print_keys[i].type) {
-				case GRIB_TYPE_STRING:
-					ret=grib_get_string( h,options->print_keys[i].name,value,&len);
-					printf("\"%s\"",value);
-					break;
-				case GRIB_TYPE_DOUBLE:
-					ret=grib_get_double( h,options->print_keys[i].name,&dvalue);
-					printf("%g",dvalue);
-					break;
-				case GRIB_TYPE_LONG:
-					ret=grib_get_long( h,options->print_keys[i].name,&lvalue);
-					printf("%ld",lvalue);
-					break;
-				default:
-					printf("invalid_type");
-			}
-		}
-		if (ret == GRIB_NOT_FOUND) printf("null");
-		s=", ";
-	}
-	printf("}");
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
 /* A new handle is available from the current input file and can be processed here.
 The handle available in this function is in the set of messages satisfying the constrant of the
 -w option. They are not to be skipped.
-*/
-int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
-  size_t size=4;
-  double v=0;
-  int err=0;
-  int i;
-  
-  if (!options->skip) {
-
-	  if (options->set_values_count != 0)
-		  err=grib_set_values(h,options->set_values,options->set_values_count);
-
-	  if( err != GRIB_SUCCESS && options->fail) exit(err);
-  }
-  
-  if (options->latlon) {
+ */
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
     int err=0;
-	double min;
-    if (!n) n=grib_nearest_new(h,&err);
-    GRIB_CHECK_NOLINE(err,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,0,
-        options->lats,options->lons,options->values,
-        options->distances,options->indexes,&size),0);
-
-	if (!options->latlon_mask) {
-		min=options->distances[0];
-		options->latlon_idx=0;
-		i=0;
-		for (i=1;i<4;i++) {
-			if (min>options->distances[i]) {
-					min=options->distances[i];
-					options->latlon_idx=i;
-			}
-		}
-	}
-	
-	if (json) {
-		char* s="\n[\n";
-		double missingValue=9999;
-		char value[MAX_STRING_LEN];
-		size_t len=MAX_STRING_LEN;
-		printf("%s",new_handle);
-		printf(	"{\n");
-		print_key_values(options,h);
-		printf("\n, \"selected\" : %d",options->latlon_idx);
-		printf(", \"method\" : ");
-		if (options->latlon_mask) printf("\"nearest_land\"");
-		else printf("\"nearest\"");
-		printf("\n, \"neighbours\" : ");
-		for (i=0;i<4;i++) {
-			printf("%s",s);
-			len=MAX_STRING_LEN;
-			printf("{\"index\" : %d, \"latitude\" : %g, \"longitude\" : %g, \"distance\" : %g, "
-				   "\"distance_unit\" : \"km\", ",
-	   				(int)options->indexes[i],options->lats[i],options->lons[i],
-					options->distances[i]);
-			if (grib_get_double_element(h,"values",options->indexes[i],&v) == GRIB_SUCCESS) {
-				if (v==missingValue) printf("\"value\" : null ");
-				else printf("\"value\" : %g ",v);
-			}
 
-			if (grib_get_string( h,"units",value,&len)==GRIB_SUCCESS)
-				printf(", \"unit\" : \"%s\"",value);
-			
-			if (options->latlon_mask) 
-				printf(", \"mask_value\"=%.2f",options->mask_values[i]);
-			printf("}");
-			s="\n,";
-		}
+    if (!options->skip) {
+        if (options->set_values_count != 0)
+            err=grib_set_values(h,options->set_values,options->set_values_count);
 
-		printf("\n]");
-		printf("\n}");
-	}
+        if( err != GRIB_SUCCESS && options->fail) exit(err);
+    }
 
-  }
-  new_handle="\n,";
-  return 0;
+    new_handle="\n,";
+    return 0;
 }
 
 /* A new handle to skip is available. At this point something can be done
 with the message to be skipped before deleting the handle. */
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
 /* key values can be printed in this function. Headers are already printed if requested.*/
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
 /* this is executed after the last message in the last file is processed */
-int grib_tool_finalise_action(grib_runtime_options* options) {
-  int i=0;
-  if (options->latlon && options->verbose) {
- 
-		printf("Input Point: latitude=%.2f  longitude=%.2f\n",lat,lon);
-		printf("Grid Point chosen #%d index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n",
-			   options->latlon_idx+1,(int)options->indexes[options->latlon_idx],
-									  options->lats[options->latlon_idx],
-		   	options->lons[options->latlon_idx],
-	 		options->distances[options->latlon_idx]);
-
-		if (options->latlon_mask) {
-			printf("Mask values:\n");
-			for (i=0;i<4;i++) {
-				printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km) value=%.2f\n",
-					   i+1,(int)options->indexes[i],options->lats[i],options->lons[i],
-							options->distances[i],options->mask_values[i]);
-			}
-		} else {
-			printf("Other grid Points\n");
-			for (i=0;i<4;i++) {
-				printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n",
-					   i+1,(int)options->indexes[i],options->lats[i],options->lons[i],
-							options->distances[i]);
-			}
-		}
-	}
-
-    if (n) grib_nearest_delete(n);
-	if (json) printf("\n]\n");
-  
-  return 0;
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/make_dox.ksh b/tools/make_dox.ksh
index 2add4d4..8b543f6 100755
--- a/tools/make_dox.ksh
+++ b/tools/make_dox.ksh
@@ -3,30 +3,26 @@ set -ex
 set -A tools grib_dump grib_ls grib_get grib_copy grib_set grib_filter grib_compare grib_get_data grib_keys grib_index_build
 export DOXYGEN_USAGE=1
 
-p4 edit tools.dox
-
 cat tools_head.dox > tools.dox
 
 for tool in ${tools[@]}
 do 
-  p4 edit ${tool}.dox
-
-set +e
+  set +e
   ./$tool > ${tool}.dox
-set -e
+  set -e
 
-cat >> ${tool}.dox <<EOF
+  cat >> ${tool}.dox <<EOF
 
 \section ${tool}_examples ${tool} examples
 EOF
 
   ./${tool}.sh >> ${tool}.dox
 
-cat >> ${tool}.dox <<EOF
+  cat >> ${tool}.dox <<EOF
 */
 EOF
 
-cat >> tools.dox <<EOF
+  cat >> tools.dox <<EOF
 - \ref ${tool}
 EOF
 
diff --git a/tools/metar_compare.c b/tools/metar_compare.c
new file mode 100644
index 0000000..0d51d0f
--- /dev/null
+++ b/tools/metar_compare.c
@@ -0,0 +1,1173 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+#include "grib_tools.h"
+
+GRIB_INLINE static int grib_inline_strcmp(const char* a,const char* b)
+{
+    if (*a != *b) return 1;
+    while((*a!=0 && *b!=0) &&  *(a) == *(b) ) {a++;b++;}
+    return (*a==0 && *b==0) ? 0 : 1;
+}
+
+GRIB_INLINE static int grib_inline_rstrcmp(const char* a,const char* b)
+{
+    char* p=(char*)a;
+    char* q=(char*)b;
+    while (*p != 0) p++;
+    while (*q != 0) q++;
+    q--;p--;
+    if (*q != *p) return 1;
+    while((p!=a && q!=b) &&  *(p) == *(q) ) {p--;q--;}
+    return (q==b) ? 0 : 1;
+}
+
+typedef double (*compare_double_proc) (double*,double*,double*);
+
+typedef struct grib_error grib_error;
+struct grib_error {
+    char* key;
+    int count;
+    grib_error* next;
+};
+
+grib_error* error_summary;
+
+compare_double_proc compare_double;
+double global_tolerance=0;
+int packingCompare=0;
+grib_string_list* blacklist=0;
+int compareAbsolute=1;
+
+static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options* options);
+static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_handle *h2,const char *name,int type);
+int error=0;
+int count=0;
+int lastPrint=0;
+int force=0;
+double maxAbsoluteError = 1e-19;
+int onlyListed=1;
+int headerMode=0;
+int morein1=0;
+int morein2=0;
+int listFromCommandLine;
+int verbose=0;
+int tolerance_factor=1;
+static int write_error=0;
+
+GRIB_INLINE static double compare_double_absolute(double *a,double *b,double *err)
+{
+    double ret=0;
+    double d=fabs(*a-*b);
+    if (d > *err) {
+        ret=d;
+    }
+    return ret;
+    /* return fabs(*a-*b) > *err ? fabs(*a-*b) : 0; */
+}
+
+static int write_count=0;
+
+static void write_message(grib_handle* h,const char* str)
+{
+    const void *m; size_t s;
+    char fname[1024]={0,};
+    FILE* fh=NULL;
+
+    grib_get_message(h,&m,&s);
+    sprintf(fname,"%s_%d.metar",str,write_count);
+
+    fh= fopen(fname,"w");
+    if(!fh) {
+        grib_context_log(h->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),
+                "Error opening %s",fname);
+        exit(GRIB_IO_PROBLEM);
+    }
+
+    if(fwrite(m,1,s,fh) != s) {
+        grib_context_log(h->context,(GRIB_LOG_ERROR)|(GRIB_LOG_PERROR),
+                "Error writing to %s",fname);
+        exit(GRIB_IO_PROBLEM);
+    }
+
+    fclose(fh);
+}
+
+static void write_messages(grib_handle* h1,grib_handle* h2)
+{
+    if (!write_error) return;
+    write_count++;
+
+    write_message(h1,"error1");
+    write_message(h2,"error2");
+}
+
+static double compare_double_relative(double *a,double *b,double *err)
+{
+    double relativeError;
+
+    if(fabs(*a) <= maxAbsoluteError || fabs(*b) <= maxAbsoluteError)
+        relativeError = fabs(*a-*b);
+    else if (fabs(*b) > fabs(*a))
+        relativeError = fabs((*a-*b) / *b);
+    else
+        relativeError = fabs((*a-*b) / *a);
+
+    return relativeError > *err ? relativeError : 0;
+}
+
+static int blacklisted(const char* name)
+{
+    grib_string_list* b=blacklist;
+    while (b) {
+        Assert(b->value);
+        if (!strcmp(name,b->value))
+            return 1;
+        b=b->next;
+    }
+    return 0;
+}
+
+static double relative_error(double a,double b,double err)
+{
+    double relativeError;
+    double maxAbsoluteError = 1e-19;
+
+    if(fabs(a) <= maxAbsoluteError || fabs(b) <= maxAbsoluteError)
+        relativeError = fabs(a-b);
+    else if (fabs(b) > fabs(a))
+        relativeError = fabs((a-b) / b);
+    else
+        relativeError = fabs((a-b) / a);
+
+    return relativeError ;
+}
+
+grib_option grib_options[]={
+        /*  {id, args, help}, on, command_line, value*/
+        {"r",0,"Compare files in which the messages are not in the same order. This option is time expensive.\n",0,1,0},
+        {"b:",0,0,0,1,0},
+        {"d",0,"Write different messages on files\n",0,1,0},
+        {"T:",0,0,1,0,"M"}, /* METAR */
+        {"c:",0,0,0,1,0},
+        {"S:","start","First field to be processed.\n",0,1,0},
+        {"E:","end","Last field to be processed.\n",0,1,0},
+        {"a",0,"-c option modifier. The keys listed with the option -c will be added to the list of keys compared without -c.\n"
+                ,0,1,0},
+        {"H",0,"Compare only message headers. Bit-by-bit compare on. Incompatible with -c option.\n",0,1,0},
+        {"R:",0,0,0,1,0},
+        {"A:",0,0,0,1,0},
+        {"P",0,"Compare data values using the packing error as tolerance.\n",0,1,0},
+        {"t:","factor","Compare data values using factor multiplied by the tolerance specified in options -P -R -A.\n",0,1,0},
+        {"w:",0,0,0,1,0},
+        {"f",0,0,0,1,0},
+        {"F",0,0,1,0,0},
+        {"q",0,0,1,0,0},
+        {"I",0,0,1,0,0},
+        {"V",0,0,0,1,0},
+        {"7",0,0,0,1,0},
+        {"v",0,0,0,1,0}
+};
+
+grib_handle* global_handle=NULL;
+int counter=0;
+int start=-1;
+int end=-1;
+
+char* grib_tool_description=
+        "Compare METAR messages contained in two files."
+        "\n\tIf some differences are found it fails returning an error code."
+        "\n\tFloating point values are compared exactly by default, different tolerance can be defined see -P -A -R."
+        "\n\tDefault behaviour: absolute error=0, bit-by-bit compare, same order in files.";
+
+char* grib_tool_name="metar_compare";
+char* grib_tool_usage="[options] "
+        "file file";
+
+int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
+
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
+}
+
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
+}
+
+int grib_tool_init(grib_runtime_options* options)
+{
+    int ret=0,i;
+    int nfiles=1;
+    char orderby[]="md5Headers";
+    grib_context* context=grib_context_get_default();
+
+    options->strict=1;
+    if (grib_options_on("S:"))
+        start=atoi(grib_options_get_option("S:"));
+
+    if (grib_options_on("E:"))
+        end=atoi(grib_options_get_option("E:"));
+
+    if (grib_options_on("f")) force=1;
+    else force=0;
+
+    if (grib_options_on("d")) write_error=1;
+    else write_error=0;
+
+    verbose = grib_options_on("v");
+
+    listFromCommandLine=0;
+    if (grib_options_on("c:") || grib_options_on("e"))
+        listFromCommandLine=1;
+
+    if (grib_options_on("a")) onlyListed=0;
+    else onlyListed=1;
+
+    if (grib_options_on("H")) headerMode=1;
+    else headerMode=0;
+
+    if (grib_options_on("H") && grib_options_on("c:")) {
+        printf("Error: -H and -c options are incompatible. Choose one of the two please.\n");
+        exit(1);
+    }
+    if (grib_options_on("a") && !grib_options_on("c:")) {
+        printf("Error: -a option requires -c option. Please define a list of keys with the -c option.\n");
+        exit(1);
+    }
+
+    if (grib_options_on("b:")) {
+        grib_string_list *next=0;
+        int i=0;
+        blacklist=(grib_string_list*)grib_context_malloc_clear(context,sizeof(grib_string_list));
+        blacklist->value=grib_context_strdup(context,options->set_values[0].name);
+        next=blacklist;
+        for (i=1;i<options->set_values_count;i++) {
+            next->next=(grib_string_list*)grib_context_malloc_clear(context,sizeof(grib_string_list));
+            next->next->value=grib_context_strdup(context,options->set_values[i].name);
+            next=next->next;
+        }
+        context->blacklist=blacklist;
+    }
+
+    if (grib_options_on("r")) {
+        char* filename[1];
+        filename[0]=options->infile_extra->name;
+        options->random=1;
+        options->orderby=strdup(orderby);
+        options->idx=grib_fieldset_new_from_files(context,filename,
+                nfiles,0,0,0,orderby,&ret);
+        if (ret) {
+            printf("unable to create index for input file %s (%s)",
+                    options->infile_extra->name,grib_get_error_message(ret));
+            exit(ret);
+        }
+    } else {
+        options->random=0;
+        options->infile_extra->file=fopen(options->infile_extra->name,"r");
+
+        if (!options->infile_extra->file) {
+            perror(options->infile_extra->name);
+            exit(1);
+        }
+    }
+
+    global_tolerance=0;
+    compare_double= &compare_double_absolute;
+    if (grib_options_on("R:")) {
+        global_tolerance=0;
+        for (i=0;i<options->tolerance_count;i++) {
+            if (!strcmp((options->tolerance[i]).name,"all")) {
+                global_tolerance=(options->tolerance[i]).double_value;
+                break;
+            }
+            if (!strcmp((options->tolerance[i]).name,"global")) {
+                global_tolerance=(options->tolerance[i]).double_value;
+                break;
+            }
+        }
+        compare_double= &compare_double_relative;
+        compareAbsolute=0;
+    }
+    if (grib_options_on("A:")){
+        if (grib_options_on("R:")) {
+            maxAbsoluteError = atof(grib_options_get_option("A:"));
+        } else {
+            compare_double= &compare_double_absolute;
+            global_tolerance = atof(grib_options_get_option("A:"));
+        }
+    }
+    if (grib_options_on("P")) {
+        packingCompare=1;
+        compare_double= &compare_double_absolute;
+    }
+
+    if (grib_options_on("t:"))
+        tolerance_factor=atof(grib_options_get_option("t:"));
+
+    {
+        /* Check for 2nd file being a directory. If so, we assume user is comparing to a file */
+        /* with the same name as first file in that directory */
+        struct stat s;
+        grib_tools_file* infile = options->infile; /* the 2nd file in comparison */
+        if (infile) {
+            int stat_val = stat(infile->name, &s);
+            if ( stat_val == 0 && S_ISDIR(s.st_mode)) {
+                /* Take the filename of the 1st file and append to dir */
+                char bufr[2048] = {0,};
+                /* options->infile_extra->name is the 1st file */
+                sprintf(bufr, "%s%c%s",
+                        infile->name,
+                        get_dir_separator_char(),
+                        extract_filename(options->infile_extra->name));
+                infile->name = strdup(bufr);
+            }
+        }
+    }
+
+    return 0;
+}
+
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
+}
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
+}
+
+static void printInfo(grib_handle* h)
+{
+    printf("== %d == DIFFERENCE == ",count);
+    lastPrint=count;
+}
+
+static void print_index_key_values(grib_index* index,int counter,const char* error_message)
+{
+    grib_index_key* keys=index->keys;
+    printf("== %d == ",counter);
+    if (error_message) printf("%s == ",error_message);
+    while (keys) {
+        printf("%s=%s ",keys->name,keys->value);
+        keys=keys->next;
+    }
+    printf("\n");
+}
+
+static grib_handle* grib_handle_new_from_file_x(
+        grib_context* c,FILE* f,int mode,int headers_only,int *err)
+{
+    return codes_handle_new_from_file(c,f,PRODUCT_METAR,err);
+}
+
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
+    int err=0;
+    count++;
+
+    if (options->through_index) {
+        grib_index* idx1=options->index1;
+        verbose=0;
+        counter++;
+
+        if ( start>0 && counter < start ) return 0;
+        if ( end>0 && counter > end ) {
+            options->stop=1;
+            return 0;
+        }
+
+        grib_index_search_same(idx1,h);
+        global_handle=codes_new_from_index(idx1,CODES_METAR,&err);
+        if (options->verbose) {
+            off_t offset=0;
+            char* filename=grib_get_field_file(options->index2,&offset);
+            printf("file1=\"%s\" ",filename);
+            filename=grib_get_field_file(options->index1,&offset);
+            printf("file2=\"%s\" \n",filename);
+            print_index_key_values(options->index1,counter,NULL);
+        }
+
+        if (!global_handle) {
+            if (!options->verbose)
+                print_index_key_values(idx1,counter,"NOT FOUND ");
+        }
+
+        if (!global_handle || err!= GRIB_SUCCESS ) {
+            morein1++;
+            if (global_handle) grib_handle_delete(global_handle);
+            return 0;
+        }
+
+        if(compare_handles(h,global_handle,options)) {
+            error++;
+            if (!force) exit(1);
+        }
+
+        grib_handle_delete(global_handle);
+
+        return 0;
+
+    } else if (options->random)
+        global_handle = grib_fieldset_next_handle(options->idx,&err);
+    else
+        global_handle=grib_handle_new_from_file_x(h->context,options->infile_extra->file,options->mode,0,&err);
+
+    if (!global_handle || err!= GRIB_SUCCESS ) {
+        morein2++;
+        if (global_handle) grib_handle_delete(global_handle);
+        return 0;
+    }
+
+    if(compare_handles(global_handle,h,options)) {
+        error++;
+        if (!force) exit(1);
+    }
+
+    grib_handle_delete(global_handle);
+
+    return 0;
+}
+
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    int err=0;
+    if (!options->through_index && !options->random)  {
+        global_handle=grib_handle_new_from_file(h->context,options->infile_extra->file,&err);
+
+        if (!global_handle || err!= GRIB_SUCCESS)
+            morein2++;
+
+        grib_handle_delete(global_handle);
+    }
+
+    grib_handle_delete(h);
+    count++;
+
+    return 0;
+}
+
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
+}
+
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    grib_error* e=error_summary;
+    int err=0;
+    grib_context* c=grib_context_get_default();
+    error+=morein1+morein2;
+
+    /*if (grib_options_on("w:")) return 0;*/
+
+    if (error) {
+        printf("\n## ERRORS SUMMARY #######\n");
+    }
+    while ((global_handle=grib_handle_new_from_file(c,options->infile_extra->file,&err))) {
+        morein1++;
+        if (global_handle) grib_handle_delete(global_handle);
+    }
+    if (morein1>0) {
+        printf("##\n## Different number of messages \n");
+        printf("## %d more messages in %s than in %s\n",morein1,
+                options->infile_extra->name,options->infile->name);
+    }
+
+    if (morein2>0) {
+        printf("##\n## Different number of messages \n");
+        printf("## %d more messages in %s than in %s\n",morein2,
+                options->infile->name,options->infile_extra->name);
+    }
+
+    if (error) {
+        printf("##\n## Summary of different key values \n");
+        while (e) {
+            printf ("## %s ( %d different )\n",e->key,e->count);
+            e=e->next;
+        }
+
+        printf("##\n## %d different messages out of %d\n\n",error,count);
+    }
+    if (options->through_index) {
+        grib_index_delete(options->index1);
+        grib_index_delete(options->index2);
+    }
+
+    if (error !=0) exit(1);
+    return 0;
+}
+
+static void save_error(grib_context* c,const char* key)
+{
+    grib_error* e=0;
+    grib_error* next=0;
+    int saved=0;
+
+    if (!error_summary) {
+        error_summary=(grib_error*)grib_context_malloc_clear(c,sizeof(grib_error));
+        error_summary->count=1;
+        error_summary->key=grib_context_strdup(c,key);
+        return;
+    }
+
+    e=error_summary;
+    next=e;
+
+    while (next) {
+        if (!strcmp(next->key,key)) {
+            next->count++;
+            saved=1;
+            break;
+        }
+        e=next;
+        next=next->next;
+    }
+
+    if (!saved) {
+        e->next=(grib_error*)grib_context_malloc_clear(c,sizeof(grib_error));
+        e->next->count=1;
+        e->next->key=grib_context_strdup(c,key);
+    }
+}
+
+static int compare_values(grib_runtime_options* options,grib_handle* h1,grib_handle *h2,const char *name,int type)
+{
+    size_t len1 = 0;
+    size_t len2 = 0;
+    int err=0,i=0;
+    int err1;
+    int err2;
+    int type1,type2;
+    int countdiff;
+    int isangle=0;
+    int isMissing1=0,isMissing2=0;
+
+    char *sval1 = NULL,*sval2 = NULL;
+    unsigned char *uval1 = NULL,*uval2 = NULL;
+    double *dval1 = NULL, *dval2 = NULL;
+    long *lval1 = NULL, *lval2 = NULL;
+    double maxdiff=0;
+    double packingError1=0,packingError2=0;
+    double value_tolerance=0;
+    grib_context* c=h1->context;
+
+    type1=type;
+    type2=type;
+    if (verbose) printf("  comparing %s",name);
+
+    if( type1==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h1,name,&type1)) != GRIB_SUCCESS)
+    {
+        printInfo(h1);
+        printf("Oops... cannot get type of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
+        save_error(c,name);
+        return err;
+    }
+
+    if(type2==GRIB_TYPE_UNDEFINED && (err = grib_get_native_type(h2,name,&type2)) != GRIB_SUCCESS)
+    {
+        if(err == GRIB_NOT_FOUND)
+        {
+            printInfo(h1);
+            printf("[%s] not found in 2nd field\n",name);
+            save_error(c,name);
+            return err;
+        }
+        printInfo(h1);
+        printf("Oops... cannot get type of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
+        save_error(c,name);
+        return err;
+    }
+
+    /*
+  if(type1 != type2)
+  {
+    printInfo(h1);
+    printf("Warning, [%s] has different types: 1st field: [%s], 2nd field: [%s]\n",
+        name,grib_get_type_name(type1),grib_get_type_name(type2));
+    return GRIB_TYPE_MISMATCH; 
+  }
+     */
+
+    if(type1 == GRIB_TYPE_LABEL)
+        return err;
+
+    if(type1 == GRIB_TYPE_SECTION)
+        return err;
+
+
+    if((err = grib_get_size(h1,name,&len1)) != GRIB_SUCCESS)
+    {
+        printInfo(h1);
+        printf("Oops... cannot get size of [%s] in 1st field: %s\n",name,grib_get_error_message(err));
+        save_error(c,name);
+        return err;
+    }
+
+    if((err = grib_get_size(h2,name,&len2)) != GRIB_SUCCESS)
+    {
+        if(err == GRIB_NOT_FOUND)
+        {
+            printInfo(h1);
+            printf("[%s] not found in 2nd field\n",name);
+            save_error(c,name);
+            return err;
+        }
+
+        printInfo(h1);
+        printf("Oops... cannot get size of [%s] in 2nd field: %s\n",name,grib_get_error_message(err));
+        save_error(c,name);
+        return err;
+    }
+
+    /*
+  if(len1 != len2 && type1 != GRIB_TYPE_STRING)
+  {
+    printInfo(h1);
+    printf("[%s] has different size: 1st field: %ld, 2nd field: %ld\n",name,(long)len1,(long)len2);
+    save_error(c,name);
+    return GRIB_COUNT_MISMATCH;
+  }
+     */
+
+    if (options->mode != MODE_METAR) {
+        /* TODO: Ignore missing values for keys in METAR. Not yet implemented */
+        isMissing1= ( (grib_is_missing(h1,name,&err1)==1) && (err1 == 0) ) ? 1 : 0;
+        isMissing2= ( (grib_is_missing(h2,name,&err2)==1) && (err2 == 0) ) ? 1 : 0;
+    }
+
+    if ((isMissing1==1) && (isMissing2==1)) {
+        if (verbose) printf(" is set to missing in both fields\n");
+        return GRIB_SUCCESS;
+    }
+
+    if (isMissing1==1) {
+        if (verbose) printf(" is set to missing in 1st field\n");
+        printInfo(h1);
+        printf("%s is set to missing in 1st field is not missing in 2nd field\n",name);
+        err1 = GRIB_VALUE_MISMATCH;
+        save_error(c,name);
+        return GRIB_VALUE_MISMATCH;
+    }
+
+    if (isMissing2==1) {
+        if (verbose) printf(" is set to missing in 1st field\n");
+        printInfo(h1);
+        printf("%s is set to missing in 2nd field is not missing in 1st field\n",name);
+        err1 = GRIB_VALUE_MISMATCH;
+        save_error(c,name);
+        return GRIB_VALUE_MISMATCH;
+    }
+
+    switch(type1)
+    {
+    case GRIB_TYPE_STRING:
+        if (verbose) printf(" as string\n");
+        grib_get_string_length(h1,name,&len1);
+        grib_get_string_length(h2,name,&len2);
+        sval1 = (char*)grib_context_malloc(h1->context,len1*sizeof(char));
+        sval2 = (char*)grib_context_malloc(h2->context,len2*sizeof(char));
+
+        if((err1 = grib_get_string(h1,name,sval1,&len1)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get string value of [%s] in 1st field: %s\n",
+                    name,grib_get_error_message(err1));
+            save_error(c,name);
+        }
+
+        if((err2 = grib_get_string(h2,name,sval2,&len2)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get string value of [%s] in 2nd field: %s\n",
+                    name,grib_get_error_message(err2));
+            save_error(c,name);
+        }
+
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS)
+        {
+            if(grib_inline_strcmp(sval1,sval2) != 0)
+            {
+                printInfo(h1);
+                printf("string [%s]: [%s] != [%s]\n",
+                        name,sval1,sval2);
+                err1 = GRIB_VALUE_MISMATCH;
+                save_error(c,name);
+            }
+        }
+
+        grib_context_free(h1->context,sval1);
+        grib_context_free(h2->context,sval2);
+
+        if(err1) return err1;
+        if(err2) return err2;
+
+        break;
+
+    case GRIB_TYPE_LONG:
+        if (verbose) printf(" as long\n");
+
+        lval1 = (long*)grib_context_malloc(h1->context,len1*sizeof(long));
+        lval2 = (long*)grib_context_malloc(h2->context,len2*sizeof(long));
+
+        if((err1 = grib_get_long_array(h1,name,lval1,&len1)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get long value of [%s] in 1st field: %s\n",
+                    name,grib_get_error_message(err1));
+            save_error(c,name);
+        }
+
+        if((err2 = grib_get_long_array(h2,name,lval2,&len2)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get long value of [%s] in 2nd field: %s\n",
+                    name,grib_get_error_message(err2));
+            save_error(c,name);
+        }
+
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1!=len2)
+        {
+            printInfo(h1);
+            printf("Different size for \"%s\"  [%ld]  [%ld]\n",name,(long)len1,(long)len2);
+            err1=GRIB_INTERNAL_ERROR;
+            save_error(c,name);
+        }
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1==len2)
+        {
+            int i;
+            countdiff=0;
+            for(i = 0; i < len1; i++)
+                if(lval1[i] != lval2[i])  countdiff++;
+
+            if (countdiff) {
+                printInfo(h1);
+                save_error(c,name);
+                err1 = GRIB_VALUE_MISMATCH;
+                if(len1 == 1)
+                    printf("long [%s]: [%ld] != [%ld]\n",
+                            name,*lval1,*lval2);
+                else
+                    printf("long [%s] %d out of %ld different\n",
+                            name,countdiff,(long)len1);
+            }
+        }
+
+
+        grib_context_free(h1->context,lval1);
+        grib_context_free(h2->context,lval2);
+
+        if(err1) return err1;
+        if(err2) return err2;
+        break;
+
+    case GRIB_TYPE_DOUBLE:
+        if (verbose) printf(" as double\n");
+        dval1 = (double*)grib_context_malloc(h1->context,len1*sizeof(double));
+        dval2 = (double*)grib_context_malloc(h2->context,len2*sizeof(double));
+
+        isangle=0;
+        value_tolerance=global_tolerance;
+        if (!grib_inline_strcmp(name,"packedValues") || !grib_inline_strcmp(name,"values")
+                || !grib_inline_strcmp(name,"codedValues")) {
+            packingError1=0;
+            packingError2=0;
+            err1=grib_get_double(h1,"packingError",&packingError1);
+            err2=grib_get_double(h2,"packingError",&packingError2);
+            if (packingCompare)
+                value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
+        } else if (!grib_inline_strcmp(name,"unpackedValues") ) {
+            packingError1=0;
+            packingError2=0;
+            err1=grib_get_double(h1,"unpackedError",&packingError1);
+            err2=grib_get_double(h2,"unpackedError",&packingError2);
+            if (packingCompare)
+                value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
+        } else if ( !grib_inline_rstrcmp(name,"InDegrees")) {
+            packingError1=0.0005;
+            packingError2=0.0005;
+            isangle=1;
+            value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
+        } else if (!grib_inline_strcmp(name,"referenceValue") ) {
+            packingError1=0;
+            packingError2=0;
+            err1=grib_get_double(h1,"referenceValueError",&packingError1);
+            err2=grib_get_double(h2,"referenceValueError",&packingError2);
+            value_tolerance = packingError1 > packingError2 ? packingError1 : packingError2;
+        }
+
+        if (!compareAbsolute) {
+            for (i=0;i<options->tolerance_count;i++) {
+                if (!strcmp((options->tolerance[i]).name,name)) {
+                    value_tolerance=(options->tolerance[i]).double_value;
+                    break;
+                }
+            }
+        }
+
+        if((err1 = grib_get_double_array(h1,name,dval1,&len1)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get double value of [%s] in 1st field: %s\n",
+                    name,grib_get_error_message(err1));
+            save_error(c,name);
+        }
+
+        if((err2 = grib_get_double_array(h2,name,dval2,&len2)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            printf("Oops... cannot get double value of [%s] in 2nd field: %s\n",
+                    name,grib_get_error_message(err2));
+            save_error(c,name);
+        }
+
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1!=len2)
+        {
+            printInfo(h1);
+            printf("Different size for \"%s\"  [%ld]  [%ld]\n",name,(long)len1,(long)len2);
+            save_error(c,name);
+        }
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS && len1==len2)
+        {
+            int i,imaxdiff;
+            double diff;
+            double *pv1,*pv2,dnew1,dnew2;
+            maxdiff=0;
+            imaxdiff=0;
+            countdiff=0;
+            pv1=dval1;
+            pv2=dval2;
+            if (isangle) {
+                dnew1=*dval1; dnew2=*dval2;
+                pv1=&dnew1; pv2=&dnew2;
+                if (*dval1 < 0 ) dnew1 += 360.0 ;
+                if (*dval2 < 0 ) dnew2 += 360.0 ;
+                if (*dval1 > 360 ) dnew1 -= 360.0 ;
+                if (*dval2 > 360 ) dnew2 -= 360.0 ;
+            }
+            value_tolerance*=tolerance_factor;
+            if (verbose) printf("  (%d values) tolerance=%g\n",(int)len1,value_tolerance);
+            for(i = 0; i < len1; i++) {
+                if((diff=compare_double(pv1++,pv2++,&value_tolerance))!=0) {
+                    countdiff++;
+                    if (maxdiff < diff) {maxdiff=diff;imaxdiff=i;}
+                    err1 = GRIB_VALUE_MISMATCH;
+                }
+            }
+
+            if (countdiff) {
+                printInfo(h1);
+                save_error(c,name);
+                if (len1>1) {
+                    printf("double [%s]: %d out of %ld different\n",name,countdiff,(long)len1);
+                    if (compareAbsolute) printf(" max");
+                    printf(" absolute diff. = %.16e,",fabs(dval1[imaxdiff]-dval2[imaxdiff]));
+                    if (!compareAbsolute) printf(" max");
+                    printf(" relative diff. = %g",relative_error(dval1[imaxdiff],dval2[imaxdiff],value_tolerance));
+                    printf("\n\tmax diff. element %d: %.20e %.20e",
+                            imaxdiff,dval1[imaxdiff],dval2[imaxdiff]);
+                    printf("\n\ttolerance=%.16e",value_tolerance);
+                    if (packingError2!=0 || packingError1!=0)
+                        printf(" packingError: [%g] [%g]",packingError1,packingError2);
+
+                    if (!grib_inline_strcmp(name,"packedValues") || !grib_inline_strcmp(name,"values")
+                            || !grib_inline_strcmp(name,"codedValues")) {
+                        double max1,min1,max2,min2;
+                        grib_get_double(h1,"max",&max1);
+                        grib_get_double(h1,"min",&min1);
+                        grib_get_double(h2,"max",&max2);
+                        grib_get_double(h2,"min",&min2);
+                        printf("\n\tvalues max= [%g]  [%g]         min= [%g] [%g]",max1,max2,min1,min2);
+                    }
+                    printf("\n");
+                } else {
+                    printf("double [%s]: [%.20e] != [%.20e]\n",
+                            name,dval1[0],dval2[0]);
+                    printf("\tabsolute diff. = %g,",fabs(dval1[0]-dval2[0]));
+                    printf(" relative diff. = %g\n",relative_error(dval1[0],dval2[0],value_tolerance));
+                    printf("\ttolerance=%g\n",value_tolerance);
+                }
+            }
+        }
+
+        grib_context_free(h1->context,dval1);
+        grib_context_free(h2->context,dval2);
+
+        if(err1) return err1;
+        if(err2) return err2;
+        break;
+
+    case GRIB_TYPE_BYTES:
+        if (verbose) printf(" as bytes\n");
+        if (options->mode==MODE_METAR) return 0;
+        if (len1<2) len1=512;
+        if (len2<2) len2=512;
+        uval1 = (unsigned char*)grib_context_malloc(h1->context,len1*sizeof(unsigned char));
+        uval2 = (unsigned char*)grib_context_malloc(h2->context,len2*sizeof(unsigned char));
+
+        if((err1 = grib_get_bytes(h1,name,uval1,&len1)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            save_error(c,name);
+            printf("Oops... cannot get bytes value of [%s] in 1st field: %s\n",
+                    name,grib_get_error_message(err1));
+        }
+
+        if((err2 = grib_get_bytes(h2,name,uval2,&len2)) != GRIB_SUCCESS)
+        {
+            printInfo(h1);
+            save_error(c,name);
+            printf("Oops... cannot get bytes value of [%s] in 2nd field: %s\n",
+                    name,grib_get_error_message(err2));
+        }
+
+        if(err1 == GRIB_SUCCESS && err2 == GRIB_SUCCESS)
+        {
+            if(memcmp(uval1,uval2,len1) != 0)
+            {
+                int i;
+                for(i = 0; i < len1; i++)
+                    if(uval1[i] != uval2[i])
+                    {
+                        printInfo(h1);
+                        save_error(c,name);
+                        if(len1 == 1)
+                            printf("[%s] byte values are different: [%02x] and [%02x]\n",
+                                    name,uval1[i],uval2[i]);
+                        else
+                            printf("[%s] byte value %d of %ld are different: [%02x] and [%02x]\n",
+                                    name,i,(long)len1,uval1[i],uval2[i]);
+
+                        err1 = GRIB_VALUE_MISMATCH;
+                        break;
+                    }
+                err1 = GRIB_VALUE_MISMATCH;
+            }
+        }
+
+        grib_context_free(h1->context,uval1);
+        grib_context_free(h2->context,uval2);
+
+        if(err1) return err1;
+        if(err2) return err2;
+        break;
+
+    case GRIB_TYPE_LABEL:
+        if (verbose) printf(" as label\n");
+        break;
+
+    default:
+        if (verbose) printf("\n");
+        printInfo(h1);
+        save_error(c,name);
+        printf("Cannot compare [%s], unsupported type %d\n",name,type1);
+        return GRIB_UNABLE_TO_COMPARE_ACCESSORS;
+        break;
+    }
+
+    return GRIB_SUCCESS;
+}
+
+static int compare_all_dump_keys(grib_handle* h1,grib_handle* h2,grib_runtime_options* options,int *err)
+{
+    int ret=0;
+    const char* name=NULL;
+    grib_keys_iterator* iter  = NULL;
+    iter=grib_keys_iterator_new(h1,0,NULL);
+
+    if (!iter) {
+        printf("ERROR: unable to get iterator\n");
+        exit(1);
+    }
+
+    while(grib_keys_iterator_next(iter))
+    {
+        grib_accessor* xa=grib_keys_iterator_get_accessor(iter);
+        name=grib_keys_iterator_get_name(iter);
+        /* printf("----- comparing %s\n",name); */
+
+        if (blacklisted(name)) continue;
+        if (xa==NULL || ( xa->flags & GRIB_ACCESSOR_FLAG_DUMP )==0 ) continue;
+        if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED))  {
+            err++;
+            write_messages(h1,h2);
+            ret=1;
+        }
+    }
+
+    grib_keys_iterator_delete(iter);
+    return ret;
+}
+
+static int compare_handles(grib_handle* h1,grib_handle* h2,grib_runtime_options* options)
+{
+    int err = 0;
+    int i=0;
+    grib_keys_iterator* iter  = NULL;
+    const char* name=NULL;
+
+    /* mask only if no -c option or headerMode (-H)*/
+    if (blacklist && ( !listFromCommandLine || headerMode )) {
+        grib_string_list* nextb=blacklist;
+        while (nextb) {
+            grib_clear(h1,nextb->value);
+            grib_clear(h2,nextb->value);
+            nextb=nextb->next;
+        }
+    }
+
+    if (headerMode) {
+        const void *msg1=NULL,*msg2=NULL;
+        size_t size1=0,size2=0;
+        grib_handle *h11, *h22;
+        GRIB_CHECK_NOLINE(grib_get_message_headers(h1,&msg1,&size1),0);
+        GRIB_CHECK_NOLINE(grib_get_message_headers(h2,&msg2,&size2),0);
+        if (size1==size2 && !memcmp(msg1,msg2,size1))
+            return 0;
+
+        err=0;
+        h11=grib_handle_new_from_partial_message(h1->context,(void*)msg1,size1);
+        h22=grib_handle_new_from_partial_message(h1->context,(void*)msg2,size2);
+
+        iter=grib_keys_iterator_new(h11,
+                GRIB_KEYS_ITERATOR_SKIP_COMPUTED,NULL);
+
+        if (!iter) {
+            printf("ERROR: unable to get iterator\n");
+            exit(1);
+        }
+
+        while(grib_keys_iterator_next(iter))
+        {
+            name=grib_keys_iterator_get_name(iter);
+            /*printf("----- comparing %s\n",name);*/
+
+            if (blacklisted(name)) continue;
+            if(compare_values(options,h11,h22,name,GRIB_TYPE_UNDEFINED))  {
+                err++;
+                write_messages(h11,h22);
+            }
+        }
+
+        grib_keys_iterator_delete(iter);
+        grib_handle_delete(h11);
+        grib_handle_delete(h22);
+        return err;
+    }
+
+    if ( listFromCommandLine && onlyListed ) {
+        for (i=0; i< options->compare_count; i++) {
+            if (blacklisted((char*)options->compare[i].name)) continue;
+            if (options->compare[i].type == GRIB_NAMESPACE) {
+                iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name);
+                if (!iter) {
+                    printf("ERROR: unable to get iterator\n");
+                    exit(1);
+                }
+                while(grib_keys_iterator_next(iter))
+                {
+                    name=grib_keys_iterator_get_name(iter);
+                    /*printf("----- comparing %s\n",name);*/
+
+                    if (blacklisted(name)) continue;
+                    if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED))  {
+                        err++;
+                        write_messages(h1,h2);
+                    }
+                }
+                grib_keys_iterator_delete(iter);
+            } else {
+                if( compare_values(options,h1,h2,options->compare[i].name,options->compare[i].type))
+                    err++;
+                write_messages(h1,h2);
+            }
+        }
+    } else {
+        const void *msg1=NULL,*msg2=NULL;
+        size_t size1=0,size2=0;
+        int memcmp_ret=0;
+        /* int ii=0; */
+        GRIB_CHECK_NOLINE(grib_get_message(h1,&msg1,&size1),0);
+        GRIB_CHECK_NOLINE(grib_get_message(h2,&msg2,&size2),0);
+        if (size1==size2 && !(memcmp_ret=memcmp(msg1,msg2,size1))) {
+            return 0;
+        } 
+#if 0
+        else {
+            int lcount=count,ii;
+            if (options->current_infile) lcount=options->current_infile->filter_handle_count;
+            if (size1 != size2) {
+                printf("#%d different size: %d!=%d\n",lcount,(int)size1,(int)size2);
+            }
+            if (memcmp_ret) {
+                unsigned char *m1=(unsigned char*)msg1;
+                unsigned char *m2=(unsigned char*)msg2;
+                printf("=== list of different bytes for message %d\n",lcount);
+                for (ii=0;ii<size1;ii++) {
+                    if (memcmp(m1,m2,1)) {
+                        printf("  %d 0x%.2X != 0x%.2X\n",ii,*m1,*m2);
+                    }
+                    m1++; m2++;
+                }
+            }
+            return err;
+        }
+#endif
+
+
+        if ( listFromCommandLine ) {
+            for (i=0; i< options->compare_count; i++) {
+                if (blacklisted(name)) continue;
+                if (options->compare[i].type == GRIB_NAMESPACE) {
+                    iter=grib_keys_iterator_new(h1,0,(char*)options->compare[i].name);
+                    if (!iter) {
+                        printf("ERROR: unable to get iterator for %s\n",options->compare[i].name );
+                        exit(1);
+                    }
+                    while(grib_keys_iterator_next(iter))
+                    {
+                        name=grib_keys_iterator_get_name(iter);
+                        /*printf("----- comparing %s\n",name);*/
+
+                        if (blacklisted(name)) continue;
+                        if(compare_values(options,h1,h2,name,GRIB_TYPE_UNDEFINED)) {
+                            err++;
+                            write_messages(h1,h2);
+                            if (compare_all_dump_keys(h1,h2,options,&err)) {
+                                err++;
+                            }
+                        }
+                    }
+                    grib_keys_iterator_delete(iter);
+                } else {
+                    if( compare_values(options,h1,h2,options->compare[i].name,options->compare[i].type)) {
+                        err++;
+                        write_messages(h1,h2);
+                        if (compare_all_dump_keys(h1,h2,options,&err)) {
+                            err++;
+                        }
+                    }
+                }
+            }
+        } else {
+            if (compare_all_dump_keys(h1,h2,options,&err)) {
+                err++;
+            }
+        }
+    }
+    return err;
+}
+
+int grib_no_handle_action(int err)
+{
+  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+  return 0;
+}
diff --git a/tools/metar_copy.c b/tools/metar_copy.c
new file mode 100644
index 0000000..2ab6562
--- /dev/null
+++ b/tools/metar_copy.c
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2005-2016 ECMWF.
+ *
+ * This software is licensed under the terms of the Apache Licence Version 2.0
+ * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
+ * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
+ */
+
+#include "grib_tools.h"
+
+char* grib_tool_description="Copies the content of METAR files printing"
+        " values of some keys.";
+char* grib_tool_name="metar_copy";
+char* grib_tool_usage="[options] file file ... output_file";
+
+grib_option grib_options[]={
+        /*  {id, args, help}, on, command_line, value */
+        {"f",0,0,0,1,0},
+        {"c",0,0,1,0,0},
+        {"q",0,0,1,0,0},
+        {"p:",0,0,1,1,0},
+        {"P:",0,0,0,1,0},
+        {"w:","key[:{s/d/i}]=value,key[:{s/d/i}]=value,...","\n\t\tWhere clause."
+                "\n\t\tOnly grib messages matching the key/value constraints are "
+                "copied to the\n\t\toutput_grib_file.\n\t\tFor each key a string (key:s), a "
+                "double (key:d) or an integer (key:i)\n\t\ttype can be defined. Default type "
+                "is string.\n",0,1,0},
+       {"B:",0,0,0,1,0},
+       {"V",0,0,0,1,0},
+       {"W:",0,0,0,1,0},
+       {"U",0,0,1,0,0},
+       {"H",0,0,1,0,0},
+       {"T:",0,0,1,0,"M"},  /* METAR */
+       {"S",0,0,1,0,0},
+       {"g",0,0,0,1,0},
+       {"7",0,0,0,1,0},
+       {"v",0,0,0,1,0}
+};
+
+int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
+
+int main(int argc, char *argv[])
+{
+    int ret=grib_tool(argc,argv);
+    return ret;
+}
+
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
+}
+
+int grib_tool_init(grib_runtime_options* options)
+{
+#if 0
+    if (options->outfile && options->outfile->name) {
+        options->outfile->file = fopen(options->outfile->name,"w");
+        if(!options->outfile->file) {
+            perror(options->outfile->name);
+            exit(1);
+        }
+    }
+#endif
+    return 0;
+}
+
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
+}
+
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
+}
+
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
+    int err=0;
+    if (!options->skip) {
+        if (options->set_values_count != 0)
+            err=grib_set_values(h,options->set_values,options->set_values_count);
+
+        if( err != GRIB_SUCCESS && options->fail) exit(err);
+    }
+
+    grib_tools_write_message(options,h);
+    return 0;
+}
+
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
+}
+
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
+}
+
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    /*
+  if (options->outfile->file) {
+    fclose(options->outfile->file);
+  }
+     */
+    return 0;
+}
+
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
+}
diff --git a/tools/metar_dump.c b/tools/metar_dump.c
index a19c37b..12d4918 100644
--- a/tools/metar_dump.c
+++ b/tools/metar_dump.c
@@ -11,7 +11,7 @@
 /*
  * C Implementation: grib_dump
  *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
+ * Author: Enrico Fucile
  *
  *
  */
@@ -24,13 +24,11 @@ grib_option grib_options[]={
     {"O",0,"Octet mode. WMO documentation style dump.\n",0,1,0},
     {"D",0,0,0,1,0},
     {"d",0,"Print all data values.\n",0,1,0},
-    {"C",0,0,0,1,0},
     {"t",0,0,0,1,0},
     {"j",0,0,0,1,0},
     {"H",0,0,0,1,0},
     {"a",0,0,0,1,0},
     {"w:",0,0,0,1,0},
-    {"M",0,0,0,1,0},
     {"T:",0,0,1,0,"M"},
     {"7",0,0,0,1,0},
     {"V",0,0,0,1,0},
@@ -38,16 +36,14 @@ grib_option grib_options[]={
     {"x",0,0,0,1,0}
 };
 
-char* grib_tool_description="Dump the content of a grib file in different formats.";
+char* grib_tool_description="Dump the content of a METAR file in different formats.";
 char* grib_tool_name="metar_dump";
 char* grib_tool_usage="[options] file file ...";
 
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
 /**
-*grib_dump
-*Dump the content of a grib file
-*
+* metar_dump
 */
 int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
 
@@ -63,18 +59,10 @@ int grib_tool_init(grib_runtime_options* options) {
 
 
   if (opt > 1) {
-    printf("%s: simultaneous C/O/D options not allowed\n",grib_tool_name);
+    printf("%s: simultaneous O/D options not allowed\n",grib_tool_name);
     exit(1);
   }
 
-  if (grib_options_on("C")) {
-    options->dump_mode = "c_code";
-    if (grib_options_on("d"))
-      options->dump_flags = 0;
-    else
-      options->dump_flags = GRIB_DUMP_FLAG_NO_DATA;
-  }
-
   if  (grib_options_on("O")) {
     options->dump_mode = "wmo";
     options->dump_flags = GRIB_DUMP_FLAG_CODED
diff --git a/tools/metar_filter.c b/tools/metar_filter.c
index 737c470..76c614f 100644
--- a/tools/metar_filter.c
+++ b/tools/metar_filter.c
@@ -8,101 +8,100 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_filter
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
-
 #include "grib_tools.h"
 
-
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value */
-    {"f",0,0,0,1,0},
-    {"f",0,0,1,0,0},
-    {"F",0,0,1,0,0},
-    {"o:",0,0,1,1,"filter.out"},
-    {"q",0,0,1,0,0},
-    {"M",0,0,0,1,0},
-    {"I",0,0,1,0,0},
-    {"V",0,0,0,1,0},
-    {"g",0,0,0,1,0},
-    {"G",0,0,0,1,0},
-    {"T:",0,0,1,0,"M"},
-    {"7",0,0,0,1,0},
-    {"v",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value */
+        {"f",0,0,0,1,0},
+        {"f",0,0,1,0,0},
+        {"F",0,0,1,0,0},
+        {"o:",0,0,1,1,"filter.out"},
+        {"q",0,0,1,0,0},
+        {"I",0,0,1,0,0},
+        {"V",0,0,0,1,0},
+        {"g",0,0,0,1,0},
+        {"T:",0,0,1,0,"M"},
+        {"7",0,0,0,1,0},
+        {"v",0,0,0,1,0}
 };
-char* grib_tool_description="Apply the rules defined in rules_file to each metar "
-   "message\n\tin the files provided as arguments.";
+char* grib_tool_description="Apply the rules defined in rules_file to each METAR "
+        "message\n\tin the files provided as arguments.";
 char* grib_tool_name="metar_filter";
 char* grib_tool_usage="[options] rules_file "
-                      "file file ...";
+        "file file ...";
 int fail=0;
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
-int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
-
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  return 0;
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
 }
 
-int grib_tool_init(grib_runtime_options* options) {
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
+}
 
-  options->action = grib_action_from_filter(options->infile_extra->name);
-  if (!options->action) {
-      fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name);
-      exit(1);
-  }
+int grib_tool_init(grib_runtime_options* options)
+{
+    options->action = grib_action_from_filter(options->infile_extra->name);
+    if (!options->action) {
+        fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name);
+        exit(1);
+    }
 
-  if ( options->outfile && options->outfile->name )
-    options->action->context->outfilename=options->outfile->name;
+    if ( options->outfile && options->outfile->name )
+        options->action->context->outfilename=options->outfile->name;
 
-  return 0;
+    return 0;
 }
 
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
 }  
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
-  int err=0;
-  
-  if (options->current_infile->name) {
-    size_t len=strlen(options->current_infile->name);
-    grib_set_string(h,"file",options->current_infile->name,&len);
-  }
-
-  err=grib_handle_apply_action(h,options->action);
-  if (err != GRIB_SUCCESS && options->fail && err!=GRIB_NOT_FOUND) {
-     printf("ERROR: %s\n",grib_get_error_message(err));
-     exit(err);
-  }
-  return 0;
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
+    int err=0;
+
+    if (options->current_infile->name) {
+        size_t len=strlen(options->current_infile->name);
+        grib_set_string(h,"file",options->current_infile->name,&len);
+    }
+
+    err=grib_handle_apply_action(h,options->action);
+    if (err != GRIB_SUCCESS && options->fail && err!=GRIB_NOT_FOUND) {
+        printf("ERROR: %s\n",grib_get_error_message(err));
+        exit(err);
+    }
+    return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
-  grib_file_pool_clean();
-  return 0;
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    grib_file_pool_clean();
+    return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/metar_get.c b/tools/metar_get.c
index c6b8bb8..4e5afe8 100644
--- a/tools/metar_get.c
+++ b/tools/metar_get.c
@@ -8,42 +8,30 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_get
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
-
 #include "grib_tools.h"
 
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value*/
-    {"f",0,0,0,1,0},
-    {"p:",0,0,0,1,0},
-    {"F:",0,0,1,1,"%g"},
-    {"l:",0,0,0,1,0},
-    {"P:",0,0,0,1,0},
-    {"w:",0,0,0,1,0},
-    {"n:",0,0,1,1,0},
-    {"s:",0,0,0,1,0},
-    {"V",0,0,0,1,0},
-    {"W:",0,0,1,1,"8"},
-    {"m",0,0,0,1,0},
-    {"M",0,0,0,1,0},
-    {"S",0,0,1,0,0},
-    {"g",0,0,0,1,0},
-    {"G",0,0,0,1,0},
-    {"T:",0,0,1,0,"M"},
-    {"7",0,0,0,1,0},
-    {"v",0,0,1,0,0},
-    {"i:",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value*/
+        {"f",0,0,0,1,0},
+        {"p:",0,0,0,1,0},
+        {"F:",0,0,1,1,"%g"},
+        {"P:",0,0,0,1,0},
+        {"w:",0,0,0,1,0},
+        {"n:",0,0,1,1,0},
+        {"s:",0,0,0,1,0},
+        {"V",0,0,0,1,0},
+        {"W:",0,0,1,1,"8"},
+        {"m",0,0,0,1,0},
+        {"M",0,0,0,1,0},
+        {"S",0,0,1,0,0},
+        {"T:",0,0,1,0,"M"}, /* METAR */
+        {"7",0,0,0,1,0},
+        {"v",0,0,1,0,0}
 };
 
-char* grib_tool_description="Get values of some keys from a metar file."
-                 "\n\tIt is similar to metar_ls, but fails returning an error code "
-         "\n\twhen an error occurs (e.g. key not found).";
+char* grib_tool_description="Get values of some keys from a METAR file."
+        "\n\tIt is similar to metar_ls, but fails returning an error code "
+        "\n\twhen an error occurs (e.g. key not found).";
 char* grib_tool_name="metar_get";
 char* grib_tool_usage="[options] file file ...";
 
@@ -51,168 +39,70 @@ int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 double lat=0;
 double lon=0;
 int mode=0;
-grib_nearest* n=NULL;
 
-int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
-
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  options->print_keys_count=-1;
-  return 0;
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
 }
 
-int grib_tool_init(grib_runtime_options* options) {
-  char  *end = NULL, *end1=NULL;
-  size_t size=4;
-  int ret=0;
-  double min=0,max=0;
-  int i=0,idx=0;
-  char* p=NULL;
-  
-  options->print_header=0;
-  options->print_statistics=0;
-  options->default_print_width=-1;
-
-  if (options->latlon) {
-
-    lat = strtod(options->latlon,&end);
-    if (*end != ',') {
-      printf("ERROR: wrong latitude value\n");
-      exit(1);
-    }
-    lon= strtod(++end,&end1);
-    
-    mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID;
-
-    if (end1 && *end1 == ',') {
-      end1++;
-      if (*end1 != '0') {
-        p=end1;
-        while (*p != ',' && *p !='\0') p++;
-        if (*end1 == '4') {
-          options->latlon_mode=4;
-        } else if (*end1 == '1') {
-          options->latlon_mode=1;
-        } else {
-          printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name);
-          exit(1);
-        }
-      }
-      if (*p == ',') {
-        p++;
-        options->latlon_mask=strdup(p);
-      }
-    }
-
-
-  }
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    options->print_keys_count=-1;
+    return 0;
+}
 
-  if (options->latlon && options->latlon_mask) {
-    FILE* f=NULL;
-    grib_handle* hh;
-    f=fopen(options->latlon_mask,"r");
-    if(!f) {
-      perror(options->latlon_mask);
-      exit(1);
-    }
-    hh=grib_handle_new_from_file(0,f,&ret);
-    fclose(f);
-    GRIB_CHECK_NOLINE(ret,0);
-    n=grib_nearest_new(hh,&ret);
-    GRIB_CHECK_NOLINE(ret,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode,
-               options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0);
-    grib_nearest_delete(n);
-    n=NULL;
-    grib_handle_delete( hh);
-
-    options->latlon_idx=-1;
-    max=options->distances[0];
-    for (i=0;i<4;i++)
-      if (max<options->distances[i]) {max=options->distances[i];idx=i;}
-    min=max;
-    for (i=0;i<4;i++) {
-      if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) {
-        options->latlon_idx=i;
-        min = options->distances[i];
-      }
-    }
+int grib_tool_init(grib_runtime_options* options)
+{
+    options->print_header=0;
+    options->print_statistics=0;
+    options->default_print_width=-1;
 
-    if (options->latlon_idx<0){
-      min=0;
-      options->latlon_idx=0;
-      for (i=1;i<4;i++)
-        if (min>options->distances[i]) {
-        min = options->distances[i];
-        options->latlon_idx=i;
-        }
-    }
-  }
-  
-  return 0;
+    return 0;
 }
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
-   }
 
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
+}
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h) {
-  size_t size=4;
-  int err = 0;
+int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h)
+{
+    int err = 0;
+
+    if (!options->skip) {
+        if (options->set_values_count != 0) {
+            err=grib_set_values(h,options->set_values,options->set_values_count);
+        }
 
-  if (!options->skip) {
-	  if (options->set_values_count != 0) {
-		  err=grib_set_values(h,options->set_values,options->set_values_count);
+        if (err != GRIB_SUCCESS && options->fail) exit(err);
     }
 
-	  if (err != GRIB_SUCCESS && options->fail) exit(err);
-  }
-
-  if (options->latlon) {
-	  int err=0;
-	  double min;
-	  int i;
-    if (!n) n=grib_nearest_new(h,&err);
-    GRIB_CHECK_NOLINE(err,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,mode,
-               options->lats,options->lons,options->values,
-               options->distances,options->indexes,&size),0);
-	min=options->distances[0];
-	options->latlon_idx=0;
-	i=0;
-	for (i=1;i<4;i++) {
-		if (min>options->distances[i]) {
-			min=options->distances[i];
-			options->latlon_idx=i;
-		}
-	}
-
-  }
-  
-  return 0;
+    return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
-
-  if (n) grib_nearest_delete(n);
-  
-  return 0;
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/taf_dump.c b/tools/taf_dump.c
index dc70f4a..0038161 100644
--- a/tools/taf_dump.c
+++ b/tools/taf_dump.c
@@ -8,168 +8,158 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_dump
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
-
 #include "grib_tools.h"
 
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value*/
-    {"S",0,0,1,0,0},
-    {"O",0,"Octet mode. WMO documentation style dump.\n",0,1,0},
-    {"D",0,0,0,1,0},
-    {"d",0,"Print all data values.\n",0,1,0},
-    {"C",0,0,0,1,0},
-    {"t",0,0,0,1,0},
-    {"H",0,0,0,1,0},
-    {"a",0,0,0,1,0},
-    {"w:",0,0,0,1,0},
-    {"M",0,0,0,1,0},
-    {"T:",0,0,1,0,"F"},
-    {"7",0,0,0,1,0},
-    {"V",0,0,0,1,0},
-    {"q",0,0,1,0,0},
-    {"x",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value*/
+        {"S",0,0,1,0,0},
+        {"O",0,"Octet mode. WMO documentation style dump.\n",0,1,0},
+        {"D",0,0,0,1,0},
+        {"d",0,"Print all data values.\n",0,1,0},
+        {"C",0,0,0,1,0},
+        {"t",0,0,0,1,0},
+        {"H",0,0,0,1,0},
+        {"a",0,0,0,1,0},
+        {"w:",0,0,0,1,0},
+        {"M",0,0,0,1,0},
+        {"T:",0,0,1,0,"F"},
+        {"7",0,0,0,1,0},
+        {"V",0,0,0,1,0},
+        {"q",0,0,1,0,0},
+        {"x",0,0,0,1,0}
 };
 
-char* grib_tool_description="Dump the content of a grib file in different formats.";
+char* grib_tool_description="Dump the content of a TAF file in different formats.";
 char* grib_tool_name="taf_dump";
 char* grib_tool_usage="[options] file file ...";
 
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
-/**
-*grib_dump
-*Dump the content of a grib file
-*
-*/
-int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
+}
 
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  return 0;
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
 }
 
-int grib_tool_init(grib_runtime_options* options) {
+int grib_tool_init(grib_runtime_options* options)
+{
+
+    int opt=grib_options_on("C")+grib_options_on("O")+grib_options_on("D");
 
-  int opt=grib_options_on("C")+grib_options_on("O")+grib_options_on("D");
+    options->dump_mode = "default";
 
-  options->dump_mode = "default";
 
+    if (opt > 1) {
+        printf("%s: simultaneous C/O/D options not allowed\n",grib_tool_name);
+        exit(1);
+    }
 
-  if (opt > 1) {
-    printf("%s: simultaneous C/O/D options not allowed\n",grib_tool_name);
-    exit(1);
-  }
+    if  (grib_options_on("O")) {
+        options->dump_mode = "wmo";
+        options->dump_flags = GRIB_DUMP_FLAG_CODED
+                | GRIB_DUMP_FLAG_OCTECT
+                | GRIB_DUMP_FLAG_VALUES
+                | GRIB_DUMP_FLAG_READ_ONLY;
+    }
+
+    if (grib_options_on("D")) {
+        options->dump_mode = "debug";
+        options->dump_flags = GRIB_DUMP_FLAG_VALUES
+                |  GRIB_DUMP_FLAG_READ_ONLY;
+    }
+
+    if (grib_options_on("J")) {
+        options->dump_mode = "json";
+        options->dump_flags = GRIB_DUMP_FLAG_VALUES
+                |  GRIB_DUMP_FLAG_READ_ONLY;
+    }
+
+    if (grib_options_on("X")) {
+        options->dump_mode = "xml";
+        options->dump_flags = GRIB_DUMP_FLAG_VALUES
+                |  GRIB_DUMP_FLAG_READ_ONLY;
+    }
+
+    if (grib_options_on("a"))
+        options->dump_flags |= GRIB_DUMP_FLAG_ALIASES;
+
+    if (grib_options_on("t"))
+        options->dump_flags |= GRIB_DUMP_FLAG_TYPE;
+
+    if (grib_options_on("H"))
+        options->dump_flags |= GRIB_DUMP_FLAG_HEXADECIMAL;
 
-  if (grib_options_on("C")) {
-    options->dump_mode = "c_code";
     if (grib_options_on("d"))
-      options->dump_flags = 0;
-    else
-      options->dump_flags = GRIB_DUMP_FLAG_NO_DATA;
-  }
-
-  if  (grib_options_on("O")) {
-    options->dump_mode = "wmo";
-    options->dump_flags = GRIB_DUMP_FLAG_CODED
-               | GRIB_DUMP_FLAG_OCTECT
-               | GRIB_DUMP_FLAG_VALUES
-               | GRIB_DUMP_FLAG_READ_ONLY;
-  }
-
-  if (grib_options_on("D")) {
-    options->dump_mode = "debug";
-    options->dump_flags = GRIB_DUMP_FLAG_VALUES
-               |  GRIB_DUMP_FLAG_READ_ONLY;
-  }
-
-  if (grib_options_on("J")) {
-    options->dump_mode = "json";
-    options->dump_flags = GRIB_DUMP_FLAG_VALUES
-               |  GRIB_DUMP_FLAG_READ_ONLY;
-  }
-
-  if (grib_options_on("X")) {
-    options->dump_mode = "xml";
-    options->dump_flags = GRIB_DUMP_FLAG_VALUES
-               |  GRIB_DUMP_FLAG_READ_ONLY;
-  }
-
-  if (grib_options_on("a"))
-      options->dump_flags |= GRIB_DUMP_FLAG_ALIASES;
-
-  if (grib_options_on("t"))
-      options->dump_flags |= GRIB_DUMP_FLAG_TYPE;
-
-  if (grib_options_on("H"))
-      options->dump_flags |= GRIB_DUMP_FLAG_HEXADECIMAL;
-
-  if (grib_options_on("d"))
-      options->dump_flags |= GRIB_DUMP_FLAG_ALL_DATA;
-
-  return 0;
-}
+        options->dump_flags |= GRIB_DUMP_FLAG_ALL_DATA;
 
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
+    return 0;
 }
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-  char tmp[1024];
-  if (!options->current_infile->name) return 0;
-  sprintf(tmp,"FILE: %s ",options->current_infile->name);
-  if (!grib_options_on("C") && !grib_options_on("J") && !grib_options_on("X") )
-    fprintf(stdout,"***** %s\n",tmp);
-   return 0;
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
-  long length=0;
-  char tmp[1024];
-  char identifier[100];
-  size_t idlen=100;
-  int i;
-  if (grib_get_long(h,"totalLength",&length) != GRIB_SUCCESS) 
-  	length=-9999;
-
-  for (i=0;i<options->print_keys_count;i++)
-    grib_set_flag(h,options->print_keys[i].name,GRIB_ACCESSOR_FLAG_DUMP);
-
-  sprintf(tmp,"MESSAGE %d ( length=%ld )",options->handle_count,length);
-  if (!grib_options_on("C") && !grib_options_on("X") && !grib_options_on("J") )
-    fprintf(stdout,"#==============   %-38s   ==============\n",tmp);
-  if (!strcmp(options->dump_mode,"default")) {
-    GRIB_CHECK_NOLINE(grib_get_string(h,"identifier",identifier,&idlen),0);
-    printf("%s {\n",identifier);
-  }
-
-  grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0);
-
-  if (!strcmp(options->dump_mode,"default"))
-    printf("}\n");
-  return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    char tmp[1024];
+    if (!options->current_infile->name) return 0;
+    sprintf(tmp,"FILE: %s ",options->current_infile->name);
+    if (!grib_options_on("C") && !grib_options_on("J") && !grib_options_on("X") )
+        fprintf(stdout,"***** %s\n",tmp);
+    return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
+    long length=0;
+    char tmp[1024];
+    char identifier[100];
+    size_t idlen=100;
+    int i;
+    if (grib_get_long(h,"totalLength",&length) != GRIB_SUCCESS)
+        length=-9999;
+
+    for (i=0;i<options->print_keys_count;i++)
+        grib_set_flag(h,options->print_keys[i].name,GRIB_ACCESSOR_FLAG_DUMP);
+
+    sprintf(tmp,"MESSAGE %d ( length=%ld )",options->handle_count,length);
+    if (!grib_options_on("C") && !grib_options_on("X") && !grib_options_on("J") )
+        fprintf(stdout,"#==============   %-38s   ==============\n",tmp);
+    if (!strcmp(options->dump_mode,"default")) {
+        GRIB_CHECK_NOLINE(grib_get_string(h,"identifier",identifier,&idlen),0);
+        printf("%s {\n",identifier);
+    }
+
+    grib_dump_content(h,stdout,options->dump_mode,options->dump_flags,0);
+
+    if (!strcmp(options->dump_mode,"default"))
+        printf("}\n");
+    return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
-  return 0;
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    return 0;
 }
 
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
+}
diff --git a/tools/taf_filter.c b/tools/taf_filter.c
index 0a240bd..39c1773 100644
--- a/tools/taf_filter.c
+++ b/tools/taf_filter.c
@@ -8,101 +8,102 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_filter
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
-
 #include "grib_tools.h"
 
-
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value */
-    {"f",0,0,0,1,0},
-    {"f",0,0,1,0,0},
-    {"F",0,0,1,0,0},
-    {"o:",0,0,1,1,"filter.out"},
-    {"q",0,0,1,0,0},
-    {"M",0,0,0,1,0},
-    {"I",0,0,1,0,0},
-    {"V",0,0,0,1,0},
-    {"g",0,0,0,1,0},
-    {"G",0,0,0,1,0},
-    {"T:",0,0,1,0,"F"},
-    {"7",0,0,0,1,0},
-    {"v",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value */
+        {"f",0,0,0,1,0},
+        {"f",0,0,1,0,0},
+        {"F",0,0,1,0,0},
+        {"o:",0,0,1,1,"filter.out"},
+        {"q",0,0,1,0,0},
+        {"M",0,0,0,1,0},
+        {"I",0,0,1,0,0},
+        {"V",0,0,0,1,0},
+        {"g",0,0,0,1,0},
+        {"G",0,0,0,1,0},
+        {"T:",0,0,1,0,"F"},
+        {"7",0,0,0,1,0},
+        {"v",0,0,0,1,0}
 };
-char* grib_tool_description="Apply the rules defined in rules_file to each taf "
-   "message\n\tin the files provided as arguments.";
+char* grib_tool_description="Apply the rules defined in rules_file to each TAF "
+        "message\n\tin the files provided as arguments.";
 char* grib_tool_name="taf_filter";
 char* grib_tool_usage="[options] rules_file "
-                      "file file ...";
+        "file file ...";
 int fail=0;
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
-int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
-
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  return 0;
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
 }
 
-int grib_tool_init(grib_runtime_options* options) {
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
+}
 
-  options->action = grib_action_from_filter(options->infile_extra->name);
-  if (!options->action) {
-      fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name);
-      exit(1);
-  }
+int grib_tool_init(grib_runtime_options* options)
+{
+    options->action = grib_action_from_filter(options->infile_extra->name);
+    if (!options->action) {
+        fprintf(stderr,"%s: error unable to create action\n",options->infile_extra->name);
+        exit(1);
+    }
 
-  if ( options->outfile && options->outfile->name )
-    options->action->context->outfilename=options->outfile->name;
+    if ( options->outfile && options->outfile->name )
+        options->action->context->outfilename=options->outfile->name;
 
-  return 0;
+    return 0;
 }
 
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
 }  
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
-  int err=0;
-  
-  if (options->current_infile->name) {
-    size_t len=strlen(options->current_infile->name);
-    grib_set_string(h,"file",options->current_infile->name,&len);
-  }
-
-  err=grib_handle_apply_action(h,options->action);
-  if (err != GRIB_SUCCESS && options->fail && err!=GRIB_NOT_FOUND) {
-     printf("ERROR: %s\n",grib_get_error_message(err));
-     exit(err);
-  }
-  return 0;
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
+    int err=0;
+
+    if (options->current_infile->name) {
+        size_t len=strlen(options->current_infile->name);
+        grib_set_string(h,"file",options->current_infile->name,&len);
+    }
+
+    err=grib_handle_apply_action(h,options->action);
+    if (err != GRIB_SUCCESS && options->fail && err!=GRIB_NOT_FOUND) {
+        printf("ERROR: %s\n",grib_get_error_message(err));
+        exit(err);
+    }
+    return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
-  grib_file_pool_clean();
-  return 0;
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    grib_file_pool_clean();
+    return 0;
 }
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
 }
-
diff --git a/tools/taf_get.c b/tools/taf_get.c
index 47a01b5..d9b738a 100644
--- a/tools/taf_get.c
+++ b/tools/taf_get.c
@@ -8,42 +8,34 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_get
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
-
 #include "grib_tools.h"
 
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value*/
-    {"f",0,0,0,1,0},
-    {"p:",0,0,0,1,0},
-    {"F:",0,0,1,1,"%g"},
-    {"l:",0,0,0,1,0},
-    {"P:",0,0,0,1,0},
-    {"w:",0,0,0,1,0},
-    {"n:",0,0,1,1,0},
-    {"s:",0,0,0,1,0},
-    {"V",0,0,0,1,0},
-    {"W:",0,0,1,1,"8"},
-    {"m",0,0,0,1,0},
-    {"M",0,0,0,1,0},
-    {"S",0,0,1,0,0},
-    {"g",0,0,0,1,0},
-    {"G",0,0,0,1,0},
-    {"T:",0,0,1,0,"F"},
-    {"7",0,0,0,1,0},
-    {"v",0,0,1,0,0},
-    {"i:",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value*/
+        {"f",0,0,0,1,0},
+        {"p:",0,0,0,1,0},
+        {"F:",0,0,1,1,"%g"},
+        {"l:",0,0,0,1,0},
+        {"P:",0,0,0,1,0},
+        {"w:",0,0,0,1,0},
+        {"n:",0,0,1,1,0},
+        {"s:",0,0,0,1,0},
+        {"V",0,0,0,1,0},
+        {"W:",0,0,1,1,"8"},
+        {"m",0,0,0,1,0},
+        {"M",0,0,0,1,0},
+        {"S",0,0,1,0,0},
+        {"g",0,0,0,1,0},
+        {"G",0,0,0,1,0},
+        {"T:",0,0,1,0,"F"},
+        {"7",0,0,0,1,0},
+        {"v",0,0,1,0,0},
+        {"i:",0,0,0,1,0}
 };
 
-char* grib_tool_description="Get values of some keys from a taf file."
-                 "\n\tIt is similar to taf_ls, but fails returning an error code "
-         "\n\twhen an error occurs (e.g. key not found).";
+char* grib_tool_description="Get values of some keys from a TAF file."
+        "\n\tIt is similar to taf_ls, but fails returning an error code "
+        "\n\twhen an error occurs (e.g. key not found).";
 char* grib_tool_name="taf_get";
 char* grib_tool_usage="[options] file file ...";
 
@@ -55,164 +47,173 @@ grib_nearest* n=NULL;
 
 int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
 
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  options->print_keys_count=-1;
-  return 0;
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    options->print_keys_count=-1;
+    return 0;
 }
 
-int grib_tool_init(grib_runtime_options* options) {
-  char  *end = NULL, *end1=NULL;
-  size_t size=4;
-  int ret=0;
-  double min=0,max=0;
-  int i=0,idx=0;
-  char* p=NULL;
-  
-  options->print_header=0;
-  options->print_statistics=0;
-  options->default_print_width=-1;
-
-  if (options->latlon) {
-
-    lat = strtod(options->latlon,&end);
-    if (*end != ',') {
-      printf("ERROR: wrong latitude value\n");
-      exit(1);
-    }
-    lon= strtod(++end,&end1);
-    
-    mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID;
-
-    if (end1 && *end1 == ',') {
-      end1++;
-      if (*end1 != '0') {
-        p=end1;
-        while (*p != ',' && *p !='\0') p++;
-        if (*end1 == '4') {
-          options->latlon_mode=4;
-        } else if (*end1 == '1') {
-          options->latlon_mode=1;
-        } else {
-          printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name);
-          exit(1);
+int grib_tool_init(grib_runtime_options* options)
+{
+    char  *end = NULL, *end1=NULL;
+    size_t size=4;
+    int ret=0;
+    double min=0,max=0;
+    int i=0;
+    char* p=NULL;
+
+    options->print_header=0;
+    options->print_statistics=0;
+    options->default_print_width=-1;
+
+    if (options->latlon) {
+
+        lat = strtod(options->latlon,&end);
+        if (*end != ',') {
+            printf("ERROR: wrong latitude value\n");
+            exit(1);
+        }
+        lon= strtod(++end,&end1);
+
+        mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID;
+
+        if (end1 && *end1 == ',') {
+            end1++;
+            if (*end1 != '0') {
+                p=end1;
+                while (*p != ',' && *p !='\0') p++;
+                if (*end1 == '4') {
+                    options->latlon_mode=4;
+                } else if (*end1 == '1') {
+                    options->latlon_mode=1;
+                } else {
+                    printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name);
+                    exit(1);
+                }
+            }
+            if (*p == ',') {
+                p++;
+                options->latlon_mask=strdup(p);
+            }
         }
-      }
-      if (*p == ',') {
-        p++;
-        options->latlon_mask=strdup(p);
-      }
-    }
-
 
-  }
 
-  if (options->latlon && options->latlon_mask) {
-    FILE* f=NULL;
-    grib_handle* hh;
-    f=fopen(options->latlon_mask,"r");
-    if(!f) {
-      perror(options->latlon_mask);
-      exit(1);
-    }
-    hh=grib_handle_new_from_file(0,f,&ret);
-    fclose(f);
-    GRIB_CHECK_NOLINE(ret,0);
-    n=grib_nearest_new(hh,&ret);
-    GRIB_CHECK_NOLINE(ret,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode,
-               options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0);
-    grib_nearest_delete(n);
-    n=NULL;
-    grib_handle_delete( hh);
-
-    options->latlon_idx=-1;
-    max=options->distances[0];
-    for (i=0;i<4;i++)
-      if (max<options->distances[i]) {max=options->distances[i];idx=i;}
-    min=max;
-    for (i=0;i<4;i++) {
-      if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) {
-        options->latlon_idx=i;
-        min = options->distances[i];
-      }
     }
 
-    if (options->latlon_idx<0){
-      min=0;
-      options->latlon_idx=0;
-      for (i=1;i<4;i++)
-        if (min>options->distances[i]) {
-        min = options->distances[i];
-        options->latlon_idx=i;
+    if (options->latlon && options->latlon_mask) {
+        FILE* f=NULL;
+        grib_handle* hh;
+        f=fopen(options->latlon_mask,"r");
+        if(!f) {
+            perror(options->latlon_mask);
+            exit(1);
+        }
+        hh=grib_handle_new_from_file(0,f,&ret);
+        fclose(f);
+        GRIB_CHECK_NOLINE(ret,0);
+        n=grib_nearest_new(hh,&ret);
+        GRIB_CHECK_NOLINE(ret,0);
+        GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode,
+                options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0);
+        grib_nearest_delete(n);
+        n=NULL;
+        grib_handle_delete( hh);
+
+        options->latlon_idx=-1;
+        max=options->distances[0];
+        for (i=0;i<4;i++)
+            if (max<options->distances[i]) {max=options->distances[i];}
+        min=max;
+        for (i=0;i<4;i++) {
+            if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) {
+                options->latlon_idx=i;
+                min = options->distances[i];
+            }
+        }
+
+        if (options->latlon_idx<0){
+            min=0;
+            options->latlon_idx=0;
+            for (i=1;i<4;i++)
+                if (min>options->distances[i]) {
+                    min = options->distances[i];
+                    options->latlon_idx=i;
+                }
         }
     }
-  }
-  
-  return 0;
+
+    return 0;
+}
+
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
 }
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
-   }
 
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
-int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h) {
-  size_t size=4;
-  int err = 0;
+int grib_tool_new_handle_action(grib_runtime_options* options,grib_handle* h)
+{
+    size_t size=4;
+    int err = 0;
+
+    if (!options->skip) {
+        if (options->set_values_count != 0) {
+            err=grib_set_values(h,options->set_values,options->set_values_count);
+        }
+
+        if (err != GRIB_SUCCESS && options->fail) exit(err);
+    }
+
+    if (options->latlon) {
+        int err=0;
+        double min;
+        int i;
+        if (!n) n=grib_nearest_new(h,&err);
+        GRIB_CHECK_NOLINE(err,0);
+        GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,mode,
+                options->lats,options->lons,options->values,
+                options->distances,options->indexes,&size),0);
+        min=options->distances[0];
+        options->latlon_idx=0;
+        i=0;
+        for (i=1;i<4;i++) {
+            if (min>options->distances[i]) {
+                min=options->distances[i];
+                options->latlon_idx=i;
+            }
+        }
 
-  if (!options->skip) {
-	  if (options->set_values_count != 0) {
-		  err=grib_set_values(h,options->set_values,options->set_values_count);
     }
 
-	  if (err != GRIB_SUCCESS && options->fail) exit(err);
-  }
-
-  if (options->latlon) {
-	  int err=0;
-	  double min;
-	  int i;
-    if (!n) n=grib_nearest_new(h,&err);
-    GRIB_CHECK_NOLINE(err,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,mode,
-               options->lats,options->lons,options->values,
-               options->distances,options->indexes,&size),0);
-	min=options->distances[0];
-	options->latlon_idx=0;
-	i=0;
-	for (i=1;i<4;i++) {
-		if (min>options->distances[i]) {
-			min=options->distances[i];
-			options->latlon_idx=i;
-		}
-	}
-
-  }
-  
-  return 0;
+    return 0;
 }
 
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
-int grib_tool_finalise_action(grib_runtime_options* options) {
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
 
-  if (n) grib_nearest_delete(n);
-  
-  return 0;
-}
+    if (n) grib_nearest_delete(n);
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+    return 0;
 }
 
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
+}
diff --git a/tools/taf_ls.c b/tools/taf_ls.c
index d6eb376..f64bb8f 100644
--- a/tools/taf_ls.c
+++ b/tools/taf_ls.c
@@ -8,44 +8,37 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 
-/*
- * C Implementation: grib_ls
- *
- * Author: Enrico Fucile <enrico.fucile at ecmwf.int>
- *
- *
- */
 #include "grib_tools.h"
 
 grib_option grib_options[]={
-/*  {id, args, help}, on, command_line, value*/
-    {"f",0,0,1,0,0},
-    {"p:",0,0,0,1,0},
-    {"F:",0,0,1,1,"%g"},
-    {"P:",0,0,0,1,0},
-    {"w:",0,0,0,1,0},
-	{"j",0,"json output\n",0,1,0},
-    {"B:",0,0,0,1,0},
-    {"l:",0,0,0,1,0},
-	{"s:",0,0,0,1,0},
-    {"i:",0,0,0,1,0},
-    {"n:",0,0,1,1,"ls"},
-    {"m",0,0,0,1,0},
-    {"V",0,0,0,1,0},
-    {"W:",0,0,1,1,"10"},
-    {"S",0,0,1,0,0},
-    {"M",0,0,0,1,0},
-    {"H",0,0,1,0,0},
-    {"g",0,0,0,1,0},
-    {"P",0,0,1,0,0},
-    {"T:",0,0,1,0,"F"},
-    {"7",0,0,0,1,0},
-    {"v",0,0,1,0,0},
-    {"x",0,0,0,1,0}
+        /*  {id, args, help}, on, command_line, value*/
+        {"f",0,0,1,0,0},
+        {"p:",0,0,0,1,0},
+        {"F:",0,0,1,1,"%g"},
+        {"P:",0,0,0,1,0},
+        {"w:",0,0,0,1,0},
+        {"j",0,"json output\n",0,1,0},
+        {"B:",0,0,0,1,0},
+        {"l:",0,0,0,1,0},
+        {"s:",0,0,0,1,0},
+        {"i:",0,0,0,1,0},
+        {"n:",0,0,1,1,"ls"},
+        {"m",0,0,0,1,0},
+        {"V",0,0,0,1,0},
+        {"W:",0,0,1,1,"10"},
+        {"S",0,0,1,0,0},
+        {"M",0,0,0,1,0},
+        {"H",0,0,1,0,0},
+        {"g",0,0,0,1,0},
+        {"P",0,0,1,0,0},
+        {"T:",0,0,1,0,"F"},
+        {"7",0,0,0,1,0},
+        {"v",0,0,1,0,0},
+        {"x",0,0,0,1,0}
 };
 
-char* grib_tool_description="List content of taf files printing values of "
-                  "some keys.\n\tIt does not fail when a key is not found.";
+char* grib_tool_description="List content of TAF files printing values of "
+        "some keys.\n\tIt does not fail when a key is not found.";
 char* grib_tool_name="taf_ls";
 char* grib_tool_usage="[options] file file ...";
 static char* new_handle="";
@@ -56,301 +49,228 @@ double lon=0;
 int mode=0;
 static int json=0;
 
-grib_nearest* n=NULL;
-/*double *outlats,*outlons,*values,*lsm_values,*distances;*/
-
-int main(int argc, char *argv[]) { return grib_tool(argc,argv);}
+int main(int argc, char *argv[])
+{
+    return grib_tool(argc,argv);
+}
 
 /*
-This is executed before processing the options with i
-getopt and therfore it is the right place for hacking 
+This is executed before processing the options with
+getopt and therefore it is the right place for hacking
 the arguments if needed
-*/
-int grib_tool_before_getopt(grib_runtime_options* options) {
-  return 0;
+ */
+int grib_tool_before_getopt(grib_runtime_options* options)
+{
+    return 0;
 }
 
 /*
 The options have been parsed and the structure 
 grib_runtime_options* options has been loaded. 
-Initialization and startup can be done here
-*/
-int grib_tool_init(grib_runtime_options* options) {
-  char  *end = NULL, *end1=NULL;
-  size_t size=4;
-  int ret=0;
-  double min=0,max=0;
-  int i=0,idx=0;
-  char* p=NULL;
-  if (grib_options_on("j")) {
-	options->verbose=0;
-	json=1;
-  }
-  
-  if (options->latlon) {
-	  
-    lat = strtod(options->latlon,&end);
-    if (*end != ',') {
-      printf("ERROR: wrong latitude value\n");
-      exit(1);
-    }
-    lon= strtod(++end,&end1);
-    
-    mode=GRIB_NEAREST_SAME_POINT | GRIB_NEAREST_SAME_GRID;
-
-    if (end1 && *end1 == ',') {
-      end1++;
-      if (*end1 != '0') {
-        p=end1;
-        while (*p != ',' && *p !='\0') p++;
-        if (*end1 == '4') {
-            options->latlon_mode=4;
-        } else if (*end1 == '1') {
-            options->latlon_mode=1;
-        } else {
-          printf("ERROR %s: wrong mode given in option -l\n",grib_tool_name);
-          exit(1);
-        }
-      }
-      if (*p == ',') {
-        p++;
-        options->latlon_mask=strdup(p);
-      }
-    }
-
-  }
-
-  if (options->latlon && options->latlon_mask) {
-    FILE* f=NULL;
-    grib_handle* hh;
-    f=fopen(options->latlon_mask,"r");
-    if(!f) {
-      perror(options->latlon_mask);
-      exit(1);
-    }
-    hh=grib_handle_new_from_file(0,f,&ret);
-    fclose(f);
-    GRIB_CHECK_NOLINE(ret,0);
-    n=grib_nearest_new(hh,&ret);
-    GRIB_CHECK_NOLINE(ret,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,hh,lat,lon,mode,
-        options->lats,options->lons,options->mask_values,options->distances,options->indexes,&size),0);
-    grib_nearest_delete(n);
-    n=NULL;
-    grib_handle_delete( hh);
-
-    options->latlon_idx=-1;
-    max=options->distances[0];
-    for (i=0;i<4;i++)
-      if (max<options->distances[i]) {max=options->distances[i];idx=i;}
-    min=max;
-    for (i=0;i<4;i++) {
-      if ((min >= options->distances[i]) && (options->mask_values[i] >= 0.5)) {
-        options->latlon_idx=i;
-        min = options->distances[i];
-      }
-    }
-
-    if (options->latlon_idx<0){
-      min=0;
-      options->latlon_idx=0;
-      for (i=1;i<4;i++)
-        if (min>options->distances[i]) {
-          min = options->distances[i];
-          options->latlon_idx=i;
-        }
+Initialisation and startup can be done here
+ */
+int grib_tool_init(grib_runtime_options* options)
+{
+    if (grib_options_on("j")) {
+        options->verbose=0;
+        json=1;
     }
-  }
-  if (json) printf("[\n");
+    if (json) printf("[\n");
 
-  return 0;
+    return 0;
 }
 
 /*
 A new file is being parsed. The file name is file. This function is called every time
 a new input file name is processed, before opening the file.
-*/
-int grib_tool_new_filename_action(grib_runtime_options* options,const char* file) {
-   return 0;
-   }
-
+ */
+int grib_tool_new_filename_action(grib_runtime_options* options,const char* file)
+{
+    return 0;
+}
 
-int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file) {
-   return 0;
+int grib_tool_new_file_action(grib_runtime_options* options,grib_tools_file* file)
+{
+    return 0;
 }
 
-static void print_key_values(grib_runtime_options* options,grib_handle* h) {
-	int i;
-	int ret=0;
-	char* s="\"keys\" : {";
-	double dvalue=0;
-	long lvalue=0;
-	char value[MAX_STRING_LEN];
-	size_t len=MAX_STRING_LEN;
-	for (i=0;i<options->print_keys_count;i++) {
-		ret=GRIB_SUCCESS;
-		printf("%s",s);
-		len=MAX_STRING_LEN;
-		printf("\"%s\" : ",options->print_keys[i].name);
-		if (grib_is_missing(h,options->print_keys[i].name,&ret) && ret==GRIB_SUCCESS)
-			printf("\"missing\"");
-		else if ( ret == GRIB_SUCCESS ) {
-			if (options->print_keys[i].type == GRIB_TYPE_UNDEFINED)
-				grib_get_native_type(h,options->print_keys[i].name,&(options->print_keys[i].type));
-			switch (options->print_keys[i].type) {
-				case GRIB_TYPE_STRING:
-					ret=grib_get_string( h,options->print_keys[i].name,value,&len);
-					printf("\"%s\"",value);
-					break;
-				case GRIB_TYPE_DOUBLE:
-					ret=grib_get_double( h,options->print_keys[i].name,&dvalue);
-					printf("%g",dvalue);
-					break;
-				case GRIB_TYPE_LONG:
-					ret=grib_get_long( h,options->print_keys[i].name,&lvalue);
-					printf("%ld",lvalue);
-					break;
-				default:
-					printf("invalid_type");
-			}
-		}
-		if (ret == GRIB_NOT_FOUND) printf("null");
-		s=", ";
-	}
-	printf("}");
+static void print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    int i;
+    int ret=0;
+    char* s="\"keys\" : {";
+    double dvalue=0;
+    long lvalue=0;
+    char value[MAX_STRING_LEN];
+    size_t len=MAX_STRING_LEN;
+    for (i=0;i<options->print_keys_count;i++) {
+        ret=GRIB_SUCCESS;
+        printf("%s",s);
+        len=MAX_STRING_LEN;
+        printf("\"%s\" : ",options->print_keys[i].name);
+        if (grib_is_missing(h,options->print_keys[i].name,&ret) && ret==GRIB_SUCCESS)
+            printf("\"missing\"");
+        else if ( ret == GRIB_SUCCESS ) {
+            if (options->print_keys[i].type == GRIB_TYPE_UNDEFINED)
+                grib_get_native_type(h,options->print_keys[i].name,&(options->print_keys[i].type));
+            switch (options->print_keys[i].type) {
+            case GRIB_TYPE_STRING:
+                ret=grib_get_string( h,options->print_keys[i].name,value,&len);
+                printf("\"%s\"",value);
+                break;
+            case GRIB_TYPE_DOUBLE:
+                ret=grib_get_double( h,options->print_keys[i].name,&dvalue);
+                printf("%g",dvalue);
+                break;
+            case GRIB_TYPE_LONG:
+                ret=grib_get_long( h,options->print_keys[i].name,&lvalue);
+                printf("%ld",lvalue);
+                break;
+            default:
+                printf("invalid_type");
+            }
+        }
+        if (ret == GRIB_NOT_FOUND) printf("null");
+        s=", ";
+    }
+    printf("}");
 }
 
 /* A new handle is available from the current input file and can be processed here.
-The handle available in this function is in the set of messages satisfying the constrant of the
+The handle available in this function is in the set of messages satisfying the constraint of the
 -w option. They are not to be skipped.
-*/
-int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h) {
-  size_t size=4;
-  double v=0;
-  int err=0;
-  int i;
-  
-  if (!options->skip) {
+ */
+int grib_tool_new_handle_action(grib_runtime_options* options, grib_handle* h)
+{
+    size_t size=4;
+    double v=0;
+    int err=0;
+    int i;
 
-	  if (options->set_values_count != 0)
-		  err=grib_set_values(h,options->set_values,options->set_values_count);
+    if (!options->skip) {
 
-	  if( err != GRIB_SUCCESS && options->fail) exit(err);
-  }
-  
-  if (options->latlon) {
-    int err=0;
-	double min;
-    if (!n) n=grib_nearest_new(h,&err);
-    GRIB_CHECK_NOLINE(err,0);
-    GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,0,
-        options->lats,options->lons,options->values,
-        options->distances,options->indexes,&size),0);
+        if (options->set_values_count != 0)
+            err=grib_set_values(h,options->set_values,options->set_values_count);
 
-	if (!options->latlon_mask) {
-		min=options->distances[0];
-		options->latlon_idx=0;
-		i=0;
-		for (i=1;i<4;i++) {
-			if (min>options->distances[i]) {
-					min=options->distances[i];
-					options->latlon_idx=i;
-			}
-		}
-	}
-	
-	if (json) {
-		char* s="\n[\n";
-		double missingValue=9999;
-		char value[MAX_STRING_LEN];
-		size_t len=MAX_STRING_LEN;
-		printf("%s",new_handle);
-		printf(	"{\n");
-		print_key_values(options,h);
-		printf("\n, \"selected\" : %d",options->latlon_idx);
-		printf(", \"method\" : ");
-		if (options->latlon_mask) printf("\"nearest_land\"");
-		else printf("\"nearest\"");
-		printf("\n, \"neighbours\" : ");
-		for (i=0;i<4;i++) {
-			printf("%s",s);
-			len=MAX_STRING_LEN;
-			printf("{\"index\" : %d, \"latitude\" : %g, \"longitude\" : %g, \"distance\" : %g, "
-				   "\"distance_unit\" : \"km\", ",
-	   				(int)options->indexes[i],options->lats[i],options->lons[i],
-					options->distances[i]);
-			if (grib_get_double_element(h,"values",options->indexes[i],&v) == GRIB_SUCCESS) {
-				if (v==missingValue) printf("\"value\" : null ");
-				else printf("\"value\" : %g ",v);
-			}
+        if( err != GRIB_SUCCESS && options->fail) exit(err);
+    }
 
-			if (grib_get_string( h,"units",value,&len)==GRIB_SUCCESS)
-				printf(", \"unit\" : \"%s\"",value);
-			
-			if (options->latlon_mask) 
-				printf(", \"mask_value\"=%.2f",options->mask_values[i]);
-			printf("}");
-			s="\n,";
-		}
+    if (options->latlon) {
+        int err=0;
+        double min;
+        if (!n) n=grib_nearest_new(h,&err);
+        GRIB_CHECK_NOLINE(err,0);
+        GRIB_CHECK_NOLINE(grib_nearest_find(n,h,lat,lon,0,
+                options->lats,options->lons,options->values,
+                options->distances,options->indexes,&size),0);
+
+        if (!options->latlon_mask) {
+            min=options->distances[0];
+            options->latlon_idx=0;
+            i=0;
+            for (i=1;i<4;i++) {
+                if (min>options->distances[i]) {
+                    min=options->distances[i];
+                    options->latlon_idx=i;
+                }
+            }
+        }
 
-		printf("\n]");
-		printf("\n}");
-	}
+        if (json) {
+            char* s="\n[\n";
+            double missingValue=9999;
+            char value[MAX_STRING_LEN];
+            size_t len=MAX_STRING_LEN;
+            printf("%s",new_handle);
+            printf(	"{\n");
+            print_key_values(options,h);
+            printf("\n, \"selected\" : %d",options->latlon_idx);
+            printf(", \"method\" : ");
+            if (options->latlon_mask) printf("\"nearest_land\"");
+            else printf("\"nearest\"");
+            printf("\n, \"neighbours\" : ");
+            for (i=0;i<4;i++) {
+                printf("%s",s);
+                len=MAX_STRING_LEN;
+                printf("{\"index\" : %d, \"latitude\" : %g, \"longitude\" : %g, \"distance\" : %g, "
+                        "\"distance_unit\" : \"km\", ",
+                        (int)options->indexes[i],options->lats[i],options->lons[i],
+                        options->distances[i]);
+                if (grib_get_double_element(h,"values",options->indexes[i],&v) == GRIB_SUCCESS) {
+                    if (v==missingValue) printf("\"value\" : null ");
+                    else printf("\"value\" : %g ",v);
+                }
+
+                if (grib_get_string( h,"units",value,&len)==GRIB_SUCCESS)
+                    printf(", \"unit\" : \"%s\"",value);
+
+                if (options->latlon_mask)
+                    printf(", \"mask_value\"=%.2f",options->mask_values[i]);
+                printf("}");
+                s="\n,";
+            }
+
+            printf("\n]");
+            printf("\n}");
+        }
 
-  }
-  new_handle="\n,";
-  return 0;
+    }
+    new_handle="\n,";
+    return 0;
 }
 
 /* A new handle to skip is available. At this point something can be done
 with the message to be skipped before deleting the handle. */
-int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h) {
-  grib_handle_delete(h);
-  return 0;
+int grib_tool_skip_handle(grib_runtime_options* options, grib_handle* h)
+{
+    grib_handle_delete(h);
+    return 0;
 }
 
 /* key values can be printed in this function. Headers are already printed if requested.*/
-void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h) {
-  grib_print_key_values(options,h);
+void grib_tool_print_key_values(grib_runtime_options* options,grib_handle* h)
+{
+    grib_print_key_values(options,h);
 }
 
 /* this is executed after the last message in the last file is processed */
-int grib_tool_finalise_action(grib_runtime_options* options) {
-  int i=0;
-  if (options->latlon && options->verbose) {
- 
-		printf("Input Point: latitude=%.2f  longitude=%.2f\n",lat,lon);
-		printf("Grid Point chosen #%d index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n",
-			   options->latlon_idx+1,(int)options->indexes[options->latlon_idx],
-									  options->lats[options->latlon_idx],
-		   	options->lons[options->latlon_idx],
-	 		options->distances[options->latlon_idx]);
-
-		if (options->latlon_mask) {
-			printf("Mask values:\n");
-			for (i=0;i<4;i++) {
-				printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km) value=%.2f\n",
-					   i+1,(int)options->indexes[i],options->lats[i],options->lons[i],
-							options->distances[i],options->mask_values[i]);
-			}
-		} else {
-			printf("Other grid Points\n");
-			for (i=0;i<4;i++) {
-				printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n",
-					   i+1,(int)options->indexes[i],options->lats[i],options->lons[i],
-							options->distances[i]);
-			}
-		}
-	}
+int grib_tool_finalise_action(grib_runtime_options* options)
+{
+    int i=0;
+    if (options->latlon && options->verbose) {
+
+        printf("Input Point: latitude=%.2f  longitude=%.2f\n",lat,lon);
+        printf("Grid Point chosen #%d index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n",
+                options->latlon_idx+1,(int)options->indexes[options->latlon_idx],
+                options->lats[options->latlon_idx],
+                options->lons[options->latlon_idx],
+                options->distances[options->latlon_idx]);
+
+        if (options->latlon_mask) {
+            printf("Mask values:\n");
+            for (i=0;i<4;i++) {
+                printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km) value=%.2f\n",
+                        i+1,(int)options->indexes[i],options->lats[i],options->lons[i],
+                        options->distances[i],options->mask_values[i]);
+            }
+        } else {
+            printf("Other grid Points\n");
+            for (i=0;i<4;i++) {
+                printf("- %d - index=%d latitude=%.2f longitude=%.2f distance=%.2f (Km)\n",
+                        i+1,(int)options->indexes[i],options->lats[i],options->lons[i],
+                        options->distances[i]);
+            }
+        }
+    }
 
     if (n) grib_nearest_delete(n);
-	if (json) printf("\n]\n");
-  
-  return 0;
-}
+    if (json) printf("\n]\n");
 
-int grib_no_handle_action(int err) {
-  fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
-  return 0;
+    return 0;
 }
 
+int grib_no_handle_action(int err)
+{
+    fprintf(dump_file,"\t\t\"ERROR: unreadable message\"\n");
+    return 0;
+}
diff --git a/version.sh b/version.sh
index 6b0397a..13eff13 100644
--- a/version.sh
+++ b/version.sh
@@ -14,7 +14,7 @@ PACKAGE_NAME='eccodes'
 
 # Package version
 ECCODES_MAJOR_VERSION=0
-ECCODES_MINOR_VERSION=13
+ECCODES_MINOR_VERSION=16
 ECCODES_REVISION_VERSION=0
 
 ECCODES_CURRENT=1

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



More information about the debian-science-commits mailing list