[eccodes] 80/106: release 2.2.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jul 28 09:05:42 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 47b2e3a68dcb3593a095a7303b4857bb10c1197d
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Fri Mar 24 10:33:06 2017 +0000

    release 2.2.0
---
 CMakeLists.txt                                     |   16 +-
 VERSION.cmake                                      |    2 +-
 cmake/VERSION.cmake                                |    4 +-
 cmake/ecbuild-config-version.cmake                 |    2 +-
 cmake/ecbuild-config.cmake                         |   10 +-
 cmake/ecbuild_check_functions.cmake                |    3 +
 cmake/ecbuild_config.h.in                          |    1 +
 cmake/ecbuild_declare_project.cmake                |   11 +-
 cmake/ecbuild_find_omp.cmake                       |    2 +-
 cmake/ecbuild_generate_rpc.cmake                   |   88 +-
 data/bitmap.diff                                   |    2 +-
 data/no_bitmap.diff                                |    2 +-
 definitions/CMakeLists.txt                         |   16 +-
 definitions/Makefile.am                            |   12 +-
 definitions/budg/section.1.def                     |    2 +-
 definitions/bufr/old_section.1.def                 |    2 +-
 definitions/bufr/section.1.1.def                   |    2 +-
 definitions/bufr/section.1.2.def                   |    2 +-
 definitions/bufr/section.1.3.def                   |    4 +-
 definitions/bufr/section.1.4.def                   |    4 +-
 .../bufr/tables/0/wmo/latest/codetables/1003.table |    8 +
 .../tables/0/wmo/latest/codetables/10063.table     |   10 +
 .../tables/0/wmo/latest/codetables/10064.table     |    4 +
 .../bufr/tables/0/wmo/latest/codetables/1007.table |  200 +++
 .../bufr/tables/0/wmo/latest/codetables/1024.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/1028.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/1029.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/1033.table |  234 +++
 .../bufr/tables/0/wmo/latest/codetables/1034.table |  100 ++
 .../bufr/tables/0/wmo/latest/codetables/1036.table |   38 +
 .../bufr/tables/0/wmo/latest/codetables/1038.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/1052.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/1090.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/1092.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/1101.table |  202 +++
 .../tables/0/wmo/latest/codetables/11030.table     |   25 +
 .../tables/0/wmo/latest/codetables/11031.table     |   16 +
 .../tables/0/wmo/latest/codetables/11037.table     |   30 +
 .../tables/0/wmo/latest/codetables/11038.table     |   17 +
 .../tables/0/wmo/latest/codetables/11039.table     |   17 +
 .../bufr/tables/0/wmo/latest/codetables/1150.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/1151.table |    3 +
 .../tables/0/wmo/latest/codetables/13038.table     |    4 +
 .../tables/0/wmo/latest/codetables/13039.table     |    3 +
 .../tables/0/wmo/latest/codetables/13040.table     |    8 +
 .../tables/0/wmo/latest/codetables/13041.table     |   10 +
 .../tables/0/wmo/latest/codetables/13051.table     |    8 +
 .../tables/0/wmo/latest/codetables/13056.table     |   11 +
 .../tables/0/wmo/latest/codetables/13057.table     |   11 +
 .../tables/0/wmo/latest/codetables/15025.table     |    4 +
 .../tables/0/wmo/latest/codetables/19001.table     |    7 +
 .../tables/0/wmo/latest/codetables/19008.table     |    5 +
 .../tables/0/wmo/latest/codetables/19010.table     |    3 +
 .../tables/0/wmo/latest/codetables/19100.table     |    9 +
 .../tables/0/wmo/latest/codetables/19101.table     |   10 +
 .../tables/0/wmo/latest/codetables/19102.table     |    8 +
 .../tables/0/wmo/latest/codetables/19103.table     |   12 +
 .../tables/0/wmo/latest/codetables/19104.table     |   12 +
 .../tables/0/wmo/latest/codetables/19105.table     |   10 +
 .../tables/0/wmo/latest/codetables/19107.table     |   11 +
 .../tables/0/wmo/latest/codetables/19108.table     |    8 +
 .../tables/0/wmo/latest/codetables/19109.table     |   12 +
 .../tables/0/wmo/latest/codetables/19110.table     |    8 +
 .../tables/0/wmo/latest/codetables/19113.table     |    8 +
 .../tables/0/wmo/latest/codetables/19117.table     |    4 +
 .../tables/0/wmo/latest/codetables/19119.table     |    4 +
 .../tables/0/wmo/latest/codetables/20003.table     |  266 ++++
 .../tables/0/wmo/latest/codetables/20004.table     |   21 +
 .../tables/0/wmo/latest/codetables/20005.table     |   21 +
 .../tables/0/wmo/latest/codetables/20006.table     |    5 +
 .../tables/0/wmo/latest/codetables/20008.table     |   19 +
 .../tables/0/wmo/latest/codetables/20009.table     |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2001.table |    4 +
 .../tables/0/wmo/latest/codetables/20011.table     |   16 +
 .../tables/0/wmo/latest/codetables/20012.table     |   48 +
 .../tables/0/wmo/latest/codetables/20017.table     |   11 +
 .../tables/0/wmo/latest/codetables/20018.table     |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2002.table |    3 +
 .../tables/0/wmo/latest/codetables/20021.table     |   23 +
 .../tables/0/wmo/latest/codetables/20022.table     |    7 +
 .../tables/0/wmo/latest/codetables/20023.table     |   14 +
 .../tables/0/wmo/latest/codetables/20024.table     |    8 +
 .../tables/0/wmo/latest/codetables/20025.table     |   13 +
 .../tables/0/wmo/latest/codetables/20026.table     |   16 +
 .../tables/0/wmo/latest/codetables/20027.table     |    8 +
 .../tables/0/wmo/latest/codetables/20028.table     |    4 +
 .../tables/0/wmo/latest/codetables/20029.table     |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2003.table |   12 +
 .../tables/0/wmo/latest/codetables/20032.table     |    6 +
 .../tables/0/wmo/latest/codetables/20033.table     |    3 +
 .../tables/0/wmo/latest/codetables/20034.table     |   12 +
 .../tables/0/wmo/latest/codetables/20035.table     |   12 +
 .../tables/0/wmo/latest/codetables/20036.table     |   12 +
 .../tables/0/wmo/latest/codetables/20037.table     |   12 +
 .../bufr/tables/0/wmo/latest/codetables/2004.table |   11 +
 .../tables/0/wmo/latest/codetables/20040.table     |    9 +
 .../tables/0/wmo/latest/codetables/20041.table     |   14 +
 .../tables/0/wmo/latest/codetables/20042.table     |    4 +
 .../tables/0/wmo/latest/codetables/20045.table     |    4 +
 .../tables/0/wmo/latest/codetables/20048.table     |    5 +
 .../tables/0/wmo/latest/codetables/20050.table     |   10 +
 .../tables/0/wmo/latest/codetables/20055.table     |   12 +
 .../tables/0/wmo/latest/codetables/20056.table     |    6 +
 .../tables/0/wmo/latest/codetables/20062.table     |   21 +
 .../tables/0/wmo/latest/codetables/20063.table     |   71 +
 .../bufr/tables/0/wmo/latest/codetables/2007.table |   11 +
 .../tables/0/wmo/latest/codetables/20071.table     |   11 +
 .../tables/0/wmo/latest/codetables/20085.table     |    3 +
 .../tables/0/wmo/latest/codetables/20086.table     |   11 +
 .../tables/0/wmo/latest/codetables/20087.table     |    6 +
 .../tables/0/wmo/latest/codetables/20089.table     |   11 +
 .../tables/0/wmo/latest/codetables/20090.table     |    7 +
 .../tables/0/wmo/latest/codetables/20101.table     |   11 +
 .../tables/0/wmo/latest/codetables/20102.table     |   11 +
 .../tables/0/wmo/latest/codetables/20103.table     |   11 +
 .../tables/0/wmo/latest/codetables/20104.table     |   11 +
 .../tables/0/wmo/latest/codetables/20105.table     |   12 +
 .../tables/0/wmo/latest/codetables/20106.table     |    7 +
 .../tables/0/wmo/latest/codetables/20107.table     |   11 +
 .../tables/0/wmo/latest/codetables/20108.table     |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2011.table |  100 ++
 .../tables/0/wmo/latest/codetables/20119.table     |    4 +
 .../tables/0/wmo/latest/codetables/20124.table     |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2013.table |   11 +
 .../tables/0/wmo/latest/codetables/20136.table     |   44 +
 .../tables/0/wmo/latest/codetables/20137.table     |   11 +
 .../tables/0/wmo/latest/codetables/20138.table     |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2014.table |   51 +
 .../bufr/tables/0/wmo/latest/codetables/2015.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2016.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2017.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2019.table |  331 ++++
 .../bufr/tables/0/wmo/latest/codetables/2020.table |   31 +
 .../bufr/tables/0/wmo/latest/codetables/2021.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/2022.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2023.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/2024.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2025.table |   16 +
 .../bufr/tables/0/wmo/latest/codetables/2030.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/2031.table |   21 +
 .../bufr/tables/0/wmo/latest/codetables/2032.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2033.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2034.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2036.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2037.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/2038.table |   16 +
 .../bufr/tables/0/wmo/latest/codetables/2039.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2040.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/2041.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2042.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2044.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2045.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2046.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2047.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2048.table |   14 +
 .../bufr/tables/0/wmo/latest/codetables/2049.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2050.table |   19 +
 .../bufr/tables/0/wmo/latest/codetables/2051.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2052.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2053.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2054.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2055.table |   10 +
 .../bufr/tables/0/wmo/latest/codetables/2056.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2057.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2058.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2059.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2060.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2061.table |    3 +
 .../bufr/tables/0/wmo/latest/codetables/2062.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2064.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2066.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2070.table |   13 +
 .../bufr/tables/0/wmo/latest/codetables/2080.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2081.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/2083.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2084.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2095.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2096.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2097.table |   26 +
 .../bufr/tables/0/wmo/latest/codetables/2099.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2101.table |   10 +
 .../bufr/tables/0/wmo/latest/codetables/2103.table |    1 +
 .../bufr/tables/0/wmo/latest/codetables/2104.table |    9 +
 .../tables/0/wmo/latest/codetables/21066.table     |   11 +
 .../tables/0/wmo/latest/codetables/21067.table     |   12 +
 .../tables/0/wmo/latest/codetables/21068.table     |    7 +
 .../tables/0/wmo/latest/codetables/21069.table     |    9 +
 .../tables/0/wmo/latest/codetables/21070.table     |   22 +
 .../tables/0/wmo/latest/codetables/21072.table     |    3 +
 .../tables/0/wmo/latest/codetables/21073.table     |    8 +
 .../tables/0/wmo/latest/codetables/21076.table     |    4 +
 .../tables/0/wmo/latest/codetables/21109.table     |    7 +
 .../tables/0/wmo/latest/codetables/21115.table     |   10 +
 .../tables/0/wmo/latest/codetables/21116.table     |   16 +
 .../tables/0/wmo/latest/codetables/21119.table     |   14 +
 .../tables/0/wmo/latest/codetables/21144.table     |    1 +
 .../tables/0/wmo/latest/codetables/21148.table     |    2 +
 .../bufr/tables/0/wmo/latest/codetables/2115.table |    7 +
 .../tables/0/wmo/latest/codetables/21150.table     |    4 +
 .../tables/0/wmo/latest/codetables/21155.table     |   16 +
 .../tables/0/wmo/latest/codetables/21158.table     |    4 +
 .../tables/0/wmo/latest/codetables/21159.table     |    4 +
 .../tables/0/wmo/latest/codetables/21169.table     |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2119.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/2131.table |    1 +
 .../bufr/tables/0/wmo/latest/codetables/2137.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2138.table |    3 +
 .../bufr/tables/0/wmo/latest/codetables/2139.table |    3 +
 .../bufr/tables/0/wmo/latest/codetables/2143.table |   21 +
 .../bufr/tables/0/wmo/latest/codetables/2144.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/2145.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2146.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/2147.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/2148.table |   12 +
 .../bufr/tables/0/wmo/latest/codetables/2149.table |   38 +
 .../bufr/tables/0/wmo/latest/codetables/2150.table |   55 +
 .../bufr/tables/0/wmo/latest/codetables/2151.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/2152.table |   13 +
 .../bufr/tables/0/wmo/latest/codetables/2158.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/2159.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2160.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/2163.table |   16 +
 .../bufr/tables/0/wmo/latest/codetables/2164.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2165.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2166.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2167.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2169.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2170.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2172.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2175.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2176.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2177.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2178.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2179.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/2180.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/2181.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/2182.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2183.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2184.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/2185.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/2186.table |   23 +
 .../bufr/tables/0/wmo/latest/codetables/2187.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/2188.table |   10 +
 .../bufr/tables/0/wmo/latest/codetables/2189.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/2191.table |    4 +
 .../tables/0/wmo/latest/codetables/22056.table     |    4 +
 .../tables/0/wmo/latest/codetables/22060.table     |    4 +
 .../tables/0/wmo/latest/codetables/22061.table     |   11 +
 .../tables/0/wmo/latest/codetables/22067.table     |  101 ++
 .../tables/0/wmo/latest/codetables/22068.table     |   43 +
 .../tables/0/wmo/latest/codetables/22120.table     |   13 +
 .../tables/0/wmo/latest/codetables/22121.table     |    9 +
 .../tables/0/wmo/latest/codetables/22122.table     |    8 +
 .../tables/0/wmo/latest/codetables/22123.table     |    9 +
 .../tables/0/wmo/latest/codetables/22178.table     |   12 +
 .../tables/0/wmo/latest/codetables/23001.table     |    5 +
 .../tables/0/wmo/latest/codetables/23002.table     |   16 +
 .../tables/0/wmo/latest/codetables/23003.table     |    8 +
 .../tables/0/wmo/latest/codetables/23004.table     |    6 +
 .../tables/0/wmo/latest/codetables/23005.table     |    4 +
 .../tables/0/wmo/latest/codetables/23006.table     |    8 +
 .../tables/0/wmo/latest/codetables/23007.table     |    5 +
 .../tables/0/wmo/latest/codetables/23008.table     |    4 +
 .../tables/0/wmo/latest/codetables/23009.table     |    4 +
 .../tables/0/wmo/latest/codetables/23016.table     |    4 +
 .../tables/0/wmo/latest/codetables/23018.table     |    6 +
 .../tables/0/wmo/latest/codetables/23031.table     |    4 +
 .../tables/0/wmo/latest/codetables/23032.table     |    4 +
 .../tables/0/wmo/latest/codetables/24003.table     |    5 +
 .../tables/0/wmo/latest/codetables/25004.table     |    4 +
 .../tables/0/wmo/latest/codetables/25005.table     |    4 +
 .../tables/0/wmo/latest/codetables/25006.table     |    5 +
 .../tables/0/wmo/latest/codetables/25009.table     |    4 +
 .../tables/0/wmo/latest/codetables/25010.table     |    8 +
 .../tables/0/wmo/latest/codetables/25011.table     |    4 +
 .../tables/0/wmo/latest/codetables/25012.table     |    4 +
 .../tables/0/wmo/latest/codetables/25013.table     |    1 +
 .../tables/0/wmo/latest/codetables/25015.table     |    1 +
 .../tables/0/wmo/latest/codetables/25017.table     |    1 +
 .../tables/0/wmo/latest/codetables/25020.table     |    4 +
 .../tables/0/wmo/latest/codetables/25021.table     |    5 +
 .../tables/0/wmo/latest/codetables/25022.table     |    8 +
 .../tables/0/wmo/latest/codetables/25023.table     |    8 +
 .../tables/0/wmo/latest/codetables/25024.table     |   13 +
 .../tables/0/wmo/latest/codetables/25029.table     |    5 +
 .../tables/0/wmo/latest/codetables/25030.table     |    4 +
 .../tables/0/wmo/latest/codetables/25031.table     |    6 +
 .../tables/0/wmo/latest/codetables/25032.table     |    4 +
 .../tables/0/wmo/latest/codetables/25033.table     |    4 +
 .../tables/0/wmo/latest/codetables/25034.table     |    3 +
 .../tables/0/wmo/latest/codetables/25035.table     |    8 +
 .../tables/0/wmo/latest/codetables/25036.table     |    4 +
 .../tables/0/wmo/latest/codetables/25040.table     |   10 +
 .../tables/0/wmo/latest/codetables/25041.table     |    4 +
 .../tables/0/wmo/latest/codetables/25042.table     |    4 +
 .../tables/0/wmo/latest/codetables/25053.table     |    6 +
 .../tables/0/wmo/latest/codetables/25063.table     |    4 +
 .../tables/0/wmo/latest/codetables/25069.table     |    7 +
 .../tables/0/wmo/latest/codetables/25086.table     |    4 +
 .../tables/0/wmo/latest/codetables/25090.table     |   11 +
 .../tables/0/wmo/latest/codetables/25093.table     |    3 +
 .../tables/0/wmo/latest/codetables/25095.table     |    1 +
 .../tables/0/wmo/latest/codetables/25096.table     |    4 +
 .../tables/0/wmo/latest/codetables/25097.table     |   11 +
 .../tables/0/wmo/latest/codetables/25098.table     |    8 +
 .../tables/0/wmo/latest/codetables/25099.table     |    6 +
 .../tables/0/wmo/latest/codetables/25110.table     |    6 +
 .../tables/0/wmo/latest/codetables/25112.table     |    5 +
 .../tables/0/wmo/latest/codetables/25113.table     |    3 +
 .../tables/0/wmo/latest/codetables/25120.table     |    4 +
 .../tables/0/wmo/latest/codetables/25122.table     |    4 +
 .../tables/0/wmo/latest/codetables/25123.table     |    4 +
 .../tables/0/wmo/latest/codetables/25124.table     |    4 +
 .../tables/0/wmo/latest/codetables/25150.table     |    3 +
 .../tables/0/wmo/latest/codetables/25174.table     |   13 +
 .../tables/0/wmo/latest/codetables/25181.table     |    3 +
 .../tables/0/wmo/latest/codetables/25182.table     |    3 +
 .../tables/0/wmo/latest/codetables/25184.table     |    3 +
 .../tables/0/wmo/latest/codetables/25185.table     |    2 +
 .../tables/0/wmo/latest/codetables/25187.table     |    3 +
 .../tables/0/wmo/latest/codetables/25188.table     |    6 +
 .../tables/0/wmo/latest/codetables/26010.table     |   25 +
 .../tables/0/wmo/latest/codetables/29001.table     |    8 +
 .../tables/0/wmo/latest/codetables/29002.table     |    4 +
 .../bufr/tables/0/wmo/latest/codetables/3001.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/3003.table |    8 +
 .../tables/0/wmo/latest/codetables/30031.table     |   13 +
 .../tables/0/wmo/latest/codetables/30032.table     |    9 +
 .../bufr/tables/0/wmo/latest/codetables/3004.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/3008.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/3010.table |   12 +
 .../bufr/tables/0/wmo/latest/codetables/3011.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/3012.table |    3 +
 .../bufr/tables/0/wmo/latest/codetables/3016.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/3017.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/3018.table |   22 +
 .../bufr/tables/0/wmo/latest/codetables/3019.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/3020.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/3021.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/3022.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/3023.table |    8 +
 .../tables/0/wmo/latest/codetables/31021.table     |    8 +
 .../tables/0/wmo/latest/codetables/31031.table     |    1 +
 .../tables/0/wmo/latest/codetables/33002.table     |    4 +
 .../tables/0/wmo/latest/codetables/33003.table     |    5 +
 .../tables/0/wmo/latest/codetables/33005.table     |   23 +
 .../tables/0/wmo/latest/codetables/33006.table     |    5 +
 .../tables/0/wmo/latest/codetables/33015.table     |   16 +
 .../tables/0/wmo/latest/codetables/33020.table     |    8 +
 .../tables/0/wmo/latest/codetables/33021.table     |    4 +
 .../tables/0/wmo/latest/codetables/33022.table     |    4 +
 .../tables/0/wmo/latest/codetables/33023.table     |    4 +
 .../tables/0/wmo/latest/codetables/33024.table     |   10 +
 .../tables/0/wmo/latest/codetables/33025.table     |    5 +
 .../tables/0/wmo/latest/codetables/33026.table     |   17 +
 .../tables/0/wmo/latest/codetables/33027.table     |    6 +
 .../tables/0/wmo/latest/codetables/33028.table     |    5 +
 .../tables/0/wmo/latest/codetables/33030.table     |    7 +
 .../tables/0/wmo/latest/codetables/33031.table     |   21 +
 .../tables/0/wmo/latest/codetables/33032.table     |    7 +
 .../tables/0/wmo/latest/codetables/33033.table     |    3 +
 .../tables/0/wmo/latest/codetables/33035.table     |   10 +
 .../tables/0/wmo/latest/codetables/33037.table     |   19 +
 .../tables/0/wmo/latest/codetables/33038.table     |    9 +
 .../tables/0/wmo/latest/codetables/33039.table     |    9 +
 .../tables/0/wmo/latest/codetables/33041.table     |    4 +
 .../tables/0/wmo/latest/codetables/33042.table     |    5 +
 .../tables/0/wmo/latest/codetables/33043.table     |    4 +
 .../tables/0/wmo/latest/codetables/33044.table     |   14 +
 .../tables/0/wmo/latest/codetables/33047.table     |   27 +
 .../tables/0/wmo/latest/codetables/33048.table     |    4 +
 .../tables/0/wmo/latest/codetables/33049.table     |    4 +
 .../tables/0/wmo/latest/codetables/33050.table     |    9 +
 .../tables/0/wmo/latest/codetables/33060.table     |    4 +
 .../tables/0/wmo/latest/codetables/33070.table     |   14 +
 .../tables/0/wmo/latest/codetables/33071.table     |   10 +
 .../tables/0/wmo/latest/codetables/33072.table     |   18 +
 .../tables/0/wmo/latest/codetables/33075.table     |    5 +
 .../tables/0/wmo/latest/codetables/33076.table     |    2 +
 .../tables/0/wmo/latest/codetables/33077.table     |   12 +
 .../tables/0/wmo/latest/codetables/33078.table     |    5 +
 .../tables/0/wmo/latest/codetables/33079.table     |   10 +
 .../tables/0/wmo/latest/codetables/33080.table     |   13 +
 .../tables/0/wmo/latest/codetables/33081.table     |    9 +
 .../tables/0/wmo/latest/codetables/33082.table     |   10 +
 .../tables/0/wmo/latest/codetables/33083.table     |   10 +
 .../tables/0/wmo/latest/codetables/33084.table     |   10 +
 .../tables/0/wmo/latest/codetables/33085.table     |   14 +
 .../tables/0/wmo/latest/codetables/33086.table     |    5 +
 .../tables/0/wmo/latest/codetables/33087.table     |   10 +
 .../tables/0/wmo/latest/codetables/33088.table     |   12 +
 .../tables/0/wmo/latest/codetables/35000.table     |    1 +
 .../tables/0/wmo/latest/codetables/35001.table     |    4 +
 .../tables/0/wmo/latest/codetables/35030.table     |   10 +
 .../tables/0/wmo/latest/codetables/35031.table     |   20 +
 .../tables/0/wmo/latest/codetables/35032.table     |   10 +
 .../tables/0/wmo/latest/codetables/35033.table     |   12 +
 .../tables/0/wmo/latest/codetables/35034.table     |    7 +
 .../tables/0/wmo/latest/codetables/35035.table     |   20 +
 .../tables/0/wmo/latest/codetables/40005.table     |    5 +
 .../tables/0/wmo/latest/codetables/40006.table     |    8 +
 .../tables/0/wmo/latest/codetables/40011.table     |    4 +
 .../tables/0/wmo/latest/codetables/40012.table     |    3 +
 .../tables/0/wmo/latest/codetables/40013.table     |    5 +
 .../tables/0/wmo/latest/codetables/40020.table     |   16 +
 .../tables/0/wmo/latest/codetables/40023.table     |    4 +
 .../tables/0/wmo/latest/codetables/40024.table     |    5 +
 .../tables/0/wmo/latest/codetables/40025.table     |    4 +
 .../tables/0/wmo/latest/codetables/40028.table     |   16 +
 .../tables/0/wmo/latest/codetables/40036.table     |    3 +
 .../bufr/tables/0/wmo/latest/codetables/4059.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/4080.table |    6 +
 .../tables/0/wmo/latest/codetables/42004.table     |    3 +
 .../bufr/tables/0/wmo/latest/codetables/5069.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8001.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/8002.table |   19 +
 .../bufr/tables/0/wmo/latest/codetables/8003.table |   12 +
 .../bufr/tables/0/wmo/latest/codetables/8004.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/8005.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/8006.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/8007.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/8008.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/8009.table |   16 +
 .../bufr/tables/0/wmo/latest/codetables/8010.table |   14 +
 .../bufr/tables/0/wmo/latest/codetables/8011.table |   27 +
 .../bufr/tables/0/wmo/latest/codetables/8012.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8013.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8014.table |   10 +
 .../bufr/tables/0/wmo/latest/codetables/8015.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8016.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/8017.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8018.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8019.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/8021.table |   32 +
 .../bufr/tables/0/wmo/latest/codetables/8023.table |   14 +
 .../bufr/tables/0/wmo/latest/codetables/8024.table |   12 +
 .../bufr/tables/0/wmo/latest/codetables/8025.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/8026.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/8029.table |   16 +
 .../bufr/tables/0/wmo/latest/codetables/8032.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/8033.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/8034.table |   10 +
 .../bufr/tables/0/wmo/latest/codetables/8035.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/8036.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/8039.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/8040.table |   49 +
 .../bufr/tables/0/wmo/latest/codetables/8041.table |   15 +
 .../bufr/tables/0/wmo/latest/codetables/8042.table |   17 +
 .../bufr/tables/0/wmo/latest/codetables/8043.table |   17 +
 .../bufr/tables/0/wmo/latest/codetables/8050.table |   11 +
 .../bufr/tables/0/wmo/latest/codetables/8051.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/8052.table |   26 +
 .../bufr/tables/0/wmo/latest/codetables/8053.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8054.table |    3 +
 .../bufr/tables/0/wmo/latest/codetables/8060.table |    8 +
 .../bufr/tables/0/wmo/latest/codetables/8065.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8066.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8070.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/8072.table |    6 +
 .../bufr/tables/0/wmo/latest/codetables/8074.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8075.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8076.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/8077.table |    7 +
 .../bufr/tables/0/wmo/latest/codetables/8079.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/8080.table |   14 +
 .../bufr/tables/0/wmo/latest/codetables/8081.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/8082.table |    3 +
 .../bufr/tables/0/wmo/latest/codetables/8083.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/8085.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8086.table |    9 +
 .../bufr/tables/0/wmo/latest/codetables/8087.table |    5 +
 .../bufr/tables/0/wmo/latest/codetables/8088.table |    4 +
 .../bufr/tables/0/wmo/latest/codetables/8091.table |   11 +
 definitions/bufr/tables/0/wmo/latest/element.table | 1616 ++++++++++++++++++++
 definitions/bufr/tables/0/wmo/latest/sequence.def  |  963 ++++++++++++
 definitions/{grib1/0.table => common/c-1.table}    |    0
 .../{grib2/centre.table => common/c-11.table}      |    0
 definitions/grib1/boot.def                         |    4 +-
 definitions/grib1/local.98.18.def                  |    2 +-
 definitions/grib1/local.98.218.def                 |    2 +-
 definitions/grib1/local.98.31.def                  |    2 +-
 definitions/grib1/section.1.def                    |    2 +-
 definitions/grib2/cfVarName.def                    |   22 +
 definitions/grib2/local.98.11.def                  |    2 +-
 definitions/grib2/local.98.18.def                  |    2 +-
 definitions/grib2/local/1098/template.2.0.def~     |   19 -
 definitions/grib2/localConcepts/ecmf/cfVarName.def |  300 ++++
 definitions/grib2/localConcepts/ecmf/name.def      |  300 ++++
 definitions/grib2/localConcepts/ecmf/paramId.def   |  300 ++++
 definitions/grib2/localConcepts/ecmf/shortName.def |  300 ++++
 definitions/grib2/localConcepts/ecmf/units.def     |  300 ++++
 definitions/grib2/name.def                         |   22 +
 definitions/grib2/paramId.def                      |   22 +
 definitions/grib2/section.1.def                    |    2 +-
 definitions/grib2/shortName.def                    |   22 +
 .../grib2/template.4.parameter_postproc.def        |    2 +-
 definitions/grib2/units.def                        |   22 +
 definitions/tide/section.1.def                     |    2 +-
 examples/C/bufr_attributes.c                       |   16 +-
 examples/C/bufr_attributes.sh                      |    2 +-
 examples/C/bufr_clone.sh                           |    4 +-
 examples/C/bufr_copy_data.c                        |    2 +-
 examples/C/bufr_copy_data.sh                       |   14 +-
 examples/C/bufr_expanded.sh                        |    2 +-
 examples/C/bufr_get_keys.c                         |    6 +-
 examples/C/bufr_get_keys.sh                        |    2 +-
 examples/C/bufr_keys_iterator.c                    |   59 +-
 examples/C/bufr_keys_iterator.sh                   |   10 +-
 examples/C/bufr_missing.c                          |    6 +-
 examples/C/bufr_missing.sh                         |    2 +-
 examples/C/bufr_pthreads.sh                        |    2 +-
 examples/C/bufr_read_header.c                      |   34 +-
 examples/C/bufr_read_header.sh                     |    2 +-
 examples/C/bufr_read_scatterometer.c               |   14 +-
 examples/C/bufr_read_scatterometer.sh              |    2 +-
 examples/C/bufr_read_synop.c                       |   50 +-
 examples/C/bufr_read_synop.sh                      |    2 +-
 examples/C/bufr_read_temp.c                        |    6 +-
 examples/C/bufr_read_temp.sh                       |    2 +-
 examples/C/bufr_set_keys.c                         |    2 +-
 examples/C/bufr_set_keys.sh                        |    6 +-
 examples/C/bufr_subset.sh                          |    2 +-
 examples/C/get_product_kind.c                      |    6 +-
 examples/C/get_product_kind.sh                     |    2 +-
 examples/C/grib_clone.sh                           |    8 +-
 examples/C/grib_copy_message.sh                    |    8 +-
 examples/C/grib_ensemble_index.c                   |    2 +-
 examples/C/grib_ensemble_index.sh                  |    4 +-
 examples/C/grib_get_data.sh                        |    2 +-
 examples/C/grib_get_keys.c                         |    2 +-
 examples/C/grib_get_keys.sh                        |    2 +-
 examples/C/grib_iterator.c                         |    2 +-
 examples/C/grib_iterator.sh                        |    4 +-
 examples/C/grib_keys_iterator.sh                   |    6 +-
 examples/C/grib_list.sh                            |    2 +-
 examples/C/grib_multi.sh                           |    4 +-
 examples/C/grib_multi_write.sh                     |    6 +-
 examples/C/grib_precipitation.c                    |    6 +-
 examples/C/grib_precision.sh                       |    2 +-
 examples/C/grib_print_data.sh                      |    2 +-
 examples/C/grib_pthreads.sh                        |    2 +-
 examples/C/grib_set_bitmap.sh                      |    4 +-
 examples/C/grib_set_data.c                         |    2 +-
 examples/C/grib_set_data.sh                        |    2 +-
 examples/C/grib_set_keys.sh                        |    2 +-
 examples/C/grib_set_pv.sh                          |    4 +-
 examples/C/include.ctest.sh.in                     |    8 +-
 examples/C/include.sh                              |   10 +-
 examples/C/large_grib1.sh                          |    4 +-
 examples/C/new_sample.c                            |    4 +-
 examples/C/sections_copy.sh                        |   16 +-
 examples/C/set_missing.sh                          |    2 +-
 examples/F90/bufr_attributes.f90                   |   34 +-
 examples/F90/bufr_clone.f90                        |   12 +-
 examples/F90/bufr_clone.sh                         |    2 +-
 examples/F90/bufr_copy_data.sh                     |    4 +-
 examples/F90/bufr_copy_keys.f90                    |    6 +-
 examples/F90/bufr_copy_keys.sh                     |    4 +-
 examples/F90/bufr_copy_message.f90                 |    2 +-
 examples/F90/bufr_copy_message.sh                  |    4 +-
 examples/F90/bufr_expanded.f90                     |    6 +-
 examples/F90/bufr_get_keys.f90                     |   11 +-
 examples/F90/bufr_get_string_array.f90             |   12 +-
 examples/F90/bufr_keys_iterator.f90                |   40 +-
 examples/F90/bufr_keys_iterator.sh                 |    2 +-
 examples/F90/bufr_read_header.f90                  |    6 +-
 examples/F90/bufr_read_scatterometer.f90           |   20 +-
 examples/F90/bufr_read_synop.f90                   |   62 +-
 examples/F90/bufr_read_tropical_cyclone.f90        |   30 +-
 examples/F90/bufr_set_keys.f90                     |    4 +-
 examples/F90/bufr_set_keys.sh                      |    4 +-
 examples/F90/bufr_subset.f90                       |   22 +-
 examples/F90/get_fortran.f90                       |   24 +-
 examples/F90/get_pl.f90                            |    2 +-
 examples/F90/get_pl.sh                             |    2 +-
 examples/F90/get_product_kind.f90                  |    8 +-
 examples/F90/get_pv.f90                            |    2 +-
 examples/F90/get_pv.sh                             |    2 +-
 examples/F90/get_set_uuid.f90                      |    2 +-
 examples/F90/get_set_uuid.sh                       |    6 +-
 examples/F90/grib_clone.f90                        |    8 +-
 examples/F90/grib_clone.sh                         |    2 +-
 examples/F90/grib_copy_message.f90                 |    2 +-
 examples/F90/grib_copy_message.sh                  |    4 +-
 examples/F90/grib_copy_namespace.f90               |    6 +-
 examples/F90/grib_copy_namespace.sh                |    6 +-
 examples/F90/grib_count_messages.f90               |    2 +-
 examples/F90/grib_count_messages.sh                |    2 +-
 examples/F90/grib_count_messages_multi.sh          |    4 +-
 examples/F90/grib_get_data.f90                     |    6 +-
 examples/F90/grib_get_data.sh                      |    2 +-
 examples/F90/grib_get_keys.f90                     |   27 +-
 examples/F90/grib_get_keys.sh                      |    2 +-
 examples/F90/grib_index.f90                        |    6 +-
 examples/F90/grib_index.sh                         |    4 +-
 examples/F90/grib_keys_iterator.f90                |   30 +-
 examples/F90/grib_keys_iterator.sh                 |    2 +-
 examples/F90/grib_multi.f90                        |    8 +-
 examples/F90/grib_multi.sh                         |    2 +-
 examples/F90/grib_multi_write.f90                  |    4 +-
 examples/F90/grib_multi_write.sh                   |    4 +-
 examples/F90/grib_nearest.f90                      |   29 +-
 examples/F90/grib_nearest.sh                       |    2 +-
 examples/F90/grib_precision.f90                    |    2 +-
 examples/F90/grib_precision.sh                     |    2 +-
 examples/F90/grib_print_data.f90                   |    2 +-
 examples/F90/grib_print_data.sh                    |    4 +-
 examples/F90/grib_print_data_static.f90            |    2 +-
 examples/F90/grib_samples.f90                      |   14 +-
 examples/F90/grib_samples.sh                       |    4 +-
 examples/F90/grib_set_bitmap.f90                   |   22 +-
 examples/F90/grib_set_bitmap.sh                    |    4 +-
 examples/F90/grib_set_data.f90                     |    6 +-
 examples/F90/grib_set_data.sh                      |    2 +-
 examples/F90/grib_set_gvc.f90                      |   10 +-
 examples/F90/grib_set_keys.f90                     |   12 +-
 examples/F90/grib_set_keys.sh                      |    8 +-
 examples/F90/grib_set_missing.f90                  |    4 +-
 examples/F90/grib_set_missing.sh                   |    2 +-
 examples/F90/grib_set_pv.f90                       |   20 +-
 examples/F90/grib_set_pv.sh                        |    2 +-
 examples/F90/include.ctest.sh.in                   |    8 +-
 examples/F90/include.sh                            |    8 +-
 examples/F90/iterator_fortran.f90                  |    2 +-
 examples/F90/keys_iterator_fortran.f90             |    2 +-
 examples/F90/multi_fortran.f90                     |    4 +-
 examples/F90/new_from_file.f90                     |    6 +-
 examples/F90/precision_fortran.f90                 |    2 +-
 examples/F90/print_data_fortran.f90                |    2 +-
 examples/F90/read_from_file.f90                    |    8 +-
 examples/F90/read_from_file.sh                     |    2 +-
 examples/F90/read_message.f90                      |   10 +-
 examples/F90/read_message.sh                       |    4 +-
 examples/F90/set_fortran.f90                       |    2 +-
 examples/F90/set_missing_fortran.f90               |    2 +-
 examples/python/CMakeLists.txt                     |    2 +-
 examples/python/bufr_copy_data.sh                  |    4 +-
 examples/python/bufr_encode_flight.sh              |    4 +-
 examples/python/bufr_keys_iterator.py              |   22 +-
 examples/python/bufr_keys_iterator.sh              |    7 +-
 examples/python/bufr_set_keys.sh                   |    4 +-
 examples/python/grib_index.sh                      |   20 +-
 examples/python/high_level_api.py                  |   99 +-
 examples/python/include.ctest.sh.in                |   10 +-
 examples/python/include.sh                         |    2 +-
 fortran/eccodes_f90_int.f90                        |   33 +-
 fortran/eccodes_f90_int_size_t.f90                 |    5 +-
 fortran/eccodes_f90_long_int.f90                   |   34 +-
 fortran/eccodes_f90_long_size_t.f90                |    5 +-
 fortran/eccodes_f90_tail.f90                       |  127 +-
 fortran/eccodes_visibility.h                       |    7 +
 fortran/grib_api_externals.h                       |    7 +
 fortran/grib_f90_int.f90                           |   40 +-
 fortran/grib_f90_tail.f90                          |    2 +-
 fortran/grib_fortran.c                             |  223 ++-
 fortran/grib_fortran_prototypes.h                  |   19 +
 html/classeccodes.html                             |    8 +-
 ifs_samples/grib1/CMakeLists.txt                   |    2 +-
 ifs_samples/grib1_mlgrib2/CMakeLists.txt           |    2 +-
 ifs_samples/grib1_mlgrib2_ieee64/CMakeLists.txt    |    2 +-
 memfs.py                                           |   20 +-
 python/CMakeLists.txt                              |    6 +-
 python/eccodes/eccodes.py                          |    5 +
 python/eccodes/high_level/bufr.py                  |    9 +-
 python/grib_interface.c                            |  248 ++-
 python/grib_interface.h                            |   10 +-
 python/gribapi/gribapi.py                          |  145 +-
 python/gribapi_swig.i                              |    5 +
 python/swig_wrap_numpy.c                           |  174 +++
 python/swig_wrap_numpy.py                          |   20 +
 samples/CMakeLists.txt                             |   10 +-
 src/bufr_keys_iterator.c                           |   78 +-
 src/bufr_util.c                                    |   15 +-
 src/eccodes.h                                      |   18 +-
 src/grib_accessor_class_bufr_data_element.c        |   25 +-
 ...ib_accessor_class_second_order_bits_per_value.c |   20 +
 src/grib_api.h                                     |   13 +-
 src/grib_api_internal.h                            |   18 +-
 src/grib_api_prototypes.h                          |   15 +-
 src/grib_api_version.c                             |    2 +-
 src/grib_bits.c                                    |    2 +-
 src/grib_bufr_descriptor.c                         |    7 -
 src/grib_context.c                                 |    4 +-
 src/grib_dumper_class_bufr_encode_C.c              |   15 +-
 src/grib_dumper_class_bufr_encode_fortran.c        |   15 +-
 src/grib_dumper_class_bufr_encode_python.c         |   19 +-
 src/grib_handle.c                                  |    9 +-
 src/grib_keys_iterator.c                           |    6 +
 src/grib_scaling.c                                 |    2 +
 tests/CMakeLists.txt                               |    2 +
 tests/badgrib.sh                                   |    2 +-
 tests/bitmap.sh                                    |   20 +-
 tests/bitsPerValue.sh                              |   10 +-
 tests/budg.sh                                      |    4 +-
 tests/bufr_change_edition.sh                       |    6 +-
 tests/bufr_compare.sh                              |   26 +-
 tests/bufr_count.sh                                |    4 +-
 tests/bufr_dump.sh                                 |   10 +-
 tests/bufr_dump_decode_C.sh                        |    2 +-
 tests/bufr_dump_decode_filter.sh                   |    4 +-
 tests/bufr_dump_decode_fortran.sh                  |    2 +-
 tests/bufr_dump_decode_python.sh                   |    2 +-
 tests/bufr_dump_encode_C.sh                        |    8 +-
 tests/bufr_dump_encode_filter.sh                   |   10 +-
 tests/bufr_dump_encode_fortran.sh                  |    8 +-
 tests/bufr_dump_encode_python.sh                   |    8 +-
 tests/bufr_filter.sh                               |  202 ++-
 tests/bufr_filter_extract_area.sh                  |    4 +-
 tests/bufr_filter_extract_datetime.sh              |    8 +-
 tests/bufr_get_element.c                           |   54 +
 .../grib_get_keys.sh => tests/bufr_get_element.sh  |    6 +-
 tests/bufr_json.sh                                 |    6 +-
 tests/bufr_keys_iter.c                             |    9 +-
 tests/bufrdc_desc_ref.sh                           |    2 +-
 tests/bufrdc_ref.sh                                |    2 +-
 tests/calendar.sh                                  |    8 +-
 tests/ccsds.sh                                     |   30 +-
 tests/change_scanning.sh                           |   12 +-
 tests/check_gaussian_grids.sh                      |    2 +-
 tests/concept.sh                                   |    2 +-
 tests/decimalPrecision.sh                          |   10 +-
 tests/definitions.sh                               |    6 +-
 tests/ecc-197.sh                                   |    2 +-
 tests/ecc-286.sh                                   |    2 +-
 tests/ecc-288.sh                                   |    6 +-
 tests/ecc-379.sh                                   |   12 +-
 tests/ecc-393.sh                                   |   10 +-
 tests/get_fail.sh                                  |    2 +-
 tests/grib1to2.sh                                  |   20 +-
 tests/grib2to1.sh                                  |   12 +-
 tests/grib_compare.sh                              |   30 +-
 tests/grib_double_cmp.sh                           |   10 +-
 tests/grib_dump.sh                                 |    2 +-
 tests/grib_dump_debug.sh                           |    2 +-
 tests/grib_filter.sh                               |   26 +-
 tests/grib_png.sh                                  |    6 +-
 tests/grib_to_netcdf.sh                            |   14 +-
 tests/grib_util_set_spec.sh                        |   38 +-
 tests/gridType.sh                                  |   12 +-
 tests/gts_compare.sh                               |    8 +-
 tests/ieee.sh                                      |   30 +-
 tests/include.ctest.sh.in                          |   13 +-
 tests/include.sh                                   |   12 +-
 tests/index.sh                                     |    8 +-
 tests/iterator.sh                                  |    4 +-
 tests/jpeg.sh                                      |   34 +-
 tests/lamb_az_eq_area.sh                           |    4 +-
 tests/level.sh                                     |   12 +-
 tests/list.sh                                      |    4 +-
 tests/list_all_keys.ksh                            |    4 +-
 tests/local.sh                                     |   50 +-
 tests/ls.sh                                        |   34 +-
 tests/md5.sh                                       |    2 +-
 tests/metar_get.sh                                 |    4 +-
 tests/metar_ls.sh                                  |    4 +-
 tests/missing.sh                                   |   12 +-
 tests/multi.sh                                     |    8 +-
 tests/multi_from_message.sh                        |    4 +-
 tests/mybufrdc_ref.sh                              |    2 +-
 tests/neg_fctime.sh                                |   18 +-
 tests/octahedral.sh                                |    2 +-
 tests/padding.sh                                   |   10 +-
 tests/second_order.sh                              |   24 +-
 tests/set.sh                                       |   28 +-
 tests/statistics.sh                                |    2 +-
 tests/step.sh                                      |   40 +-
 tests/tigge.sh                                     |   14 +-
 tests/tigge_conversions.sh                         |    8 +-
 tests/tiny.sh                                      |    2 +-
 tests/uerra.sh                                     |   16 +-
 tests/utils.sh                                     |    2 +-
 tigge/tigge_check.c                                |    4 +-
 tigge/tigge_check.h                                |  154 +-
 tools/bufr_compare.c                               |    2 +-
 tools/bufr_copy.c                                  |   10 +-
 tools/bufr_copy.sh                                 |    2 +-
 tools/bufr_dump.c                                  |    8 +-
 tools/bufr_get.c                                   |    2 +-
 tools/bufr_get.sh                                  |    2 +-
 tools/bufr_ls.c                                    |    7 +-
 tools/bufr_set.c                                   |   11 +-
 tools/grib_compare.sh                              |    2 +-
 tools/grib_copy.c                                  |    9 +-
 tools/grib_merge.c                                 |    2 +-
 tools/grib_options.c                               |   15 +-
 tools/grib_set.c                                   |    5 +-
 tools/grib_to_netcdf.c                             |   10 +-
 tools/gts_copy.c                                   |    2 +-
 tools/metar_copy.c                                 |    4 +-
 version.sh                                         |    2 +-
 790 files changed, 12410 insertions(+), 1635 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f65b36f..2b0c3c5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -239,13 +239,13 @@ else()
 endif()
 
 if( NOT DEFINED ECCODES_DEFINITION_SUFF )
-  set( ECCODES_DEFINITION_SUFF  share/eccodes/definitions )
+  set( ECCODES_DEFINITION_SUFF  ${INSTALL_DATA_DIR}/definitions )
 endif()
 if( NOT DEFINED ECCODES_SAMPLES_SUFF )
-  set( ECCODES_SAMPLES_SUFF     share/eccodes/samples )
+  set( ECCODES_SAMPLES_SUFF     ${INSTALL_DATA_DIR}/samples )
 endif()
 if( NOT DEFINED ECCODES_IFS_SAMPLES_SUFF )
-  set( ECCODES_IFS_SAMPLES_SUFF share/eccodes/ifs_samples )
+  set( ECCODES_IFS_SAMPLES_SUFF ${INSTALL_DATA_DIR}/ifs_samples )
 endif()
 
 set( ECCODES_DEFINITION_PATH  ${the_default_data_prefix}/${ECCODES_DEFINITION_SUFF} )
@@ -370,11 +370,7 @@ ecbuild_install_project( NAME ${CMAKE_PROJECT_NAME} )
 ecbuild_print_summary()
 
 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("   +--------------------------+")
+ecbuild_info("   |  ecCodes version ${ECCODES_VERSION}   |")
+ecbuild_info("   +--------------------------+")
 ecbuild_info("")
diff --git a/VERSION.cmake b/VERSION.cmake
index 9cd120f..1628156 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1 +1 @@
-set( ${PROJECT_NAME}_VERSION_STR  "2.1.0" )
+set( ${PROJECT_NAME}_VERSION_STR  "2.2.0" )
diff --git a/cmake/VERSION.cmake b/cmake/VERSION.cmake
index ce5f7de..ca1bacb 100644
--- a/cmake/VERSION.cmake
+++ b/cmake/VERSION.cmake
@@ -1,7 +1,7 @@
 set( ECBUILD_MAJOR_VERSION "2" )
 set( ECBUILD_MINOR_VERSION "6" )
-set( ECBUILD_PATCH_VERSION "0" )
+set( ECBUILD_PATCH_VERSION "1" )
 
-set( ECBUILD_VERSION_STR  "2.6.0" )
+set( ECBUILD_VERSION_STR  "2.6.1" )
 
 set( ECBUILD_MACRO_VERSION "${ECBUILD_MAJOR_VERSION}.${ECBUILD_MINOR_VERSION}" )
diff --git a/cmake/ecbuild-config-version.cmake b/cmake/ecbuild-config-version.cmake
index 3ca2385..a5e3af1 100644
--- a/cmake/ecbuild-config-version.cmake
+++ b/cmake/ecbuild-config-version.cmake
@@ -1,4 +1,4 @@
-set(PACKAGE_VERSION "2.6.0")
+set(PACKAGE_VERSION "2.6.1")
 
 # check whether the requested PACKAGE_FIND_VERSION is compatible
 
diff --git a/cmake/ecbuild-config.cmake b/cmake/ecbuild-config.cmake
index 1aad5ac..3f65950 100644
--- a/cmake/ecbuild-config.cmake
+++ b/cmake/ecbuild-config.cmake
@@ -28,9 +28,9 @@ set( ECBUILD_TPL_INCLUDE_DIRS  "" )
 set( ECBUILD_TPL_DEFINITIONS   "" )
 set( ECBUILD_TPL_LIBRARIES     "" )
 
-set( ECBUILD_VERSION           "2.6.0" )
-set( ECBUILD_GIT_SHA1          "2967c31ee4768c165e61cab919c370a54dde0772" )
-set( ECBUILD_GIT_SHA1_SHORT    "2967c31" )
+set( ECBUILD_VERSION           "2.6.1" )
+set( ECBUILD_GIT_SHA1          "25fa5e66715cbc38481ea8f8619ee4e89e015e9e" )
+set( ECBUILD_GIT_SHA1_SHORT    "25fa5e6" )
 
 ### export include paths as absolute paths
 
@@ -73,7 +73,7 @@ include( ${CMAKE_CURRENT_LIST_FILE}.tpls OPTIONAL )
 if( NOT ecbuild_BINARY_DIR )
 
   if( ECBUILD_IS_BUILD_DIR_EXPORT )
-    include( "/tmp/metabuilds/ecflow-metab_5062/opensuse131/ecbuild/builds/ecbuild-targets.cmake" OPTIONAL )
+    include( "/tmp/metabuilds/ecflow-metab_5062/leap42/ecbuild/builds/ecbuild-targets.cmake" OPTIONAL )
   else()
     include( "${ECBUILD_CMAKE_DIR}/ecbuild-targets.cmake" )
   endif()
@@ -89,7 +89,7 @@ mark_as_advanced( ECBUILD_IMPORT_FILE )
 
 if( NOT ecbuild )
   if( ECBUILD_IS_BUILD_DIR_EXPORT )
-    set( ecbuild_BASE_DIR /tmp/metabuilds/ecflow-metab_5062/opensuse131/ecbuild/builds )
+    set( ecbuild_BASE_DIR /tmp/metabuilds/ecflow-metab_5062/leap42/ecbuild/builds )
   else()
     get_filename_component( abspath ${CMAKE_CURRENT_LIST_DIR}/../../.. ABSOLUTE )
     set( ecbuild_BASE_DIR ${abspath} )
diff --git a/cmake/ecbuild_check_functions.cmake b/cmake/ecbuild_check_functions.cmake
index 4307429..59fbd3a 100644
--- a/cmake/ecbuild_check_functions.cmake
+++ b/cmake/ecbuild_check_functions.cmake
@@ -96,6 +96,9 @@ if( ENABLE_OS_FUNCTIONS_TEST )
     # test for struct statvfs64
     ecbuild_cache_check_c_source_compiles( "#define _LARGEFILE64_SOURCE\n#include <sys/statvfs.h>\nint main(){ struct statvfs64 v; }" EC_HAVE_STRUCT_STATVFS64 )
 
+    # test for fopencookie
+    ecbuild_cache_check_c_source_compiles( "#define _GNU_SOURCE\n#include <stdio.h>\nint main(){ void* cookie; const char* mode; cookie_io_functions_t iof; FILE* fopencookie(void *cookie, const char *mode, cookie_io_functions_t iof); }" EC_HAVE_FOPENCOOKIE )
+
     # test for fsync
     ecbuild_cache_check_symbol_exists(fsync "unistd.h" EC_HAVE_FSYNC)
     # test for fdatasync
diff --git a/cmake/ecbuild_config.h.in b/cmake/ecbuild_config.h.in
index 2eed359..a7d7d75 100644
--- a/cmake/ecbuild_config.h.in
+++ b/cmake/ecbuild_config.h.in
@@ -44,6 +44,7 @@
 #cmakedefine EC_HAVE_FUNOPEN
 #cmakedefine EC_HAVE_FLOCK
 #cmakedefine EC_HAVE_MMAP
+#cmakedefine EC_HAVE_FOPENCOOKIE
 
 #cmakedefine EC_HAVE_POSIX_MEMALIGN
 
diff --git a/cmake/ecbuild_declare_project.cmake b/cmake/ecbuild_declare_project.cmake
index e2f9cc8..348e2fe 100644
--- a/cmake/ecbuild_declare_project.cmake
+++ b/cmake/ecbuild_declare_project.cmake
@@ -122,12 +122,11 @@ macro( ecbuild_declare_project )
   if( NOT INSTALL_INCLUDE_DIR )
     set( INSTALL_INCLUDE_DIR include )
   endif()
-  if( NOT INSTALL_DATA_DIR )
-    set( INSTALL_DATA_DIR share/${PROJECT_NAME} )
-  endif()
-  if( NOT INSTALL_CMAKE_DIR )
-    set( INSTALL_CMAKE_DIR share/${PROJECT_NAME}/cmake )
-  endif()
+  # INSTALL_DATA_DIR is package specific and needs to be reset for subpackages
+  # in a bundle. Users *cannot* override this directory (ECBUILD-315)
+  set( INSTALL_DATA_DIR share/${PROJECT_NAME} )
+  # share/${PROJECT_NAME}/cmake is a convention - it makes no sense to override it
+  set( INSTALL_CMAKE_DIR share/${PROJECT_NAME}/cmake )
 
   mark_as_advanced( INSTALL_BIN_DIR )
   mark_as_advanced( INSTALL_LIB_DIR )
diff --git a/cmake/ecbuild_find_omp.cmake b/cmake/ecbuild_find_omp.cmake
index ea9da24..15a5b81 100644
--- a/cmake/ecbuild_find_omp.cmake
+++ b/cmake/ecbuild_find_omp.cmake
@@ -155,7 +155,7 @@ macro( ecbuild_find_omp )
           check_cxx_source_compiles("${_SOURCE}" ${_FLAG} )
         endif()
         if( _LANG STREQUAL "Fortran" )
-          check_fortran_source_compiles("${_SOURCE}" ${_FLAG} )
+          check_fortran_source_compiles("${_SOURCE}" ${_FLAG} SRC_EXT f90)
         endif()
         set(CMAKE_REQUIRED_FLAGS "${SAVE_CMAKE_REQUIRED_FLAGS}")
       endif()
diff --git a/cmake/ecbuild_generate_rpc.cmake b/cmake/ecbuild_generate_rpc.cmake
index e475f19..2eb8605 100644
--- a/cmake/ecbuild_generate_rpc.cmake
+++ b/cmake/ecbuild_generate_rpc.cmake
@@ -3,8 +3,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.
+# granted to it by virtue of its status as an intergovernmental organisation
+# nor does it submit to any jurisdiction.
 
 ##############################################################################
 #.rst:
@@ -38,63 +38,61 @@
 
 macro( ecbuild_generate_rpc )
 
-    set( options )
-    set( single_value_args SOURCE TARGET_H TARGET_C )
-    set( multi_value_args DEPENDANT )
+  set( options )
+  set( single_value_args SOURCE TARGET_H TARGET_C )
+  set( multi_value_args DEPENDANT )
 
-    cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
+  cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
-    if(_PAR_UNPARSED_ARGUMENTS)
-      ecbuild_critical("Unknown keywords given to ecbuild_generate_rpc(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
-    endif()
+  if(_PAR_UNPARSED_ARGUMENTS)
+    ecbuild_critical("Unknown keywords given to ecbuild_generate_rpc(): \"${_PAR_UNPARSED_ARGUMENTS}\"")
+  endif()
 
-    if( NOT _PAR_SOURCE  )
-      ecbuild_critical("The call to ecbuild_generate_rpc() doesn't specify the SOURCE file.")
-    endif()
+  if( NOT _PAR_SOURCE  )
+    ecbuild_critical("The call to ecbuild_generate_rpc() doesn't specify the SOURCE file.")
+  endif()
 
-# optional
-#    if( NOT _PAR_DEPENDANT )
-#      ecbuild_critical("The call to ecbuild_generate_rpc() doesn't specify the DEPENDANT files.")
-#    endif()
+  # optional
+  #    if( NOT _PAR_DEPENDANT )
+  #      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 )
-      ecbuild_critical("The call to ecbuild_generate_rpc() doesn't specify the _PAR_TARGET_H or _PAR_TARGET_C files.")
-    endif()
+  if( NOT DEFINED _PAR_TARGET_H AND NOT DEFINED _PAR_TARGET_C )
+    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 )
+  find_package( RPCGEN REQUIRED )
 
-    if( DEFINED _PAR_TARGET_H )
+  if( DEFINED _PAR_TARGET_H )
 
-        add_custom_command(
-          OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_H}
-          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_SOURCE}
-          COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_H}
-          COMMAND ${RPCGEN_EXECUTABLE} -h -o ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_H} ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_SOURCE}
-          DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_SOURCE} )
-
-      if( DEFINED _PAR_DEPENDANT )
-        foreach( file ${_PAR_DEPENDANT} )
-            set_source_files_properties( ${file} PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_H}" )
-        endforeach()
-      endif()
+    add_custom_command(
+      OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_H}
+      COMMAND ${RPCGEN_EXECUTABLE} -h -o ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_H} ${_PAR_SOURCE}
+      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_SOURCE} )
 
+    if( DEFINED _PAR_DEPENDANT )
+      foreach( file ${_PAR_DEPENDANT} )
+        set_source_files_properties( ${file} PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_H}" )
+      endforeach()
     endif()
 
-    if( DEFINED _PAR_TARGET_C )
+  endif()
 
-        add_custom_command(
-          OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_C}
-          COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_SOURCE}
-          COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_C}
-          COMMAND ${RPCGEN_EXECUTABLE} -c -o ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_C} ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_SOURCE}
-          DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_SOURCE} )
+  if( DEFINED _PAR_TARGET_C )
 
-      if( DEFINED _PAR_DEPENDANT )
-        foreach( file ${_PAR_DEPENDANT} )
-            set_source_files_properties( ${file} PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_C}" )
-        endforeach()
-      endif()
+    add_custom_command(
+      OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_C}
+      COMMAND ${RPCGEN_EXECUTABLE} -c -o ${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_C} ${_PAR_SOURCE}
+      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+      DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_SOURCE} )
 
+    if( DEFINED _PAR_DEPENDANT )
+      foreach( file ${_PAR_DEPENDANT} )
+        set_source_files_properties( ${file} PROPERTIES OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${_PAR_TARGET_C}" )
+      endforeach()
     endif()
 
+  endif()
+
 endmacro( ecbuild_generate_rpc )
diff --git a/data/bitmap.diff b/data/bitmap.diff
index 237da36..950e1bd 100644
--- a/data/bitmap.diff
+++ b/data/bitmap.diff
@@ -5,7 +5,7 @@
 ======================   SECTION_1 ( length=52, padding=0 )    ======================
 1-3       section1Length = 52
 4         table2Version = 128
-5         centre = 98 [European Centre for Medium-Range Weather Forecasts (grib1/0.table) ]
+5         centre = 98 [European Centre for Medium-Range Weather Forecasts (common/c-1.table) ]
 6         generatingProcessIdentifier = 130
 7         gridDefinition = 255
 8         section1Flags = 192 [11000000]
diff --git a/data/no_bitmap.diff b/data/no_bitmap.diff
index 72c38b9..fb1ddc4 100644
--- a/data/no_bitmap.diff
+++ b/data/no_bitmap.diff
@@ -5,7 +5,7 @@
 ======================   SECTION_1 ( length=52, padding=0 )    ======================
 1-3       section1Length = 52
 4         table2Version = 128
-5         centre = 98 [European Centre for Medium-Range Weather Forecasts (grib1/0.table) ]
+5         centre = 98 [European Centre for Medium-Range Weather Forecasts (common/c-1.table) ]
 6         generatingProcessIdentifier = 130
 7         gridDefinition = 255
 8         section1Flags = 128 [10000000]
diff --git a/definitions/CMakeLists.txt b/definitions/CMakeLists.txt
index 043ee26..2d6d70e 100644
--- a/definitions/CMakeLists.txt
+++ b/definitions/CMakeLists.txt
@@ -6,14 +6,14 @@ file( GLOB table_files      RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.table" )
 file( GLOB text_files       RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.txt" )
 
 install( FILES ${definition_files} ${table_files} ${text_files}
-         DESTINATION share/${PROJECT_NAME}/definitions
+         DESTINATION ${ECCODES_DEFINITION_SUFF}
          PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ )
 
 install( FILES installDefinitions.sh
-         DESTINATION share/${PROJECT_NAME}/definitions)
+         DESTINATION ${ECCODES_DEFINITION_SUFF})
 
 install(  DIRECTORY budg bufr cdf common grib1 grib2 gts mars metar tide hdf5 wrap
-          DESTINATION share/${PROJECT_NAME}/definitions
+          DESTINATION ${ECCODES_DEFINITION_SUFF}
           FILES_MATCHING 
           PATTERN "*.def"
           PATTERN "*.txt"
@@ -23,18 +23,18 @@ install(  DIRECTORY budg bufr cdf common grib1 grib2 gts mars metar tide hdf5 wr
           PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ )
 
 # link to the definitions. See GRIB-786
-file( MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/share/${PROJECT_NAME} )
-if( NOT EXISTS "${CMAKE_BINARY_DIR}/share/${PROJECT_NAME}/definitions" )
+file( MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${INSTALL_DATA_DIR} )
+if( NOT EXISTS "${CMAKE_BINARY_DIR}/${ECCODES_DEFINITION_SUFF}" )
   execute_process( COMMAND "${CMAKE_COMMAND}" "-E" "create_symlink"
     "${CMAKE_CURRENT_SOURCE_DIR}"
-    "${CMAKE_BINARY_DIR}/share/${PROJECT_NAME}/definitions" )
+    "${CMAKE_BINARY_DIR}/${ECCODES_DEFINITION_SUFF}" )
 endif()
 
 # copy the definitions to the build directory
 #file(    COPY ${definition_files} ${table_files} ${text_files}
-#         DESTINATION ${CMAKE_BINARY_DIR}/share/${PROJECT_NAME}/definitions )
+#         DESTINATION ${CMAKE_BINARY_DIR}/${ECCODES_DEFINITION_SUFF} )
 #file(     COPY budg bufr cdf common grib1 grib2 gts mars metar tide hdf5 wrap
-#          DESTINATION ${CMAKE_BINARY_DIR}/share/${PROJECT_NAME}/definitions
+#          DESTINATION ${CMAKE_BINARY_DIR}/${ECCODES_DEFINITION_SUFF}
 #          FILES_MATCHING
 #          PATTERN "*.def"
 #          PATTERN "*.txt"
diff --git a/definitions/Makefile.am b/definitions/Makefile.am
index 93d3611..886789f 100644
--- a/definitions/Makefile.am
+++ b/definitions/Makefile.am
@@ -8796,6 +8796,8 @@ dist_definitionscdf_DATA = \
 
 definitionscommondir = @ECCODES_DEFINITION_PATH@/common
 dist_definitionscommon_DATA = \
+	common/c-1.table\
+	common/c-11.table\
 	common/statistics_grid.def\
 	common/statistics_spectral.def
 
@@ -8805,7 +8807,6 @@ dist_definitionsgrib1_DATA = \
 	grib1/0.eidb.table\
 	grib1/0.eswi.table\
 	grib1/0.rjtd.table\
-	grib1/0.table\
 	grib1/1.table\
 	grib1/10.table\
 	grib1/11-2.table\
@@ -9173,7 +9174,6 @@ 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\
@@ -9336,6 +9336,7 @@ dist_definitionsgrib2_DATA = \
 	grib2/template.4.55.def\
 	grib2/template.4.56.def\
 	grib2/template.4.57.def\
+	grib2/template.4.58.def\
 	grib2/template.4.59.def\
 	grib2/template.4.6.def\
 	grib2/template.4.60.def\
@@ -9425,13 +9426,6 @@ 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\
diff --git a/definitions/budg/section.1.def b/definitions/budg/section.1.def
index d7d7c85..8d6a3f3 100644
--- a/definitions/budg/section.1.def
+++ b/definitions/budg/section.1.def
@@ -10,7 +10,7 @@
 section_length[3] section1Length ;
 
 unsigned[1] gribTablesVersionNo ;
-codetable[1] centre 'grib1/0.table' : string_type;
+codetable[1] centre 'common/c-1.table' : string_type;
 
 alias ls.centre=centre;
 alias identificationOfOriginatingGeneratingCentre=centre;
diff --git a/definitions/bufr/old_section.1.def b/definitions/bufr/old_section.1.def
index bb4299c..999469d 100644
--- a/definitions/bufr/old_section.1.def
+++ b/definitions/bufr/old_section.1.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-codetable[2] originatingCentrer            'grib1/0.table' : dump;
+codetable[2] originatingCentre  'common/c-1.table' : dump;
 unsigned[1]  updateSequenceNumber;
 
 flags[1]     section1Flags 'bufr/section1_flags.table' = 128 : hidden ; # = section 2 present
diff --git a/definitions/bufr/section.1.1.def b/definitions/bufr/section.1.1.def
index 82e4842..d40fdf3 100644
--- a/definitions/bufr/section.1.1.def
+++ b/definitions/bufr/section.1.1.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-codetable[2] bufrHeaderCentre            'grib1/0.table' : dump;
+codetable[2] bufrHeaderCentre 'common/c-1.table' : dump;
 unsigned[1]  updateSequenceNumber;
 
 flags[1]     section1Flags 'bufr/section1_flags.table' = 128 : hidden ; # = section 2 present
diff --git a/definitions/bufr/section.1.2.def b/definitions/bufr/section.1.2.def
index b7a23da..bcd64b9 100644
--- a/definitions/bufr/section.1.2.def
+++ b/definitions/bufr/section.1.2.def
@@ -13,7 +13,7 @@ section_length[3] section1Length ;
 
 unsigned[1]  masterTableNumber;
 
-codetable[2] bufrHeaderCentre            'grib1/0.table' : dump;
+codetable[2] bufrHeaderCentre 'common/c-1.table' : dump;
 
 unsigned[1]  updateSequenceNumber;
 
diff --git a/definitions/bufr/section.1.3.def b/definitions/bufr/section.1.3.def
index 527b028..c24f9d3 100644
--- a/definitions/bufr/section.1.3.def
+++ b/definitions/bufr/section.1.3.def
@@ -13,8 +13,8 @@ section_length[3] section1Length ;
 
 unsigned[1]  masterTableNumber :dump;
 
-codetable[1] bufrHeaderSubCentre 'grib1/0.table' : dump;
-unsigned[1] bufrHeaderCentre            : dump;
+codetable[1] bufrHeaderSubCentre 'common/c-1.table' : dump;
+codetable[1] bufrHeaderCentre    'common/c-1.table' : dump;
 
 unsigned[1]  updateSequenceNumber :dump;
 
diff --git a/definitions/bufr/section.1.4.def b/definitions/bufr/section.1.4.def
index 78db20b..a85aadd 100644
--- a/definitions/bufr/section.1.4.def
+++ b/definitions/bufr/section.1.4.def
@@ -13,8 +13,8 @@ section_length[3] section1Length ;
 
 unsigned[1]  masterTableNumber : dump ;
 
-codetable[2] bufrHeaderCentre 							'grib1/0.table' : dump;
-unsigned[2] bufrHeaderSubCentre            : dump;
+codetable[2] bufrHeaderCentre   'common/c-11.table' : dump;
+unsigned[2]  bufrHeaderSubCentre : dump;
 alias ls.centre=bufrHeaderCentre;
 
 unsigned[1]  updateSequenceNumber : dump;
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/1003.table b/definitions/bufr/tables/0/wmo/latest/codetables/1003.table
new file mode 100644
index 0000000..a0c90ee
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/10063.table b/definitions/bufr/tables/0/wmo/latest/codetables/10063.table
new file mode 100644
index 0000000..5097874
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/10064.table b/definitions/bufr/tables/0/wmo/latest/codetables/10064.table
new file mode 100644
index 0000000..88ba38a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1007.table b/definitions/bufr/tables/0/wmo/latest/codetables/1007.table
new file mode 100644
index 0000000..7b15c1d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/1007.table
@@ -0,0 +1,200 @@
+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
+62 62 SENTINEL 1A
+63 63 SENTINEL 1B
+64 64 SENTINEL 5P
+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
+225 225 NOAA 20
+226 226 NOAA 21
+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
+270 270 GOES 16
+271 271 GOES 17
+272 272 GOES 18
+273 273 GOES 19
+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
+523 523 FY-3D
+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
+812 812 SCISAT-1
+813 813 ODIN
+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/latest/codetables/1024.table b/definitions/bufr/tables/0/wmo/latest/codetables/1024.table
new file mode 100644
index 0000000..cdc9e24
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1028.table b/definitions/bufr/tables/0/wmo/latest/codetables/1028.table
new file mode 100644
index 0000000..18f8206
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1029.table b/definitions/bufr/tables/0/wmo/latest/codetables/1029.table
new file mode 100644
index 0000000..d63d07e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1033.table b/definitions/bufr/tables/0/wmo/latest/codetables/1033.table
new file mode 100644
index 0000000..6006582
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1034.table b/definitions/bufr/tables/0/wmo/latest/codetables/1034.table
new file mode 100644
index 0000000..fface93
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1036.table b/definitions/bufr/tables/0/wmo/latest/codetables/1036.table
new file mode 100644
index 0000000..e7e4045
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1038.table b/definitions/bufr/tables/0/wmo/latest/codetables/1038.table
new file mode 100644
index 0000000..2eee38b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1052.table b/definitions/bufr/tables/0/wmo/latest/codetables/1052.table
new file mode 100644
index 0000000..b8e14ed
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1090.table b/definitions/bufr/tables/0/wmo/latest/codetables/1090.table
new file mode 100644
index 0000000..55f7ca2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1092.table b/definitions/bufr/tables/0/wmo/latest/codetables/1092.table
new file mode 100644
index 0000000..dc9bf1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1101.table b/definitions/bufr/tables/0/wmo/latest/codetables/1101.table
new file mode 100644
index 0000000..21e0cf5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/11030.table b/definitions/bufr/tables/0/wmo/latest/codetables/11030.table
new file mode 100644
index 0000000..253b8fc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/11031.table b/definitions/bufr/tables/0/wmo/latest/codetables/11031.table
new file mode 100644
index 0000000..7bece1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/11037.table b/definitions/bufr/tables/0/wmo/latest/codetables/11037.table
new file mode 100644
index 0000000..423eef7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/11038.table b/definitions/bufr/tables/0/wmo/latest/codetables/11038.table
new file mode 100644
index 0000000..f0c5cce
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/11039.table b/definitions/bufr/tables/0/wmo/latest/codetables/11039.table
new file mode 100644
index 0000000..c2abbda
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/1150.table b/definitions/bufr/tables/0/wmo/latest/codetables/1150.table
new file mode 100644
index 0000000..05fe4b3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/1150.table
@@ -0,0 +1,6 @@
+0 0 WGS84, AS USED BY ICAO SINCE 1998
+1 1 ETRS89, AS DEFINED BY EPSG::4258
+2 2 NAD83, AS DEFINED BY EPSG::4269
+3 3 DHDN, AS DEFINED BY EPSG::4314
+4 4 ELLIPSOIDAL DATUM USING THE INTERNATIONAL REFERENCE MERIDIAN MAINTAINED BY THE INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
+65535 65535 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/1151.table b/definitions/bufr/tables/0/wmo/latest/codetables/1151.table
new file mode 100644
index 0000000..8907f23
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/1151.table
@@ -0,0 +1,3 @@
+0 0 EARTH GRAVITATIONAL MODEL 1996
+1 1 BALTIC HEIGHT SYSTEM 1977
+4095 4095 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/13038.table b/definitions/bufr/tables/0/wmo/latest/codetables/13038.table
new file mode 100644
index 0000000..19bc422
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/13039.table b/definitions/bufr/tables/0/wmo/latest/codetables/13039.table
new file mode 100644
index 0000000..c070b1d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/13040.table b/definitions/bufr/tables/0/wmo/latest/codetables/13040.table
new file mode 100644
index 0000000..30c08bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/13041.table b/definitions/bufr/tables/0/wmo/latest/codetables/13041.table
new file mode 100644
index 0000000..9e77b64
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/13051.table b/definitions/bufr/tables/0/wmo/latest/codetables/13051.table
new file mode 100644
index 0000000..4bdb73e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/13056.table b/definitions/bufr/tables/0/wmo/latest/codetables/13056.table
new file mode 100644
index 0000000..448c269
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/13057.table b/definitions/bufr/tables/0/wmo/latest/codetables/13057.table
new file mode 100644
index 0000000..6dfa18d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/15025.table b/definitions/bufr/tables/0/wmo/latest/codetables/15025.table
new file mode 100644
index 0000000..6bb6ed5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19001.table b/definitions/bufr/tables/0/wmo/latest/codetables/19001.table
new file mode 100644
index 0000000..af893eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19008.table b/definitions/bufr/tables/0/wmo/latest/codetables/19008.table
new file mode 100644
index 0000000..3bcb519
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19010.table b/definitions/bufr/tables/0/wmo/latest/codetables/19010.table
new file mode 100644
index 0000000..b091d96
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19100.table b/definitions/bufr/tables/0/wmo/latest/codetables/19100.table
new file mode 100644
index 0000000..1f03a6f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19101.table b/definitions/bufr/tables/0/wmo/latest/codetables/19101.table
new file mode 100644
index 0000000..0cd1ff4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19102.table b/definitions/bufr/tables/0/wmo/latest/codetables/19102.table
new file mode 100644
index 0000000..21ab775
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19103.table b/definitions/bufr/tables/0/wmo/latest/codetables/19103.table
new file mode 100644
index 0000000..3abb184
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19104.table b/definitions/bufr/tables/0/wmo/latest/codetables/19104.table
new file mode 100644
index 0000000..67ae474
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19105.table b/definitions/bufr/tables/0/wmo/latest/codetables/19105.table
new file mode 100644
index 0000000..becfcee
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19107.table b/definitions/bufr/tables/0/wmo/latest/codetables/19107.table
new file mode 100644
index 0000000..ed6b79c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19108.table b/definitions/bufr/tables/0/wmo/latest/codetables/19108.table
new file mode 100644
index 0000000..9350bc2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19109.table b/definitions/bufr/tables/0/wmo/latest/codetables/19109.table
new file mode 100644
index 0000000..e3c9c05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19110.table b/definitions/bufr/tables/0/wmo/latest/codetables/19110.table
new file mode 100644
index 0000000..81f4f59
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19113.table b/definitions/bufr/tables/0/wmo/latest/codetables/19113.table
new file mode 100644
index 0000000..ba46dca
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19117.table b/definitions/bufr/tables/0/wmo/latest/codetables/19117.table
new file mode 100644
index 0000000..b623197
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/19119.table b/definitions/bufr/tables/0/wmo/latest/codetables/19119.table
new file mode 100644
index 0000000..8329a8a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20003.table b/definitions/bufr/tables/0/wmo/latest/codetables/20003.table
new file mode 100644
index 0000000..0ebc7c7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20004.table b/definitions/bufr/tables/0/wmo/latest/codetables/20004.table
new file mode 100644
index 0000000..6d6e7da
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20005.table b/definitions/bufr/tables/0/wmo/latest/codetables/20005.table
new file mode 100644
index 0000000..6d6e7da
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20006.table b/definitions/bufr/tables/0/wmo/latest/codetables/20006.table
new file mode 100644
index 0000000..a250af9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20008.table b/definitions/bufr/tables/0/wmo/latest/codetables/20008.table
new file mode 100644
index 0000000..966bcc2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20009.table b/definitions/bufr/tables/0/wmo/latest/codetables/20009.table
new file mode 100644
index 0000000..f0119eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2001.table b/definitions/bufr/tables/0/wmo/latest/codetables/2001.table
new file mode 100644
index 0000000..470fccc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20011.table b/definitions/bufr/tables/0/wmo/latest/codetables/20011.table
new file mode 100644
index 0000000..06c6e10
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20012.table b/definitions/bufr/tables/0/wmo/latest/codetables/20012.table
new file mode 100644
index 0000000..99bdc17
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20017.table b/definitions/bufr/tables/0/wmo/latest/codetables/20017.table
new file mode 100644
index 0000000..5ec10bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20018.table b/definitions/bufr/tables/0/wmo/latest/codetables/20018.table
new file mode 100644
index 0000000..c0ffc36
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2002.table b/definitions/bufr/tables/0/wmo/latest/codetables/2002.table
new file mode 100644
index 0000000..a701e1e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20021.table b/definitions/bufr/tables/0/wmo/latest/codetables/20021.table
new file mode 100644
index 0000000..747a759
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20022.table b/definitions/bufr/tables/0/wmo/latest/codetables/20022.table
new file mode 100644
index 0000000..a551aac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20023.table b/definitions/bufr/tables/0/wmo/latest/codetables/20023.table
new file mode 100644
index 0000000..97670df
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20024.table b/definitions/bufr/tables/0/wmo/latest/codetables/20024.table
new file mode 100644
index 0000000..13aba87
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20025.table b/definitions/bufr/tables/0/wmo/latest/codetables/20025.table
new file mode 100644
index 0000000..4d70e33
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20026.table b/definitions/bufr/tables/0/wmo/latest/codetables/20026.table
new file mode 100644
index 0000000..2852094
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20027.table b/definitions/bufr/tables/0/wmo/latest/codetables/20027.table
new file mode 100644
index 0000000..c337f16
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20028.table b/definitions/bufr/tables/0/wmo/latest/codetables/20028.table
new file mode 100644
index 0000000..6b701a2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20029.table b/definitions/bufr/tables/0/wmo/latest/codetables/20029.table
new file mode 100644
index 0000000..8b46da8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2003.table b/definitions/bufr/tables/0/wmo/latest/codetables/2003.table
new file mode 100644
index 0000000..e0aa923
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20032.table b/definitions/bufr/tables/0/wmo/latest/codetables/20032.table
new file mode 100644
index 0000000..fd37c1e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20033.table b/definitions/bufr/tables/0/wmo/latest/codetables/20033.table
new file mode 100644
index 0000000..8178733
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20034.table b/definitions/bufr/tables/0/wmo/latest/codetables/20034.table
new file mode 100644
index 0000000..668e916
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20035.table b/definitions/bufr/tables/0/wmo/latest/codetables/20035.table
new file mode 100644
index 0000000..07a4a02
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20036.table b/definitions/bufr/tables/0/wmo/latest/codetables/20036.table
new file mode 100644
index 0000000..b4cc874
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20037.table b/definitions/bufr/tables/0/wmo/latest/codetables/20037.table
new file mode 100644
index 0000000..474eeaa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2004.table b/definitions/bufr/tables/0/wmo/latest/codetables/2004.table
new file mode 100644
index 0000000..a55de6c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20040.table b/definitions/bufr/tables/0/wmo/latest/codetables/20040.table
new file mode 100644
index 0000000..889393b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20041.table b/definitions/bufr/tables/0/wmo/latest/codetables/20041.table
new file mode 100644
index 0000000..fc57120
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20042.table b/definitions/bufr/tables/0/wmo/latest/codetables/20042.table
new file mode 100644
index 0000000..2493af7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20045.table b/definitions/bufr/tables/0/wmo/latest/codetables/20045.table
new file mode 100644
index 0000000..91ae63f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20048.table b/definitions/bufr/tables/0/wmo/latest/codetables/20048.table
new file mode 100644
index 0000000..4a54882
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20050.table b/definitions/bufr/tables/0/wmo/latest/codetables/20050.table
new file mode 100644
index 0000000..3f8654e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20055.table b/definitions/bufr/tables/0/wmo/latest/codetables/20055.table
new file mode 100644
index 0000000..ea06427
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20056.table b/definitions/bufr/tables/0/wmo/latest/codetables/20056.table
new file mode 100644
index 0000000..d493792
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20062.table b/definitions/bufr/tables/0/wmo/latest/codetables/20062.table
new file mode 100644
index 0000000..24d96c4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20063.table b/definitions/bufr/tables/0/wmo/latest/codetables/20063.table
new file mode 100644
index 0000000..90ce1c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2007.table b/definitions/bufr/tables/0/wmo/latest/codetables/2007.table
new file mode 100644
index 0000000..05b4c6b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20071.table b/definitions/bufr/tables/0/wmo/latest/codetables/20071.table
new file mode 100644
index 0000000..72367bf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20085.table b/definitions/bufr/tables/0/wmo/latest/codetables/20085.table
new file mode 100644
index 0000000..f929e87
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20086.table b/definitions/bufr/tables/0/wmo/latest/codetables/20086.table
new file mode 100644
index 0000000..b543330
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20087.table b/definitions/bufr/tables/0/wmo/latest/codetables/20087.table
new file mode 100644
index 0000000..ee7971a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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 26% 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/latest/codetables/20089.table b/definitions/bufr/tables/0/wmo/latest/codetables/20089.table
new file mode 100644
index 0000000..f616c62
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20090.table b/definitions/bufr/tables/0/wmo/latest/codetables/20090.table
new file mode 100644
index 0000000..d13502e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20101.table b/definitions/bufr/tables/0/wmo/latest/codetables/20101.table
new file mode 100644
index 0000000..abe89f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20102.table b/definitions/bufr/tables/0/wmo/latest/codetables/20102.table
new file mode 100644
index 0000000..6a53039
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20103.table b/definitions/bufr/tables/0/wmo/latest/codetables/20103.table
new file mode 100644
index 0000000..9c4f689
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20104.table b/definitions/bufr/tables/0/wmo/latest/codetables/20104.table
new file mode 100644
index 0000000..15ca8ac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20105.table b/definitions/bufr/tables/0/wmo/latest/codetables/20105.table
new file mode 100644
index 0000000..b7406c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20106.table b/definitions/bufr/tables/0/wmo/latest/codetables/20106.table
new file mode 100644
index 0000000..2a8c4a0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20107.table b/definitions/bufr/tables/0/wmo/latest/codetables/20107.table
new file mode 100644
index 0000000..0bea30a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20108.table b/definitions/bufr/tables/0/wmo/latest/codetables/20108.table
new file mode 100644
index 0000000..4404614
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2011.table b/definitions/bufr/tables/0/wmo/latest/codetables/2011.table
new file mode 100644
index 0000000..7eeb67d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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 METEOLABOR SRS-C50/ARGUS (SWITZERLAND)
+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 VAISALA RS90/AUTOSONDE (FINLAND)
+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/latest/codetables/20119.table b/definitions/bufr/tables/0/wmo/latest/codetables/20119.table
new file mode 100644
index 0000000..4a4b40f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20124.table b/definitions/bufr/tables/0/wmo/latest/codetables/20124.table
new file mode 100644
index 0000000..f78eacb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2013.table b/definitions/bufr/tables/0/wmo/latest/codetables/2013.table
new file mode 100644
index 0000000..91ce650
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2013.table
@@ -0,0 +1,11 @@
+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
+8 8 SOLAR AND INFRARED CORRECTED AS SPECIFIED BY GRUAN
+9 9 SOLAR CORRECTED AS SPECIFIED BY GRUAN
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/20136.table b/definitions/bufr/tables/0/wmo/latest/codetables/20136.table
new file mode 100644
index 0000000..0369f5d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20137.table b/definitions/bufr/tables/0/wmo/latest/codetables/20137.table
new file mode 100644
index 0000000..adda880
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/20138.table b/definitions/bufr/tables/0/wmo/latest/codetables/20138.table
new file mode 100644
index 0000000..ed9b315
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2014.table b/definitions/bufr/tables/0/wmo/latest/codetables/2014.table
new file mode 100644
index 0000000..bc5c5fc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2015.table b/definitions/bufr/tables/0/wmo/latest/codetables/2015.table
new file mode 100644
index 0000000..7b0ccaf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2016.table b/definitions/bufr/tables/0/wmo/latest/codetables/2016.table
new file mode 100644
index 0000000..4a30226
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2017.table b/definitions/bufr/tables/0/wmo/latest/codetables/2017.table
new file mode 100644
index 0000000..7fac2e1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2017.table
@@ -0,0 +1,6 @@
+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
+7 7 GRUAN SOLAR RADIATION AND TIME LAG CORRECTION
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2019.table b/definitions/bufr/tables/0/wmo/latest/codetables/2019.table
new file mode 100644
index 0000000..8e7586d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2019.table
@@ -0,0 +1,331 @@
+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
+92 92 ACE-FTS
+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
+151 151 SAR-C
+152 152 SW
+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
+959 959 SMR
+2047 2047 
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2020.table b/definitions/bufr/tables/0/wmo/latest/codetables/2020.table
new file mode 100644
index 0000000..fc19e6d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2021.table b/definitions/bufr/tables/0/wmo/latest/codetables/2021.table
new file mode 100644
index 0000000..b95fdc9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2022.table b/definitions/bufr/tables/0/wmo/latest/codetables/2022.table
new file mode 100644
index 0000000..5068e7f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2023.table b/definitions/bufr/tables/0/wmo/latest/codetables/2023.table
new file mode 100644
index 0000000..be7eb84
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2024.table b/definitions/bufr/tables/0/wmo/latest/codetables/2024.table
new file mode 100644
index 0000000..00ec80e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2025.table b/definitions/bufr/tables/0/wmo/latest/codetables/2025.table
new file mode 100644
index 0000000..64dc018
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2030.table b/definitions/bufr/tables/0/wmo/latest/codetables/2030.table
new file mode 100644
index 0000000..2777bbc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2031.table b/definitions/bufr/tables/0/wmo/latest/codetables/2031.table
new file mode 100644
index 0000000..a96b857
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2032.table b/definitions/bufr/tables/0/wmo/latest/codetables/2032.table
new file mode 100644
index 0000000..7e9310d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2033.table b/definitions/bufr/tables/0/wmo/latest/codetables/2033.table
new file mode 100644
index 0000000..8215be0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2034.table b/definitions/bufr/tables/0/wmo/latest/codetables/2034.table
new file mode 100644
index 0000000..06cdd52
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2036.table b/definitions/bufr/tables/0/wmo/latest/codetables/2036.table
new file mode 100644
index 0000000..7782d30
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2037.table b/definitions/bufr/tables/0/wmo/latest/codetables/2037.table
new file mode 100644
index 0000000..729c40e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2038.table b/definitions/bufr/tables/0/wmo/latest/codetables/2038.table
new file mode 100644
index 0000000..458f141
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2039.table b/definitions/bufr/tables/0/wmo/latest/codetables/2039.table
new file mode 100644
index 0000000..0a94982
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2040.table b/definitions/bufr/tables/0/wmo/latest/codetables/2040.table
new file mode 100644
index 0000000..78b2917
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2041.table b/definitions/bufr/tables/0/wmo/latest/codetables/2041.table
new file mode 100644
index 0000000..ef5bf86
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2042.table b/definitions/bufr/tables/0/wmo/latest/codetables/2042.table
new file mode 100644
index 0000000..eb2445b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2044.table b/definitions/bufr/tables/0/wmo/latest/codetables/2044.table
new file mode 100644
index 0000000..0e10ed8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2045.table b/definitions/bufr/tables/0/wmo/latest/codetables/2045.table
new file mode 100644
index 0000000..374e4f2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2046.table b/definitions/bufr/tables/0/wmo/latest/codetables/2046.table
new file mode 100644
index 0000000..57fb9d6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2047.table b/definitions/bufr/tables/0/wmo/latest/codetables/2047.table
new file mode 100644
index 0000000..8213931
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2048.table b/definitions/bufr/tables/0/wmo/latest/codetables/2048.table
new file mode 100644
index 0000000..d7cb2ef
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2049.table b/definitions/bufr/tables/0/wmo/latest/codetables/2049.table
new file mode 100644
index 0000000..ade5cac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2050.table b/definitions/bufr/tables/0/wmo/latest/codetables/2050.table
new file mode 100644
index 0000000..fbcce61
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2051.table b/definitions/bufr/tables/0/wmo/latest/codetables/2051.table
new file mode 100644
index 0000000..3524ae7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2052.table b/definitions/bufr/tables/0/wmo/latest/codetables/2052.table
new file mode 100644
index 0000000..8b6262c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2053.table b/definitions/bufr/tables/0/wmo/latest/codetables/2053.table
new file mode 100644
index 0000000..03e5e29
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2054.table b/definitions/bufr/tables/0/wmo/latest/codetables/2054.table
new file mode 100644
index 0000000..0995688
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2055.table b/definitions/bufr/tables/0/wmo/latest/codetables/2055.table
new file mode 100644
index 0000000..ce06f00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2056.table b/definitions/bufr/tables/0/wmo/latest/codetables/2056.table
new file mode 100644
index 0000000..86eb983
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2057.table b/definitions/bufr/tables/0/wmo/latest/codetables/2057.table
new file mode 100644
index 0000000..681e6bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2058.table b/definitions/bufr/tables/0/wmo/latest/codetables/2058.table
new file mode 100644
index 0000000..6c45eda
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2059.table b/definitions/bufr/tables/0/wmo/latest/codetables/2059.table
new file mode 100644
index 0000000..8f089d3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2060.table b/definitions/bufr/tables/0/wmo/latest/codetables/2060.table
new file mode 100644
index 0000000..6f84698
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2061.table b/definitions/bufr/tables/0/wmo/latest/codetables/2061.table
new file mode 100644
index 0000000..592d51e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2062.table b/definitions/bufr/tables/0/wmo/latest/codetables/2062.table
new file mode 100644
index 0000000..2d0f4e2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2064.table b/definitions/bufr/tables/0/wmo/latest/codetables/2064.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2066.table b/definitions/bufr/tables/0/wmo/latest/codetables/2066.table
new file mode 100644
index 0000000..a3865dc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2070.table b/definitions/bufr/tables/0/wmo/latest/codetables/2070.table
new file mode 100644
index 0000000..5a098ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2080.table b/definitions/bufr/tables/0/wmo/latest/codetables/2080.table
new file mode 100644
index 0000000..c68a39d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2081.table b/definitions/bufr/tables/0/wmo/latest/codetables/2081.table
new file mode 100644
index 0000000..dfe9551
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2081.table
@@ -0,0 +1,11 @@
+0 0 GP26
+1 1 GP28
+2 2 GP30
+3 3 HM26
+4 4 HM28
+5 5 HM30
+6 6 SV16
+7 7 TOTEX TA TYPE BALLOONS
+8 8 TOTEX TX TYPE BALLOONS
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2083.table b/definitions/bufr/tables/0/wmo/latest/codetables/2083.table
new file mode 100644
index 0000000..611c5bf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2083.table
@@ -0,0 +1,7 @@
+0 0 HIGH BAY
+1 1 LOW BAY
+2 2 BALLOON-INFLATED LAUNCH SYSTEM (BILS)
+3 3 ROOF-TOP BILS
+4 4 AUTOMATED UNMANNED SOUNDING SYSTEM
+14 14 OTHER
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2084.table b/definitions/bufr/tables/0/wmo/latest/codetables/2084.table
new file mode 100644
index 0000000..be6430a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2095.table b/definitions/bufr/tables/0/wmo/latest/codetables/2095.table
new file mode 100644
index 0000000..580fe93
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2096.table b/definitions/bufr/tables/0/wmo/latest/codetables/2096.table
new file mode 100644
index 0000000..9f1b102
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2096.table
@@ -0,0 +1,9 @@
+0 0 ROD THERMISTOR
+1 1 BEAD THERMISTOR
+2 2 CAPACITANCE BEAD
+3 3 CAPACITANCE WIRE
+4 4 RESISTIVE SENSOR
+5 5 CHIP THERMISTOR
+6 6 MERCURY
+7 7 ALCOHOL/GLYCOL
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2097.table b/definitions/bufr/tables/0/wmo/latest/codetables/2097.table
new file mode 100644
index 0000000..3f6b471
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2097.table
@@ -0,0 +1,26 @@
+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
+10 10 PSYCHROMETER
+11 11 CAPACITIVE (POLYMER)
+12 12 CAPACITIVE (CERAMIC, INCL. METAL OXIDE)
+13 13 RESISTIVE (GENERIC)
+14 14 RESISTIVE (SALT POLYMER)
+15 15 RESISTIVE (CONDUCTIVE POLYMER)
+16 16 THERMAL CONDUCTIVITY
+17 17 GRAVIMETRIC
+18 18 PAPER-METAL COIL
+19 19 ORDINARY HUMAN HAIR
+20 20 ROLLED HAIR (TORSION)
+21 21 GOLDBEATER'S SKIN
+22 22 CHILLED MIRROR HYGROMETER
+23 23 DEW CELL
+24 24 OPTICAL ABSORPTION SENSOR
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2099.table b/definitions/bufr/tables/0/wmo/latest/codetables/2099.table
new file mode 100644
index 0000000..74cb817
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2101.table b/definitions/bufr/tables/0/wmo/latest/codetables/2101.table
new file mode 100644
index 0000000..efdb3ec
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2103.table b/definitions/bufr/tables/0/wmo/latest/codetables/2103.table
new file mode 100644
index 0000000..417d2c9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2103.table
@@ -0,0 +1 @@
+1 1 RADAR ANTENNA IS PROTECTED BY A RADOME
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2104.table b/definitions/bufr/tables/0/wmo/latest/codetables/2104.table
new file mode 100644
index 0000000..e39a153
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21066.table b/definitions/bufr/tables/0/wmo/latest/codetables/21066.table
new file mode 100644
index 0000000..9bcafea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21067.table b/definitions/bufr/tables/0/wmo/latest/codetables/21067.table
new file mode 100644
index 0000000..a0ed399
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21068.table b/definitions/bufr/tables/0/wmo/latest/codetables/21068.table
new file mode 100644
index 0000000..102171f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21069.table b/definitions/bufr/tables/0/wmo/latest/codetables/21069.table
new file mode 100644
index 0000000..320890a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21070.table b/definitions/bufr/tables/0/wmo/latest/codetables/21070.table
new file mode 100644
index 0000000..669655f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21072.table b/definitions/bufr/tables/0/wmo/latest/codetables/21072.table
new file mode 100644
index 0000000..99e4b1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21073.table b/definitions/bufr/tables/0/wmo/latest/codetables/21073.table
new file mode 100644
index 0000000..9538fa5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21076.table b/definitions/bufr/tables/0/wmo/latest/codetables/21076.table
new file mode 100644
index 0000000..bc52ac5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21109.table b/definitions/bufr/tables/0/wmo/latest/codetables/21109.table
new file mode 100644
index 0000000..deb577a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21115.table b/definitions/bufr/tables/0/wmo/latest/codetables/21115.table
new file mode 100644
index 0000000..9e90133
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21116.table b/definitions/bufr/tables/0/wmo/latest/codetables/21116.table
new file mode 100644
index 0000000..10b5c53
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21119.table b/definitions/bufr/tables/0/wmo/latest/codetables/21119.table
new file mode 100644
index 0000000..e17e3c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21144.table b/definitions/bufr/tables/0/wmo/latest/codetables/21144.table
new file mode 100644
index 0000000..1f082e6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/21144.table
@@ -0,0 +1 @@
+1 1 RAIN
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/21148.table b/definitions/bufr/tables/0/wmo/latest/codetables/21148.table
new file mode 100644
index 0000000..11413ed
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2115.table b/definitions/bufr/tables/0/wmo/latest/codetables/2115.table
new file mode 100644
index 0000000..c7e866c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21150.table b/definitions/bufr/tables/0/wmo/latest/codetables/21150.table
new file mode 100644
index 0000000..8510046
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21155.table b/definitions/bufr/tables/0/wmo/latest/codetables/21155.table
new file mode 100644
index 0000000..a7837cf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21158.table b/definitions/bufr/tables/0/wmo/latest/codetables/21158.table
new file mode 100644
index 0000000..dd53c51
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21159.table b/definitions/bufr/tables/0/wmo/latest/codetables/21159.table
new file mode 100644
index 0000000..1703f9b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/21169.table b/definitions/bufr/tables/0/wmo/latest/codetables/21169.table
new file mode 100644
index 0000000..9b93444
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2119.table b/definitions/bufr/tables/0/wmo/latest/codetables/2119.table
new file mode 100644
index 0000000..0640af6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2131.table b/definitions/bufr/tables/0/wmo/latest/codetables/2131.table
new file mode 100644
index 0000000..f4336ef
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2131.table
@@ -0,0 +1 @@
+1 1 STC OPERATIONAL
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2137.table b/definitions/bufr/tables/0/wmo/latest/codetables/2137.table
new file mode 100644
index 0000000..40d33fd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2138.table b/definitions/bufr/tables/0/wmo/latest/codetables/2138.table
new file mode 100644
index 0000000..a574506
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2139.table b/definitions/bufr/tables/0/wmo/latest/codetables/2139.table
new file mode 100644
index 0000000..f6cf802
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2143.table b/definitions/bufr/tables/0/wmo/latest/codetables/2143.table
new file mode 100644
index 0000000..975d068
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2144.table b/definitions/bufr/tables/0/wmo/latest/codetables/2144.table
new file mode 100644
index 0000000..5b0f37b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2145.table b/definitions/bufr/tables/0/wmo/latest/codetables/2145.table
new file mode 100644
index 0000000..1944e69
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2146.table b/definitions/bufr/tables/0/wmo/latest/codetables/2146.table
new file mode 100644
index 0000000..871b357
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2147.table b/definitions/bufr/tables/0/wmo/latest/codetables/2147.table
new file mode 100644
index 0000000..4ff1c92
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2148.table b/definitions/bufr/tables/0/wmo/latest/codetables/2148.table
new file mode 100644
index 0000000..7d8ca51
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2149.table b/definitions/bufr/tables/0/wmo/latest/codetables/2149.table
new file mode 100644
index 0000000..04638d2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2150.table b/definitions/bufr/tables/0/wmo/latest/codetables/2150.table
new file mode 100644
index 0000000..8193b57
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2151.table b/definitions/bufr/tables/0/wmo/latest/codetables/2151.table
new file mode 100644
index 0000000..45c80df
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2152.table b/definitions/bufr/tables/0/wmo/latest/codetables/2152.table
new file mode 100644
index 0000000..880c384
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2158.table b/definitions/bufr/tables/0/wmo/latest/codetables/2158.table
new file mode 100644
index 0000000..97c4449
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2159.table b/definitions/bufr/tables/0/wmo/latest/codetables/2159.table
new file mode 100644
index 0000000..63cb87c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2160.table b/definitions/bufr/tables/0/wmo/latest/codetables/2160.table
new file mode 100644
index 0000000..fd7f372
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2163.table b/definitions/bufr/tables/0/wmo/latest/codetables/2163.table
new file mode 100644
index 0000000..8cac631
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2164.table b/definitions/bufr/tables/0/wmo/latest/codetables/2164.table
new file mode 100644
index 0000000..01dc970
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2165.table b/definitions/bufr/tables/0/wmo/latest/codetables/2165.table
new file mode 100644
index 0000000..628be0e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2166.table b/definitions/bufr/tables/0/wmo/latest/codetables/2166.table
new file mode 100644
index 0000000..efac38f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2167.table b/definitions/bufr/tables/0/wmo/latest/codetables/2167.table
new file mode 100644
index 0000000..acb2f9d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2169.table b/definitions/bufr/tables/0/wmo/latest/codetables/2169.table
new file mode 100644
index 0000000..bd31667
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2170.table b/definitions/bufr/tables/0/wmo/latest/codetables/2170.table
new file mode 100644
index 0000000..05bab00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2172.table b/definitions/bufr/tables/0/wmo/latest/codetables/2172.table
new file mode 100644
index 0000000..3c3641a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2175.table b/definitions/bufr/tables/0/wmo/latest/codetables/2175.table
new file mode 100644
index 0000000..2cf2a3d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2176.table b/definitions/bufr/tables/0/wmo/latest/codetables/2176.table
new file mode 100644
index 0000000..2c27a6f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2177.table b/definitions/bufr/tables/0/wmo/latest/codetables/2177.table
new file mode 100644
index 0000000..e7bb67a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2178.table b/definitions/bufr/tables/0/wmo/latest/codetables/2178.table
new file mode 100644
index 0000000..f4f8b59
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2179.table b/definitions/bufr/tables/0/wmo/latest/codetables/2179.table
new file mode 100644
index 0000000..9e9ba18
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2180.table b/definitions/bufr/tables/0/wmo/latest/codetables/2180.table
new file mode 100644
index 0000000..0b21b2c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2181.table b/definitions/bufr/tables/0/wmo/latest/codetables/2181.table
new file mode 100644
index 0000000..5096dc4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2182.table b/definitions/bufr/tables/0/wmo/latest/codetables/2182.table
new file mode 100644
index 0000000..4ffab26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2183.table b/definitions/bufr/tables/0/wmo/latest/codetables/2183.table
new file mode 100644
index 0000000..a804ea1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2184.table b/definitions/bufr/tables/0/wmo/latest/codetables/2184.table
new file mode 100644
index 0000000..cf5ee84
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2185.table b/definitions/bufr/tables/0/wmo/latest/codetables/2185.table
new file mode 100644
index 0000000..45b0810
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2186.table b/definitions/bufr/tables/0/wmo/latest/codetables/2186.table
new file mode 100644
index 0000000..05e1a36
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2187.table b/definitions/bufr/tables/0/wmo/latest/codetables/2187.table
new file mode 100644
index 0000000..def3d2f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2188.table b/definitions/bufr/tables/0/wmo/latest/codetables/2188.table
new file mode 100644
index 0000000..bb8114c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2189.table b/definitions/bufr/tables/0/wmo/latest/codetables/2189.table
new file mode 100644
index 0000000..61ac9e3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/2191.table b/definitions/bufr/tables/0/wmo/latest/codetables/2191.table
new file mode 100644
index 0000000..2e96256
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22056.table b/definitions/bufr/tables/0/wmo/latest/codetables/22056.table
new file mode 100644
index 0000000..28ddbf4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22060.table b/definitions/bufr/tables/0/wmo/latest/codetables/22060.table
new file mode 100644
index 0000000..b73ad32
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22061.table b/definitions/bufr/tables/0/wmo/latest/codetables/22061.table
new file mode 100644
index 0000000..aa8c62b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22067.table b/definitions/bufr/tables/0/wmo/latest/codetables/22067.table
new file mode 100644
index 0000000..621b7a4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22068.table b/definitions/bufr/tables/0/wmo/latest/codetables/22068.table
new file mode 100644
index 0000000..f6ddeb2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22120.table b/definitions/bufr/tables/0/wmo/latest/codetables/22120.table
new file mode 100644
index 0000000..8c747ce
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22121.table b/definitions/bufr/tables/0/wmo/latest/codetables/22121.table
new file mode 100644
index 0000000..7d4dfa8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22122.table b/definitions/bufr/tables/0/wmo/latest/codetables/22122.table
new file mode 100644
index 0000000..aa9d5eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22123.table b/definitions/bufr/tables/0/wmo/latest/codetables/22123.table
new file mode 100644
index 0000000..acfb616
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/22178.table b/definitions/bufr/tables/0/wmo/latest/codetables/22178.table
new file mode 100644
index 0000000..355848c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23001.table b/definitions/bufr/tables/0/wmo/latest/codetables/23001.table
new file mode 100644
index 0000000..92ac5de
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23002.table b/definitions/bufr/tables/0/wmo/latest/codetables/23002.table
new file mode 100644
index 0000000..12815c6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23003.table b/definitions/bufr/tables/0/wmo/latest/codetables/23003.table
new file mode 100644
index 0000000..e3e891f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23004.table b/definitions/bufr/tables/0/wmo/latest/codetables/23004.table
new file mode 100644
index 0000000..383731c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23005.table b/definitions/bufr/tables/0/wmo/latest/codetables/23005.table
new file mode 100644
index 0000000..c5ff5ae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23006.table b/definitions/bufr/tables/0/wmo/latest/codetables/23006.table
new file mode 100644
index 0000000..fe7706a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23007.table b/definitions/bufr/tables/0/wmo/latest/codetables/23007.table
new file mode 100644
index 0000000..59fc043
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23008.table b/definitions/bufr/tables/0/wmo/latest/codetables/23008.table
new file mode 100644
index 0000000..4ac5c58
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23009.table b/definitions/bufr/tables/0/wmo/latest/codetables/23009.table
new file mode 100644
index 0000000..4ac5c58
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23016.table b/definitions/bufr/tables/0/wmo/latest/codetables/23016.table
new file mode 100644
index 0000000..ae84bae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23018.table b/definitions/bufr/tables/0/wmo/latest/codetables/23018.table
new file mode 100644
index 0000000..ccdcc45
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23031.table b/definitions/bufr/tables/0/wmo/latest/codetables/23031.table
new file mode 100644
index 0000000..cf20e26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/23032.table b/definitions/bufr/tables/0/wmo/latest/codetables/23032.table
new file mode 100644
index 0000000..0f439b7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/24003.table b/definitions/bufr/tables/0/wmo/latest/codetables/24003.table
new file mode 100644
index 0000000..2daa810
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25004.table b/definitions/bufr/tables/0/wmo/latest/codetables/25004.table
new file mode 100644
index 0000000..dfe4517
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25005.table b/definitions/bufr/tables/0/wmo/latest/codetables/25005.table
new file mode 100644
index 0000000..bc693a7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25006.table b/definitions/bufr/tables/0/wmo/latest/codetables/25006.table
new file mode 100644
index 0000000..bf9d1f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25009.table b/definitions/bufr/tables/0/wmo/latest/codetables/25009.table
new file mode 100644
index 0000000..bf34fb2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25010.table b/definitions/bufr/tables/0/wmo/latest/codetables/25010.table
new file mode 100644
index 0000000..e88b3ca
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25011.table b/definitions/bufr/tables/0/wmo/latest/codetables/25011.table
new file mode 100644
index 0000000..f739498
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25012.table b/definitions/bufr/tables/0/wmo/latest/codetables/25012.table
new file mode 100644
index 0000000..c869a4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25013.table b/definitions/bufr/tables/0/wmo/latest/codetables/25013.table
new file mode 100644
index 0000000..b91ea71
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/25013.table
@@ -0,0 +1 @@
+1 1 BRIGHT-BAND CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/25015.table b/definitions/bufr/tables/0/wmo/latest/codetables/25015.table
new file mode 100644
index 0000000..043e587
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/25015.table
@@ -0,0 +1 @@
+1 1 RADOME ATTENUATION CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/25017.table b/definitions/bufr/tables/0/wmo/latest/codetables/25017.table
new file mode 100644
index 0000000..ed48487
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/25017.table
@@ -0,0 +1 @@
+1 1 PRECIPITATION ATTENUATION CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/25020.table b/definitions/bufr/tables/0/wmo/latest/codetables/25020.table
new file mode 100644
index 0000000..6133da3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25021.table b/definitions/bufr/tables/0/wmo/latest/codetables/25021.table
new file mode 100644
index 0000000..314716b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25022.table b/definitions/bufr/tables/0/wmo/latest/codetables/25022.table
new file mode 100644
index 0000000..9584878
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25023.table b/definitions/bufr/tables/0/wmo/latest/codetables/25023.table
new file mode 100644
index 0000000..e4840dc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25024.table b/definitions/bufr/tables/0/wmo/latest/codetables/25024.table
new file mode 100644
index 0000000..81b2638
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25029.table b/definitions/bufr/tables/0/wmo/latest/codetables/25029.table
new file mode 100644
index 0000000..fb00d01
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25030.table b/definitions/bufr/tables/0/wmo/latest/codetables/25030.table
new file mode 100644
index 0000000..c3235d6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25031.table b/definitions/bufr/tables/0/wmo/latest/codetables/25031.table
new file mode 100644
index 0000000..16ff950
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25032.table b/definitions/bufr/tables/0/wmo/latest/codetables/25032.table
new file mode 100644
index 0000000..9b894f4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25033.table b/definitions/bufr/tables/0/wmo/latest/codetables/25033.table
new file mode 100644
index 0000000..e7141c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25034.table b/definitions/bufr/tables/0/wmo/latest/codetables/25034.table
new file mode 100644
index 0000000..473338a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25035.table b/definitions/bufr/tables/0/wmo/latest/codetables/25035.table
new file mode 100644
index 0000000..a0c8faa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25036.table b/definitions/bufr/tables/0/wmo/latest/codetables/25036.table
new file mode 100644
index 0000000..79ebd88
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25040.table b/definitions/bufr/tables/0/wmo/latest/codetables/25040.table
new file mode 100644
index 0000000..3ddf12e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25041.table b/definitions/bufr/tables/0/wmo/latest/codetables/25041.table
new file mode 100644
index 0000000..f388da0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25042.table b/definitions/bufr/tables/0/wmo/latest/codetables/25042.table
new file mode 100644
index 0000000..f3cf059
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25053.table b/definitions/bufr/tables/0/wmo/latest/codetables/25053.table
new file mode 100644
index 0000000..af34138
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25063.table b/definitions/bufr/tables/0/wmo/latest/codetables/25063.table
new file mode 100644
index 0000000..a8970ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25069.table b/definitions/bufr/tables/0/wmo/latest/codetables/25069.table
new file mode 100644
index 0000000..e627613
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25086.table b/definitions/bufr/tables/0/wmo/latest/codetables/25086.table
new file mode 100644
index 0000000..294fa69
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25090.table b/definitions/bufr/tables/0/wmo/latest/codetables/25090.table
new file mode 100644
index 0000000..309fefc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25093.table b/definitions/bufr/tables/0/wmo/latest/codetables/25093.table
new file mode 100644
index 0000000..e547e6c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25095.table b/definitions/bufr/tables/0/wmo/latest/codetables/25095.table
new file mode 100644
index 0000000..c446a50
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/25095.table
@@ -0,0 +1 @@
+1 1 ALTIMETER OPERATING (0 IF NOMINAL, 1 IF BACKUP)
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/25096.table b/definitions/bufr/tables/0/wmo/latest/codetables/25096.table
new file mode 100644
index 0000000..89dcc39
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25097.table b/definitions/bufr/tables/0/wmo/latest/codetables/25097.table
new file mode 100644
index 0000000..d4e1e46
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25098.table b/definitions/bufr/tables/0/wmo/latest/codetables/25098.table
new file mode 100644
index 0000000..9d505a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25099.table b/definitions/bufr/tables/0/wmo/latest/codetables/25099.table
new file mode 100644
index 0000000..40f35b1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25110.table b/definitions/bufr/tables/0/wmo/latest/codetables/25110.table
new file mode 100644
index 0000000..912e01f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25112.table b/definitions/bufr/tables/0/wmo/latest/codetables/25112.table
new file mode 100644
index 0000000..a2a4ec9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25113.table b/definitions/bufr/tables/0/wmo/latest/codetables/25113.table
new file mode 100644
index 0000000..ef394b6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25120.table b/definitions/bufr/tables/0/wmo/latest/codetables/25120.table
new file mode 100644
index 0000000..bdb9f96
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25122.table b/definitions/bufr/tables/0/wmo/latest/codetables/25122.table
new file mode 100644
index 0000000..1085ef9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25123.table b/definitions/bufr/tables/0/wmo/latest/codetables/25123.table
new file mode 100644
index 0000000..70f0670
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25124.table b/definitions/bufr/tables/0/wmo/latest/codetables/25124.table
new file mode 100644
index 0000000..dce5b04
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25150.table b/definitions/bufr/tables/0/wmo/latest/codetables/25150.table
new file mode 100644
index 0000000..7b452c3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25174.table b/definitions/bufr/tables/0/wmo/latest/codetables/25174.table
new file mode 100644
index 0000000..c8a11b6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25181.table b/definitions/bufr/tables/0/wmo/latest/codetables/25181.table
new file mode 100644
index 0000000..2c1eabf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25182.table b/definitions/bufr/tables/0/wmo/latest/codetables/25182.table
new file mode 100644
index 0000000..9827b1d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25184.table b/definitions/bufr/tables/0/wmo/latest/codetables/25184.table
new file mode 100644
index 0000000..29005c1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25185.table b/definitions/bufr/tables/0/wmo/latest/codetables/25185.table
new file mode 100644
index 0000000..ac18aba
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/25185.table
@@ -0,0 +1,2 @@
+0 0 AES 256
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/25187.table b/definitions/bufr/tables/0/wmo/latest/codetables/25187.table
new file mode 100644
index 0000000..683c097
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/25188.table b/definitions/bufr/tables/0/wmo/latest/codetables/25188.table
new file mode 100644
index 0000000..75641e0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/25188.table
@@ -0,0 +1,6 @@
+0 0 PRESSURE ADJUSTED TO MEAN SEA LEVEL FOLLOWING WMO 8 FOR LOW LEVEL (< 50M) STATIONS
+1 1 PRESSURE ADJUSTED TO MEAN SEA LEVEL FOLLOWING WMO 8 FOR STATIONS BELOW 750 M
+2 2 PRESSURE ADJUSTED TO SEA LEVEL FOLLOWING NATIONAL PRACTICE
+3 3 PRESSURE ADJUSTED TO LOCAL WATER LEVEL FOLLOWING NATIONAL PRACTICE
+4 4 PRESSURE NOT CORRECTED FOR HEIGHT
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/26010.table b/definitions/bufr/tables/0/wmo/latest/codetables/26010.table
new file mode 100644
index 0000000..f825040
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/29001.table b/definitions/bufr/tables/0/wmo/latest/codetables/29001.table
new file mode 100644
index 0000000..1481243
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/29002.table b/definitions/bufr/tables/0/wmo/latest/codetables/29002.table
new file mode 100644
index 0000000..1d7efd0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3001.table b/definitions/bufr/tables/0/wmo/latest/codetables/3001.table
new file mode 100644
index 0000000..cfa2c1a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3001.table
@@ -0,0 +1,11 @@
+0 0 LAND STATION (SYNOPTIC NETWORK)
+1 1 SHALLOW WATER STATION (FIXED TO SEA/LAKE FLOOR)
+2 2 SHIP
+3 3 RIG/PLATFORM
+4 4 MOORED BUOY
+5 5 DRIFTING BUOY (OR DRIFTER)
+6 6 ICE BUOY
+7 7 LAND STATION (LOCAL NETWORK)
+8 8 LAND VEHICLE
+9 9 AUTONOMOUS MARINE VEHICLE
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/3003.table b/definitions/bufr/tables/0/wmo/latest/codetables/3003.table
new file mode 100644
index 0000000..cf53023
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3003.table
@@ -0,0 +1,8 @@
+0 0 SCREEN
+1 1 SLING/WHIRLING
+2 2 UNSCREENED
+3 3 RADIATION SHIELD
+4 4 ASPIRATED (E.G. ASSMANN)
+5 5 OTHER SHELTER
+6 6 HANDHELD
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/30031.table b/definitions/bufr/tables/0/wmo/latest/codetables/30031.table
new file mode 100644
index 0000000..80cce26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/30032.table b/definitions/bufr/tables/0/wmo/latest/codetables/30032.table
new file mode 100644
index 0000000..942cb5d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3004.table b/definitions/bufr/tables/0/wmo/latest/codetables/3004.table
new file mode 100644
index 0000000..c3604a4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3004.table
@@ -0,0 +1,11 @@
+0 0 STEVENSON SCREEN
+1 1 MARINE STEVENSON SCREEN
+2 2 CYLINDRICAL SECTION PLATE SHIELD
+3 3 CONCENTRIC TUBE
+4 4 RECTANGULAR SECTION SHIELD
+5 5 SQUARE SECTION SHIELD
+6 6 TRIANGULAR SECTION SHIELD
+7 7 OPEN COVERED LEAN TO
+8 8 OPEN COVERED INVERTED V ROOF
+9 9 INTEGRATED (E.G. CHILLED MIRROR)
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/3008.table b/definitions/bufr/tables/0/wmo/latest/codetables/3008.table
new file mode 100644
index 0000000..e321d55
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3008.table
@@ -0,0 +1,4 @@
+0 0 NATURAL VENTILATION IN USE
+1 1 ARTIFICIAL ASPIRATION IN USE: CONSTANT FLOW AT TIME OF READING
+2 2 ARTIFICIAL ASPIRATION IN USE: VARIABLE FLOW AT TIME OF READING
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/3010.table b/definitions/bufr/tables/0/wmo/latest/codetables/3010.table
new file mode 100644
index 0000000..75746a1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3011.table b/definitions/bufr/tables/0/wmo/latest/codetables/3011.table
new file mode 100644
index 0000000..7488268
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3012.table b/definitions/bufr/tables/0/wmo/latest/codetables/3012.table
new file mode 100644
index 0000000..35bdead
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3016.table b/definitions/bufr/tables/0/wmo/latest/codetables/3016.table
new file mode 100644
index 0000000..792788f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3017.table b/definitions/bufr/tables/0/wmo/latest/codetables/3017.table
new file mode 100644
index 0000000..e94c0a4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3018.table b/definitions/bufr/tables/0/wmo/latest/codetables/3018.table
new file mode 100644
index 0000000..79e0375
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3019.table b/definitions/bufr/tables/0/wmo/latest/codetables/3019.table
new file mode 100644
index 0000000..2f55b00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/3020.table b/definitions/bufr/tables/0/wmo/latest/codetables/3020.table
new file mode 100644
index 0000000..9f0feae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3020.table
@@ -0,0 +1,5 @@
+0 0 WOOD
+1 1 METAL ALLOY
+2 2 PLASTIC/GRP
+3 3 REED/GRASS/LEAF
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/3021.table b/definitions/bufr/tables/0/wmo/latest/codetables/3021.table
new file mode 100644
index 0000000..27e1bfa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3021.table
@@ -0,0 +1,4 @@
+0 0 UNHEATED
+1 1 HEATED
+2 2 NOT APPLICABLE
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/3022.table b/definitions/bufr/tables/0/wmo/latest/codetables/3022.table
new file mode 100644
index 0000000..7ecac34
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3022.table
@@ -0,0 +1,4 @@
+0 0 NATIONAL HYDRO METEOROLOGICAL/WEATHER SERVICE
+1 1 OTHER
+2 2 STANDARDS INSTITUTE
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/3023.table b/definitions/bufr/tables/0/wmo/latest/codetables/3023.table
new file mode 100644
index 0000000..8376a8d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3023.table
@@ -0,0 +1,8 @@
+0 0 SINGLE V SECTION LOUVERS
+1 1 OVERLAPPING LOUVERS
+2 2 DOUBLE V SECTION LOUVERS
+3 3 NON-OVERLAPPING LOUVERS
+4 4 VENTED, NON-LOUVERED
+5 5 NOT APPLICABLE
+6 6 RESERVED FOR FUTURE USE
+7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/31021.table b/definitions/bufr/tables/0/wmo/latest/codetables/31021.table
new file mode 100644
index 0000000..fb70e1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/31031.table b/definitions/bufr/tables/0/wmo/latest/codetables/31031.table
new file mode 100644
index 0000000..1f27429
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/31031.table
@@ -0,0 +1 @@
+1 1 
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/33002.table b/definitions/bufr/tables/0/wmo/latest/codetables/33002.table
new file mode 100644
index 0000000..4177c05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33003.table b/definitions/bufr/tables/0/wmo/latest/codetables/33003.table
new file mode 100644
index 0000000..7577129
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33005.table b/definitions/bufr/tables/0/wmo/latest/codetables/33005.table
new file mode 100644
index 0000000..8d7569a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33006.table b/definitions/bufr/tables/0/wmo/latest/codetables/33006.table
new file mode 100644
index 0000000..0ea44a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33015.table b/definitions/bufr/tables/0/wmo/latest/codetables/33015.table
new file mode 100644
index 0000000..f585808
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33020.table b/definitions/bufr/tables/0/wmo/latest/codetables/33020.table
new file mode 100644
index 0000000..ba7a4d4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33021.table b/definitions/bufr/tables/0/wmo/latest/codetables/33021.table
new file mode 100644
index 0000000..e3e67ae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33022.table b/definitions/bufr/tables/0/wmo/latest/codetables/33022.table
new file mode 100644
index 0000000..50ef65f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33023.table b/definitions/bufr/tables/0/wmo/latest/codetables/33023.table
new file mode 100644
index 0000000..896c816
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33024.table b/definitions/bufr/tables/0/wmo/latest/codetables/33024.table
new file mode 100644
index 0000000..771e04b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33025.table b/definitions/bufr/tables/0/wmo/latest/codetables/33025.table
new file mode 100644
index 0000000..4da695a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33026.table b/definitions/bufr/tables/0/wmo/latest/codetables/33026.table
new file mode 100644
index 0000000..08c6125
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33027.table b/definitions/bufr/tables/0/wmo/latest/codetables/33027.table
new file mode 100644
index 0000000..8997392
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33028.table b/definitions/bufr/tables/0/wmo/latest/codetables/33028.table
new file mode 100644
index 0000000..84bd666
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33030.table b/definitions/bufr/tables/0/wmo/latest/codetables/33030.table
new file mode 100644
index 0000000..c9e36c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33031.table b/definitions/bufr/tables/0/wmo/latest/codetables/33031.table
new file mode 100644
index 0000000..c11fd4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33032.table b/definitions/bufr/tables/0/wmo/latest/codetables/33032.table
new file mode 100644
index 0000000..33307f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33033.table b/definitions/bufr/tables/0/wmo/latest/codetables/33033.table
new file mode 100644
index 0000000..6fd3205
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33035.table b/definitions/bufr/tables/0/wmo/latest/codetables/33035.table
new file mode 100644
index 0000000..01996ba
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33037.table b/definitions/bufr/tables/0/wmo/latest/codetables/33037.table
new file mode 100644
index 0000000..9f26652
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33038.table b/definitions/bufr/tables/0/wmo/latest/codetables/33038.table
new file mode 100644
index 0000000..3dc1192
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33039.table b/definitions/bufr/tables/0/wmo/latest/codetables/33039.table
new file mode 100644
index 0000000..50ff126
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33041.table b/definitions/bufr/tables/0/wmo/latest/codetables/33041.table
new file mode 100644
index 0000000..8bbdba9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33042.table b/definitions/bufr/tables/0/wmo/latest/codetables/33042.table
new file mode 100644
index 0000000..b75447a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33043.table b/definitions/bufr/tables/0/wmo/latest/codetables/33043.table
new file mode 100644
index 0000000..398d9ab
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33044.table b/definitions/bufr/tables/0/wmo/latest/codetables/33044.table
new file mode 100644
index 0000000..01746c7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33047.table b/definitions/bufr/tables/0/wmo/latest/codetables/33047.table
new file mode 100644
index 0000000..f69b56e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33048.table b/definitions/bufr/tables/0/wmo/latest/codetables/33048.table
new file mode 100644
index 0000000..312ba40
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33049.table b/definitions/bufr/tables/0/wmo/latest/codetables/33049.table
new file mode 100644
index 0000000..bdde061
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33050.table b/definitions/bufr/tables/0/wmo/latest/codetables/33050.table
new file mode 100644
index 0000000..ee7bb6d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33060.table b/definitions/bufr/tables/0/wmo/latest/codetables/33060.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33070.table b/definitions/bufr/tables/0/wmo/latest/codetables/33070.table
new file mode 100644
index 0000000..8a0467b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33071.table b/definitions/bufr/tables/0/wmo/latest/codetables/33071.table
new file mode 100644
index 0000000..8c9d4de
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33072.table b/definitions/bufr/tables/0/wmo/latest/codetables/33072.table
new file mode 100644
index 0000000..fcc7f09
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33075.table b/definitions/bufr/tables/0/wmo/latest/codetables/33075.table
new file mode 100644
index 0000000..23edae6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33076.table b/definitions/bufr/tables/0/wmo/latest/codetables/33076.table
new file mode 100644
index 0000000..7100c4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33077.table b/definitions/bufr/tables/0/wmo/latest/codetables/33077.table
new file mode 100644
index 0000000..742c83c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33078.table b/definitions/bufr/tables/0/wmo/latest/codetables/33078.table
new file mode 100644
index 0000000..f3a2180
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33079.table b/definitions/bufr/tables/0/wmo/latest/codetables/33079.table
new file mode 100644
index 0000000..0875143
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33080.table b/definitions/bufr/tables/0/wmo/latest/codetables/33080.table
new file mode 100644
index 0000000..a39dd47
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33081.table b/definitions/bufr/tables/0/wmo/latest/codetables/33081.table
new file mode 100644
index 0000000..f8759e0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33082.table b/definitions/bufr/tables/0/wmo/latest/codetables/33082.table
new file mode 100644
index 0000000..4671574
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33083.table b/definitions/bufr/tables/0/wmo/latest/codetables/33083.table
new file mode 100644
index 0000000..6fe63f6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33084.table b/definitions/bufr/tables/0/wmo/latest/codetables/33084.table
new file mode 100644
index 0000000..accb209
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33085.table b/definitions/bufr/tables/0/wmo/latest/codetables/33085.table
new file mode 100644
index 0000000..7962ec5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33086.table b/definitions/bufr/tables/0/wmo/latest/codetables/33086.table
new file mode 100644
index 0000000..b7cda32
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33087.table b/definitions/bufr/tables/0/wmo/latest/codetables/33087.table
new file mode 100644
index 0000000..f3000e2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/33088.table b/definitions/bufr/tables/0/wmo/latest/codetables/33088.table
new file mode 100644
index 0000000..8f7b539
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/35000.table b/definitions/bufr/tables/0/wmo/latest/codetables/35000.table
new file mode 100644
index 0000000..8c57023
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/35000.table
@@ -0,0 +1 @@
+1023 1023 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/35001.table b/definitions/bufr/tables/0/wmo/latest/codetables/35001.table
new file mode 100644
index 0000000..bba0c81
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/35030.table b/definitions/bufr/tables/0/wmo/latest/codetables/35030.table
new file mode 100644
index 0000000..5b83f8b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/35031.table b/definitions/bufr/tables/0/wmo/latest/codetables/35031.table
new file mode 100644
index 0000000..bdd705d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/35032.table b/definitions/bufr/tables/0/wmo/latest/codetables/35032.table
new file mode 100644
index 0000000..7f53a05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/35033.table b/definitions/bufr/tables/0/wmo/latest/codetables/35033.table
new file mode 100644
index 0000000..86e9592
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/35034.table b/definitions/bufr/tables/0/wmo/latest/codetables/35034.table
new file mode 100644
index 0000000..7297664
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/35035.table b/definitions/bufr/tables/0/wmo/latest/codetables/35035.table
new file mode 100644
index 0000000..0fce6dd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/35035.table
@@ -0,0 +1,20 @@
+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
+16 16 INCREASING PRESSURE
+17 17 INVALID AND/OR MISSED DATA TIME LIMITS EXCEEDED
+30 30 OTHER
+31 31 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/40005.table b/definitions/bufr/tables/0/wmo/latest/codetables/40005.table
new file mode 100644
index 0000000..045a4f1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40006.table b/definitions/bufr/tables/0/wmo/latest/codetables/40006.table
new file mode 100644
index 0000000..d53382e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40011.table b/definitions/bufr/tables/0/wmo/latest/codetables/40011.table
new file mode 100644
index 0000000..ddc7e86
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40012.table b/definitions/bufr/tables/0/wmo/latest/codetables/40012.table
new file mode 100644
index 0000000..d8ce14d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40013.table b/definitions/bufr/tables/0/wmo/latest/codetables/40013.table
new file mode 100644
index 0000000..79b991a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40020.table b/definitions/bufr/tables/0/wmo/latest/codetables/40020.table
new file mode 100644
index 0000000..fa1d1f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40023.table b/definitions/bufr/tables/0/wmo/latest/codetables/40023.table
new file mode 100644
index 0000000..2e4cbfb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40024.table b/definitions/bufr/tables/0/wmo/latest/codetables/40024.table
new file mode 100644
index 0000000..c8421e5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40025.table b/definitions/bufr/tables/0/wmo/latest/codetables/40025.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/40028.table b/definitions/bufr/tables/0/wmo/latest/codetables/40028.table
new file mode 100644
index 0000000..e094f29
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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 LOW FREQUENCY PIXEL > 7 KM
+14 14 RESERVED
+15 15 MISSING VALUE (NO QUALITY INFORMATION AVAILABLE)
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/40036.table b/definitions/bufr/tables/0/wmo/latest/codetables/40036.table
new file mode 100644
index 0000000..9a5418e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/4059.table b/definitions/bufr/tables/0/wmo/latest/codetables/4059.table
new file mode 100644
index 0000000..91fc6f4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/4080.table b/definitions/bufr/tables/0/wmo/latest/codetables/4080.table
new file mode 100644
index 0000000..84caf21
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/42004.table b/definitions/bufr/tables/0/wmo/latest/codetables/42004.table
new file mode 100644
index 0000000..a846810
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/42004.table
@@ -0,0 +1,3 @@
+0 0 WAVE DIRECTION RESOLVED
+1 1 180-DEGREE AMBIGUITY NOT RESOLVE
+15 15 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/5069.table b/definitions/bufr/tables/0/wmo/latest/codetables/5069.table
new file mode 100644
index 0000000..e267747
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8001.table b/definitions/bufr/tables/0/wmo/latest/codetables/8001.table
new file mode 100644
index 0000000..6210da3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8002.table b/definitions/bufr/tables/0/wmo/latest/codetables/8002.table
new file mode 100644
index 0000000..6ab4fd7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8003.table b/definitions/bufr/tables/0/wmo/latest/codetables/8003.table
new file mode 100644
index 0000000..3731351
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8004.table b/definitions/bufr/tables/0/wmo/latest/codetables/8004.table
new file mode 100644
index 0000000..2a8925e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8005.table b/definitions/bufr/tables/0/wmo/latest/codetables/8005.table
new file mode 100644
index 0000000..587ea99
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8006.table b/definitions/bufr/tables/0/wmo/latest/codetables/8006.table
new file mode 100644
index 0000000..9f56c62
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8007.table b/definitions/bufr/tables/0/wmo/latest/codetables/8007.table
new file mode 100644
index 0000000..3e4d2cc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8008.table b/definitions/bufr/tables/0/wmo/latest/codetables/8008.table
new file mode 100644
index 0000000..2714b5a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8009.table b/definitions/bufr/tables/0/wmo/latest/codetables/8009.table
new file mode 100644
index 0000000..b033982
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8010.table b/definitions/bufr/tables/0/wmo/latest/codetables/8010.table
new file mode 100644
index 0000000..3c5fe71
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8011.table b/definitions/bufr/tables/0/wmo/latest/codetables/8011.table
new file mode 100644
index 0000000..e7a8221
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8012.table b/definitions/bufr/tables/0/wmo/latest/codetables/8012.table
new file mode 100644
index 0000000..769bc0b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8013.table b/definitions/bufr/tables/0/wmo/latest/codetables/8013.table
new file mode 100644
index 0000000..e18d295
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8014.table b/definitions/bufr/tables/0/wmo/latest/codetables/8014.table
new file mode 100644
index 0000000..e6f2e46
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8015.table b/definitions/bufr/tables/0/wmo/latest/codetables/8015.table
new file mode 100644
index 0000000..6830b95
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8016.table b/definitions/bufr/tables/0/wmo/latest/codetables/8016.table
new file mode 100644
index 0000000..6b8a1fa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8017.table b/definitions/bufr/tables/0/wmo/latest/codetables/8017.table
new file mode 100644
index 0000000..b3156f8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8018.table b/definitions/bufr/tables/0/wmo/latest/codetables/8018.table
new file mode 100644
index 0000000..f91e554
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8019.table b/definitions/bufr/tables/0/wmo/latest/codetables/8019.table
new file mode 100644
index 0000000..4ed4133
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8021.table b/definitions/bufr/tables/0/wmo/latest/codetables/8021.table
new file mode 100644
index 0000000..20fd793
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8023.table b/definitions/bufr/tables/0/wmo/latest/codetables/8023.table
new file mode 100644
index 0000000..2125e23
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8024.table b/definitions/bufr/tables/0/wmo/latest/codetables/8024.table
new file mode 100644
index 0000000..377858b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8025.table b/definitions/bufr/tables/0/wmo/latest/codetables/8025.table
new file mode 100644
index 0000000..1d88fa5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8026.table b/definitions/bufr/tables/0/wmo/latest/codetables/8026.table
new file mode 100644
index 0000000..9bcef78
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8029.table b/definitions/bufr/tables/0/wmo/latest/codetables/8029.table
new file mode 100644
index 0000000..d0eae5a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8032.table b/definitions/bufr/tables/0/wmo/latest/codetables/8032.table
new file mode 100644
index 0000000..712400d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8033.table b/definitions/bufr/tables/0/wmo/latest/codetables/8033.table
new file mode 100644
index 0000000..1c69537
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8034.table b/definitions/bufr/tables/0/wmo/latest/codetables/8034.table
new file mode 100644
index 0000000..879f274
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8035.table b/definitions/bufr/tables/0/wmo/latest/codetables/8035.table
new file mode 100644
index 0000000..3d641fd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8036.table b/definitions/bufr/tables/0/wmo/latest/codetables/8036.table
new file mode 100644
index 0000000..6436989
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8039.table b/definitions/bufr/tables/0/wmo/latest/codetables/8039.table
new file mode 100644
index 0000000..f4403c6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8040.table b/definitions/bufr/tables/0/wmo/latest/codetables/8040.table
new file mode 100644
index 0000000..42c5af0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8041.table b/definitions/bufr/tables/0/wmo/latest/codetables/8041.table
new file mode 100644
index 0000000..1f48fbe
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8042.table b/definitions/bufr/tables/0/wmo/latest/codetables/8042.table
new file mode 100644
index 0000000..c71709a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8043.table b/definitions/bufr/tables/0/wmo/latest/codetables/8043.table
new file mode 100644
index 0000000..249fd0e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8050.table b/definitions/bufr/tables/0/wmo/latest/codetables/8050.table
new file mode 100644
index 0000000..4b401f1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8051.table b/definitions/bufr/tables/0/wmo/latest/codetables/8051.table
new file mode 100644
index 0000000..5249fe6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8052.table b/definitions/bufr/tables/0/wmo/latest/codetables/8052.table
new file mode 100644
index 0000000..46dcbbe
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8053.table b/definitions/bufr/tables/0/wmo/latest/codetables/8053.table
new file mode 100644
index 0000000..cbc11c9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8054.table b/definitions/bufr/tables/0/wmo/latest/codetables/8054.table
new file mode 100644
index 0000000..51b908e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8060.table b/definitions/bufr/tables/0/wmo/latest/codetables/8060.table
new file mode 100644
index 0000000..2865fec
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8065.table b/definitions/bufr/tables/0/wmo/latest/codetables/8065.table
new file mode 100644
index 0000000..69b80ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8066.table b/definitions/bufr/tables/0/wmo/latest/codetables/8066.table
new file mode 100644
index 0000000..fcc0252
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8070.table b/definitions/bufr/tables/0/wmo/latest/codetables/8070.table
new file mode 100644
index 0000000..f580617
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8072.table b/definitions/bufr/tables/0/wmo/latest/codetables/8072.table
new file mode 100644
index 0000000..7dcd961
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8074.table b/definitions/bufr/tables/0/wmo/latest/codetables/8074.table
new file mode 100644
index 0000000..5778e65
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8075.table b/definitions/bufr/tables/0/wmo/latest/codetables/8075.table
new file mode 100644
index 0000000..5f5e3a2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8076.table b/definitions/bufr/tables/0/wmo/latest/codetables/8076.table
new file mode 100644
index 0000000..431496f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8077.table b/definitions/bufr/tables/0/wmo/latest/codetables/8077.table
new file mode 100644
index 0000000..2c7902b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8079.table b/definitions/bufr/tables/0/wmo/latest/codetables/8079.table
new file mode 100644
index 0000000..735a09c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8080.table b/definitions/bufr/tables/0/wmo/latest/codetables/8080.table
new file mode 100644
index 0000000..1a0f3a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8081.table b/definitions/bufr/tables/0/wmo/latest/codetables/8081.table
new file mode 100644
index 0000000..75d2887
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8082.table b/definitions/bufr/tables/0/wmo/latest/codetables/8082.table
new file mode 100644
index 0000000..1f24db8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8083.table b/definitions/bufr/tables/0/wmo/latest/codetables/8083.table
new file mode 100644
index 0000000..174ef34
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8085.table b/definitions/bufr/tables/0/wmo/latest/codetables/8085.table
new file mode 100644
index 0000000..79e1a3d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8086.table b/definitions/bufr/tables/0/wmo/latest/codetables/8086.table
new file mode 100644
index 0000000..47665e9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8087.table b/definitions/bufr/tables/0/wmo/latest/codetables/8087.table
new file mode 100644
index 0000000..d556c98
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/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/latest/codetables/8088.table b/definitions/bufr/tables/0/wmo/latest/codetables/8088.table
new file mode 100644
index 0000000..7791d33
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/8088.table
@@ -0,0 +1,4 @@
+0 0 TOP VIEW (GEOGRAPHICAL LONGITUDE ON X AXIS AND LATITUDE ON Y AXIS)
+1 1 NORTH-SOUTH VIEW (TRANSECT WITH GEOGRAPHICAL LONGITUDE ON X AXIS AND VERTICAL HEIGHT ON Y AXIS)
+2 2 EAST-WEST VIEW (TRANSECT WITH GEOGRAPHICAL LATITUDE ON X AXIS AND VERTICAL HEIGHT ON Y AXIS)
+63 63 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/8091.table b/definitions/bufr/tables/0/wmo/latest/codetables/8091.table
new file mode 100644
index 0000000..3a8c44d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/8091.table
@@ -0,0 +1,11 @@
+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
+8 8 PROJECTION ORIGIN
+9 9 COORDINATES OF TRUE SCALE
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/element.table b/definitions/bufr/tables/0/wmo/latest/element.table
new file mode 100644
index 0000000..9841331
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/element.table
@@ -0,0 +1,1616 @@
+#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
+001114|encryptedStationIdentifierBase64Encoding|string|ENCRYPTED SHIP OR MOBILE LAND STATION IDENTIFIER (BASE64 ENCODING)|CCITT IA5|0|0|352|Character|0|44
+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
+001150|coordinateReferenceSystem|table|COORDINATE REFERENCE SYSTEM|CODE TABLE|0|0|16|CODE TABLE|0|5
+001151|fixedMeanSeaLevelReferenceDatum|table|FIXED MEAN SEA LEVEL REFERENCE DATUM|CODE TABLE|0|0|12|CODE TABLE|0|4
+001152|semiMajorAxisOfRotationEllipsoid|double|SEMI-MAJOR AXIS OF ROTATION ELLIPSOID|m|2|0|31|m|2|11
+001153|semiMinorAxisOfRotationEllipsoid|double|SEMI-MINOR AXIS OF ROTATION ELLIPSOID|m|2|0|31|m|2|11
+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
+002087|parachuteSurfaceArea|double|PARACHUTE SURFACE AREA|m2|4|0|15|m2|4|5
+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
+003001|surfaceStationType|table|SURFACE STATION TYPE|CODE TABLE|0|0|5|CODE TABLE|0|2
+003003|thermometerOrHygrometerHousing|table|THERMOMETER/HYGROMETER HOUSING|CODE TABLE|0|0|4|CODE TABLE|0|2
+003004|typeOfScreenOrShelterOrRadiationShield|table|TYPE OF SCREEN/SHELTER/RADIATION SHIELD|CODE TABLE|0|0|4|CODE TABLE|0|2
+003005|horizontalWidthOfScreenOrShieldX|double|HORIZONTAL WIDTH OF SCREEN OR SHIELD (X)|m|3|0|16|m|3|5
+003006|horizontalDepthOfScreenOrShieldY|double|HORIZONTAL DEPTH OF SCREEN OR SHIELD (Y)|m|3|0|16|m|3|5
+003007|verticalHeightOfScreenOrShieldZ|double|VERTICAL HEIGHT OF SCREEN OR SHIELD (Z)|m|3|0|16|m|3|5
+003008|artificiallyVentilatedScreenOrShield|table|ARTIFICIALLY VENTILATED SCREEN OR SHIELD|CODE TABLE|0|0|3|CODE TABLE|0|1
+003009|amountOfForcedVentilationAtTimeOfReading|double|AMOUNT OF FORCED VENTILATION AT TIME OF READING|m/s|1|0|9|m/s|1|3
+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
+003020|materialForThermometerOrHygrometerHousing|table|MATERIAL FOR THERMOMETER/HYGROMETER HOUSING|CODE TABLE|0|0|3|CODE TABLE|0|1
+003021|hygrometerHeating|table|HYGROMETER HEATING|CODE TABLE|0|0|2|CODE TABLE|0|1
+003022|instrumentOwner|table|INSTRUMENT OWNER|CODE TABLE|0|0|3|CODE TABLE|0|1
+003023|configurationOfLouversForThermometerOrHygrometerScreen|table|CONFIGURATION OF LOUVERS FOR THERMOMETER/HYGROMETER SCREEN|CODE TABLE|0|0|3|CODE TABLE|0|1
+003024|psychrometricCoefficient|double|PSYCHROMETRIC COEFFICIENT|K-1|6|0|10|K-1|6|3
+003025|crossTrackEstimationAreaSize|long|CROSS-TRACK ESTIMATION AREA SIZE|m|0|5000|16|m|0|5
+003026|alongTrackEstimationAreaSize|long|ALONG-TRACK ESTIMATION AREA SIZE|m|0|5000|16|m|0|5
+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
+005032|yOffset|double|Y OFFSET|m|2|-1073741824|31|m|2|11
+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
+005071|stripmapIdentifier|long|STRIPMAP IDENTIFIER|Numeric|0|0|16|Numeric|0|5
+005072|numberOfSpectraInRangeDirection|long|NUMBER OF SPECTRA IN RANGE DIRECTION|Numeric|0|0|8|Numeric|0|3
+005073|numberOfSpectraInAzimuthalDirection|long|NUMBER OF SPECTRA IN AZIMUTHAL DIRECTION|Numeric|0|0|8|Numeric|0|3
+005074|indexInRangeDirection|long|INDEX IN RANGE DIRECTION|Numeric|0|0|8|Numeric|0|3
+005075|indexInAzimuthalDirection|long|INDEX IN AZIMUTHAL DIRECTION|Numeric|0|0|8|Numeric|0|3
+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
+006032|xOffset|double|X OFFSET|m|2|-1073741824|31|m|2|11
+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
+008088|mapSignificance|table|MAP SIGNIFICANCE|CODE TABLE|0|0|6|CODE TABLE|0|2
+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
+010038|maximumHeightOfDeckCargoAboveSummerLoadLine|long|MAXIMUM HEIGHT OF DECK CARGO ABOVE SUMMER LOAD LINE|m|0|0|6|m|0|2
+010039|departureOfReferenceLevelSummerMaximumLoadLineFromActualSeaLevel|long|DEPARTURE OF REFERENCE LEVEL (SUMMER MAXIMUM LOAD LINE) FROM ACTUAL SEA LEVEL|m|0|-32|6|m|0|3
+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
+011007|relativeWindDirectionInDegreesOffBow|long|RELATIVE WIND DIRECTION (IN DEGREES OFF BOW)|deg|0|0|9|deg|0|3
+011008|relativeWindSpeed|double|RELATIVE WIND SPEED|m/s|1|0|12|m/s|1|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|TRUE HEADING OF AIRCRAFT, SHIP OR OTHER MOBILE PLATFORM|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
+015028|moleFractionOfAtmosphericConstituentOrPollutantInDryAir|double|MOLE FRACTION OF ATMOSPHERIC CONSTITUENT/POLLUTANT IN DRY AIR|0/00|5|0|16|0/00|5|5
+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
+020129|lightningDensityStrokeFlashOrEvent|double|LIGHTNING DENSITY (STROKE, FLASH OR EVENT)|m-2|6|0|10|m-2|6|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
+025185|encryptionMethod|table|ENCRYPTION METHOD|CODE TABLE|0|0|8|CODE TABLE|0|3
+025186|encryptionKeyVersion|string|ENCRYPTION KEY VERSION|CCITT IA5|0|0|96|Character|0|12
+025187|confidenceFlag|table|CONFIDENCE FLAG|CODE TABLE|0|0|4|CODE TABLE|0|2
+025188|methodForReducingPressureToSeaLevel|table|METHOD FOR REDUCING PRESSURE TO SEA LEVEL|CODE TABLE|0|0|5|CODE TABLE|0|2
+025189|rangeCutOffWavelength|long|RANGE CUT-OFF WAVELENGTH|m|0|1|9|m|0|3
+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
+029014|optionalListOfParametersForAnExternalMapProjectionLibrary|string|OPTIONAL LIST OF PARAMETERS FOR AN EXTERNAL MAP PROJECTION LIBRARY|CCITT IA5|0|0|504|Character|0|63
+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
+040039|singleLookComplexImageIntensity|long|SINGLE LOOK COMPLEX IMAGE INTENSITY|Numeric|0|-25|5|Numeric|0|3
+040040|singleLookComplexImageSkewness|long|SINGLE LOOK COMPLEX IMAGE SKEWNESS|Numeric|2|1|13|Numeric|0|4
+040041|singleLookComplexImageKurtosis|long|SINGLE LOOK COMPLEX IMAGE KURTOSIS|Numeric|2|1|13|Numeric|0|4
+040042|singleLookComplexImageVariance|long|SINGLE LOOK COMPLEX IMAGE VARIANCE|Numeric|2|1|13|Numeric|0|4
+041001|pco2|double|PCO2|Pa|3|0|18|Pa|3|6
+041002|fluorescence|double|FLUORESCENCE|kg l-1|12|0|16|kg l-1|12|5
+041003|dissolvedNitrates|double|DISSOLVED NITRATES|umol/kg|3|0|17|umol/kg|3|5
+041005|turbidity|double|TURBIDITY|NTU|2|0|12|NTU|2|4
+042001|dominantSwellWaveDirectionOfSpectralPartition|long|DOMINANT SWELL WAVE DIRECTION OF SPECTRAL PARTITION|deg|0|0|9|deg|0|3
+042002|significantSwellWaveHeightOfSpectralPartition|double|SIGNIFICANT SWELL WAVE HEIGHT OF SPECTRAL PARTITION|m|1|0|9|m|1|3
+042003|dominantSwellWavelengthOfSpectralPartition|double|DOMINANT SWELL WAVELENGTH OF SPECTRAL PARTITION|m|2|100|17|m|2|6
+042004|confidenceOfInversionForEachPartitionOfSwellWaveSpectra|table|CONFIDENCE OF INVERSION FOR EACH PARTITION OF SWELL WAVE SPECTRA|CODE TABLE|0|0|4|CODE TABLE|0|2
+042005|ambiguityRemovalFactorForSwellWavePartition|long|AMBIGUITY REMOVAL FACTOR FOR SWELL WAVE PARTITION|Numeric|5|-100000|18|Numeric|5|6
+042006|waveAge|long|WAVE AGE|Numeric|2|1|8|Numeric|2|3
+042007|shortestOceanWavelengthOnSpectralResolution|double|SHORTEST OCEAN WAVELENGTH ON SPECTRAL RESOLUTION|m|2|0|16|m|2|5
+042008|nonlinearInverseSpectralWidth|double|NONLINEAR INVERSE SPECTRAL WIDTH|m|2|0|16|m|2|5
+042009|binPartitionReference|long|BIN PARTITION REFERENCE|Numeric|0|0|8|Numeric|0|3
+042010|partitionNumber|long|PARTITION NUMBER|Numeric|0|1|4|Numeric|0|2
diff --git a/definitions/bufr/tables/0/wmo/latest/sequence.def b/definitions/bufr/tables/0/wmo/latest/sequence.def
new file mode 100644
index 0000000..26a604d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/latest/sequence.def
@@ -0,0 +1,963 @@
+"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 ]
+"301018" = [  001114, 025185, 025186 ]
+"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 ]
+"302062" = [  025188, 302001, 302093, 101000, 031000, 302053, 007032, 007033, 101000, 031000,
+               302004, 101000, 031001, 302005, 008002, 101000, 031000, 302055, 101000, 031000,
+               302056, 101000, 031000, 302021, 101000, 031000, 302024 ]
+"302063" = [  302038, 101000, 031000, 302040, 101000, 031000, 302034, 007032, 101000, 031000,
+               302058, 101000, 031000, 302064 ]
+"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 ]
+"302092" = [  011104, 001012, 001013, 010038, 010039, 011007, 011008 ]
+"302093" = [  007032, 007033, 303099, 012101, 103000, 031000, 007032, 007033, 303099, 002039,
+               002097, 003024, 003021, 012102, 012103, 013003, 007032, 007033, 303099, 002039,
+               002097, 003021, 003024 ]
+"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
+               ]
+"303099" = [  003005, 003006, 003007, 002096, 003022, 003003, 003020, 003004, 003023, 003008,
+               003009 ]
+"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 ]
+"306043" = [  041001, 008043, 015028, 008043, 013080, 041005, 041003, 022188, 041002, 106000,
+               031000, 004024, 014002, 014002, 014012, 014004, 004024 ]
+"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 ]
+"308014" = [  101000, 031000, 301018, 003001, 301093, 208032, 001079, 208000, 302062, 302063,
+               101000, 031000, 302092, 101000, 031000, 306033, 101000, 031000, 306034, 101000,
+               031000, 306043 ]
+"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/grib1/0.table b/definitions/common/c-1.table
similarity index 100%
rename from definitions/grib1/0.table
rename to definitions/common/c-1.table
diff --git a/definitions/grib2/centre.table b/definitions/common/c-11.table
similarity index 100%
rename from definitions/grib2/centre.table
rename to definitions/common/c-11.table
diff --git a/definitions/grib1/boot.def b/definitions/grib1/boot.def
index 8a1a958..a924b6c 100644
--- a/definitions/grib1/boot.def
+++ b/definitions/grib1/boot.def
@@ -26,7 +26,7 @@ constant section0Length=8 ;
 meta section0Pointer section_pointer(offsetSection0,section0Length,0);
 
 # Due to a trick done by GRIBEX to support large GRIBs, we need a special treatment
-# of the message length and of the section4 lenth, so instead of
+# of the message length and of the section4 length, so instead of
 # section_length[3] totalLength                     ;
 # we get:
 g1_message_length[3] totalLength(section4Length) ;
@@ -37,7 +37,7 @@ template      section_1 "grib1/section.1.def"   ;
 
 alias ls.edition = editionNumber;
 
-# Not flagbit numbers 7 to 0, while wmo is 1 to 8
+# Note flagbit numbers 7 to 0, while wmo is 1 to 8
 flagbit gridDescriptionSectionPresent(section1Flags,7) = 1;
 meta GDSPresent gds_is_present(gridDescriptionSectionPresent,gridDefinition,bitmapPresent,values): dump ;
 #alias GDSPresent = gridDescriptionSectionPresent;
diff --git a/definitions/grib1/local.98.18.def b/definitions/grib1/local.98.18.def
index c4434fc..80be8dc 100644
--- a/definitions/grib1/local.98.18.def
+++ b/definitions/grib1/local.98.18.def
@@ -51,7 +51,7 @@ alias number=perturbationNumber;
 unsigned[1] numberOfForecastsInEnsemble : dump ;
 alias totalNumber=numberOfForecastsInEnsemble;
 
-codetable[1] dataOrigin "grib1/0.table" : dump;
+codetable[1] dataOrigin "common/c-1.table" : dump;
 alias origin = dataOrigin;
 
 ascii[4] modelIdentifier : dump ;
diff --git a/definitions/grib1/local.98.218.def b/definitions/grib1/local.98.218.def
index fd773f6..da14c33 100644
--- a/definitions/grib1/local.98.218.def
+++ b/definitions/grib1/local.98.218.def
@@ -52,7 +52,7 @@ alias number=perturbationNumber;
 unsigned[1] numberOfForecastsInEnsemble : dump ;
 alias totalNumber=numberOfForecastsInEnsemble;
 
-codetable[1] dataOrigin "grib1/0.table" : dump;
+codetable[1] dataOrigin "common/c-1.table" : dump;
 alias origin = dataOrigin;
 
 ascii[4] modelIdentifier : dump ;
diff --git a/definitions/grib1/local.98.31.def b/definitions/grib1/local.98.31.def
index cc77c48..e2a5cdb 100644
--- a/definitions/grib1/local.98.31.def
+++ b/definitions/grib1/local.98.31.def
@@ -53,7 +53,7 @@ alias referenceDate = dateOfForecastRun;
 unsigned[1] numberOfModels :dump;
 pad padding_local1_31(42);
 listOfModelIdentifiers list (numberOfModels) {
-  codetable[2] modelIdentifier 'grib1/0.table' :dump;
+  codetable[2] modelIdentifier 'common/c-1.table' :dump;
 }
 padto padding_sec1_loc(offsetSection1 + 240 );
 
diff --git a/definitions/grib1/section.1.def b/definitions/grib1/section.1.def
index a62f802..062dc81 100644
--- a/definitions/grib1/section.1.def
+++ b/definitions/grib1/section.1.def
@@ -32,7 +32,7 @@ alias gribTablesVersionNo=table2Version;
 #assert(section1Length > 5);
 
 #  Identification of originating/generating centre
-codetable[1] centre 'grib1/0.table' : dump,string_type;
+codetable[1] centre 'common/c-1.table' : dump,string_type;
 alias identificationOfOriginatingGeneratingCentre=centre;
 meta centreDescription codetable_title(centre);
 
diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def
index bca73d8..809c36e 100644
--- a/definitions/grib2/cfVarName.def
+++ b/definitions/grib2/cfVarName.def
@@ -220,6 +220,28 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 37 ;
 	}
+#maximum CAPE in the last 6 hours
+'mxcape6' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 6 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfSecondFixedSurface = 8 ;
+	 lengthOfTimeRange = 6 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#maximum CAPES in the last 6 hours
+'mxcapes6' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 19 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfSecondFixedSurface = 8 ;
+	 lengthOfTimeRange = 6 ;
+	}
 #Height of convective cloud top
 'hcct' = {
 	 discipline = 0 ;
diff --git a/definitions/grib2/local.98.11.def b/definitions/grib2/local.98.11.def
index 2707954..baf1c38 100644
--- a/definitions/grib2/local.98.11.def
+++ b/definitions/grib2/local.98.11.def
@@ -15,7 +15,7 @@ unsigned[1] dayOfAnalysis    = day    : dump;
 unsigned[1] hourOfAnalysis   = hour   : dump;
 unsigned[1] minuteOfAnalysis = minute : dump;
 
-codetable[2] originatingCentreOfAnalysis 'grib1/0.table' = originatingCentre : dump,string_type;
+codetable[2] originatingCentreOfAnalysis 'common/c-1.table' = originatingCentre : dump,string_type;
 
 unsigned[2] subcentreOfAnalysis = subCentre : dump;
 
diff --git a/definitions/grib2/local.98.18.def b/definitions/grib2/local.98.18.def
index d2c1bb8..1a19a79 100644
--- a/definitions/grib2/local.98.18.def
+++ b/definitions/grib2/local.98.18.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-codetable[1] dataOrigin "grib1/0.table" : dump;
+codetable[1] dataOrigin "common/c-1.table" : dump;
 alias mars.origin=dataOrigin;
 
 ascii[4] modelIdentifier : dump ;
diff --git a/definitions/grib2/local/1098/template.2.0.def~ b/definitions/grib2/local/1098/template.2.0.def~
deleted file mode 100644
index b878176..0000000
--- a/definitions/grib2/local/1098/template.2.0.def~
+++ /dev/null
@@ -1,19 +0,0 @@
-codetable[2] tiggeModel 'grib2/local/[localSubSectionCentre:l]/models.table';
-codetable[2] tiggeCentre 'grib2/local/[localSubSectionCentre:l]/centres.table';
-concept tiggeLAMName {
-  "MOGREPS-MO- EUA" = {tiggeCentre=0;tiggeModel=0;}
-  "AEMet-SREPS-MM-EUAT"= {tiggeCentre=1;tiggeModel=1;}
-  "SRNWP-PEPS"= {tiggeCentre=1;tiggeModel=2;}
-  "COSMOLEPS-ARPASIMC-EU"= {tiggeCentre=2;tiggeModel=3;}
-  "NORLAMEPS" = {tiggeCentre=3;tiggeModel=4;}
-  "ALADIN-LAEF" = {tiggeCentre=4;tiggeModel=5;}
-  "COSMO-DE EPS" = {tiggeCentre=5;tiggeModel=6;}
-  "COSMO-SREPS-BO-EU" = {tiggeCentre=6;tiggeModel=7;}
-  "GLAMEPS" = {tiggeCentre=7;tiggeModel=8;}
-  "PEARCE" = {tiggeCentre=8;tiggeModel=9;}
-  "DMI- HIRLAM" = {tiggeCentre=9;tiggeModel=10;}
-  "OMSZ- ALADIN-EPS" = {tiggeCentre=10;tiggeModel=11;}
-  "OMSZ- ALADIN-EPS" = {tiggeCentre=11;tiggeModel=11;}
-  "OMSZ- ALADIN-EPS" = {tiggeCentre=12;tiggeModel=11;}
-}
-
diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def
index 1e04c29..864e44c 100644
--- a/definitions/grib2/localConcepts/ecmf/cfVarName.def
+++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def
@@ -4805,6 +4805,306 @@
 	 parameterCategory = 213 ;
 	 parameterNumber = 5 ;
 	}
+#Random pattern 1 for SPP scheme
+'spp1' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 101 ;
+	}
+#Random pattern 2 for SPP scheme
+'spp2' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 102 ;
+	}
+#Random pattern 3 for SPP scheme
+'spp3' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 103 ;
+	}
+#Random pattern 4 for SPP scheme
+'spp4' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 104 ;
+	}
+#Random pattern 5 for SPP scheme
+'spp5' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 105 ;
+	}
+#Random pattern 6 for SPP scheme
+'spp6' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 106 ;
+	}
+#Random pattern 7 for SPP scheme
+'spp7' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 107 ;
+	}
+#Random pattern 8 for SPP scheme
+'spp8' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 108 ;
+	}
+#Random pattern 9 for SPP scheme
+'spp9' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 109 ;
+	}
+#Random pattern 10 for SPP scheme
+'spp10' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 110 ;
+	}
+#Random pattern 11 for SPP scheme
+'spp11' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 111 ;
+	}
+#Random pattern 12 for SPP scheme
+'spp12' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 112 ;
+	}
+#Random pattern 13 for SPP scheme
+'spp13' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 113 ;
+	}
+#Random pattern 14 for SPP scheme
+'spp14' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 114 ;
+	}
+#Random pattern 15 for SPP scheme
+'spp15' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 115 ;
+	}
+#Random pattern 16 for SPP scheme
+'spp16' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 116 ;
+	}
+#Random pattern 17 for SPP scheme
+'spp17' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 117 ;
+	}
+#Random pattern 18 for SPP scheme
+'spp18' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 118 ;
+	}
+#Random pattern 19 for SPP scheme
+'spp19' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 119 ;
+	}
+#Random pattern 20 for SPP scheme
+'spp20' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 120 ;
+	}
+#Random pattern 21 for SPP scheme
+'spp21' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 121 ;
+	}
+#Random pattern 22 for SPP scheme
+'spp22' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 122 ;
+	}
+#Random pattern 23 for SPP scheme
+'spp23' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 123 ;
+	}
+#Random pattern 24 for SPP scheme
+'spp24' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 124 ;
+	}
+#Random pattern 25 for SPP scheme
+'spp25' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 125 ;
+	}
+#Random pattern 26 for SPP scheme
+'spp26' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 126 ;
+	}
+#Random pattern 27 for SPP scheme
+'spp27' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 127 ;
+	}
+#Random pattern 28 for SPP scheme
+'spp28' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 128 ;
+	}
+#Random pattern 29 for SPP scheme
+'spp29' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 129 ;
+	}
+#Random pattern 30 for SPP scheme
+'spp30' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 130 ;
+	}
+#Random pattern 31 for SPP scheme
+'spp31' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 131 ;
+	}
+#Random pattern 32 for SPP scheme
+'spp32' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 132 ;
+	}
+#Random pattern 33 for SPP scheme
+'spp33' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 133 ;
+	}
+#Random pattern 34 for SPP scheme
+'spp34' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 134 ;
+	}
+#Random pattern 35 for SPP scheme
+'spp35' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 135 ;
+	}
+#Random pattern 36 for SPP scheme
+'spp36' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 136 ;
+	}
+#Random pattern 37 for SPP scheme
+'spp37' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 137 ;
+	}
+#Random pattern 38 for SPP scheme
+'spp38' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 138 ;
+	}
+#Random pattern 39 for SPP scheme
+'spp39' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 139 ;
+	}
+#Random pattern 40 for SPP scheme
+'spp40' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 140 ;
+	}
+#Random pattern 41 for SPP scheme
+'spp41' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 141 ;
+	}
+#Random pattern 42 for SPP scheme
+'spp42' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 142 ;
+	}
+#Random pattern 43 for SPP scheme
+'spp43' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 143 ;
+	}
+#Random pattern 44 for SPP scheme
+'spp44' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 144 ;
+	}
+#Random pattern 45 for SPP scheme
+'spp45' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 145 ;
+	}
+#Random pattern 46 for SPP scheme
+'spp46' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 146 ;
+	}
+#Random pattern 47 for SPP scheme
+'spp47' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 147 ;
+	}
+#Random pattern 48 for SPP scheme
+'spp48' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 148 ;
+	}
+#Random pattern 49 for SPP scheme
+'spp49' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 149 ;
+	}
+#Random pattern 50 for SPP scheme
+'spp50' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 150 ;
+	}
 # Cosine of solar zenith angle
 'uvcossza' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def
index c8f78c2..de3678e 100644
--- a/definitions/grib2/localConcepts/ecmf/name.def
+++ b/definitions/grib2/localConcepts/ecmf/name.def
@@ -4805,6 +4805,306 @@
 	 parameterCategory = 213 ;
 	 parameterNumber = 5 ;
 	}
+#Random pattern 1 for SPP scheme
+'Random pattern 1 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 101 ;
+	}
+#Random pattern 2 for SPP scheme
+'Random pattern 2 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 102 ;
+	}
+#Random pattern 3 for SPP scheme
+'Random pattern 3 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 103 ;
+	}
+#Random pattern 4 for SPP scheme
+'Random pattern 4 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 104 ;
+	}
+#Random pattern 5 for SPP scheme
+'Random pattern 5 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 105 ;
+	}
+#Random pattern 6 for SPP scheme
+'Random pattern 6 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 106 ;
+	}
+#Random pattern 7 for SPP scheme
+'Random pattern 7 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 107 ;
+	}
+#Random pattern 8 for SPP scheme
+'Random pattern 8 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 108 ;
+	}
+#Random pattern 9 for SPP scheme
+'Random pattern 9 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 109 ;
+	}
+#Random pattern 10 for SPP scheme
+'Random pattern 10 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 110 ;
+	}
+#Random pattern 11 for SPP scheme
+'Random pattern 11 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 111 ;
+	}
+#Random pattern 12 for SPP scheme
+'Random pattern 12 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 112 ;
+	}
+#Random pattern 13 for SPP scheme
+'Random pattern 13 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 113 ;
+	}
+#Random pattern 14 for SPP scheme
+'Random pattern 14 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 114 ;
+	}
+#Random pattern 15 for SPP scheme
+'Random pattern 15 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 115 ;
+	}
+#Random pattern 16 for SPP scheme
+'Random pattern 16 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 116 ;
+	}
+#Random pattern 17 for SPP scheme
+'Random pattern 17 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 117 ;
+	}
+#Random pattern 18 for SPP scheme
+'Random pattern 18 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 118 ;
+	}
+#Random pattern 19 for SPP scheme
+'Random pattern 19 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 119 ;
+	}
+#Random pattern 20 for SPP scheme
+'Random pattern 20 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 120 ;
+	}
+#Random pattern 21 for SPP scheme
+'Random pattern 21 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 121 ;
+	}
+#Random pattern 22 for SPP scheme
+'Random pattern 22 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 122 ;
+	}
+#Random pattern 23 for SPP scheme
+'Random pattern 23 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 123 ;
+	}
+#Random pattern 24 for SPP scheme
+'Random pattern 24 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 124 ;
+	}
+#Random pattern 25 for SPP scheme
+'Random pattern 25 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 125 ;
+	}
+#Random pattern 26 for SPP scheme
+'Random pattern 26 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 126 ;
+	}
+#Random pattern 27 for SPP scheme
+'Random pattern 27 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 127 ;
+	}
+#Random pattern 28 for SPP scheme
+'Random pattern 28 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 128 ;
+	}
+#Random pattern 29 for SPP scheme
+'Random pattern 29 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 129 ;
+	}
+#Random pattern 30 for SPP scheme
+'Random pattern 30 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 130 ;
+	}
+#Random pattern 31 for SPP scheme
+'Random pattern 31 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 131 ;
+	}
+#Random pattern 32 for SPP scheme
+'Random pattern 32 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 132 ;
+	}
+#Random pattern 33 for SPP scheme
+'Random pattern 33 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 133 ;
+	}
+#Random pattern 34 for SPP scheme
+'Random pattern 34 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 134 ;
+	}
+#Random pattern 35 for SPP scheme
+'Random pattern 35 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 135 ;
+	}
+#Random pattern 36 for SPP scheme
+'Random pattern 36 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 136 ;
+	}
+#Random pattern 37 for SPP scheme
+'Random pattern 37 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 137 ;
+	}
+#Random pattern 38 for SPP scheme
+'Random pattern 38 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 138 ;
+	}
+#Random pattern 39 for SPP scheme
+'Random pattern 39 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 139 ;
+	}
+#Random pattern 40 for SPP scheme
+'Random pattern 40 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 140 ;
+	}
+#Random pattern 41 for SPP scheme
+'Random pattern 41 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 141 ;
+	}
+#Random pattern 42 for SPP scheme
+'Random pattern 42 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 142 ;
+	}
+#Random pattern 43 for SPP scheme
+'Random pattern 43 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 143 ;
+	}
+#Random pattern 44 for SPP scheme
+'Random pattern 44 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 144 ;
+	}
+#Random pattern 45 for SPP scheme
+'Random pattern 45 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 145 ;
+	}
+#Random pattern 46 for SPP scheme
+'Random pattern 46 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 146 ;
+	}
+#Random pattern 47 for SPP scheme
+'Random pattern 47 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 147 ;
+	}
+#Random pattern 48 for SPP scheme
+'Random pattern 48 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 148 ;
+	}
+#Random pattern 49 for SPP scheme
+'Random pattern 49 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 149 ;
+	}
+#Random pattern 50 for SPP scheme
+'Random pattern 50 for SPP scheme' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 150 ;
+	}
 # Cosine of solar zenith angle
 ' Cosine of solar zenith angle' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def
index b6f8802..857ac69 100644
--- a/definitions/grib2/localConcepts/ecmf/paramId.def
+++ b/definitions/grib2/localConcepts/ecmf/paramId.def
@@ -4805,6 +4805,306 @@
 	 parameterCategory = 213 ;
 	 parameterNumber = 5 ;
 	}
+#Random pattern 1 for SPP scheme
+'213101' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 101 ;
+	}
+#Random pattern 2 for SPP scheme
+'213102' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 102 ;
+	}
+#Random pattern 3 for SPP scheme
+'213103' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 103 ;
+	}
+#Random pattern 4 for SPP scheme
+'213104' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 104 ;
+	}
+#Random pattern 5 for SPP scheme
+'213105' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 105 ;
+	}
+#Random pattern 6 for SPP scheme
+'213106' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 106 ;
+	}
+#Random pattern 7 for SPP scheme
+'213107' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 107 ;
+	}
+#Random pattern 8 for SPP scheme
+'213108' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 108 ;
+	}
+#Random pattern 9 for SPP scheme
+'213109' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 109 ;
+	}
+#Random pattern 10 for SPP scheme
+'213110' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 110 ;
+	}
+#Random pattern 11 for SPP scheme
+'213111' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 111 ;
+	}
+#Random pattern 12 for SPP scheme
+'213112' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 112 ;
+	}
+#Random pattern 13 for SPP scheme
+'213113' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 113 ;
+	}
+#Random pattern 14 for SPP scheme
+'213114' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 114 ;
+	}
+#Random pattern 15 for SPP scheme
+'213115' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 115 ;
+	}
+#Random pattern 16 for SPP scheme
+'213116' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 116 ;
+	}
+#Random pattern 17 for SPP scheme
+'213117' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 117 ;
+	}
+#Random pattern 18 for SPP scheme
+'213118' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 118 ;
+	}
+#Random pattern 19 for SPP scheme
+'213119' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 119 ;
+	}
+#Random pattern 20 for SPP scheme
+'213120' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 120 ;
+	}
+#Random pattern 21 for SPP scheme
+'213121' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 121 ;
+	}
+#Random pattern 22 for SPP scheme
+'213122' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 122 ;
+	}
+#Random pattern 23 for SPP scheme
+'213123' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 123 ;
+	}
+#Random pattern 24 for SPP scheme
+'213124' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 124 ;
+	}
+#Random pattern 25 for SPP scheme
+'213125' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 125 ;
+	}
+#Random pattern 26 for SPP scheme
+'213126' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 126 ;
+	}
+#Random pattern 27 for SPP scheme
+'213127' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 127 ;
+	}
+#Random pattern 28 for SPP scheme
+'213128' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 128 ;
+	}
+#Random pattern 29 for SPP scheme
+'213129' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 129 ;
+	}
+#Random pattern 30 for SPP scheme
+'213130' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 130 ;
+	}
+#Random pattern 31 for SPP scheme
+'213131' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 131 ;
+	}
+#Random pattern 32 for SPP scheme
+'213132' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 132 ;
+	}
+#Random pattern 33 for SPP scheme
+'213133' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 133 ;
+	}
+#Random pattern 34 for SPP scheme
+'213134' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 134 ;
+	}
+#Random pattern 35 for SPP scheme
+'213135' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 135 ;
+	}
+#Random pattern 36 for SPP scheme
+'213136' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 136 ;
+	}
+#Random pattern 37 for SPP scheme
+'213137' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 137 ;
+	}
+#Random pattern 38 for SPP scheme
+'213138' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 138 ;
+	}
+#Random pattern 39 for SPP scheme
+'213139' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 139 ;
+	}
+#Random pattern 40 for SPP scheme
+'213140' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 140 ;
+	}
+#Random pattern 41 for SPP scheme
+'213141' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 141 ;
+	}
+#Random pattern 42 for SPP scheme
+'213142' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 142 ;
+	}
+#Random pattern 43 for SPP scheme
+'213143' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 143 ;
+	}
+#Random pattern 44 for SPP scheme
+'213144' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 144 ;
+	}
+#Random pattern 45 for SPP scheme
+'213145' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 145 ;
+	}
+#Random pattern 46 for SPP scheme
+'213146' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 146 ;
+	}
+#Random pattern 47 for SPP scheme
+'213147' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 147 ;
+	}
+#Random pattern 48 for SPP scheme
+'213148' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 148 ;
+	}
+#Random pattern 49 for SPP scheme
+'213149' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 149 ;
+	}
+#Random pattern 50 for SPP scheme
+'213150' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 150 ;
+	}
 # Cosine of solar zenith angle
 '214001' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def
index ab594d1..5987937 100644
--- a/definitions/grib2/localConcepts/ecmf/shortName.def
+++ b/definitions/grib2/localConcepts/ecmf/shortName.def
@@ -4805,6 +4805,306 @@
 	 parameterCategory = 213 ;
 	 parameterNumber = 5 ;
 	}
+#Random pattern 1 for SPP scheme
+'spp1' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 101 ;
+	}
+#Random pattern 2 for SPP scheme
+'spp2' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 102 ;
+	}
+#Random pattern 3 for SPP scheme
+'spp3' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 103 ;
+	}
+#Random pattern 4 for SPP scheme
+'spp4' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 104 ;
+	}
+#Random pattern 5 for SPP scheme
+'spp5' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 105 ;
+	}
+#Random pattern 6 for SPP scheme
+'spp6' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 106 ;
+	}
+#Random pattern 7 for SPP scheme
+'spp7' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 107 ;
+	}
+#Random pattern 8 for SPP scheme
+'spp8' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 108 ;
+	}
+#Random pattern 9 for SPP scheme
+'spp9' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 109 ;
+	}
+#Random pattern 10 for SPP scheme
+'spp10' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 110 ;
+	}
+#Random pattern 11 for SPP scheme
+'spp11' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 111 ;
+	}
+#Random pattern 12 for SPP scheme
+'spp12' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 112 ;
+	}
+#Random pattern 13 for SPP scheme
+'spp13' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 113 ;
+	}
+#Random pattern 14 for SPP scheme
+'spp14' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 114 ;
+	}
+#Random pattern 15 for SPP scheme
+'spp15' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 115 ;
+	}
+#Random pattern 16 for SPP scheme
+'spp16' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 116 ;
+	}
+#Random pattern 17 for SPP scheme
+'spp17' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 117 ;
+	}
+#Random pattern 18 for SPP scheme
+'spp18' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 118 ;
+	}
+#Random pattern 19 for SPP scheme
+'spp19' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 119 ;
+	}
+#Random pattern 20 for SPP scheme
+'spp20' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 120 ;
+	}
+#Random pattern 21 for SPP scheme
+'spp21' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 121 ;
+	}
+#Random pattern 22 for SPP scheme
+'spp22' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 122 ;
+	}
+#Random pattern 23 for SPP scheme
+'spp23' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 123 ;
+	}
+#Random pattern 24 for SPP scheme
+'spp24' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 124 ;
+	}
+#Random pattern 25 for SPP scheme
+'spp25' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 125 ;
+	}
+#Random pattern 26 for SPP scheme
+'spp26' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 126 ;
+	}
+#Random pattern 27 for SPP scheme
+'spp27' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 127 ;
+	}
+#Random pattern 28 for SPP scheme
+'spp28' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 128 ;
+	}
+#Random pattern 29 for SPP scheme
+'spp29' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 129 ;
+	}
+#Random pattern 30 for SPP scheme
+'spp30' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 130 ;
+	}
+#Random pattern 31 for SPP scheme
+'spp31' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 131 ;
+	}
+#Random pattern 32 for SPP scheme
+'spp32' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 132 ;
+	}
+#Random pattern 33 for SPP scheme
+'spp33' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 133 ;
+	}
+#Random pattern 34 for SPP scheme
+'spp34' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 134 ;
+	}
+#Random pattern 35 for SPP scheme
+'spp35' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 135 ;
+	}
+#Random pattern 36 for SPP scheme
+'spp36' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 136 ;
+	}
+#Random pattern 37 for SPP scheme
+'spp37' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 137 ;
+	}
+#Random pattern 38 for SPP scheme
+'spp38' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 138 ;
+	}
+#Random pattern 39 for SPP scheme
+'spp39' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 139 ;
+	}
+#Random pattern 40 for SPP scheme
+'spp40' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 140 ;
+	}
+#Random pattern 41 for SPP scheme
+'spp41' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 141 ;
+	}
+#Random pattern 42 for SPP scheme
+'spp42' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 142 ;
+	}
+#Random pattern 43 for SPP scheme
+'spp43' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 143 ;
+	}
+#Random pattern 44 for SPP scheme
+'spp44' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 144 ;
+	}
+#Random pattern 45 for SPP scheme
+'spp45' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 145 ;
+	}
+#Random pattern 46 for SPP scheme
+'spp46' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 146 ;
+	}
+#Random pattern 47 for SPP scheme
+'spp47' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 147 ;
+	}
+#Random pattern 48 for SPP scheme
+'spp48' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 148 ;
+	}
+#Random pattern 49 for SPP scheme
+'spp49' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 149 ;
+	}
+#Random pattern 50 for SPP scheme
+'spp50' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 150 ;
+	}
 # Cosine of solar zenith angle
 'uvcossza' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def
index 7d8811b..c0b92e2 100644
--- a/definitions/grib2/localConcepts/ecmf/units.def
+++ b/definitions/grib2/localConcepts/ecmf/units.def
@@ -4805,6 +4805,306 @@
 	 parameterCategory = 213 ;
 	 parameterNumber = 5 ;
 	}
+#Random pattern 1 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 101 ;
+	}
+#Random pattern 2 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 102 ;
+	}
+#Random pattern 3 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 103 ;
+	}
+#Random pattern 4 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 104 ;
+	}
+#Random pattern 5 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 105 ;
+	}
+#Random pattern 6 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 106 ;
+	}
+#Random pattern 7 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 107 ;
+	}
+#Random pattern 8 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 108 ;
+	}
+#Random pattern 9 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 109 ;
+	}
+#Random pattern 10 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 110 ;
+	}
+#Random pattern 11 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 111 ;
+	}
+#Random pattern 12 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 112 ;
+	}
+#Random pattern 13 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 113 ;
+	}
+#Random pattern 14 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 114 ;
+	}
+#Random pattern 15 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 115 ;
+	}
+#Random pattern 16 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 116 ;
+	}
+#Random pattern 17 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 117 ;
+	}
+#Random pattern 18 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 118 ;
+	}
+#Random pattern 19 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 119 ;
+	}
+#Random pattern 20 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 120 ;
+	}
+#Random pattern 21 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 121 ;
+	}
+#Random pattern 22 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 122 ;
+	}
+#Random pattern 23 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 123 ;
+	}
+#Random pattern 24 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 124 ;
+	}
+#Random pattern 25 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 125 ;
+	}
+#Random pattern 26 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 126 ;
+	}
+#Random pattern 27 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 127 ;
+	}
+#Random pattern 28 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 128 ;
+	}
+#Random pattern 29 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 129 ;
+	}
+#Random pattern 30 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 130 ;
+	}
+#Random pattern 31 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 131 ;
+	}
+#Random pattern 32 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 132 ;
+	}
+#Random pattern 33 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 133 ;
+	}
+#Random pattern 34 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 134 ;
+	}
+#Random pattern 35 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 135 ;
+	}
+#Random pattern 36 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 136 ;
+	}
+#Random pattern 37 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 137 ;
+	}
+#Random pattern 38 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 138 ;
+	}
+#Random pattern 39 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 139 ;
+	}
+#Random pattern 40 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 140 ;
+	}
+#Random pattern 41 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 141 ;
+	}
+#Random pattern 42 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 142 ;
+	}
+#Random pattern 43 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 143 ;
+	}
+#Random pattern 44 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 144 ;
+	}
+#Random pattern 45 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 145 ;
+	}
+#Random pattern 46 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 146 ;
+	}
+#Random pattern 47 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 147 ;
+	}
+#Random pattern 48 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 148 ;
+	}
+#Random pattern 49 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 149 ;
+	}
+#Random pattern 50 for SPP scheme
+'dimensionless' = {
+	 discipline = 192 ;
+	 parameterCategory = 213 ;
+	 parameterNumber = 150 ;
+	}
 # Cosine of solar zenith angle
 '~' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def
index a31fc5c..06c36a8 100644
--- a/definitions/grib2/name.def
+++ b/definitions/grib2/name.def
@@ -220,6 +220,28 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 37 ;
 	}
+#maximum CAPE in the last 6 hours
+'maximum CAPE in the last 6 hours' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 6 ;
+	 typeOfSecondFixedSurface = 8 ;
+	 lengthOfTimeRange = 6 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	}
+#maximum CAPES in the last 6 hours
+'maximum CAPES in the last 6 hours' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 19 ;
+	 lengthOfTimeRange = 6 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfSecondFixedSurface = 8 ;
+	}
 #Height of convective cloud top
 'Height of convective cloud top' = {
 	 discipline = 0 ;
diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def
index 13dce15..a6c29e7 100644
--- a/definitions/grib2/paramId.def
+++ b/definitions/grib2/paramId.def
@@ -220,6 +220,28 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 37 ;
 	}
+#maximum CAPE in the last 6 hours
+'228035' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 6 ;
+	 lengthOfTimeRange = 6 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfSecondFixedSurface = 8 ;
+	}
+#maximum CAPES in the last 6 hours
+'228036' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 19 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfSecondFixedSurface = 8 ;
+	 lengthOfTimeRange = 6 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	}
 #Height of convective cloud top
 '228046' = {
 	 discipline = 0 ;
diff --git a/definitions/grib2/section.1.def b/definitions/grib2/section.1.def
index 6992690..280c984 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  'grib2/centre.table' : dump,string_type;
+codetable[2] centre  'common/c-11.table' : dump,string_type;
 alias identificationOfOriginatingGeneratingCentre=centre;
 meta centreDescription codetable_title(centre);
 
diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def
index 4047c0e..1594d44 100644
--- a/definitions/grib2/shortName.def
+++ b/definitions/grib2/shortName.def
@@ -220,6 +220,28 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 37 ;
 	}
+#maximum CAPE in the last 6 hours
+'mxcape6' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 6 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfSecondFixedSurface = 8 ;
+	 lengthOfTimeRange = 6 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#maximum CAPES in the last 6 hours
+'mxcapes6' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 19 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfSecondFixedSurface = 8 ;
+	 lengthOfTimeRange = 6 ;
+	}
 #Height of convective cloud top
 'hcct' = {
 	 discipline = 0 ;
diff --git a/definitions/grib2/template.4.parameter_postproc.def b/definitions/grib2/template.4.parameter_postproc.def
index d5a2473..394f26c 100644
--- a/definitions/grib2/template.4.parameter_postproc.def
+++ b/definitions/grib2/template.4.parameter_postproc.def
@@ -22,7 +22,7 @@ meta parameterName  codetable_title(parameterNumber) : dump;
 unsigned[2]  inputProcessIdentifier                      : dump,edition_specific;
 #  The input originating centre shall have the value of the 'originating centre' of the original GRIB message
 #  used as input of the post-processing
-codetable[2] inputOriginatingCentre 'grib2/centre.table' : dump,edition_specific,string_type;
+codetable[2] inputOriginatingCentre 'common/c-11.table' : dump,edition_specific,string_type;
 #  This identifies which post-processing technique was used. This is defined by the originating centre
 unsigned[1]  typeOfPostProcessing                        : dump,edition_specific;
 
diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def
index 22a77c0..3bea618 100644
--- a/definitions/grib2/units.def
+++ b/definitions/grib2/units.def
@@ -220,6 +220,28 @@
 	 parameterCategory = 6 ;
 	 parameterNumber = 37 ;
 	}
+#maximum CAPE in the last 6 hours
+'J kg**-1' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 6 ;
+	 typeOfSecondFixedSurface = 8 ;
+	 lengthOfTimeRange = 6 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	}
+#maximum CAPES in the last 6 hours
+'m**2 s**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 7 ;
+	 parameterNumber = 19 ;
+	 lengthOfTimeRange = 6 ;
+	 typeOfStatisticalProcessing = 2 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfSecondFixedSurface = 8 ;
+	}
 #Height of convective cloud top
 'm' = {
 	 discipline = 0 ;
diff --git a/definitions/tide/section.1.def b/definitions/tide/section.1.def
index 870d19d..44a30e5 100644
--- a/definitions/tide/section.1.def
+++ b/definitions/tide/section.1.def
@@ -9,7 +9,7 @@
 
 section_length[3] section1Length ;
 unsigned[1] gribTablesVersionNo ;
-codetable[1] centre 'grib1/0.table';
+codetable[1] centre 'common/c-1.table';
 alias ls.centre=centre;
 
 unsigned[1] generatingProcessIdentifier ;
diff --git a/examples/C/bufr_attributes.c b/examples/C/bufr_attributes.c
index 21b4011..eaf9e5d 100644
--- a/examples/C/bufr_attributes.c
+++ b/examples/C/bufr_attributes.c
@@ -51,14 +51,14 @@ int main(int argc,char* argv[])
 
         printf("message: %d\n",cnt);
 
-        /* we need to instruct ecCodes to expand the descriptors 
+        /* we need to instruct ecCodes to expand the descriptors
           i.e. unpack the data values */
         CODES_CHECK(codes_set_long(h, "unpack", 1),0);
 
         /* ----------------------------------------------------------------
            We will read the value and all the attributes available for
            the 2m temperature.
-        -------------------------------------------------------------------*/ 
+        -------------------------------------------------------------------*/
 
         /* get the value as double */
         CODES_CHECK(codes_get_double(h, "airTemperatureAt2M", &doubleVal),0);
@@ -90,11 +90,11 @@ int main(int argc,char* argv[])
         CODES_CHECK(codes_get_long(h, "airTemperatureAt2M->width", &longVal),0);
         printf("  airTemperatureAt2M->width: %ld\n",longVal);
 
-        /* --------------------------------------------------------------------
-           The 2m temperature data element in this message has an associated 
-           field: percentConfidence. Its value and attributes can be accessed 
-           in a similar manner as was shown above for 2m temperature. 
-        -------------------------------------------------------------------*/ 
+        /* -----------------------------------------------------------------
+           The 2m temperature data element in this message has an associated
+           field: percentConfidence. Its value and attributes can be accessed
+           in a similar manner as was shown above for 2m temperature.
+           ----------------------------------------------------------------- */
 
         /* get the value as long */
         CODES_CHECK(codes_get_long(h, "airTemperatureAt2M->percentConfidence", &longVal),0);
@@ -126,7 +126,7 @@ int main(int argc,char* argv[])
         CODES_CHECK(codes_get_long(h, "airTemperatureAt2M->percentConfidence->width", &longVal),0);
         printf("  airTemperatureAt2M->percentConfidence->width: %ld\n",longVal);
 
-        /* free allocated arrays */      
+        /* free allocated arrays */
         free(units);
         free(unitsPercent);
 
diff --git a/examples/C/bufr_attributes.sh b/examples/C/bufr_attributes.sh
index 5e83863..28b94e4 100755
--- a/examples/C/bufr_attributes.sh
+++ b/examples/C/bufr_attributes.sh
@@ -24,7 +24,7 @@ rm -f $fTmp | true
 REDIRECT=/dev/null
 
 #Write the key values into a file
-${examples_dir}c_bufr_attributes 2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_attributes 2> $REDIRECT > $fTmp
 
 #TODO: check the results
 
diff --git a/examples/C/bufr_clone.sh b/examples/C/bufr_clone.sh
index 7e01649..482cb4e 100755
--- a/examples/C/bufr_clone.sh
+++ b/examples/C/bufr_clone.sh
@@ -22,11 +22,11 @@ f=${data_dir}/bufr/syno_1.bufr
 REDIRECT=/dev/null
 
 #Clone the bufr messages
-${examples_dir}c_bufr_clone $f $fBufrTmp >$REDIRECT 2> $REDIRECT
+${examples_dir}/c_bufr_clone $f $fBufrTmp >$REDIRECT 2> $REDIRECT
 
 #Compare clone to the original
 set +e
-${tools_dir}bufr_compare $f $fBufrTmp >$REDIRECT 2> $REDIRECT
+${tools_dir}/bufr_compare $f $fBufrTmp >$REDIRECT 2> $REDIRECT
 
 #Check if clone is different
 if [ $? -eq 0 ]; then
diff --git a/examples/C/bufr_copy_data.c b/examples/C/bufr_copy_data.c
index dd21393..d81cc56 100644
--- a/examples/C/bufr_copy_data.c
+++ b/examples/C/bufr_copy_data.c
@@ -98,7 +98,7 @@ int main(int argc, char *argv[])
             printf("Copied %s\n",keys[i]);
             free(keys[i]);
         }
-        printf("Copied a total of %ld keys\n", nkeys);
+        printf("Total number of copied keys = %ld\n", nkeys);
         free(keys);
 
         codes_handle_delete(h);
diff --git a/examples/C/bufr_copy_data.sh b/examples/C/bufr_copy_data.sh
index d137946..d1100c0 100755
--- a/examples/C/bufr_copy_data.sh
+++ b/examples/C/bufr_copy_data.sh
@@ -12,11 +12,12 @@
 #Define a common label for all the tmp files
 label="bufr_copy_data_c"
 
-TEMP=$label.out.bufr
+TEMP_BUFR=$label.out.bufr
+TEMP_TEXT=$label.out.txt
 REF=$label.compare.log.ref
 MYLOG=$label.compare.log
 
-rm -f ${TEMP} ${REF} ${MYLOG}
+rm -f ${TEMP_BUFR} ${TEMP_TEXT} ${REF} ${MYLOG}
 
 cat > ${REF} <<EOF
 == 1 == DIFFERENCE == Different size for "unexpandedDescriptors"  [43]  [28]
@@ -53,15 +54,18 @@ cat > ${REF} <<EOF
 EOF
 
 INPUT=${data_dir}/bufr/metar_with_2_bias.bufr
-${examples_dir}c_bufr_copy_data ${INPUT} ${TEMP}
+${examples_dir}/c_bufr_copy_data ${INPUT} ${TEMP_BUFR} > ${TEMP_TEXT}
+
+num_copied_keys=`grep -c '^Copied' ${TEMP_TEXT}`
+[ $num_copied_keys -eq 58 ]
 
 # The input and output BUFR messages should be different
 set +e
-${tools_dir}bufr_compare ${TEMP} ${INPUT} > ${MYLOG}
+${tools_dir}/bufr_compare ${TEMP_BUFR} ${INPUT} > ${MYLOG}
 status=$?
 set -e
 [ $status -eq 1 ]
 
 diff ${MYLOG} ${REF}
 
-rm -f ${TEMP} ${REF} ${MYLOG}
+rm -f ${TEMP_BUFR} ${REF} ${MYLOG} ${TEMP_TEXT}
diff --git a/examples/C/bufr_expanded.sh b/examples/C/bufr_expanded.sh
index e54a9e6..6230d9e 100755
--- a/examples/C/bufr_expanded.sh
+++ b/examples/C/bufr_expanded.sh
@@ -24,7 +24,7 @@ f=${data_dir}/bufr/syno_1.bufr
 REDIRECT=/dev/null
 
 #Write the values into a file
-${examples_dir}c_bufr_expanded $f > $fTmp 2> $REDIRECT 
+${examples_dir}/c_bufr_expanded $f > $fTmp 2> $REDIRECT
 
 #TODO: add a better check. It could be compared against the bufrdc
 # references.
diff --git a/examples/C/bufr_get_keys.c b/examples/C/bufr_get_keys.c
index 791c113..2a890c3 100644
--- a/examples/C/bufr_get_keys.c
+++ b/examples/C/bufr_get_keys.c
@@ -26,7 +26,7 @@ int main(int argc,char* argv[])
 
     long *descriptors=NULL;
     double *values = NULL;
-    char* typicalDate= NULL; 
+    char* typicalDate= NULL;
     long longVal;
     double doubleVal;
     size_t values_len=0, desc_len=0, len=0;
@@ -51,11 +51,11 @@ int main(int argc,char* argv[])
 
         printf("message: %d\n",cnt);
 
-        /* we need to instruct ecCodes to expand the descriptors 
+        /* we need to instruct ecCodes to expand the descriptors
           i.e. unpack the data values */
         CODES_CHECK(codes_set_long(h, "unpack", 1),0);
 
-        /* read and print some data values */ 
+        /* read and print some data values */
 
         /* long value */
         CODES_CHECK(codes_get_long(h, "blockNumber", &longVal),0);
diff --git a/examples/C/bufr_get_keys.sh b/examples/C/bufr_get_keys.sh
index 7185871..f8edd42 100755
--- a/examples/C/bufr_get_keys.sh
+++ b/examples/C/bufr_get_keys.sh
@@ -24,7 +24,7 @@ rm -f $fTmp | true
 REDIRECT=/dev/null
 
 #Write the key values into a file
-${examples_dir}c_bufr_get_keys 2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_get_keys 2> $REDIRECT > $fTmp
 
 #TODO: check the results
 
diff --git a/examples/C/bufr_keys_iterator.c b/examples/C/bufr_keys_iterator.c
index 01489c5..b87fbb2 100644
--- a/examples/C/bufr_keys_iterator.c
+++ b/examples/C/bufr_keys_iterator.c
@@ -12,8 +12,8 @@
  * C Implementation: bufr_keys_iterator
  *
  * Description: how to use keys_iterator functions and the
- *               codes_keys_iterator structure to get all the available
- *               keys in a BUFR message.
+ *              codes_bufr_keys_iterator structure to get all the available
+ *              keys in a BUFR message.
  *
  */
 
@@ -34,22 +34,7 @@ int main(int argc,char* argv[])
     /* message handle. Required in all the eccodes calls acting on a message.*/
     codes_handle* h=NULL;
     int err=0, cnt=0;
-    int keyType;
-
-    /* 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_FUNCTION; */
-
-    unsigned long key_iterator_filter_flags=CODES_KEYS_ITERATOR_ALL_KEYS;
-
-    /* name_space=NULL to get all the keys. Other namespaces are e.g. "ls" */
-    char* name_space=0;
+    int keyType = 0;
 
     char value[MAX_VAL_LEN];
     size_t vlen=MAX_VAL_LEN;
@@ -65,10 +50,10 @@ int main(int argc,char* argv[])
         return 1;
     }
 
-    /* loop over the messages in the bufr file */
+    /* loop over the messages in the BUFR file */
     while ((h = codes_handle_new_from_file(NULL,in,PRODUCT_BUFR,&err)) != NULL || err != CODES_SUCCESS)
     {
-        codes_keys_iterator* kiter=NULL;
+        codes_bufr_keys_iterator* kiter=NULL;
         if (h == NULL) {
             printf("Error: unable to create handle for message %d\n",cnt);
             cnt++;
@@ -77,21 +62,21 @@ int main(int argc,char* argv[])
 
         printf("message: %d\n",cnt);
 
-        /* get key iterator */
-        kiter=codes_keys_iterator_new(h,key_iterator_filter_flags,name_space);
+        /* we need to instruct ecCodes to unpack the data values */
+        CODES_CHECK(codes_set_long(h,"unpack",1),0);
+
+        /* get BUFR key iterator */
+        kiter=codes_bufr_keys_iterator_new(h,0);
         if (!kiter) {
-            printf("ERROR: Unable to create keys iterator\n");
+            printf("ERROR: Unable to create BUFR keys iterator\n");
             exit(1);
         }
 
-        /* we need to instruct ecCodes to unpack the data values */
-        CODES_CHECK(codes_set_long(h,"unpack",1),0);
-
         /* loop over the keys */
-        while(codes_keys_iterator_next(kiter))
+        while(codes_bufr_keys_iterator_next(kiter))
         {
-            /* get key name*/
-            const char* name = codes_keys_iterator_get_name(kiter);
+            /* get key name */
+            char* name = codes_bufr_keys_iterator_get_name(kiter);
             printf("  %s=",name);
 
             CODES_CHECK(codes_get_native_type(h,name,&keyType),0);
@@ -99,22 +84,22 @@ int main(int argc,char* argv[])
             /* get key size to see if it is an array */
             CODES_CHECK(codes_get_size(h,name,&klen),0);
 
-            /* not array */
-            if(klen ==1)
-            {    
+            if (klen ==1)
+            {
+                /* not array */
                 vlen=MAX_VAL_LEN;
                 bzero(value,vlen);
-
                 codes_get_string(h,name,value,&vlen);
-                printf("%s\n",value);                             
+                printf("%s\n",value);
             }
-            /* for arrays */    
-            else
+            else {
+                /* for arrays */
                 printf("(array of %ld)\n",klen);
+            }
         }
 
         /* delete key iterator */
-        codes_keys_iterator_delete(kiter);
+        codes_bufr_keys_iterator_delete(kiter);
 
         /* delete handle */
         codes_handle_delete(h);
diff --git a/examples/C/bufr_keys_iterator.sh b/examples/C/bufr_keys_iterator.sh
index 75b0179..c93d09a 100755
--- a/examples/C/bufr_keys_iterator.sh
+++ b/examples/C/bufr_keys_iterator.sh
@@ -17,18 +17,18 @@ label="bufr_keys_iterator_test_c"
 
 #Define tmp file
 fTmp=${label}".tmp.txt"
-rm -f $fTmp | true
+rm -f $fTmp
 
 REDIRECT=/dev/null
 
 f=${data_dir}/bufr/syno_1.bufr
 
 #Dump the keys
-${examples_dir}c_bufr_keys_iterator $f 2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_keys_iterator $f 2> $REDIRECT > $fTmp
 
 #TODO: check the output
-
-#cat  $fTmp
+grep -q '#5#cloudAmount->percentConfidence=70' $fTmp
+grep -q 'unexpandedDescriptors=(array of 10)'  $fTmp
 
 #Clean up
-rm -f $fTmp | true
+rm -f $fTmp
diff --git a/examples/C/bufr_missing.c b/examples/C/bufr_missing.c
index fcbfed5..30187ac 100644
--- a/examples/C/bufr_missing.c
+++ b/examples/C/bufr_missing.c
@@ -31,7 +31,7 @@ int main(int argc,char* argv[])
     const char* infile = "../../data/bufr/syno_1.bufr";
 
     in=fopen(infile,"r");
-    if (!in) 
+    if (!in)
     {
         printf("ERROR: unable to open file %s\n", infile);
         return 1;
@@ -48,7 +48,7 @@ int main(int argc,char* argv[])
 
         printf("message: %d\n",cnt);
 
-        /* we need to instruct ecCodes to expand the descriptors 
+        /* we need to instruct ecCodes to expand the descriptors
           i.e. unpack the data values */
         CODES_CHECK(codes_set_long(h,"unpack",1),0);
 
@@ -62,7 +62,7 @@ int main(int argc,char* argv[])
             printf("   --> value missing\n");
         }
         else
-        {   
+        {
             printf("   --> value present\n");
         }
 
diff --git a/examples/C/bufr_missing.sh b/examples/C/bufr_missing.sh
index be50f2f..7d096eb 100755
--- a/examples/C/bufr_missing.sh
+++ b/examples/C/bufr_missing.sh
@@ -24,7 +24,7 @@ rm -f $fTmp | true
 REDIRECT=/dev/null
 
 #Write the key values into a file
-${examples_dir}c_bufr_missing #2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_missing #2> $REDIRECT > $fTmp
 
 #TODO: check the results
 
diff --git a/examples/C/bufr_pthreads.sh b/examples/C/bufr_pthreads.sh
index b6a49a6..811e236 100755
--- a/examples/C/bufr_pthreads.sh
+++ b/examples/C/bufr_pthreads.sh
@@ -11,5 +11,5 @@
 
 for i in `seq 0 100`; do
    #echo iteration $i
-   ${examples_dir}c_bufr_pthreads
+   ${examples_dir}/c_bufr_pthreads
 done
diff --git a/examples/C/bufr_read_header.c b/examples/C/bufr_read_header.c
index 8b27f65..0cbb46b 100644
--- a/examples/C/bufr_read_header.c
+++ b/examples/C/bufr_read_header.c
@@ -26,14 +26,14 @@ int main(int argc,char* argv[])
 {
     char* filename = NULL;
     FILE* in = NULL;
-    
+
     /* message handle. Required in all the eccodes calls acting on a message.*/
     codes_handle* h=NULL;
     long longVal;
     int err=0, cnt=0;
-    
+
     if (argc!=2) usage(argv[0]);
-    
+
     filename=argv[1];
 
     in=fopen(filename,"r");
@@ -41,7 +41,7 @@ int main(int argc,char* argv[])
         printf("ERROR: unable to open file %s\n", filename);
         return 1;
     }
-    
+
     /* loop over the messages in the bufr file */
     while ((h = codes_handle_new_from_file(NULL,in,PRODUCT_BUFR,&err)) != NULL || err != CODES_SUCCESS)
     {
@@ -52,39 +52,39 @@ int main(int argc,char* argv[])
         }
 
         printf("message: %d\n",cnt);
-    
-        /* get and print some keys form the BUFR header */ 
-    
+
+        /* get and print some keys form the BUFR header */
+
         CODES_CHECK(codes_get_long(h,"dataCategory",&longVal),0);
         printf("  dataCategory: %ld\n",longVal);
-    
+
         CODES_CHECK(codes_get_long(h,"dataSubCategory",&longVal),0);
         printf("  dataSubCategory: %ld\n",longVal);
-        
+
         CODES_CHECK(codes_get_long(h,"typicalDate",&longVal),0);
         printf("  typicalDate: %ld\n",longVal);
-    
+
         CODES_CHECK(codes_get_long(h,"bufrHeaderCentre",&longVal),0);
         printf("  bufrHeaderCentre: %ld\n",longVal);
-    
+
         CODES_CHECK(codes_get_long(h,"bufrHeaderSubCentre",&longVal),0);
         printf("  bufrHeaderSubCentre: %ld\n",longVal);
-    
+
         CODES_CHECK(codes_get_long(h,"masterTablesVersionNumber",&longVal),0);
         printf("  masterTablesVersionNumber: %ld\n",longVal);
-    
+
         CODES_CHECK(codes_get_long(h,"localTablesVersionNumber",&longVal),0);
         printf("  localTablesVersionNumber: %ld\n",longVal);
-    
+
         CODES_CHECK(codes_get_long(h,"numberOfSubsets",&longVal),0);
         printf("  numberOfSubsets: %ld\n",longVal);
-    
+
         /* delete handle */
         codes_handle_delete(h);
-        
+
         cnt++;
     }
-    
+
     fclose(in);
     return 0;
 }
diff --git a/examples/C/bufr_read_header.sh b/examples/C/bufr_read_header.sh
index f3efa16..397a633 100755
--- a/examples/C/bufr_read_header.sh
+++ b/examples/C/bufr_read_header.sh
@@ -28,7 +28,7 @@ fRef=${f}.header.ref
 REDIRECT=/dev/null
 
 #Write the values into a file and compare with reference
-${examples_dir}c_bufr_read_header $f 2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_read_header $f 2> $REDIRECT > $fTmp
 
 #We compare output to the reference by ignoring the whitespaces 
 diff -w $fRef $fTmp >$REDIRECT 2> $REDIRECT
diff --git a/examples/C/bufr_read_scatterometer.c b/examples/C/bufr_read_scatterometer.c
index e4810ab..8d6629d 100644
--- a/examples/C/bufr_read_scatterometer.c
+++ b/examples/C/bufr_read_scatterometer.c
@@ -15,7 +15,7 @@
  *
  */
 
-/* 
+/*
  * Please note that scatterometer data can be encoded in various ways in BUFR. Therefore the code
  * below might not work directly for other types of messages than the one used in the
  * example. It is advised to use bufr_dump to understand the structure of the messages.
@@ -58,19 +58,19 @@ int main(int argc,char* argv[])
         /* We need to instruct ecCodes to expand the descriptors
          * i.e. unpack the data values */
         CODES_CHECK(codes_set_long(h,"unpack",1),0);
-        
+
         /* The BUFR file contains a single message with 2016 subsets in a compressed form.
          * It means each subset has exactly the same structure: they store one location with
-         * several beams and one backscatter value in each beam. 
-         * 
-         * To print the backScatter values for beamIdentifier=2 from all the subsets 
+         * several beams and one backscatter value in each beam.
+         *
+         * To print the backScatter values for beamIdentifier=2 from all the subsets
          * we will simply access the key by condition (see below) */
-        
+
         /* Get the total number of subsets. */
         CODES_CHECK(codes_get_long(h,"numberOfSubsets",&numObs),0);
 
         printf("Number of values: %ld\n",numObs);
-        
+
         /* Allocate memory for the values to be read. Each
          * parameter must have the same number of values. */
         lat = (double*)malloc(numObs*sizeof(double));
diff --git a/examples/C/bufr_read_scatterometer.sh b/examples/C/bufr_read_scatterometer.sh
index d407a37..e3548e8 100755
--- a/examples/C/bufr_read_scatterometer.sh
+++ b/examples/C/bufr_read_scatterometer.sh
@@ -23,7 +23,7 @@ rm -f $fTmp
 REDIRECT=/dev/null
 
 # Write the key values into a file
-${examples_dir}c_bufr_read_scatterometer 2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_read_scatterometer 2> $REDIRECT > $fTmp
 
 # Check the results
 grep -q "Number of values: 2016" $fTmp
diff --git a/examples/C/bufr_read_synop.c b/examples/C/bufr_read_synop.c
index 640fb9a..6267c5c 100644
--- a/examples/C/bufr_read_synop.c
+++ b/examples/C/bufr_read_synop.c
@@ -15,7 +15,7 @@
  *
  */
 
-/* 
+/*
  * Please note that SYNOP reports can be encoded in various ways in BUFR. Therefore the code
  * below might not work directly for other types of SYNOP messages than the one used in the
  * example. It is advised to use bufr_dump to understand the structure of the messages.
@@ -32,7 +32,7 @@ void usage(char* prog) {
 int main(int argc,char* argv[])
 {
     FILE* in = NULL;
-    
+
     /* message handle. Required in all the eccodes calls acting on a message.*/
     codes_handle* h=NULL;
 
@@ -47,7 +47,7 @@ int main(int argc,char* argv[])
         printf("ERROR: unable to open file %s\n", infile);
         return 1;
     }
-    
+
     /* loop over the messages in the bufr file */
     while ((h = codes_handle_new_from_file(NULL,in,PRODUCT_BUFR,&err)) != NULL || err != CODES_SUCCESS)
     {
@@ -56,75 +56,75 @@ int main(int argc,char* argv[])
             cnt++;
             continue;
         }
-    
+
         printf("message: %d\n",cnt);
-    
+
         /* we need to instruct ecCodes to unpack the data values */
         CODES_CHECK(codes_set_long(h,"unpack",1),0);
-    
-        /* station id*/     
+
+        /* station id*/
         CODES_CHECK(codes_get_long(h,"blockNumber",&longVal),0);
         printf("  blockNumber: %ld\n",longVal);
-    
+
         CODES_CHECK(codes_get_long(h,"stationNumber",&longVal),0);
         printf("  stationNumber: %ld\n",longVal);
-    
-        /* location*/     
+
+        /* location*/
         CODES_CHECK(codes_get_double(h,"latitude",&doubleVal),0);
         printf("  latitude: %f\n",doubleVal);
-    
+
         CODES_CHECK(codes_get_double(h,"longitude",&doubleVal),0);
         printf("  longitude: %f\n",doubleVal);
-    
+
         /* 2m temperature */
         CODES_CHECK(codes_get_double(h,"airTemperatureAt2M",&doubleVal),0);
         printf("  airTemperatureAt2M: %f\n",doubleVal);
-    
+
         /* 2m dewpoint temperature */
         CODES_CHECK(codes_get_double(h,"dewpointTemperatureAt2M",&doubleVal),0);
         printf("  dewpointTemperatureAt2M: %f\n",doubleVal);
-    
+
         /* 10 wind */
         CODES_CHECK(codes_get_double(h,"windSpeedAt10M",&doubleVal),0);
         printf("  windSpeedAt10M: %f\n",doubleVal);
-        
+
         CODES_CHECK(codes_get_double(h,"windDirectionAt10M",&doubleVal),0);
         printf("  windDirectionAt10M: %f\n",doubleVal);
-        
+
         /* The cloud information is stored in several blocks in the
          * SYNOP message and the same key means a different thing in different
          * parts of the message. In this example we will read the first
          * cloud block introduced by the key
-         * verticalSignificanceSurfaceObservations=1. 
+         * verticalSignificanceSurfaceObservations=1.
          * We know that this is the first occurrence of the keys we want to
          * read so we will use the # (occurrence) operator accordingly. */
-        
+
         /* Cloud amount (low and middleclouds) */
         CODES_CHECK(codes_get_long(h,"#1#cloudAmount",&longVal),0);
         printf("  cloudAmount (low and middle): %ld\n",longVal);
-        
+
         /* Height of cloud base */
         CODES_CHECK(codes_get_long(h,"#1#heightOfBaseOfCloud",&longVal),0);
         printf("  heightOfBaseOfCloud: %ld\n",longVal);
-        
+
         /* Cloud type (low clouds) */
         CODES_CHECK(codes_get_long(h,"#1#cloudType",&longVal),0);
         printf("  cloudType (low): %ld\n",longVal);
-        
+
         /* Cloud type (middle clouds) */
         CODES_CHECK(codes_get_long(h,"#2#cloudType",&longVal),0);
         printf("  cloudType (middle): %ld\n",longVal);
-        
+
         /* Cloud type (high clouds) */
         CODES_CHECK(codes_get_long(h,"#3#cloudType",&longVal),0);
         printf("  cloudType (high): %ld\n",longVal);
-        
+
         /* delete handle */
         codes_handle_delete(h);
-        
+
         cnt++;
     }
-    
+
     fclose(in);
     return 0;
 }
diff --git a/examples/C/bufr_read_synop.sh b/examples/C/bufr_read_synop.sh
index efc0f07..561ad4f 100755
--- a/examples/C/bufr_read_synop.sh
+++ b/examples/C/bufr_read_synop.sh
@@ -24,7 +24,7 @@ rm -f $fTmp | true
 REDIRECT=/dev/null
 
 #Write the values into a file and compare with reference
-${examples_dir}c_bufr_read_synop #2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_read_synop #2> $REDIRECT > $fTmp
 
 #TODO: check the output
 
diff --git a/examples/C/bufr_read_temp.c b/examples/C/bufr_read_temp.c
index b3bb066..d108936 100644
--- a/examples/C/bufr_read_temp.c
+++ b/examples/C/bufr_read_temp.c
@@ -14,8 +14,8 @@
  * Description: how to read temperature significant levels from TEMP BUFR messages.
  *
  */
- 
-/* 
+
+/*
  * Please note that TEMP reports can be encoded in various ways in BUFR. Therefore the code
  * below might not work directly for other types of TEMP messages than the one used in the
  * example. It is advised to use bufr_dump to understand the structure of the messages.
@@ -65,7 +65,7 @@ int main(int argc,char* argv[])
          *
          * In our BUFR message verticalSoundingSignificance is always followed by
          *    geopotential, airTemperature, dewpointTemperature,
-         *    windDirection, windSpeed and pressure. 
+         *    windDirection, windSpeed and pressure.
          * So in order to access any of these keys we need to use the
          * condition: verticalSoundingSignificance=4.
          */
diff --git a/examples/C/bufr_read_temp.sh b/examples/C/bufr_read_temp.sh
index 81cc899..6e7b401 100755
--- a/examples/C/bufr_read_temp.sh
+++ b/examples/C/bufr_read_temp.sh
@@ -24,7 +24,7 @@ rm -f $fTmp | true
 REDIRECT=/dev/null
 
 #Write the key values into a file
-${examples_dir}c_bufr_read_temp #2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_read_temp #2> $REDIRECT > $fTmp
 
 #TODO: check the results
 
diff --git a/examples/C/bufr_set_keys.c b/examples/C/bufr_set_keys.c
index a9da5cc..9f908ac 100644
--- a/examples/C/bufr_set_keys.c
+++ b/examples/C/bufr_set_keys.c
@@ -64,7 +64,7 @@ int main(int argc,char* argv[])
 
         printf("message: %d\n",cnt);
 
-        /* we need to instruct ecCodes to expand the descriptors 
+        /* we need to instruct ecCodes to expand the descriptors
           i.e. unpack the data values */
         /*CODES_CHECK(codes_set_long(h,"unpack",1),0);*/
 
diff --git a/examples/C/bufr_set_keys.sh b/examples/C/bufr_set_keys.sh
index df1194f..3956858 100755
--- a/examples/C/bufr_set_keys.sh
+++ b/examples/C/bufr_set_keys.sh
@@ -25,11 +25,11 @@ f=${data_dir}/bufr/syno_multi.bufr
 REDIRECT=/dev/null
 
 #
-${examples_dir}c_bufr_set_keys $fBufrTmp  2> $REDIRECT > $REDIRECT
+${examples_dir}/c_bufr_set_keys $fBufrTmp  2> $REDIRECT > $REDIRECT
 
 #Compare modified to the original
 set +e
-${tools_dir}bufr_compare $f $fBufrTmp >$REDIRECT 2> $REDIRECT
+${tools_dir}/bufr_compare $f $fBufrTmp >$REDIRECT 2> $REDIRECT
 
 #Check if modified is different
 if [ $? -eq 0 ]; then
@@ -40,7 +40,7 @@ fi
 set -e
 
 #Check if modified has the same number of messages
-[ `${tools_dir}bufr_count $f` -eq `${tools_dir}bufr_count ${fBufrTmp}` ]
+[ `${tools_dir}/bufr_count $f` -eq `${tools_dir}/bufr_count ${fBufrTmp}` ]
 
 #Clean up
 rm -f $fBufrTmp | true
diff --git a/examples/C/bufr_subset.sh b/examples/C/bufr_subset.sh
index 66619e4..2b16cce 100755
--- a/examples/C/bufr_subset.sh
+++ b/examples/C/bufr_subset.sh
@@ -42,7 +42,7 @@ EOF
 REDIRECT=/dev/null
 
 #Write the values into a file and compare with reference
-${examples_dir}c_bufr_subset 2> $REDIRECT > $fTmp
+${examples_dir}/c_bufr_subset 2> $REDIRECT > $fTmp
 
 #We compare output to the reference by ignoring the whitespaces 
 diff -w $fRef $fTmp >$REDIRECT 2> $REDIRECT
diff --git a/examples/C/get_product_kind.c b/examples/C/get_product_kind.c
index d7ffbe1..f37a465 100644
--- a/examples/C/get_product_kind.c
+++ b/examples/C/get_product_kind.c
@@ -39,7 +39,7 @@ int main(int argc,char* argv[])
         printf("ERROR: unable to open file %s\n", infile);
         return 1;
     }
-    
+
     while ((h = codes_handle_new_from_file(NULL,in,PRODUCT_ANY,&err)) != NULL || err != CODES_SUCCESS)
     {
         if (h == NULL) {
@@ -51,10 +51,10 @@ int main(int argc,char* argv[])
 
         CODES_CHECK(codes_get_length(h, "kindOfProduct", &len), 0);
         kind = (char*)malloc(len*sizeof(char));
-        
+
         codes_get_string(h, "kindOfProduct", kind, &len);
         printf("  product: %s\n", kind);
-    
+
         free(kind);
         codes_handle_delete(h);
         cnt++;
diff --git a/examples/C/get_product_kind.sh b/examples/C/get_product_kind.sh
index a1b77b7..4e2107f 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
+${examples_dir}/c_get_product_kind $fTmp
 
 rm -f $fTmp
diff --git a/examples/C/grib_clone.sh b/examples/C/grib_clone.sh
index e5925c4..0179ebb 100755
--- a/examples/C/grib_clone.sh
+++ b/examples/C/grib_clone.sh
@@ -12,11 +12,11 @@
 TEMP=cloned.grib
 
 INPUT=${data_dir}/reduced_gaussian_pressure_level.grib1
-${examples_dir}c_grib_clone ${INPUT} ${TEMP}  > /dev/null
-${tools_dir}grib_compare ${INPUT} ${TEMP}
+${examples_dir}/c_grib_clone ${INPUT} ${TEMP}  > /dev/null
+${tools_dir}/grib_compare ${INPUT} ${TEMP}
 
 INPUT=${data_dir}/sample.grib2
-${examples_dir}c_grib_clone ${INPUT} ${TEMP}  > /dev/null
-${tools_dir}grib_compare ${INPUT} ${TEMP}
+${examples_dir}/c_grib_clone ${INPUT} ${TEMP}  > /dev/null
+${tools_dir}/grib_compare ${INPUT} ${TEMP}
 
 rm -f ${TEMP}
diff --git a/examples/C/grib_copy_message.sh b/examples/C/grib_copy_message.sh
index c9de0d7..1277c7f 100755
--- a/examples/C/grib_copy_message.sh
+++ b/examples/C/grib_copy_message.sh
@@ -12,11 +12,11 @@
 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}
+${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}
+${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_ensemble_index.c b/examples/C/grib_ensemble_index.c
index 7af0a43..0524671 100644
--- a/examples/C/grib_ensemble_index.c
+++ b/examples/C/grib_ensemble_index.c
@@ -30,7 +30,7 @@ int main(int argc, char * argv[])
     double min=1e13,max=-1e13,avg=0;
     codes_index* index;
     codes_handle* h=NULL;
-    
+
     if (argc<2) return 1;
 
     /* create index of file contents for paramId and number */
diff --git a/examples/C/grib_ensemble_index.sh b/examples/C/grib_ensemble_index.sh
index 59cb5ea..1928b07 100755
--- a/examples/C/grib_ensemble_index.sh
+++ b/examples/C/grib_ensemble_index.sh
@@ -10,13 +10,13 @@
 . ./include.sh
 
 input="../../data/index.grib"
-${examples_dir}c_grib_ensemble_index $input
+${examples_dir}/c_grib_ensemble_index $input
 
 # ECC-378: Empty input file
 temp=temp_index.empty.grib
 touch $temp
 set +e
-${examples_dir}c_grib_ensemble_index $temp 2>/dev/null
+${examples_dir}/c_grib_ensemble_index $temp 2>/dev/null
 status=$?
 set -e
 [ $status -ne 0 ]
diff --git a/examples/C/grib_get_data.sh b/examples/C/grib_get_data.sh
index 7adb6d6..0df9380 100755
--- a/examples/C/grib_get_data.sh
+++ b/examples/C/grib_get_data.sh
@@ -9,4 +9,4 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_get_data > /dev/null
+${examples_dir}/c_grib_get_data > /dev/null
diff --git a/examples/C/grib_get_keys.c b/examples/C/grib_get_keys.c
index 346d2d4..7d5e506 100644
--- a/examples/C/grib_get_keys.c
+++ b/examples/C/grib_get_keys.c
@@ -139,7 +139,7 @@ int main(int argc, char** argv)
         byte_val = malloc(keySize*sizeof(char));
         GRIB_CHECK(codes_get_bytes(h, name, byte_val, &keySize), name);
     }
-    
+
     codes_handle_delete(h);
 
     return 0;
diff --git a/examples/C/grib_get_keys.sh b/examples/C/grib_get_keys.sh
index 814a1ac..f8f63bd 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
+${examples_dir}/c_grib_get_keys
 
diff --git a/examples/C/grib_iterator.c b/examples/C/grib_iterator.c
index e1a5ae9..432f319 100644
--- a/examples/C/grib_iterator.c
+++ b/examples/C/grib_iterator.c
@@ -19,7 +19,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "eccodes.h"  
+#include "eccodes.h"
 
 void usage(const char* prog) {
     printf("Usage: %s grib_file\n",prog);
diff --git a/examples/C/grib_iterator.sh b/examples/C/grib_iterator.sh
index 9d93a5d..d4ec014 100755
--- a/examples/C/grib_iterator.sh
+++ b/examples/C/grib_iterator.sh
@@ -9,7 +9,7 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_iterator ${data_dir}/reduced_gaussian_model_level.grib1 > /dev/null
+${examples_dir}/c_grib_iterator ${data_dir}/reduced_gaussian_model_level.grib1 > /dev/null
 
-${examples_dir}c_grib_iterator ${data_dir}/regular_gaussian_model_level.grib1 > /dev/null
+${examples_dir}/c_grib_iterator ${data_dir}/regular_gaussian_model_level.grib1 > /dev/null
 
diff --git a/examples/C/grib_keys_iterator.sh b/examples/C/grib_keys_iterator.sh
index 8ab00fe..b9e2269 100755
--- a/examples/C/grib_keys_iterator.sh
+++ b/examples/C/grib_keys_iterator.sh
@@ -9,8 +9,8 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_keys_iterator ${data_dir}/reduced_latlon_surface.grib1 > /dev/null
+${examples_dir}/c_grib_keys_iterator ${data_dir}/reduced_latlon_surface.grib1 > /dev/null
 
-${examples_dir}c_grib_keys_iterator ${data_dir}/regular_gaussian_model_level.grib1 > /dev/null
+${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
+${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 94a644b..70e1081 100755
--- a/examples/C/grib_list.sh
+++ b/examples/C/grib_list.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_list
+${examples_dir}/c_grib_list
 
diff --git a/examples/C/grib_multi.sh b/examples/C/grib_multi.sh
index 5addb9a..d379013 100755
--- a/examples/C/grib_multi.sh
+++ b/examples/C/grib_multi.sh
@@ -13,13 +13,13 @@ if [ ! -f "${data_dir}/multi.grib2" ]
 then
   echo "SKIP test 1: $0"
 else
-  ${examples_dir}c_grib_multi > /dev/null
+  ${examples_dir}/c_grib_multi > /dev/null
 fi
 
 if [ ! -f "${data_dir}/multi_created.grib2" ]
 then
   echo "SKIP test 2: $0"
 else
-  ${examples_dir}c_multi2 > /dev/null
+  ${examples_dir}/c_multi2 > /dev/null
 fi
 
diff --git a/examples/C/grib_multi_write.sh b/examples/C/grib_multi_write.sh
index c498756..ca5d4ec 100755
--- a/examples/C/grib_multi_write.sh
+++ b/examples/C/grib_multi_write.sh
@@ -14,13 +14,13 @@ then
   echo SKIP: $0
   exit
 fi
-${examples_dir}c_grib_multi_write ${data_dir}/sample.grib2 ${data_dir}/multi_sample.grib2 > /dev/null
+${examples_dir}/c_grib_multi_write ${data_dir}/sample.grib2 ${data_dir}/multi_sample.grib2 > /dev/null
 
-${tools_dir}grib_get -p step ${data_dir}/multi_sample.grib2 > ${data_dir}/multi_step.test
+${tools_dir}/grib_get -p step ${data_dir}/multi_sample.grib2 > ${data_dir}/multi_step.test
 
 diff ${data_dir}/multi_step.test ${data_dir}/multi_step.txt
 
-step=`${tools_dir}grib_get -M -p step ${data_dir}/multi_sample.grib2`
+step=`${tools_dir}/grib_get -M -p step ${data_dir}/multi_sample.grib2`
 
 [ $step -eq 12 ]
 
diff --git a/examples/C/grib_precipitation.c b/examples/C/grib_precipitation.c
index 09dbc8e..802d955 100644
--- a/examples/C/grib_precipitation.c
+++ b/examples/C/grib_precipitation.c
@@ -11,9 +11,9 @@
 /*
  * C Implementation: grib_precipitation
  *
- * Description: convert fields accumulated from 0 step in  
- *              fields accumulated in the interval between 
- *			    a field and another. In the input file the fields 
+ * Description: convert fields accumulated from 0 step in
+ *              fields accumulated in the interval between
+ *			    a field and another. In the input file the fields
  *              must be in ascending order in the step.
  *              step must be the most external loop (slower varying index)
  *
diff --git a/examples/C/grib_precision.sh b/examples/C/grib_precision.sh
index 996fe4f..c53b96e 100755
--- a/examples/C/grib_precision.sh
+++ b/examples/C/grib_precision.sh
@@ -9,6 +9,6 @@
 
 . ./include.sh
 
-${examples_dir}c_grib_precision
+${examples_dir}/c_grib_precision
 
 rm -f out.precision.grib1
diff --git a/examples/C/grib_print_data.sh b/examples/C/grib_print_data.sh
index 4bb4a2e..fa43fa1 100755
--- a/examples/C/grib_print_data.sh
+++ b/examples/C/grib_print_data.sh
@@ -9,7 +9,7 @@
 
 . ./include.sh
 
-numberOfValues=`${examples_dir}c_grib_print_data ../../data/constant_field.grib1 | grep values | awk '{print $1}'`
+numberOfValues=`${examples_dir}/c_grib_print_data ../../data/constant_field.grib1 | grep values | awk '{print $1}'`
 
 if [ $numberOfValues -ne 99200 ]
 then
diff --git a/examples/C/grib_pthreads.sh b/examples/C/grib_pthreads.sh
index ef725a9..e220a7f 100755
--- a/examples/C/grib_pthreads.sh
+++ b/examples/C/grib_pthreads.sh
@@ -10,5 +10,5 @@
 . ./include.sh
 
 for i in `seq 0 100`; do
-   ${examples_dir}c_grib_pthreads
+   ${examples_dir}/c_grib_pthreads
 done
diff --git a/examples/C/grib_set_bitmap.sh b/examples/C/grib_set_bitmap.sh
index 0aed0db..9f7fa0e 100755
--- a/examples/C/grib_set_bitmap.sh
+++ b/examples/C/grib_set_bitmap.sh
@@ -12,9 +12,9 @@
 OUT_TMP=out.set_bitmap_c.grib
 
 # The input and output files are hardcoded in the example
-${examples_dir}c_grib_set_bitmap
+${examples_dir}/c_grib_set_bitmap
 
-x=`${tools_dir}grib_get -p numberOfDataPoints,numberOfCodedValues,numberOfMissing $OUT_TMP`
+x=`${tools_dir}/grib_get -p numberOfDataPoints,numberOfCodedValues,numberOfMissing $OUT_TMP`
 [ "$x" = "496 486 10" ]
 
 rm -f $OUT_TMP
diff --git a/examples/C/grib_set_data.c b/examples/C/grib_set_data.c
index 0b6f18d..a9cf47e 100644
--- a/examples/C/grib_set_data.c
+++ b/examples/C/grib_set_data.c
@@ -58,7 +58,7 @@ int main(int argc, char** argv)
     /* But if your data array has a different size, then specify the grid geometry */
     /* (e.g. keys Ni, Nj etc) and set the correct number of data values */
     CODES_CHECK(codes_get_size(h, "values", &values_len),0);
-    
+
     values = (double*)malloc(values_len*sizeof(double));
     d=10e-8;
     e=d;
diff --git a/examples/C/grib_set_data.sh b/examples/C/grib_set_data.sh
index e27cfbf..be1d1f6 100755
--- a/examples/C/grib_set_data.sh
+++ b/examples/C/grib_set_data.sh
@@ -11,6 +11,6 @@
 
 OUT=temp.c_grib_set_data.out.grib
 
-${examples_dir}c_grib_set_data $OUT
+${examples_dir}/c_grib_set_data $OUT
 
 rm -f $OUT
diff --git a/examples/C/grib_set_keys.sh b/examples/C/grib_set_keys.sh
index 3d514d3..d485867 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
+${examples_dir}/c_grib_set_keys
 
 rm -f out.set.grib1
diff --git a/examples/C/grib_set_pv.sh b/examples/C/grib_set_pv.sh
index 518fd8e..67a7d04 100755
--- a/examples/C/grib_set_pv.sh
+++ b/examples/C/grib_set_pv.sh
@@ -13,7 +13,7 @@ GRIB1=${data_dir}/regular_latlon_surface.grib1
 GRIB2=${proj_dir}/samples/regular_ll_sfc_grib2.tmpl
 OUT=temp.$$.out
 
-${examples_dir}c_grib_set_pv $GRIB1 $OUT > /dev/null
-${examples_dir}c_grib_set_pv $GRIB2 $OUT > /dev/null
+${examples_dir}/c_grib_set_pv $GRIB1 $OUT > /dev/null
+${examples_dir}/c_grib_set_pv $GRIB2 $OUT > /dev/null
 
 rm -f $OUT
diff --git a/examples/C/include.ctest.sh.in b/examples/C/include.ctest.sh.in
index f232139..fbddce1 100644
--- a/examples/C/include.ctest.sh.in
+++ b/examples/C/include.ctest.sh.in
@@ -11,12 +11,12 @@ proj_dir=@PROJECT_SOURCE_DIR@
 data_dir=@PROJECT_BINARY_DIR@/data
 
 # use definitions from binary dir to test if installation will be correct
-def_dir="@CMAKE_BINARY_DIR@/share/@PROJECT_NAME@/definitions"
+def_dir="@CMAKE_BINARY_DIR@/@ECCODES_DEFINITION_SUFF@"
 ECCODES_DEFINITION_PATH="${def_dir}"
 export ECCODES_DEFINITION_PATH
 
-tools_dir=@CMAKE_BINARY_DIR@/bin/
-examples_dir=@CMAKE_CURRENT_BINARY_DIR@/
+tools_dir=@CMAKE_BINARY_DIR@/bin
+examples_dir=@CMAKE_CURRENT_BINARY_DIR@
 
 # If this environment variable is set, then run the
 # executables with valgrind
@@ -26,6 +26,6 @@ if test "x$ECCODES_TEST_WITH_VALGRIND" != "x"; then
 fi
 
 # use samples from binary dir to test if installation will be correct
-samp_dir="@CMAKE_BINARY_DIR@/share/@PROJECT_NAME@/samples"
+samp_dir="@CMAKE_BINARY_DIR@/@ECCODES_SAMPLES_SUFF@"
 ECCODES_SAMPLES_PATH=${samp_dir}
 export ECCODES_SAMPLES_PATH
diff --git a/examples/C/include.sh b/examples/C/include.sh
index 546e7f9..4e2a9d0 100644
--- a/examples/C/include.sh
+++ b/examples/C/include.sh
@@ -32,12 +32,12 @@ else
     export ECCODES_DEFINITION_PATH
     ECCODES_SAMPLES_PATH=$cpath/samples
     export ECCODES_SAMPLES_PATH
-    tools_dir=$cpath/tools/
-    examples_dir=$cpath/examples/C/
+    tools_dir=$cpath/tools
+    examples_dir=$cpath/examples/C
 
     if test "x$ECCODES_TEST_WITH_VALGRIND" != "x"; then
-      tools_dir="valgrind --error-exitcode=1 -q $cpath/tools/"
-      examples_dir="valgrind --error-exitcode=1 -q $cpath/examples/C/"
+      tools_dir="valgrind --error-exitcode=1 -q $cpath/tools"
+      examples_dir="valgrind --error-exitcode=1 -q $cpath/examples/C"
     fi
 
     data_dir=$cpath/data
@@ -61,6 +61,6 @@ else
   # Download the data needed for tests
   ${data_dir}/download.sh "${data_dir}"
 
-  #${tools_dir}codes_info
+  #${tools_dir}/codes_info
   set -u
 fi
diff --git a/examples/C/large_grib1.sh b/examples/C/large_grib1.sh
index 6b95b51..9d94387 100755
--- a/examples/C/large_grib1.sh
+++ b/examples/C/large_grib1.sh
@@ -10,9 +10,9 @@
 . ./include.sh
 
 # The executable should produce a GRIB1 file
-${examples_dir}c_large_grib1
+${examples_dir}/c_large_grib1
 
 # Make sure the newly created file can be listed OK
 output=bigfile.grib
-${tools_dir}grib_ls $output > /dev/null
+${tools_dir}/grib_ls $output > /dev/null
 rm -f $output
diff --git a/examples/C/new_sample.c b/examples/C/new_sample.c
index 7f5cd38..239e08f 100644
--- a/examples/C/new_sample.c
+++ b/examples/C/new_sample.c
@@ -47,7 +47,7 @@ int main(int argc,const char** argv)
 
     CODES_CHECK(codes_set_long(h,"editionNumber",2),0);
 
-    /* 98 = European Center for Medium-Range Weather Forecasts (grib1/0.table)  */
+    /* 98 = European Center for Medium-Range Weather Forecasts */
     CODES_CHECK(codes_set_long(h,"centre",98),0);
 
     CODES_CHECK(codes_set_long(h,"subCentre",0),0);
@@ -361,7 +361,7 @@ int main(int argc,const char** argv)
     vdouble[ 484] =       1; vdouble[ 485] =       1; vdouble[ 486] =       1; vdouble[ 487] =       1;
     vdouble[ 488] =       1; vdouble[ 489] =       1; vdouble[ 490] =       1; vdouble[ 491] =       1;
     vdouble[ 492] =       1; vdouble[ 493] =       1; vdouble[ 494] =       1; vdouble[ 495] =       1;
-   
+
     CODES_CHECK(codes_set_double_array(h,"values",vdouble,size),0);
     free(vdouble);
     CODES_CHECK(codes_set_long(h,"dirty_statistics",1),0);
diff --git a/examples/C/sections_copy.sh b/examples/C/sections_copy.sh
index cb7579f..3a3b8c4 100755
--- a/examples/C/sections_copy.sh
+++ b/examples/C/sections_copy.sh
@@ -15,39 +15,39 @@ OUTPUT=temp.sections.grib
 
 ##################
 # Copy the GRID section from REGUL_GRID_FILE
-${examples_dir}c_sections_copy $REGUL_GRID_FILE $GAUSS_GRID_FILE g $OUTPUT >/dev/null
+${examples_dir}/c_sections_copy $REGUL_GRID_FILE $GAUSS_GRID_FILE g $OUTPUT >/dev/null
 
 # Now the output should have a regular grid
 # but its date should be the same as the Gaussian grid sample
-grid_tmpl=`${tools_dir}grib_get -p gridType,date $OUTPUT`
+grid_tmpl=`${tools_dir}/grib_get -p gridType,date $OUTPUT`
 [ "$grid_tmpl" = "regular_ll 20100912" ]
 
 
 ##################
 # Copy the GRID section from GAUSS_GRID_FILE
-${examples_dir}c_sections_copy $GAUSS_GRID_FILE $REGUL_GRID_FILE g $OUTPUT >/dev/null
+${examples_dir}/c_sections_copy $GAUSS_GRID_FILE $REGUL_GRID_FILE g $OUTPUT >/dev/null
 
 # Now the output should have a gaussian grid
 # but its date should be the same as the regular grid
-grid_tmpl=`${tools_dir}grib_get -p gridType,date $OUTPUT`
+grid_tmpl=`${tools_dir}/grib_get -p gridType,date $OUTPUT`
 [ "$grid_tmpl" = "reduced_gg 20070323" ]
 
 
 ##################
 # Copy both the PRODUCT and GRID sections from REGUL_GRID_FILE
-${examples_dir}c_sections_copy $REGUL_GRID_FILE $GAUSS_GRID_FILE gp $OUTPUT >/dev/null
+${examples_dir}/c_sections_copy $REGUL_GRID_FILE $GAUSS_GRID_FILE gp $OUTPUT >/dev/null
 
 # Now the output should have a regular grid
 # and its date should be the same as the regular latlon
-grid_tmpl=`${tools_dir}grib_get -p gridType,date $OUTPUT`
+grid_tmpl=`${tools_dir}/grib_get -p gridType,date $OUTPUT`
 [ "$grid_tmpl" = "regular_ll 20070323" ]
 
 
 ##################
 # Copy all sections from REGUL_GRID_FILE (use commas)
-${examples_dir}c_sections_copy $REGUL_GRID_FILE $GAUSS_GRID_FILE p,l,g,d,b $OUTPUT >/dev/null
+${examples_dir}/c_sections_copy $REGUL_GRID_FILE $GAUSS_GRID_FILE p,l,g,d,b $OUTPUT >/dev/null
 
 # Now the output should be identical to the regular grib
-${tools_dir}grib_compare $REGUL_GRID_FILE $OUTPUT
+${tools_dir}/grib_compare $REGUL_GRID_FILE $OUTPUT
 
 rm -f $OUTPUT
diff --git a/examples/C/set_missing.sh b/examples/C/set_missing.sh
index 5e8aadd..468a9d1 100755
--- a/examples/C/set_missing.sh
+++ b/examples/C/set_missing.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}c_set_missing
+${examples_dir}/c_set_missing
 rm -f out_surface_level.grib2
diff --git a/examples/F90/bufr_attributes.f90 b/examples/F90/bufr_attributes.f90
index e57393e..723a6d2 100644
--- a/examples/F90/bufr_attributes.f90
+++ b/examples/F90/bufr_attributes.f90
@@ -20,9 +20,9 @@ integer            :: ifile
 integer            :: iret
 integer            :: ibufr
 integer            :: count=0
-integer(kind=4)    :: iVal,conf 
+integer(kind=4)    :: iVal,conf
 real(kind=8)       :: t2m
-character(len=32)   :: units, confUnits 
+character(len=32)   :: units, confUnits
 
   call codes_open_file(ifile,'../../data/bufr/syno_multi.bufr','r')
 
@@ -31,48 +31,48 @@ character(len=32)   :: units, confUnits
   call codes_bufr_new_from_file(ifile,ibufr,iret)
 
   do while (iret/=CODES_END_OF_FILE)
-    
-    ! Get and print some keys form the BUFR header 
+
+    ! Get and print some keys form the BUFR header
     write(*,*) 'message: ',count
 
-    ! We need to instruct ecCodes to expand all the descriptors 
+    ! We need to instruct ecCodes to expand all the descriptors
     ! i.e. unpack the data values
     call codes_set(ibufr,"unpack",1);
 
     ! ----------------------------------------------------------------
     !  We will read the value and all the attributes available for
     !  the 2m temperature.
-    ! ---------------------------------------------------------------- 
+    ! ----------------------------------------------------------------
 
     ! Get the element's value as as real
     call codes_get(ibufr,'airTemperatureAt2M',t2m);
     write(*,*) '  airTemperatureAt2M:',t2m
-   
+
     ! Get the element's code (see BUFR code table B)
     call codes_get(ibufr,'airTemperatureAt2M->code',iVal);
     write(*,*) '  airTemperatureAt2M->code:',iVal
-   
+
     ! Get the element's units (see BUFR code table B)
     call codes_get(ibufr,'airTemperatureAt2M->units',units)
     write(*,*) '  airTemperatureAt2M->units:',units
-   
+
     ! Get the element's scale (see BUFR code table B)
     call codes_get(ibufr,'airTemperatureAt2M->scale',iVal);
     write(*,*) '  airTemperatureAt2M->code:',iVal
-   
+
     ! Get the element's reference (see BUFR code table B)
     call codes_get(ibufr,'airTemperatureAt2M->reference',iVal);
     write(*,*) '  airTemperatureAt2M->reference:',iVal
-   
+
     ! Get the element's width (see BUFR code table B)
     call codes_get(ibufr,'airTemperatureAt2M->width',iVal);
     write(*,*) '  airTemperatureAt2M->width:',iVal
 
     ! -------------------------------------------------------------------
-    !  The 2m temperature data element in this message has an associated 
-    !  field: percentConfidence. Its value and attributes can be accessed 
-    !  in a similar manner as was shown above for 2m temperature. 
-    ! ------------------------------------------------------------------- 
+    !  The 2m temperature data element in this message has an associated
+    !  field: percentConfidence. Its value and attributes can be accessed
+    !  in a similar manner as was shown above for 2m temperature.
+    ! -------------------------------------------------------------------
 
     ! Get the element's value as as real
     call codes_get(ibufr,'airTemperatureAt2M->percentConfidence',conf);
@@ -106,9 +106,9 @@ character(len=32)   :: units, confUnits
 
     count=count+1
 
-  end do  
+  end do
 
-  ! Close file  
+  ! Close file
   call codes_close_file(ifile)
 
 end program bufr_attributes
diff --git a/examples/F90/bufr_clone.f90 b/examples/F90/bufr_clone.f90
index dfac304..b5f76b9 100644
--- a/examples/F90/bufr_clone.f90
+++ b/examples/F90/bufr_clone.f90
@@ -2,13 +2,13 @@
 !
 ! 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.
 !
 !  FORTRAN 90 implementation: bufr_clone
 !
-!  Description: how to create a new BUFR message by cloning 
+!  Description: how to create a new BUFR message by cloning
 !               an existing message.
 !
 !
@@ -20,7 +20,7 @@ program bufr_clone
   integer       :: ibufr_in
   integer       :: ibufr_out
 
-  ! Open source file 
+  ! Open source file
   call codes_open_file(infile,'../../data/bufr/syno_multi.bufr','r')
 
   ! Open target file
@@ -37,8 +37,8 @@ program bufr_clone
     ! 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 
+    ! 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
@@ -46,7 +46,7 @@ program bufr_clone
 
     ! Release the clone's handle
     call codes_release(ibufr_out)
-  end do  
+  end do
 
   ! Release the original handle
   call codes_release(ibufr_in)
diff --git a/examples/F90/bufr_clone.sh b/examples/F90/bufr_clone.sh
index a792b4b..bd113a8 100755
--- a/examples/F90/bufr_clone.sh
+++ b/examples/F90/bufr_clone.sh
@@ -26,7 +26,7 @@ ${examples_dir}/eccodes_f_bufr_clone >$REDIRECT 2> $REDIRECT
 
 #Compare clone to the original
 set +e
-${tools_dir}bufr_compare $f $fBufrTmp >$REDIRECT 2> $REDIRECT
+${tools_dir}/bufr_compare $f $fBufrTmp >$REDIRECT 2> $REDIRECT
 
 #Check if clone is different
 if [ $? -eq 0 ]; then
diff --git a/examples/F90/bufr_copy_data.sh b/examples/F90/bufr_copy_data.sh
index a7ddc11..5b4f8d9 100755
--- a/examples/F90/bufr_copy_data.sh
+++ b/examples/F90/bufr_copy_data.sh
@@ -54,10 +54,10 @@ cat > ${REF} <<EOF
 EOF
 
 INPUT=metar_with_2_bias.bufr
-${examples_dir}eccodes_f_bufr_copy_data ${INPUT} ${TEMP}
+${examples_dir}/eccodes_f_bufr_copy_data ${INPUT} ${TEMP}
 # The input and output BUFR messages should be different
 set +e
-${tools_dir}bufr_compare ${TEMP} ${INPUT} > ${MYLOG}
+${tools_dir}/bufr_compare ${TEMP} ${INPUT} > ${MYLOG}
 status=$?
 set -e
 [ $status -eq 1 ]
diff --git a/examples/F90/bufr_copy_keys.f90 b/examples/F90/bufr_copy_keys.f90
index cc8f009..bab8b90 100644
--- a/examples/F90/bufr_copy_keys.f90
+++ b/examples/F90/bufr_copy_keys.f90
@@ -2,15 +2,15 @@
 !
 ! 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 key from a message to another.
-!               
+!
 program bufr_copy_keys
   use eccodes
-  implicit none  
+  implicit none
   integer  :: file1, file2, file3
   integer  :: ibufr1,ibufr2,ibufr3
 
diff --git a/examples/F90/bufr_copy_keys.sh b/examples/F90/bufr_copy_keys.sh
index dfe0230..c3b2030 100755
--- a/examples/F90/bufr_copy_keys.sh
+++ b/examples/F90/bufr_copy_keys.sh
@@ -18,8 +18,8 @@ cd ${data_dir}/bufr
 
 #The input and output BUFR files are hardcoded in the f90 example!!!
 OUTPUT=out.$label.bufr
-${examples_dir}eccodes_f_bufr_copy_keys
-res=`${tools_dir}bufr_get -p bufrHeaderCentre $OUTPUT`
+${examples_dir}/eccodes_f_bufr_copy_keys
+res=`${tools_dir}/bufr_get -p bufrHeaderCentre $OUTPUT`
 [ "$res" = "80" ]
 
 rm -f $OUTPUT
diff --git a/examples/F90/bufr_copy_message.f90 b/examples/F90/bufr_copy_message.f90
index c9a4c03..a78f9f3 100644
--- a/examples/F90/bufr_copy_message.f90
+++ b/examples/F90/bufr_copy_message.f90
@@ -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/examples/F90/bufr_copy_message.sh b/examples/F90/bufr_copy_message.sh
index fd676d9..b35dfb4 100755
--- a/examples/F90/bufr_copy_message.sh
+++ b/examples/F90/bufr_copy_message.sh
@@ -12,7 +12,7 @@
 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
+${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_expanded.f90 b/examples/F90/bufr_expanded.f90
index 6f75c8c..94a3ae2 100644
--- a/examples/F90/bufr_expanded.f90
+++ b/examples/F90/bufr_expanded.f90
@@ -21,7 +21,7 @@ integer            :: iret
 integer            :: ibufr
 integer            :: i
 integer            :: count=0
-integer(kind=4)    :: numberOfValues 
+integer(kind=4)    :: numberOfValues
 real(kind=8), dimension(:), allocatable       :: values
 
   call codes_open_file(ifile,'../../data/bufr/syno_1.bufr','r')
@@ -32,10 +32,10 @@ real(kind=8), dimension(:), allocatable       :: values
 
   do while (iret/=CODES_END_OF_FILE)
 
-    ! Get and print some keys form the BUFR header 
+    ! Get and print some keys form the BUFR header
     write(*,*) 'message: ',count
 
-    ! We need to instruct ecCodes to expand all the descriptors 
+    ! We need to instruct ecCodes to expand all the descriptors
     ! i.e. unpack the data values
     call codes_set(ibufr,"unpack",1);
 
diff --git a/examples/F90/bufr_get_keys.f90 b/examples/F90/bufr_get_keys.f90
index 40f6bc8..e0f101f 100644
--- a/examples/F90/bufr_get_keys.f90
+++ b/examples/F90/bufr_get_keys.f90
@@ -20,11 +20,11 @@ integer            :: ifile
 integer            :: iret
 integer            :: ibufr
 integer            :: i, count=0
-integer(kind=4)    :: blockNumber,stationNumber 
+integer(kind=4)    :: blockNumber,stationNumber
 real(kind=8)       :: t2m
 integer(kind=4), dimension(:), allocatable    :: descriptors
 real(kind=8), dimension(:), allocatable       :: values
-character(len=9)   :: typicalDate 
+character(len=9)   :: typicalDate
 
   call codes_open_file(ifile,'../../data/bufr/syno_multi.bufr','r')
 
@@ -34,13 +34,10 @@ character(len=9)   :: typicalDate
 
   do while (iret/=CODES_END_OF_FILE)
 
-    ! For debugging
-    call codes_dump(ibufr)
-
-    ! Get and print some keys form the BUFR header 
+    ! Get and print some keys form the BUFR header
     write(*,*) 'message: ',count
 
-    ! We need to instruct ecCodes to expand all the descriptors 
+    ! We need to instruct ecCodes to expand all the descriptors
     ! i.e. unpack the data values
     call codes_set(ibufr,"unpack",1);
 
diff --git a/examples/F90/bufr_get_string_array.f90 b/examples/F90/bufr_get_string_array.f90
index ee1597a..07a914c 100644
--- a/examples/F90/bufr_get_string_array.f90
+++ b/examples/F90/bufr_get_string_array.f90
@@ -11,7 +11,7 @@
 ! FORTRAN 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
@@ -20,7 +20,7 @@ program bufr_get_string_array
   integer            :: ibufr
   integer            :: strsize
   integer, parameter  :: max_strsize = 20
-  character(len=max_strsize) , dimension(:),allocatable   :: stationOrSiteName 
+  character(len=max_strsize) , dimension(:),allocatable   :: stationOrSiteName
 
   call codes_open_file(ifile,'../../data/bufr/pgps_110.bufr','r')
 
@@ -35,7 +35,7 @@ program bufr_get_string_array
   ! 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 
+  ! 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
@@ -46,20 +46,20 @@ program bufr_get_string_array
   call codes_get_size(ibufr,'stationOrSiteName',n)
   allocate(stationOrSiteName(n))
 
-  ! Passing an array of strings stationOrSiteName which must be allocated beforehand 
+  ! 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 
+  ! Remember to deallocate
   deallocate(stationOrSiteName)
 
   ! Release memory associated with bufr handle
   ! ibufr won't be accessible after this
   call codes_release(ibufr)
 
-  ! Close file  
+  ! Close file
   call codes_close_file(ifile)
 
 end program bufr_get_string_array
diff --git a/examples/F90/bufr_keys_iterator.f90 b/examples/F90/bufr_keys_iterator.f90
index 97116fb..859d892 100644
--- a/examples/F90/bufr_keys_iterator.f90
+++ b/examples/F90/bufr_keys_iterator.f90
@@ -12,7 +12,7 @@
 !
 !
 ! Description: how to use keys_iterator functions and the
-!              codes_keys_iterator structure to get all the available
+!              codes_bufr_keys_iterator structure to get all the available
 !              keys in a BUFR message.
 !
 !
@@ -23,49 +23,47 @@ integer            :: ifile
 integer            :: iret
 integer            :: ibufr
 integer            :: count=0
-character(len=20)  :: name_space
 character(len=256) :: key
 integer            :: kiter
 
   call codes_open_file(ifile,'../../data/bufr/syno_1.bufr','r')
 
-  ! name_space='' to get all the keys 
-  name_space='ls'
-
   ! 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(ifile,ibufr,iret)
 
   do while (iret /= CODES_END_OF_FILE)
 
-    ! Get and print some keys form the BUFR header 
+    ! Get and print some keys form the BUFR header
     write(*,*) 'message: ',count
 
-    ! Create key iterator
-    call codes_keys_iterator_new(ibufr,kiter,name_space,iret)
+    ! We need to instruct ecCodes to expand all the descriptors
+    ! i.e. unpack the data values
+    call codes_set(ibufr,"unpack",1);
+
+    ! Create BUFR keys iterator
+    call codes_bufr_keys_iterator_new(ibufr,kiter,iret)
 
     if (iret .ne. 0) then
-        write(*,*) 'ERROR: Unable to create keys iterator'
+        write(*,*) 'ERROR: Unable to create BUFR keys iterator'
         call exit(1)
-    end if   
+    end if
 
     ! Get first key
-    call codes_keys_iterator_next(kiter, iret)
+    call codes_bufr_keys_iterator_next(kiter, iret)
 
     ! Loop over keys
-    do while (iret == CODES_SUCCESS) 
-    
+    do while (iret == CODES_SUCCESS)
         ! Print key name
-        call codes_keys_iterator_get_name(kiter,key)
+        call codes_bufr_keys_iterator_get_name(kiter,key)
         write(*,*) '  ',trim(key)
-        
+
         ! Get next key
-        call codes_keys_iterator_next(kiter, iret)
-         
+        call codes_bufr_keys_iterator_next(kiter, iret)
     end do
-      
-    ! Delete key iterator 
-    call codes_keys_iterator_delete(kiter)
+
+    ! Delete key iterator
+    call codes_bufr_keys_iterator_delete(kiter)
 
     ! Release the bufr message
     call codes_release(ibufr)
@@ -77,7 +75,7 @@ integer            :: kiter
 
   end do
 
-  ! Close file  
+  ! Close file
   call codes_close_file(ifile)
 
 end program bufr_keys_iterator
diff --git a/examples/F90/bufr_keys_iterator.sh b/examples/F90/bufr_keys_iterator.sh
index d9127e2..36394c8 100755
--- a/examples/F90/bufr_keys_iterator.sh
+++ b/examples/F90/bufr_keys_iterator.sh
@@ -22,7 +22,7 @@ REDIRECT=/dev/null
 f=${data_dir}/bufr/syno_1.bufr
 
 #The input ($f) is hardcoded in the f90 example!!!
-${examples_dir}/eccodes_f_bufr_keys_iterator 2> $REDIRECT > $fTmp
+${examples_dir}/eccodes_f_bufr_keys_iterator #2> $REDIRECT > $fTmp
 
 #TODO: check the output
 
diff --git a/examples/F90/bufr_read_header.f90 b/examples/F90/bufr_read_header.f90
index 436d91b..1453836 100644
--- a/examples/F90/bufr_read_header.f90
+++ b/examples/F90/bufr_read_header.f90
@@ -23,7 +23,7 @@ integer            :: count=0
 integer(kind=4)    :: dataCategory,dataSubCategory,typicalDate
 integer(kind=4)    :: centre,subcentre
 integer(kind=4)    :: masterversion,localversion
-integer(kind=4)    :: numberofsubsets   
+integer(kind=4)    :: numberofsubsets
 
   call codes_open_file(ifile,'../../data/bufr/syno_multi.bufr','r')
 
@@ -33,7 +33,7 @@ integer(kind=4)    :: numberofsubsets
 
   do while (iret/=CODES_END_OF_FILE)
 
-    ! Get and print some keys form the BUFR header 
+    ! Get and print some keys form the BUFR header
     write(*,*) 'message: ',count
 
     call codes_get(ibufr,'dataCategory',dataCategory);
@@ -58,7 +58,7 @@ integer(kind=4)    :: numberofsubsets
     write(*,*) '  localTablesVersionNumber:',localversion
 
     call codes_get(ibufr,'numberOfSubsets',numberofsubsets)
-    write(*,*) '  numberOfSubsets:',numberofsubsets   
+    write(*,*) '  numberOfSubsets:',numberofsubsets
 
     ! Release the bufr message
     call codes_release(ibufr)
diff --git a/examples/F90/bufr_read_scatterometer.f90 b/examples/F90/bufr_read_scatterometer.f90
index f9d50ce..98ec356 100644
--- a/examples/F90/bufr_read_scatterometer.f90
+++ b/examples/F90/bufr_read_scatterometer.f90
@@ -11,7 +11,7 @@
 ! FORTRAN 90 Implementation: bufr_read_scatterometer
 !
 ! Description: how to read data for a given beam from scatterometer BUFR messages.
-! 
+!
 ! Please note that scatterometer data can be encoded in various ways in BUFR. Therefore the code
 ! below might not work directly for other types of messages than the one used in the
 ! example. It is advised to use bufr_dump first to understand the structure of these messages.
@@ -38,15 +38,15 @@ real(kind=8), dimension(:), allocatable :: year
 
     write(*,'(A,I3)') 'message: ',count
 
-    ! We need to instruct ecCodes to expand all the descriptors 
+    ! We need to instruct ecCodes to expand all the descriptors
     ! i.e. unpack the data values
     call codes_set(ibufr,"unpack",1);
 
     ! The BUFR file contains a single message with 2016 subsets in a compressed form.
     ! It means each subset has exactly the same structure: they store one location with
-    ! several beams and one backscatter value in each beam. 
+    ! several beams and one backscatter value in each beam.
     !
-    ! To print the backScatter values for beamIdentifier=2 from all the subsets 
+    ! To print the backScatter values for beamIdentifier=2 from all the subsets
     ! we will simply access the key by condition (see below).
 
     ! Read the total number of subsets.
@@ -78,13 +78,13 @@ real(kind=8), dimension(:), allocatable :: year
 
     ! Print the values
     write(*,*) 'pixel   lat    lon     backscatter'
-    write(*,*) "--------------------------------------" 
+    write(*,*) "--------------------------------------"
 
     do i=1,numObs
         write(*,'(I4,3F10.5)') i,latVal(i),lonVal(i),bscatterVal(i)
-    end do 
-     
-    ! Free arrays 
+    end do
+
+    ! Free arrays
     deallocate(latVal)
     deallocate(lonVal)
     deallocate(bscatterVal)
@@ -97,9 +97,9 @@ real(kind=8), dimension(:), allocatable :: year
 
     count=count+1
 
-  end do  
+  end do
 
-  ! Close file  
+  ! Close file
   call codes_close_file(ifile)
 
 end program bufr_read_scatterometer
diff --git a/examples/F90/bufr_read_synop.f90 b/examples/F90/bufr_read_synop.f90
index e07bff7..ab81b1c 100644
--- a/examples/F90/bufr_read_synop.f90
+++ b/examples/F90/bufr_read_synop.f90
@@ -11,7 +11,7 @@
 ! FORTRAN 90 Implementation: bufr_read_synop
 !
 ! Description: how to read SYNOP BUFR messages.
- 
+
 ! Please note that SYNOP reports can be encoded in various ways in BUFR. Therefore the code
 ! below might not work directly for other types of SYNOP messages than the one used in the
 ! example. It is advised to use bufr_dump first to understand the structure of these messages.
@@ -25,9 +25,9 @@ integer            :: ifile
 integer            :: iret
 integer            :: ibufr
 integer            :: count=0
-integer(kind=4)    :: blockNumber,stationNumber 
+integer(kind=4)    :: blockNumber,stationNumber
 real(kind=8)       :: lat,t2m,td2m,ws,wdir
-integer(kind=4)    :: cloudAmount,cloudBaseHeight,lowCloud,midCloud,highCloud 
+integer(kind=4)    :: cloudAmount,cloudBaseHeight,lowCloud,midCloud,highCloud
 
   call codes_open_file(ifile,'../../data/bufr/syno_multi.bufr','r')
 
@@ -39,82 +39,82 @@ integer(kind=4)    :: cloudAmount,cloudBaseHeight,lowCloud,midCloud,highCloud
 
     write(*,*) 'message: ',count
 
-    ! We need to instruct ecCodes to expand all the descriptors 
+    ! We need to instruct ecCodes to expand all the descriptors
     ! i.e. unpack the data values
     call codes_set(ibufr,"unpack",1)
-    
-    !read and print some data values. This example was written 
-    ! for a SYNOP BUFR file! 
-           
+
+    !read and print some data values. This example was written
+    ! for a SYNOP BUFR file!
+
     ! wmo block number
     call codes_get(ibufr,'blockNumber',blockNumber)
     write(*,*) '  blockNumber:',blockNumber
-    
+
     ! station number
     call codes_get(ibufr,'stationNumber',stationNumber)
     write(*,*) '  stationNumber:',stationNumber
-    
+
     ! location
     call codes_get(ibufr,'latitude',lat)
     write(*,*) '  latitude:',lat
-    
+
     call codes_get(ibufr,'longitude',lat)
     write(*,*) '  longitude:',lat
-    
+
     ! 2m temperature
     call codes_get(ibufr,'airTemperatureAt2M',t2m);
     write(*,*) '  airTemperatureAt2M:',t2m
-   
+
     ! 2m dewpoint temperature
     call codes_get(ibufr,'dewpointTemperatureAt2M',td2m);
     write(*,*) '  dewpointTemperatureAt2M:',td2m
-   
+
     ! 10m wind
     call codes_get(ibufr,'windSpeedAt10M',ws);
     write(*,*) '  windSpeedAt10M:',ws
-   
+
     call codes_get(ibufr,'windDirectionAt10M',wdir);
     write(*,*) '  windDirectionAt10M:',wdir
-   
+
     ! The cloud information is stored in several blocks in the
     ! SYNOP message and the same key means a different thing in different
     ! parts of the message. In this example we will read the first
     ! cloud block introduced by the key
-    ! verticalSignificanceSurfaceObservations=1. 
+    ! verticalSignificanceSurfaceObservations=1.
     ! We know that this is the first occurrence of the keys we want to
-    ! read so we will use the # (occurrence) operator accordingly. 
-        
+    ! read so we will use the # (occurrence) operator accordingly.
+
     ! Cloud amount (low and middleclouds)
     call codes_get(ibufr,'#1#cloudAmount',cloudAmount)
     write(*,*) '  cloudAmount (low and middle):',cloudAmount
-        
+
     ! Height of cloud base
     call codes_get(ibufr,'#1#heightOfBaseOfCloud',cloudBaseHeight)
     write(*,*) '  heightOfBaseOfCloud:',cloudBaseHeight
-        
+
     ! Cloud type (low clouds)
     call codes_get(ibufr,'#1#cloudType',lowCloud)
-    write(*,*) '  cloudType (low):',lowCloud 
-        
+    write(*,*) '  cloudType (low):',lowCloud
+
     ! Cloud type (middle clouds)
     call codes_get(ibufr,'#2#cloudType',midCloud)
-    write(*,*) '  cloudType (middle):',midCloud 
-    
+    write(*,*) '  cloudType (middle):',midCloud
+
     ! Cloud type (high clouds)
     call codes_get(ibufr,'#3#cloudType',highCloud)
-    write(*,*) '  cloudType (high):',highCloud 
-   
+    write(*,*) '  cloudType (high):',highCloud
+
     ! Release the bufr message
     call codes_release(ibufr)
 
     ! Load the next bufr message
     call codes_bufr_new_from_file(ifile,ibufr,iret)
-    
+
     count=count+1
-    
-  end do  
 
-  ! Close file  
+  end do
+
+  ! Close file
   call codes_close_file(ifile)
 
 end program bufr_read_synop
diff --git a/examples/F90/bufr_read_tropical_cyclone.f90 b/examples/F90/bufr_read_tropical_cyclone.f90
index c939bb3..ad500c2 100644
--- a/examples/F90/bufr_read_tropical_cyclone.f90
+++ b/examples/F90/bufr_read_tropical_cyclone.f90
@@ -11,7 +11,7 @@
 ! FORTRAN 90 Implementation: bufr_read_tropical_cyclone
 !
 ! Description: how to read data for a tropical cyclone BUFR message.
-! 
+!
 
 program bufr_read_tropical_cyclone
   use eccodes
@@ -20,7 +20,7 @@ program bufr_read_tropical_cyclone
   integer            :: iret
   integer            :: ibufr,skipMember
   integer            :: significance
-  integer            :: year,month,day,hour,minute 
+  integer            :: year,month,day,hour,minute
   integer            :: i,j,k,ierr,count=1
   integer            :: rankPosition,rankSignificance,rankPressure,rankWind
   integer            :: rankPeriod,numberOfPeriods
@@ -63,9 +63,9 @@ program bufr_read_tropical_cyclone
     ! How many different timePeriod in the data structure?
     rankPeriod=0
     ierr=0
-    do while(ierr==0) 
+    do while(ierr==0)
       rankPeriod=rankPeriod+1
-      write (rankPeriodStr,'(I0)')rankPeriod 
+      write (rankPeriodStr,'(I0)')rankPeriod
       call codes_get(ibufr,'#'//trim(rankPeriodStr)//'#timePeriod',period,ierr)
       if(allocated(period)) deallocate(period)
     enddo
@@ -96,7 +96,7 @@ program bufr_read_tropical_cyclone
       write(*,'(a)')'Observed storm centre position missing'
     else
       write(*,'(A,F8.2,A,F8.2)')'Observed storm centre: latitude=',latitudeCentre,' longitude=',longitudeCentre
-    endif 
+    endif
 
     ! Location of storm in perturbed analysis
     call codes_get(ibufr,'#2#meteorologicalAttributeSignificance',significance);
@@ -146,7 +146,7 @@ program bufr_read_tropical_cyclone
     do i=2,numberOfPeriods
 
       rankPeriod=rankPeriod+1
-      write (rankPeriodStr,'(I0)')rankPeriod 
+      write (rankPeriodStr,'(I0)')rankPeriod
       call codes_get(ibufr,'#'//trim(rankPeriodStr)//'#timePeriod',ivalues);
       do k=1,size(ivalues)
         if (ivalues(k)/=CODES_MISSING_LONG) then
@@ -155,10 +155,10 @@ program bufr_read_tropical_cyclone
         endif
       enddo
       deallocate(ivalues)
-      
+
       ! Location of the storm
       rankSignificance=rankSignificance+1
-      write (rankSignificanceStr,'(I0)')rankSignificance 
+      write (rankSignificanceStr,'(I0)')rankSignificance
       call codes_get(ibufr,'#'//trim(rankSignificanceStr)//'#meteorologicalAttributeSignificance',ivalues);
       do k=1,size(ivalues)
         if (ivalues(k)/=CODES_MISSING_LONG) then
@@ -169,7 +169,7 @@ program bufr_read_tropical_cyclone
       deallocate(ivalues)
 
       rankPosition=rankPosition+1
-      write (rankPositionStr,'(I0)')rankPosition 
+      write (rankPositionStr,'(I0)')rankPosition
       call codes_get(ibufr,'#'//trim(rankPositionStr)//'#latitude',values);
       latitude(:,i)=values
       call codes_get(ibufr,'#'//trim(rankPositionStr)//'#longitude',values);
@@ -177,7 +177,7 @@ program bufr_read_tropical_cyclone
 
       if (significance==1) then
         rankPressure=rankPressure+1
-        write (rankPressureStr,'(I0)')rankPressure 
+        write (rankPressureStr,'(I0)')rankPressure
         call codes_get(ibufr,'#'//trim(rankPressureStr)//'#pressureReducedToMeanSeaLevel',values);
         pressure(:,i)=values
       else
@@ -187,7 +187,7 @@ program bufr_read_tropical_cyclone
 
       ! Location of maximum wind
       rankSignificance=rankSignificance+1
-      write (rankSignificanceStr,'(I0)')rankSignificance 
+      write (rankSignificanceStr,'(I0)')rankSignificance
       call codes_get(ibufr,'#'//trim(rankSignificanceStr)//'#meteorologicalAttributeSignificance',ivalues);
       do k=1,size(ivalues)
         if (ivalues(k)/=CODES_MISSING_LONG) then
@@ -198,7 +198,7 @@ program bufr_read_tropical_cyclone
       deallocate(ivalues)
 
       rankPosition=rankPosition+1
-      write (rankPositionStr,'(I0)')rankPosition 
+      write (rankPositionStr,'(I0)')rankPosition
       call codes_get(ibufr,'#'//trim(rankPositionStr)//'#latitude',values);
       latitudeWind(:,i)=values
       call codes_get(ibufr,'#'//trim(rankPositionStr)//'#longitude',values);
@@ -206,7 +206,7 @@ program bufr_read_tropical_cyclone
 
       if (significance==3) then
         rankWind=rankWind+1
-        write (rankWindStr,'(I0)')rankWind 
+        write (rankWindStr,'(I0)')rankWind
         call codes_get(ibufr,'#'//trim(rankWindStr)//'#windSpeedAt10M',values);
         wind(:,i)=values
       else
@@ -267,9 +267,9 @@ program bufr_read_tropical_cyclone
 
     count=count+1
 
-  end do  
+  end do
 
-  ! Close file  
+  ! Close file
   call codes_close_file(ifile)
 
 end program bufr_read_tropical_cyclone
diff --git a/examples/F90/bufr_set_keys.f90 b/examples/F90/bufr_set_keys.f90
index 999a4ea..24540c1 100644
--- a/examples/F90/bufr_set_keys.f90
+++ b/examples/F90/bufr_set_keys.f90
@@ -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.
 !
@@ -34,7 +34,7 @@ program bufr_set_keys
 
     write(*,*) 'message: ',count
 
-    ! This is the place where you may wish to modify the message 
+    ! This is the place where you may wish to modify the message
     ! E.g. we change the centre
 
     ! Set centre
diff --git a/examples/F90/bufr_set_keys.sh b/examples/F90/bufr_set_keys.sh
index 2da0399..caf8861 100755
--- a/examples/F90/bufr_set_keys.sh
+++ b/examples/F90/bufr_set_keys.sh
@@ -26,7 +26,7 @@ ${examples_dir}/eccodes_f_bufr_set_keys >$REDIRECT
 
 #Compare modified file to the original
 set +e
-${tools_dir}bufr_compare $f $fBufrTmp >$REDIRECT
+${tools_dir}/bufr_compare $f $fBufrTmp >$REDIRECT
 
 #Check if they are different
 if [ $? -eq 0 ]; then
@@ -37,7 +37,7 @@ fi
 set -e
 
 #Check if modified file has the same number of messages
-[ `${tools_dir}bufr_count $f` = `${tools_dir}bufr_count ${fBufrTmp}` ]
+[ `${tools_dir}/bufr_count $f` = `${tools_dir}/bufr_count ${fBufrTmp}` ]
 
 #Clean up
 rm -f ${fBufrTmp}
diff --git a/examples/F90/bufr_subset.f90 b/examples/F90/bufr_subset.f90
index b82f51d..cf93e34 100644
--- a/examples/F90/bufr_subset.f90
+++ b/examples/F90/bufr_subset.f90
@@ -21,7 +21,7 @@ integer            :: iret
 integer            :: ibufr
 integer            :: i, count=0
 integer(kind=4)    :: numberOfSubsets
-integer(kind=4)    :: blockNumber,stationNumber 
+integer(kind=4)    :: blockNumber,stationNumber
 character(100)     :: key
 !real(kind=8)       :: t2m
 
@@ -33,12 +33,12 @@ character(100)     :: key
 
   do while (iret/=CODES_END_OF_FILE)
 
-    ! Get and print some keys form the BUFR header 
+    ! Get and print some keys form the BUFR header
     write(*,*) 'message: ',count
 
-    ! We need to instruct ecCodes to expand all the descriptors 
+    ! We need to instruct ecCodes to expand all the descriptors
     ! i.e. unpack the data values
-    call codes_set(ibufr,'unpack',1);   
+    call codes_set(ibufr,'unpack',1);
 
     ! Find out the number of subsets
     call codes_get(ibufr,'numberOfSubsets',numberOfSubsets)
@@ -47,17 +47,17 @@ character(100)     :: key
     ! Loop over the subsets
     do i=1,numberOfSubsets
 
- 100    format('/subsetNumber=',I5.5,'/blockNumber')       
-        write(key,100) I       
+ 100    format('/subsetNumber=',I5.5,'/blockNumber')
+        write(key,100) I
         write(*,*) key
-                
+
         write(*,*) ' subsetNumber:',i
         ! read and print some data values
-         
+
         call codes_get(ibufr,key,blockNumber);
         write(*,*) '  blockNumber:',blockNumber
-        
-        write(key,*) '/subsetNumber=',I,'/stationNumber'       
+
+        write(key,*) '/subsetNumber=',I,'/stationNumber'
         call codes_get(ibufr,'stationNumber',stationNumber);
         write(*,*) '  stationNumber:',stationNumber
 
@@ -73,7 +73,7 @@ character(100)     :: key
 
   end do
 
-  ! Close file  
+  ! Close file
   call codes_close_file(ifile)
 
 end program bufr_subset
diff --git a/examples/F90/get_fortran.f90 b/examples/F90/get_fortran.f90
index a6f057b..b2a81fe 100644
--- a/examples/F90/get_fortran.f90
+++ b/examples/F90/get_fortran.f90
@@ -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.
 !
@@ -12,7 +12,7 @@
 program get
 use eccodes
 implicit none
- 
+
   integer                                         ::  ifile
   integer                                         ::  iret
   integer                                         ::  igrib
@@ -31,62 +31,62 @@ implicit none
 
   call codes_open_file(ifile, &
        '../../data/reduced_latlon_surface.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) 
+  call  codes_grib_new_from_file(ifile,igrib)
 
   ! get as a integer
   call codes_get(igrib,'numberOfPointsAlongAParallel', &
-                               numberOfPointsAlongAParallel) 
+                               numberOfPointsAlongAParallel)
   write(*,*) 'numberOfPointsAlongAParallel=', &
               numberOfPointsAlongAParallel
 
   ! get as a integer
   call codes_get(igrib,'numberOfPointsAlongAMeridian', &
-                                       numberOfPointsAlongAMeridian) 
+                                       numberOfPointsAlongAMeridian)
   write(*,*) 'numberOfPointsAlongAMeridian=', &
               numberOfPointsAlongAMeridian
 
   ! get as a real8
   call codes_get(igrib, &
                       'latitudeOfFirstGridPointInDegrees', &
-                       latitudeOfFirstPointInDegrees) 
+                       latitudeOfFirstPointInDegrees)
   write(*,*) 'latitudeOfFirstGridPointInDegrees=', &
             latitudeOfFirstPointInDegrees
 
   !     get as a real8
   call codes_get(igrib, &
                'longitudeOfFirstGridPointInDegrees', &
-                longitudeOfFirstPointInDegrees) 
+                longitudeOfFirstPointInDegrees)
   write(*,*) 'longitudeOfFirstGridPointInDegrees=', &
       longitudeOfFirstPointInDegrees
 
   ! get as a real8
   call codes_get(igrib, &
       'latitudeOfLastGridPointInDegrees', &
-      latitudeOfLastPointInDegrees) 
+      latitudeOfLastPointInDegrees)
   write(*,*) 'latitudeOfLastGridPointInDegrees=', &
       latitudeOfLastPointInDegrees
 
   ! get as a real8
   call codes_get(igrib, &
       'longitudeOfLastGridPointInDegrees', &
-      longitudeOfLastPointInDegrees) 
+      longitudeOfLastPointInDegrees)
   write(*,*) 'longitudeOfLastGridPointInDegrees=', &
               longitudeOfLastPointInDegrees
 
   ! get as a real8
   call codes_get(igrib, &
                    'jDirectionIncrementInDegrees', &
-                    jDirectionIncrementInDegrees) 
+                    jDirectionIncrementInDegrees)
   write(*,*) 'jDirectionIncrementInDegrees=', &
               jDirectionIncrementInDegrees
 
   ! get as a real8
   call codes_get(igrib, &
        'iDirectionIncrementInDegrees', &
-        iDirectionIncrementInDegrees) 
+        iDirectionIncrementInDegrees)
   write(*,*) 'iDirectionIncrementInDegrees=', &
               iDirectionIncrementInDegrees
 
diff --git a/examples/F90/get_pl.f90 b/examples/F90/get_pl.f90
index 8dac7d9..7e2db22 100644
--- a/examples/F90/get_pl.f90
+++ b/examples/F90/get_pl.f90
@@ -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/examples/F90/get_pl.sh b/examples/F90/get_pl.sh
index 38a17df..2fe1a0f 100755
--- a/examples/F90/get_pl.sh
+++ b/examples/F90/get_pl.sh
@@ -9,4 +9,4 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_get_pl > /dev/null
+${examples_dir}/eccodes_f_get_pl > /dev/null
diff --git a/examples/F90/get_product_kind.f90 b/examples/F90/get_product_kind.f90
index 90a28b7..8194faf 100644
--- a/examples/F90/get_product_kind.f90
+++ b/examples/F90/get_product_kind.f90
@@ -44,12 +44,12 @@ program get_product_kind
 
     ! load the next message
     call codes_new_from_file(ifile,ihandle,CODES_PRODUCT_ANY,iret)
-    
+
     count=count+1
-    
-  end do  
 
-  ! close file  
+  end do
+
+  ! close file
   call codes_close_file(ifile)
 
 end program get_product_kind
diff --git a/examples/F90/get_pv.f90 b/examples/F90/get_pv.f90
index 4caedbb..42d6f1e 100644
--- a/examples/F90/get_pv.f90
+++ b/examples/F90/get_pv.f90
@@ -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/examples/F90/get_pv.sh b/examples/F90/get_pv.sh
index 31468fa..23912ac 100755
--- a/examples/F90/get_pv.sh
+++ b/examples/F90/get_pv.sh
@@ -9,4 +9,4 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_get_pv > /dev/null
+${examples_dir}/eccodes_f_get_pv > /dev/null
diff --git a/examples/F90/get_set_uuid.f90 b/examples/F90/get_set_uuid.f90
index 8cb0432..4e25780 100644
--- a/examples/F90/get_set_uuid.f90
+++ b/examples/F90/get_set_uuid.f90
@@ -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/examples/F90/get_set_uuid.sh b/examples/F90/get_set_uuid.sh
index e0a4a8d..d54b9c6 100755
--- a/examples/F90/get_set_uuid.sh
+++ b/examples/F90/get_set_uuid.sh
@@ -10,18 +10,18 @@
 . ./include.sh
 
 
-uuid=`${tools_dir}grib_get -w count=1 -p uuidOfVGrid:s ${data_dir}/test_uuid.grib2`
+uuid=`${tools_dir}/grib_get -w count=1 -p uuidOfVGrid:s ${data_dir}/test_uuid.grib2`
 [ "$uuid" = "08b1e836bc6911e1951fb51b5624ad8d" ]
 
 # This reads the file in data/test_uuid.grib2 and creates test_uuid.grib2
-${examples_dir}eccodes_f_get_set_uuid > /dev/null
+${examples_dir}/eccodes_f_get_set_uuid > /dev/null
 
 # Check output was written
 output=out_uuid.grib2
 
 [ -f "$output" ]
 
-uuid=`${tools_dir}grib_get -w count=1 -p uuidOfVGrid:s $output`
+uuid=`${tools_dir}/grib_get -w count=1 -p uuidOfVGrid:s $output`
 [ "$uuid" = "8dad24561bb51f95e11169bc36e8b108" ]
 
 rm -f $output
diff --git a/examples/F90/grib_clone.f90 b/examples/F90/grib_clone.f90
index 3514f36..47759e1 100644
--- a/examples/F90/grib_clone.f90
+++ b/examples/F90/grib_clone.f90
@@ -2,14 +2,14 @@
 !
 ! 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.
 !
 !
 !  FORTRAN 90 Implementation: grib_clone
 !
-!  Description: how to create a new GRIB message by cloning 
+!  Description: how to create a new GRIB message by cloning
 !               an existing message.
 !
 !
@@ -23,7 +23,7 @@ program clone
   integer                                       :: igrib_out
   character(len=2)                              :: step
   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')
 
@@ -52,7 +52,7 @@ program clone
 
     ! use pack to create 1D values
     call codes_set(igrib_out,'values',pack(field2D, mask=.true.))
- 
+
     ! write cloned messages to a file
     call codes_write(igrib_out,outfile)
     call codes_release(igrib_out)
diff --git a/examples/F90/grib_clone.sh b/examples/F90/grib_clone.sh
index fe703a5..b8cbaae 100755
--- a/examples/F90/grib_clone.sh
+++ b/examples/F90/grib_clone.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_clone > /dev/null
+${examples_dir}/eccodes_f_grib_clone > /dev/null
 rm -f out.clone.grib1
diff --git a/examples/F90/grib_copy_message.f90 b/examples/F90/grib_copy_message.f90
index dd3eafc..11653b6 100644
--- a/examples/F90/grib_copy_message.f90
+++ b/examples/F90/grib_copy_message.f90
@@ -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/examples/F90/grib_copy_message.sh b/examples/F90/grib_copy_message.sh
index 7d2abbb..516c417 100755
--- a/examples/F90/grib_copy_message.sh
+++ b/examples/F90/grib_copy_message.sh
@@ -12,7 +12,7 @@
 INPUT="../../data/constant_field.grib1"
 OUTPUT=out.copy.grib1
 
-${examples_dir}eccodes_f_grib_copy_message > /dev/null
-${tools_dir}grib_compare -b centre $INPUT $OUTPUT
+${examples_dir}/eccodes_f_grib_copy_message > /dev/null
+${tools_dir}/grib_compare -b centre $INPUT $OUTPUT
 
 rm -f $OUTPUT
diff --git a/examples/F90/grib_copy_namespace.f90 b/examples/F90/grib_copy_namespace.f90
index 2f51fa4..55ef277 100644
--- a/examples/F90/grib_copy_namespace.f90
+++ b/examples/F90/grib_copy_namespace.f90
@@ -2,17 +2,17 @@
 !
 ! 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 namespace from a message to another.
-!               
+!
 !
 program copy_namespace
   use eccodes
-  implicit none  
+  implicit none
   integer  :: file1, file2, file3
   integer  :: igrib1,igrib2,igrib3
 
diff --git a/examples/F90/grib_copy_namespace.sh b/examples/F90/grib_copy_namespace.sh
index 5a7d944..c54a710 100755
--- a/examples/F90/grib_copy_namespace.sh
+++ b/examples/F90/grib_copy_namespace.sh
@@ -13,14 +13,14 @@
 label="grib_copy_namespace_test_f"
 
 INPUT=../../data/regular_latlon_surface.grib1
-res=`${tools_dir}grib_get -p Ni,Nj $INPUT`
+res=`${tools_dir}/grib_get -p Ni,Nj $INPUT`
 [ "$res" = "16 31" ]
 
 #The input and output BUFR files are hardcoded in the f90 example!!!
 OUTPUT=out.grib_copy_namespace.grib
-${examples_dir}./eccodes_f_grib_copy_namespace
+${examples_dir}/eccodes_f_grib_copy_namespace
 
-res=`${tools_dir}grib_get -p Ni,Nj $OUTPUT`
+res=`${tools_dir}/grib_get -p Ni,Nj $OUTPUT`
 [ "$res" = "MISSING 501" ]
 
 rm -f $OUTPUT
diff --git a/examples/F90/grib_count_messages.f90 b/examples/F90/grib_count_messages.f90
index 7c503e8..3db02b1 100644
--- a/examples/F90/grib_count_messages.f90
+++ b/examples/F90/grib_count_messages.f90
@@ -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/examples/F90/grib_count_messages.sh b/examples/F90/grib_count_messages.sh
index 0097707..93c493f 100755
--- a/examples/F90/grib_count_messages.sh
+++ b/examples/F90/grib_count_messages.sh
@@ -9,4 +9,4 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_count_messages > /dev/null
+${examples_dir}/eccodes_f_grib_count_messages > /dev/null
diff --git a/examples/F90/grib_count_messages_multi.sh b/examples/F90/grib_count_messages_multi.sh
index 697bef7..a82eaaa 100755
--- a/examples/F90/grib_count_messages_multi.sh
+++ b/examples/F90/grib_count_messages_multi.sh
@@ -12,9 +12,9 @@
 INPUT="../../data/multi.grib2"
 
 # Without multi-field support
-c=`${examples_dir}eccodes_f_grib_count_messages_multi 0 $INPUT | tr -d ' '`
+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=`${examples_dir}/eccodes_f_grib_count_messages_multi 1 $INPUT | tr -d ' '`
 [ "$c" = "56" ]
diff --git a/examples/F90/grib_get_data.f90 b/examples/F90/grib_get_data.f90
index 7179174..9f8be69 100644
--- a/examples/F90/grib_get_data.f90
+++ b/examples/F90/grib_get_data.f90
@@ -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.
 !
@@ -74,8 +74,8 @@ implicit none
     call codes_release(igrib)
     call codes_grib_new_from_file(ifile,igrib, iret)
 
-  end do 
+  end do
 
   call codes_close_file(ifile)
 
-end program 
+end program
diff --git a/examples/F90/grib_get_data.sh b/examples/F90/grib_get_data.sh
index 2ab0752..c945d89 100755
--- a/examples/F90/grib_get_data.sh
+++ b/examples/F90/grib_get_data.sh
@@ -9,4 +9,4 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_get_data > /dev/null
+${examples_dir}/eccodes_f_grib_get_data > /dev/null
diff --git a/examples/F90/grib_get_keys.f90 b/examples/F90/grib_get_keys.f90
index 328b031..c18a7d3 100644
--- a/examples/F90/grib_get_keys.f90
+++ b/examples/F90/grib_get_keys.f90
@@ -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.
 !
@@ -13,7 +13,7 @@
 program grib_get_keys
   use eccodes
   implicit none
-  
+
   integer                            ::  ifile
   integer                            ::  iret
   integer                            ::  igrib
@@ -28,59 +28,56 @@ program grib_get_keys
   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', open_mode)
-  
+
   ! Loop on all the messages in a file.
 
   ! 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, iret) 
+  call  codes_grib_new_from_file(ifile,igrib, iret)
 
   LOOP: DO WHILE (iret /= CODES_END_OF_FILE)
 
-    ! For debugging
-    call grib_dump(igrib)
-
     ! Check if the value of the key is MISSING
     is_missing=0;
     call codes_is_missing(igrib,'Ni',is_missing);
     if ( is_missing /= 1 ) then
         ! Key value is not missing so get as an integer
-        call codes_get(igrib,'Ni',numberOfPointsAlongAParallel) 
+        call codes_get(igrib,'Ni',numberOfPointsAlongAParallel)
         write(*,*) 'numberOfPointsAlongAParallel=', &
              numberOfPointsAlongAParallel
     else
         write(*,*) 'numberOfPointsAlongAParallel is missing'
-    endif     
+    endif
 
     ! Get as an integer
-    call codes_get(igrib,'Nj',numberOfPointsAlongAMeridian) 
+    call codes_get(igrib,'Nj',numberOfPointsAlongAMeridian)
     write(*,*) 'numberOfPointsAlongAMeridian=', &
          numberOfPointsAlongAMeridian
 
     ! Get as a real
     call codes_get(igrib, 'latitudeOfFirstGridPointInDegrees', &
-          latitudeOfFirstPointInDegrees) 
+          latitudeOfFirstPointInDegrees)
     write(*,*) 'latitudeOfFirstGridPointInDegrees=', &
           latitudeOfFirstPointInDegrees
 
     ! Get as a real
     call codes_get(igrib, 'longitudeOfFirstGridPointInDegrees', &
-          longitudeOfFirstPointInDegrees) 
+          longitudeOfFirstPointInDegrees)
     write(*,*) 'longitudeOfFirstGridPointInDegrees=', &
           longitudeOfFirstPointInDegrees
 
     ! Get as a real
     call codes_get(igrib, 'latitudeOfLastGridPointInDegrees', &
-          latitudeOfLastPointInDegrees) 
+          latitudeOfLastPointInDegrees)
     write(*,*) 'latitudeOfLastGridPointInDegrees=', &
           latitudeOfLastPointInDegrees
 
     ! Get as a real
     call codes_get(igrib, 'longitudeOfLastGridPointInDegrees', &
-          longitudeOfLastPointInDegrees) 
+          longitudeOfLastPointInDegrees)
     write(*,*) 'longitudeOfLastGridPointInDegrees=', &
           longitudeOfLastPointInDegrees
 
diff --git a/examples/F90/grib_get_keys.sh b/examples/F90/grib_get_keys.sh
index 5cf3d24..3026358 100755
--- a/examples/F90/grib_get_keys.sh
+++ b/examples/F90/grib_get_keys.sh
@@ -9,4 +9,4 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_get_keys > /dev/null
+${examples_dir}/eccodes_f_grib_get_keys > /dev/null
diff --git a/examples/F90/grib_index.f90 b/examples/F90/grib_index.f90
index f7b70fa..9a58ac5 100644
--- a/examples/F90/grib_index.f90
+++ b/examples/F90/grib_index.f90
@@ -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.
 !
@@ -15,7 +15,7 @@
 program index
   use eccodes
   implicit none
-  
+
   integer              :: iret
   integer,dimension(:),allocatable           :: step,level,number
   character(len=20),dimension(:),allocatable :: shortName
@@ -92,7 +92,7 @@ program index
                      '   number=',onumber,&
                      '   level=' ,olevel, &
                      '   step='  ,ostep
-  
+
              call codes_release(igrib)
              call codes_new_from_index(idx,igrib, iret)
           end do
diff --git a/examples/F90/grib_index.sh b/examples/F90/grib_index.sh
index 54a904a..a1a6d3c 100755
--- a/examples/F90/grib_index.sh
+++ b/examples/F90/grib_index.sh
@@ -11,11 +11,11 @@
 
 # if an index file does not exist then
 # create index and save to disk
-${examples_dir}eccodes_f_grib_index > index_f90.out
+${examples_dir}/eccodes_f_grib_index > index_f90.out
 diff index_f90.out ${data_dir}/index_f90.ok
 
 # if an index file exists then load the index from it
-${examples_dir}eccodes_f_grib_index > index_f90.out
+${examples_dir}/eccodes_f_grib_index > index_f90.out
 diff index_f90.out ${data_dir}/index_f90.ok
 
 rm -f index.idx index_f90.out
diff --git a/examples/F90/grib_keys_iterator.f90 b/examples/F90/grib_keys_iterator.f90
index 16daaac..ce8d1b3 100644
--- a/examples/F90/grib_keys_iterator.f90
+++ b/examples/F90/grib_keys_iterator.f90
@@ -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.
 !
@@ -22,43 +22,43 @@ program keys_iterator
   character(len=256) :: value
   character(len=512) :: all1
   integer            :: grib_count
-  
+
   call codes_open_file(ifile, &
        '../../data/regular_latlon_surface.grib1','r')
-  
+
   ! Loop on all the messages in a file.
-  
+
   call codes_grib_new_from_file(ifile,igrib, iret)
   grib_count=0
   do while (iret /= CODES_END_OF_FILE)
 
     grib_count=grib_count+1
     write(*,*) '-- GRIB N. ',grib_count,' --'
-     
+
     ! valid name_spaces are ls and mars
     name_space='ls'
-     
+
     call codes_keys_iterator_new(igrib,kiter,name_space)
-     
+
     do
-      call codes_keys_iterator_next(kiter, iret) 
-        
+      call codes_keys_iterator_next(kiter, iret)
+
       if (iret .ne. CODES_SUCCESS) exit
-        
+
       call codes_keys_iterator_get_name(kiter,key)
       call codes_get(igrib,trim(key),value)
       all1=trim(key)// ' = ' // trim(value)
       write(*,*) trim(all1)
-        
+
     end do
-     
+
     call codes_keys_iterator_delete(kiter)
     call codes_release(igrib)
     call codes_grib_new_from_file(ifile,igrib, iret)
   end do
-  
-  
+
+
   call codes_close_file(ifile)
-  
+
 end program keys_iterator
 
diff --git a/examples/F90/grib_keys_iterator.sh b/examples/F90/grib_keys_iterator.sh
index 6f1e187..171b13f 100755
--- a/examples/F90/grib_keys_iterator.sh
+++ b/examples/F90/grib_keys_iterator.sh
@@ -9,4 +9,4 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_keys_iterator > /dev/null
+${examples_dir}/eccodes_f_grib_keys_iterator > /dev/null
diff --git a/examples/F90/grib_multi.f90 b/examples/F90/grib_multi.f90
index efdd9cf..d199480 100644
--- a/examples/F90/grib_multi.f90
+++ b/examples/F90/grib_multi.f90
@@ -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.
 !
@@ -16,7 +16,7 @@
 program multi
   use eccodes
   implicit none
-  
+
   integer              :: iret
   integer(kind = 4)    :: step
   integer              :: ifile,igrib
@@ -37,9 +37,9 @@ program multi
 
      call codes_get(igrib,'step', step)
      write(*,'(i3)') step
-     
+
      call codes_grib_new_from_file(ifile,igrib, iret)
-  
+
   end do
   call codes_close_file(ifile)
 
diff --git a/examples/F90/grib_multi.sh b/examples/F90/grib_multi.sh
index 03e8ecd..84172c1 100755
--- a/examples/F90/grib_multi.sh
+++ b/examples/F90/grib_multi.sh
@@ -9,6 +9,6 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_multi > multi.out
+${examples_dir}/eccodes_f_grib_multi > multi.out
 diff multi.out ${data_dir}/multi.ok
 rm -f multi.out
diff --git a/examples/F90/grib_multi_write.f90 b/examples/F90/grib_multi_write.f90
index b8df896..eab4d39 100644
--- a/examples/F90/grib_multi_write.f90
+++ b/examples/F90/grib_multi_write.f90
@@ -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.
 !
@@ -22,7 +22,7 @@ program grib2_multi_write
   integer                            :: multi_gribid
   integer                            :: step,startsection
 
-  ! multi field messages can be created only in edition 2 
+  ! multi field messages can be created only in edition 2
   call codes_open_file(infile,'../../data/sample.grib2','r')
 
   call codes_open_file(outfile,'multi_created.grib2','w')
diff --git a/examples/F90/grib_multi_write.sh b/examples/F90/grib_multi_write.sh
index 0767050..dfb6199 100755
--- a/examples/F90/grib_multi_write.sh
+++ b/examples/F90/grib_multi_write.sh
@@ -9,9 +9,9 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_multi_write > /dev/null
+${examples_dir}/eccodes_f_grib_multi_write > /dev/null
 
-${tools_dir}grib_compare ${data_dir}/multi_created.grib2 multi_created.grib2
+${tools_dir}/grib_compare ${data_dir}/multi_created.grib2 multi_created.grib2
 
 rm -f multi_created.grib2
 
diff --git a/examples/F90/grib_nearest.f90 b/examples/F90/grib_nearest.f90
index 66ee0a7..5fa1174 100644
--- a/examples/F90/grib_nearest.f90
+++ b/examples/F90/grib_nearest.f90
@@ -2,12 +2,12 @@
 !
 ! 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 codes_grib_find_nearest and codes_get_element 
+!  Description: how to use codes_grib_find_nearest and codes_get_element
 !
 !
 !
@@ -22,7 +22,7 @@ program find
   real(8), dimension(:), allocatable  :: distances, values, lsm_values
   integer(kind=kindOfInt), dimension(:), allocatable  :: indexes
 
-! initialization
+  ! initialization
   open( unit=1, file="../../data/list_points",form="formatted",action="read")
   read(unit=1,fmt=*) npoints
   allocate(lats(npoints))
@@ -34,27 +34,26 @@ program find
   allocate(values(npoints))
   allocate(indexes(npoints))
   do i=1,npoints
-     read(unit=1,fmt=*, iostat=ios) lats(i), lons(i)
-     if (ios /= 0) then
-        npoints = i - 1
-        exit
-     end if
+    read(unit=1,fmt=*, iostat=ios) lats(i), lons(i)
+    if (ios /= 0) then
+      npoints = i - 1
+      exit
+    end if
   end do
   close(unit=1)
   call codes_open_file(infile, &
        '../../data/reduced_gaussian_lsm.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(infile,igrib)
-  
 
   call codes_grib_find_nearest(igrib, .true., lats, lons, nearest_lats, nearest_lons,lsm_values, distances, indexes)
   call codes_release(igrib)
-  
+
   call codes_close_file(infile)
 
-! will apply it to another GRIB
+  ! will apply it to another GRIB
   call codes_open_file(infile, &
        '../../data/reduced_gaussian_pressure_level.grib1','r')
   call codes_grib_new_from_file(infile,igrib)
@@ -64,7 +63,7 @@ program find
   call codes_close_file(infile)
 
   do i=1, npoints
-     print*,lats(i), lons(i), nearest_lats(i), nearest_lons(i), distances(i), lsm_values(i), values(i)
+    print*,lats(i), lons(i), nearest_lats(i), nearest_lons(i), distances(i), lsm_values(i), values(i)
   end do
 
   deallocate(lats)
diff --git a/examples/F90/grib_nearest.sh b/examples/F90/grib_nearest.sh
index 567d79c..2730cd3 100755
--- a/examples/F90/grib_nearest.sh
+++ b/examples/F90/grib_nearest.sh
@@ -9,4 +9,4 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_nearest > /dev/null
+${examples_dir}/eccodes_f_grib_nearest > /dev/null
diff --git a/examples/F90/grib_precision.f90 b/examples/F90/grib_precision.f90
index e79a3b9..62ed2df 100644
--- a/examples/F90/grib_precision.f90
+++ b/examples/F90/grib_precision.f90
@@ -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/examples/F90/grib_precision.sh b/examples/F90/grib_precision.sh
index d302ce1..94c8226 100755
--- a/examples/F90/grib_precision.sh
+++ b/examples/F90/grib_precision.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_precision > /dev/null
+${examples_dir}/eccodes_f_grib_precision > /dev/null
 rm -f ${data_dir}/regular_latlon_surface_prec.grib1
diff --git a/examples/F90/grib_print_data.f90 b/examples/F90/grib_print_data.f90
index 8589480..b3004f3 100644
--- a/examples/F90/grib_print_data.f90
+++ b/examples/F90/grib_print_data.f90
@@ -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/examples/F90/grib_print_data.sh b/examples/F90/grib_print_data.sh
index 6354dc0..b96231f 100755
--- a/examples/F90/grib_print_data.sh
+++ b/examples/F90/grib_print_data.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_print_data | grep '99200 *values found'
-${examples_dir}eccodes_f_grib_print_data_static | grep '99200 *values found'
+${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
index 80b5847..e5ba2dc 100644
--- a/examples/F90/grib_print_data_static.f90
+++ b/examples/F90/grib_print_data_static.f90
@@ -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/examples/F90/grib_samples.f90 b/examples/F90/grib_samples.f90
index 8e623dc..d0f6264 100644
--- a/examples/F90/grib_samples.f90
+++ b/examples/F90/grib_samples.f90
@@ -2,24 +2,24 @@
 !
 ! 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 create a new GRIB message from a sample.
-!               
+!
 !
 program sample
   use eccodes
-  implicit none  
+  implicit none
   integer  :: err
   integer  :: outfile, datafile
   integer  :: igribsample,igribclone,igribdata, size1
   integer  :: date1, startStep, endStep, table2Version, indicatorOfParameter
   integer  :: decimalPrecision
   character(len=10) stepType
-  real(kind=8), dimension(:), allocatable   :: v1,v2,v 
+  real(kind=8), dimension(:), allocatable   :: v1,v2,v
 
   date1 = 20080104
   startStep = 0
@@ -50,8 +50,8 @@ program sample
   v=v*1000.0 ! different units for the output grib
   v1=v
 
-  do while (err/=CODES_END_OF_FILE) 
- 
+  do while (err/=CODES_END_OF_FILE)
+
     call codes_clone(igribsample,igribclone) ! clone sample before modifying it
 
     call codes_set(igribclone,'dataDate',date1)
@@ -67,7 +67,7 @@ program sample
     call codes_set(igribclone,'values',v)
 
     call codes_write(igribclone,outfile)
-    
+
     call codes_grib_new_from_file(datafile,igribdata,err)
 
     if (err==0) then
diff --git a/examples/F90/grib_samples.sh b/examples/F90/grib_samples.sh
index bfdb4ab..7f636f1 100755
--- a/examples/F90/grib_samples.sh
+++ b/examples/F90/grib_samples.sh
@@ -16,12 +16,12 @@ cp ${data_dir}/regular_latlon_surface.grib1 ${data_dir}/regular_latlon_surface.g
 # Change the ECCODES_SAMPLES_PATH: put the data dir first
 ECCODES_SAMPLES_PATH=${data_dir}:${samples_dir}
 export ECCODES_SAMPLES_PATH
-${examples_dir}eccodes_f_grib_samples > /dev/null
+${examples_dir}/eccodes_f_grib_samples > /dev/null
 
 # Extend the ECCODES_SAMPLES_PATH: put the data dir second
 ECCODES_SAMPLES_PATH=${samples_dir}:${data_dir}
 export ECCODES_SAMPLES_PATH
-${examples_dir}eccodes_f_grib_samples > /dev/null
+${examples_dir}/eccodes_f_grib_samples > /dev/null
 
 rm -f f_out.samples.grib1
 rm -f ${data_dir}/regular_latlon_surface.grib1.tmpl
diff --git a/examples/F90/grib_set_bitmap.f90 b/examples/F90/grib_set_bitmap.f90
index 2de3c42..f33efaa 100644
--- a/examples/F90/grib_set_bitmap.f90
+++ b/examples/F90/grib_set_bitmap.f90
@@ -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.
 !
@@ -31,17 +31,17 @@ program set_bitmap
     ! GRIB 2 example
     call codes_open_file(infile,'../../data/regular_latlon_surface.grib2','r')
   end if
-  
+
   call codes_open_file(outfile,'out.set_bitmap_f.grib','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)
-  
-  ! The missingValue is not coded in the message. 
+
+  ! 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 
+  ! It should be chosen so that it cannot be confused
   ! with a valid field value
   missingValue=9999
   call codes_set(igrib, 'missingValue',missingValue)
@@ -50,13 +50,13 @@ program set_bitmap
   ! get the size of the values array
   call codes_get_size(igrib,'values',numberOfValues)
   write(*,*) 'numberOfValues=',numberOfValues
-  
+
   allocate(values(numberOfValues), stat=iret)
 
   ! get data values
   call codes_get(igrib,'values',values)
-  
-  ! enable bitmap 
+
+  ! enable bitmap
   call codes_set(igrib, 'bitmapPresent', 1)
 
   ! set some values to be missing
@@ -67,10 +67,10 @@ program set_bitmap
 
   !  write modified message to a file
   call codes_write(igrib,outfile)
-  
+
   ! free memory
   call codes_release(igrib)
-  
+
   call codes_close_file(infile)
   call codes_close_file(outfile)
 
diff --git a/examples/F90/grib_set_bitmap.sh b/examples/F90/grib_set_bitmap.sh
index 0c3f6bf..75d37e0 100755
--- a/examples/F90/grib_set_bitmap.sh
+++ b/examples/F90/grib_set_bitmap.sh
@@ -12,9 +12,9 @@
 OUT_TMP=out.set_bitmap_f.grib
 
 # The input and output files are hardcoded in the example
-${examples_dir}eccodes_f_grib_set_bitmap
+${examples_dir}/eccodes_f_grib_set_bitmap
 
-x=`${tools_dir}grib_get -p numberOfDataPoints,numberOfCodedValues,numberOfMissing $OUT_TMP`
+x=`${tools_dir}/grib_get -p numberOfDataPoints,numberOfCodedValues,numberOfMissing $OUT_TMP`
 [ "$x" = "496 486 10" ]
 
 rm -f $OUT_TMP
diff --git a/examples/F90/grib_set_data.f90 b/examples/F90/grib_set_data.f90
index 4286972..d8ae2fe 100644
--- a/examples/F90/grib_set_data.f90
+++ b/examples/F90/grib_set_data.f90
@@ -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.
 !
@@ -36,7 +36,7 @@ program set_data
   ! But if your data array has a different size, then specify the grid geometry
   ! (e.g. keys Ni, Nj etc) and set the correct number of data values
   call codes_get_size(igrib,'values',numberOfValues)
-  
+
   allocate(values(numberOfValues), stat=iret)
   d = 10e-8
   e = d
@@ -51,7 +51,7 @@ program set_data
     d = d + e
     cnt = cnt + 1
   end do
-  
+
   call codes_set(igrib, 'bitsPerValue', 16)
 
   ! set data values
diff --git a/examples/F90/grib_set_data.sh b/examples/F90/grib_set_data.sh
index be19803..fc02bf9 100755
--- a/examples/F90/grib_set_data.sh
+++ b/examples/F90/grib_set_data.sh
@@ -11,6 +11,6 @@
 
 OUT=temp.f_grib_set_data.out.grib
 
-${examples_dir}eccodes_f_grib_set_data $OUT
+${examples_dir}/eccodes_f_grib_set_data $OUT
 
 rm -f $OUT
diff --git a/examples/F90/grib_set_gvc.f90 b/examples/F90/grib_set_gvc.f90
index aa4c92b..de116f3 100644
--- a/examples/F90/grib_set_gvc.f90
+++ b/examples/F90/grib_set_gvc.f90
@@ -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.
 !
@@ -26,10 +26,10 @@ program set
 
   ! 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)
@@ -50,7 +50,7 @@ contains
 subroutine check_settings(gribid)
   implicit none
   integer, intent(in) :: gribid
-  
+
   integer(kind = 4) :: NV,typeOfFirstFixedSurface
 
   call codes_get(gribid,'NV', NV)
@@ -62,6 +62,6 @@ subroutine check_settings(gribid)
   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.f90 b/examples/F90/grib_set_keys.f90
index f4665a4..8c9803c 100644
--- a/examples/F90/grib_set_keys.f90
+++ b/examples/F90/grib_set_keys.f90
@@ -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.
 !
@@ -53,27 +53,27 @@ integer, intent(out) :: date1
 integer              :: val_date(8)
 call date_and_time ( values = val_date)
 
-date1 = val_date(1)* 10000 + val_date(2)*100 + val_date(3) 
+date1 = val_date(1)* 10000 + val_date(2)*100 + val_date(3)
 end subroutine current_date
 !======================================
 subroutine check_settings(gribid)
   implicit none
   integer, intent(in) :: gribid
-  
+
   integer(kind = 4)    :: int_value
   character(len = 10)  :: string_value
 
   !     get centre as a integer
   call codes_get(gribid,'centre',int_value)
   write(*,*) "get centre as a integer - centre = ",int_value
-  
+
   !     get centre as a string
   call codes_get(gribid,'centre',string_value)
   write(*,*) "get centre as a string  - centre = ",string_value
-  
+
   !     get date as a string
   call codes_get(gribid,'dataDate',string_value)
   write(*,*) "get date as a string    - date = ",string_value
-  
+
 end subroutine check_settings
 end program set
diff --git a/examples/F90/grib_set_keys.sh b/examples/F90/grib_set_keys.sh
index cd5f171..d3a3661 100755
--- a/examples/F90/grib_set_keys.sh
+++ b/examples/F90/grib_set_keys.sh
@@ -9,12 +9,12 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_set_keys > /dev/null
-res=`${tools_dir}grib_get -p centre out.set.grib1`
+${examples_dir}/eccodes_f_grib_set_keys > /dev/null
+res=`${tools_dir}/grib_get -p centre out.set.grib1`
 [ "$res" = "cnmc" ]
 
-${examples_dir}eccodes_f_grib_set_gvc > /dev/null
-res=`${tools_dir}grib_get -p typeOfLevel,NV 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/grib_set_missing.f90 b/examples/F90/grib_set_missing.f90
index a6eb990..8573702 100644
--- a/examples/F90/grib_set_missing.f90
+++ b/examples/F90/grib_set_missing.f90
@@ -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.
 !
@@ -34,7 +34,7 @@ program set
   call codes_set(igrib,'typeOfFirstFixedSurface','sfc')
   call codes_set_missing(igrib,'scaleFactorOfFirstFixedSurface')
   call codes_set_missing(igrib,'scaledValueOfFirstFixedSurface')
-  
+
   ! See GRIB-490
   call codes_get(igrib, 'Ni', Ni)
   call codes_is_missing(igrib,'Ni',is_missing)
diff --git a/examples/F90/grib_set_missing.sh b/examples/F90/grib_set_missing.sh
index e00fa41..7b5a17d 100755
--- a/examples/F90/grib_set_missing.sh
+++ b/examples/F90/grib_set_missing.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_set_missing > /dev/null
+${examples_dir}/eccodes_f_grib_set_missing > /dev/null
 rm -f f_out_surface_level.grib2
diff --git a/examples/F90/grib_set_pv.f90 b/examples/F90/grib_set_pv.f90
index 7b244d2..a9c294f 100644
--- a/examples/F90/grib_set_pv.f90
+++ b/examples/F90/grib_set_pv.f90
@@ -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.
 !
@@ -19,7 +19,7 @@ program grib_set_pv
   integer                         :: outfile, igrib
   integer                         :: i, ios
   real, dimension(:),allocatable  :: pv
-  
+
   numberOfLevels=60
   numberOfCoefficients=2*(numberOfLevels+1)
 
@@ -36,7 +36,7 @@ program grib_set_pv
       exit
     end if
   end do
-  
+
   ! print coefficients
   !do i=1,numberOfCoefficients,2
   !  print *,"  a=",pv(i)," b=",pv(i+1)
@@ -45,7 +45,7 @@ program grib_set_pv
   close(unit=1)
 
   call codes_open_file(outfile, 'out.pv.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_samples(igrib, "reduced_gg_sfc_grib1")
@@ -53,21 +53,21 @@ program grib_set_pv
   ! set levtype to ml (model level)
   call codes_set(igrib,'typeOfLevel','hybrid')
 
-  ! set level 
+  ! set level
   call codes_set(igrib,'level',2)
 
-  ! set PVPresent as an integer 
+  ! set PVPresent as an integer
   call codes_set(igrib,'PVPresent',1)
-  
+
   call codes_set(igrib,'pv',pv)
-  
+
   ! write modified message to a file
   call codes_write(igrib,outfile)
-  
+
   ! Free memory
   call codes_release(igrib)
   deallocate(pv)
 
   call codes_close_file(outfile)
-  
+
 end program grib_set_pv
diff --git a/examples/F90/grib_set_pv.sh b/examples/F90/grib_set_pv.sh
index 0c89b8a..1248ced 100755
--- a/examples/F90/grib_set_pv.sh
+++ b/examples/F90/grib_set_pv.sh
@@ -9,5 +9,5 @@
 
 . ./include.sh
 
-${examples_dir}eccodes_f_grib_set_pv > /dev/null
+${examples_dir}/eccodes_f_grib_set_pv > /dev/null
 rm -f out.pv.grib1
diff --git a/examples/F90/include.ctest.sh.in b/examples/F90/include.ctest.sh.in
index e634d68..d1d9079 100644
--- a/examples/F90/include.ctest.sh.in
+++ b/examples/F90/include.ctest.sh.in
@@ -11,12 +11,12 @@ proj_dir=@PROJECT_SOURCE_DIR@
 data_dir=@PROJECT_BINARY_DIR@/data
 
 # use definitions from binary dir to test if installation will be correct
-def_dir="@CMAKE_BINARY_DIR@/share/@PROJECT_NAME@/definitions"
+def_dir="@CMAKE_BINARY_DIR@/@ECCODES_DEFINITION_SUFF@"
 ECCODES_DEFINITION_PATH="${def_dir}"
 export ECCODES_DEFINITION_PATH
 
-tools_dir=@CMAKE_BINARY_DIR@/bin/
-examples_dir=@CMAKE_CURRENT_BINARY_DIR@/
+tools_dir=@CMAKE_BINARY_DIR@/bin
+examples_dir=@CMAKE_CURRENT_BINARY_DIR@
 
 # If this environment variable is set, then run the
 # executables with valgrind
@@ -26,6 +26,6 @@ if test "x$ECCODES_TEST_WITH_VALGRIND" != "x"; then
 fi
 
 # use samples from binary dir to test if installation will be correct
-samp_dir="@CMAKE_BINARY_DIR@/share/@PROJECT_NAME@/samples"
+samp_dir="@CMAKE_BINARY_DIR@/@ECCODES_SAMPLES_SUFF@"
 ECCODES_SAMPLES_PATH=${samp_dir}
 export ECCODES_SAMPLES_PATH
diff --git a/examples/F90/include.sh b/examples/F90/include.sh
index cf77e19..40d0bee 100755
--- a/examples/F90/include.sh
+++ b/examples/F90/include.sh
@@ -31,14 +31,14 @@ else
     export ECCODES_DEFINITION_PATH
     ECCODES_SAMPLES_PATH=$cpath/samples
     export ECCODES_SAMPLES_PATH
-    tools_dir=$cpath/tools/
-    examples_dir=$cpath/examples/F90/
+    tools_dir=$cpath/tools
+    examples_dir=$cpath/examples/F90
     data_dir=$cpath/data
     samples_dir=$cpath/samples
 
     if test "x$ECCODES_TEST_WITH_VALGRIND" != "x"; then
-      tools_dir="valgrind --error-exitcode=1 -q $cpath/tools/"
-      examples_dir="valgrind --error-exitcode=1 -q $cpath/examples/F90/"
+      tools_dir="valgrind --error-exitcode=1 -q $cpath/tools"
+      examples_dir="valgrind --error-exitcode=1 -q $cpath/examples/F90"
     fi
 
   else
diff --git a/examples/F90/iterator_fortran.f90 b/examples/F90/iterator_fortran.f90
index 3c75757..58a0e5b 100644
--- a/examples/F90/iterator_fortran.f90
+++ b/examples/F90/iterator_fortran.f90
@@ -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/examples/F90/keys_iterator_fortran.f90 b/examples/F90/keys_iterator_fortran.f90
index cca52d2..7735cf8 100644
--- a/examples/F90/keys_iterator_fortran.f90
+++ b/examples/F90/keys_iterator_fortran.f90
@@ -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/examples/F90/multi_fortran.f90 b/examples/F90/multi_fortran.f90
index eda23cf..82bdadf 100644
--- a/examples/F90/multi_fortran.f90
+++ b/examples/F90/multi_fortran.f90
@@ -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.
 !
@@ -16,7 +16,7 @@
 program multi
   use eccodes
   implicit none
-  
+
   integer              :: iret
   integer(kind = 4)    ::  parameterCategory,parameterNumber,discipline
   integer              :: ifile,igrib
diff --git a/examples/F90/new_from_file.f90 b/examples/F90/new_from_file.f90
index 6a42b6a..cb54015 100644
--- a/examples/F90/new_from_file.f90
+++ b/examples/F90/new_from_file.f90
@@ -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.
 !
@@ -33,7 +33,7 @@ use eccodes
     print *, "===== Message #",count1
     call codes_grib_new_from_file(ifile,igrib, iret)
 
-  end do 
+  end do
   if (iret /= CODES_END_OF_FILE) then
     call codes_check(iret,'new_from_file','')
   endif
@@ -41,4 +41,4 @@ use eccodes
 
   call codes_close_file(ifile)
 
-end program 
+end program
diff --git a/examples/F90/precision_fortran.f90 b/examples/F90/precision_fortran.f90
index c1d3a89..357c66a 100644
--- a/examples/F90/precision_fortran.f90
+++ b/examples/F90/precision_fortran.f90
@@ -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/examples/F90/print_data_fortran.f90 b/examples/F90/print_data_fortran.f90
index aaacfcd..247b40d 100644
--- a/examples/F90/print_data_fortran.f90
+++ b/examples/F90/print_data_fortran.f90
@@ -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/examples/F90/read_from_file.f90 b/examples/F90/read_from_file.f90
index 94e180b..bdec5c5 100644
--- a/examples/F90/read_from_file.f90
+++ b/examples/F90/read_from_file.f90
@@ -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.
 !
@@ -24,7 +24,7 @@ use eccodes
   call read_using_size_t()
   call read_using_integer()
   print *,'Passed'
-  
+
 contains
 !======================================
 subroutine read_using_size_t
@@ -51,7 +51,7 @@ subroutine read_using_size_t
     end if
     len1=size
     call codes_read_from_file(ifile, buffer, len1, iret)
-  end do 
+  end do
 
   if (iret/=CODES_END_OF_FILE) then
     call codes_check(iret,'read_from_file','')
@@ -94,4 +94,4 @@ subroutine read_using_integer
 
 end subroutine read_using_integer
 !======================================
-end program 
+end program
diff --git a/examples/F90/read_from_file.sh b/examples/F90/read_from_file.sh
index 3cab056..e20fd92 100755
--- a/examples/F90/read_from_file.sh
+++ b/examples/F90/read_from_file.sh
@@ -13,4 +13,4 @@
 # Check program completed successfully. We have to resort to testing
 # the output as there is no way in Fortran to set the exit code
 #
-${examples_dir}eccodes_f_read_from_file | grep 'Passed' 
+${examples_dir}/eccodes_f_read_from_file | grep 'Passed'
diff --git a/examples/F90/read_message.f90 b/examples/F90/read_message.f90
index 2727965..7ab38ea 100644
--- a/examples/F90/read_message.f90
+++ b/examples/F90/read_message.f90
@@ -3,7 +3,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.
 !
@@ -20,10 +20,10 @@ implicit none
 
   call codes_open_file(ifile,'../../data/index.grib','r')
   call codes_open_file(ofile,'out.readmsg.grib','w')
- 
+
 ! a grib message is read from file into buffer
   len1=size(buffer)*4
-  call  codes_read_from_file(ifile,buffer,len1,iret) 
+  call  codes_read_from_file(ifile,buffer,len1,iret)
 
   do while (iret/=CODES_END_OF_FILE)
 
@@ -31,7 +31,7 @@ implicit none
     call codes_new_from_message(igrib,buffer)
 
 !   get as a integer
-    call codes_get(igrib,'step', step) 
+    call codes_get(igrib,'step', step)
     write(*,*) 'step=',step
 
     call codes_get(igrib,'level',level)
@@ -43,7 +43,7 @@ implicit none
 
 !   a grib message is read from file into buffer
     len1=size(buffer)*4
-    call  codes_read_from_file(ifile,buffer,len1,iret) 
+    call  codes_read_from_file(ifile,buffer,len1,iret)
 
   enddo
 
diff --git a/examples/F90/read_message.sh b/examples/F90/read_message.sh
index 199d2a5..25d995a 100755
--- a/examples/F90/read_message.sh
+++ b/examples/F90/read_message.sh
@@ -14,9 +14,9 @@ out=out.readmsg.grib
 
 rm -f $out | true
 
-${examples_dir}eccodes_f_read_message > /dev/null
+${examples_dir}/eccodes_f_read_message > /dev/null
 
-${tools_dir}grib_compare $in $out
+${tools_dir}/grib_compare $in $out
 
 rm -f $out
 
diff --git a/examples/F90/set_fortran.f90 b/examples/F90/set_fortran.f90
index 72d1452..f63ab7d 100644
--- a/examples/F90/set_fortran.f90
+++ b/examples/F90/set_fortran.f90
@@ -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/examples/F90/set_missing_fortran.f90 b/examples/F90/set_missing_fortran.f90
index d0dbe7e..0eecc8e 100644
--- a/examples/F90/set_missing_fortran.f90
+++ b/examples/F90/set_missing_fortran.f90
@@ -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/examples/python/CMakeLists.txt b/examples/python/CMakeLists.txt
index 42693c2..7294af1 100644
--- a/examples/python/CMakeLists.txt
+++ b/examples/python/CMakeLists.txt
@@ -64,7 +64,7 @@ list( APPEND tests
 
 # The high level python test requires new features in the unittest
 # which are only there for python 2.7 onwards
-if( PYTHON_VERSION_STRING VERSION_GREATER "2.7" )
+if( HAVE_PYTHON AND PYTHON_VERSION_STRING VERSION_GREATER "2.7" )
     ecbuild_info("Python examples: Adding test for PythonicGrib")
     list( APPEND tests high_level_api )
 endif()
diff --git a/examples/python/bufr_copy_data.sh b/examples/python/bufr_copy_data.sh
index 5da7618..c6b3163 100755
--- a/examples/python/bufr_copy_data.sh
+++ b/examples/python/bufr_copy_data.sh
@@ -54,10 +54,10 @@ cat > ${REF} <<EOF
 EOF
 
 INPUT=metar_with_2_bias.bufr
-$PYTHON ${examples_src}bufr_copy_data.py ${INPUT} ${TEMP}
+$PYTHON ${examples_src}/bufr_copy_data.py ${INPUT} ${TEMP}
 # The input and output BUFR messages should be different
 set +e
-${tools_dir}bufr_compare ${TEMP} ${INPUT} > ${MYLOG}
+${tools_dir}/bufr_compare ${TEMP} ${INPUT} > ${MYLOG}
 status=$?
 set -e
 [ $status -eq 1 ]
diff --git a/examples/python/bufr_encode_flight.sh b/examples/python/bufr_encode_flight.sh
index 4ca5eac..b5d2f07 100755
--- a/examples/python/bufr_encode_flight.sh
+++ b/examples/python/bufr_encode_flight.sh
@@ -17,9 +17,9 @@ REDIRECT=/dev/null
 $PYTHON $examples_src/bufr_encode_flight.py $csv_in $bufr_in $fBufrTmp
 
 # Make sure output is OK
-${tools_dir}bufr_dump $fBufrTmp > $REDIRECT
+${tools_dir}/bufr_dump $fBufrTmp > $REDIRECT
 
-numSubsets=`${tools_dir}bufr_get -p numberOfSubsets $fBufrTmp`
+numSubsets=`${tools_dir}/bufr_get -p numberOfSubsets $fBufrTmp`
 [ "$numSubsets" = "185" ]
 
 rm -f $fBufrTmp
diff --git a/examples/python/bufr_keys_iterator.py b/examples/python/bufr_keys_iterator.py
index 7fb8444..f7e5648 100644
--- a/examples/python/bufr_keys_iterator.py
+++ b/examples/python/bufr_keys_iterator.py
@@ -11,7 +11,7 @@
 # Python implementation: bufr_keys_iterator
 #
 # Description: Example on how to use keys_iterator functions and the
-#           codes_keys_iterator structure to get all the available
+#           codes_bufr_keys_iterator structure to get all the available
 #           keys in a BUFR message.
 
 
@@ -42,28 +42,20 @@ def example():
 
         # we need to instruct ecCodes to expand all the descriptors
         # i.e. unpack the data values
-        # codes_set(bufr,'unpack',1)
+        codes_set(bufr,'unpack',1)
 
-        # get key iterator for a given namespace
-        iterid = codes_keys_iterator_new(bufr, 'ls')
-
-        # Different types of keys can be skipped
-        # codes_skip_computed(iterid)
-        # codes_skip_coded(iterid)
-        # codes_skip_edition_specific(iterid)
-        # codes_skip_duplicates(iterid)
-        # codes_skip_read_only(iterid)
-        # codes_skip_function(iterid)
+        # get BUFR key iterator
+        iterid = codes_bufr_keys_iterator_new(bufr)
 
         # loop over the keys
-        while codes_keys_iterator_next(iterid):
+        while codes_bufr_keys_iterator_next(iterid):
 
             # print key name
-            keyname = codes_keys_iterator_get_name(iterid)
+            keyname = codes_bufr_keys_iterator_get_name(iterid)
             print "  %s" % keyname
 
         # delete the key iterator
-        codes_keys_iterator_delete(iterid)
+        codes_bufr_keys_iterator_delete(iterid)
 
         cnt += 1
 
diff --git a/examples/python/bufr_keys_iterator.sh b/examples/python/bufr_keys_iterator.sh
index 61a104a..7233422 100755
--- a/examples/python/bufr_keys_iterator.sh
+++ b/examples/python/bufr_keys_iterator.sh
@@ -15,7 +15,7 @@ label="bufr_keys_iterator_test_p"
 
 #Define tmp file
 fTmp=${label}".tmp.txt"
-rm -f $fTmp | true
+rm -f $fTmp
 
 REDIRECT=/dev/null
 
@@ -26,9 +26,8 @@ f=${data_dir}/bufr/syno_1.bufr
 $PYTHON $examples_src/bufr_keys_iterator.py 2> $REDIRECT > $fTmp
 
 #TODO: check the output
-
-#cat  $fTmp
+grep -q '#6#cloudType->percentConfidence' $fTmp
+grep -q '#2#verticalSignificanceSurfaceObservations->percentConfidence' $fTmp
 
 #Clean up
 rm -f $fTmp
-
diff --git a/examples/python/bufr_set_keys.sh b/examples/python/bufr_set_keys.sh
index 71b7c2a..3b0ec77 100755
--- a/examples/python/bufr_set_keys.sh
+++ b/examples/python/bufr_set_keys.sh
@@ -28,7 +28,7 @@ $PYTHON $examples_src/bufr_set_keys.py 2> $REDIRECT > $REDIRECT
 
 #Compare modified to the original
 set +e
-${tools_dir}/bufr_compare $f $fBufrTmp 1>$REDIRECT 2> $REDIRECT
+${tools_dir}//bufr_compare $f $fBufrTmp 1>$REDIRECT 2> $REDIRECT
 
 #Check if modified is different
 if [ $? -eq 0 ]; then
@@ -39,7 +39,7 @@ fi
 set -e
 
 #Check if modified has the same number of messages
-[ `${tools_dir}bufr_count $f` -eq `${tools_dir}/bufr_count ${fBufrTmp}` ]
+[ `${tools_dir}/bufr_count $f` -eq `${tools_dir}//bufr_count ${fBufrTmp}` ]
 
 #Clean up
 rm -f $fBufrTmp
diff --git a/examples/python/grib_index.sh b/examples/python/grib_index.sh
index 110dde6..962d7e6 100755
--- a/examples/python/grib_index.sh
+++ b/examples/python/grib_index.sh
@@ -2,5 +2,21 @@
 
 . ./include.sh
 
-$PYTHON $examples_src/grib_index.py
-rm -f my.idx
+TEMP1=temp1.grib_index.py.txt
+TEMP2=temp2.grib_index.py.txt
+
+IDX_FILE=my.idx
+rm -f $IDX_FILE
+
+# First time it will create the index file
+$PYTHON $examples_src/grib_index.py > $TEMP1
+
+[ -f "$IDX_FILE" ]
+
+# Second time it will use the file created before
+$PYTHON $examples_src/grib_index.py > $TEMP2
+
+# Check output in both cases is the same
+diff $TEMP1 $TEMP2
+
+rm -f $IDX_FILE $TEMP1 $TEMP2
diff --git a/examples/python/high_level_api.py b/examples/python/high_level_api.py
index 4f32df4..c7b59d4 100644
--- a/examples/python/high_level_api.py
+++ b/examples/python/high_level_api.py
@@ -132,56 +132,49 @@ KNOWN_GRIB_KEYS = ['7777', 'EPS information', 'GRIBEditionNumber', 'N', 'NV',
                    'unitsOfSecondFixedSurface', 'unpackedError',
                    'uvRelativeToGrid', 'validityDate', 'validityTime',
                    'values', 'x', 'year']
-KNOWN_BUFR_KEYS = ['3HourPressureChange', '7777', 'BUFRstr',
-                   'airTemperatureAt2M', 'blockNumber', 'bufrHeaderCentre',
-                   'bufrHeaderSubCentre', 'bufrTemplate',
-                   'bufrdcExpandedDescriptors', 'centre',
-                   'characteristicOfPressureTendency', 'cloudAmount',
-                   'cloudCoverTotal', 'cloudType', 'compressedData',
-                   'corr1Data', 'corr2Data', 'corr3Data', 'corr4Data',
-                   'correction1', 'correction1Part', 'correction2',
-                   'correction2Part', 'correction3', 'correction3Part',
-                   'correction4', 'correction4Part', 'createNewData',
-                   'dataCategory', 'dataPresentIndicator', 'dataSubCategory',
-                   'day', 'defaultSequence', 'dewpointTemperatureAt2M', 'ed',
-                   'edition', 'expandedAbbreviations', 'expandedCodes',
-                   'expandedCrex_scales', 'expandedCrex_units',
-                   'expandedCrex_widths', 'expandedNames',
-                   'expandedOriginalCodes', 'expandedOriginalReferences',
-                   'expandedOriginalScales', 'expandedOriginalWidths',
-                   'expandedTypes', 'expandedUnits', 'generatingApplication',
-                   'globalDomain', 'heightOfBaseOfCloud', 'heightOfStation',
-                   'horizontalVisibility', 'hour', 'isSatellite',
-                   'isSatelliteType', 'latitude', 'lengthDescriptors',
-                   'localDay', 'localHour', 'localLatitude', 'localLongitude',
-                   'localMinute', 'localMonth', 'localSecond',
-                   'localSectionPresent', 'localTablesVersionNumber',
-                   'localYear', 'longitude', 'masterTableNumber',
-                   'masterTablesVersionNumber', 'md5Data', 'md5Structure',
-                   'messageLength', 'minute', 'month', 'nonCoordinatePressure',
-                   'numberOfSubsets', 'numberOfUnexpandedDescriptors',
-                   'observedData', 'operator', 'pastWeather1', 'pastWeather2',
-                   'presentWeather', 'pressureReducedToMeanSeaLevel',
-                   'qualityControl', 'rdbSubtype', 'rdbType', 'rdbtime',
-                   'rdbtimeDay', 'rdbtimeHour', 'rdbtimeMinute',
-                   'rdbtimeSecond', 'rectime', 'rectimeDay', 'rectimeHour',
-                   'rectimeMinute', 'rectimeSecond', 'relativeHumidity',
-                   'reservedSection2', 'reservedSection3', 'section1Length',
-                   'section1Padding', 'section2Length', 'section2Padding',
-                   'section3Flags', 'section3Length', 'section3Padding',
-                   'section4Length', 'section4Padding', 'section5Length',
-                   'sequences', 'spare', 'spare1', 'stationNumber',
-                   'stationType', 'subsetNumber', 'tableNumber',
-                   'templatesLocalDir', 'templatesMasterDir', 'totalLength',
-                   'totalPrecipitationPast6Hours', 'totalSnowDepth',
-                   'typicalCentury', 'typicalDate', 'typicalDay',
-                   'typicalHour', 'typicalMinute', 'typicalMonth',
-                   'typicalSecond', 'typicalTime', 'typicalYear',
-                   'typicalYearOfCentury', 'unexpandedDescriptors',
-                   'updateSequenceNumber',
-                   'verticalSignificanceSurfaceObservations',
-                   'windDirectionAt10M', 'windSpeedAt10M', 'year']
-
+KNOWN_BUFR_KEYS = ['edition', 'masterTableNumber', 'bufrHeaderSubCentre', 'bufrHeaderCentre',
+                   'updateSequenceNumber', 'dataCategory', 'dataSubCategory', 'masterTablesVersionNumber',
+                   'localTablesVersionNumber', 'typicalYearOfCentury', 'typicalMonth', 'typicalDay',
+                   'typicalHour', 'typicalMinute', 'rdbType', 'rdbSubtype', 'rdbtimeDay', 'rdbtimeHour',
+                   'rdbtimeMinute', 'rdbtimeSecond', 'rectimeDay', 'rectimeHour', 'rectimeMinute', 'rectimeSecond',
+                   'correction1', 'correction1Part', 'correction2', 'correction2Part', 'correction3', 'correction3Part',
+                   'correction4', 'correction4Part', 'qualityControl', 'numberOfSubsets', 'localLatitude', 'localLongitude',
+                   'observedData', 'compressedData', 'unexpandedDescriptors', '#1#blockNumber',
+                   '#1#blockNumber->percentConfidence', '#1#stationNumber', '#1#stationNumber->percentConfidence',
+                   '#1#stationType', '#1#stationType->percentConfidence', '#1#year', '#1#year->percentConfidence',
+                   '#1#month', '#1#month->percentConfidence', '#1#day', '#1#day->percentConfidence', '#1#hour',
+                   '#1#hour->percentConfidence', '#1#minute', '#1#minute->percentConfidence', '#1#latitude',
+                   '#1#latitude->percentConfidence', '#1#longitude', '#1#longitude->percentConfidence',
+                   '#1#heightOfStation', '#1#heightOfStation->percentConfidence', '#1#nonCoordinatePressure',
+                   '#1#nonCoordinatePressure->percentConfidence', '#1#pressureReducedToMeanSeaLevel',
+                   '#1#pressureReducedToMeanSeaLevel->percentConfidence', '#1#3HourPressureChange',
+                   '#1#3HourPressureChange->percentConfidence', '#1#characteristicOfPressureTendency',
+                   '#1#characteristicOfPressureTendency->percentConfidence', '#1#windDirectionAt10M',
+                   '#1#windDirectionAt10M->percentConfidence', '#1#windSpeedAt10M', '#1#windSpeedAt10M->percentConfidence',
+                   '#1#airTemperatureAt2M', '#1#airTemperatureAt2M->percentConfidence', '#1#dewpointTemperatureAt2M',
+                   '#1#dewpointTemperatureAt2M->percentConfidence', '#1#relativeHumidity',
+                   '#1#relativeHumidity->percentConfidence', '#1#horizontalVisibility',
+                   '#1#horizontalVisibility->percentConfidence', '#1#presentWeather',
+                   '#1#presentWeather->percentConfidence', '#1#pastWeather1', '#1#pastWeather1->percentConfidence',
+                   '#1#pastWeather2', '#1#pastWeather2->percentConfidence', '#1#cloudCoverTotal',
+                   '#1#cloudCoverTotal->percentConfidence', '#1#verticalSignificanceSurfaceObservations',
+                   '#1#verticalSignificanceSurfaceObservations->percentConfidence', '#1#cloudAmount',
+                   '#1#cloudAmount->percentConfidence', '#1#heightOfBaseOfCloud',
+                   '#1#heightOfBaseOfCloud->percentConfidence', '#1#cloudType', '#1#cloudType->percentConfidence',
+                   '#2#cloudType', '#2#cloudType->percentConfidence', '#3#cloudType', '#3#cloudType->percentConfidence',
+                   '#2#verticalSignificanceSurfaceObservations', '#2#verticalSignificanceSurfaceObservations->percentConfidence',
+                   '#2#cloudAmount', '#2#cloudAmount->percentConfidence', '#4#cloudType',
+                   '#4#cloudType->percentConfidence', '#2#heightOfBaseOfCloud', '#2#heightOfBaseOfCloud->percentConfidence',
+                   '#3#verticalSignificanceSurfaceObservations', '#3#verticalSignificanceSurfaceObservations->percentConfidence',
+                   '#3#cloudAmount', '#3#cloudAmount->percentConfidence', '#5#cloudType', '#5#cloudType->percentConfidence',
+                   '#3#heightOfBaseOfCloud', '#3#heightOfBaseOfCloud->percentConfidence', '#4#verticalSignificanceSurfaceObservations',
+                   '#4#verticalSignificanceSurfaceObservations->percentConfidence', '#4#cloudAmount', '#4#cloudAmount->percentConfidence',
+                   '#6#cloudType', '#6#cloudType->percentConfidence', '#4#heightOfBaseOfCloud', '#4#heightOfBaseOfCloud->percentConfidence',
+                   '#5#verticalSignificanceSurfaceObservations', '#5#verticalSignificanceSurfaceObservations->percentConfidence', '#5#cloudAmount',
+                   '#5#cloudAmount->percentConfidence', '#7#cloudType', '#7#cloudType->percentConfidence', '#5#heightOfBaseOfCloud',
+                   '#5#heightOfBaseOfCloud->percentConfidence', '#1#totalPrecipitationPast6Hours',
+                   '#1#totalPrecipitationPast6Hours->percentConfidence', '#1#totalSnowDepth', '#1#totalSnowDepth->percentConfidence',
+                   '#1#centre', '#1#generatingApplication']
 
 class TestGribFile(unittest.TestCase):
 
@@ -233,8 +226,9 @@ class TestGribMessage(unittest.TestCase):
         """Metadata is read correctly from GribMessage."""
         with GribFile(TESTGRIB) as grib:
             msg = GribMessage(grib)
+            msg_keys = msg.keys()
             for key in KNOWN_GRIB_KEYS:
-                assert key in msg.keys()
+                assert key in msg_keys
             self.assertEqual(msg.size(), 160219)
             self.assertEqual(len(msg.keys()), len(msg))
 
@@ -355,8 +349,9 @@ class TestBufrMessage(unittest.TestCase):
         """Metadata is read correctly from BufrMessage."""
         with BufrFile(TESTBUFR) as bufr:
             msg = BufrMessage(bufr)
+            msg_keys = msg.keys()
             for key in KNOWN_BUFR_KEYS:
-                assert key in msg.keys()
+                assert key in msg_keys
             self.assertEqual(msg.size(), 220)
             self.assertEqual(len(msg.keys()), len(msg))
 
diff --git a/examples/python/include.ctest.sh.in b/examples/python/include.ctest.sh.in
index 925bf0d..a812e4d 100644
--- a/examples/python/include.ctest.sh.in
+++ b/examples/python/include.ctest.sh.in
@@ -10,16 +10,16 @@ fi
 data_dir=@PROJECT_BINARY_DIR@/data
 
 # use definitions from binary dir to test if installation will be correct
-def_dir="@CMAKE_BINARY_DIR@/share/@PROJECT_NAME@/definitions"
+def_dir="@CMAKE_BINARY_DIR@/@ECCODES_DEFINITION_SUFF@"
 ECCODES_DEFINITION_PATH="${def_dir}"
 export ECCODES_DEFINITION_PATH
 
-tools_dir=@CMAKE_BINARY_DIR@/bin/
-examples_dir=@CMAKE_CURRENT_BINARY_DIR@/
-examples_src=@CMAKE_CURRENT_SOURCE_DIR@/
+tools_dir=@CMAKE_BINARY_DIR@/bin
+examples_dir=@CMAKE_CURRENT_BINARY_DIR@
+examples_src=@CMAKE_CURRENT_SOURCE_DIR@
 
 # use samples from binary dir to test if installation will be correct
-samp_dir="@CMAKE_BINARY_DIR@/share/@PROJECT_NAME@/samples"
+samp_dir="@CMAKE_BINARY_DIR@/@ECCODES_SAMPLES_SUFF@"
 ECCODES_SAMPLES_PATH=${samp_dir}
 export ECCODES_SAMPLES_PATH
 
diff --git a/examples/python/include.sh b/examples/python/include.sh
index caa26df..53341f3 100644
--- a/examples/python/include.sh
+++ b/examples/python/include.sh
@@ -19,7 +19,7 @@ else
   export ECCODES_DEFINITION_PATH
   ECCODES_SAMPLES_PATH=$cpath/samples
   export ECCODES_SAMPLES_PATH
-  tools_dir=$cpath/tools/
+  tools_dir=$cpath/tools
   examples_dir=$cpath/examples/python
   data_dir=$cpath/data
   examples_src=$examples_dir
diff --git a/fortran/eccodes_f90_int.f90 b/fortran/eccodes_f90_int.f90
index 63f75eb..874d6aa 100644
--- a/fortran/eccodes_f90_int.f90
+++ b/fortran/eccodes_f90_int.f90
@@ -61,10 +61,10 @@
                      codes_index_select_string, &
                      codes_index_select_real8
   end interface codes_index_select
-          
-  !> Get the value for a key from a grib message.
+
+  !> Get the value for a key from a message.
   !>
-  !> Given a \em gribid and \em key as input a \em value for the \em key is returned.
+  !> Given a \em msgid and \em key as input a \em value for the \em key is returned.
   !> In some cases the \em value can be an array rather than a scalar.
   !> As examples of array keys we have "values","pl", "pv" respectively the data values,
   !> the list of number of points for each latitude in a reduced grid and the list of
@@ -76,7 +76,7 @@
   !> Analogous conversions are always provided when possible.
   !> Illegal conversions are real to integer and character to any other type.
   !>
-  !> The \em gribid references to a grib message loaded in memory.
+  !> The \em msgid references to a message loaded in memory.
   !>
   !> In case of error, if the status parameter (optional) is not given, the program will
   !> exit with an error message.\n Otherwise the error message can be
@@ -86,11 +86,10 @@
   !>
   !> @see codes_new_from_file, codes_release, codes_set
   !>
-  !>
-  !> @param[in] gribid      id of the grib loaded in memory
-  !> @param[in] key     key name
-  !> @param[out] value       value can be a scalar or array of integer(4),real(4),real(8),character
-  !> @param[out] status      CODES_SUCCESS if OK, integer value on error
+  !> @param[in] msgid     id of the message loaded in memory
+  !> @param[in] key       key name
+  !> @param[out] value    value can be a scalar or array of integer(4),real(4),real(8),character
+  !> @param[out] status   CODES_SUCCESS if OK, integer value on error
   interface codes_get
     module procedure codes_get_int, &
                      codes_get_real4, &
@@ -111,7 +110,7 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !> @param gribid      id of the grib loaded in memory
+  !> @param msgid       id of the message loaded in memory
   !> @param key         name of the key
   !> @param size        size of the array key
   !> @param status      CODES_SUCCESS if OK, integer value on error
@@ -119,15 +118,15 @@
       module procedure  codes_get_size_int 
   end interface codes_get_size
 
-  !> Set the value for a key in a grib message.
+  !> Set the value for a key in a message.
   !>
-  !> The given \em value is set for the \em key in the \em gribid message.
+  !> The given \em value is set for the \em key in the \em msgid message.
   !> In some cases the \em value can be an array rather than a scalar.
   !> As examples of array keys we have "values","pl", "pv" respectively the data values,
   !> the list of number of points for each latitude in a reduced grid and the list of
   !> vertical levels. In these cases the \em value array must be allocated by the caller
   !> and their required dimension can be obtained with \ref codes_get_size. \n
-  !> The gribid references to a grib message loaded in memory.
+  !> The msgid references to a message loaded in memory.
   !>
   !> In case of error, if the status parameter (optional) is not given, the program will
   !> exit with an error message.\n Otherwise the error message can be
@@ -137,10 +136,10 @@
   !>
   !> @see codes_new_from_file, codes_release, codes_get
   !>
-  !> @param[in] gribid      id of the grib loaded in memory
-  !> @param[in] key          key name
-  !> @param[out] value       value can be a scalar or array of integer(4),real(4),real(8)
-  !> @param[out] status      CODES_SUCCESS if OK, integer value on error
+  !> @param[in] msgid       id of the message loaded in memory
+  !> @param[in] key         key name
+  !> @param[out] value      value can be a scalar or array of integer(4),real(4),real(8)
+  !> @param[out] status     CODES_SUCCESS if OK, integer value on error
   interface codes_set
     module procedure codes_set_int, &
                      codes_set_real4, &
diff --git a/fortran/eccodes_f90_int_size_t.f90 b/fortran/eccodes_f90_int_size_t.f90
index 33988fa..84fabe2 100644
--- a/fortran/eccodes_f90_int_size_t.f90
+++ b/fortran/eccodes_f90_int_size_t.f90
@@ -12,7 +12,6 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !>
   !> @param ifile       id of the opened file to be used in all the file functions.
   !> @param buffer      buffer to be read
   !> @param nbytes      number of bytes to be read
@@ -28,7 +27,6 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !>
   !> @param ifile       id of the opened file to be used in all the file functions.
   !> @param buffer      buffer to be read
   !> @param nbytes      number of bytes to be read
@@ -46,7 +44,6 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !>
   !> @param ifile       id of the opened file to be used in all the file functions.
   !> @param buffer      buffer to be written
   !> @param nbytes      number of bytes to be written
@@ -64,7 +61,7 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !> @param gribid      id of the grib loaded in memory
+  !> @param msgid       id of the message loaded in memory
   !> @param nbytes      size in bytes of the message
   !> @param status      CODES_SUCCESS if OK, integer value on error
   interface codes_get_message_size
diff --git a/fortran/eccodes_f90_long_int.f90 b/fortran/eccodes_f90_long_int.f90
index ff4cbfe..153a24f 100644
--- a/fortran/eccodes_f90_long_int.f90
+++ b/fortran/eccodes_f90_long_int.f90
@@ -29,7 +29,6 @@
 
   !> Get the number of distinct values of the key in argument contained in the index. The key must belong to the index.
   !>
-  !>
   !> In case of error, if the status parameter (optional) is not given, the program will
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
@@ -65,11 +64,11 @@
                      codes_index_select_real8
   end interface codes_index_select
           
-  !> Get the value for a key from a grib message.
+  !> Get the value for a key from a message.
   !>
-  !> Given a \em gribid and \em key as input a \em value for the \em key is returned.
+  !> Given a \em msgid and \em key as input a \em value for the \em key is returned.
   !> In some cases the \em value can be an array rather than a scalar.
-  !> As examples of array keys we have "values","pl", "pv" respectively the data values,
+  !> As examples of array keys we have "values", "pl", "pv" respectively the data values,
   !> the list of number of points for each latitude in a reduced grid and the list of
   !> vertical levels. In these cases the \em value array must be allocated by the caller
   !> and their required dimension can be obtained with \ref codes_get_size. \n
@@ -79,7 +78,7 @@
   !> Analogous conversions are always provided when possible.
   !> Illegal conversions are real to integer and character to any other type.
   !>
-  !> The \em gribid references to a grib message loaded in memory.
+  !> The \em msgid references to a message loaded in memory.
   !>
   !> In case of error, if the status parameter (optional) is not given, the program will
   !> exit with an error message.\n Otherwise the error message can be
@@ -89,11 +88,10 @@
   !>
   !> @see codes_new_from_file, codes_release, codes_set
   !>
-  !>
-  !> @param[in] gribid      id of the grib loaded in memory
-  !> @param[in] key     key name
-  !> @param[out] value       value can be a scalar or array of integer(4),real(4),real(8),character
-  !> @param[out] status      CODES_SUCCESS if OK, integer value on error
+  !> @param[in] msgid     id of the message loaded in memory
+  !> @param[in] key       key name
+  !> @param[out] value    value can be a scalar or array of integer(4),real(4),real(8),character
+  !> @param[out] status   CODES_SUCCESS if OK, integer value on error
   interface codes_get
     module procedure codes_get_int, &
                      codes_get_long, &
@@ -114,7 +112,7 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !> @param gribid      id of the grib loaded in memory
+  !> @param msgid       id of the message loaded in memory
   !> @param key         name of the key
   !> @param size        size of the array key
   !> @param status      CODES_SUCCESS if OK, integer value on error
@@ -123,15 +121,15 @@
                         codes_get_size_long 
   end interface codes_get_size
 
-  !> Set the value for a key in a grib message.
+  !> Set the value for a key in a message.
   !>
-  !> The given \em value is set for the \em key in the \em gribid message.
+  !> The given \em value is set for the \em key in the \em msgid message.
   !> In some cases the \em value can be an array rather than a scalar.
   !> As examples of array keys we have "values","pl", "pv" respectively the data values,
   !> the list of number of points for each latitude in a reduced grid and the list of
   !> vertical levels. In these cases the \em value array must be allocated by the caller
   !> and their required dimension can be obtained with \ref codes_get_size. \n
-  !> The gribid references to a grib message loaded in memory.
+  !> The msgid references to a message loaded in memory.
   !>
   !> In case of error, if the status parameter (optional) is not given, the program will
   !> exit with an error message.\n Otherwise the error message can be
@@ -141,10 +139,10 @@
   !>
   !> @see codes_new_from_file, codes_release, codes_get
   !>
-  !> @param[in] gribid      id of the grib loaded in memory
-  !> @param[in] key          key name
-  !> @param[out] value       value can be a scalar or array of integer(4),real(4),real(8)
-  !> @param[out] status      CODES_SUCCESS if OK, integer value on error
+  !> @param[in] msgid       id of the message loaded in memory
+  !> @param[in] key         key name
+  !> @param[out] value      value can be a scalar or array of integer(4),real(4),real(8)
+  !> @param[out] status     CODES_SUCCESS if OK, integer value on error
   interface codes_set
     module procedure codes_set_int, &
                      codes_set_long, &
diff --git a/fortran/eccodes_f90_long_size_t.f90 b/fortran/eccodes_f90_long_size_t.f90
index fcb2e20..087dd5a 100644
--- a/fortran/eccodes_f90_long_size_t.f90
+++ b/fortran/eccodes_f90_long_size_t.f90
@@ -12,7 +12,6 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !>
   !> @param ifile       id of the opened file to be used in all the file functions.
   !> @param buffer      buffer to be read
   !> @param nbytes      number of bytes to be read
@@ -30,7 +29,6 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !>
   !> @param ifile       id of the opened file to be used in all the file functions.
   !> @param buffer      buffer to be read
   !> @param nbytes      number of bytes to be read
@@ -52,7 +50,6 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !>
   !> @param ifile       id of the opened file to be used in all the file functions.
   !> @param buffer      buffer to be written
   !> @param nbytes      number of bytes to be written
@@ -74,7 +71,7 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
   !>
-  !> @param gribid      id of the grib loaded in memory
+  !> @param msgid       id of the message loaded in memory
   !> @param nbytes      size in bytes of the message
   !> @param status      CODES_SUCCESS if OK, integer value on error
   interface codes_get_message_size
diff --git a/fortran/eccodes_f90_tail.f90 b/fortran/eccodes_f90_tail.f90
index a196e19..84b0518 100644
--- a/fortran/eccodes_f90_tail.f90
+++ b/fortran/eccodes_f90_tail.f90
@@ -71,7 +71,6 @@ end subroutine codes_index_add_file
 
   !> Get the number of distinct values of the key in argument contained in the index. The key must belong to the index.
   !>
-  !>
   !> In case of error, if the status parameter (optional) is not given, the program will
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
@@ -368,7 +367,6 @@ end subroutine codes_index_release
 
   !> Open a file according to a mode.
   !>
-  !>
   !> In case of error, if the status parameter (optional) is not given, the program will
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref codes_get_error_string.
@@ -377,7 +375,7 @@ end subroutine codes_index_release
   !>
   !> @param ifile       id of the opened file to be used in all the file functions.
   !> @param filename    name of the file to be open
-  !> @param mode        open mode can be 'r' (read only) or 'w' (write only)
+  !> @param mode        open mode can be 'r' (read) or 'w' (write)
   !> @param status      CODES_SUCCESS if OK, integer value on error
 subroutine codes_open_file ( ifile, filename, mode, status )
     integer(kind=kindOfInt),intent(out)               :: ifile
@@ -963,7 +961,7 @@ end subroutine codes_new_from_file
   !>
   !> @param ifile     id of the file opened with @ref codes_open_file
   !> @param msgid     id of the message loaded in memory
-  !> @param status    CODES_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code
+  !> @param status    CODES_SUCCESS if OK, CODES_END_OF_FILE at the end of file, or error code
 subroutine codes_any_new_from_file ( ifile, msgid , status)
     integer(kind=kindOfInt),intent(in)              :: ifile
     integer(kind=kindOfInt),intent(out)             :: msgid
@@ -981,7 +979,7 @@ end subroutine codes_any_new_from_file
   !>
   !> @param ifile     id of the file opened with @ref codes_open_file
   !> @param gribid    id of the GRIB loaded in memory
-  !> @param status    CODES_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code
+  !> @param status    CODES_SUCCESS if OK, CODES_END_OF_FILE at the end of file, or error code
 subroutine codes_grib_new_from_file ( ifile, gribid , status)
     integer(kind=kindOfInt),intent(in)              :: ifile
     integer(kind=kindOfInt),intent(out)             :: gribid
@@ -999,7 +997,7 @@ end subroutine codes_grib_new_from_file
   !>
   !> @param ifile     id of the file opened with @ref codes_open_file
   !> @param bufrid    id of the BUFR loaded in memory
-  !> @param status    CODES_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code
+  !> @param status    CODES_SUCCESS if OK, CODES_END_OF_FILE at the end of file, or error code
 subroutine codes_bufr_new_from_file ( ifile, bufrid , status)
     integer(kind=kindOfInt),intent(in)              :: ifile
     integer(kind=kindOfInt),intent(out)             :: bufrid
@@ -1327,6 +1325,121 @@ subroutine codes_keys_iterator_rewind ( iterid, status )
     call grib_keys_iterator_rewind ( iterid, status )
 end subroutine codes_keys_iterator_rewind
 
+
+! BUFR keys iterator
+! -----------------------
+  !> Create a new iterator on the keys of a BUFR message.
+  !>
+  !> The keys iterator can be navigated to give all the key names which
+  !> can then be used to get or set the key values with \ref codes_get or
+  !> \ref codes_set.
+  !>
+  !> In case of error, if the status parameter (optional) is not given, the program will
+  !> exit with an error message.\n Otherwise the error message can be
+  !> gathered with @ref codes_get_error_string.
+  !>
+  !> @param msgid       id of the BUFR message loaded in memory
+  !> @param iterid      keys iterator id to be used in the keys iterator functions
+  !> @param status      CODES_SUCCESS if OK, integer value on error
+subroutine codes_bufr_keys_iterator_new ( msgid, iterid, status )
+    integer(kind=kindOfInt),          intent(in)     :: msgid
+    integer(kind=kindOfInt),          intent(inout)  :: iterid
+    integer(kind=kindOfInt),optional, intent(out)    :: status
+    integer(kind=kindOfInt)                          :: iret
+
+    iret = codes_f_bufr_keys_iterator_new(msgid, iterid)
+    if (present(status)) then
+        status = iret
+    else
+        call grib_check(iret,'bufr_keys_iterator_new','')
+    endif
+end subroutine codes_bufr_keys_iterator_new
+
+
+  !> Advance to the next BUFR keys iterator value.
+  !>
+  !> @param iterid   keys iterator id created with @ref codes_bufr_keys_iterator_new
+  !> @param status   CODES_SUCCESS if next iterator exists, integer value if no more elements to iterate on
+subroutine codes_bufr_keys_iterator_next (iterid , status)
+    integer(kind=kindOfInt),          intent(in)  :: iterid
+    integer(kind=kindOfInt),optional, intent(out) :: status
+    integer(kind=kindOfInt)                       :: iret
+
+    status = GRIB_SUCCESS
+    iret = codes_f_bufr_keys_iterator_next( iterid )
+    if (iret == 0) then
+        ! no more elements
+        status = GRIB_END
+    endif
+end subroutine codes_bufr_keys_iterator_next
+
+
+  !> Get the name of a key from a BUFR keys iterator.
+  !>
+  !> If the status parameter (optional) is not given the program will exit with an error message\n
+  !> otherwise the error message can be gathered with @ref codes_get_error_string.\n
+  !>
+  !> @param iterid      keys iterator id created with @ref codes_bufr_keys_iterator_new
+  !> @param name        key name to be retrieved
+  !> @param status      CODES_SUCCESS if OK, integer value on error
+subroutine codes_bufr_keys_iterator_get_name( iterid, name, status )
+    integer(kind=kindOfInt),          intent(in)    :: iterid
+    character(LEN=*), intent(out)                   :: name
+    integer(kind=kindOfInt),optional, intent(out)   :: status
+    integer(kind=kindOfInt)                         :: iret
+
+    iret = codes_f_bufr_keys_iterator_get_name( iterid, name )
+    if (present(status)) then
+        status = iret
+    else
+        call grib_check(iret,'bufr_keys_iterator_get_name',name)
+    endif
+end subroutine codes_bufr_keys_iterator_get_name
+
+  !> Rewind a BUFR keys iterator.
+  !>
+  !> In case of error, if the status parameter (optional) is not given, the program will
+  !> exit with an error message.\n Otherwise the error message can be
+  !> gathered with @ref grib_get_error_string.
+  !>
+  !> @param iterid      keys iterator id created with @ref codes_bufr_keys_iterator_new
+  !> @param status      CODES_SUCCESS if OK, integer value on error
+  subroutine codes_bufr_keys_iterator_rewind( iterid, status )
+      integer(kind=kindOfInt),          intent(in)    :: iterid
+      integer(kind=kindOfInt),optional, intent(out)   :: status
+      integer(kind=kindOfInt)                         :: iret
+
+      iret = codes_f_bufr_keys_iterator_rewind( iterid )
+      if (present(status)) then
+         status = iret
+      else
+         call grib_check(iret,'bufr_keys_iterator_rewind','')
+      endif
+  end subroutine codes_bufr_keys_iterator_rewind
+
+  !> Delete a BUFR keys iterator and free memory.
+  !>
+  !> In case of error, if the status parameter (optional) is not given, the program will
+  !> exit with an error message.\n Otherwise the error message can be
+  !> gathered with @ref grib_get_error_string.
+  !>
+  !> @param iterid      keys iterator id created with @ref codes_bufr_keys_iterator_new
+  !> @param status      GRIB_SUCCESS if OK, integer value on error
+  subroutine codes_bufr_keys_iterator_delete (iterid , status)
+      integer(kind=kindOfInt),          intent(in)  :: iterid
+      integer(kind=kindOfInt),optional, intent(out) :: status
+      integer(kind=kindOfInt)                       :: iret
+
+      iret = codes_f_bufr_keys_iterator_delete(iterid)
+      if (present(status)) then
+         status = iret
+      else
+         call grib_check(iret,'bufr_keys_iterator_delete','')
+      endif
+  end subroutine codes_bufr_keys_iterator_delete
+
+
+
   !> Dump the content of a message.
   !>
   !> In case of error, if the status parameter (optional) is not given, the program will
@@ -2299,7 +2412,7 @@ end subroutine codes_grib_multi_write
   !>
   !> @param ingribid      id of the input single grib 
   !> @param startsection  starting from startsection (included) all the sections are copied from the input single grib to the output multi grib
-  !> @param multigribid    id of the output multi filed grib
+  !> @param multigribid    id of the output multi field grib
   !> @param status      CODES_SUCCESS if OK, integer value on error
 subroutine codes_grib_multi_append ( ingribid, startsection, multigribid  , status)
     integer(kind=kindOfInt),          intent(in)  :: ingribid
diff --git a/fortran/eccodes_visibility.h b/fortran/eccodes_visibility.h
index dbd69ae..d057f43 100644
--- a/fortran/eccodes_visibility.h
+++ b/fortran/eccodes_visibility.h
@@ -10,6 +10,13 @@ public :: codes_skip_computed, &
           codes_skip_read_only
 public :: codes_keys_iterator_get_name, &
           codes_keys_iterator_rewind
+          
+public :: codes_bufr_keys_iterator_new, &
+          codes_bufr_keys_iterator_next, &
+          codes_bufr_keys_iterator_get_name, &
+          codes_bufr_keys_iterator_rewind, &
+          codes_bufr_keys_iterator_delete
+
 public :: codes_new_from_message, &
           codes_grib_new_from_samples, codes_new_from_file, &
           codes_bufr_new_from_samples, &
diff --git a/fortran/grib_api_externals.h b/fortran/grib_api_externals.h
index ffecc4a..24db3a1 100644
--- a/fortran/grib_api_externals.h
+++ b/fortran/grib_api_externals.h
@@ -4,6 +4,13 @@ integer, external :: grib_f_multi_support_on, grib_f_multi_support_off
 integer, external :: grib_f_keys_iterator_new, &
                      grib_f_keys_iterator_next, &
                      grib_f_keys_iterator_delete
+
+integer, external :: codes_f_bufr_keys_iterator_new, &
+                     codes_f_bufr_keys_iterator_next, &
+                     codes_f_bufr_keys_iterator_get_name, &
+                     codes_f_bufr_keys_iterator_rewind, &
+                     codes_f_bufr_keys_iterator_delete
+
 integer, external :: grib_f_skip_computed, &
                      grib_f_skip_coded, &
                      grib_f_skip_edition_specific, &
diff --git a/fortran/grib_f90_int.f90 b/fortran/grib_f90_int.f90
index a88fdc8..863fa11 100644
--- a/fortran/grib_f90_int.f90
+++ b/fortran/grib_f90_int.f90
@@ -61,10 +61,10 @@
                      grib_index_select_string, &
                      grib_index_select_real8
   end interface grib_index_select
-          
-  !> Get the value for a key from a grib message.
+
+  !> Get the value for a key from a message.
   !>
-  !> Given a \em gribid and \em key as input a \em value for the \em key is returned.
+  !> Given a \em msgid and \em key as input a \em value for the \em key is returned.
   !> In some cases the \em value can be an array rather than a scalar.
   !> As examples of array keys we have "values","pl", "pv" respectively the data values,
   !> the list of number of points for each latitude in a reduced grid and the list of
@@ -72,11 +72,11 @@
   !> and their required dimension can be obtained with \ref grib_get_size. \n
   !> The \em value can be integer(4), real(4), real(8), character.
   !> Although each key has its own native type, a key of type integer
-  !> can be retrieved (with \ref grib_get) as real(4), real(8) or character.
+  !> can be retrieved (with \ref codes_get) as real(4), real(8) or character.
   !> Analogous conversions are always provided when possible.
   !> Illegal conversions are real to integer and character to any other type.
   !>
-  !> The \em gribid references to a grib message loaded in memory.
+  !> The \em msgid references to a message loaded in memory.
   !>
   !> In case of error, if the status parameter (optional) is not given, the program will
   !> exit with an error message.\n Otherwise the error message can be
@@ -87,10 +87,10 @@
   !> @see grib_new_from_file, grib_release, grib_set
   !>
   !>
-  !> @param[in] gribid      id of the grib loaded in memory
-  !> @param[in] key     key name
-  !> @param[out] value       value can be a scalar or array of integer(4),real(4),real(8),character
-  !> @param[out] status      GRIB_SUCCESS if OK, integer value on error
+  !> @param[in] msgid      id of the loaded in memory
+  !> @param[in] key        key name
+  !> @param[out] value     value can be a scalar or array of integer(4),real(4),real(8),character
+  !> @param[out] status    GRIB_SUCCESS if OK, integer value on error
   interface grib_get
     module procedure grib_get_int, &
                      grib_get_real4, &
@@ -101,7 +101,7 @@
                      grib_get_real4_array, &
                      grib_get_real8_array
   end interface grib_get
- 
+
 
   !> Get the size of an array key.
   !>
@@ -111,17 +111,17 @@
   !> exit with an error message.\n Otherwise the error message can be
   !> gathered with @ref grib_get_error_string.
   !>
-  !> @param gribid      id of the grib loaded in memory
-  !> @param key         name of the key
-  !> @param size        size of the array key
-  !> @param status      GRIB_SUCCESS if OK, integer value on error
+  !> @param msgid      id of the message loaded in memory
+  !> @param key        name of the key
+  !> @param size       size of the array key
+  !> @param status     GRIB_SUCCESS if OK, integer value on error
   interface grib_get_size
       module procedure  grib_get_size_int 
   end interface grib_get_size
 
-  !> Set the value for a key in a grib message.
+  !> Set the value for a key in a message.
   !>
-  !> The given \em value is set for the \em key in the \em gribid message.
+  !> The given \em value is set for the \em key in the \em msgid message.
   !> In some cases the \em value can be an array rather than a scalar.
   !> As examples of array keys we have "values","pl", "pv" respectively the data values,
   !> the list of number of points for each latitude in a reduced grid and the list of
@@ -137,10 +137,10 @@
   !>
   !> @see grib_new_from_file, grib_release, grib_get
   !>
-  !> @param[in] gribid      id of the grib loaded in memory
-  !> @param[in] key          key name
-  !> @param[out] value       value can be a scalar or array of integer(4),real(4),real(8)
-  !> @param[out] status      GRIB_SUCCESS if OK, integer value on error
+  !> @param[in] msgid       id of the message loaded in memory
+  !> @param[in] key         key name
+  !> @param[out] value      value can be a scalar or array of integer(4),real(4),real(8)
+  !> @param[out] status     GRIB_SUCCESS if OK, integer value on error
   interface grib_set
     module procedure grib_set_int, &
                      grib_set_real4, &
diff --git a/fortran/grib_f90_tail.f90 b/fortran/grib_f90_tail.f90
index a99cc92..05305e7 100644
--- a/fortran/grib_f90_tail.f90
+++ b/fortran/grib_f90_tail.f90
@@ -2826,7 +2826,7 @@
   !>
   !> @param ingribid      id of the input single grib 
   !> @param startsection  starting from startsection (included) all the sections are copied from the input single grib to the output multi grib
-  !> @param multigribid    id of the output multi filed grib
+  !> @param multigribid    id of the output multi field grib
   !> @param status      GRIB_SUCCESS if OK, integer value on error
   subroutine grib_multi_append ( ingribid, startsection, multigribid  , status)
     integer(kind=kindOfInt),          intent(in)  :: ingribid
diff --git a/fortran/grib_fortran.c b/fortran/grib_fortran.c
index 9c4e077..2c4ee7f 100644
--- a/fortran/grib_fortran.c
+++ b/fortran/grib_fortran.c
@@ -122,19 +122,26 @@ struct l_grib_iterator {
 };
 
 typedef struct l_grib_keys_iterator l_grib_keys_iterator;
-
 struct l_grib_keys_iterator {
     int id;
     grib_keys_iterator* i;
     l_grib_keys_iterator* next;
 };
 
+typedef struct l_bufr_keys_iterator l_bufr_keys_iterator;
+struct l_bufr_keys_iterator {
+    int id;
+    bufr_keys_iterator* i;
+    l_bufr_keys_iterator* next;
+};
+
 static l_grib_handle* handle_set = NULL;
 static l_grib_index* index_set = NULL;
 static l_grib_multi_handle* multi_handle_set = NULL;
 static l_grib_file*   file_set   = NULL;
 static l_grib_iterator* iterator_set = NULL;
 static l_grib_keys_iterator* keys_iterator_set = NULL;
+static l_bufr_keys_iterator* bufr_keys_iterator_set = NULL;
 
 static char* cast_char(char* buf, char* fortstr,int len)
 {
@@ -529,6 +536,57 @@ static int push_keys_iterator(grib_keys_iterator *i)
     return ret;
 }
 
+// BUFR Keys iterator
+static int _push_bufr_keys_iterator(bufr_keys_iterator *i)
+{
+    l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
+    l_bufr_keys_iterator* previous = bufr_keys_iterator_set;
+    l_bufr_keys_iterator* the_new  = NULL;
+    int myindex = 1;
+
+    if(!bufr_keys_iterator_set){
+        bufr_keys_iterator_set = (l_bufr_keys_iterator*)malloc(sizeof(l_bufr_keys_iterator));
+        Assert(bufr_keys_iterator_set);
+        bufr_keys_iterator_set->id   = myindex;
+        bufr_keys_iterator_set->i    = i;
+        bufr_keys_iterator_set->next = NULL;
+        return myindex;
+    }
+
+    while(current){
+        if(current->id < 0){
+            current->id = -(current->id);
+            current->i  = i;
+            return current->id;
+        }
+        else{
+            myindex++;
+            previous = current;
+            current = current->next;
+        }
+    }
+    if(!previous) return -1;
+
+    the_new = (l_bufr_keys_iterator*)malloc(sizeof(l_bufr_keys_iterator));
+    Assert(the_new);
+    the_new->id    = myindex;
+    the_new->i     = i;
+    the_new->next  = current;
+    previous->next = the_new;
+
+    return myindex;
+}
+static int push_bufr_keys_iterator(bufr_keys_iterator *i)
+{
+    int ret=0;
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex);
+    ret=_push_bufr_keys_iterator(i);
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex);
+    return ret;
+}
+
+
 static grib_handle* _get_handle(int handle_id)
 {
     l_grib_handle* current= handle_set;
@@ -636,7 +694,6 @@ static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id)
     }
     return NULL;
 }
-
 static grib_keys_iterator* get_keys_iterator(int keys_iterator_id)
 {
     grib_keys_iterator* i=NULL;
@@ -647,6 +704,28 @@ static grib_keys_iterator* get_keys_iterator(int keys_iterator_id)
     return i;
 }
 
+// BUFR
+static bufr_keys_iterator* _get_bufr_keys_iterator(int keys_iterator_id)
+{
+    l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
+
+    while(current){
+        if(current->id == keys_iterator_id) return current->i;
+        current = current->next;
+    }
+    return NULL;
+}
+static bufr_keys_iterator* get_bufr_keys_iterator(int keys_iterator_id)
+{
+    bufr_keys_iterator* i=NULL;
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex);
+    i=_get_bufr_keys_iterator(keys_iterator_id);
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex);
+    return i;
+}
+
+
 static int clear_file(int file_id)
 {
     l_grib_file* current = file_set;
@@ -763,7 +842,6 @@ static int clear_iterator(int iterator_id)
 
 static int _clear_keys_iterator(int keys_iterator_id)
 {
-
     l_grib_keys_iterator* current  = keys_iterator_set;
 
     while(current){
@@ -775,7 +853,6 @@ static int _clear_keys_iterator(int keys_iterator_id)
     }
     return GRIB_INVALID_KEYS_ITERATOR;
 }
-
 static int clear_keys_iterator(int keys_iterator_id)
 {
     int ret=0;
@@ -786,6 +863,30 @@ static int clear_keys_iterator(int keys_iterator_id)
     return ret;
 }
 
+//BUFR
+static int _clear_bufr_keys_iterator(int keys_iterator_id)
+{
+    l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
+
+    while(current){
+        if(current->id == keys_iterator_id){
+            current->id = -(current->id);
+            return codes_bufr_keys_iterator_delete(current->i);
+        }
+        current = current->next;
+    }
+    return GRIB_INVALID_KEYS_ITERATOR;
+}
+static int clear_bufr_keys_iterator(int keys_iterator_id)
+{
+    int ret=0;
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex);
+    ret=_clear_bufr_keys_iterator(keys_iterator_id);
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex);
+    return ret;
+}
+
 /*****************************************************************************/
 int grib_f_read_any_headers_only_from_file_(int* fid, char* buffer, size_t* nbytes) {
     grib_context* c;
@@ -1093,7 +1194,6 @@ int grib_f_keys_iterator_next_(int* iterid) {
 
     return grib_keys_iterator_next(iter);
 }
-
 int grib_f_keys_iterator_next__(int* iterid) {
     return grib_f_keys_iterator_next_(iterid);
 }
@@ -1101,6 +1201,7 @@ int grib_f_keys_iterator_next(int* iterid) {
     return grib_f_keys_iterator_next_(iterid);
 }
 
+/*****************************************************************************/
 int grib_f_keys_iterator_delete_(int* iterid) {
     return clear_keys_iterator(*iterid);
 }
@@ -1253,6 +1354,105 @@ int grib_f_keys_iterator_rewind(int* kiter) {
     return grib_f_keys_iterator_rewind_(kiter);
 }
 
+/*BUFR keys iterator*/
+/*****************************************************************************/
+static int _codes_f_bufr_keys_iterator_new_(int* gid,int* iterid) {
+    int err=0;
+    grib_handle* h;
+    bufr_keys_iterator* iter;
+
+    h=get_handle(*gid);
+    if (!h) {
+        *iterid=-1;
+        return GRIB_NULL_HANDLE;
+    }
+    Assert(h->product_kind==PRODUCT_BUFR);
+    iter=codes_bufr_keys_iterator_new(h,0);
+    if (iter)
+        *iterid=push_bufr_keys_iterator(iter);
+    else
+        *iterid=-1;
+    return err;
+}
+int codes_f_bufr_keys_iterator_new_(int* gid,int* iterid) {
+    int ret=0;
+    GRIB_MUTEX_INIT_ONCE(&once,&init)
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex)
+    ret=_codes_f_bufr_keys_iterator_new_(gid,iterid);
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex)
+    return ret;
+}
+int codes_f_bufr_keys_iterator_new__(int* gid,int* iterid) {
+    return codes_f_bufr_keys_iterator_new_(gid,iterid);
+}
+int codes_f_bufr_keys_iterator_new(int* gid,int* iterid) {
+    return codes_f_bufr_keys_iterator_new_(gid,iterid);
+}
+/*****************************************************************************/
+int codes_f_bufr_keys_iterator_next_(int* iterid) {
+    bufr_keys_iterator* iter=get_bufr_keys_iterator(*iterid);
+    if (!iter) return GRIB_INVALID_KEYS_ITERATOR;
+
+    return codes_bufr_keys_iterator_next(iter);
+}
+int codes_f_bufr_keys_iterator_next__(int* iterid) {
+    return codes_f_bufr_keys_iterator_next_(iterid);
+}
+int codes_f_bufr_keys_iterator_next(int* iterid) {
+    return codes_f_bufr_keys_iterator_next_(iterid);
+}
+/*****************************************************************************/
+int codes_f_bufr_keys_iterator_get_name_(int* iterid,char* name,int len) {
+    size_t lsize=len;
+    char buf[1024]={0,};
+
+    bufr_keys_iterator* kiter=get_bufr_keys_iterator(*iterid);
+
+    if (!kiter) return GRIB_INVALID_KEYS_ITERATOR;
+
+    fort_char_clean(name,len);
+
+    sprintf(buf,"%s",codes_bufr_keys_iterator_get_name(kiter));
+    lsize=strlen(buf);
+    if (len < lsize) return GRIB_ARRAY_TOO_SMALL;
+
+    memcpy(name,buf,lsize);
+
+    czstr_to_fortran(name,len);
+
+    return 0;
+}
+int codes_f_bufr_keys_iterator_get_name__(int* kiter,char* name,int len) {
+    return codes_f_bufr_keys_iterator_get_name_(kiter,name,len);
+}
+int codes_f_bufr_keys_iterator_get_name(int* kiter,char* name,int len) {
+    return codes_f_bufr_keys_iterator_get_name_(kiter,name,len);
+}
+/*****************************************************************************/
+int codes_f_bufr_keys_iterator_rewind_(int* kiter) {
+    bufr_keys_iterator* i=get_bufr_keys_iterator(*kiter);
+
+    if (!i) return GRIB_INVALID_KEYS_ITERATOR;
+    return codes_bufr_keys_iterator_rewind(i);
+}
+int codes_f_bufr_keys_iterator_rewind__(int* kiter) {
+    return codes_f_bufr_keys_iterator_rewind_(kiter);
+}
+int codes_f_bufr_keys_iterator_rewind(int* kiter) {
+    return codes_f_bufr_keys_iterator_rewind_(kiter);
+}
+/*****************************************************************************/
+int codes_f_bufr_keys_iterator_delete_(int* iterid) {
+    return clear_bufr_keys_iterator(*iterid);
+}
+int codes_f_bufr_keys_iterator_delete__(int* iterid) {
+    return codes_f_bufr_keys_iterator_delete_(iterid);
+}
+int codes_f_bufr_keys_iterator_delete(int* iterid) {
+    return codes_f_bufr_keys_iterator_delete_(iterid);
+}
+
+
 /*****************************************************************************/
 int grib_f_new_from_message_(int* gid, void* buffer , size_t* bufsize){
     grib_handle *h = NULL;
@@ -1284,7 +1484,6 @@ int grib_f_new_from_message_copy_(int* gid, void* buffer , size_t* bufsize){
     *gid = -1;
     return  GRIB_INTERNAL_ERROR;
 }
-
 int grib_f_new_from_message_copy__(int* gid, void* buffer , size_t* bufsize){
     return grib_f_new_from_message_copy_(gid,  buffer ,  bufsize);
 }
@@ -1308,7 +1507,6 @@ int grib_f_new_from_samples_(int* gid, char* name , int lname){
     *gid = -1;
     return  GRIB_FILE_NOT_FOUND;
 }
-
 int grib_f_new_from_samples__(int* gid, char* name , int lname){
     return  grib_f_new_from_samples_( gid,  name ,  lname);
 }
@@ -1317,7 +1515,7 @@ int grib_f_new_from_samples(int* gid, char* name , int lname){
 }
 
 /*****************************************************************************/
-int codes_bufr_f_new_from_samples_(int* gid, char* name , int lname){
+int codes_bufr_f_new_from_samples_(int* gid, char* name, int lname){
     char fname[1024];
     grib_handle *h = NULL;
 
@@ -1332,12 +1530,11 @@ int codes_bufr_f_new_from_samples_(int* gid, char* name , int lname){
     *gid = -1;
     return  GRIB_FILE_NOT_FOUND;
 }
-
-int codes_bufr_f_new_from_samples__(int* gid, char* name , int lname){
-    return  codes_bufr_f_new_from_samples_( gid,  name ,  lname);
+int codes_bufr_f_new_from_samples__(int* gid, char* name, int lname){
+    return codes_bufr_f_new_from_samples_( gid, name, lname);
 }
-int codes_bufr_f_new_from_samples(int* gid, char* name , int lname){
-    return  codes_bufr_f_new_from_samples_( gid,  name ,  lname);
+int codes_bufr_f_new_from_samples(int* gid, char* name, int lname){
+    return codes_bufr_f_new_from_samples_( gid, name,  lname);
 }
 
 /*****************************************************************************/
diff --git a/fortran/grib_fortran_prototypes.h b/fortran/grib_fortran_prototypes.h
index b399697..998da62 100644
--- a/fortran/grib_fortran_prototypes.h
+++ b/fortran/grib_fortran_prototypes.h
@@ -49,6 +49,7 @@ int grib_f_iterator_next(int *iterid, double *lat, double *lon, double *value);
 int grib_f_iterator_delete_(int *iterid);
 int grib_f_iterator_delete__(int *iterid);
 int grib_f_iterator_delete(int *iterid);
+
 int grib_f_keys_iterator_new_(int *gid, int *iterid, char *name_space, int len);
 int grib_f_keys_iterator_new__(int *gid, int *iterid, char *name_space, int len);
 int grib_f_keys_iterator_new(int *gid, int *iterid, char *name_space, int len);
@@ -58,6 +59,24 @@ int grib_f_keys_iterator_next(int *iterid);
 int grib_f_keys_iterator_delete_(int *iterid);
 int grib_f_keys_iterator_delete__(int *iterid);
 int grib_f_keys_iterator_delete(int *iterid);
+
+/*BUFR keys iterator*/
+int codes_f_bufr_keys_iterator_new_(int *gid, int *iterid);
+int codes_f_bufr_keys_iterator_new__(int *gid, int *iterid);
+int codes_f_bufr_keys_iterator_new(int *gid, int *iterid);
+int codes_f_bufr_keys_iterator_next_(int *iterid);
+int codes_f_bufr_keys_iterator_next__(int *iterid);
+int codes_f_bufr_keys_iterator_next(int *iterid);
+int codes_f_bufr_keys_iterator_get_name_(int *iterid, char *name, int len);
+int codes_f_bufr_keys_iterator_get_name__(int *kiter, char *name, int len);
+int codes_f_bufr_keys_iterator_get_name(int *kiter, char *name, int len);
+int codes_f_bufr_keys_iterator_rewind_(int *kiter);
+int codes_f_bufr_keys_iterator_rewind__(int *kiter);
+int codes_f_bufr_keys_iterator_rewind(int *kiter);
+int codes_f_bufr_keys_iterator_delete_(int *iterid);
+int codes_f_bufr_keys_iterator_delete__(int *iterid);
+int codes_f_bufr_keys_iterator_delete(int *iterid);
+
 int grib_f_gribex_mode_on_(void);
 int grib_f_gribex_mode_on__(void);
 int grib_f_gribex_mode_on(void);
diff --git a/html/classeccodes.html b/html/classeccodes.html
index 59c029e..d3fd087 100644
--- a/html/classeccodes.html
+++ b/html/classeccodes.html
@@ -530,7 +530,7 @@ Public Member Functions</h2></td></tr>
   <table class="params">
     <tr><td class="paramname">ifile</td><td>id of the file opened with <a class="el" href="classeccodes.html#a28594e26f2f4b92b9c60e943dd8e1be3">codes_open_file</a> </td></tr>
     <tr><td class="paramname">msgid</td><td>id of the message loaded in memory </td></tr>
-    <tr><td class="paramname">status</td><td>CODES_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code </td></tr>
+    <tr><td class="paramname">status</td><td>CODES_SUCCESS if OK, CODES_END_OF_FILE at the end of file, or error code </td></tr>
   </table>
   </dd>
 </dl>
@@ -620,7 +620,7 @@ Public Member Functions</h2></td></tr>
   <table class="params">
     <tr><td class="paramname">ifile</td><td>id of the file opened with <a class="el" href="classeccodes.html#a28594e26f2f4b92b9c60e943dd8e1be3">codes_open_file</a> </td></tr>
     <tr><td class="paramname">bufrid</td><td>id of the BUFR loaded in memory </td></tr>
-    <tr><td class="paramname">status</td><td>CODES_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code </td></tr>
+    <tr><td class="paramname">status</td><td>CODES_SUCCESS if OK, CODES_END_OF_FILE at the end of file, or error code </td></tr>
   </table>
   </dd>
 </dl>
@@ -846,7 +846,7 @@ Public Member Functions</h2></td></tr>
     <tr><td class="paramname">msgid_src</td><td>source message </td></tr>
     <tr><td class="paramname">msgid_dest</td><td>destination message </td></tr>
     <tr><td class="paramname">key</td><td>key whose value is to be copied </td></tr>
-    <tr><td class="paramname">status</td><td>GRIB_SUCCESS if OK, integer value on error </td></tr>
+    <tr><td class="paramname">status</td><td>CODES_SUCCESS if OK, integer value on error </td></tr>
   </table>
   </dd>
 </dl>
@@ -2649,7 +2649,7 @@ Public Member Functions</h2></td></tr>
   <table class="params">
     <tr><td class="paramname">ifile</td><td>id of the file opened with <a class="el" href="classeccodes.html#a28594e26f2f4b92b9c60e943dd8e1be3">codes_open_file</a> </td></tr>
     <tr><td class="paramname">gribid</td><td>id of the GRIB loaded in memory </td></tr>
-    <tr><td class="paramname">status</td><td>CODES_SUCCESS if OK, GRIB_END_OF_FILE at the end of file, or error code </td></tr>
+    <tr><td class="paramname">status</td><td>CODES_SUCCESS if OK, CODES_END_OF_FILE at the end of file, or error code </td></tr>
   </table>
   </dd>
 </dl>
diff --git a/ifs_samples/grib1/CMakeLists.txt b/ifs_samples/grib1/CMakeLists.txt
index 9a8b4e9..42f9ea2 100644
--- a/ifs_samples/grib1/CMakeLists.txt
+++ b/ifs_samples/grib1/CMakeLists.txt
@@ -1,5 +1,5 @@
 set( _basedir grib1 )
-set( _destination_install ${CMAKE_INSTALL_PREFIX}/${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
+set( _destination_install ${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
 set( _destination_build   ${CMAKE_BINARY_DIR}/${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
 
 list( APPEND ifs_samples_${_basedir}
diff --git a/ifs_samples/grib1_mlgrib2/CMakeLists.txt b/ifs_samples/grib1_mlgrib2/CMakeLists.txt
index c28663c..5b597ce 100644
--- a/ifs_samples/grib1_mlgrib2/CMakeLists.txt
+++ b/ifs_samples/grib1_mlgrib2/CMakeLists.txt
@@ -1,5 +1,5 @@
 set( _basedir grib1_mlgrib2 )
-set( _destination_install ${CMAKE_INSTALL_PREFIX}/${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
+set( _destination_install ${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
 set( _destination_build   ${CMAKE_BINARY_DIR}/${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
 
 list( APPEND ifs_samples_${_basedir}
diff --git a/ifs_samples/grib1_mlgrib2_ieee64/CMakeLists.txt b/ifs_samples/grib1_mlgrib2_ieee64/CMakeLists.txt
index c041dc3..efffb74 100644
--- a/ifs_samples/grib1_mlgrib2_ieee64/CMakeLists.txt
+++ b/ifs_samples/grib1_mlgrib2_ieee64/CMakeLists.txt
@@ -1,5 +1,5 @@
 set( _basedir grib1_mlgrib2_ieee64 )
-set( _destination_install ${CMAKE_INSTALL_PREFIX}/${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
+set( _destination_install ${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
 set( _destination_build   ${CMAKE_BINARY_DIR}/${ECCODES_IFS_SAMPLES_SUFF}/${_basedir} )
 
 list( APPEND ifs_samples_${_basedir}
diff --git a/memfs.py b/memfs.py
index 7ac62b8..44f51e9 100755
--- a/memfs.py
+++ b/memfs.py
@@ -3,16 +3,17 @@ from __future__ import print_function
 import os
 import re
 import sys
+import binascii
 
 assert len(sys.argv) > 2
 
 dirs = [os.path.realpath(x) for x in sys.argv[1:-1]]
 print(dirs)
-# exit(1)
 
 FILES = {}
 NAMES = []
 
+# The last argument is the generated C file
 g = open(sys.argv[-1], "w")
 
 for directory in dirs:
@@ -37,10 +38,21 @@ for directory in dirs:
 
             print('static const unsigned char %s[] = {' % (name,), file=g)
 
-            with open(full) as f:
+            with open(full, 'rb') as f:
                 i = 0
-                for n in re.findall('..', f.read().encode("hex")):
-                    print("0x%s," % (n,), end="", file=g)
+                #Python 2
+                #fcont = f.read().encode("hex")
+
+                #Python 2 and 3
+                fcont = binascii.hexlify(f.read())
+
+                # Read two characters at a time and convert to C hex
+                # e.g. 23 -> 0x23
+                for n in range(0, len(fcont), 2):
+                    twoChars = fcont[n:n+2]
+                    if sys.version_info.major > 2:
+                        twoChars = str(twoChars,'ascii')
+                    print("0x%s," % (twoChars,), end="", file=g)
                     i += 1
                     if (i % 20) == 0:
                         print("", file=g)
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index a895480..2095ae2 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -55,8 +55,10 @@ if( HAVE_PYTHON )
     configure_file( swig_wrap_numpy.py gribapi/gribapi_swig.py COPYONLY )
 
     # Build the extension module for use in install tree with RPATH pointing to install tree
-    install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} setup.py build_ext --rpath ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
+    install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} setup.py build_ext --rpath ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}
+                                  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
     # Call distutils for installation
-    install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} setup.py install --root \$ENV{DESTDIR}/ --prefix ${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
+    install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} setup.py install --root \$ENV{DESTDIR}/ --prefix ${CMAKE_INSTALL_PREFIX}
+                                  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
 
 endif()
diff --git a/python/eccodes/eccodes.py b/python/eccodes/eccodes.py
index aa83611..1e008ff 100644
--- a/python/eccodes/eccodes.py
+++ b/python/eccodes/eccodes.py
@@ -42,6 +42,11 @@ from gribapi import grib_keys_iterator_next as codes_keys_iterator_next
 from gribapi import grib_keys_iterator_delete as codes_keys_iterator_delete
 from gribapi import grib_keys_iterator_get_name as codes_keys_iterator_get_name
 from gribapi import grib_keys_iterator_rewind as codes_keys_iterator_rewind
+from gribapi import codes_bufr_keys_iterator_new
+from gribapi import codes_bufr_keys_iterator_next
+from gribapi import codes_bufr_keys_iterator_delete
+from gribapi import codes_bufr_keys_iterator_get_name
+from gribapi import codes_bufr_keys_iterator_rewind
 from gribapi import grib_get_long as codes_get_long
 from gribapi import grib_get_double as codes_get_double
 from gribapi import grib_set_long as codes_set_long
diff --git a/python/eccodes/high_level/bufr.py b/python/eccodes/high_level/bufr.py
index 3fda4d9..d4e337c 100644
--- a/python/eccodes/high_level/bufr.py
+++ b/python/eccodes/high_level/bufr.py
@@ -52,7 +52,14 @@ class BufrMessage(CodesMessage):
 
     def keys(self, namespace=None):
         self.unpacked = True
-        return super(self.__class__, self).keys(namespace)
+        #return super(self.__class__, self).keys(namespace)
+        iterator = eccodes.codes_bufr_keys_iterator_new(self.codes_id)
+        keys = []
+        while eccodes.codes_bufr_keys_iterator_next(iterator):
+            key = eccodes.codes_bufr_keys_iterator_get_name(iterator)
+            keys.append(key)
+        eccodes.codes_bufr_keys_iterator_delete(iterator)
+        return keys
 
     @property
     def unpacked(self):
diff --git a/python/grib_interface.c b/python/grib_interface.c
index 7ffd042..8c7d007 100644
--- a/python/grib_interface.c
+++ b/python/grib_interface.c
@@ -57,7 +57,7 @@
 
  static void init()
  {
-    GRIB_OMP_CRITICAL(lock_fortran)
+    GRIB_OMP_CRITICAL(lock_python)
     {
         if (once == 0)
         {
@@ -116,19 +116,26 @@ struct l_grib_iterator {
 };
 
 typedef struct l_grib_keys_iterator l_grib_keys_iterator;
-
 struct l_grib_keys_iterator {
     int id;
     grib_keys_iterator* i;
     l_grib_keys_iterator* next;
 };
 
+typedef struct l_bufr_keys_iterator l_bufr_keys_iterator;
+struct l_bufr_keys_iterator {
+    int id;
+    bufr_keys_iterator* i;
+    l_bufr_keys_iterator* next;
+};
+
 static l_grib_handle* handle_set = NULL;
 static l_grib_index* index_set = NULL;
 static l_grib_multi_handle* multi_handle_set = NULL;
 static l_grib_file*   file_set   = NULL;
 static l_grib_iterator* iterator_set = NULL;
 static l_grib_keys_iterator* keys_iterator_set = NULL;
+static l_bufr_keys_iterator* bufr_keys_iterator_set = NULL;
 
 static int push_file(FILE* f){
     l_grib_file* current  = file_set;
@@ -437,7 +444,6 @@ static int _push_keys_iterator(grib_keys_iterator *i)
 
     return myindex;
 }
-
 static int push_keys_iterator(grib_keys_iterator *i)
 {
     int ret=0;
@@ -448,6 +454,57 @@ static int push_keys_iterator(grib_keys_iterator *i)
     return ret;
 }
 
+//BUFR keys iterator
+static int _push_bufr_keys_iterator(bufr_keys_iterator *i)
+{
+    l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
+    l_bufr_keys_iterator* previous = bufr_keys_iterator_set;
+    l_bufr_keys_iterator* the_new      = NULL;
+    int myindex = 1;
+
+    if(!bufr_keys_iterator_set){
+        bufr_keys_iterator_set = (l_bufr_keys_iterator*)malloc(sizeof(l_bufr_keys_iterator));
+        Assert(bufr_keys_iterator_set);
+        bufr_keys_iterator_set->id   = myindex;
+        bufr_keys_iterator_set->i    = i;
+        bufr_keys_iterator_set->next = NULL;
+        return myindex;
+    }
+
+    while(current){
+        if(current->id < 0){
+            current->id = -(current->id);
+            current->i  = i;
+            return current->id;
+        }
+        else{
+            myindex++;
+            previous = current;
+            current = current->next;
+        }
+    }
+    if(!previous) return -1;
+
+    the_new = (l_bufr_keys_iterator*)malloc(sizeof(l_bufr_keys_iterator));
+    Assert(the_new);
+    the_new->id    = myindex;
+    the_new->i     = i;
+    the_new->next  = current;
+    previous->next = the_new;
+
+    return myindex;
+}
+static int push_bufr_keys_iterator(bufr_keys_iterator *i)
+{
+    int ret=0;
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex);
+    ret=_push_bufr_keys_iterator(i);
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex);
+    return ret;
+}
+
+
 static grib_handle* _get_handle(int handle_id)
 {
     l_grib_handle* current= handle_set;
@@ -554,7 +611,6 @@ static grib_keys_iterator* _get_keys_iterator(int keys_iterator_id)
     }
     return NULL;
 }
-
 static grib_keys_iterator* get_keys_iterator(int keys_iterator_id)
 {
     grib_keys_iterator* i=NULL;
@@ -565,6 +621,28 @@ static grib_keys_iterator* get_keys_iterator(int keys_iterator_id)
     return i;
 }
 
+//BUFR keys iterator
+static bufr_keys_iterator* _get_bufr_keys_iterator(int keys_iterator_id)
+{
+    l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
+
+    while(current){
+        if(current->id == keys_iterator_id) return current->i;
+        current = current->next;
+    }
+    return NULL;
+}
+static bufr_keys_iterator* get_bufr_keys_iterator(int keys_iterator_id)
+{
+    bufr_keys_iterator* i=NULL;
+    GRIB_MUTEX_INIT_ONCE(&once,&init)
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex)
+    i=_get_bufr_keys_iterator(keys_iterator_id);
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex)
+    return i;
+}
+
+
 static int clear_file(int file_id)
 {
     l_grib_file* current = file_set;
@@ -702,7 +780,6 @@ static int _clear_keys_iterator(int keys_iterator_id)
     }
     return GRIB_INVALID_KEYS_ITERATOR;
 }
-
 static int clear_keys_iterator(int keys_iterator_id)
 {
     int ret=0;
@@ -713,6 +790,30 @@ static int clear_keys_iterator(int keys_iterator_id)
     return ret;
 }
 
+//BUFR keys iterator
+static int _clear_bufr_keys_iterator(int keys_iterator_id)
+{
+    l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
+
+    while(current){
+        if(current->id == keys_iterator_id){
+            current->id = -(current->id);
+            return codes_bufr_keys_iterator_delete(current->i);
+        }
+        current = current->next;
+    }
+    return GRIB_INVALID_KEYS_ITERATOR;
+}
+static int clear_bufr_keys_iterator(int keys_iterator_id)
+{
+    int ret=0;
+    GRIB_MUTEX_INIT_ONCE(&once,&init);
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex);
+    ret=_clear_bufr_keys_iterator(keys_iterator_id);
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex);
+    return ret;
+}
+
 int grib_c_read_any_from_file(int* fid, char* buffer, int* nbytes)
 {
     grib_context* c;
@@ -864,7 +965,6 @@ static int _grib_c_keys_iterator_new_(int* gid,int* iterid,char* name_space)
         *iterid=-1;
     return err;
 }
-
 int grib_c_keys_iterator_new(int* gid,int* iterid,char* name_space)
 {
     int ret=0;
@@ -874,7 +974,6 @@ int grib_c_keys_iterator_new(int* gid,int* iterid,char* name_space)
     GRIB_MUTEX_UNLOCK(&keys_iterator_mutex)
     return ret;
 }
-
 int grib_c_keys_iterator_next(int* iterid)
 {
     int ret = 0;
@@ -887,11 +986,114 @@ int grib_c_keys_iterator_next(int* iterid)
 
     return ret;
 }
-
 int grib_c_keys_iterator_delete(int* iterid)
 {
     return clear_keys_iterator(*iterid);
 }
+int grib_c_keys_iterator_get_name(int* iterid,char* name,int len)
+{
+    size_t lsize=len;
+    char buf[1024]={0,};
+
+    grib_keys_iterator* kiter=get_keys_iterator(*iterid);
+
+    if (!kiter) return GRIB_INVALID_KEYS_ITERATOR;
+    if (grib_keys_iterator_get_accessor(kiter)==NULL)
+        return GRIB_INVALID_KEYS_ITERATOR;
+
+    sprintf(buf,"%s",grib_keys_iterator_get_name(kiter));
+    lsize=strlen(buf);
+
+    if (len < lsize) return GRIB_ARRAY_TOO_SMALL;
+
+    memcpy(name,buf,lsize);
+    name[lsize] = '\0';
+
+    return 0;
+}
+int grib_c_keys_iterator_rewind(int* kiter)
+{
+    grib_keys_iterator* i=get_keys_iterator(*kiter);
+
+    if (!i) return GRIB_INVALID_KEYS_ITERATOR;
+    return grib_keys_iterator_rewind(i);
+}
+
+/*BUFR keys iterator*/
+static int _codes_c_bufr_keys_iterator_new_(int* gid,int* iterid)
+{
+    int err=0;
+    grib_handle* h;
+    bufr_keys_iterator* iter;
+
+    h=get_handle(*gid);
+    if (!h) {
+        *iterid=-1;
+        return GRIB_NULL_HANDLE;
+    }
+    iter=codes_bufr_keys_iterator_new(h,0);
+    if (iter)
+        *iterid=push_bufr_keys_iterator(iter);
+    else
+        *iterid=-1;
+    return err;
+}
+int codes_c_bufr_keys_iterator_new(int* gid,int* iterid)
+{
+    int ret=0;
+    GRIB_MUTEX_INIT_ONCE(&once,&init)
+    GRIB_MUTEX_LOCK(&keys_iterator_mutex)
+    ret = _codes_c_bufr_keys_iterator_new_(gid,iterid);
+    GRIB_MUTEX_UNLOCK(&keys_iterator_mutex)
+    return ret;
+}
+
+int codes_c_bufr_keys_iterator_next(int* iterid)
+{
+    int ret = 0;
+    bufr_keys_iterator* iter= get_bufr_keys_iterator(*iterid);
+
+    if (!iter) return GRIB_INVALID_KEYS_ITERATOR;
+
+    ret = codes_bufr_keys_iterator_next(iter);
+    return ret;
+}
+
+int codes_c_bufr_keys_iterator_get_name(int* iterid,char* name,int len)
+{
+    size_t lsize=len;
+    char buf[1024]={0,};
+
+    bufr_keys_iterator* kiter=get_bufr_keys_iterator(*iterid);
+
+    if (!kiter) return GRIB_INVALID_KEYS_ITERATOR;
+    if (codes_bufr_keys_iterator_get_accessor(kiter)==NULL)
+      return GRIB_INVALID_KEYS_ITERATOR;
+
+    sprintf(buf,"%s",codes_bufr_keys_iterator_get_name(kiter));
+    lsize=strlen(buf);
+
+    if (len < lsize) return GRIB_ARRAY_TOO_SMALL;
+
+    memcpy(name,buf,lsize);
+    name[lsize] = '\0';
+
+    return 0;
+}
+
+int codes_c_bufr_keys_iterator_rewind(int* kiter)
+{
+    bufr_keys_iterator* i=get_bufr_keys_iterator(*kiter);
+
+    if (!i) return GRIB_INVALID_KEYS_ITERATOR;
+    return codes_bufr_keys_iterator_rewind(i);
+}
+
+int codes_c_bufr_keys_iterator_delete(int* iterid)
+{
+    return clear_bufr_keys_iterator(*iterid);
+}
+
 
 int grib_c_gribex_mode_on(void)
 {
@@ -947,36 +1149,6 @@ int grib_c_skip_function(int* iterid)
     return grib_keys_iterator_set_flags(iter,GRIB_KEYS_ITERATOR_SKIP_FUNCTION);
 }
 
-int grib_c_keys_iterator_get_name(int* iterid,char* name,int len)
-{
-    size_t lsize=len;
-    char buf[1024]={0,};
-
-    grib_keys_iterator* kiter=get_keys_iterator(*iterid);
-
-    if (!kiter) return GRIB_INVALID_KEYS_ITERATOR;
-  if (grib_keys_iterator_get_accessor(kiter)==NULL)
-      return GRIB_INVALID_KEYS_ITERATOR;
-
-    sprintf(buf,"%s",grib_keys_iterator_get_name(kiter));
-    lsize=strlen(buf);
-
-    if (len < lsize) return GRIB_ARRAY_TOO_SMALL;
-
-    memcpy(name,buf,lsize);
-    name[lsize] = '\0';
-
-    return 0;
-}
-
-int grib_c_keys_iterator_rewind(int* kiter)
-{
-    grib_keys_iterator* i=get_keys_iterator(*kiter);
-
-    if (!i) return GRIB_INVALID_KEYS_ITERATOR;
-    return grib_keys_iterator_rewind(i);
-}
-
 int grib_c_new_from_message(int* gid, void* buffer , size_t* bufsize)
 {
     grib_handle *h = NULL;
diff --git a/python/grib_interface.h b/python/grib_interface.h
index d6fb295..4c434f4 100644
--- a/python/grib_interface.h
+++ b/python/grib_interface.h
@@ -13,7 +13,15 @@ int grib_c_iterator_next(int *iterid, double *lat, double *lon, double *value);
 int grib_c_iterator_delete(int *iterid);
 int grib_c_keys_iterator_new(int *gid, int *iterid, char *name_space);
 int grib_c_keys_iterator_next(int *iterid);
+int grib_c_keys_iterator_get_name(int *iterid, char *name, int len);
+int grib_c_keys_iterator_rewind(int *kiter);
 int grib_c_keys_iterator_delete(int *iterid);
+int codes_c_bufr_keys_iterator_new(int *gid, int *iterid);
+int codes_c_bufr_keys_iterator_next(int *iterid);
+int codes_c_bufr_keys_iterator_get_name(int *iterid, char *name, int len);
+int codes_c_bufr_keys_iterator_rewind(int *kiter);
+int codes_c_bufr_keys_iterator_delete(int *iterid);
+
 int grib_c_gribex_mode_on(void);
 int grib_c_gribex_mode_off(void);
 int grib_c_skip_computed(int *iterid);
@@ -22,8 +30,6 @@ int grib_c_skip_edition_specific(int *iterid);
 int grib_c_skip_duplicates(int *iterid);
 int grib_c_skip_read_only(int *iterid);
 int grib_c_skip_function(int *iterid);
-int grib_c_keys_iterator_get_name(int *iterid, char *name, int len);
-int grib_c_keys_iterator_rewind(int *kiter);
 int grib_c_new_from_message(int *gid, void *buffer, size_t *bufsize);
 int grib_c_new_from_message_copy(int *gid, void *buffer, size_t *bufsize);
 int grib_c_grib_new_from_samples(int *gid, char *name);
diff --git a/python/gribapi/gribapi.py b/python/gribapi/gribapi.py
index 3a58028..3660cec 100644
--- a/python/gribapi/gribapi.py
+++ b/python/gribapi/gribapi.py
@@ -3,7 +3,7 @@
 @brief This package is the \b Python interface to ecCodes. It offers almost one to one bindings to the C API functions.
 
 The Python interface to ecCodes uses the <a href="http://numpy.scipy.org/"><b>NumPy</b></a> package
-as the container of choice for the possible arrays of values that can be encoded/decoded in and from a grib message.
+as the container of choice for the possible arrays of values that can be encoded/decoded in and from a message.
 Numpy is a package used for scientific computing in Python and an efficient container for generic data.
 
 The Python interface can be enabled/disabled from CMake by using the following flag:\n
@@ -124,7 +124,7 @@ class Bunch(dict):
 @require(errid=int)
 def GRIB_CHECK(errid):
     """
-    Utility function checking the GRIB API error code and raising
+    Utility function checking the ecCodes error code and raising
     an error if that was set.
 
     @param errid  the C interface error id to check
@@ -310,7 +310,7 @@ def grib_count_in_file(fileobj):
 
 def grib_multi_support_on():
     """
-    @brief Turn on the support for multiple fields in a single message.
+    @brief Turn on the support for multiple fields in a single GRIB message.
 
     @exception GribInternalError
     """
@@ -319,7 +319,7 @@ def grib_multi_support_on():
 
 def grib_multi_support_off():
     """
-    @brief Turn off the support for multiple fields in a single message.
+    @brief Turn off the support for multiple fields in a single GRIB message.
 
     @exception GribInternalError
     """
@@ -329,7 +329,7 @@ def grib_multi_support_off():
 @require(msgid=int)
 def grib_release(msgid):
     """
-    @brief Free the memory for the message referred as msgid.
+    @brief Free the memory for the message referred to by msgid.
 
     \b Examples: \ref grib_get_keys.py "grib_get_keys.py"
 
@@ -363,7 +363,7 @@ def grib_get_string(msgid, key):
 @require(msgid=int, key=str, value=str)
 def grib_set_string(msgid, key, value):
     """
-    @brief Set the value for a string key in a grib message.
+    @brief Set the value for a string key in a message.
 
     @param msgid      id of the message loaded in memory
     @param key         key name
@@ -375,7 +375,7 @@ def grib_set_string(msgid, key, value):
 
 def grib_gribex_mode_on():
     """
-    @brief Turn on the compatibility mode with gribex.
+    @brief Turn on the compatibility mode with GRIBEX.
 
     @exception GribInternalError
     """
@@ -384,7 +384,7 @@ def grib_gribex_mode_on():
 
 def grib_gribex_mode_off():
     """
-    @brief Turn off the compatibility mode with gribex.
+    @brief Turn off the compatibility mode with GRIBEX.
 
     @exception GribInternalError
     """
@@ -408,11 +408,11 @@ def grib_write(msgid, fileobj):
 @require(multigribid=int, fileobj=file)
 def grib_multi_write(multigribid, fileobj):
     """
-    @brief Write a multi field message to a file.
+    @brief Write a multi-field GRIB message to a file.
 
     \b Examples: \ref grib_multi_write.py "grib_multi_write.py"
 
-    @param multigribid      id of the multi field grib loaded in memory
+    @param multigribid      id of the multi-field grib loaded in memory
     @param fileobj          python file object
     @exception GribInternalError
     """
@@ -422,17 +422,17 @@ def grib_multi_write(multigribid, fileobj):
 @require(ingribid=int, startsection=int, multigribid=int)
 def grib_multi_append(ingribid, startsection, multigribid):
     """
-    @brief Append a single field grib message to a multi field grib message.
+    @brief Append a single-field GRIB message to a multi-field GRIB message.
 
     Only the sections with section number greather or equal "startsection"
-    are copied from the input single message to the multi field output grib.
+    are copied from the input single message to the multi-field output grib.
 
     \b Examples: \ref grib_multi_write.py "grib_multi_write.py"
 
-    @param ingribid      id of the input single grib
+    @param ingribid      id of the input single-field GRIB
     @param startsection  starting from startsection (included) all the sections are copied
-                         from the input single grib to the output multi grib
-    @param multigribid   id of the output multi filed grib
+                         from the input single grib to the output multi-field grib
+    @param multigribid   id of the output multi-field GRIB
     @exception GribInternalError
     """
     GRIB_CHECK(_internal.grib_c_multi_append(ingribid, startsection, multigribid))
@@ -556,14 +556,14 @@ def grib_skip_function(iterid):
 @require(gribid=int, mode=int)
 def grib_iterator_new(gribid, mode):
     """
-    @brief Create a new geoiterator for the given message, using its geometry and values.
+    @brief Create a new geoiterator for the given GRIB message, using its geometry and values.
 
-    The geoiterator can be used to go through all the geopoints in a message and
+    The geoiterator can be used to go through all the geopoints in a GRIB message and
     retrieve the values corresponding to those geopoints.
 
     \b Examples: \ref grib_iterator.py "grib_iterator.py"
 
-    @param gribid  id of the grib loaded in memory
+    @param gribid  id of the GRIB loaded in memory
     @param mode    flags for future use
     @return geoiterator id
     """
@@ -688,11 +688,88 @@ def grib_keys_iterator_rewind(iterid):
     """
     GRIB_CHECK(_internal.grib_c_keys_iterator_rewind(iterid))
 
+# BUFR keys iterator
+ at require(msgid=int)
+def codes_bufr_keys_iterator_new(msgid):
+    """
+    @brief Create a new iterator on the BUFR keys.
+
+    The keys iterator can be navigated to give all the key names which
+    can then be used to get or set the key values with \ref codes_get or
+    \ref codes_set.
+
+    \b Examples: \ref bufr_keys_iterator.py "bufr_keys_iterator.py"
+
+    @param msgid      id of the BUFR message loaded in memory
+    @return keys iterator id to be used in the keys iterator functions
+    @exception GribInternalError
+    """
+    err, iterid = _internal.codes_c_bufr_keys_iterator_new(msgid)
+    GRIB_CHECK(err)
+    return iterid
+
+
+ at require(iterid=int)
+def codes_bufr_keys_iterator_next(iterid):
+    """
+    @brief Advance to the next BUFR keys iterator value.
+
+    \b Examples: \ref bufr_keys_iterator.py "bufr_keys_iterator.py"
+
+    @param iterid      keys iterator id created with @ref codes_bufr_keys_iterator_new
+    @exception GribInternalError
+    """
+    res = _internal.codes_c_bufr_keys_iterator_next(iterid)
+    if res < 0:
+        GRIB_CHECK(res)
+    return res
+
+
+ at require(iterid=int)
+def codes_bufr_keys_iterator_delete(iterid):
+    """
+    @brief Delete a BUFR keys iterator and free memory.
+
+    \b Examples: \ref bufr_keys_iterator.py "bufr_keys_iterator.py"
+
+    @param iterid      keys iterator id created with @ref codes_bufr_keys_iterator_new
+    @exception GribInternalError
+    """
+    GRIB_CHECK(_internal.codes_c_bufr_keys_iterator_delete(iterid))
+
+
+ at require(iterid=int)
+def codes_bufr_keys_iterator_get_name(iterid):
+    """
+    @brief Get the name of a key from a BUFR keys iterator.
+
+    \b Examples: \ref bufr_keys_iterator.py "bufr_keys_iterator.py"
+
+    @param iterid      keys iterator id created with @ref codes_bufr_keys_iterator_new
+    @return key name to be retrieved
+    @exception GribInternalError
+    """
+    err, name = _internal.codes_c_bufr_keys_iterator_get_name(iterid, 1024)
+    GRIB_CHECK(err)
+    return name
+
+
+ at require(iterid=int)
+def codes_bufr_keys_iterator_rewind(iterid):
+    """
+    @brief Rewind a BUFR keys iterator.
+
+    @param iterid      keys iterator id created with @ref codes_bufr_keys_iterator_new
+    @exception GribInternalError
+    """
+    GRIB_CHECK(_internal.codes_c_bufr_keys_iterator_rewind(iterid))
+
+
 
 @require(msgid=int, key=str)
 def grib_get_long(msgid, key):
     """
-    @brief Get the value of a key in a grib message as an int.
+    @brief Get the value of a key in a message as an integer.
 
     @param msgid       id of the message loaded in memory
     @param key         key name
@@ -707,7 +784,7 @@ def grib_get_long(msgid, key):
 @require(msgid=int, key=str)
 def grib_get_double(msgid, key):
     """
-    @brief Get the value of a key in a grib message as a float.
+    @brief Get the value of a key in a message as a float.
 
     @param msgid      id of the message loaded in memory
     @param key         key name
@@ -722,7 +799,7 @@ def grib_get_double(msgid, key):
 @require(msgid=int, key=str, value=(int, long, float, str))
 def grib_set_long(msgid, key, value):
     """
-    @brief Set the integer value for a key in a grib message.
+    @brief Set the integer value for a key in a message.
 
     A TypeError exception will be thrown if value cannot be represented
     as an integer.
@@ -746,7 +823,7 @@ def grib_set_long(msgid, key, value):
 @require(msgid=int, key=str, value=(int, long, float, str))
 def grib_set_double(msgid, key, value):
     """
-    @brief Set the double value for a key in a grib message.
+    @brief Set the double value for a key in a message.
 
     A TypeError exception will be thrown if value cannot be represented
     as a float.
@@ -971,7 +1048,7 @@ def grib_set_long_array(msgid, key, inarray):
 @require(msgid=int, key=str)
 def grib_get_long_array(msgid, key):
     """
-    @brief Get the integer array of values for a key from a grib message.
+    @brief Get the integer array of values for a key from a message.
 
     @param msgid      id of the message loaded in memory
     @param key        key name
@@ -986,11 +1063,11 @@ def grib_get_long_array(msgid, key):
 
 def grib_multi_new():
     """
-    @brief Create a new multi field and return its id.
+    @brief Create a new multi-field GRIB message and return its id.
 
     \b Examples: \ref grib_multi_write.py "grib_multi_write.py"
 
-    @return id of the multi field
+    @return id of the multi-field message
     @exception GribInternalError
     """
     err, mgid = _internal.grib_c_multi_new()
@@ -1001,11 +1078,11 @@ def grib_multi_new():
 @require(gribid=int)
 def grib_multi_release(gribid):
     """
-    @brief Release a multi field from memory.
+    @brief Release a multi-field message from memory.
 
     \b Examples: \ref grib_multi_write.py "grib_multi_write.py"
 
-    @param gribid    id of the multi field we want to release the memory for
+    @param gribid    id of the multi-field we want to release the memory for
     @exception GribInternalError
     """
     GRIB_CHECK(_internal.grib_c_multi_release(gribid))
@@ -1356,9 +1433,9 @@ def grib_get_elements(gribid, key, indexes):
 @require(msgid=int, key=str)
 def grib_set_missing(msgid, key):
     """
-    @brief Set as missing the value for a key in a grib message.
+    @brief Set as missing the value for a key in a GRIB message.
 
-    It can be used to set a missing value in the grib header but not in
+    It can be used to set a missing value in the GRIB header but not in
     the data values.
 
     \b Examples: \ref grib_set_missing.py "grib_set_missing.py"
@@ -1515,13 +1592,13 @@ def grib_get_native_type(gribid, key):
 @require(msgid=int, key=str)
 def grib_get(msgid, key, ktype=None):
     """
-    @brief Get the value of a key in a grib message.
+    @brief Get the value of a key in a message.
 
     The type of value returned depends on the native type of the requested key.
     The type of value returned can be forced by using the type argument of the
     function. The type argument can be int, float or str.
 
-    The \em msgid references a grib message loaded in memory.
+    The \em msgid references a message loaded in memory.
 
     \b Examples: \ref grib_get_keys.py "grib_get_keys.py", \ref grib_print_data.py "grib_print_data.py"
 
@@ -1617,7 +1694,7 @@ def grib_set_values(gribid, values):
 @require(msgid=int, key=str)
 def grib_set(msgid, key, value):
     """
-    @brief Set the value for a scalar key in a grib message.
+    @brief Set the value for a scalar key in a message.
 
     The input value can be a python int, float or str.
 
@@ -1832,12 +1909,12 @@ def grib_new_from_message(message):
     """
     @brief Create a grib handle from a message in memory.
 
-    Create a new grib message from the input binary string and return its grib id.
+    Create a new message from the input binary string and return its grib id.
 
     @see grib_get_message
 
     @param message binary string message
-    @return msgid of the newly created grib message
+    @return msgid of the newly created message
     @exception GribInternalError
     """
     error, msgid = _internal.grib_c_new_from_message(0, message, len(message))
diff --git a/python/gribapi_swig.i b/python/gribapi_swig.i
index 7571377..0224b77 100644
--- a/python/gribapi_swig.i
+++ b/python/gribapi_swig.i
@@ -44,6 +44,7 @@ int grib_c_new_gts_from_file(FILE* f, int headers_only, int* INOUT);
 int grib_c_new_metar_from_file(FILE* f, int headers_only, int* INOUT);
 int grib_c_iterator_new(int* INPUT, int* OUTPUT, int* INPUT);
 int grib_c_keys_iterator_new(int* INPUT, int* OUTPUT, char* name_space);
+int codes_c_bufr_keys_iterator_new(int* INPUT, int* OUTPUT);
 int grib_c_grib_new_from_samples(int* INOUT, char* name);
 int grib_c_bufr_new_from_samples(int* INOUT, char* name);
 int grib_c_index_new_from_file(char* file, char* keys, int* OUTPUT);
@@ -91,7 +92,9 @@ int grib_c_gribex_mode_off(void);
 
 // keys iterator
 int grib_c_keys_iterator_next(int* iterid);
+int codes_c_bufr_keys_iterator_next(int* iterid);
 int grib_c_keys_iterator_delete(int* iterid);
+int codes_c_bufr_keys_iterator_delete(int* iterid);
 int grib_c_skip_computed(int* iterid);
 int grib_c_skip_coded(int* iterid);
 int grib_c_skip_edition_specific(int* iterid);
@@ -99,11 +102,13 @@ int grib_c_skip_duplicates(int* iterid);
 int grib_c_skip_read_only(int* iterid);
 int grib_c_skip_function(int* iterid);
 int grib_c_keys_iterator_rewind(int* iterid);
+int codes_c_bufr_keys_iterator_rewind(int* iterid);
 int grib_c_bufr_copy_data(int* gid, int* INOUT);
 
 
 %cstring_bounded_output(char* name, 1024);
 int grib_c_keys_iterator_get_name(int* iterid, char* name, int len);
+int codes_c_bufr_keys_iterator_get_name(int* iterid, char* name, int len);
 // ---
 
 // indexing routines
diff --git a/python/swig_wrap_numpy.c b/python/swig_wrap_numpy.c
index cf1357b..dd5d051 100644
--- a/python/swig_wrap_numpy.c
+++ b/python/swig_wrap_numpy.c
@@ -5122,6 +5122,45 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_new(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int *arg1 = (int *) 0 ;
+  int *arg2 = (int *) 0 ;
+  int temp1 ;
+  int res1 = 0 ;
+  int temp2 ;
+  int res2 = SWIG_TMPOBJ ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  arg2 = &temp2;
+  if (!PyArg_ParseTuple(args,(char *)"O:codes_c_bufr_keys_iterator_new",&obj0)) SWIG_fail;
+  if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) {
+    int val; 
+    int ecode = SWIG_AsVal_int(obj0, &val);
+    if (!SWIG_IsOK(ecode)) {
+      SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_new" "', argument " "1"" of type '" "int""'");
+    }
+    temp1 = (int)(val);
+    arg1 = &temp1;
+    res1 = SWIG_AddTmpMask(ecode);
+  }
+  result = (int)codes_c_bufr_keys_iterator_new(arg1,arg2);
+  resultobj = SWIG_From_int((int)(result));
+  if (SWIG_IsTmpObj(res2)) {
+    resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_From_int((*arg2)));
+  } else {
+    int new_flags = SWIG_IsNewObj(res2) ? (SWIG_POINTER_OWN |  0 ) :  0 ;
+    resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_NewPointerObj((void*)(arg2), SWIGTYPE_p_int, new_flags));
+  }
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_grib_c_grib_new_from_samples(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int *arg1 = (int *) 0 ;
@@ -6157,6 +6196,35 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_next(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int *arg1 = (int *) 0 ;
+  int temp1 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:codes_c_bufr_keys_iterator_next",&obj0)) SWIG_fail;
+  if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) {
+    int val; 
+    int ecode = SWIG_AsVal_int(obj0, &val);
+    if (!SWIG_IsOK(ecode)) {
+      SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_next" "', argument " "1"" of type '" "int""'");
+    }
+    temp1 = (int)(val);
+    arg1 = &temp1;
+    res1 = SWIG_AddTmpMask(ecode);
+  }
+  result = (int)codes_c_bufr_keys_iterator_next(arg1);
+  resultobj = SWIG_From_int((int)(result));
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_grib_c_keys_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int *arg1 = (int *) 0 ;
@@ -6186,6 +6254,35 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_delete(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int *arg1 = (int *) 0 ;
+  int temp1 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:codes_c_bufr_keys_iterator_delete",&obj0)) SWIG_fail;
+  if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) {
+    int val; 
+    int ecode = SWIG_AsVal_int(obj0, &val);
+    if (!SWIG_IsOK(ecode)) {
+      SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_delete" "', argument " "1"" of type '" "int""'");
+    }
+    temp1 = (int)(val);
+    arg1 = &temp1;
+    res1 = SWIG_AddTmpMask(ecode);
+  }
+  result = (int)codes_c_bufr_keys_iterator_delete(arg1);
+  resultobj = SWIG_From_int((int)(result));
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_grib_c_skip_computed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int *arg1 = (int *) 0 ;
@@ -6389,6 +6486,35 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_rewind(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int *arg1 = (int *) 0 ;
+  int temp1 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  int result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:codes_c_bufr_keys_iterator_rewind",&obj0)) SWIG_fail;
+  if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) {
+    int val; 
+    int ecode = SWIG_AsVal_int(obj0, &val);
+    if (!SWIG_IsOK(ecode)) {
+      SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_rewind" "', argument " "1"" of type '" "int""'");
+    }
+    temp1 = (int)(val);
+    arg1 = &temp1;
+    res1 = SWIG_AddTmpMask(ecode);
+  }
+  result = (int)codes_c_bufr_keys_iterator_rewind(arg1);
+  resultobj = SWIG_From_int((int)(result));
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_grib_c_bufr_copy_data(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int *arg1 = (int *) 0 ;
@@ -6481,6 +6607,49 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_codes_c_bufr_keys_iterator_get_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  int *arg1 = (int *) 0 ;
+  char *arg2 = (char *) 0 ;
+  int arg3 ;
+  int temp1 ;
+  int res1 = 0 ;
+  char temp2[1024+1] ;
+  int val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  int result;
+  
+  arg2 = (char *) temp2;
+  if (!PyArg_ParseTuple(args,(char *)"OO:codes_c_bufr_keys_iterator_get_name",&obj0,&obj1)) SWIG_fail;
+  if (!(SWIG_IsOK((res1 = SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&arg1),SWIGTYPE_p_int,0))))) {
+    int val; 
+    int ecode = SWIG_AsVal_int(obj0, &val);
+    if (!SWIG_IsOK(ecode)) {
+      SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "codes_c_bufr_keys_iterator_get_name" "', argument " "1"" of type '" "int""'");
+    }
+    temp1 = (int)(val);
+    arg1 = &temp1;
+    res1 = SWIG_AddTmpMask(ecode);
+  }
+  ecode3 = SWIG_AsVal_int(obj1, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "codes_c_bufr_keys_iterator_get_name" "', argument " "3"" of type '" "int""'");
+  } 
+  arg3 = (int)(val3);
+  result = (int)codes_c_bufr_keys_iterator_get_name(arg1,arg2,arg3);
+  resultobj = SWIG_From_int((int)(result));
+  arg2[1024] = 0;  
+  resultobj = SWIG_Python_AppendOutput(resultobj, SWIG_FromCharPtr(arg2));
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) free((char*)arg1);
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_grib_c_index_get_size_long(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   int *arg1 = (int *) 0 ;
@@ -8887,6 +9056,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"grib_c_new_metar_from_file", _wrap_grib_c_new_metar_from_file, METH_VARARGS, NULL},
 	 { (char *)"grib_c_iterator_new", _wrap_grib_c_iterator_new, METH_VARARGS, NULL},
 	 { (char *)"grib_c_keys_iterator_new", _wrap_grib_c_keys_iterator_new, METH_VARARGS, NULL},
+	 { (char *)"codes_c_bufr_keys_iterator_new", _wrap_codes_c_bufr_keys_iterator_new, METH_VARARGS, NULL},
 	 { (char *)"grib_c_grib_new_from_samples", _wrap_grib_c_grib_new_from_samples, METH_VARARGS, NULL},
 	 { (char *)"grib_c_bufr_new_from_samples", _wrap_grib_c_bufr_new_from_samples, METH_VARARGS, NULL},
 	 { (char *)"grib_c_index_new_from_file", _wrap_grib_c_index_new_from_file, METH_VARARGS, NULL},
@@ -8914,7 +9084,9 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"grib_c_gribex_mode_on", _wrap_grib_c_gribex_mode_on, METH_VARARGS, NULL},
 	 { (char *)"grib_c_gribex_mode_off", _wrap_grib_c_gribex_mode_off, METH_VARARGS, NULL},
 	 { (char *)"grib_c_keys_iterator_next", _wrap_grib_c_keys_iterator_next, METH_VARARGS, NULL},
+	 { (char *)"codes_c_bufr_keys_iterator_next", _wrap_codes_c_bufr_keys_iterator_next, METH_VARARGS, NULL},
 	 { (char *)"grib_c_keys_iterator_delete", _wrap_grib_c_keys_iterator_delete, METH_VARARGS, NULL},
+	 { (char *)"codes_c_bufr_keys_iterator_delete", _wrap_codes_c_bufr_keys_iterator_delete, METH_VARARGS, NULL},
 	 { (char *)"grib_c_skip_computed", _wrap_grib_c_skip_computed, METH_VARARGS, NULL},
 	 { (char *)"grib_c_skip_coded", _wrap_grib_c_skip_coded, METH_VARARGS, NULL},
 	 { (char *)"grib_c_skip_edition_specific", _wrap_grib_c_skip_edition_specific, METH_VARARGS, NULL},
@@ -8922,8 +9094,10 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"grib_c_skip_read_only", _wrap_grib_c_skip_read_only, METH_VARARGS, NULL},
 	 { (char *)"grib_c_skip_function", _wrap_grib_c_skip_function, METH_VARARGS, NULL},
 	 { (char *)"grib_c_keys_iterator_rewind", _wrap_grib_c_keys_iterator_rewind, METH_VARARGS, NULL},
+	 { (char *)"codes_c_bufr_keys_iterator_rewind", _wrap_codes_c_bufr_keys_iterator_rewind, METH_VARARGS, NULL},
 	 { (char *)"grib_c_bufr_copy_data", _wrap_grib_c_bufr_copy_data, METH_VARARGS, NULL},
 	 { (char *)"grib_c_keys_iterator_get_name", _wrap_grib_c_keys_iterator_get_name, METH_VARARGS, NULL},
+	 { (char *)"codes_c_bufr_keys_iterator_get_name", _wrap_codes_c_bufr_keys_iterator_get_name, METH_VARARGS, NULL},
 	 { (char *)"grib_c_index_get_size_long", _wrap_grib_c_index_get_size_long, METH_VARARGS, NULL},
 	 { (char *)"grib_c_index_get_long", _wrap_grib_c_index_get_long, METH_VARARGS, NULL},
 	 { (char *)"grib_c_index_get_real8", _wrap_grib_c_index_get_real8, METH_VARARGS, NULL},
diff --git a/python/swig_wrap_numpy.py b/python/swig_wrap_numpy.py
index 26da723..4114337 100644
--- a/python/swig_wrap_numpy.py
+++ b/python/swig_wrap_numpy.py
@@ -330,6 +330,10 @@ def grib_c_keys_iterator_new(*args):
   return _gribapi_swig.grib_c_keys_iterator_new(*args)
 grib_c_keys_iterator_new = _gribapi_swig.grib_c_keys_iterator_new
 
+def codes_c_bufr_keys_iterator_new(*args):
+  return _gribapi_swig.codes_c_bufr_keys_iterator_new(*args)
+codes_c_bufr_keys_iterator_new = _gribapi_swig.codes_c_bufr_keys_iterator_new
+
 def grib_c_grib_new_from_samples(*args):
   return _gribapi_swig.grib_c_grib_new_from_samples(*args)
 grib_c_grib_new_from_samples = _gribapi_swig.grib_c_grib_new_from_samples
@@ -438,10 +442,18 @@ def grib_c_keys_iterator_next(*args):
   return _gribapi_swig.grib_c_keys_iterator_next(*args)
 grib_c_keys_iterator_next = _gribapi_swig.grib_c_keys_iterator_next
 
+def codes_c_bufr_keys_iterator_next(*args):
+  return _gribapi_swig.codes_c_bufr_keys_iterator_next(*args)
+codes_c_bufr_keys_iterator_next = _gribapi_swig.codes_c_bufr_keys_iterator_next
+
 def grib_c_keys_iterator_delete(*args):
   return _gribapi_swig.grib_c_keys_iterator_delete(*args)
 grib_c_keys_iterator_delete = _gribapi_swig.grib_c_keys_iterator_delete
 
+def codes_c_bufr_keys_iterator_delete(*args):
+  return _gribapi_swig.codes_c_bufr_keys_iterator_delete(*args)
+codes_c_bufr_keys_iterator_delete = _gribapi_swig.codes_c_bufr_keys_iterator_delete
+
 def grib_c_skip_computed(*args):
   return _gribapi_swig.grib_c_skip_computed(*args)
 grib_c_skip_computed = _gribapi_swig.grib_c_skip_computed
@@ -470,6 +482,10 @@ def grib_c_keys_iterator_rewind(*args):
   return _gribapi_swig.grib_c_keys_iterator_rewind(*args)
 grib_c_keys_iterator_rewind = _gribapi_swig.grib_c_keys_iterator_rewind
 
+def codes_c_bufr_keys_iterator_rewind(*args):
+  return _gribapi_swig.codes_c_bufr_keys_iterator_rewind(*args)
+codes_c_bufr_keys_iterator_rewind = _gribapi_swig.codes_c_bufr_keys_iterator_rewind
+
 def grib_c_bufr_copy_data(*args):
   return _gribapi_swig.grib_c_bufr_copy_data(*args)
 grib_c_bufr_copy_data = _gribapi_swig.grib_c_bufr_copy_data
@@ -478,6 +494,10 @@ def grib_c_keys_iterator_get_name(*args):
   return _gribapi_swig.grib_c_keys_iterator_get_name(*args)
 grib_c_keys_iterator_get_name = _gribapi_swig.grib_c_keys_iterator_get_name
 
+def codes_c_bufr_keys_iterator_get_name(*args):
+  return _gribapi_swig.codes_c_bufr_keys_iterator_get_name(*args)
+codes_c_bufr_keys_iterator_get_name = _gribapi_swig.codes_c_bufr_keys_iterator_get_name
+
 def grib_c_index_get_size_long(*args):
   return _gribapi_swig.grib_c_index_get_size_long(*args)
 grib_c_index_get_size_long = _gribapi_swig.grib_c_index_get_size_long
diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt
index 7262adc..1a84b31 100644
--- a/samples/CMakeLists.txt
+++ b/samples/CMakeLists.txt
@@ -1,7 +1,7 @@
 file( GLOB samples_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.tmpl" )
 
 install( FILES ${samples_files}
-         DESTINATION share/${PROJECT_NAME}/samples
+         DESTINATION ${ECCODES_SAMPLES_SUFF}
          PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ )
 
 foreach( tmpl ${samples_files} )
@@ -12,9 +12,9 @@ set( ECCODES_SAMPLES_DIR   ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE )
 set( ECCODES_SAMPLES_FILES ${ECCODES_SAMPLES_FILES}    PARENT_SCOPE )
 
 # link to the samples in the build directory. See GRIB-786
-file( MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/share/${PROJECT_NAME} )
-if( NOT EXISTS "${CMAKE_BINARY_DIR}/share/${PROJECT_NAME}/samples" )
+file( MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${INSTALL_DATA_DIR} )
+if( NOT EXISTS "${CMAKE_BINARY_DIR}/${ECCODES_SAMPLES_SUFF}" )
   execute_process( COMMAND "${CMAKE_COMMAND}" "-E" "create_symlink"
     "${CMAKE_CURRENT_SOURCE_DIR}"
-    "${CMAKE_BINARY_DIR}/share/${PROJECT_NAME}/samples" )
-endif()
\ No newline at end of file
+    "${CMAKE_BINARY_DIR}/${ECCODES_SAMPLES_SUFF}" )
+endif()
diff --git a/src/bufr_keys_iterator.c b/src/bufr_keys_iterator.c
index 2c41779..a364c85 100644
--- a/src/bufr_keys_iterator.c
+++ b/src/bufr_keys_iterator.c
@@ -10,17 +10,25 @@
 
 #include "grib_api_internal.h"
 
-grib_keys_iterator* codes_bufr_keys_iterator_new(grib_handle* h)
+bufr_keys_iterator* codes_bufr_keys_iterator_new(grib_handle* h, unsigned long filter_flags)
 {
-    grib_keys_iterator* ki=NULL;
+    bufr_keys_iterator* ki=NULL;
 
     if (!h) return NULL;
 
-    ki= (grib_keys_iterator*)grib_context_malloc_clear(h->context,sizeof(grib_keys_iterator));
+    if (h->product_kind != PRODUCT_BUFR) {
+        grib_context_log(h->context, GRIB_LOG_ERROR,
+                         "Invalid keys iterator for message: please use codes_keys_iterator_new");
+        return NULL;
+    }
+    
+    ki= (bufr_keys_iterator*)grib_context_malloc_clear(h->context,sizeof(bufr_keys_iterator));
     if (!ki) return NULL;
 
-    ki->filter_flags = 0;
+    ki->filter_flags = filter_flags;
     ki->handle       = h;
+    Assert(h->product_kind == PRODUCT_BUFR);
+    ki->names        = NULL;
     ki->i_curr_attribute=0;
     ki->accessor_flags_only= GRIB_ACCESSOR_FLAG_DUMP;
     ki->accessor_flags_skip= GRIB_ACCESSOR_FLAG_HIDDEN | GRIB_ACCESSOR_FLAG_READ_ONLY;
@@ -28,22 +36,22 @@ grib_keys_iterator* codes_bufr_keys_iterator_new(grib_handle* h)
     ki->at_start     = 1;
     ki->match        = 0;
 
-    if(ki->seen==NULL ) ki->seen = grib_trie_new(h->context);
+    if (ki->seen==NULL ) ki->seen = grib_trie_new(h->context);
 
     return ki;
 }
 
-grib_keys_iterator* codes_bufr_data_section_keys_iterator_new(grib_handle* h)
+bufr_keys_iterator* codes_bufr_data_section_keys_iterator_new(grib_handle* h)
 {
-    grib_keys_iterator* ki=NULL;
+    bufr_keys_iterator* ki=NULL;
 
     if (!h) return NULL;
 
-    ki= (grib_keys_iterator*)grib_context_malloc_clear(h->context,sizeof(grib_keys_iterator));
+    ki= (bufr_keys_iterator*)grib_context_malloc_clear(h->context,sizeof(bufr_keys_iterator));
     if (!ki) return NULL;
 
-    ki->filter_flags = 0;
     ki->handle       = h;
+    Assert(h->product_kind == PRODUCT_BUFR);
     ki->i_curr_attribute=0;
     ki->accessor_flags_only= GRIB_ACCESSOR_FLAG_BUFR_DATA | GRIB_ACCESSOR_FLAG_DUMP;
     ki->accessor_flags_skip= GRIB_ACCESSOR_FLAG_HIDDEN | GRIB_ACCESSOR_FLAG_READ_ONLY;
@@ -56,7 +64,7 @@ grib_keys_iterator* codes_bufr_data_section_keys_iterator_new(grib_handle* h)
     return ki;
 }
 
-static void mark_seen(grib_keys_iterator* ki,const char* name)
+static void mark_seen(bufr_keys_iterator* ki,const char* name)
 {
     int* r=(int*)grib_trie_get(ki->seen,name);
 
@@ -68,20 +76,13 @@ static void mark_seen(grib_keys_iterator* ki,const char* name)
     }
 }
 
-/*
-static int was_seen(grib_keys_iterator* ki,const char* name)
-{
-    return grib_trie_get(ki->seen,name) != NULL;
-}
- */
-
-int codes_bufr_keys_iterator_rewind(grib_keys_iterator* ki)
+int codes_bufr_keys_iterator_rewind(bufr_keys_iterator* ki)
 {
     ki->at_start = 1;
     return GRIB_SUCCESS;
 }
 
-static int skip(grib_keys_iterator* kiter)
+static int skip(bufr_keys_iterator* kiter)
 {
     if(kiter->current->sub_section)
         return 1;
@@ -101,7 +102,7 @@ static int skip(grib_keys_iterator* kiter)
     return 0;
 }
 
-static int next_attribute(grib_keys_iterator* kiter)
+static int next_attribute(bufr_keys_iterator* kiter)
 {
     int *r=0;
     int i_curr_attribute;
@@ -142,10 +143,9 @@ static int next_attribute(grib_keys_iterator* kiter)
         kiter->i_curr_attribute=0;
         return next_attribute(kiter);
     }
-
 }
 
-int codes_bufr_keys_iterator_next(grib_keys_iterator* kiter)
+int codes_bufr_keys_iterator_next(bufr_keys_iterator* kiter)
 {
     if(kiter->at_start)
     {
@@ -176,11 +176,14 @@ int codes_bufr_keys_iterator_next(grib_keys_iterator* kiter)
     return kiter->current != NULL;
 }
 
-char* codes_bufr_keys_iterator_get_name(grib_keys_iterator* kiter)
+/* The return value is constructed so we allocate memory for it. */
+/* We free in codes_bufr_keys_iterator_delete() */
+char* codes_bufr_keys_iterator_get_name(bufr_keys_iterator* kiter)
 {
     int *r=0;
     char* ret=0;
     Assert(kiter->current);
+    grib_context* c = kiter->handle->context;
 
     if (kiter->prefix) {
         int iattribute=kiter->i_curr_attribute-1;
@@ -196,22 +199,41 @@ char* codes_bufr_keys_iterator_get_name(grib_keys_iterator* kiter)
             sprintf(ret,"%s",kiter->current->name);
         }
     }
+
+    /* Store in list of names to be deleted later */
+    grib_string_list* sl=(grib_string_list*)grib_context_malloc_clear(c, sizeof(grib_string_list));
+    sl->value = ret;
+    if (!kiter->names) {
+        kiter->names = sl;
+    } else {
+        /* Add to beginning of list for speed. Order doesn't matter */
+        grib_string_list* tmp = kiter->names;
+        kiter->names = sl;
+        sl->next = tmp;
+    }
     return ret;
 }
 
-grib_accessor* codes_bufr_keys_iterator_get_accessor(grib_keys_iterator* kiter)
+grib_accessor* codes_bufr_keys_iterator_get_accessor(bufr_keys_iterator* kiter)
 {
     return kiter->current;
 }
 
-int codes_bufr_keys_iterator_delete( grib_keys_iterator* kiter)
+int codes_bufr_keys_iterator_delete(bufr_keys_iterator* kiter)
 {
     if (kiter) {
+        grib_context* c = kiter->handle->context;
+        grib_string_list* sl = kiter->names;
+        while(sl) {
+            grib_string_list* n = sl->next;
+            grib_context_free(c, sl->value);
+            grib_context_free(c, sl);
+            sl = n;
+        }
+        kiter->names=NULL;
         if(kiter->seen)
             grib_trie_delete(kiter->seen);
-        if (kiter->name_space)
-            grib_context_free(kiter->handle->context,kiter->name_space);
-        grib_context_free(kiter->handle->context,kiter);
+        grib_context_free(c,kiter);
     }
     return 0;
 }
diff --git a/src/bufr_util.c b/src/bufr_util.c
index a0403a9..61e5d4c 100644
--- a/src/bufr_util.c
+++ b/src/bufr_util.c
@@ -53,7 +53,7 @@ int compute_bufr_key_rank(grib_handle* h, grib_string_list* keys, const char* ke
 
 char** codes_bufr_copy_data_return_copied_keys(grib_handle* hin,grib_handle* hout, size_t* nkeys, int* err)
 {
-    grib_keys_iterator* kiter=NULL;
+    bufr_keys_iterator* kiter=NULL;
     char* name=0;
     char** keys=NULL;
     grib_sarray* k=0;
@@ -76,7 +76,11 @@ char** codes_bufr_copy_data_return_copied_keys(grib_handle* hin,grib_handle* hou
            cannot be copied because is not in the output handle
          */
         *err=codes_copy_key(hin, hout, name, 0);
-        if (*err==0) k=grib_sarray_push(hin->context, k, name);
+        if (*err==0) {
+            /* 'name' will be freed when we call codes_bufr_keys_iterator_delete so copy */
+            char* copied_name = strdup(name);
+            k=grib_sarray_push(hin->context, k, copied_name);
+        }
     }
     *nkeys=grib_sarray_used_size(k);
     keys=grib_sarray_get_array(hin->context, k);
@@ -85,13 +89,13 @@ char** codes_bufr_copy_data_return_copied_keys(grib_handle* hin,grib_handle* hou
         /* Do the pack if something was copied */
         *err=grib_set_long(hout, "pack", 1);
     }
-    grib_keys_iterator_delete(kiter);
+    codes_bufr_keys_iterator_delete(kiter);
     return keys;
 }
 
 int codes_bufr_copy_data(grib_handle* hin, grib_handle* hout)
 {
-    grib_keys_iterator* kiter=NULL;
+    bufr_keys_iterator* kiter=NULL;
     char* name=0;
     int err=0;
     int nkeys=0;
@@ -113,7 +117,6 @@ int codes_bufr_copy_data(grib_handle* hin, grib_handle* hout)
          */
         err=codes_copy_key(hin, hout, name, 0);
         if (err==0) nkeys++;
-        grib_context_free(hin->context,name);
     }
 
     if (nkeys > 0) {
@@ -121,6 +124,6 @@ int codes_bufr_copy_data(grib_handle* hin, grib_handle* hout)
         err=grib_set_long(hout, "pack", 1);
     }
 
-    grib_keys_iterator_delete(kiter);
+    codes_bufr_keys_iterator_delete(kiter);
     return err;
 }
diff --git a/src/eccodes.h b/src/eccodes.h
index a417bed..2e5d1e4 100644
--- a/src/eccodes.h
+++ b/src/eccodes.h
@@ -164,6 +164,7 @@ typedef struct grib_points            codes_points;
     \struct codes_keys_iterator
 */
 typedef struct grib_keys_iterator     codes_keys_iterator;
+typedef struct bufr_keys_iterator     codes_bufr_keys_iterator;
 
 typedef struct grib_fieldset          codes_fieldset;
 typedef struct grib_order_by          codes_order_by;
@@ -1098,14 +1099,12 @@ attributes or by the namespace they belong to.
 /*! Create a new iterator from a valid and initialised handle.
 *  @param h             : the handle whose keys you want to iterate
 *  @param filter_flags  : flags to filter out some of the keys through their attributes
-*  @param name_space     : if not null the iteration is carried out only on
+*  @param name_space    : if not null the iteration is carried out only on
 *                         keys belonging to the namespace passed. (NULL for all the keys)
 *  @return              keys iterator ready to iterate through keys according to filter_flags
-*                         and namespace
+*                       and namespace
 */
 codes_keys_iterator* codes_keys_iterator_new(codes_handle* h,unsigned long filter_flags, const char* name_space);
-codes_keys_iterator* codes_bufr_keys_iterator_new(codes_handle* h);
-codes_keys_iterator* codes_bufr_data_section_keys_iterator_new(codes_handle* h);
 
 /* codes_bufr_copy_data copies all the values in the data section that are present in the same position in the data tree
  * and with the same number of values to the output handle. Should not exit with error if the output handle has a different
@@ -1116,36 +1115,33 @@ char **codes_bufr_copy_data_return_copied_keys(grib_handle *hin, grib_handle *ho
 int codes_bufr_copy_data(grib_handle* hin, grib_handle* hout);
 
 
-/*! Step to the next iterator.
+/*! Step to the next item from the keys iterator.
 *  @param kiter         : valid codes_keys_iterator
 *  @return              1 if next iterator exists, 0 if no more elements to iterate on
 */
 int codes_keys_iterator_next(codes_keys_iterator *kiter);
-int codes_bufr_keys_iterator_next(codes_keys_iterator *kiter);
 
 
-/*! get the key name from the iterator
+/*! get the key name from the keys iterator
 *  @param kiter         : valid codes_keys_iterator
 *  @return              key name
 */
 const char* codes_keys_iterator_get_name(codes_keys_iterator *kiter);
 
-/*! Delete the iterator.
+/*! Delete the keys iterator.
 *  @param kiter         : valid codes_keys_iterator
 *  @return              0 if OK, integer value on error
 */
 int codes_keys_iterator_delete( codes_keys_iterator* kiter);
 
-/*! Rewind the iterator.
+/*! Rewind the keys iterator.
 *  @param kiter         : valid codes_keys_iterator
 *  @return              0 if OK, integer value on error
 */
 int codes_keys_iterator_rewind(codes_keys_iterator* kiter);
 
-char* codes_bufr_keys_iterator_get_name(codes_keys_iterator* kiter);
 
 int codes_keys_iterator_set_flags(codes_keys_iterator *kiter,unsigned long flags);
-
 int codes_keys_iterator_get_long(codes_keys_iterator *kiter, long *v, size_t *len);
 int codes_keys_iterator_get_double(codes_keys_iterator *kiter, double *v, size_t *len);
 int codes_keys_iterator_get_string(codes_keys_iterator *kiter, char *v, size_t *len);
diff --git a/src/grib_accessor_class_bufr_data_element.c b/src/grib_accessor_class_bufr_data_element.c
index 90a840c..f32d3a0 100644
--- a/src/grib_accessor_class_bufr_data_element.c
+++ b/src/grib_accessor_class_bufr_data_element.c
@@ -22,6 +22,7 @@
    SUPER      = grib_accessor_class_gen
    IMPLEMENTS = init;dump
    IMPLEMENTS = unpack_string;unpack_string_array;unpack_long; unpack_double
+   IMPLEMENTS = unpack_double_element
    IMPLEMENTS = pack_long; pack_double ; pack_string_array; pack_string
    IMPLEMENTS = value_count; get_native_type; make_clone; destroy
    MEMBERS    = long index
@@ -62,6 +63,7 @@ static void destroy(grib_context*,grib_accessor*);
 static void dump(grib_accessor*, grib_dumper*);
 static void init(grib_accessor*,const long, grib_arguments* );
 static void init_class(grib_accessor_class*);
+static int unpack_double_element(grib_accessor*,size_t i, double* val);
 static grib_accessor* make_clone(grib_accessor*,grib_section*,int*);
 
 typedef struct grib_accessor_bufr_data_element {
@@ -118,7 +120,7 @@ static grib_accessor_class _grib_accessor_class_bufr_data_element = {
     0,      /* nearest_smaller_value */
     0,                       /* next accessor    */
     0,                    /* compare vs. another accessor   */
-    0,     /* unpack only ith value          */
+    &unpack_double_element,     /* unpack only ith value          */
     0,     /* unpack a subarray         */
     0,              		/* clear          */
     &make_clone,               		/* clone accessor          */
@@ -147,7 +149,6 @@ static void init_class(grib_accessor_class* c)
 	c->nearest_smaller_value	=	(*(c->super))->nearest_smaller_value;
 	c->next	=	(*(c->super))->next;
 	c->compare	=	(*(c->super))->compare;
-	c->unpack_double_element	=	(*(c->super))->unpack_double_element;
 	c->unpack_double_subarray	=	(*(c->super))->unpack_double_subarray;
 	c->clear	=	(*(c->super))->clear;
 }
@@ -534,6 +535,26 @@ static int value_count(grib_accessor* a,long* count)
     return ret;
 }
 
+static int unpack_double_element(grib_accessor* a, size_t idx, double* val)
+{
+    /* ECC-415 */
+    grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
+    int ret = GRIB_SUCCESS;
+    long count = 0;
+
+    value_count(a, &count);
+    if (idx >= count) {
+        return GRIB_INTERNAL_ERROR;
+    }
+
+    if (self->compressedData) {
+        *val = self->numericValues->v[self->index]->v[idx];
+    } else {
+        ret = GRIB_NOT_IMPLEMENTED;
+    }
+    return ret;
+}
+
 static int  get_native_type(grib_accessor* a)
 {
     grib_accessor_bufr_data_element* self = (grib_accessor_bufr_data_element*)a;
diff --git a/src/grib_accessor_class_second_order_bits_per_value.c b/src/grib_accessor_class_second_order_bits_per_value.c
index 248032e..111ae05 100644
--- a/src/grib_accessor_class_second_order_bits_per_value.c
+++ b/src/grib_accessor_class_second_order_bits_per_value.c
@@ -140,6 +140,7 @@ static void init_class(grib_accessor_class* c)
 
 /* END_CLASS_IMP */
 
+/*
 static unsigned long nbits[32]={
         0x1, 0x2, 0x4, 0x8, 0x10, 0x20,
         0x40, 0x80, 0x100, 0x200, 0x400, 0x800,
@@ -148,6 +149,25 @@ static unsigned long nbits[32]={
         0x1000000, 0x2000000, 0x4000000, 0x8000000, 0x10000000, 0x20000000,
         0x40000000, 0x80000000
 };
+*/
+static unsigned long nbits[64]={
+        0x1,                 0x2,                 0x4,                 0x8,
+        0x10,                0x20,                0x40,                0x80,
+        0x100,               0x200,               0x400,               0x800,
+        0x1000,              0x2000,              0x4000,              0x8000,
+        0x10000,             0x20000,             0x40000,             0x80000,
+        0x100000,            0x200000,            0x400000,            0x800000,
+        0x1000000,           0x2000000,           0x4000000,           0x8000000,
+        0x10000000,          0x20000000,          0x40000000,          0x80000000,
+        0x100000000,         0x200000000,         0x400000000,         0x800000000,
+        0x1000000000,        0x2000000000,        0x4000000000,        0x8000000000,
+        0x10000000000,       0x20000000000,       0x40000000000,       0x80000000000,
+        0x100000000000,      0x200000000000,      0x400000000000,      0x800000000000,
+        0x1000000000000,     0x2000000000000,     0x4000000000000,     0x8000000000000,
+        0x10000000000000,    0x20000000000000,    0x40000000000000,    0x80000000000000,
+        0x100000000000000,   0x200000000000000,   0x400000000000000,   0x800000000000000,
+        0x1000000000000000,  0x2000000000000000,  0x4000000000000000,  0x8000000000000000
+};
 
 static int number_of_bits(unsigned long x, long* result)
 {
diff --git a/src/grib_api.h b/src/grib_api.h
index fc3e4e1..eedbdb4 100644
--- a/src/grib_api.h
+++ b/src/grib_api.h
@@ -209,7 +209,7 @@ typedef struct grib_points  grib_points;
     \ingroup keys_iterator
 */
 typedef struct grib_keys_iterator    grib_keys_iterator;
-
+typedef struct bufr_keys_iterator    bufr_keys_iterator;
 
 typedef struct grib_fieldset grib_fieldset;
 
@@ -1254,31 +1254,36 @@ attributes or by the namespace they belong to.
 *                       and namespace
 */
 grib_keys_iterator* grib_keys_iterator_new(grib_handle* h,unsigned long filter_flags, const char* name_space);
+bufr_keys_iterator* codes_bufr_keys_iterator_new(grib_handle* h, unsigned long filter_flags);
+bufr_keys_iterator* codes_bufr_data_section_keys_iterator_new(grib_handle* h);
 
 /*! Step to the next iterator.
 *  @param kiter         : valid grib_keys_iterator
 *  @return              1 if next iterator exists, 0 if no more elements to iterate on
 */
-int grib_keys_iterator_next(grib_keys_iterator *kiter);
-
+int grib_keys_iterator_next(grib_keys_iterator* kiter);
+int codes_bufr_keys_iterator_next(bufr_keys_iterator* kiter);
 
 /*! get the key name from the iterator
 *  @param kiter         : valid grib_keys_iterator
 *  @return              key name
 */
 const char* grib_keys_iterator_get_name(grib_keys_iterator *kiter);
+char* codes_bufr_keys_iterator_get_name(bufr_keys_iterator* kiter);
 
 /*! Delete the iterator.
 *  @param kiter         : valid grib_keys_iterator
 *  @return              0 if OK, integer value on error
 */
-int grib_keys_iterator_delete( grib_keys_iterator* kiter);
+int grib_keys_iterator_delete(grib_keys_iterator* kiter);
+int codes_bufr_keys_iterator_delete(bufr_keys_iterator* kiter);
 
 /*! Rewind the iterator.
 *  @param kiter         : valid grib_keys_iterator
 *  @return              0 if OK, integer value on error
 */
 int grib_keys_iterator_rewind(grib_keys_iterator* kiter);
+int codes_bufr_keys_iterator_rewind(bufr_keys_iterator* kiter);
 
 int grib_keys_iterator_set_flags(grib_keys_iterator *kiter,unsigned long flags);
 
diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h
index e5dfa4f..4003172 100644
--- a/src/grib_api_internal.h
+++ b/src/grib_api_internal.h
@@ -1348,12 +1348,11 @@ struct grib_action_file_list
     grib_action_file * last ;
 };
 
-/* keys iterator common to grib and bufr*/
+/* Common keys iterator */
 struct grib_keys_iterator{
   grib_handle     *handle;
   unsigned long   filter_flags;     /** flags to filter out accessors */
   unsigned long   accessor_flags_skip;
-  unsigned long   accessor_flags_only;
   grib_accessor   *current;
   char            *name_space;
   int             at_start;
@@ -1364,6 +1363,21 @@ struct grib_keys_iterator{
   grib_trie       *seen;
 };
 
+/* BUFR-specific keys iterator */
+struct bufr_keys_iterator{
+  grib_handle*      handle;
+  unsigned long     filter_flags;     /** flags to filter out accessors */
+  unsigned long     accessor_flags_skip;
+  unsigned long     accessor_flags_only;
+  grib_accessor*    current;
+  grib_string_list* names;
+  int               at_start;
+  int               match;
+  int               i_curr_attribute;
+  grib_accessor**   attributes;
+  char*             prefix;
+  grib_trie*        seen;
+};
 
 /* ----------*/
 /* md5 */
diff --git a/src/grib_api_prototypes.h b/src/grib_api_prototypes.h
index b8a06b9..be3e1e9 100644
--- a/src/grib_api_prototypes.h
+++ b/src/grib_api_prototypes.h
@@ -172,7 +172,6 @@ void grib_hash_array_value_delete(grib_context *c, grib_hash_array_value *v);
 /* grib_bufr_descriptor.c */
 bufr_descriptor *grib_bufr_descriptor_new(grib_accessor *tables_accessor, int code, int *err);
 bufr_descriptor *grib_bufr_descriptor_clone(bufr_descriptor *d);
-void grib_bufr_descriptor_set_values(bufr_descriptor *v, int scale, int reference, int width);
 int grib_bufr_descriptor_set_code(grib_accessor *tables_accessor, int code, bufr_descriptor *v);
 void grib_bufr_descriptor_set_reference(bufr_descriptor *v, double reference);
 void grib_bufr_descriptor_set_width(bufr_descriptor *v, long width);
@@ -1145,13 +1144,13 @@ int grib_keys_iterator_get_bytes(grib_keys_iterator *kiter, unsigned char *v, si
 int grib_keys_iterator_get_native_type(grib_keys_iterator *kiter);
 
 /* bufr_keys_iterator.c */
-grib_keys_iterator *codes_bufr_keys_iterator_new(grib_handle *h);
-grib_keys_iterator *codes_bufr_data_section_keys_iterator_new(grib_handle *h);
-int codes_bufr_keys_iterator_rewind(grib_keys_iterator *ki);
-int codes_bufr_keys_iterator_next(grib_keys_iterator *kiter);
-char *codes_bufr_keys_iterator_get_name(grib_keys_iterator *kiter);
-grib_accessor *codes_bufr_keys_iterator_get_accessor(grib_keys_iterator *kiter);
-int codes_bufr_keys_iterator_delete(grib_keys_iterator *kiter);
+bufr_keys_iterator *codes_bufr_keys_iterator_new(grib_handle *h, unsigned long filter_flags);
+bufr_keys_iterator *codes_bufr_data_section_keys_iterator_new(grib_handle *h);
+int codes_bufr_keys_iterator_rewind(bufr_keys_iterator *ki);
+int codes_bufr_keys_iterator_next(bufr_keys_iterator *kiter);
+char *codes_bufr_keys_iterator_get_name(bufr_keys_iterator *kiter);
+grib_accessor *codes_bufr_keys_iterator_get_accessor(bufr_keys_iterator *kiter);
+int codes_bufr_keys_iterator_delete(bufr_keys_iterator *kiter);
 
 /* grib_parse_utils.c */
 int grib_recompose_name(grib_handle *h, grib_accessor *observer, const char *uname, char *fname, int fail);
diff --git a/src/grib_api_version.c b/src/grib_api_version.c
index b1a97a5..26e4185 100644
--- a/src/grib_api_version.c
+++ b/src/grib_api_version.c
@@ -1,3 +1,3 @@
 #include "grib_api_internal.h"
 
-const char * grib_get_git_sha1() { return "e289147972863677962a948542daae0d510fcf7f"; }
+const char * grib_get_git_sha1() { return "58c63967ad2e7f6da14d0565a2d0f9dac5f07bea"; }
diff --git a/src/grib_bits.c b/src/grib_bits.c
index df54116..d18ffee 100644
--- a/src/grib_bits.c
+++ b/src/grib_bits.c
@@ -18,7 +18,7 @@
 #include "omp.h"
 #endif
 
-#define mask1(i)    (1u << i)
+#define mask1(i)    (1UL << i)
 #define test(n,i)    !!((n) & mask1(i))
 
 long GRIB_MASK = -1;       /* Mask of sword bits */
diff --git a/src/grib_bufr_descriptor.c b/src/grib_bufr_descriptor.c
index 0c062e2..3b84716 100644
--- a/src/grib_bufr_descriptor.c
+++ b/src/grib_bufr_descriptor.c
@@ -42,13 +42,6 @@ bufr_descriptor* grib_bufr_descriptor_clone(bufr_descriptor* d) {
   return cd;
 }
 
-void grib_bufr_descriptor_set_values(bufr_descriptor* v,int scale,int reference,int width) {
-  if (!v) return;
-  v->scale=scale;
-  v->width=width;
-  v->factor=grib_power(-scale,10);
-}
-
 int grib_bufr_descriptor_set_code(grib_accessor* tables_accessor,int code,bufr_descriptor* v) {
   int err=0;
   grib_context* c;
diff --git a/src/grib_context.c b/src/grib_context.c
index ee19173..4202933 100644
--- a/src/grib_context.c
+++ b/src/grib_context.c
@@ -772,7 +772,7 @@ void* grib_context_malloc_persistent(const grib_context* c, size_t size)
     void* p =  c->alloc_persistent_mem(c,size);
     if(!p) {
         grib_context_log(c,GRIB_LOG_FATAL,"grib_context_malloc: error allocating %lu bytes",(unsigned long)size);
-        Assert(1);
+        Assert(0);
     }
     return p;
 }
@@ -799,7 +799,7 @@ void* grib_context_malloc(const grib_context* c, size_t size)
     else p=c->alloc_mem(c,size);
     if(!p) {
         grib_context_log(c,GRIB_LOG_FATAL,"grib_context_malloc: error allocating %lu bytes",(unsigned long)size);
-        Assert(1);
+        Assert(0);
     }
     return p;
 }
diff --git a/src/grib_dumper_class_bufr_encode_C.c b/src/grib_dumper_class_bufr_encode_C.c
index 042712a..310ee95 100644
--- a/src/grib_dumper_class_bufr_encode_C.c
+++ b/src/grib_dumper_class_bufr_encode_C.c
@@ -386,12 +386,20 @@ static void dump_long(grib_dumper* d,grib_accessor* a, const char* comment)
     } else {
         r=compute_bufr_key_rank(h,self->keys,a->name);
         if( !grib_is_missing_long(a,value) ) {
-            if (r!=0)
+            int doing_unexpandedDescriptors=0;
+            if (r!=0) {
                 fprintf(self->dumper.out,"  CODES_CHECK(codes_set_long(h, \"#%d#%s\", ", r,a->name);
-            else
+            } else {
+                if (strcmp(a->name, "unexpandedDescriptors")==0) {
+                    doing_unexpandedDescriptors=1;
+                    fprintf(self->dumper.out,"\n  /* Create the structure of the data section */\n");
+                }
                 fprintf(self->dumper.out,"  CODES_CHECK(codes_set_long(h, \"%s\", ", a->name);
+            }
 
             fprintf(self->dumper.out,"%ld), 0);\n",value);
+            if (doing_unexpandedDescriptors)
+                fprintf(self->dumper.out,"\n");
         }
     }
 
@@ -802,7 +810,8 @@ static void header(grib_dumper* d, grib_handle* h)
 static void footer(grib_dumper* d, grib_handle* h)
 {
     grib_dumper_bufr_encode_C *self = (grib_dumper_bufr_encode_C*)d;
-    fprintf(self->dumper.out,"\n  CODES_CHECK(codes_set_long(h, \"pack\", 1), 0);\n");
+    fprintf(self->dumper.out,"\n  /* Encode the keys back in the data section */\n");
+    fprintf(self->dumper.out,"  CODES_CHECK(codes_set_long(h, \"pack\", 1), 0);\n\n");
     if (d->count==1)
         fprintf(self->dumper.out,"  fout = fopen(\"outfile.bufr\", \"w\");\n");
     else
diff --git a/src/grib_dumper_class_bufr_encode_fortran.c b/src/grib_dumper_class_bufr_encode_fortran.c
index 6302e5b..a312ad8 100644
--- a/src/grib_dumper_class_bufr_encode_fortran.c
+++ b/src/grib_dumper_class_bufr_encode_fortran.c
@@ -393,12 +393,20 @@ static void dump_long(grib_dumper* d,grib_accessor* a, const char* comment)
     } else {
         r=compute_bufr_key_rank(h,self->keys,a->name);
         if( !grib_is_missing_long(a,value) ) {
-            if (r!=0)
+            int doing_unexpandedDescriptors=0;
+            if (r!=0) {
                 fprintf(self->dumper.out,"  call codes_set(ibufr,'#%d#%s',",r,a->name);
-            else
+            } else {
+                if (strcmp(a->name, "unexpandedDescriptors")==0) {
+                    doing_unexpandedDescriptors=1;
+                    fprintf(self->dumper.out,"\n  ! Create the structure of the data section\n");
+                }
                 fprintf(self->dumper.out,"  call codes_set(ibufr,'%s',",a->name);
+            }
 
             fprintf(self->dumper.out,"%ld)\n",value);
+            if (doing_unexpandedDescriptors)
+                fprintf(self->dumper.out,"\n");
         }
     }
 
@@ -807,7 +815,8 @@ static void header(grib_dumper* d, grib_handle* h)
 static void footer(grib_dumper* d, grib_handle* h)
 {
     grib_dumper_bufr_encode_fortran *self = (grib_dumper_bufr_encode_fortran*)d;
-    fprintf(self->dumper.out,"  call codes_set(ibufr,'pack',1)\n");
+    fprintf(self->dumper.out,"\n  ! Encode the keys back in the data section\n");
+    fprintf(self->dumper.out,"  call codes_set(ibufr,'pack',1)\n\n");
     if (d->count==1)
         fprintf(self->dumper.out,"  call codes_open_file(outfile,'outfile.bufr','w')\n");
     else
diff --git a/src/grib_dumper_class_bufr_encode_python.c b/src/grib_dumper_class_bufr_encode_python.c
index 747ea48..15df835 100644
--- a/src/grib_dumper_class_bufr_encode_python.c
+++ b/src/grib_dumper_class_bufr_encode_python.c
@@ -379,12 +379,20 @@ static void dump_long(grib_dumper* d, grib_accessor* a, const char* comment)
     } else {
         r=compute_bufr_key_rank(h,self->keys,a->name);
         if( !grib_is_missing_long(a,value) ) {
-            if (r!=0)
+            int doing_unexpandedDescriptors=0;
+            if (r!=0) {
                 fprintf(self->dumper.out,"    codes_set(ibufr, '#%d#%s', ",r,a->name);
-            else
+            } else {
+                if (strcmp(a->name, "unexpandedDescriptors")==0) {
+                    doing_unexpandedDescriptors=1;
+                    fprintf(self->dumper.out,"\n    # Create the structure of the data section\n");
+                }
                 fprintf(self->dumper.out,"    codes_set(ibufr, '%s', ",a->name);
+            }
 
             fprintf(self->dumper.out,"%ld)\n",value);
+            if (doing_unexpandedDescriptors)
+                fprintf(self->dumper.out,"\n");
         }
     }
 
@@ -559,9 +567,9 @@ static void dump_string_array(grib_dumper* d,grib_accessor* a,const char* commen
 
     if (self->isLeaf==0) {
         if ((r=compute_bufr_key_rank(h,self->keys,a->name))!=0)
-            fprintf(self->dumper.out,"    codes_set_string_array(ibufr, '#%d#%s', svalues)\n",r,a->name);
+            fprintf(self->dumper.out,"    codes_set_array(ibufr, '#%d#%s', svalues)\n",r,a->name);
         else
-            fprintf(self->dumper.out,"    codes_set_string_array(ibufr, '%s', svalues)\n",a->name);
+            fprintf(self->dumper.out,"    codes_set_array(ibufr, '%s', svalues)\n",a->name);
     }
 
     if (self->isLeaf==0) {
@@ -777,7 +785,8 @@ static void header(grib_dumper* d, grib_handle* h)
 static void footer(grib_dumper* d, grib_handle* h)
 {
     grib_dumper_bufr_encode_python *self = (grib_dumper_bufr_encode_python*)d;
-    fprintf(self->dumper.out,"    codes_set(ibufr, 'pack', 1)\n");
+    fprintf(self->dumper.out,"\n    # Encode the keys back in the data section\n");
+    fprintf(self->dumper.out,"    codes_set(ibufr, 'pack', 1)\n\n");
     if (d->count==1)
         fprintf(self->dumper.out,"    outfile = open('outfile.bufr', 'w')\n");
     else
diff --git a/src/grib_handle.c b/src/grib_handle.c
index 1c53e8a..bb1223c 100644
--- a/src/grib_handle.c
+++ b/src/grib_handle.c
@@ -317,7 +317,9 @@ int grib_write_message(grib_handle* h,const char* file,const char* mode)
 
 grib_handle* grib_handle_clone ( grib_handle* h )
 {
-    return grib_handle_new_from_message_copy ( h->context, h->buffer->data, h->buffer->ulength );
+    grib_handle* result = grib_handle_new_from_message_copy ( h->context, h->buffer->data, h->buffer->ulength );
+    result->product_kind = h->product_kind;
+    return result;
 }
 
 grib_handle* codes_handle_new_from_file(grib_context* c, FILE* f, ProductKind product, int* error)
@@ -798,6 +800,7 @@ grib_handle* gts_new_from_file( grib_context* c, FILE* f,int *error )
     gl->product_kind = PRODUCT_GTS;
     grib_context_increment_handle_file_count(c);
     grib_context_increment_handle_total_count(c);
+    if (gl->offset == 0) grib_context_set_handle_file_count(c,1);
 
     return gl;
 }
@@ -836,6 +839,7 @@ grib_handle* taf_new_from_file( grib_context* c, FILE* f,int *error )
     gl->product_kind = PRODUCT_TAF;
     grib_context_increment_handle_file_count(c);
     grib_context_increment_handle_total_count(c);
+    if (gl->offset == 0) grib_context_set_handle_file_count(c,1);
 
     return gl;
 }
@@ -874,6 +878,7 @@ grib_handle* metar_new_from_file( grib_context* c, FILE* f,int *error )
     gl->product_kind = PRODUCT_METAR;
     grib_context_increment_handle_file_count(c);
     grib_context_increment_handle_total_count(c);
+    if (gl->offset == 0) grib_context_set_handle_file_count(c,1);
 
     return gl;
 }
@@ -912,6 +917,7 @@ grib_handle* bufr_new_from_file( grib_context* c, FILE* f,int *error )
     gl->product_kind = PRODUCT_BUFR;
     grib_context_increment_handle_file_count(c);
     grib_context_increment_handle_total_count(c);
+    if (gl->offset == 0) grib_context_set_handle_file_count(c,1);
 
     return gl;
 }
@@ -950,6 +956,7 @@ grib_handle* any_new_from_file( grib_context* c, FILE* f,int *error )
     gl->product_kind = PRODUCT_ANY;
     grib_context_increment_handle_file_count(c);
     grib_context_increment_handle_total_count(c);
+    if (gl->offset == 0) grib_context_set_handle_file_count(c,1);
 
     return gl;
 }
diff --git a/src/grib_keys_iterator.c b/src/grib_keys_iterator.c
index b8818f9..d27b5bb 100644
--- a/src/grib_keys_iterator.c
+++ b/src/grib_keys_iterator.c
@@ -23,6 +23,12 @@ grib_keys_iterator* grib_keys_iterator_new(grib_handle* h,unsigned long filter_f
 
     if (!h) return NULL;
 
+    /*if (h->product_kind == PRODUCT_BUFR) {
+        grib_context_log(h->context, GRIB_LOG_ERROR,
+                         "Invalid keys iterator for BUFR message: please use codes_bufr_keys_iterator_new");
+        return NULL;
+    }*/
+
     ki= (grib_keys_iterator*)grib_context_malloc_clear(h->context,sizeof(grib_keys_iterator));
     if (!ki) return NULL;
 
diff --git a/src/grib_scaling.c b/src/grib_scaling.c
index 1eb5f2f..ce45e23 100644
--- a/src/grib_scaling.c
+++ b/src/grib_scaling.c
@@ -18,6 +18,8 @@
 double grib_power(long s,long n)
 {
     double divisor = 1.0;
+    if (s==0) return 1.0;
+    if (s==1) return n;
     while(s < 0)
     {
         divisor /= n;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 69a3e73..84c5a23 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -25,6 +25,7 @@ list( APPEND test_bins
       optimize_scaling
       optimize_scaling_sh
       ecc-386
+      bufr_get_element
 )
 
 foreach( tool ${test_bins} )
@@ -67,6 +68,7 @@ list( APPEND tests_data_reqd
     bufr_ls
     bufr_change_edition
     bufr_keys_iter
+    bufr_get_element
     ecc-197
     ecc-286
     ecc-288
diff --git a/tests/badgrib.sh b/tests/badgrib.sh
index 2403dd2..1103a31 100755
--- a/tests/badgrib.sh
+++ b/tests/badgrib.sh
@@ -12,5 +12,5 @@
 
 REDIRECT=/dev/null
 
-${tools_dir}grib_ls -7 ${data_dir}/bad.grib 2> $REDIRECT > $REDIRECT
+${tools_dir}/grib_ls -7 ${data_dir}/bad.grib 2> $REDIRECT > $REDIRECT
 
diff --git a/tests/bitmap.sh b/tests/bitmap.sh
index 4ac9004..e401508 100755
--- a/tests/bitmap.sh
+++ b/tests/bitmap.sh
@@ -20,20 +20,20 @@ outfile1=${data_dir}/without_bitmap.grib1
 
 rm -f $outfile
 
-${tools_dir}grib_set -s bitmapPresent=1 $infile $outfile >$REDIRECT
+${tools_dir}/grib_set -s bitmapPresent=1 $infile $outfile >$REDIRECT
 
-${tools_dir}grib_dump -O $infile  | grep -v FILE > $infile.dump
-${tools_dir}grib_dump -O $outfile | grep -v FILE  > $outfile.dump
+${tools_dir}/grib_dump -O $infile  | grep -v FILE > $infile.dump
+${tools_dir}/grib_dump -O $outfile | grep -v FILE  > $outfile.dump
 
 diff $outfile.dump ${data_dir}/bitmap.diff
 diff $infile.dump ${data_dir}/no_bitmap.diff
 
 rm -f $infile.dump $outfile.dump || true
 
-${tools_dir}grib_set -s bitmapPresent=0 $outfile $outfile1 >$REDIRECT
+${tools_dir}/grib_set -s bitmapPresent=0 $outfile $outfile1 >$REDIRECT
 
-${tools_dir}grib_dump -O $outfile1 | grep -v FILE > $outfile1.dump
-${tools_dir}grib_dump -O $outfile  | grep -v FILE> $outfile.dump
+${tools_dir}/grib_dump -O $outfile1 | grep -v FILE > $outfile1.dump
+${tools_dir}/grib_dump -O $outfile  | grep -v FILE> $outfile.dump
 
 diff $outfile1.dump ${data_dir}/no_bitmap.diff
 
@@ -48,12 +48,12 @@ set values={1,2,3,4,5,6,7,1111,1111,8,9,10};
 write ;
 EOF
 
-${tools_dir}grib_filter -o out.bmp.grib1 bitmap.rules $grib1 
-${tools_dir}grib_filter -o out.bmp.grib2 bitmap.rules $grib2
+${tools_dir}/grib_filter -o out.bmp.grib1 bitmap.rules $grib1 
+${tools_dir}/grib_filter -o out.bmp.grib2 bitmap.rules $grib2
 #exit 0
 
-${tools_dir}grib_get_data -m missing out.bmp.grib1 > out.bmp.grib1.data
-${tools_dir}grib_get_data -m missing out.bmp.grib2 > out.bmp.grib2.data
+${tools_dir}/grib_get_data -m missing out.bmp.grib1 > out.bmp.grib1.data
+${tools_dir}/grib_get_data -m missing out.bmp.grib2 > out.bmp.grib2.data
 
 diff out.bmp.grib1.data out.bmp.grib2.data
 
diff --git a/tests/bitsPerValue.sh b/tests/bitsPerValue.sh
index 5d10b3d..9867e67 100755
--- a/tests/bitsPerValue.sh
+++ b/tests/bitsPerValue.sh
@@ -88,7 +88,7 @@ v.grib2
 for file in $files; do
   infile=${data_dir}/$file
   if [ -f "$infile" ]; then
-    ${tools_dir}grib_get -p bitsPerValue $infile >/dev/null
+    ${tools_dir}/grib_get -p bitsPerValue $infile >/dev/null
   fi
 done
 
@@ -102,16 +102,16 @@ for file in `echo $files`; do
   outfile1=${infile}_bitsPerValue_1
   outfile2=${infile}_bitsPerValue_2
 
-  ${tools_dir}grib_set -r -s bitsPerValue=10 $infile $outfile1
+  ${tools_dir}/grib_set -r -s bitsPerValue=10 $infile $outfile1
 
-  ${tools_dir}grib_set -s setBitsPerValue=10 $infile $outfile2
+  ${tools_dir}/grib_set -s setBitsPerValue=10 $infile $outfile2
 
-  ${tools_dir}grib_compare $outfile1 $outfile2
+  ${tools_dir}/grib_compare $outfile1 $outfile2
 
   rm -f $outfile1 $outfile2 || true
 
 done
 
 # Extra test for grid_complex_spatial_differencing
-res=`${tools_dir}grib_get -p decimalScaleFactor,bitsPerValue ${data_dir}/gfs.c255.grib2`
+res=`${tools_dir}/grib_get -p decimalScaleFactor,bitsPerValue ${data_dir}/gfs.c255.grib2`
 [ "$res" = "1 20" ]
diff --git a/tests/budg.sh b/tests/budg.sh
index e6333e0..38d9614 100755
--- a/tests/budg.sh
+++ b/tests/budg.sh
@@ -13,6 +13,6 @@
 
 REDIRECT=/dev/null
 
-${tools_dir}grib_ls ${data_dir}/budg > $REDIRECT
-${tools_dir}grib_dump ${data_dir}/budg > $REDIRECT
+${tools_dir}/grib_ls ${data_dir}/budg > $REDIRECT
+${tools_dir}/grib_dump ${data_dir}/budg > $REDIRECT
 
diff --git a/tests/bufr_change_edition.sh b/tests/bufr_change_edition.sh
index b4d1d12..ca5788b 100755
--- a/tests/bufr_change_edition.sh
+++ b/tests/bufr_change_edition.sh
@@ -23,10 +23,10 @@ for f in ${bufr_files}; do
   if [ "$f" = "ias1_240.bufr" ]; then continue; fi
   
   # Convert to BUFR edition 4
-  ${tools_dir}bufr_set -s editionNumber=4 $f $fBufrTmp
-  ${tools_dir}bufr_compare -b edition $f $fBufrTmp
+  ${tools_dir}/bufr_set -s editionNumber=4 $f $fBufrTmp
+  ${tools_dir}/bufr_compare -b edition $f $fBufrTmp
   
-  ed=`${tools_dir}bufr_get -w count=1 -p editionNumber $fBufrTmp`
+  ed=`${tools_dir}/bufr_get -w count=1 -p editionNumber $fBufrTmp`
   [ "$ed" = "4" ]
 
 done
diff --git a/tests/bufr_compare.sh b/tests/bufr_compare.sh
index 4728e57..30ca5df 100755
--- a/tests/bufr_compare.sh
+++ b/tests/bufr_compare.sh
@@ -35,7 +35,7 @@ fRules=${label}.filter
 f="syno_1.bufr"
 echo "Test: comparing the same files" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}/bufr_compare $f $f >> $fLog
+${tools_dir}//bufr_compare $f $f >> $fLog
 
 #----------------------------------------------------
 # Test: comparing two completely different files
@@ -45,7 +45,7 @@ f1="syno_1.bufr"
 f2="aaen_55.bufr"
 echo "Test: comparing two completely different files" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}/bufr_compare $f1 $f2 >> $fLog
+${tools_dir}//bufr_compare $f1 $f2 >> $fLog
 if [ $? -eq 0 ]; then
    echo "bufr_compare should have failed if files are completely different" >&2
    exit 1
@@ -60,10 +60,10 @@ echo "Test: comparing with and witout the -b switch" >> $fLog
 echo "file: $f" >> $fLog
 
 #Alter a key in the file 
-${tools_dir}/bufr_set -s dataCategory=2 $f ${fBufrTmp} >> $fLog
+${tools_dir}//bufr_set -s dataCategory=2 $f ${fBufrTmp} >> $fLog
 
 set +e
-${tools_dir}/bufr_compare $f ${fBufrTmp}>> $fLog
+${tools_dir}//bufr_compare $f ${fBufrTmp}>> $fLog
 if [ $? -eq 0 ]; then
    echo "bufr_compare should have failed if files are different" >&2
    exit 1
@@ -71,7 +71,7 @@ fi
 set -e
 
 # Now compare with -b switch. No difference should be found.
-${tools_dir}/bufr_compare -b dataCategory $f ${fBufrTmp}>> $fLog
+${tools_dir}//bufr_compare -b dataCategory $f ${fBufrTmp}>> $fLog
 
 #----------------------------------------------------
 # Test: comparing with the -r switch
@@ -81,20 +81,20 @@ ${tools_dir}/bufr_compare -b dataCategory $f ${fBufrTmp}>> $fLog
 #cat temp_101.bufr syno_multi.bufr > $fBufrInput2
 
 #set +e
-#${tools_dir}/bufr_compare ${fBufrInput1} ${fBufrInput2} >> $fLog
+#${tools_dir}//bufr_compare ${fBufrInput1} ${fBufrInput2} >> $fLog
 #if [ $? -eq 0 ]; then
 #   echo "bufr_compare should have failed if the message order in the files is different" >&2
 #   exit 1
 #fi
 #set -e
-#${tools_dir}/bufr_compare -r ${fBufrInput1} ${fBufrInput2}>> $fLog
+#${tools_dir}//bufr_compare -r ${fBufrInput1} ${fBufrInput2}>> $fLog
 
 #----------------------------------------------------
 # Change subCentre and compare
 #----------------------------------------------------
-${tools_dir}bufr_set -s bufrHeaderSubCentre=12 aaen_55.bufr $fBufrTmp
+${tools_dir}/bufr_set -s bufrHeaderSubCentre=12 aaen_55.bufr $fBufrTmp
 set +e
-${tools_dir}bufr_compare aaen_55.bufr $fBufrTmp > $fLog 2>&1
+${tools_dir}/bufr_compare aaen_55.bufr $fBufrTmp > $fLog 2>&1
 status=$?
 set -e
 [ $status -eq 1 ]
@@ -107,14 +107,14 @@ temp_dir=tempdir.${label}
 mkdir -p $temp_dir
 infile=aaen_55.bufr
 cp $infile $temp_dir
-${tools_dir}bufr_compare $infile $temp_dir >/dev/null
+${tools_dir}/bufr_compare $infile $temp_dir >/dev/null
 rm -fr $temp_dir
 
 #----------------------------------------------------
 # Compare attributes
 #----------------------------------------------------
 set +e
-${tools_dir}bufr_compare amv2_87.bufr amv3_87.bufr > $fLog 2>&1
+${tools_dir}/bufr_compare amv2_87.bufr amv3_87.bufr > $fLog 2>&1
 status=$?
 set -e
 [ $status -eq 1 ]
@@ -134,9 +134,9 @@ cat > $fRules <<EOF
  set pack=1;
  write;
 EOF
-${tools_dir}codes_bufr_filter -o $fBufrTmp $fRules $f
+${tools_dir}/codes_bufr_filter -o $fBufrTmp $fRules $f
 # Header keys have not changed
-${tools_dir}bufr_compare -H $f $fBufrTmp
+${tools_dir}/bufr_compare -H $f $fBufrTmp
 
 #Clean up
 rm -f $fLog $fBufrTmp $fBufrInput1 $fBufrInput2 $fRules
diff --git a/tests/bufr_count.sh b/tests/bufr_count.sh
index e132845..5055525 100755
--- a/tests/bufr_count.sh
+++ b/tests/bufr_count.sh
@@ -16,7 +16,7 @@
 cd ${data_dir}/bufr
 
 # counting messages
-count=`${tools_dir}bufr_count syno_multi.bufr`
+count=`${tools_dir}/bufr_count syno_multi.bufr`
 #[ "$count" = "3" ]
-count=`${tools_dir}codes_count syno_multi.bufr`
+count=`${tools_dir}/codes_count syno_multi.bufr`
 [ "$count" = "3" ]
diff --git a/tests/bufr_dump.sh b/tests/bufr_dump.sh
index c82f991..0cf6b12 100755
--- a/tests/bufr_dump.sh
+++ b/tests/bufr_dump.sh
@@ -29,7 +29,7 @@ REDIRECT=/dev/null
 
 for file in ${bufr_files}
 do
-  ${tools_dir}bufr_dump -O ${data_dir}/bufr/$file >/dev/null
+  ${tools_dir}/bufr_dump -O ${data_dir}/bufr/$file >/dev/null
 done
 
 #==============================================
@@ -39,11 +39,11 @@ file="aaen_55.bufr"
 export ECCODES_DEBUG=1
 
 # By default debug output goes to stderr
-${tools_dir}bufr_dump -O ${data_dir}/bufr/$file 2>&1 | grep -q "BUFR data .*ing"
+${tools_dir}/bufr_dump -O ${data_dir}/bufr/$file 2>&1 | grep -q "BUFR data .*ing"
 
 # Redirect it to stdout
 export ECCODES_LOG_STREAM=stdout
-${tools_dir}bufr_dump -O ${data_dir}/bufr/$file | grep -q "BUFR data .*ing"
+${tools_dir}/bufr_dump -O ${data_dir}/bufr/$file | grep -q "BUFR data .*ing"
 
 unset ECCODES_DEBUG
 unset ECCODES_LOG_STREAM
@@ -62,7 +62,7 @@ unset ECCODES_LOG_STREAM
 # 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
+#${tools_dir}/bufr_dump -js $fBufr > $fJsonTmp
 
 #diff $fJsonTmp $fJsonRef
 
@@ -77,7 +77,7 @@ unset ECCODES_LOG_STREAM
 #fBufr=${data_dir}/bufr/"207003.bufr"
 #fJsonRef=${data_dir}/bufr/"207003.bufr.json.ref"
 #
-#${tools_dir}bufr_dump -ja $fBufr > $fJsonTmp
+#${tools_dir}/bufr_dump -ja $fBufr > $fJsonTmp
 #
 #diff $fJsonTmp $fJsonRef
 #
diff --git a/tests/bufr_dump_decode_C.sh b/tests/bufr_dump_decode_C.sh
index 9257a95..9f38c5c 100755
--- a/tests/bufr_dump_decode_C.sh
+++ b/tests/bufr_dump_decode_C.sh
@@ -60,7 +60,7 @@ do
   filePath=${data_dir}/bufr/$file
 
   # Generate C code from BUFR file
-  ${tools_dir}bufr_dump -DC $filePath > $tempSrc
+  ${tools_dir}/bufr_dump -DC $filePath > $tempSrc
 
   # Too large for this test
   if [ "$file" = "ias1_240.bufr" ]; then
diff --git a/tests/bufr_dump_decode_filter.sh b/tests/bufr_dump_decode_filter.sh
index b4fbbcf..d787e78 100755
--- a/tests/bufr_dump_decode_filter.sh
+++ b/tests/bufr_dump_decode_filter.sh
@@ -46,9 +46,9 @@ do
     echo "Test: bufr_dump -Dfilter " >> $fLog
     echo "file: $f" >> $fLog
 
-    ${tools_dir}bufr_dump -Dfilter $f > $fRules
+    ${tools_dir}/bufr_dump -Dfilter $f > $fRules
 
-    ${tools_dir}bufr_filter $fRules $f >/dev/null
+    ${tools_dir}/bufr_filter $fRules $f >/dev/null
 
     rm -f $fRules
   fi
diff --git a/tests/bufr_dump_decode_fortran.sh b/tests/bufr_dump_decode_fortran.sh
index fe85372..39ea3b9 100755
--- a/tests/bufr_dump_decode_fortran.sh
+++ b/tests/bufr_dump_decode_fortran.sh
@@ -59,7 +59,7 @@ do
   filePath=${data_dir}/bufr/$file
 
   # Generate F90 code from BUFR file
-  ${tools_dir}bufr_dump -Dfortran ${filePath} > $tempSrc
+  ${tools_dir}/bufr_dump -Dfortran ${filePath} > $tempSrc
 
   # Too large for this test
   if [ "$file" = "ias1_240.bufr" ]; then
diff --git a/tests/bufr_dump_decode_python.sh b/tests/bufr_dump_decode_python.sh
index 24430b2..f01e943 100755
--- a/tests/bufr_dump_decode_python.sh
+++ b/tests/bufr_dump_decode_python.sh
@@ -36,7 +36,7 @@ do
   fi
 
   # Generate Python code from BUFR file
-  ${tools_dir}bufr_dump -Dpython $inputBufr > $tempSrc
+  ${tools_dir}/bufr_dump -Dpython $inputBufr > $tempSrc
 
   $PYTHON $tempSrc $inputBufr
 
diff --git a/tests/bufr_dump_encode_C.sh b/tests/bufr_dump_encode_C.sh
index 66e9504..cffc57a 100755
--- a/tests/bufr_dump_encode_C.sh
+++ b/tests/bufr_dump_encode_C.sh
@@ -60,7 +60,7 @@ do
   tempExe=$label.$file.exe
 
   # Generate C code from BUFR file
-  ${tools_dir}bufr_dump -EC ${data_dir}/bufr/$file > $tempSrc
+  ${tools_dir}/bufr_dump -EC ${data_dir}/bufr/$file > $tempSrc
 
   # Too large for this test
   if [ "$file" = "ias1_240.bufr" ]; then
@@ -79,12 +79,12 @@ do
     # The executable always creates a file called outfile.bufr
     # valgrind --error-exitcode=1  ./$tempExe
     ./$tempExe
-    ${tools_dir}bufr_compare ${data_dir}/bufr/$file $tempBufr
+    ${tools_dir}/bufr_compare ${data_dir}/bufr/$file $tempBufr
 
     TEMP_JSON1=${label}.$file.json
     TEMP_JSON2=${label}.$tempBufr.json
-    ${tools_dir}bufr_dump ${data_dir}/bufr/$file > $TEMP_JSON1
-    ${tools_dir}bufr_dump $tempBufr              > $TEMP_JSON2
+    ${tools_dir}/bufr_dump ${data_dir}/bufr/$file > $TEMP_JSON1
+    ${tools_dir}/bufr_dump $tempBufr              > $TEMP_JSON2
     diff $TEMP_JSON1 $TEMP_JSON2
     rm -f $TEMP_JSON1 $TEMP_JSON2
   fi
diff --git a/tests/bufr_dump_encode_filter.sh b/tests/bufr_dump_encode_filter.sh
index f4e7294..62bc82a 100755
--- a/tests/bufr_dump_encode_filter.sh
+++ b/tests/bufr_dump_encode_filter.sh
@@ -49,15 +49,15 @@ do
     echo "Test: bufr_dump -Efilter " >> $fLog
     echo "file: $f" >> $fLog
 
-    ${tools_dir}bufr_dump -Efilter $f > $fRules
+    ${tools_dir}/bufr_dump -Efilter $f > $fRules
 
-    ${tools_dir}bufr_filter -o $fBufrTmp $fRules $f
-    ${tools_dir}bufr_compare $fBufrTmp $f
+    ${tools_dir}/bufr_filter -o $fBufrTmp $fRules $f
+    ${tools_dir}/bufr_compare $fBufrTmp $f
 
     TEMP_JSON1=${label}.$f.json
     TEMP_JSON2=${label}.$fBufrTmp.json
-    ${tools_dir}bufr_dump $f        > $TEMP_JSON1
-    ${tools_dir}bufr_dump $fBufrTmp > $TEMP_JSON2
+    ${tools_dir}/bufr_dump $f        > $TEMP_JSON1
+    ${tools_dir}/bufr_dump $fBufrTmp > $TEMP_JSON2
     diff $TEMP_JSON1 $TEMP_JSON2
     rm -f $TEMP_JSON1 $TEMP_JSON2
 
diff --git a/tests/bufr_dump_encode_fortran.sh b/tests/bufr_dump_encode_fortran.sh
index 8fab667..4f14572 100755
--- a/tests/bufr_dump_encode_fortran.sh
+++ b/tests/bufr_dump_encode_fortran.sh
@@ -58,7 +58,7 @@ do
   tempExe=$label.$file.exe
 
   # Generate F90 code from BUFR file
-  ${tools_dir}bufr_dump -Efortran ${data_dir}/bufr/$file > $tempSrc
+  ${tools_dir}/bufr_dump -Efortran ${data_dir}/bufr/$file > $tempSrc
 
   # Too large for this test
   if [ "$file" = "ias1_240.bufr" ]; then
@@ -71,12 +71,12 @@ do
     # The executable always creates a file called outfile.bufr
     # valgrind --error-exitcode=1  ./$tempExe
     ./$tempExe
-    ${tools_dir}bufr_compare ${data_dir}/bufr/$file $tempBufr
+    ${tools_dir}/bufr_compare ${data_dir}/bufr/$file $tempBufr
 
     TEMP_JSON1=${label}.$file.json
     TEMP_JSON2=${label}.$tempBufr.json
-    ${tools_dir}bufr_dump ${data_dir}/bufr/$file > $TEMP_JSON1
-    ${tools_dir}bufr_dump $tempBufr              > $TEMP_JSON2
+    ${tools_dir}/bufr_dump ${data_dir}/bufr/$file > $TEMP_JSON1
+    ${tools_dir}/bufr_dump $tempBufr              > $TEMP_JSON2
     diff $TEMP_JSON1 $TEMP_JSON2
     rm -f $TEMP_JSON1 $TEMP_JSON2
   fi
diff --git a/tests/bufr_dump_encode_python.sh b/tests/bufr_dump_encode_python.sh
index ab139f5..afe506b 100755
--- a/tests/bufr_dump_encode_python.sh
+++ b/tests/bufr_dump_encode_python.sh
@@ -35,17 +35,17 @@ do
   fi
 
   # Generate Python code from BUFR file
-  ${tools_dir}bufr_dump -Epython $inputBufr > $tempSrc
+  ${tools_dir}/bufr_dump -Epython $inputBufr > $tempSrc
   # The python code always creates an output file called outfile.bufr
   $PYTHON $tempSrc
 
   # Check original BUFR file against one we generated from sample
-  ${tools_dir}bufr_compare $inputBufr $tempBufr
+  ${tools_dir}/bufr_compare $inputBufr $tempBufr
 
   TEMP_JSON1=${label}.$file.json
   TEMP_JSON2=${label}.$tempBufr.json
-  ${tools_dir}bufr_dump $inputBufr > $TEMP_JSON1
-  ${tools_dir}bufr_dump $tempBufr  > $TEMP_JSON2
+  ${tools_dir}/bufr_dump $inputBufr > $TEMP_JSON1
+  ${tools_dir}/bufr_dump $tempBufr  > $TEMP_JSON2
   diff $TEMP_JSON1 $TEMP_JSON2 2>/dev/null
   rm -f $TEMP_JSON1 $TEMP_JSON2
 
diff --git a/tests/bufr_filter.sh b/tests/bufr_filter.sh
index 322f705..85c843a 100755
--- a/tests/bufr_filter.sh
+++ b/tests/bufr_filter.sh
@@ -44,8 +44,8 @@ EOF
 bufr_files=`cat bufr_data_files.txt`
 for f in ${bufr_files} ; do
    echo "file: $f" >> $fLog
-   ${tools_dir}codes_bufr_filter $fRules $f >> $fLog
-   ${tools_dir}bufr_filter       $fRules $f >> $fLog  # See ECC-205
+   ${tools_dir}/codes_bufr_filter $fRules $f >> $fLog
+   ${tools_dir}/bufr_filter       $fRules $f >> $fLog  # See ECC-205
 done
 
 #-----------------------------------------------------------
@@ -60,7 +60,7 @@ EOF
 f="syno_multi.bufr"
 echo "Test: dump SYNOP values" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f >> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f >> $fLog
 
 #-----------------------------------------------------------
 # Test: filter SYNOP message according to conditions
@@ -81,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}codes_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
@@ -90,7 +90,7 @@ transient statid=1000*blockNumber+stationNumber;
 print "[statid]";
 EOF
 
-[ `${tools_dir}codes_bufr_filter $fRules $fBufrTmp` = "1003" ] 
+[ `${tools_dir}/codes_bufr_filter $fRules $fBufrTmp` = "1003" ] 
 
 #-----------------------------------------------------------
 # Test: splitting according to keys 
@@ -110,7 +110,7 @@ EOF
 f="syno_multi.bufr"
 echo "Test: splitting according to keys" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_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
@@ -137,9 +137,9 @@ EOF
 f="syno_1.bufr"
 echo "Test: attributes" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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
@@ -169,9 +169,9 @@ EOF
 f="temp_101.bufr"
 echo "Test: access element by rank" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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 
@@ -203,9 +203,9 @@ EOF
 f="b005_89.bufr"
 echo "Test: access marker operators" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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,
@@ -277,9 +277,9 @@ EOF
 f="temp_101.bufr"
 echo "Test: access marker operators 2" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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 
@@ -328,10 +328,10 @@ EOF
 f="asca_139.bufr"
 echo "Test: access by condition" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_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}codes_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
@@ -354,9 +354,9 @@ EOF
 f="temp_101.bufr"
 echo "Test: access by condition 2" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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 
@@ -412,8 +412,8 @@ rm -f ${f}.ref ${f}.log
 #echo "set -x" > $testScript1
 #chmod +x $testScript1
 
-#${tools_dir}codes_bufr_filter $fRulesReady $f 2>> $fLog 1>> $testScript
-#sed -e "s:diff:${tools_dir}bufr_compare:" < $testScript >> $testScript1
+#${tools_dir}/codes_bufr_filter $fRulesReady $f 2>> $fLog 1>> $testScript
+#sed -e "s:diff:${tools_dir}/bufr_compare:" < $testScript >> $testScript1
 #./$testScript1
 #rm -f new_*bufr 
 #rm -f $testScript $testScript1
@@ -449,9 +449,9 @@ for f in $files
 do
   echo "Test: packing " >> $fLog
   echo "file: $f" >> $fLog
-  ${tools_dir}codes_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
+  ${tools_dir}/bufr_compare ${f}.out $f
 
   rm -f ${f}.out
 done
@@ -470,9 +470,9 @@ EOF
 f="ship_9.bufr"
 echo "Test: get string" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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
@@ -494,9 +494,9 @@ EOF
 f="synop_multi_subset.bufr"
 echo "Test: get string array and stringValues" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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               
@@ -546,7 +546,7 @@ set +e
 f="syno_1.bufr"
 echo "Test: nonexistent keys" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_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
@@ -554,7 +554,7 @@ fi
 set -e
 
 # Now repeat with -f option (do not exit on error)
-${tools_dir}codes_bufr_filter -f $fRules $f 2>>$fLog 1>>$fLog
+${tools_dir}/codes_bufr_filter -f $fRules $f 2>>$fLog 1>>$fLog
 
 
 #-----------------------------------------------------------
@@ -572,7 +572,7 @@ set +e
 f="syno_1.bufr"
 echo "Test: not allowed key values" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_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
@@ -580,7 +580,7 @@ fi
 set -e
 
 # Now repeat with -f option (do not exit on error)
-${tools_dir}codes_bufr_filter -f $fRules $f 2>>$fLog 1>>$fLog
+${tools_dir}/codes_bufr_filter -f $fRules $f 2>>$fLog 1>>$fLog
 
 
 #----------------------------------------------------
@@ -598,7 +598,7 @@ EOF
 f="syno_1.bufr"
 echo "Test: nformat specifier for integer keys" >> $fLog
 echo "file: $f" >> $fLog
-result=`${tools_dir}codes_bufr_filter  $fRules $f`
+result=`${tools_dir}/codes_bufr_filter  $fRules $f`
 #[ "$result" = "centre=098, height=    3" ]
 
 
@@ -621,7 +621,7 @@ rm -f $fBufrTmp | true
 f="syno_1.bufr"
 echo "Test: setting keys" >> $fLog
 echo "file: $f" >> $fLog
-#${tools_dir}codes_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
@@ -629,7 +629,7 @@ set unpack=1;
 print "[typicalDate] [year] [airTemperatureAt2M%.1f]";
 EOF
 
-#[ `${tools_dir}codes_bufr_filter $fRules $fBufrTmp` = "20010511 2001 234.5" ]
+#[ `${tools_dir}/codes_bufr_filter $fRules $fBufrTmp` = "20010511 2001 234.5" ]
 
 #Clean up
 rm -f ${dSplit}/*
@@ -652,8 +652,8 @@ write;
 
 EOF
 
-${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
+${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 
 
@@ -671,8 +671,8 @@ set BufrTemplate="synopLand";
 write;
 EOF
 
-${tools_dir}codes_bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
-${tools_dir}bufr_compare $fOut $fRef 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 
 
@@ -684,8 +684,8 @@ set BufrTemplate="aircraftReportWithSecondsAndPressure";
 write;
 EOF
 
-${tools_dir}codes_bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
-${tools_dir}bufr_compare $fOut $fRef 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 
 
@@ -713,8 +713,8 @@ write;
 
 EOF
 
-${tools_dir}codes_bufr_filter -o ${fout} $fRules $f 2>> $fLog 1>> $fLog
-${tools_dir}bufr_compare $fout ${fout}.ref 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
 
 #-----------------------------------------------------------
 # ECC-147
@@ -728,10 +728,10 @@ write;
 EOF
 
 f="syno_1.bufr"
-${tools_dir}codes_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
+${tools_dir}/bufr_compare ${f}.out $f
 status=$?
 set -e
 if [ $status -eq 0 ]; then
@@ -739,7 +739,7 @@ if [ $status -eq 0 ]; then
   exit 1
 fi
 # Now blacklist the failing keys and it should pass
-${tools_dir}bufr_compare -b relativeHumidity,horizontalVisibility ${f}.out $f
+${tools_dir}/bufr_compare -b relativeHumidity,horizontalVisibility ${f}.out $f
 
 rm -f ${f}.out 
 
@@ -763,9 +763,9 @@ EOF
 f="synop_multi_subset.bufr"
 echo "Test: access subsets by condition" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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
@@ -793,9 +793,9 @@ EOF
 f="amda_144.bufr"
 echo "Test: access subsets and attribute by condition" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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
@@ -816,9 +816,9 @@ EOF
 f="temp_101.bufr"
 echo "Test: set key by rank" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/codes_bufr_filter $fRules $f 2>> $fLog 1>> $fLog
 
-${tools_dir}codes_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
@@ -861,9 +861,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}codes_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}codes_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
@@ -877,7 +877,7 @@ pressure={102400,50000,40000,30000,20000,15000,102400,50000,40000,30000,20000,15
 EOF
 
 diff ${fOut}.log.ref ${fOut}.log 
-${tools_dir}bufr_compare ${fOut} ${fOut}.ref
+${tools_dir}/bufr_compare ${fOut} ${fOut}.ref
 
 rm -f ${fOut}.log
 rm -f $fLog $fRules ${fOut}
@@ -896,9 +896,9 @@ 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}codes_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
+  ${tools_dir}/bufr_ls ${fOut} > ${fOut}.log
 
   cat > ${fOut}.log.ref <<EOF
 vos308014_v3_26_sec_2.bufr
@@ -944,14 +944,14 @@ fOut="extract.bufr"
 
 echo "Test: extract subsets uncompressed data" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_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}codes_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
@@ -980,7 +980,7 @@ f="profiler_european.bufr"
 
 echo "Test: associatedField" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}codes_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
@@ -1013,7 +1013,7 @@ fOut="g2nd_208.bufr.out"
 
 echo "Test: extract subsets compressed data" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
 
 cat > ${fRules} <<EOF
 set unpack=1;
@@ -1025,7 +1025,7 @@ print "orbitNumber=[orbitNumber!10]";
 print "casRegistryNumber=[casRegistryNumber!10]";
 EOF
 
-${tools_dir}bufr_filter $fRules $fOut  > ${f}.log
+${tools_dir}/bufr_filter $fRules $fOut  > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 === message number 1
@@ -1062,7 +1062,7 @@ f="gosat.bufr"
 
 echo "Test: firstOrderStatistics" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter $fRules $f  > ${f}.log
+${tools_dir}/bufr_filter $fRules $f  > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 decimalScaleOfFollowingSignificands->firstOrderStatisticalValue=-15 -15 -15 -15 -15 -15 -15 -15 -15 -15 
@@ -1109,7 +1109,7 @@ fOut="asel_139.bufr.out"
 
 echo "Test: delayed replication compressed data" >> $fLog
 echo "file: $f" >> $fLog
-${tools_dir}bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
+${tools_dir}/bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
 
 cat > ${fRules} <<EOF
 set unpack=1;
@@ -1120,7 +1120,7 @@ print "#3#windSpeedAt10M=[#3#windSpeedAt10M]";
 print "#5#windSpeedAt10M=[#5#windSpeedAt10M]";
 EOF
 
-${tools_dir}bufr_filter $fRules $fOut  > ${f}.log
+${tools_dir}/bufr_filter $fRules $fOut  > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 delayedDescriptorReplicationFactor=5
@@ -1161,7 +1161,7 @@ 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
+${tools_dir}/bufr_filter -o $fOut $fRules $f 2>> $fLog 1>> $fLog
 
 cat > ${fRules} <<EOF
 set unpack=1;
@@ -1170,7 +1170,7 @@ print "delayedDescriptorReplicationFactor=[delayedDescriptorReplicationFactor!20
 print "dataPresentIndicator=[dataPresentIndicator!20]";
 EOF
 
-${tools_dir}bufr_filter $fRules $fOut  > ${f}.log
+${tools_dir}/bufr_filter $fRules $fOut  > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 delayedDescriptorReplicationFactor=4 1 4 15 2 2
@@ -1213,7 +1213,7 @@ f="go15_87.bufr"
 echo "Test: create new BUFR with bitmap" >> $fLog
 echo "file: $f" >> $fLog
 
-${tools_dir}bufr_filter $fRules $f  > ${f}.log
+${tools_dir}/bufr_filter $fRules $f  > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 numberOfSubsets=128
@@ -1328,7 +1328,7 @@ 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
+${tools_dir}/bufr_filter $fRules $f  > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 70
@@ -1355,7 +1355,7 @@ 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
+${tools_dir}/bufr_filter $fRules $f  > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 110
@@ -1382,7 +1382,7 @@ f="syno_1.bufr"
 echo "Test: Nested delayed replication" >> $fLog
 echo "file: $f" >> $fLog
 
-${tools_dir}bufr_filter $fRules $f  > ${f}.log
+${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 
@@ -1410,7 +1410,7 @@ f="imssnow.bufr"
 echo "Test: Simple thinning" >> $fLog
 echo "file: $f" >> $fLog
 
-${tools_dir}bufr_filter -o ${f}.out $fRules $f
+${tools_dir}/bufr_filter -o ${f}.out $fRules $f
 
 cat > $fRules <<EOF
 set unpack=1;
@@ -1419,7 +1419,7 @@ print "longitude=[longitude]";
 print "height=[height]";
 EOF
 
-${tools_dir}bufr_filter $fRules ${f}.out > ${f}.log
+${tools_dir}/bufr_filter $fRules ${f}.out > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 latitude=4.93301 5.17216 5.40243 5.62361 7.86075
@@ -1447,7 +1447,7 @@ f="go15_87.bufr"
 echo "Test: subset extraction constant values" >> $fLog
 echo "file: $f" >> $fLog
 
-${tools_dir}bufr_filter -o ${f}.out $fRules $f
+${tools_dir}/bufr_filter -o ${f}.out $fRules $f
 
 cat > $fRules <<EOF
 set unpack=1;
@@ -1457,14 +1457,14 @@ set doExtractSubsets=1;
 write;
 EOF
 
-${tools_dir}bufr_filter -o ${f}.out.out $fRules ${f}.out
+${tools_dir}/bufr_filter -o ${f}.out.out $fRules ${f}.out
 
 cat > $fRules <<EOF
 set unpack=1;
 print "latitude=[latitude]";
 EOF
 
-${tools_dir}bufr_filter $fRules ${f}.out.out > ${f}.log
+${tools_dir}/bufr_filter $fRules ${f}.out.out > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 latitude=0
@@ -1477,13 +1477,11 @@ rm -f ${f}.log ${f}.log.ref ${f}.out ${f}.out.out $fLog $fRules
 # Test: fix for ECC-389 
 #-----------------------------------------------------------
 cat > $fRules <<EOF
-set numberOfSubsets=2;
-set unexpandedDescriptors={310008};
-
-set #14#brightnessTemperature={266.53,266.53000000001};
-set pack=1;
-
-write;
+ set numberOfSubsets=2;
+ set unexpandedDescriptors={310008};
+ set #14#brightnessTemperature={266.53,266.53000000001};
+ set pack=1;
+ write;
 EOF
 
 f="amsu_55.bufr"
@@ -1491,14 +1489,14 @@ f="amsu_55.bufr"
 echo "Test: fix for ECC-389" >> $fLog
 echo "file: $f" >> $fLog
 
-${tools_dir}bufr_filter -o ${f}.out $fRules $f
+${tools_dir}/bufr_filter -o ${f}.out $fRules $f
 
 cat > $fRules <<EOF
 set unpack=1;
 print "[#14#brightnessTemperature]";
 EOF
 
-${tools_dir}bufr_filter $fRules ${f}.out > ${f}.log
+${tools_dir}/bufr_filter $fRules ${f}.out > ${f}.log
 
 cat > ${f}.log.ref <<EOF
 266.53
@@ -1507,3 +1505,41 @@ EOF
 diff ${f}.log.ref ${f}.log 
 
 rm -f ${f}.log ${f}.log.ref ${f}.out $fLog $fRules
+
+#-----------------------------------------------------------
+# Test: change width using operator 201YYY
+#-----------------------------------------------------------
+HIGH_TEMPERATURE=10000
+cat > $fRules <<EOF
+ set unpack=1;
+ set airTemperature=$HIGH_TEMPERATURE;
+ set pack=1;
+ write;
+EOF
+f="bssh_176.bufr"
+
+ # This should fail. Out of Range
+set +e
+${tools_dir}/bufr_filter -o ${f}.out $fRules $f
+status=$?
+set -e
+[ $status -ne 0 ]
+
+# Now change the width of airTemperature to allow high value
+cat > $fRules <<EOF
+ set unpack=1;
+ set edition=4;
+ set unexpandedDescriptors={301022,12023,201138,12101,201000,12023};
+ set airTemperature=$HIGH_TEMPERATURE;
+ set pack=1;
+ print "airTemperature=[airTemperature], width=[airTemperature->width]";
+ write;
+EOF
+${tools_dir}/bufr_filter -o ${f}.out $fRules $f > ${f}.log
+
+cat > ${f}.log.ref <<EOF
+airTemperature=$HIGH_TEMPERATURE, width=26
+EOF
+diff ${f}.log.ref ${f}.log
+
+rm -f ${f}.log ${f}.log.ref ${f}.out $fLog $fRules
diff --git a/tests/bufr_filter_extract_area.sh b/tests/bufr_filter_extract_area.sh
index 21082fb..ecafd90 100755
--- a/tests/bufr_filter_extract_area.sh
+++ b/tests/bufr_filter_extract_area.sh
@@ -52,7 +52,7 @@ rm -f $outputFilt
 echo "Test: Area extraction" >> $fLog
 echo "file: $outputBufr" >> $fLog
 
-${tools_dir}bufr_filter -o $outputBufr $fRules $inputBufr > $outputFilt
+${tools_dir}/bufr_filter -o $outputBufr $fRules $inputBufr > $outputFilt
 [ -f $outputBufr ]
 
 cat > $fRules <<EOF
@@ -68,7 +68,7 @@ print "===========";
 print "fieldOfViewNumber=[fieldOfViewNumber!15]";
 print "===========";
 EOF
-${tools_dir}bufr_filter $fRules $inputBufr $outputBufr  >> $outputFilt
+${tools_dir}/bufr_filter $fRules $inputBufr $outputBufr  >> $outputFilt
 
 cat > $outputRef <<EOF
 extracted 14 of 128 subsets
diff --git a/tests/bufr_filter_extract_datetime.sh b/tests/bufr_filter_extract_datetime.sh
index 0c2681f..90e578a 100755
--- a/tests/bufr_filter_extract_datetime.sh
+++ b/tests/bufr_filter_extract_datetime.sh
@@ -64,7 +64,7 @@ rm -f $outputFilt
 echo "Test: Datetime extraction" >> $fLog
 echo "file: $inputBufr" >> $fLog
 
-${tools_dir}bufr_filter -o $outputBufr $fRules $inputBufr  > $outputFilt
+${tools_dir}/bufr_filter -o $outputBufr $fRules $inputBufr  > $outputFilt
 [ -f $outputBufr ]
 
 cat > $fRules <<EOF
@@ -82,7 +82,7 @@ print "===========";
 print "second=[second!15]";
 print "===========";
 EOF
-${tools_dir}bufr_filter $fRules $inputBufr $outputBufr  >> $outputFilt
+${tools_dir}/bufr_filter $fRules $inputBufr $outputBufr  >> $outputFilt
 
 cat > $outputRef <<EOF
 extracted 30 of 128 subsets
@@ -148,7 +148,7 @@ inputBufr="amsa_55.bufr"
 outputBufr=${label}.${inputBufr}.out
 
 set +e
-${tools_dir}bufr_filter -o $outputBufr $fRules $inputBufr
+${tools_dir}/bufr_filter -o $outputBufr $fRules $inputBufr
 status=$?
 set -e
 if [ $status -eq 0 ]; then
@@ -182,7 +182,7 @@ inputBufr="amsa_55.bufr"
 outputBufr=${label}.${inputBufr}.out
 
 set +e
-${tools_dir}bufr_filter -o $outputBufr $fRules $inputBufr
+${tools_dir}/bufr_filter -o $outputBufr $fRules $inputBufr
 status=$?
 set -e
 if [ $status -eq 0 ]; then
diff --git a/tests/bufr_get_element.c b/tests/bufr_get_element.c
new file mode 100644
index 0000000..9005bd7
--- /dev/null
+++ b/tests/bufr_get_element.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2005-2017 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"
+#include "eccodes.h"
+#include <assert.h>
+
+void compare_doubles(const double d1, const double d2, const double epsilon)
+{
+   assert(fabs(d1 - d2) < epsilon);
+}
+
+int main(int argc,char* argv[])
+{
+    FILE* in = NULL;
+    codes_handle* h=NULL;
+    size_t values_len=0;
+    int elem_index = 0;
+    double a_value = 0; /* value at index */
+    int err=0;
+    long compressed = 0;
+    const char* infile = "../data/bufr/mhen_55.bufr";
+    const char* key_name = "#5#brightnessTemperature";
+    const double tolerance = 1e-6;
+
+    in=fopen(infile,"r");
+    assert(in);
+
+    while ((h = codes_handle_new_from_file(NULL, in, PRODUCT_BUFR, &err)) != NULL || err != CODES_SUCCESS)
+    {
+        assert(h);
+        CODES_CHECK(codes_get_long(h, "compressedData", &compressed), 0);
+        assert(compressed == 1);
+
+        CODES_CHECK(codes_set_long(h, "unpack", 1),0);
+
+        CODES_CHECK(codes_get_size(h, key_name, &values_len),0);
+        assert(values_len == 2070);
+        elem_index = values_len - 1; /* last value of key */
+        CODES_CHECK(codes_get_double_element(h, key_name, elem_index, &a_value), 0);
+        printf("Key = %s, index = %d, value = %.5f\n", key_name, elem_index, a_value);
+        compare_doubles(a_value, 237.43, tolerance);
+
+        codes_handle_delete(h);
+    }
+    fclose(in);
+    return 0;
+}
diff --git a/examples/C/grib_get_keys.sh b/tests/bufr_get_element.sh
similarity index 92%
copy from examples/C/grib_get_keys.sh
copy to tests/bufr_get_element.sh
index 814a1ac..aa76ff7 100755
--- a/examples/C/grib_get_keys.sh
+++ b/tests/bufr_get_element.sh
@@ -3,11 +3,11 @@
 #
 # 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}c_grib_get_keys
-
+${test_dir}/bufr_get_element
diff --git a/tests/bufr_json.sh b/tests/bufr_json.sh
index d0d7726..247807c 100755
--- a/tests/bufr_json.sh
+++ b/tests/bufr_json.sh
@@ -27,7 +27,7 @@ do
   # 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
+    ${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
@@ -39,11 +39,11 @@ done
 # 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
+  ${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
 done
 
 # ECC-272
-${tools_dir}bufr_dump -jf aaen_55.bufr | grep -q -w channelRadiance
+${tools_dir}/bufr_dump -jf aaen_55.bufr | grep -q -w channelRadiance
diff --git a/tests/bufr_keys_iter.c b/tests/bufr_keys_iter.c
index eba4c70..fd34ab8 100644
--- a/tests/bufr_keys_iter.c
+++ b/tests/bufr_keys_iter.c
@@ -21,10 +21,10 @@ int main(int argc,char* argv[])
 {
     int err = 0;
     codes_handle* h = NULL;
-    grib_keys_iterator* kiter = NULL;
+    codes_bufr_keys_iterator* kiter = NULL;
     char* input_filename = NULL;
     FILE* f = NULL;
-    grib_context* c = grib_context_get_default();
+    /*grib_context* c = grib_context_get_default();*/
     
     if (argc!=2) usage(argv[0]);
     input_filename = argv[1];
@@ -36,14 +36,13 @@ int main(int argc,char* argv[])
     CODES_CHECK(codes_set_long(h,"unpack",1), 0);
 
     /*kiter=codes_bufr_data_section_keys_iterator_new(h);*/
-    kiter = codes_bufr_keys_iterator_new(h);
+    kiter = codes_bufr_keys_iterator_new(h, 0);
     while(codes_bufr_keys_iterator_next(kiter))
     {
         char* kname = codes_bufr_keys_iterator_get_name(kiter);
         printf("%s\n", kname);
-        grib_context_free(c, kname);
     }
-    grib_keys_iterator_delete(kiter);
+    codes_bufr_keys_iterator_delete(kiter);
     codes_handle_delete(h);
     return 0;
 }
diff --git a/tests/bufrdc_desc_ref.sh b/tests/bufrdc_desc_ref.sh
index 76195b7..69952bd 100755
--- a/tests/bufrdc_desc_ref.sh
+++ b/tests/bufrdc_desc_ref.sh
@@ -28,7 +28,7 @@ do
 
   rm -f $res_desc
 
-  ${tools_dir}codes_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 384ead6..4d6a968 100755
--- a/tests/bufrdc_ref.sh
+++ b/tests/bufrdc_ref.sh
@@ -29,7 +29,7 @@ do
 
   rm -f $res_num | true
 
-  ${tools_dir}codes_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/calendar.sh b/tests/calendar.sh
index 646192a..6648025 100755
--- a/tests/calendar.sh
+++ b/tests/calendar.sh
@@ -17,19 +17,19 @@ temp2=temp2.calendar.$$
 sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
 
 
-${tools_dir}grib_set -s tablesVersion=13,setCalendarId=1,typeOfCalendar=0 $sample $temp1
+${tools_dir}/grib_set -s tablesVersion=13,setCalendarId=1,typeOfCalendar=0 $sample $temp1
 grib_check_key_equals $temp1 calendarIdPresent 1
 grib_check_key_equals $temp1 section1Length    24
 grib_check_key_equals $temp1 calendarIdentificationTemplateNumber 0
 grib_check_key_equals $temp1 typeOfCalendar    0
 
-${tools_dir}grib_set -s tablesVersion=13,setCalendarId=1,calendarIdentificationTemplateNumber=1 $sample $temp1
+${tools_dir}/grib_set -s tablesVersion=13,setCalendarId=1,calendarIdentificationTemplateNumber=1 $sample $temp1
 grib_check_key_equals $temp1 calendarIdPresent 1
 grib_check_key_equals $temp1 section1Length    25
 grib_check_key_equals $temp1 calendarIdentificationTemplateNumber 1
 grib_check_key_equals $temp1 numberOfTensOfThousandsOfYearsOfOffset MISSING
 
-${tools_dir}grib_set -s tablesVersion=13,setCalendarId=1,calendarIdentificationTemplateNumber=2 $sample $temp1
+${tools_dir}/grib_set -s tablesVersion=13,setCalendarId=1,calendarIdentificationTemplateNumber=2 $sample $temp1
 grib_check_key_equals $temp1 calendarIdPresent 1
 grib_check_key_equals $temp1 section1Length    26
 grib_check_key_equals $temp1 calendarIdentificationTemplateNumber 2
@@ -37,7 +37,7 @@ grib_check_key_equals $temp1 typeOfCalendar    255
 grib_check_key_equals $temp1 numberOfTensOfThousandsOfYearsOfOffset MISSING
 
 # Remove the calendar section
-${tools_dir}grib_set -s deleteCalendarId=1 $temp1 $temp2
+${tools_dir}/grib_set -s deleteCalendarId=1 $temp1 $temp2
 grib_check_key_equals $temp2 section1Length    21
 grib_check_key_equals $temp2 calendarIdPresent 0
 
diff --git a/tests/ccsds.sh b/tests/ccsds.sh
index 7b3794f..1a175f4 100755
--- a/tests/ccsds.sh
+++ b/tests/ccsds.sh
@@ -38,13 +38,13 @@ outfile1=$infile.tmp_ccsds.1
 outfile2=$infile.tmp_ccsds.2
 
 rm -f $outfile1 $outfile2 || true
-${tools_dir}grib_set -f -r -s packingType=grid_simple $infile $outfile1 2> $REDIRECT
-${tools_dir}grib_compare -P -b $BLACKLIST $outfile1 $infile > $REDIRECT
+${tools_dir}/grib_set -f -r -s packingType=grid_simple $infile $outfile1 2> $REDIRECT
+${tools_dir}/grib_compare -P -b $BLACKLIST $outfile1 $infile > $REDIRECT
 
-${tools_dir}grib_set -r -s packingType=grid_ccsds $outfile1 $outfile2
-${tools_dir}grib_compare -P -b $BLACKLIST $outfile1 $outfile2 > $REDIRECT
+${tools_dir}/grib_set -r -s packingType=grid_ccsds $outfile1 $outfile2
+${tools_dir}/grib_compare -P -b $BLACKLIST $outfile1 $outfile2 > $REDIRECT
 
-templateNumber=`${tools_dir}grib_get -p dataRepresentationTemplateNumber $outfile2`
+templateNumber=`${tools_dir}/grib_get -p dataRepresentationTemplateNumber $outfile2`
 
 if [ $templateNumber -ne 42 ]
 then
@@ -58,14 +58,14 @@ infile=${data_dir}/reduced_latlon_surface.grib2
 outfile1=$infile.tmp_ccsds.1
 outfile2=$infile.tmp_ccsds.2
 
-${tools_dir}grib_set -r -s packingType=grid_ccsds $infile $outfile1
-${tools_dir}grib_compare -P -b $BLACKLIST $infile $outfile1 > $REDIRECT
-${tools_dir}grib_set -f -r -s packingType=grid_simple $outfile1 $outfile2 2> $REDIRECT
-${tools_dir}grib_compare -P -b $BLACKLIST $outfile2 $outfile1  > $REDIRECT
+${tools_dir}/grib_set -r -s packingType=grid_ccsds $infile $outfile1
+${tools_dir}/grib_compare -P -b $BLACKLIST $infile $outfile1 > $REDIRECT
+${tools_dir}/grib_set -f -r -s packingType=grid_simple $outfile1 $outfile2 2> $REDIRECT
+${tools_dir}/grib_compare -P -b $BLACKLIST $outfile2 $outfile1  > $REDIRECT
 
-res1=`${tools_dir}grib_get '-F%1.2f' -p min,max,avg $infile`
-res2=`${tools_dir}grib_get '-F%1.2f' -p min,max,avg $outfile1`
-res3=`${tools_dir}grib_get '-F%1.2f' -p min,max,avg $outfile2`
+res1=`${tools_dir}/grib_get '-F%1.2f' -p min,max,avg $infile`
+res2=`${tools_dir}/grib_get '-F%1.2f' -p min,max,avg $outfile1`
+res3=`${tools_dir}/grib_get '-F%1.2f' -p min,max,avg $outfile2`
 [ "$res1" = "$res2" ]
 [ "$res1" = "$res3" ]
 
@@ -76,8 +76,8 @@ infile=${data_dir}/tigge_ecmwf.grib2
 outfile1=$infile.tmp_ccsds.1
 outfile2=$infile.tmp_ccsds.2
 
-${tools_dir}grib_set -r -s bitsPerValue=17 $infile $outfile1
-${tools_dir}grib_set -r -s packingType=grid_ccsds $outfile1 $outfile2
-${tools_dir}grib_compare -P -c data:n $outfile1 $outfile2
+${tools_dir}/grib_set -r -s bitsPerValue=17 $infile $outfile1
+${tools_dir}/grib_set -r -s packingType=grid_ccsds $outfile1 $outfile2
+${tools_dir}/grib_compare -P -c data:n $outfile1 $outfile2
 
 rm -f $outfile1 $outfile2
diff --git a/tests/change_scanning.sh b/tests/change_scanning.sh
index b9271fc..7500f9c 100755
--- a/tests/change_scanning.sh
+++ b/tests/change_scanning.sh
@@ -54,17 +54,17 @@ EOF
       write "${data_dir}/scan1.grib";
 EOF
     
-      ${tools_dir}grib_filter ${data_dir}/change_scanning_${gridType}.filter $file
-      #ed=`${tools_dir}grib_get -p edition ${data_dir}/scan1.grib`
+      ${tools_dir}/grib_filter ${data_dir}/change_scanning_${gridType}.filter $file
+      #ed=`${tools_dir}/grib_get -p edition ${data_dir}/scan1.grib`
       #echo edition=$ed
     
-      ${tools_dir}grib_set -s swapScanningX=1 ${data_dir}/scan1.grib ${data_dir}/scan.grib
-      ${tools_dir}grib_get_data -F "%g" ${data_dir}/scan.grib > ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}.dump
+      ${tools_dir}/grib_set -s swapScanningX=1 ${data_dir}/scan1.grib ${data_dir}/scan.grib
+      ${tools_dir}/grib_get_data -F "%g" ${data_dir}/scan.grib > ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}.dump
       diff ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}.dump ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}_good.dump
       rm -f ${data_dir}/scan_x_${gridType}_${Ni}_${Nj}.dump
     
-      ${tools_dir}grib_set -s swapScanningY=1 ${data_dir}/scan1.grib ${data_dir}/scan.grib
-      ${tools_dir}grib_get_data -F "%g" ${data_dir}/scan.grib > ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}.dump
+      ${tools_dir}/grib_set -s swapScanningY=1 ${data_dir}/scan1.grib ${data_dir}/scan.grib
+      ${tools_dir}/grib_get_data -F "%g" ${data_dir}/scan.grib > ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}.dump
       diff ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}.dump ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}_good.dump 
       rm -f ${data_dir}/scan_y_${gridType}_${Ni}_${Nj}.dump
       rm -f ${data_dir}/change_scanning_${gridType}.filter
diff --git a/tests/check_gaussian_grids.sh b/tests/check_gaussian_grids.sh
index f278687..53aabfc 100755
--- a/tests/check_gaussian_grids.sh
+++ b/tests/check_gaussian_grids.sh
@@ -12,6 +12,6 @@
 # Check all sample GRIBs with a Gaussian grid
 samples_dir=$ECCODES_SAMPLES_PATH
 for gg in ${samples_dir}/reduced_gg_* ${samples_dir}/regular_gg_*; do
-   ${tools_dir}grib_check_gaussian_grid $gg >/dev/null
+   ${tools_dir}/grib_check_gaussian_grid $gg >/dev/null
    grib_check_key_equals $gg "global" 1
 done
diff --git a/tests/concept.sh b/tests/concept.sh
index b38c42a..59c3060 100755
--- a/tests/concept.sh
+++ b/tests/concept.sh
@@ -74,7 +74,7 @@ tmp="tmp.concept.out"
 for d in $data
 do
   set -e
-  ${tools_dir}grib_ls -p gridType,packingType -w dataRepresentationType!=192 ${data_dir}/$d > $tmp
+  ${tools_dir}/grib_ls -p gridType,packingType -w dataRepresentationType!=192 ${data_dir}/$d > $tmp
  
   set +e
   grep unknown $tmp
diff --git a/tests/decimalPrecision.sh b/tests/decimalPrecision.sh
index a0f217d..b018f57 100755
--- a/tests/decimalPrecision.sh
+++ b/tests/decimalPrecision.sh
@@ -20,11 +20,11 @@ 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 -P -c data:n $infile $outfile1 > $REDIRECT
+  ${tools_dir}/grib_set -r -s decimalScaleFactor=1,bitsPerValue=0 $infile $outfile1
+  ${tools_dir}/grib_compare -P -c data:n $infile $outfile1 > $REDIRECT
 
-  ${tools_dir}grib_set -s changeDecimalPrecision=1 $infile $outfile2
-  ${tools_dir}grib_compare -P -c data:n $infile $outfile2 > $REDIRECT
-  ${tools_dir}grib_compare $outfile1 $outfile2
+  ${tools_dir}/grib_set -s changeDecimalPrecision=1 $infile $outfile2
+  ${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/definitions.sh b/tests/definitions.sh
index 4778563..0cd94bc 100755
--- a/tests/definitions.sh
+++ b/tests/definitions.sh
@@ -13,10 +13,10 @@
 
 REDIRECT=/dev/null
 
-[ -z "$ECCODES_DEFINITION_PATH" ] | ECCODES_DEFINITION_PATH=`${tools_dir}codes_info -d`
+[ -z "$ECCODES_DEFINITION_PATH" ] | ECCODES_DEFINITION_PATH=`${tools_dir}/codes_info -d`
 
-for file in `find $ECCODES_DEFINITION_PATH -name '*.def' -print`
+for file in `find ${ECCODES_DEFINITION_PATH}/ -name '*.def' -print`
 do
-  ${tools_dir}codes_parser $file > $REDIRECT
+  ${tools_dir}/codes_parser $file > $REDIRECT
 done
 
diff --git a/tests/ecc-197.sh b/tests/ecc-197.sh
index 6197bc6..d1427ed 100755
--- a/tests/ecc-197.sh
+++ b/tests/ecc-197.sh
@@ -40,7 +40,7 @@ MY_DEFS=`pwd`/$TEMP_DIR/definitions
 export ECCODES_DEFINITION_PATH=$MY_DEFS:$ECCODES_DEFINITION_PATH
 
 # Now decode
-${tools_dir}bufr_dump $input > $TEMP
+${tools_dir}/bufr_dump $input > $TEMP
 # Ensure output JSON has all the expected contents
 # After calling 'wc' and 'set', $1 will be the line count
 set `wc -l $TEMP`
diff --git a/tests/ecc-286.sh b/tests/ecc-286.sh
index 4a811ab..5549f7b 100755
--- a/tests/ecc-286.sh
+++ b/tests/ecc-286.sh
@@ -29,7 +29,7 @@ cat > $tempRules <<EOF
  print "[3HourPressureChange]";
 EOF
 
-${tools_dir}bufr_filter $tempRules $BufrFile > $tempOut
+${tools_dir}/bufr_filter $tempRules $BufrFile > $tempOut
 
 cat > $tempRef <<EOF
 20
diff --git a/tests/ecc-288.sh b/tests/ecc-288.sh
index 701206c..40d2fdc 100755
--- a/tests/ecc-288.sh
+++ b/tests/ecc-288.sh
@@ -26,17 +26,17 @@ cat > $tempRules <<EOF
  write;
 EOF
 
-${tools_dir}bufr_filter -o $tempOut $tempRules $BufrFile
+${tools_dir}/bufr_filter -o $tempOut $tempRules $BufrFile
 
 # There is a difference in localLongitude, rel error=6.58627e-06
 # So this should fail
 set +e
-${tools_dir}bufr_compare $tempOut $BufrFile
+${tools_dir}/bufr_compare $tempOut $BufrFile
 status=$?
 set -e
 [ $status -eq 1 ]
 
 # Now apply the option and now it should pass
-${tools_dir}bufr_compare -R localLongitude=6.59e-06  $tempOut $BufrFile
+${tools_dir}/bufr_compare -R localLongitude=6.59e-06  $tempOut $BufrFile
 
 rm -rf $tempOut $tempRules
diff --git a/tests/ecc-379.sh b/tests/ecc-379.sh
index 72bac35..b8a7d5f 100755
--- a/tests/ecc-379.sh
+++ b/tests/ecc-379.sh
@@ -34,17 +34,17 @@ EOF
 
 # Expect this to fail as two values are out-of-range
 set +e
-${tools_dir}bufr_filter -o $tempOut $tempRules $BufrFile 2>/dev/null
+${tools_dir}/bufr_filter -o $tempOut $tempRules $BufrFile 2>/dev/null
 status=$?
 set -e
 [ $status -ne 0 ]
 # Now set environment variable to turn out-of-range values into 'missing'
 export ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE=1
-${tools_dir}bufr_filter -o $tempOut $tempRules $BufrFile
+${tools_dir}/bufr_filter -o $tempOut $tempRules $BufrFile
 unset ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE
 
-#echo 'set unpack=1;print "[longitude]";' | ${tools_dir}bufr_filter - $BufrFile
-#echo 'set unpack=1;print "[longitude]";' | ${tools_dir}bufr_filter - $tempOut > $tempText
+#echo 'set unpack=1;print "[longitude]";' | ${tools_dir}/bufr_filter - $BufrFile
+#echo 'set unpack=1;print "[longitude]";' | ${tools_dir}/bufr_filter - $tempOut > $tempText
 #cat > $tempRef << EOF
 #-1e+100 -172.14317 -1e+100 -170.17433 -169.407 -168.9308 -168.49104 -167.98389 
 #-166.95331 -166.52921 -166.06108 -165.66135 -164.99666 -164.67058 -164.23764
@@ -62,13 +62,13 @@ EOF
 
 # The latitude is out of range. So we expect this to fail
 set +e
-${tools_dir}bufr_filter -o $tempOut $tempRules $BufrFile 2>/dev/null
+${tools_dir}/bufr_filter -o $tempOut $tempRules $BufrFile 2>/dev/null
 status=$?
 set -e
 [ $status -ne 0 ]
 
 export ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE=1
-${tools_dir}bufr_filter -o $tempOut $tempRules $BufrFile
+${tools_dir}/bufr_filter -o $tempOut $tempRules $BufrFile
 unset ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE
 
 # ------------------------
diff --git a/tests/ecc-393.sh b/tests/ecc-393.sh
index 9e423b5..6fa5513 100755
--- a/tests/ecc-393.sh
+++ b/tests/ecc-393.sh
@@ -31,24 +31,24 @@ cat > $tempRules <<EOF
  write;
 EOF
 
-${tools_dir}bufr_filter -o $tempOut $tempRules $BufrFile
+${tools_dir}/bufr_filter -o $tempOut $tempRules $BufrFile
 
 # There are two differences. So this should fail
 set +e
-${tools_dir}bufr_compare $tempOut $BufrFile
+${tools_dir}/bufr_compare $tempOut $BufrFile
 status=$?
 set -e
 [ $status -eq 1 ]
 
 # Blacklist all the channelQualityFlagsForAtovs keys
-${tools_dir}bufr_compare -b channelQualityFlagsForAtovs $tempOut $BufrFile
+${tools_dir}/bufr_compare -b channelQualityFlagsForAtovs $tempOut $BufrFile
 
 # Blacklist both the channelQualityFlagsForAtovs keys individually
-${tools_dir}bufr_compare -b '#3#channelQualityFlagsForAtovs,#5#channelQualityFlagsForAtovs' $tempOut $BufrFile
+${tools_dir}/bufr_compare -b '#3#channelQualityFlagsForAtovs,#5#channelQualityFlagsForAtovs' $tempOut $BufrFile
 
 # Blacklist only one of the channelQualityFlagsForAtovs keys. Will fail
 set +e
-${tools_dir}bufr_compare -b '#5#channelQualityFlagsForAtovs' $tempOut $BufrFile >$tempText
+${tools_dir}/bufr_compare -b '#5#channelQualityFlagsForAtovs' $tempOut $BufrFile >$tempText
 status=$?
 set -e
 [ $status -eq 1 ]
diff --git a/tests/get_fail.sh b/tests/get_fail.sh
index 629a670..01d5c3e 100755
--- a/tests/get_fail.sh
+++ b/tests/get_fail.sh
@@ -14,7 +14,7 @@ REDIRECT=/dev/null
 
 set +e 
 
-${tools_dir}grib_get -p gribname ${data_dir}/regular_latlon_surface.grib1 2> $REDIRECT > $REDIRECT
+${tools_dir}/grib_get -p gribname ${data_dir}/regular_latlon_surface.grib1 2> $REDIRECT > $REDIRECT
 
 if [ $? -eq 0 ] 
   then
diff --git a/tests/grib1to2.sh b/tests/grib1to2.sh
index 23c0c49..c979a8e 100755
--- a/tests/grib1to2.sh
+++ b/tests/grib1to2.sh
@@ -34,30 +34,30 @@ do
   file=${data_dir}/$f
   output=${file}.grib2_
   rm -f ${output}
-  ${tools_dir}grib_set -s editionNumber=2 ${file}.grib1 ${output} 2> $REDIRECT > $REDIRECT
+  ${tools_dir}/grib_set -s editionNumber=2 ${file}.grib1 ${output} 2> $REDIRECT > $REDIRECT
 
-  grib1Statistics=`${tools_dir}grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${file}.grib1` 
-  grib2Statistics=`${tools_dir}grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${output}` 
+  grib1Statistics=`${tools_dir}/grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${file}.grib1` 
+  grib2Statistics=`${tools_dir}/grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${output}` 
 
   if [ "$grib1Statistics" != "$grib2Statistics" ]; then 
     exit 1
   fi
 
-  #${tools_dir}grib_compare -A1.0e-8 -c values ${file}.grib1 ${output} 2> /dev/null > /dev/null
-  ${tools_dir}grib_compare -P -c values ${file}.grib1 ${output} 2> $REDIRECT > $REDIRECT
+  #${tools_dir}/grib_compare -A1.0e-8 -c values ${file}.grib1 ${output} 2> /dev/null > /dev/null
+  ${tools_dir}/grib_compare -P -c values ${file}.grib1 ${output} 2> $REDIRECT > $REDIRECT
   
   rm -f ${output}
 
 done
 
-#sed "s:toolsdir:${tools_dir}:" ${tools_dir}grib1to2.txt > ${tools_dir}grib1to2.test
-#chmod +x ${tools_dir}grib1to2.test
-#${tools_dir}grib1to2.test -f ${data_dir}/test.grib1 ${data_dir}/test.grib2
-#${tools_dir}grib_get -p typeOfProcessedData:s,type:s ${data_dir}/test.grib2 > ${data_dir}/typeOfProcessedData.log
+#sed "s:toolsdir:${tools_dir}/:" ${tools_dir}/grib1to2.txt > ${tools_dir}/grib1to2.test
+#chmod +x ${tools_dir}/grib1to2.test
+#${tools_dir}/grib1to2.test -f ${data_dir}/test.grib1 ${data_dir}/test.grib2
+#${tools_dir}/grib_get -p typeOfProcessedData:s,type:s ${data_dir}/test.grib2 > ${data_dir}/typeOfProcessedData.log
 
 #diff ${data_dir}/typeOfProcessedData.log ${data_dir}/typeOfProcessedData.ok
 
-#${tools_dir}grib_compare -Pe ${data_dir}/test.grib1 ${data_dir}/test.grib2
+#${tools_dir}/grib_compare -Pe ${data_dir}/test.grib1 ${data_dir}/test.grib2
 
 #rm -f ${data_dir}/test.grib2
 
diff --git a/tests/grib2to1.sh b/tests/grib2to1.sh
index 945d568..5697d6a 100755
--- a/tests/grib2to1.sh
+++ b/tests/grib2to1.sh
@@ -33,16 +33,16 @@ do
   file=${data_dir}/$f
   output=${file}.grib1_
   rm -f ${output} || true
-  ${tools_dir}grib_set -s editionNumber=1 ${file}.grib2 ${output} 2> $REDIRECT > $REDIRECT
+  ${tools_dir}/grib_set -s editionNumber=1 ${file}.grib2 ${output} 2> $REDIRECT > $REDIRECT
 
-  grib1Statistics=`${tools_dir}grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${output}` 
-  grib2Statistics=`${tools_dir}grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${file}.grib2` 
+  grib1Statistics=`${tools_dir}/grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${output}` 
+  grib2Statistics=`${tools_dir}/grib_get -fp numberOfValues,numberOfPoints,max,min,average,numberOfMissing ${file}.grib2` 
 
   if [ "$grib1Statistics" != "$grib2Statistics" ]; then 
     exit 1
   fi
 
-  #${tools_dir}grib_compare -A1.0e-8 -c values ${output} ${file}.grib2 2> /dev/null > /dev/null
+  #${tools_dir}/grib_compare -A1.0e-8 -c values ${output} ${file}.grib2 2> /dev/null > /dev/null
   rm -f ${output}
 done
 
@@ -64,10 +64,10 @@ while [ $i -le $COUNT ]; do
 done
 echo "};write;"       >> $filter
 # Apply this filter to a grib2 file from samples.
-${tools_dir}grib_filter -o temp.pv.grib2 $filter $ECCODES_SAMPLES_PATH/reduced_gg_ml_grib2.tmpl
+${tools_dir}/grib_filter -o temp.pv.grib2 $filter $ECCODES_SAMPLES_PATH/reduced_gg_ml_grib2.tmpl
 # Convert this new grib2 file to grib1. This command SHOULD FAIL
 set +e
-${tools_dir}grib_set -s edition=1 temp.pv.grib2 temp.bad.grib1 2>$REDIRECT
+${tools_dir}/grib_set -s edition=1 temp.pv.grib2 temp.bad.grib1 2>$REDIRECT
 if [ $? -eq 0 ]; then
   echo "ERROR: Conversion from grib2 to grib1 should have failed for large NV!" >&2
   exit 1
diff --git a/tests/grib_compare.sh b/tests/grib_compare.sh
index c1ac5ff..7852f85 100755
--- a/tests/grib_compare.sh
+++ b/tests/grib_compare.sh
@@ -17,20 +17,20 @@ 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
+${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
+  ${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
+${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
 
@@ -39,29 +39,29 @@ rm -f temp_comp.1 temp_comp.2 temp_comp.3 temp_comp.123 temp_comp.321
 temp_dir=tempdir.grib_compare
 mkdir -p $temp_dir
 cp $infile $temp_dir
-${tools_dir}grib_compare $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
+${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
+${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
+${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
+${tools_dir}/grib_compare -b totalLength $temp1 $temp2 >/dev/null
 status=$?
 set -e
 [ $status -eq 1 ]
@@ -69,13 +69,13 @@ set -e
 
 # ECC-355: -R with "all" option
 # ----------------------------------------
-${tools_dir}grib_copy -w count=1 ${data_dir}/tigge_cf_ecmwf.grib2 $temp1
-${tools_dir}grib_copy -w count=1 ${data_dir}/tigge_pf_ecmwf.grib2 $temp2
+${tools_dir}/grib_copy -w count=1 ${data_dir}/tigge_cf_ecmwf.grib2 $temp1
+${tools_dir}/grib_copy -w count=1 ${data_dir}/tigge_pf_ecmwf.grib2 $temp2
 BLACKLIST="typeOfProcessedData,typeOfEnsembleForecast,perturbationNumber"
 # Specify relative tolerances for each floating point key
-${tools_dir}grib_compare -b $BLACKLIST -R referenceValue=0.03,codedValues=2 $temp1 $temp2
+${tools_dir}/grib_compare -b $BLACKLIST -R referenceValue=0.03,codedValues=2 $temp1 $temp2
 # Now try the "all" option with the highest relative diff value
-${tools_dir}grib_compare -b $BLACKLIST -R all=2 $temp1 $temp2
+${tools_dir}/grib_compare -b $BLACKLIST -R all=2 $temp1 $temp2
 
 
 rm -f $temp1 $temp2
diff --git a/tests/grib_double_cmp.sh b/tests/grib_double_cmp.sh
index 9cd1d62..6a57e55 100755
--- a/tests/grib_double_cmp.sh
+++ b/tests/grib_double_cmp.sh
@@ -16,10 +16,10 @@
 
 infile=${data_dir}/grid_ieee.grib
 
-if [ ! -f ${infile} ]
-then
-  echo no data to test
-  exit 1
-fi
+# if [ ! -f ${infile} ]
+# then
+#   echo no data to test
+#   exit 1
+# fi
 
 ${test_dir}/grib_double_cmp ${infile}
diff --git a/tests/grib_dump.sh b/tests/grib_dump.sh
index d64ee83..52eb222 100755
--- a/tests/grib_dump.sh
+++ b/tests/grib_dump.sh
@@ -68,6 +68,6 @@ v.grib2
 
 for file in $files; do
    if [ -f ${data_dir}/$file ]; then
-      ${tools_dir}grib_dump -O ${data_dir}/$file 2> $REDIRECT > $REDIRECT
+      ${tools_dir}/grib_dump -O ${data_dir}/$file 2> $REDIRECT > $REDIRECT
    fi
 done
diff --git a/tests/grib_dump_debug.sh b/tests/grib_dump_debug.sh
index f81c7dc..24da96e 100755
--- a/tests/grib_dump_debug.sh
+++ b/tests/grib_dump_debug.sh
@@ -68,6 +68,6 @@ v.grib2
 
 for file in $files; do
    if [ -f ${data_dir}/$file ]; then
-      ${tools_dir}grib_dump -Da ${data_dir}/$file 2> $REDIRECT > $REDIRECT
+      ${tools_dir}/grib_dump -Da ${data_dir}/$file 2> $REDIRECT > $REDIRECT
    fi
 done
diff --git a/tests/grib_filter.sh b/tests/grib_filter.sh
index ed5b3ae..ac8f6e7 100755
--- a/tests/grib_filter.sh
+++ b/tests/grib_filter.sh
@@ -16,7 +16,7 @@ if [ -f ${data_dir}/geavg.t12z.pgrbaf108 ]
 then
 	tmpdata=grib_api.$$.grib
 	rm -f $tmpdata || true
-	${tools_dir}grib_filter ${data_dir}/filter_rules ${data_dir}/geavg.t12z.pgrbaf108 > $REDIRECT
+	${tools_dir}/grib_filter ${data_dir}/filter_rules ${data_dir}/geavg.t12z.pgrbaf108 > $REDIRECT
 	rm -f $tmpdata
 fi
 
@@ -26,7 +26,7 @@ EOF
 
 [ -d ${data_dir}/split ] || mkdir -p ${data_dir}/split 
 
-${tools_dir}grib_filter ${data_dir}/f.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT
+${tools_dir}/grib_filter ${data_dir}/f.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT
 
 rm -f ${data_dir}/split/*
 rmdir ${data_dir}/split
@@ -39,14 +39,14 @@ set center="john";
 EOF
 # Invoke without -f i.e. should fail if error encountered
 set +e
-${tools_dir}grib_filter ${data_dir}/nonexkey.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT
+${tools_dir}/grib_filter ${data_dir}/nonexkey.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT
 if [ $? -eq 0 ]; then
    echo "grib_filter should have failed if key not found" >&2
    exit 1
 fi
 set -e
 # Now repeat with -f option (do not exit on error)
-${tools_dir}grib_filter -f ${data_dir}/nonexkey.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT
+${tools_dir}/grib_filter -f ${data_dir}/nonexkey.rules ${data_dir}/tigge_pf_ecmwf.grib2 2> $REDIRECT > $REDIRECT
 
 rm -f ${data_dir}/nonexkey.rules
 
@@ -57,7 +57,7 @@ cat > ${data_dir}/formatint.rules <<EOF
 print "edition=[edition%.3d], level=[level%5ld]";
 EOF
 
-result=`${tools_dir}/grib_filter  ${data_dir}/formatint.rules  $ECCODES_SAMPLES_PATH/GRIB1.tmpl`
+result=`${tools_dir}//grib_filter  ${data_dir}/formatint.rules  $ECCODES_SAMPLES_PATH/GRIB1.tmpl`
 [ "$result" = "edition=001, level=  500" ]
 
 # Convert from grib1 to grib2 "Generalized vertical height coordinates"
@@ -68,8 +68,8 @@ set nlev=41.0;
 write;
 EOF
 
-${tools_dir}/grib_filter -o temp_filt.grib2 temp.filt $ECCODES_SAMPLES_PATH/sh_ml_grib1.tmpl
-result=`${tools_dir}/grib_get -p typeOfFirstFixedSurface,NV,nlev temp_filt.grib2`
+${tools_dir}//grib_filter -o temp_filt.grib2 temp.filt $ECCODES_SAMPLES_PATH/sh_ml_grib1.tmpl
+result=`${tools_dir}//grib_get -p typeOfFirstFixedSurface,NV,nlev temp_filt.grib2`
 [ "$result" = "150 6 41" ]
 
 # GRIB-394: grib_filter arithmetic operators not correct for floating point values
@@ -100,7 +100,7 @@ else {
   assert(0);
 }
 EOF
-${tools_dir}/grib_filter  ${data_dir}/binop.rules $ECCODES_SAMPLES_PATH/gg_sfc_grib1.tmpl >/dev/null
+${tools_dir}//grib_filter  ${data_dir}/binop.rules $ECCODES_SAMPLES_PATH/gg_sfc_grib1.tmpl >/dev/null
 
 
 # GRIB-526 grib_filter very picky about format of floats
@@ -114,18 +114,18 @@ set values = {
   .4,
   45. };
 EOF
-${tools_dir}/grib_filter temp.filt $ECCODES_SAMPLES_PATH/GRIB1.tmpl
+${tools_dir}//grib_filter temp.filt $ECCODES_SAMPLES_PATH/GRIB1.tmpl
 
 # Test reading from stdin
-echo 'set centre="kwbc";write;' | ${tools_dir}/grib_filter -o temp_filt.grib2 - $ECCODES_SAMPLES_PATH/GRIB2.tmpl
-result=`${tools_dir}/grib_get -p centre temp_filt.grib2`
+echo 'set centre="kwbc";write;' | ${tools_dir}//grib_filter -o temp_filt.grib2 - $ECCODES_SAMPLES_PATH/GRIB2.tmpl
+result=`${tools_dir}//grib_get -p centre temp_filt.grib2`
 [ "$result" = "kwbc" ]
 
 
 # ECC-365: placeholder in the output filename
 ########################################################
 input=${data_dir}/tigge_cf_ecmwf.grib2
-echo 'write;' | ${tools_dir}/grib_filter -o 'temp.out.gfilter.[date].[level].grib' - $input
+echo 'write;' | ${tools_dir}//grib_filter -o 'temp.out.gfilter.[date].[level].grib' - $input
 [ -f temp.out.gfilter.20070122.925.grib ]
 [ -f temp.out.gfilter.20070122.320.grib ]
 [ -f temp.out.gfilter.20070122.2.grib ]
@@ -134,7 +134,7 @@ echo 'write;' | ${tools_dir}/grib_filter -o 'temp.out.gfilter.[date].[level].gri
 [ -f temp.out.gfilter.20060630.0.grib ]
 [ -f temp.out.gfilter.20060623.0.grib ]
 # Check the contents of one of the output files
-c=`${tools_dir}/grib_count temp.out.gfilter.20070122.320.grib`
+c=`${tools_dir}//grib_count temp.out.gfilter.20070122.320.grib`
 [ "$c" = 1 ]
 grib_check_key_equals temp.out.gfilter.20070122.320.grib "date,level" "20070122 320"
 rm -f temp.out.gfilter.*.grib
diff --git a/tests/grib_png.sh b/tests/grib_png.sh
index fe36c03..e2fc753 100755
--- a/tests/grib_png.sh
+++ b/tests/grib_png.sh
@@ -34,10 +34,10 @@ fi
 
 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_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
+  ${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
diff --git a/tests/grib_to_netcdf.sh b/tests/grib_to_netcdf.sh
index 107687f..4e77bd3 100755
--- a/tests/grib_to_netcdf.sh
+++ b/tests/grib_to_netcdf.sh
@@ -19,7 +19,7 @@ rm -f $tmp_out | true
 # Invoke the grib_to_netcdf command with no options. If NetCDF was enabled
 # we get a usage message otherwise we get a specific message. Note: In both cases
 # the command fails.
-${tools_dir}grib_to_netcdf > $tmp_out
+${tools_dir}/grib_to_netcdf > $tmp_out
 grep 'ecCodes was not compiled with NETCDF enabled' $tmp_out > /dev/null
 if [ $? -eq 0 ]; then
   # Message was found
@@ -53,8 +53,8 @@ do
    do
       rm -f $tmp_netcdf | true
       if [ -f "${data_dir}/$f" ]; then
-        ${tools_dir}grib_to_netcdf -D $dt -o $tmp_netcdf ${data_dir}/$f >/dev/null
-	${tools_dir}grib_to_netcdf -T -o $tmp_netcdf ${data_dir}/$f >/dev/null
+        ${tools_dir}/grib_to_netcdf -D $dt -o $tmp_netcdf ${data_dir}/$f >/dev/null
+	${tools_dir}/grib_to_netcdf -T -o $tmp_netcdf ${data_dir}/$f >/dev/null
       fi
    done
 done
@@ -62,10 +62,10 @@ done
 # Try creating different kinds; netcdf3 classic and large
 # TODO: enable tests for netcdf4 formats too
 input=${data_dir}/regular_latlon_surface.grib2
-${tools_dir}grib_to_netcdf -k 1 -o $tmp_netcdf $input >/dev/null
-${tools_dir}grib_to_netcdf -k 2 -o $tmp_netcdf $input >/dev/null
-#${tools_dir}grib_to_netcdf -k 3 -o $tmp_netcdf $input >/dev/null
-#${tools_dir}grib_to_netcdf -k 4 -o $tmp_netcdf $input >/dev/null
+${tools_dir}/grib_to_netcdf -k 1 -o $tmp_netcdf $input >/dev/null
+${tools_dir}/grib_to_netcdf -k 2 -o $tmp_netcdf $input >/dev/null
+#${tools_dir}/grib_to_netcdf -k 3 -o $tmp_netcdf $input >/dev/null
+#${tools_dir}/grib_to_netcdf -k 4 -o $tmp_netcdf $input >/dev/null
 
 rm -f $tmp_netcdf | true
 
diff --git a/tests/grib_util_set_spec.sh b/tests/grib_util_set_spec.sh
index 26aacc9..3304a99 100755
--- a/tests/grib_util_set_spec.sh
+++ b/tests/grib_util_set_spec.sh
@@ -20,32 +20,32 @@ tempOut=temp.grib_util_set_spec.grib
 rm -f $outfile
 
 # GRIB1 with local definition for MARS. Convert to edition2 and remove local def
-${test_dir}grib_util_set_spec -e 2 -r $infile $outfile > /dev/null
+${test_dir}/grib_util_set_spec -e 2 -r $infile $outfile > /dev/null
 
-res=`${tools_dir}grib_get -p edition,section2Used,Ni,Nj,numberOfValues,bitsPerValue $outfile`
+res=`${tools_dir}/grib_get -p edition,section2Used,Ni,Nj,numberOfValues,bitsPerValue $outfile`
 [ "$res" = "2 0 17 14 238 24" ]
 
 # Check output file geometry
-${tools_dir}grib_get_data $outfile > /dev/null
+${tools_dir}/grib_get_data $outfile > /dev/null
 
 # Remove the local definition from input
-${tools_dir}grib_set -s deleteLocalDefinition=1 $infile $tempOut
-${test_dir}grib_util_set_spec $tempOut $outfile > /dev/null
+${tools_dir}/grib_set -s deleteLocalDefinition=1 $infile $tempOut
+${test_dir}/grib_util_set_spec $tempOut $outfile > /dev/null
 
 # Add another grib1 local definition (which is not in grib2)
-${tools_dir}grib_set -s setLocalDefinition=1,localDefinitionNumber=5 $infile $tempOut
+${tools_dir}/grib_set -s setLocalDefinition=1,localDefinitionNumber=5 $infile $tempOut
 infile=$tempOut
-${test_dir}grib_util_set_spec -r -e 2 $tempOut $outfile > /dev/null
-res=`${tools_dir}grib_get -p edition,section2Used $outfile`
+${test_dir}/grib_util_set_spec -r -e 2 $tempOut $outfile > /dev/null
+res=`${tools_dir}/grib_get -p edition,section2Used $outfile`
 [ "$res" = "2 0" ]
 
 # GRIB2 input with local definition
 infile=../data/regular_latlon_surface.grib2
-${test_dir}grib_util_set_spec -r $infile $outfile > /dev/null
+${test_dir}/grib_util_set_spec -r $infile $outfile > /dev/null
 grib_check_key_equals $outfile section2Used 0
 # GRIB2 input without local definition
 infile=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
-${test_dir}grib_util_set_spec $infile $outfile > /dev/null
+${test_dir}/grib_util_set_spec $infile $outfile > /dev/null
 grib_check_key_equals $outfile section2Used 0
 
 # Convert to edition2 and use JPEG for packing
@@ -54,8 +54,8 @@ set +u
 if [ x"$HAVE_JPEG" != "x" ]; then
   if [ $HAVE_JPEG -eq 1 ]; then
     infile=../data/latlon.grib
-    ${test_dir}grib_util_set_spec -e 2 -p grid_jpeg $infile $outfile > /dev/null
-    res=`${tools_dir}grib_get -p edition,section2Used,packingType $outfile`
+    ${test_dir}/grib_util_set_spec -e 2 -p grid_jpeg $infile $outfile > /dev/null
+    res=`${tools_dir}/grib_get -p edition,section2Used,packingType $outfile`
     [ "$res" = "2 1 grid_jpeg" ]
   fi
 fi
@@ -68,18 +68,18 @@ infile=../data/reduced_gaussian_model_level.grib2
 outfile=out.grib_util_set_spec.grib
 rm -f $outfile
 
-stats_old=`${tools_dir}grib_get -F%.2f -p min,max $infile`
+stats_old=`${tools_dir}/grib_get -F%.2f -p min,max $infile`
 [ "$stats_old" = "160.25 224.45" ]
 
-${test_dir}grib_util_set_spec -p grid_second_order $infile $outfile
+${test_dir}/grib_util_set_spec -p grid_second_order $infile $outfile
 
 # Check output file. Values are scaled up by 1.1
 grib_check_key_equals $outfile packingType grid_second_order
-stats_new=`${tools_dir}grib_get -F%.2f -p min,max $outfile`
+stats_new=`${tools_dir}/grib_get -F%.2f -p min,max $outfile`
 [ "$stats_new" = "176.28 246.90" ]
 
-${tools_dir}grib_get_data $outfile > /dev/null
-CHECK_TOOL="${tools_dir}grib_check_gaussian_grid"
+${tools_dir}/grib_get_data $outfile > /dev/null
+CHECK_TOOL="${tools_dir}/grib_check_gaussian_grid"
 if [ -x $CHECK_TOOL ]; then
   $CHECK_TOOL $outfile
 fi
@@ -89,9 +89,9 @@ fi
 infile=$ECCODES_SAMPLES_PATH/reduced_gg_pl_32_grib2.tmpl
 rm -f $outfile
 
-${test_dir}grib_util_set_spec $infile $outfile
+${test_dir}/grib_util_set_spec $infile $outfile
 grib_check_key_equals $outfile "packingType,const" "grid_simple 1"
-${tools_dir}grib_get_data $outfile > /dev/null
+${tools_dir}/grib_get_data $outfile > /dev/null
 
 
 ### Clean up
diff --git a/tests/gridType.sh b/tests/gridType.sh
index 116056a..1dc777a 100755
--- a/tests/gridType.sh
+++ b/tests/gridType.sh
@@ -15,9 +15,9 @@ REDIRECT=/dev/null
 tmpdata=grib_api.gridType.grib
 rm -f $tmpdata
 
-${tools_dir}grib_set -s gridType=regular_gg ${data_dir}/reduced_latlon_surface.grib1 ${tmpdata} > $REDIRECT
+${tools_dir}/grib_set -s gridType=regular_gg ${data_dir}/reduced_latlon_surface.grib1 ${tmpdata} > $REDIRECT
 
-gridType=`${tools_dir}grib_get -p gridType $tmpdata`
+gridType=`${tools_dir}/grib_get -p gridType $tmpdata`
 if [ $gridType != "regular_gg" ]
 then
     echo "Unable to change from reduced_latlon to regular_gg"
@@ -27,9 +27,9 @@ fi
 
 rm -f $tmpdata
 
-${tools_dir}grib_set -s gridType=reduced_gg ${data_dir}/regular_gaussian_pressure_level.grib1 ${tmpdata} > $REDIRECT
+${tools_dir}/grib_set -s gridType=reduced_gg ${data_dir}/regular_gaussian_pressure_level.grib1 ${tmpdata} > $REDIRECT
 
-gridType=`${tools_dir}grib_get -p gridType $tmpdata`
+gridType=`${tools_dir}/grib_get -p gridType $tmpdata`
 if [ $gridType != "reduced_gg" ]
 then
     echo "Unable to change from regular_gg to reduced_gg"
@@ -43,11 +43,11 @@ rm -f $tmpdata
 # gridName
 ###########
 for f in $ECCODES_SAMPLES_PATH/regular_gg_ml_grib*tmpl; do
-    gname=`${tools_dir}grib_get -p gridName $f`
+    gname=`${tools_dir}/grib_get -p gridName $f`
     [ "$gname" = "F32" ]
 done
 for f in $ECCODES_SAMPLES_PATH/reduced_gg_pl_512_grib*.tmpl; do
-    gname=`${tools_dir}grib_get -p gridName $f`
+    gname=`${tools_dir}/grib_get -p gridName $f`
     [ "$gname" = "N512" ]
 done
 
diff --git a/tests/gts_compare.sh b/tests/gts_compare.sh
index cfa2561..0704438 100755
--- a/tests/gts_compare.sh
+++ b/tests/gts_compare.sh
@@ -35,7 +35,7 @@ fBufrInput2=${label}".bufr.input2"
 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
+${tools_dir}//gts_compare $gts_file $gts_file
 
 #----------------------------------------------------
 # Test: comparing two different files
@@ -44,9 +44,9 @@ cat > $fRules<<EOF
  if (count == 1) { set GG="01"; }
  write;
 EOF
-${tools_dir}gts_filter -o $fGtsTmp $fRules $gts_file
+${tools_dir}/gts_filter -o $fGtsTmp $fRules $gts_file
 set +e
-${tools_dir}/gts_compare $gts_file $fGtsTmp
+${tools_dir}//gts_compare $gts_file $fGtsTmp
 status=$?
 set -e
 if [ $status -eq 0 ]; then
@@ -57,7 +57,7 @@ fi
 #----------------------------------------------------
 # Test: comparing with and witout the -b switch
 #----------------------------------------------------
-${tools_dir}/gts_compare -b GG $gts_file $fGtsTmp >> $fLog
+${tools_dir}//gts_compare -b GG $gts_file $fGtsTmp >> $fLog
 
 #Clean up
 rm -f $fLog $fGtsTmp $fRules
diff --git a/tests/ieee.sh b/tests/ieee.sh
index 09727ec..c1bf5c0 100755
--- a/tests/ieee.sh
+++ b/tests/ieee.sh
@@ -34,51 +34,51 @@ cat > r.filter <<EOF
 print "[values%g]";
 EOF
 
-${tools_dir}grib_filter -o $outsimple w.filter $infile 
+${tools_dir}/grib_filter -o $outsimple w.filter $infile 
 
-${tools_dir}grib_filter r.filter $outsimple > $outsimple.txt
+${tools_dir}/grib_filter r.filter $outsimple > $outsimple.txt
 diff $outsimple.txt ${data_dir}/ieee_test.good
 
-${tools_dir}grib_set -r -s packingType=grid_ieee $outsimple $out32
-${tools_dir}grib_filter r.filter $out32 > $out32.txt 
+${tools_dir}/grib_set -r -s packingType=grid_ieee $outsimple $out32
+${tools_dir}/grib_filter r.filter $out32 > $out32.txt 
 diff $out32.txt ${data_dir}/ieee_test.good
 
 # Disabled for now. See GRIB-2 and GRIB-80
 #GRIB_IEEE_PACKING=32
 #export GRIB_IEEE_PACKING
-#${tools_dir}grib_filter -o $out32 w.filter $infile 
-#${tools_dir}grib_filter r.filter $out32 > $out32.txt 
+#${tools_dir}/grib_filter -o $out32 w.filter $infile 
+#${tools_dir}/grib_filter r.filter $out32 > $out32.txt 
 #diff $out32.txt ${data_dir}/ieee_test.good
 
 #GRIB_IEEE_PACKING=64
 #export GRIB_IEEE_PACKING
-#${tools_dir}grib_filter -o $out64 w.filter $infile 
-#${tools_dir}grib_filter r.filter $out64 > $out64.txt 
+#${tools_dir}/grib_filter -o $out64 w.filter $infile 
+#${tools_dir}/grib_filter r.filter $out64 > $out64.txt 
 #diff $out64.txt ${data_dir}/ieee_test.good
 
 rm -f $outsimple $out32 $out64 $out32.txt $out64.txt
 rm -f ${data_dir}/$outsimple.txt ${data_dir}/$out32.txt ${data_dir}/$out64.txt 
 rm -f w.filter $outsimple.txt
 
-${tools_dir}grib_filter r.filter $shdata > $shdata.txt
+${tools_dir}/grib_filter r.filter $shdata > $shdata.txt
 diff $shdata.txt $shdata.good
 
-${tools_dir}grib_set -r -s packingType=grid_ieee $shdata ${shdata}_ieee
-${tools_dir}grib_filter r.filter ${shdata}_ieee > $shdata.txt
+${tools_dir}/grib_set -r -s packingType=grid_ieee $shdata ${shdata}_ieee
+${tools_dir}/grib_filter r.filter ${shdata}_ieee > $shdata.txt
 diff $shdata.txt $shdata.good
 rm -f ${shdata}_ieee
 
 ##########################
 #GRIB_IEEE_PACKING=32
 #export GRIB_IEEE_PACKING
-#${tools_dir}grib_copy -r $shdata ${shdata}_32
-#${tools_dir}grib_filter r.filter ${shdata}_32 > ${shdata}_32.txt
+#${tools_dir}/grib_copy -r $shdata ${shdata}_32
+#${tools_dir}/grib_filter r.filter ${shdata}_32 > ${shdata}_32.txt
 #diff ${shdata}_32.txt ${shdata}_32.good
 
 #GRIB_IEEE_PACKING=64
 #export GRIB_IEEE_PACKING
-#${tools_dir}grib_copy -r $shdata ${shdata}_64
-#${tools_dir}grib_filter r.filter ${shdata}_64 > ${shdata}_64.txt
+#${tools_dir}/grib_copy -r $shdata ${shdata}_64
+#${tools_dir}/grib_filter r.filter ${shdata}_64 > ${shdata}_64.txt
 #diff ${shdata}_64.txt ${shdata}.good
 
 rm -f r.filter ${shdata}_64.txt ${shdata}_32.txt $shdata.txt
diff --git a/tests/include.ctest.sh.in b/tests/include.ctest.sh.in
index e476dd0..47af59d 100644
--- a/tests/include.ctest.sh.in
+++ b/tests/include.ctest.sh.in
@@ -11,26 +11,25 @@ proj_dir=@PROJECT_SOURCE_DIR@
 data_dir=@PROJECT_BINARY_DIR@/data
 
 # use definitions from binary dir to test if installation will be correct
-# Note: 'definitions' is a symlink so must put final slash to interpret as directory
-def_dir="@CMAKE_BINARY_DIR@/share/@PROJECT_NAME@/definitions/"
+def_dir="@CMAKE_BINARY_DIR@/@ECCODES_DEFINITION_SUFF@"
 ECCODES_DEFINITION_PATH="${def_dir}"
 export ECCODES_DEFINITION_PATH
 
 # binaries are in the TOP CMAKE_BINARY_DIR
-tools_dir=@CMAKE_BINARY_DIR@/bin/
-tigge_dir=@CMAKE_BINARY_DIR@/bin/
+tools_dir=@CMAKE_BINARY_DIR@/bin
+tigge_dir=@CMAKE_BINARY_DIR@/bin
 
 # If this environment variable is set, then run the
 # executables with valgrind
 if test "x$ECCODES_TEST_WITH_VALGRIND" != "x"; then
-   tools_dir="valgrind --error-exitcode=1 -q @CMAKE_BINARY_DIR@/bin/"
+   tools_dir="valgrind --error-exitcode=1 -q @CMAKE_BINARY_DIR@/bin"
 fi
 
 # ecCodes tests are in the PROJECT_BINARY_DIR
-test_dir=@PROJECT_BINARY_DIR@/tests/
+test_dir=@PROJECT_BINARY_DIR@/tests
 
 # use samples from binary dir to test if installation will be correct
-samp_dir="@CMAKE_BINARY_DIR@/share/@PROJECT_NAME@/samples"
+samp_dir="@CMAKE_BINARY_DIR@/@ECCODES_SAMPLES_SUFF@"
 ECCODES_SAMPLES_PATH=${samp_dir}
 export ECCODES_SAMPLES_PATH
 
diff --git a/tests/include.sh b/tests/include.sh
index a5a12a8..b0fc0fa 100644
--- a/tests/include.sh
+++ b/tests/include.sh
@@ -39,20 +39,20 @@ else
     export ECCODES_DEFINITION_PATH
     ECCODES_SAMPLES_PATH=$cpath/samples
     export ECCODES_SAMPLES_PATH
-    tools_dir=$cpath/tools/
+    tools_dir=$cpath/tools
 
     if test "x$ECCODES_TEST_WITH_VALGRIND" != "x"; then
-      tools_dir="valgrind --error-exitcode=1 -q $cpath/tools/"
+      tools_dir="valgrind --error-exitcode=1 -q $cpath/tools"
     fi
 
-    tigge_dir=$cpath/tigge/
+    tigge_dir=$cpath/tigge
     data_dir=$cpath/data
-    test_dir=$cpath/tests/
+    test_dir=$cpath/tests
     def_dir=$cpath/definitions
     src_dir=$cpath/src
   else
-    tools_dir=""
-    tigge_dir=""
+    tools_dir="."
+    tigge_dir="."
   fi
 
   if [ -z "${GRIB_API_INCLUDE}" ]
diff --git a/tests/index.sh b/tests/index.sh
index 76f148d..c3857eb 100755
--- a/tests/index.sh
+++ b/tests/index.sh
@@ -33,13 +33,13 @@ rm -f index.out out.gribidx
 # Test grib_index_build
 #-------------------------------
 tempIndex=temp.$$.ix
-${tools_dir}grib_index_build -o $tempIndex ${infile} >/dev/null
-${tools_dir}grib_dump -D ${tempIndex} > /dev/null
+${tools_dir}/grib_index_build -o $tempIndex ${infile} >/dev/null
+${tools_dir}/grib_dump -D ${tempIndex} > /dev/null
 
-${tools_dir}grib_index_build -k mars.levtype -o $tempIndex ${data_dir}/tigge_cf_ecmwf.grib2 |\
+${tools_dir}/grib_index_build -k mars.levtype -o $tempIndex ${data_dir}/tigge_cf_ecmwf.grib2 |\
    grep -q "mars.levtype = { sfc, pl, pv, pt }"
 
-${tools_dir}grib_index_build -k mars.levtype:i -o $tempIndex ${data_dir}/tigge_cf_ecmwf.grib2 |\
+${tools_dir}/grib_index_build -k mars.levtype:i -o $tempIndex ${data_dir}/tigge_cf_ecmwf.grib2 |\
    grep -q "mars.levtype = { 103, 1, 106, 100, 101, 8, 109, 107 }"
 
 rm -f $tempIndex
diff --git a/tests/iterator.sh b/tests/iterator.sh
index 24451e2..018a5ae 100755
--- a/tests/iterator.sh
+++ b/tests/iterator.sh
@@ -24,8 +24,8 @@ files="reduced_latlon_surface.grib1 \
 for f in `echo $files`
 do
  file=${data_dir}/$f
- iterator_count=`${tools_dir}grib_get_data -m 9999:missing -f -p centre -F "%g" -w count=1 $file | grep -v Lat |wc -l `
- numberOfPoints=`${tools_dir}grib_get -w count=1 -p numberOfPoints $file`
+ iterator_count=`${tools_dir}/grib_get_data -m 9999:missing -f -p centre -F "%g" -w count=1 $file | grep -v Lat |wc -l `
+ numberOfPoints=`${tools_dir}/grib_get -w count=1 -p numberOfPoints $file`
  [ $numberOfPoints = ${iterator_count} ]
 done
 
diff --git a/tests/jpeg.sh b/tests/jpeg.sh
index aac4abe..e197125 100755
--- a/tests/jpeg.sh
+++ b/tests/jpeg.sh
@@ -39,12 +39,12 @@ outfile2=$infile.tmp_jpeg.2
 
 rm -f $outfile1 $outfile2
 
-${tools_dir}grib_set -s packingType=grid_simple $infile $outfile1
-${tools_dir}grib_compare -P -b $BLACKLIST,typeOfCompressionUsed,targetCompressionRatio $infile $outfile1 > $REDIRECT
-${tools_dir}grib_set -s packingType=grid_jpeg $outfile1 $outfile2
-${tools_dir}grib_compare -P -b $BLACKLIST $outfile1 $outfile2 > $REDIRECT
+${tools_dir}/grib_set -s packingType=grid_simple $infile $outfile1
+${tools_dir}/grib_compare -P -b $BLACKLIST,typeOfCompressionUsed,targetCompressionRatio $infile $outfile1 > $REDIRECT
+${tools_dir}/grib_set -s packingType=grid_jpeg $outfile1 $outfile2
+${tools_dir}/grib_compare -P -b $BLACKLIST $outfile1 $outfile2 > $REDIRECT
 
-templateNumber=`${tools_dir}grib_get -p dataRepresentationTemplateNumber $outfile2`
+templateNumber=`${tools_dir}/grib_get -p dataRepresentationTemplateNumber $outfile2`
 
 if [ $templateNumber -ne 40 ] 
 then 
@@ -57,21 +57,21 @@ rm -f $outfile1 $outfile2
 infile=${data_dir}/reduced_latlon_surface.grib2
 outfile1=$infile.tmp_jpeg.1
 outfile2=$infile.tmp_jpeg.2
-${tools_dir}grib_set -s packingType=grid_jpeg $infile $outfile1
-${tools_dir}grib_compare -P -b $BLACKLIST $infile $outfile1 > $REDIRECT
-${tools_dir}grib_set -s packingType=grid_simple $outfile1 $outfile2
-${tools_dir}grib_compare -P -b $BLACKLIST,typeOfCompressionUsed,targetCompressionRatio $outfile1 $outfile2  > $REDIRECT
-
-res1=`${tools_dir}grib_get '-F%1.2f' -p min,max,avg $infile`
-res2=`${tools_dir}grib_get '-F%1.2f' -p min,max,avg $outfile1`
-res3=`${tools_dir}grib_get '-F%1.2f' -p min,max,avg $outfile2`
+${tools_dir}/grib_set -s packingType=grid_jpeg $infile $outfile1
+${tools_dir}/grib_compare -P -b $BLACKLIST $infile $outfile1 > $REDIRECT
+${tools_dir}/grib_set -s packingType=grid_simple $outfile1 $outfile2
+${tools_dir}/grib_compare -P -b $BLACKLIST,typeOfCompressionUsed,targetCompressionRatio $outfile1 $outfile2  > $REDIRECT
+
+res1=`${tools_dir}/grib_get '-F%1.2f' -p min,max,avg $infile`
+res2=`${tools_dir}/grib_get '-F%1.2f' -p min,max,avg $outfile1`
+res3=`${tools_dir}/grib_get '-F%1.2f' -p min,max,avg $outfile2`
 [ "$res1" = "$res2" ]
 [ "$res1" = "$res3" ]
 
 rm -f $outfile2
 
 # GRIB-564 nearest 4 neighbours with JPEG packing
-res=`${tools_dir}grib_get -l 0,50 $outfile1`
+res=`${tools_dir}/grib_get -l 0,50 $outfile1`
 [ "$res" = "2.47244 2.47244 2.5115 2.51931 " ]
 
 rm -f $outfile1
@@ -83,7 +83,7 @@ infile=${data_dir}/jpeg.grib2
 outfile=$infile.temp.const
 tempFilter1=temp.grib_jpeg_test1.filt
 tempFilter2=temp.grib_jpeg_test2.filt
-numberOfValuesOrig=`${tools_dir}grib_get -p numberOfValues $infile`
+numberOfValuesOrig=`${tools_dir}/grib_get -p numberOfValues $infile`
 # Create a filter to print the values. This will be used to create another filter
 cat > $tempFilter1 <<EOF
  print "set values={[values!1',']};";
@@ -91,11 +91,11 @@ cat > $tempFilter1 <<EOF
 EOF
 # Run the filter on the input. Change the output to set all values to 1 with an additional entry
 # so the output file should have original numberOfValues+1
-${tools_dir}grib_filter $tempFilter1 $infile |\
+${tools_dir}/grib_filter $tempFilter1 $infile |\
    sed -e 's/[0-9][0-9]*/1/' |\
    sed -e 's/set values={1,/set values={1,1,/' > $tempFilter2
 # Apply the new filter to create the constant field JPEG file
-${tools_dir}grib_filter -o $outfile $tempFilter2 $infile
+${tools_dir}/grib_filter -o $outfile $tempFilter2 $infile
 numberOfValuesNew=`expr $numberOfValuesOrig + 1`
 grib_check_key_equals $outfile "numberOfValues" $numberOfValuesNew
 rm -f $tempFilter1 $tempFilter2
diff --git a/tests/lamb_az_eq_area.sh b/tests/lamb_az_eq_area.sh
index 425bac5..07e6533 100755
--- a/tests/lamb_az_eq_area.sh
+++ b/tests/lamb_az_eq_area.sh
@@ -41,13 +41,13 @@ write "lamb_az_eq_area.grib2";
 EOF
 
 # Use this filter and the input GRIB to create a new GRIB
-${tools_dir}grib_filter $FILTER_FILE $GRIB_INFILE
+${tools_dir}/grib_filter $FILTER_FILE $GRIB_INFILE
 if [ ! -f "$GRIB_OUTFILE" ]; then
    echo Failed to create output GRIB from filter >&2
    exit 1
 fi
 # Now get the data from the newly created GRIB file
-${tools_dir}grib_get_data $GRIB_OUTFILE > $DATA_OUTFILE
+${tools_dir}/grib_get_data $GRIB_OUTFILE > $DATA_OUTFILE
 
 # Compare output with reference. If the diff fails, script will immediately exit with status 1
 diff $DATA_OUTFILE $REF_FILE
diff --git a/tests/level.sh b/tests/level.sh
index 78c45a5..997e589 100755
--- a/tests/level.sh
+++ b/tests/level.sh
@@ -56,22 +56,22 @@ print "grib[edition]: level=[level] topLevel=[topLevel] bottomLevel=[bottomLevel
 EOF
 
     
-${tools_dir}grib_filter level.filter $file > test.dump
+${tools_dir}/grib_filter level.filter $file > test.dump
 diff temp.level.good test.dump
 
 # GRIB-492
-${tools_dir}grib_set -s indicatorOfTypeOfLevel=110 $sample_g1 $temp
-res=`${tools_dir}grib_get -p indicatorOfTypeOfLevel:l,topLevel,bottomLevel $temp`
+${tools_dir}/grib_set -s indicatorOfTypeOfLevel=110 $sample_g1 $temp
+res=`${tools_dir}/grib_get -p indicatorOfTypeOfLevel:l,topLevel,bottomLevel $temp`
 [ "$res" = "110 0 0" ]
 
 # GRIB-415 evaluate level as a double
-${tools_dir}grib_set -s scaledValueOfFirstFixedSurface=15,scaleFactorOfFirstFixedSurface=1 $sample_g2 $temp
-res=`${tools_dir}grib_get -p level:d $temp`
+${tools_dir}/grib_set -s scaledValueOfFirstFixedSurface=15,scaleFactorOfFirstFixedSurface=1 $sample_g2 $temp
+res=`${tools_dir}/grib_get -p level:d $temp`
 [ "$res" = "1.5" ]
 
 # GRIB-637 grib2 Potential vorticity surface
 input=${data_dir}/tigge_pf_ecmwf.grib2
-res=`${tools_dir}grib_get -wcount=7 -F%.20f -p level:d $input`
+res=`${tools_dir}/grib_get -wcount=7 -F%.20f -p level:d $input`
 [ "$res" = "2.00000000000000000000" ]
 
 rm -f level.filter temp.level.good test.dump $temp
diff --git a/tests/list.sh b/tests/list.sh
index 24f5133..2f8445a 100755
--- a/tests/list.sh
+++ b/tests/list.sh
@@ -23,7 +23,7 @@ EOF
 
 file="${data_dir}/reduced_gaussian_model_level.grib2"
 
-${tools_dir}grib_filter  list.filter $file
+${tools_dir}/grib_filter  list.filter $file
 
 cat >list.filter<<EOF
 print("x.out") "productDefinitionTemplateNumber=[productDefinitionTemplateNumber]";
@@ -35,7 +35,7 @@ print("x.out") "scaleFactorOfCentralWaveNumber={[scaleFactorOfCentralWaveNumber'
 print("x.out") "scaledValueOfCentralWaveNumber={[scaledValueOfCentralWaveNumber',']}";
 EOF
 
-${tools_dir}grib_filter list.filter test.list.grib
+${tools_dir}/grib_filter list.filter test.list.grib
 
 cat >list.ref<<EOF
 productDefinitionTemplateNumber=31
diff --git a/tests/list_all_keys.ksh b/tests/list_all_keys.ksh
index 1849dbd..3386675 100755
--- a/tests/list_all_keys.ksh
+++ b/tests/list_all_keys.ksh
@@ -9,12 +9,12 @@
 
 . ./include.sh
 
-[ -z "$ECCODES_DEFINITION_PATH" ] | ECCODES_DEFINITION_PATH=`${tools_dir}codes_info -d`
+[ -z "$ECCODES_DEFINITION_PATH" ] | ECCODES_DEFINITION_PATH=`${tools_dir}/codes_info -d`
 
 touch tmp$$
 for file in `find $ECCODES_DEFINITION_PATH -name '*.def' -print`
 do
-  ${tools_dir}grib_list_keys $file >> tmp$$  
+  ${tools_dir}/grib_list_keys $file >> tmp$$  
 done
 
 cat >keys <<EOF
diff --git a/tests/local.sh b/tests/local.sh
index b694fa5..ee6ec47 100755
--- a/tests/local.sh
+++ b/tests/local.sh
@@ -16,50 +16,50 @@ REDIRECT=/dev/null
 cd ${data_dir}
 rm -f local.log
 
-${tools_dir}grib_set -s edition=2,setLocalDefinition=1 reduced_gaussian_model_level.grib1 loc.grib2
-${tools_dir}grib_set -s setLocalDefinition=1           reduced_gaussian_model_level.grib1 loc.grib1
+${tools_dir}/grib_set -s edition=2,setLocalDefinition=1 reduced_gaussian_model_level.grib1 loc.grib2
+${tools_dir}/grib_set -s setLocalDefinition=1           reduced_gaussian_model_level.grib1 loc.grib1
 
 # conversion 1->2
 for localDefinitionNumber in 1 15 26 30
 do
-	${tools_dir}grib_set -s localDefinitionNumber=$localDefinitionNumber,perturbationNumber=2,numberOfForecastsInEnsemble=50 loc.grib1 eps.grib1
-	${tools_dir}grib_set -s edition=2 eps.grib1 eps.grib2
+	${tools_dir}/grib_set -s localDefinitionNumber=$localDefinitionNumber,perturbationNumber=2,numberOfForecastsInEnsemble=50 loc.grib1 eps.grib1
+	${tools_dir}/grib_set -s edition=2 eps.grib1 eps.grib2
 
-	${tools_dir}grib_get -p localDefinitionNumber,perturbationNumber,numberOfForecastsInEnsemble,productDefinitionTemplateNumber eps.grib2 >> local.log
-	${tools_dir}grib_compare -e -b param eps.grib1 eps.grib2
+	${tools_dir}/grib_get -p localDefinitionNumber,perturbationNumber,numberOfForecastsInEnsemble,productDefinitionTemplateNumber eps.grib2 >> local.log
+	${tools_dir}/grib_compare -e -b param eps.grib1 eps.grib2
 
-	${tools_dir}grib_set -s localDefinitionNumber=$localDefinitionNumber,numberOfForecastsInEnsemble=0 loc.grib1 eps.grib1
-	${tools_dir}grib_set -s edition=2 eps.grib1 eps.grib2
+	${tools_dir}/grib_set -s localDefinitionNumber=$localDefinitionNumber,numberOfForecastsInEnsemble=0 loc.grib1 eps.grib1
+	${tools_dir}/grib_set -s edition=2 eps.grib1 eps.grib2
 
-	${tools_dir}grib_get -f -p localDefinitionNumber,perturbationNumber,productDefinitionTemplateNumber eps.grib2 >> local.log
-	${tools_dir}grib_compare -e -b param eps.grib1 eps.grib2
+	${tools_dir}/grib_get -f -p localDefinitionNumber,perturbationNumber,productDefinitionTemplateNumber eps.grib2 >> local.log
+	${tools_dir}/grib_compare -e -b param eps.grib1 eps.grib2
 done
 
 #local -> local
 for localStart in 1 7 9 20 25 26 30
 do
-	${tools_dir}grib_set -s localDefinitionNumber=$localStart loc.grib1 loc1.grib1
-	${tools_dir}grib_set -s edition=2 loc1.grib1 loc1.grib2
-	${tools_dir}grib_get -p localDefinitionNumber loc1.grib1 >> local.log
-	${tools_dir}grib_get -p localDefinitionNumber loc1.grib2 >> local.log
+	${tools_dir}/grib_set -s localDefinitionNumber=$localStart loc.grib1 loc1.grib1
+	${tools_dir}/grib_set -s edition=2 loc1.grib1 loc1.grib2
+	${tools_dir}/grib_get -p localDefinitionNumber loc1.grib1 >> local.log
+	${tools_dir}/grib_get -p localDefinitionNumber loc1.grib2 >> local.log
 	
 	for localEps in 1 15 26 30
 	do
-		${tools_dir}grib_set -s localDefinitionNumber=$localEps,eps=1,perturbationNumber=2,numberOfForecastsInEnsemble=50 loc1.grib2 eps.grib2
-		${tools_dir}grib_get -p localDefinitionNumber,perturbationNumber,numberOfForecastsInEnsemble,productDefinitionTemplateNumber eps.grib2 >> local.log
+		${tools_dir}/grib_set -s localDefinitionNumber=$localEps,eps=1,perturbationNumber=2,numberOfForecastsInEnsemble=50 loc1.grib2 eps.grib2
+		${tools_dir}/grib_get -p localDefinitionNumber,perturbationNumber,numberOfForecastsInEnsemble,productDefinitionTemplateNumber eps.grib2 >> local.log
 	done
 done
 
 #special types/streams
-${tools_dir}grib_set -s localDefinitionNumber=1,numberOfForecastsInEnsemble=0 loc.grib1 loc1.grib1
-${tools_dir}grib_set -s edition=2 loc1.grib1 loc1.grib2
-${tools_dir}grib_get -f -p localDefinitionNumber,perturbationNumber loc1.grib2 >> local.log
-${tools_dir}grib_set -s type=em loc1.grib2 eps.grib2
-${tools_dir}grib_get -p localDefinitionNumber,productDefinitionTemplateNumber,derivedForecast eps.grib2 >> local.log
-${tools_dir}grib_set -s type=es loc1.grib2 eps.grib2
-${tools_dir}grib_get -p localDefinitionNumber,productDefinitionTemplateNumber,derivedForecast eps.grib2 >> local.log
-${tools_dir}grib_set -s stream=enda loc1.grib2 eps.grib2 #2> $REDIRECT
-${tools_dir}grib_get -p localDefinitionNumber,productDefinitionTemplateNumber eps.grib2 >> local.log
+${tools_dir}/grib_set -s localDefinitionNumber=1,numberOfForecastsInEnsemble=0 loc.grib1 loc1.grib1
+${tools_dir}/grib_set -s edition=2 loc1.grib1 loc1.grib2
+${tools_dir}/grib_get -f -p localDefinitionNumber,perturbationNumber loc1.grib2 >> local.log
+${tools_dir}/grib_set -s type=em loc1.grib2 eps.grib2
+${tools_dir}/grib_get -p localDefinitionNumber,productDefinitionTemplateNumber,derivedForecast eps.grib2 >> local.log
+${tools_dir}/grib_set -s type=es loc1.grib2 eps.grib2
+${tools_dir}/grib_get -p localDefinitionNumber,productDefinitionTemplateNumber,derivedForecast eps.grib2 >> local.log
+${tools_dir}/grib_set -s stream=enda loc1.grib2 eps.grib2 #2> $REDIRECT
+${tools_dir}/grib_get -p localDefinitionNumber,productDefinitionTemplateNumber eps.grib2 >> local.log
 
 diff local.log local.good.log
 
diff --git a/tests/ls.sh b/tests/ls.sh
index d685300..d0fef07 100755
--- a/tests/ls.sh
+++ b/tests/ls.sh
@@ -16,13 +16,13 @@ rm -f $tempLog
 cd ${data_dir}
 infile=regular_gaussian_model_level.grib1
 
-${tools_dir}grib_ls -P count $infile       >  $tempLog
-${tools_dir}grib_ls -p count,step $infile  >> $tempLog
-${tools_dir}grib_ls $infile                >> $tempLog
-${tools_dir}grib_ls -l 0,0,1 $infile       >> $tempLog
-${tools_dir}grib_get -l 0,0,1 $infile      >> $tempLog
-${tools_dir}grib_get -p count,step $infile >> $tempLog
-${tools_dir}grib_get -P count $infile      >> $tempLog
+${tools_dir}/grib_ls -P count $infile       >  $tempLog
+${tools_dir}/grib_ls -p count,step $infile  >> $tempLog
+${tools_dir}/grib_ls $infile                >> $tempLog
+${tools_dir}/grib_ls -l 0,0,1 $infile       >> $tempLog
+${tools_dir}/grib_get -l 0,0,1 $infile      >> $tempLog
+${tools_dir}/grib_get -p count,step $infile >> $tempLog
+${tools_dir}/grib_get -P count $infile      >> $tempLog
 
 files=" reduced_gaussian_lsm.grib1
 reduced_gaussian_model_level.grib1
@@ -53,37 +53,37 @@ for file in $files
 do
   [ -f "$file" ]
   echo $file >> $tempLog
-  ${tools_dir}grib_ls -l 40,28 $file  | grep index | awk '{print $4;}' >> $tempLog
+  ${tools_dir}/grib_ls -l 40,28 $file  | grep index | awk '{print $4;}' >> $tempLog
 done
 
 diff $tempLog ls.log 
 rm -f $tempLog
 
 # Test for bug GRIB-56
-${tools_dir}grib_set -s typeOfLevel=depthBelowLandLayer,topLevel=missing regular_latlon_surface.grib1 tmp_rlls.grib1
-${tools_dir}grib_ls -plevels tmp_rlls.grib1 | grep MISSING>/dev/null
+${tools_dir}/grib_set -s typeOfLevel=depthBelowLandLayer,topLevel=missing regular_latlon_surface.grib1 tmp_rlls.grib1
+${tools_dir}/grib_ls -plevels tmp_rlls.grib1 | grep MISSING>/dev/null
 
-${tools_dir}grib_set -s typeOfLevel=depthBelowLandLayer,bottomLevel=missing regular_latlon_surface.grib1 tmp_rlls.grib1
-${tools_dir}grib_ls -plevels tmp_rlls.grib1 | grep MISSING>/dev/null
+${tools_dir}/grib_set -s typeOfLevel=depthBelowLandLayer,bottomLevel=missing regular_latlon_surface.grib1 tmp_rlls.grib1
+${tools_dir}/grib_ls -plevels tmp_rlls.grib1 | grep MISSING>/dev/null
 rm -f tmp_rlls.grib1 | true
 
 # GRIB-305. GRIB edition 1 file with one large message
 if [ -f "sst_globus0083.grib" ]; then
-   ${tools_dir}grib_ls sst_globus0083.grib > /dev/null
+   ${tools_dir}/grib_ls sst_globus0083.grib > /dev/null
 fi
 
 # GRIB-387 printing key of type byte
-${tools_dir}grib_ls -p uuidOfVGrid test_uuid.grib2 > /dev/null
+${tools_dir}/grib_ls -p uuidOfVGrid test_uuid.grib2 > /dev/null
 
-type=`${tools_dir}grib_get -wcount=1 -p typeOfLevel test_uuid.grib2`
+type=`${tools_dir}/grib_get -wcount=1 -p typeOfLevel test_uuid.grib2`
 [ "$type" = "generalVertical" ]
 
 # GRIB-213 nearest with land-sea mask
 temp_ls=test.grib-213.temp
-${tools_dir}grib_ls -l 85,13,1,reduced_gaussian_lsm.grib1 reduced_gaussian_surface.grib1 >$temp_ls
+${tools_dir}/grib_ls -l 85,13,1,reduced_gaussian_lsm.grib1 reduced_gaussian_surface.grib1 >$temp_ls
 grep -q 'Point chosen #3 index=21 .* distance=11\.' $temp_ls
 
-${tools_dir}grib_ls -l 53,2,1,reduced_gaussian_lsm.grib1 reduced_gaussian_surface.grib1 >$temp_ls
+${tools_dir}/grib_ls -l 53,2,1,reduced_gaussian_lsm.grib1 reduced_gaussian_surface.grib1 >$temp_ls
 grep -q 'Point chosen #2 index=749 .* distance=204\.' $temp_ls
 
 rm -f $temp_ls
diff --git a/tests/md5.sh b/tests/md5.sh
index 6ce23e5..7bbe32a 100755
--- a/tests/md5.sh
+++ b/tests/md5.sh
@@ -13,7 +13,7 @@ test_md5()
     file=$ECCODES_SAMPLES_PATH/$1
     expected=$2
 
-    result=`${tools_dir}grib_get -p md5GridSection:s $file`
+    result=`${tools_dir}/grib_get -p md5GridSection:s $file`
     [ "$result" = "$expected" ]
 }
 
diff --git a/tests/metar_get.sh b/tests/metar_get.sh
index 7440bde..abbf0d4 100755
--- a/tests/metar_get.sh
+++ b/tests/metar_get.sh
@@ -32,7 +32,7 @@ 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
+${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/metar_ls.sh b/tests/metar_ls.sh
index 8fd4fe6..55053d9 100755
--- a/tests/metar_ls.sh
+++ b/tests/metar_ls.sh
@@ -34,7 +34,7 @@ export METAR_YEAR=2015
 export METAR_MONTH=4
 
 echo $f >> $fLog
-${tools_dir}metar_ls $f >> $fLog
+${tools_dir}/metar_ls $f >> $fLog
 
 #-------------------------------------------
 # Test "-p" switch
@@ -43,7 +43,7 @@ ref_ls=$f".ls.ref"
 res_ls=$f".ls.test"
 REDIRECT=/dev/null
 
-${tools_dir}/metar_ls -pCCCC,latitude,longitude,dateTime,elevation,temperature,dewPointTemperature,qnh $f 2> $REDIRECT > $res_ls
+${tools_dir}//metar_ls -pCCCC,latitude,longitude,dateTime,elevation,temperature,dewPointTemperature,qnh $f 2> $REDIRECT > $res_ls
 
 diff $ref_ls $res_ls >$REDIRECT 2> $REDIRECT
 
diff --git a/tests/missing.sh b/tests/missing.sh
index 758f7bc..eabba12 100755
--- a/tests/missing.sh
+++ b/tests/missing.sh
@@ -15,23 +15,23 @@ REDIRECT=/dev/null
 infile="${data_dir}/missing.grib2"
 outfile="${data_dir}/missing_new.grib2"
 
-scaleFactorOfSecondFixedSurface=`${tools_dir}grib_get -w count=1 -p scaleFactorOfSecondFixedSurface $infile`
+scaleFactorOfSecondFixedSurface=`${tools_dir}/grib_get -w count=1 -p scaleFactorOfSecondFixedSurface $infile`
 [ "$scaleFactorOfSecondFixedSurface" = "0" ]
 
-scaledValueOfSecondFixedSurface=`${tools_dir}grib_get -w count=1 -p scaledValueOfSecondFixedSurface $infile`
+scaledValueOfSecondFixedSurface=`${tools_dir}/grib_get -w count=1 -p scaledValueOfSecondFixedSurface $infile`
 [ "$scaledValueOfSecondFixedSurface" = "0" ]
 
-${tools_dir}grib_set -s scaleFactorOfSecondFixedSurface=missing,scaledValueOfSecondFixedSurface=missing $infile $outfile
+${tools_dir}/grib_set -s scaleFactorOfSecondFixedSurface=missing,scaledValueOfSecondFixedSurface=missing $infile $outfile
 
-scaleFactorOfSecondFixedSurface=`${tools_dir}grib_get -w count=1 -p scaleFactorOfSecondFixedSurface $outfile`
+scaleFactorOfSecondFixedSurface=`${tools_dir}/grib_get -w count=1 -p scaleFactorOfSecondFixedSurface $outfile`
 [ "$scaleFactorOfSecondFixedSurface" = "MISSING" ]
 
-scaledValueOfSecondFixedSurface=`${tools_dir}grib_get -w count=1 -p scaledValueOfSecondFixedSurface $outfile`
+scaledValueOfSecondFixedSurface=`${tools_dir}/grib_get -w count=1 -p scaledValueOfSecondFixedSurface $outfile`
 [ "$scaledValueOfSecondFixedSurface" = "MISSING" ]
 
 set +e
 
-${tools_dir}grib_set -s centre=missing $infile $outfile 2> $REDIRECT > $REDIRECT
+${tools_dir}/grib_set -s centre=missing $infile $outfile 2> $REDIRECT > $REDIRECT
 
 [ $? -ne 0 ]
 
diff --git a/tests/multi.sh b/tests/multi.sh
index 6902363..d21f519 100755
--- a/tests/multi.sh
+++ b/tests/multi.sh
@@ -19,15 +19,15 @@ fi
 tmpdata=grib_api.$$.grib
 rm -f $tmpdata
 
-parameterNumber=`${tools_dir}grib_get -p parameterNumber -w parameterCategory=2,parameterNumber=3 ${data_dir}/multi.grib2`
+parameterNumber=`${tools_dir}/grib_get -p parameterNumber -w parameterCategory=2,parameterNumber=3 ${data_dir}/multi.grib2`
 if [ -z "$parameterNumber"  ] 
 then
   echo ---------- grib_get failure
   exit 1
 fi
 
-${tools_dir}grib_copy -w parameterCategory=2,parameterNumber=3 ${data_dir}/multi.grib2  $tmpdata.1
-${tools_dir}grib_compare ${data_dir}/v.grib2 $tmpdata.1
+${tools_dir}/grib_copy -w parameterCategory=2,parameterNumber=3 ${data_dir}/multi.grib2  $tmpdata.1
+${tools_dir}/grib_compare ${data_dir}/v.grib2 $tmpdata.1
 
 cat > $tmpdata.rules <<EOF
 if ( parameterCategory==2 && parameterNumber==3) {
@@ -35,7 +35,7 @@ if ( parameterCategory==2 && parameterNumber==3) {
 }
 EOF
 
-parameterNumber=`${tools_dir}grib_filter $tmpdata.rules ${data_dir}/multi.grib2`
+parameterNumber=`${tools_dir}/grib_filter $tmpdata.rules ${data_dir}/multi.grib2`
 if [ -z "$parameterNumber"  ] 
 then
   echo ---------- grib_filter failure
diff --git a/tests/multi_from_message.sh b/tests/multi_from_message.sh
index 1cb1c71..4b3b72e 100755
--- a/tests/multi_from_message.sh
+++ b/tests/multi_from_message.sh
@@ -23,11 +23,11 @@ do
   fi
 
   ${test_dir}/multi_from_message -m $infile > $out1
-  ${tools_dir}grib_get -p count,shortName,level $infile > $out2
+  ${tools_dir}/grib_get -p count,shortName,level $infile > $out2
   diff $out1 $out2
 
   ${test_dir}/multi_from_message $infile > $out1
-  ${tools_dir}grib_get -M -p count,shortName,level $infile > $out2
+  ${tools_dir}/grib_get -M -p count,shortName,level $infile > $out2
   diff $out1 $out2
 
   rm -f $out1 $out2 | true
diff --git a/tests/mybufrdc_ref.sh b/tests/mybufrdc_ref.sh
index b61399e..252295d 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}codes_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/neg_fctime.sh b/tests/neg_fctime.sh
index 932835f..9351690 100755
--- a/tests/neg_fctime.sh
+++ b/tests/neg_fctime.sh
@@ -21,7 +21,7 @@ input=${data_dir}/sample.grib2
 sample2=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
 PDTs="0 1 2 3 8 9 10 11 12 13 14 45 46 47 48 53"
 for p in $PDTs; do
-  ${tools_dir}grib_set -s productDefinitionTemplateNumber=$p,forecastTime=-2 $sample2 $temp
+  ${tools_dir}/grib_set -s productDefinitionTemplateNumber=$p,forecastTime=-2 $sample2 $temp
 done
 
 
@@ -32,33 +32,33 @@ grib_check_key_equals $input 'dataDate,dataTime' '20080206 1200'
 
 # Negative step in same day
 # --------------------------
-${tools_dir}grib_set -s forecastTime=-2 $input $temp
+${tools_dir}/grib_set -s forecastTime=-2 $input $temp
 grib_check_key_equals $temp 'validityDate,validityTime' '20080206 1000'
 
-${tools_dir}grib_set -s forecastTime=-11 $input $temp
+${tools_dir}/grib_set -s forecastTime=-11 $input $temp
 grib_check_key_equals $temp 'validityDate,validityTime' '20080206 100'
 
-${tools_dir}grib_set -s forecastTime=-12 $input $temp
+${tools_dir}/grib_set -s forecastTime=-12 $input $temp
 grib_check_key_equals $temp 'validityDate,validityTime' '20080206 0'
 
 
 # Negative step previous day
 # --------------------------
-${tools_dir}grib_set -s forecastTime=-13 $input $temp
+${tools_dir}/grib_set -s forecastTime=-13 $input $temp
 grib_check_key_equals $temp 'validityDate,validityTime' '20080205 2300'
 
-${tools_dir}grib_set -s forecastTime=-24 $input $temp
+${tools_dir}/grib_set -s forecastTime=-24 $input $temp
 grib_check_key_equals $temp 'validityDate,validityTime' '20080205 1200'
 
-${tools_dir}grib_set -s forecastTime=-33 $input $temp
+${tools_dir}/grib_set -s forecastTime=-33 $input $temp
 grib_check_key_equals $temp 'validityDate,validityTime' '20080205 300'
 
 # Negative step further back
 # --------------------------
-${tools_dir}grib_set -s forecastTime=-38 $input $temp
+${tools_dir}/grib_set -s forecastTime=-38 $input $temp
 grib_check_key_equals $temp 'validityDate,validityTime' '20080204 2200'
 
-${tools_dir}grib_set -s forecastTime=-185 $input $temp
+${tools_dir}/grib_set -s forecastTime=-185 $input $temp
 grib_check_key_equals $temp 'validityDate,validityTime' '20080129 1900'
 
 
diff --git a/tests/octahedral.sh b/tests/octahedral.sh
index 0efb910..ce8afd7 100755
--- a/tests/octahedral.sh
+++ b/tests/octahedral.sh
@@ -24,7 +24,7 @@ grib_check_key_equals $input "global,isOctahedral" "1 1"
 grib_check_key_equals $input "numberOfDataPoints,numberOfCodedValues" "6599680 6599680"
 
 # Iterator
-${tools_dir}grib_get_data $input > $temp
+${tools_dir}/grib_get_data $input > $temp
 numlines=`wc -l $temp | awk '{print $1}'`
 [ "$numlines" = "6599681" ]     # 1 + numberOfDataPoints
 
diff --git a/tests/padding.sh b/tests/padding.sh
index c7bc799..ee9c794 100755
--- a/tests/padding.sh
+++ b/tests/padding.sh
@@ -13,7 +13,7 @@
 REDIRECT=/dev/null
 temp=loc.padding.grib1
 
-${tools_dir}grib_set -s setLocalDefinition=1 ${data_dir}/regular_latlon_surface.grib1 $temp
+${tools_dir}/grib_set -s setLocalDefinition=1 ${data_dir}/regular_latlon_surface.grib1 $temp
 cat  > $$_f <<EOF
 	if (GRIBEXSection1Problem ) {
 		print "localDefinitionNumber=[localDefinitionNumber] size(GRIBEX-section1)=[GRIBEXSection1Problem] section1Length=[section1Length]";
@@ -34,13 +34,13 @@ localDefinitions=`find ${def_dir}/grib1/ -name 'local.98.*def' | sed -e 's:.*/::
 
 for l1 in $localDefinitions
 do
-	${tools_dir}grib_set -s localDefinitionNumber=$l1 $temp locx.grib1
-	${tools_dir}grib_filter $$_f locx.grib1
+	${tools_dir}/grib_set -s localDefinitionNumber=$l1 $temp locx.grib1
+	${tools_dir}/grib_filter $$_f locx.grib1
 	for l2 in $localDefinitions
 	do
 		#echo "$l1 -> $l2"
-		${tools_dir}grib_set -s localDefinitionNumber=$l2 locx.grib1 locy.grib1
-		${tools_dir}grib_filter $$_f locy.grib1
+		${tools_dir}/grib_set -s localDefinitionNumber=$l2 locx.grib1 locy.grib1
+		${tools_dir}/grib_filter $$_f locy.grib1
 	done
 done
 
diff --git a/tests/second_order.sh b/tests/second_order.sh
index 8cace32..08f2ded 100755
--- a/tests/second_order.sh
+++ b/tests/second_order.sh
@@ -38,23 +38,23 @@ simple_bitmap.grib"
 no_packing="gen.grib|row.grib|gen_bitmap.grib|constant_width_bitmap.grib|constant_width_boust_bitmap.grib"
 
 test_data() {
-	${tools_dir}grib_filter test.filter $simple > $simple.data
+	${tools_dir}/grib_filter test.filter $simple > $simple.data
 
 	for f in $files
 	do 
-		${tools_dir}grib_filter test.filter $f > $f.data
+		${tools_dir}/grib_filter test.filter $f > $f.data
 		diff $simple.data $f.data > /dev/null
-		${tools_dir}grib_compare -cvalues $f $simple
+		${tools_dir}/grib_compare -cvalues $f $simple
 		echo $f decoding test passed > $REDIRECT
 
 		exclude=`echo $f | awk " /$no_packing/ {print \"found\";} "`
 		if [ -z "$exclude" ] && [ $encoding != 0 ]
 		then
 			rm -f $f.copied
-			${tools_dir}grib_copy -r $f $f.copied
-			${tools_dir}grib_filter test.filter $f.copied > $f.copied.data
+			${tools_dir}/grib_copy -r $f $f.copied
+			${tools_dir}/grib_filter test.filter $f.copied > $f.copied.data
 			diff $simple.data $f.copied.data > /dev/null
-			${tools_dir}grib_compare -cvalues $f.copied $simple
+			${tools_dir}/grib_compare -cvalues $f.copied $simple
 			echo $f encoding test passed > $REDIRECT
 			echo > $REDIRECT
 		fi
@@ -78,26 +78,26 @@ test_data
 
 # Now make sure grib_dump works on a second-order row-by-row file
 # See GRIB-147
-${tools_dir}grib_dump second_ord_rbr.grib1 > $REDIRECT
+${tools_dir}/grib_dump second_ord_rbr.grib1 > $REDIRECT
 
 # Test nearest neighbour on second order with a bitmap
 # GRIB-541
 sec_ord_bmp=sec_ord_bmp.$$.grib1
 
 # Convert to second order packing
-${tools_dir}grib_set -r -s packingType=grid_second_order gen_bitmap.grib $sec_ord_bmp
+${tools_dir}/grib_set -r -s packingType=grid_second_order gen_bitmap.grib $sec_ord_bmp
 # Check there are missing values
-nums=`${tools_dir}grib_get -p numberOfDataPoints,numberOfCodedValues,numberOfMissing $sec_ord_bmp`
+nums=`${tools_dir}/grib_get -p numberOfDataPoints,numberOfCodedValues,numberOfMissing $sec_ord_bmp`
 [ "$nums" = "5969 4 5965" ]
 
-res=`${tools_dir}grib_get -l 33,88.5 $sec_ord_bmp`
+res=`${tools_dir}/grib_get -l 33,88.5 $sec_ord_bmp`
 [ "$res" = "9999 5.51552 9999 9999 " ]
 
-res=`${tools_dir}/grib_get -l 28.5,90 $sec_ord_bmp`
+res=`${tools_dir}//grib_get -l 28.5,90 $sec_ord_bmp`
 [ "$res" = "3.51552 9999 5.26552 9999 " ]
 
 # GRIB-203 nearest on M-F second order boustrophedonic
-res=`${tools_dir}grib_get -w count=1 -l 0,0 lfpw.grib1`
+res=`${tools_dir}/grib_get -w count=1 -l 0,0 lfpw.grib1`
 [ "$res" = "20560.7 20563.4 20554.7 20559.5 " ]
 
 rm -f $sec_ord_bmp
diff --git a/tests/set.sh b/tests/set.sh
index 10fc9f4..e3da95c 100755
--- a/tests/set.sh
+++ b/tests/set.sh
@@ -17,18 +17,18 @@ outfile=${data_dir}/set.grib1
 
 rm -f $outfile || true
 
-${tools_dir}grib_set -v -p levtype,centre,levtype:l,centre:l -s levtype=pl,centre=80 $infile $outfile >$REDIRECT
+${tools_dir}/grib_set -v -p levtype,centre,levtype:l,centre:l -s levtype=pl,centre=80 $infile $outfile >$REDIRECT
 
-levtype=`${tools_dir}grib_get -p levtype $outfile`
+levtype=`${tools_dir}/grib_get -p levtype $outfile`
 [ $levtype = "pl" ]
 
-centre=`${tools_dir}grib_get -p centre $outfile`
+centre=`${tools_dir}/grib_get -p centre $outfile`
 [ $centre = "cnmc" ]
 
-levtype=`${tools_dir}grib_get -p levtype:l $outfile`
+levtype=`${tools_dir}/grib_get -p levtype:l $outfile`
 [ $levtype -eq 100 ]
 
-centre=`${tools_dir}grib_get -p centre:l $outfile`
+centre=`${tools_dir}/grib_get -p centre:l $outfile`
 [ $centre -eq 80 ]
 
 rm -f $outfile || true
@@ -38,23 +38,23 @@ outfile=${data_dir}/set.grib2
 
 rm -f $outfile || true
 
-${tools_dir}grib_set -v -p levtype:l,centre:s  -s levtype:l=100,centre:s=cnmc $infile $outfile >$REDIRECT
+${tools_dir}/grib_set -v -p levtype:l,centre:s  -s levtype:l=100,centre:s=cnmc $infile $outfile >$REDIRECT
 
-levtype=`${tools_dir}grib_get -p levtype $outfile`
+levtype=`${tools_dir}/grib_get -p levtype $outfile`
 [ $levtype = "pl" ]
 
-centre=`${tools_dir}grib_get -p centre $outfile`
+centre=`${tools_dir}/grib_get -p centre $outfile`
 [ $centre = "cnmc" ]
 
-levtype=`${tools_dir}grib_get -p levtype:l $outfile`
+levtype=`${tools_dir}/grib_get -p levtype:l $outfile`
 [ $levtype -eq 100 ]
 
-centre=`${tools_dir}grib_get -p centre:l $outfile`
+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
+${tools_dir}/grib_set -p levtype $infile $outfile 2> $REDIRECT > $REDIRECT
 [ $? -ne 0 ]
 set -e
 
@@ -64,13 +64,13 @@ 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
+    ${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'
+${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/statistics.sh b/tests/statistics.sh
index 8af1fd0..6299438 100755
--- a/tests/statistics.sh
+++ b/tests/statistics.sh
@@ -30,7 +30,7 @@ print "max=[max] min=[min] average=[average]";
 
 EOF
 
-${tools_dir}grib_filter statistics.filter ${data_dir}/$file > statistics.out
+${tools_dir}/grib_filter statistics.filter ${data_dir}/$file > statistics.out
 
 diff statistics.out ${data_dir}/statistics.out.good
 
diff --git a/tests/step.sh b/tests/step.sh
index f5b144f..8c4c762 100755
--- a/tests/step.sh
+++ b/tests/step.sh
@@ -21,10 +21,10 @@ do
     for key in stepRange:s startStep endStep
 	do
       rm -f ${data_dir}/out.grib | true
-      ${tools_dir}grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib
+      ${tools_dir}/grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib
 #      echo grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib
 #      grib_get -p step,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib 
-      ${tools_dir}grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib >> ${templog}
+      ${tools_dir}/grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib >> ${templog}
 	done
   done
 done
@@ -33,23 +33,23 @@ i=5
 key=stepRange:s
 for s in "0-24" "600-1200" "24-48" "36-66"
 do
-   ${tools_dir}grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib
+   ${tools_dir}/grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib
 #   echo grib_set -s ${key}=$s ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib
 #   grib_ls -p step,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib 
-   ${tools_dir}grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib >> ${templog}
+   ${tools_dir}/grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/timeRangeIndicator_${i}.grib ${data_dir}/out.grib >> ${templog}
 done
 
 rm -f ${data_dir}/out.grib | true
 
 # test added for ifs stepType=max,min
-${tools_dir}grib_set -s stepType=max,startStep=3,endStep=6 ${data_dir}/reduced_gaussian_model_level.grib1 ${data_dir}/out.grib
-${tools_dir}grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/reduced_gaussian_model_level.grib1 ${data_dir}/out.grib >> ${templog}
+${tools_dir}/grib_set -s stepType=max,startStep=3,endStep=6 ${data_dir}/reduced_gaussian_model_level.grib1 ${data_dir}/out.grib
+${tools_dir}/grib_get -p mars.step,stepRange,startStep,endStep,P1,P2,timeRangeIndicator,indicatorOfUnitOfTimeRange:l ${data_dir}/reduced_gaussian_model_level.grib1 ${data_dir}/out.grib >> ${templog}
 
 rm -f ${data_dir}/out.grib | true
 
 diff ${templog} ${data_dir}/step.log
 
-(${tools_dir}grib_filter ${data_dir}/step_grib1.filter ${data_dir}/timeRangeIndicator_0.grib > ${templog}) 2>$REDIRECT
+(${tools_dir}/grib_filter ${data_dir}/step_grib1.filter ${data_dir}/timeRangeIndicator_0.grib > ${templog}) 2>$REDIRECT
 
 diff ${templog} ${data_dir}/step_grib1.log
 
@@ -58,17 +58,17 @@ rm -f ${templog} | true
 # GRIB-180
 # Set PDT 4.8 where you can find the EndOfOverallTimeInterval keys
 grib2File=${data_dir}/reduced_latlon_surface_constant.grib2
-${tools_dir}grib_set -sproductDefinitionTemplateNumber=8 $grib2File ${grib2File}.p8tmp
+${tools_dir}/grib_set -sproductDefinitionTemplateNumber=8 $grib2File ${grib2File}.p8tmp
 
 # 78 hours is 3 days and 6 hours
-${tools_dir}grib_set -s step=78 $grib2File.p8tmp ${grib2File}.tmp
-set `${tools_dir}grib_get -p hourOfEndOfOverallTimeInterval,dayOfEndOfOverallTimeInterval ${grib2File}.tmp`
+${tools_dir}/grib_set -s step=78 $grib2File.p8tmp ${grib2File}.tmp
+set `${tools_dir}/grib_get -p hourOfEndOfOverallTimeInterval,dayOfEndOfOverallTimeInterval ${grib2File}.tmp`
 hourEnd=$1; dayEnd=$2
 [ "$hourEnd" = "18" ]
 [ "$dayEnd"  = "8" ]
 
-${tools_dir}grib_set -s step=12 $grib2File.p8tmp ${grib2File}.tmp
-set `${tools_dir}grib_get -p hourOfEndOfOverallTimeInterval,dayOfEndOfOverallTimeInterval ${grib2File}.tmp`
+${tools_dir}/grib_set -s step=12 $grib2File.p8tmp ${grib2File}.tmp
+set `${tools_dir}/grib_get -p hourOfEndOfOverallTimeInterval,dayOfEndOfOverallTimeInterval ${grib2File}.tmp`
 hourEnd=$1; dayEnd=$2
 [ "$hourEnd" = "0" ]
 [ "$dayEnd"  = "6" ]
@@ -79,19 +79,19 @@ grib1_sample=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
 grib2_sample=$ECCODES_SAMPLES_PATH/GRIB2.tmpl
 temp=temp.step.$$.grib
 # M is for Month (code 3)
-${tools_dir}grib_set -s indicatorOfUnitOfTimeRange=M $grib1_sample $temp
-unit=`${tools_dir}grib_get -p unitOfTimeRange $temp`
+${tools_dir}/grib_set -s indicatorOfUnitOfTimeRange=M $grib1_sample $temp
+unit=`${tools_dir}/grib_get -p unitOfTimeRange $temp`
 [ "$unit" = "3" ]
-${tools_dir}grib_set -s indicatorOfUnitOfTimeRange=M $grib2_sample $temp
-unit=`${tools_dir}grib_get -p indicatorOfUnitOfTimeRange $temp`
+${tools_dir}/grib_set -s indicatorOfUnitOfTimeRange=M $grib2_sample $temp
+unit=`${tools_dir}/grib_get -p indicatorOfUnitOfTimeRange $temp`
 [ "$unit" = "3" ]
 
 # m is for Minute (code 0)
-${tools_dir}grib_set -s indicatorOfUnitOfTimeRange=m $grib1_sample $temp
-unit=`${tools_dir}grib_get -p unitOfTimeRange $temp`
+${tools_dir}/grib_set -s indicatorOfUnitOfTimeRange=m $grib1_sample $temp
+unit=`${tools_dir}/grib_get -p unitOfTimeRange $temp`
 [ "$unit" = "0" ]
-${tools_dir}grib_set -s indicatorOfUnitOfTimeRange=m $grib2_sample $temp
-unit=`${tools_dir}grib_get -p indicatorOfUnitOfTimeRange $temp`
+${tools_dir}/grib_set -s indicatorOfUnitOfTimeRange=m $grib2_sample $temp
+unit=`${tools_dir}/grib_get -p indicatorOfUnitOfTimeRange $temp`
 [ "$unit" = "0" ]
 
 rm -f $temp
diff --git a/tests/tigge.sh b/tests/tigge.sh
index 41b4ade..79f8234 100755
--- a/tests/tigge.sh
+++ b/tests/tigge.sh
@@ -17,13 +17,13 @@ dir="${data_dir}/tigge/"
 # check tigge global
 for file in ${dir}tigge_*.grib
 do
-   ${tigge_dir}tigge_check ${file} 2> $REDIRECT > $REDIRECT
+   ${tigge_dir}/tigge_check ${file} 2> $REDIRECT > $REDIRECT
 done
 
 # check tigge-lam
 for file in ${dir}tiggelam_*.grib
 do
-   ${tigge_dir}tigge_check -l ${file} 2> $REDIRECT > $REDIRECT
+   ${tigge_dir}/tigge_check -l ${file} 2> $REDIRECT > $REDIRECT
 done
 
 
@@ -31,7 +31,7 @@ done
 # All the GRIB files in the samples are non-TIGGE
 for file in ${ECCODES_SAMPLES_PATH}/regular_*.tmpl; do
    set +e
-   ${tigge_dir}tigge_check ${file} 2> $REDIRECT > $REDIRECT
+   ${tigge_dir}/tigge_check ${file} 2> $REDIRECT > $REDIRECT
    status=$?
    set -e
    if [ $status -eq 0 ]; then
@@ -42,14 +42,14 @@ done
 
 # GRIB-531
 TEMP=temp.$$.tigge
-${tools_dir}grib_get -nparameter ${data_dir}/tigge_pf_ecmwf.grib2 > $TEMP
+${tools_dir}/grib_get -nparameter ${data_dir}/tigge_pf_ecmwf.grib2 > $TEMP
 diff ${data_dir}/tigge_pf_ecmwf.grib2.ref $TEMP
 
 # GRIB-205. Changing productionStatusOfProcessedData should not change
 # anything else
 input=${dir}/tigge_ecmf_sfc_sd.grib
-${tools_dir}grib_set -s productionStatusOfProcessedData=5 $input $TEMP
-${tools_dir}grib_compare -bproductionStatusOfProcessedData $input $TEMP
+${tools_dir}/grib_set -s productionStatusOfProcessedData=5 $input $TEMP
+${tools_dir}/grib_compare -bproductionStatusOfProcessedData $input $TEMP
 
 rm -f $TEMP
 
@@ -64,7 +64,7 @@ tigge_bad_validity="
 "
 for file in $tigge_bad_validity; do
    set +e
-   ${tigge_dir}tigge_check -w ${dir}${file} > $TEMP
+   ${tigge_dir}/tigge_check -w ${dir}${file} > $TEMP
    status=$?
    set -e
    [ $status -eq 1 ]
diff --git a/tests/tigge_conversions.sh b/tests/tigge_conversions.sh
index 51b6412..eeaf798 100755
--- a/tests/tigge_conversions.sh
+++ b/tests/tigge_conversions.sh
@@ -33,12 +33,12 @@ if [ -z "$exclude" ]; then
    rm -f ${temp1} ${temp2} || true
 
    # 2 to 1 conversion check
-   ${tools_dir}grib_set -s editionNumber=1 ${file} ${temp1} 2> $REDIRECT > $REDIRECT
-   ${tools_dir}grib_compare -P -c data:n,geography:n ${temp1} ${file} 2> $REDIRECT > $REDIRECT
+   ${tools_dir}/grib_set -s editionNumber=1 ${file} ${temp1} 2> $REDIRECT > $REDIRECT
+   ${tools_dir}/grib_compare -P -c data:n,geography:n ${temp1} ${file} 2> $REDIRECT > $REDIRECT
 
    # 1 to 2 conversion check
-   ${tools_dir}grib_set -s editionNumber=2 ${temp1} ${temp2} 2> $REDIRECT > $REDIRECT
-   ${tools_dir}grib_compare -P -c shortName,data:n,geography:n ${temp2} ${file} 2> $REDIRECT > $REDIRECT
+   ${tools_dir}/grib_set -s editionNumber=2 ${temp1} ${temp2} 2> $REDIRECT > $REDIRECT
+   ${tools_dir}/grib_compare -P -c shortName,data:n,geography:n ${temp2} ${file} 2> $REDIRECT > $REDIRECT
 fi
 done
 
diff --git a/tests/tiny.sh b/tests/tiny.sh
index 645923b..ea13750 100755
--- a/tests/tiny.sh
+++ b/tests/tiny.sh
@@ -18,5 +18,5 @@ set values = { 1.0e-110, 1.5e-110, 1.005e-110 }
 write;
 EOF
 
-${tools_dir}grib_filter ${data_dir}/f.rules ${data_dir}/ 2> $REDIRECT > $REDIRECT
+${tools_dir}/grib_filter ${data_dir}/f.rules ${data_dir}/ 2> $REDIRECT > $REDIRECT
 
diff --git a/tests/uerra.sh b/tests/uerra.sh
index 9a554a2..4aba675 100755
--- a/tests/uerra.sh
+++ b/tests/uerra.sh
@@ -29,35 +29,35 @@ test_stream_and_type()
         pspd=9
     fi
 
-    ${tools_dir}grib_set -s tablesVersion=15,productionStatusOfProcessedData=$pspd \
+    ${tools_dir}/grib_set -s tablesVersion=15,productionStatusOfProcessedData=$pspd \
                            $grib2_sample $tempSample
 
     grib_check_key_equals $tempSample 'stream,mars.stream' 'oper oper'
     
     # Check mars model is not set
-    model=`${tools_dir}grib_get -f -p mars.model $tempSample`
+    model=`${tools_dir}/grib_get -f -p mars.model $tempSample`
     [ "$model" = "not_found" ]
 
-    ${tools_dir}grib_set -s typeOfProcessedData=0 $tempSample $temp1
+    ${tools_dir}/grib_set -s typeOfProcessedData=0 $tempSample $temp1
     grib_check_key_equals $temp1 'mars.type' 'an'
-    ${tools_dir}grib_set -s typeOfProcessedData=1 $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
+    ${tools_dir}/grib_set -s marsStream=enda $tempSample $temp1    # ENSEMBLE
     grib_check_key_exists $temp1 'perturbationNumber'
 
     # All combinations
     for mt in an fc; do
         for ms in oper enda; do
             echo "Testing stream=$ms type=$mt ..."
-            ${tools_dir}grib_set -s marsStream=$ms,marsType=$mt $tempSample $temp1
+            ${tools_dir}/grib_set -s marsStream=$ms,marsType=$mt $tempSample $temp1
             grib_check_key_equals $temp1 'mars.stream,mars.type' "$ms $mt"
 
             # Param 228228 (accum) and 167 (instant)
-            ${tools_dir}grib_set -s stepType=accum,paramId=228228 $temp1 $temp2
+            ${tools_dir}/grib_set -s stepType=accum,paramId=228228 $temp1 $temp2
             grib_check_key_equals $temp2 'stream,type' "$ms $mt"
 
-            ${tools_dir}grib_set -s paramId=167                   $temp1 $temp2
+            ${tools_dir}/grib_set -s paramId=167                   $temp1 $temp2
             grib_check_key_equals $temp2 'stream,type' "$ms $mt"
         done
     done
diff --git a/tests/utils.sh b/tests/utils.sh
index a7ecf31..8c3b6d7 100644
--- a/tests/utils.sh
+++ b/tests/utils.sh
@@ -20,7 +20,7 @@ grib_check_key_equals()
    a_file=$1
    a_key=$2
    a_expected=$3
-   a_result=`${tools_dir}grib_get -p $a_key $a_file`
+   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"
diff --git a/tigge/tigge_check.c b/tigge/tigge_check.c
index ae7e77a..2ad4495 100755
--- a/tigge/tigge_check.c
+++ b/tigge/tigge_check.c
@@ -766,13 +766,13 @@ static void has_bitmap(grib_handle* h,const parameter* p,double min,double max)
 static void has_soil_level(grib_handle* h,const parameter* p,double min,double max)
 {
     CHECK(get(h,"topLevel") == get(h,"bottomLevel"));
-    CHECK(le(h,"level",8)); /* max in UERRA */
+    CHECK(le(h,"level",14)); /* max in UERRA */
 }
 
 static void has_soil_layer(grib_handle* h,const parameter* p,double min,double max)
 {
     CHECK(get(h,"topLevel") == get(h,"bottomLevel") - 1);
-    CHECK(le(h,"level",8)); /* max in UERRA */
+    CHECK(le(h,"level",14)); /* max in UERRA */
 }
 
 static void six_hourly(grib_handle* h,const parameter* p,double min,double max)
diff --git a/tigge/tigge_check.h b/tigge/tigge_check.h
index 97df55f..f8e31cf 100644
--- a/tigge/tigge_check.h
+++ b/tigge/tigge_check.h
@@ -1199,6 +1199,26 @@ s2s/egrr: s2s.z_s2s_c_ukmo_20160102000000_glob_prod_pf_1440_002.rt.pl.grib2, fie
       {&point_in_time, &given_level, &pressure_level},
    },
 
+   {
+      "geopotential_pl",
+      -1300,
+      306000,
+      200,
+      350000,
+      {
+/*       {"model", GRIB_TYPE_STRING, 0, "glob"}, */
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 4},
+
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &pressure_level},
+   },
+
+
 /*
 warning: s2s.lfpw_t_10.grib2, field 61 [temperature_pl]: temperature_pl minimum value 159.934 is not in [160,260]
 s2s/egrr: warning: s2s.z_s2s_c_ukmo_19960417000000_glob_prod_pf_1440_002.hc.pl.grib2, field 450 [temperature_pl]: temperature_pl minimum value 260.687 is not in [150,260]
@@ -1261,16 +1281,15 @@ warning: s2s.z_tigge_c_kwbc_20020817000000_ncep_prod_pf_pl_0000_003_0010_u.grib2
    s2s/ammc: warning: s2s.u_20150913_31.grib2, field 550 [u_velocity_pl]: u_velocity_pl minimum value 0.352796 is not in [-150,-0.001]
    s2s/ammc: warning: s2s.u_20151101_13.grib2, field 401 [u_velocity_pl]: u_velocity_pl minimum value -195.645 is not in [-180,1]
    uerra/edzw-an: warning: /tmp/marm/uerra/cosmo/sample2/grib2/an.200812020800.u.pl.grib2, field 1 [u_velocity_pl]: u_velocity_pl minimum value 1.41138 is not in [-200,1]
+   s2s, ammc-enfo: s2s.u_20161222_4.pl.grib2, field 261 [u_velocity_pl]: u_velocity_pl minimum value -223.937 is not in [-200,-1]
 */
    {
       "u_velocity_pl",
-      -200,
-      -1,
+      -250,
+      5,
       1,
-      200,
+      250,
       {
-         {"model", GRIB_TYPE_STRING, 0, "glob"},
-
          {"paramId", GRIB_TYPE_LONG, 131},
 
          {"discipline", GRIB_TYPE_LONG, 0},
@@ -1349,17 +1368,16 @@ warning: s2s.z_tigge_c_kwbc_20020817000000_ncep_prod_pf_pl_0000_003_0010_u.grib2
 warning: s2s.z_tigge_c_kwbc_20150817000000_ncep_prod_pf_pl_0000_015_0500_w.grib2, field 3 [w_vertical_velocity_pl]: w_vertical_velocity_pl minimum value -7.25731 is not in [-6,0]
   s2s/kwbc/enfo: warning: s2s.z_tigge_c_kwbc_20151114000000_ncep_prod_pf_pl_0000_011_0500_w.grib2, field 7 [w_vertical_velocity_pl]: w_vertical_velocity_pl minimum value -10.202 is not in [-10,0]
   s2s/cwao/enfo: warning: s2s.z_s2s_c_cwao_20160512000000_glob_prod_??_pl_00_384_003.grib2, field 28 [w_vertical_velocity_pl]: w_vertical_velocity_pl minimum value -19.8681 is not in [-12,0]
+  s2s/rksl/enfh: warning: s2s.002.pl.grib2, field 2489 [w_vertical_velocity_pl]: w_vertical_velocity_pl maximum value -1.23174 is not in [-1,25]
 
 */
    {
       "w_vertical_velocity_pl",
       -25,
       0,
-      0,
+       -2,
       25,
       {
-         {"model", GRIB_TYPE_STRING, 0, "glob"},
-
          {"paramId", GRIB_TYPE_LONG, 135},
 
          {"discipline", GRIB_TYPE_LONG, 0},
@@ -1471,7 +1489,7 @@ uerra, eswi-an: an.sp.sfc.grib2, field 1 [surface_pressure_sfc]: surface_pressur
       "water_runoff_sfc",
       -0.001,
        5,
-       0.5,
+       0.3,
        30,
       {
          {"model", GRIB_TYPE_STRING, 0, "glob"},
@@ -1767,7 +1785,7 @@ s2s/rums warning: s2s.z_s2s_c_rhmc_20150819000000_glob_prod_1464_001.sl.grib2, f
       "soil_moisture_top_100_cm_sfc.glob",
       -1e-15,
       70,
-      400,
+      380,
       1400,
       {
          {"model", GRIB_TYPE_STRING, 0, "glob"},
@@ -1933,7 +1951,7 @@ warning: s2s.z_tigge_c_kwbc_19990817000000_ncep_prod_cf_sl_0024_000_0000_sd.grib
 */
    {
       "snow_depth_water_equivalent_sfc.glob.s2",
-      0,
+      -0.00001,
       0,
       100,
       15000,
@@ -2253,6 +2271,28 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
       },
       {&point_in_time, &predefined_thickness},
    },
+/* 
+
+uerra/egrr (something like ad hoc 1 grid-point issue (similarly grid-point storms..)): warning: enda.2009-01-20.sfc.grib2, field 831 [low_cloud_cover_sfc]: low_cloud_cover_sfc maximum value 317.188 is not in [0.9999,100]
+*/
+   {
+      "low_cloud_cover_sfc.egrr",
+      0,
+      1e-10,
+      0.9999,
+      400.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",
@@ -2311,7 +2351,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
    {
       "u_velocity_ml",
       -200,
-         5,
+        10,
        0.1,
        200,
       {
@@ -2363,7 +2403,8 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
 
 /* 
 uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl.grib2, field 76 [geopotential_height_pl.ur]: geopotential_height_pl.ur minimum value -2938.29 is not in [-1300,300000]
-*/
+
+??? xxx TBD to be deleted and the global one used only!
 
    {
       "geopotential_height_pl.ur",
@@ -2383,6 +2424,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
       },
       {&point_in_time, &given_level, &pressure_level},
    },
+*/
 
    {
       "specific_cloud_ice_water_content_pl",
@@ -2469,9 +2511,9 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
    {
       "relative_humidity_pl",
        0,
-       20,
+       30,
        0,
-       100.01,
+       160,
       {
          {"paramId", GRIB_TYPE_LONG, 157},
          {"discipline", GRIB_TYPE_LONG, 0},
@@ -2555,7 +2597,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
       0,
       20,
       1,
-      100.01,
+      160,
       {
          {"paramId", GRIB_TYPE_LONG, 157},
          {"discipline", GRIB_TYPE_LONG, 0},
@@ -2646,7 +2688,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
       0,
       25,
       90,
-      100.1,
+      130,
       {
          {"paramId", GRIB_TYPE_LONG, 260242},
          {"discipline", GRIB_TYPE_LONG, 0},
@@ -3099,7 +3141,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
       "soil_temperature_layer",
       200,
       280,
-      300,
+      285,
       350,
       {
          {"paramId", GRIB_TYPE_LONG, 260360},
@@ -3116,24 +3158,6 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
    },
 
    {
-      "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},
-   },
-   {
       "cloud_cover_pl.ur",
       0,
       1e-10,
@@ -3202,7 +3226,7 @@ uerra, eswi-enfo:total_cloud_cover_sfc maximum value 96.4844 is not in [100,100]
    {
       "total_cloud_cover_sfc.ur.eswi",
       0,
-      1e-10,
+      2e-10,
       90.,
       100.,
       {
@@ -3220,29 +3244,6 @@ uerra, eswi-enfo:total_cloud_cover_sfc maximum value 96.4844 is not in [100,100]
       {&point_in_time, &predefined_thickness},
    },
 
-/*
- uerra, cosmo-det-an: u_velocity_pl minimum value 1.40681 is not in [-200,-1]
-*/
-   {
-      "u_velocity_pl",
-      -200,
-      5,
-      1,
-      200,
-      {
-         {"class", GRIB_TYPE_STRING, 0, "ur"},
-
-         {"paramId", GRIB_TYPE_LONG, 131},
-
-         {"discipline", GRIB_TYPE_LONG, 0},
-         {"parameterCategory", GRIB_TYPE_LONG, 2},
-         {"parameterNumber", GRIB_TYPE_LONG, 2},
-
-         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
-         {NULL, },
-      },
-      {&point_in_time, &given_level, &pressure_level},
-   },
    {
       "soil_depth",
       0.005,
@@ -3261,5 +3262,38 @@ uerra, eswi-enfo:total_cloud_cover_sfc maximum value 96.4844 is not in [100,100]
       {&point_in_time, &given_level, &has_bitmap, &has_soil_level},
    },
 
+   {
+      "volumetric_field_capacity",
+      -1e-6,
+      1e-6,
+      -1e-6,
+      1e-6,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260211},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 11},
+         {NULL, },
+      },
+      {&point_in_time, &has_bitmap},
+   },
+
+   {
+      "volumetric_wilting_point",
+      -1e-6,
+      1e-6,
+      -1e-6,
+      1e-6,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260200},
+         {"discipline", GRIB_TYPE_LONG, 2},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 27},
+         {NULL, },
+      },
+      {&point_in_time, &has_bitmap},
+   },
+
+
 };
 
diff --git a/tools/bufr_compare.c b/tools/bufr_compare.c
index 6837abc..ba21690 100644
--- a/tools/bufr_compare.c
+++ b/tools/bufr_compare.c
@@ -195,7 +195,7 @@ grib_option grib_options[]={
     {"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},
+/*    {"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},
diff --git a/tools/bufr_copy.c b/tools/bufr_copy.c
index 6e3a219..7927082 100644
--- a/tools/bufr_copy.c
+++ b/tools/bufr_copy.c
@@ -29,12 +29,12 @@ grib_option grib_options[]={
         {"p:",0,0,1,1,0},
         {"s:",0,0,0,1,0},
         {"P:",0,0,0,1,0},
-        {"w:","key[:{s/d/i}]=value,key[:{s/d/i}]=value,...","\n\t\tWhere clause."
+        {"w:","key[:{s|d|i}]=value,key[:{s|d|i}]=value,...","\n\t\tWhere clause."
                 "\n\t\tOnly BUFR messages matching the key/value constraints are "
-                "copied to the\n\t\toutput_bufr_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},
+                "copied to the output_bufr_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\t\tNote: only one -w clause is allowed.\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},
diff --git a/tools/bufr_copy.sh b/tools/bufr_copy.sh
index f9d0e2a..c98c7b8 100755
--- a/tools/bufr_copy.sh
+++ b/tools/bufr_copy.sh
@@ -13,5 +13,5 @@ echo "\endverbatim\\n"
 
 echo "-# Use the square brackets to insert the value of a key in the name of the output file. \\n"
 echo "\verbatim"
-echo ">bufr_copy in.bufr out_[dataCategory].bufr "
+echo ">bufr_copy in.bufr 'out_[dataCategory].bufr' "
 echo "\endverbatim\\n"
diff --git a/tools/bufr_dump.c b/tools/bufr_dump.c
index 3c78ba3..505ba21 100644
--- a/tools/bufr_dump.c
+++ b/tools/bufr_dump.c
@@ -17,18 +17,18 @@
 
 grib_option grib_options[]={
         /*  {id, args, help}, on, command_line, value*/
-        {"j:","s/f/a","\n\t\tJSON mode (JavaScript Object Notation)."
+        {"j:","s|f|a","\n\t\tJSON mode (JavaScript Object Notation)."
                 "\n\t\tOptions: s->structure, f->flat (only data), a->all attributes"
                 "\n\t\tDefault mode is structure.\n",
                 1,1,"s"},
-        {"D:","filter/fortran/python/C","\n\t\tDecoding dump. Provides instructions to decode the input message."
+        {"D:","filter|fortran|python|C","\n\t\tDecoding dump. Provides instructions to decode the input message."
                 "\n\t\tOptions: filter  -> filter instructions file to decode input BUFR"
                 "\n\t\t         fortran -> fortran program to decode the input BUFR"
                 "\n\t\t         python  -> python script to decode the input BUFR"
                 "\n\t\t         C       -> C program to decode the input BUFR"
                 "\n\t\tDefault mode is filter.\n",
                 0,1,"filter"},
-        {"E:","filter/fortran/python/C","\n\t\tEncoding dump. Provides instructions to create the input message."
+        {"E:","filter|fortran|python|C","\n\t\tEncoding dump. Provides instructions to create the input message."
                 "\n\t\tOptions: filter  -> filter instructions file to encode input BUFR"
                 "\n\t\t         fortran -> fortran program to encode the input BUFR"
                 "\n\t\t         python  -> python script to encode the input BUFR"
@@ -57,7 +57,7 @@ grib_option grib_options[]={
 
 char* grib_tool_description="Dump the content of a BUFR file in different formats.";
 char* grib_tool_name="bufr_dump";
-char* grib_tool_usage="[options] file file ...";
+char* grib_tool_usage="[options] bufr_file bufr_file ...";
 static int json=0;
 static char* json_option=0;
 static int first_handle=1;
diff --git a/tools/bufr_get.c b/tools/bufr_get.c
index 0647d9d..83a7a61 100644
--- a/tools/bufr_get.c
+++ b/tools/bufr_get.c
@@ -35,7 +35,7 @@ grib_option grib_options[]={
         {"v",0,0,1,0,0}
 };
 
-char* grib_tool_description="Get values of some keys from a BUFR file."
+char* grib_tool_description="Get values of some header keys from a BUFR file."
         "\n\tIt is similar to bufr_ls, but fails returning an error code "
         "\n\twhen an error occurs (e.g. key not found).";
 char* grib_tool_name="bufr_get";
diff --git a/tools/bufr_get.sh b/tools/bufr_get.sh
index 87cf3ac..3462a82 100755
--- a/tools/bufr_get.sh
+++ b/tools/bufr_get.sh
@@ -5,6 +5,6 @@ echo "-# bufr_get fails if a key is not found.\\n "
 echo "\\verbatim "
 echo ">bufr_get -p centreName ../data/bufr/syno_1.bufr"
 set +e
-./grib_get -p gcentreName  ../data/bufr/syno_1.bufr
+./bufr_get -p gcentreName  ../data/bufr/syno_1.bufr
 set -e
 echo "\\endverbatim "
diff --git a/tools/bufr_ls.c b/tools/bufr_ls.c
index c8d7586..ea2894d 100644
--- a/tools/bufr_ls.c
+++ b/tools/bufr_ls.c
@@ -22,7 +22,7 @@ grib_option grib_options[]={
         {"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},
+/*      {"B:",0,0,0,1,0},              */
         {"s:",0,0,0,1,0},
         {"n:",0,0,1,1,"ls"},
         {"m",0,0,0,1,0},
@@ -38,9 +38,10 @@ grib_option grib_options[]={
 };
 
 char* grib_tool_description="List content of BUFR files printing values of "
-        "some keys.\n\tIt does not fail when a key is not found.";
+        "some header keys.\n\tOnly scalar keys can be printed."
+        "\n\tIt does not fail when a key is not found.";
 char* grib_tool_name="bufr_ls";
-char* grib_tool_usage="[options] file file ...";
+char* grib_tool_usage="[options] bufr_file bufr_file ...";
 
 int grib_options_count=sizeof(grib_options)/sizeof(grib_option);
 
diff --git a/tools/bufr_set.c b/tools/bufr_set.c
index e5b239a..a9fe018 100644
--- a/tools/bufr_set.c
+++ b/tools/bufr_set.c
@@ -22,12 +22,13 @@ grib_option grib_options[]={
 /*     {"n:","noise percentage","\n\t\tAdd noise to the data values. The noise added is the given percentage of the data value.\n",0,1,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\tSet is only executed for grib messages matching all the "
-                "key/value constraints.\n\t\tIf a grib message does not match the constraints it is"
-                " copied unchanged\n\t\tto the output_grib_file. This behaviour can be changed "
+        {"w:","key[:{s|d|i}]=value,key[:{s|d|i}]=value,...",
+                "\n\t\tWhere clause.\n\t\tSet is only executed for BUFR messages matching all the "
+                "key/value constraints.\n\t\tIf a BUFR message does not match the constraints it is"
+                " copied unchanged\n\t\tto the output_bufr_file. This behaviour can be changed "
                 "setting the option -S.\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},
+                " an integer (key:i)\n\t\ttype can be defined. Default type is string."
+                "\n\t\tNote: only one -w clause is allowed.\n", 0,1,0},
         {"q",0,0,1,0,0},
         {"7",0,0,0,1,0},
         {"S",0,0,0,1,0},
diff --git a/tools/grib_compare.sh b/tools/grib_compare.sh
index 4fb35a4..32e5169 100755
--- a/tools/grib_compare.sh
+++ b/tools/grib_compare.sh
@@ -79,7 +79,7 @@ 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:[i/d/s/n],key2:[i/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:
diff --git a/tools/grib_copy.c b/tools/grib_copy.c
index f727fe8..91a2320 100644
--- a/tools/grib_copy.c
+++ b/tools/grib_copy.c
@@ -28,13 +28,12 @@ grib_option grib_options[]={
         {"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."
+        {"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 output_grib_file."
              "\n\t\tA valid constraint is of type key=value or key!=value."
              "\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},
+             "double (key:d) or an integer (key:i)\n\t\ttype can be defined. Default type is string"
+             "\n\t\tNote: only one -w clause is allowed.\n",0,1,0},
         {"B:",0,0,0,1,0},
         /*{"s:",0,0,0,1,0},*/
         {"V",0,0,0,1,0},
diff --git a/tools/grib_merge.c b/tools/grib_merge.c
index dc7c223..6e1144e 100644
--- a/tools/grib_merge.c
+++ b/tools/grib_merge.c
@@ -24,7 +24,7 @@ grib_handle *hh=0;
 grib_values key_values[MAX_KEY_VALUES];
 int key_values_size=MAX_KEY_VALUES;
 
-char* grib_tool_description="Merge two fields with identical parameters and different geografical area";
+char* grib_tool_description="Merge two fields with identical parameters and different geographical area";
 char* grib_tool_name="grib_merge";
 char* grib_tool_usage="[options] file file ... output_file";
 
diff --git a/tools/grib_options.c b/tools/grib_options.c
index a1d347c..0ce02de 100644
--- a/tools/grib_options.c
+++ b/tools/grib_options.c
@@ -30,7 +30,7 @@ grib_options_help grib_options_help_list[] ={
   {"B:","order by directive",
      "\n\t\tOrder by. The output will be ordered according to the order by directive."
      "\n\t\tOrder by example: \"step:i asc, centre desc\" (step numeric ascending and centre descending)\n"},
-  {"c:","key[:i/d/s/n],key[:i/d/s/n],...",
+     {"c:","key[:i|d|s|n],key[:i|d|s|n],...",
    "\n\t\tOnly the listed keys or namespaces (:n) are compared. The optional letter after the colon is used "
    "\n\t\tto force the type in the comparison: i->integer, d->float, s->string, n->namespace."
    "\n\t\tSee -a option. Incompatible with -H option.\n"},
@@ -58,7 +58,7 @@ grib_options_help grib_options_help_list[] ={
    "\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}],...",
+  {"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)"
    "\n\t\ttype can be requested. Default type is string.\n"},
@@ -66,19 +66,20 @@ grib_options_help grib_options_help_list[] ={
   {"r",0,"Repack data. Sometimes after setting some keys involving properties"
          "\n\t\tof the packing algorithm a repacking of data is needed."
          "\n\t\tThis repacking is performed setting this -r option.\n"},
-  {"s:","key[:{s/d/i}]=value,key[:{s/d/i}]=value,...",
+  {"s:","key[:{s|d|i}]=value,key[:{s|d|i}]=value,...",
    "\n\t\tKey/values to set."
    "\n\t\tFor each key a string (key:s), a double (key:d) or an integer (key:i)"
    "\n\t\ttype can be defined. By default the native type is set.\n"},
   {"t",0,"Print type information.\n"},
-  {"w:","key[:{s/d/i}]{=/!=}value,key[:{s/d/i}]{=/!=}value,...",
+  {"w:","key[:{s|d|i}]{=|!=}value,key[:{s|d|i}]{=|!=}value,...",
    "\n\t\tWhere clause."
    "\n\t\tMessages are processed only if they match all the"
    " key/value constraints."
    "\n\t\tA valid constraint is of type key=value or key!=value."
    "\n\t\tFor each key a string (key:s), a double (key:d) or"
    " an integer (key:i)\n\t\ttype can be specified. Default type is string."
-   "\n\t\tIn the value you can also use the forward-slash character '/' to specify an OR condition (i.e. a logical disjunction)\n"
+   "\n\t\tIn the value you can also use the forward-slash character '/' to specify an OR condition (i.e. a logical disjunction)"
+   "\n\t\tNote: only one -w clause is allowed.\n"
   },
   {"v",0,"Verbose.\n"},
   {"7",0,"Does not fail when the message has wrong length\n"},
@@ -89,13 +90,13 @@ grib_options_help grib_options_help_list[] ={
   {"H",0,"Print octet content in hexadecimal format.\n"},
   {"M",0,"Multi-field support off. Turn off support for multiple fields in single grib message.\n"},
   {"O",0,"Octet mode. WMO documentation style dump.\n"},
-  {"P:","key[:{s/d/i}],key[:{s/d/i}],...",
+  {"P:","key[:{s|d|i}],key[:{s|d|i}],...",
    "\n\t\tAs -p adding the declared keys to the default list.\n"},
   {"R:","key1=relative_error1,key2=relative_error2,...\n",
    "\tCompare floating point values using the relative error as tolerance."
 "\n\t\tkey1=relative_error will compare key1 using relative_error1."
 "\n\t\tall=relative_error will compare all the floating point keys using relative_error. Default all=0.\n"},
-  {"S",0,"Strict. Only grib messages matching all the constraints are copied to"
+  {"S",0,"Strict. Only messages matching all the constraints are copied to"
    "\n\t\tthe output file\n"},
   {"T:","T | B | M | A","Message type. T->GTS, B->BUFR, M->METAR (Experimental),A->Any (Experimental).\n\t\t\tThe input file is interpreted according to the message type.\n"},
   {"V",0,"Version.\n"},
diff --git a/tools/grib_set.c b/tools/grib_set.c
index 763e100..6dd31ae 100644
--- a/tools/grib_set.c
+++ b/tools/grib_set.c
@@ -22,14 +22,15 @@ grib_option grib_options[]={
         /*{"n:","noise percentage","\n\t\tAdd noise to the data values. The noise added is the given percentage of the data value.\n",0,1,0},*/
         {"p:",0,0,1,1,0},
         {"P:",0,0,0,1,0},
-        {"w:","key[:{s/d/i}]{=/!=}value,key[:{s/d/i}]=value,...",
+        {"w:","key[:{s|d|i}]{=|!=}value,key[:{s|d|i}]=value,...",
               "\n\t\tWhere clause.\n\t\tSet is only executed for grib messages matching all the "
               "key/value constraints.\n\t\tIf a grib message does not match the constraints it is"
               " copied unchanged\n\t\tto the output_grib_file. This behaviour can be changed "
               "setting the option -S."
               "\n\t\tA valid constraint is of type key=value or key!=value."
               "\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},
+              " an integer (key:i)\n\t\ttype can be defined. Default type is string."
+              "\n\t\tNote: only one -w clause is allowed.\n",0,1,0},
         {"q",0,0,1,0,0},
         {"7",0,0,0,1,0},
         {"S",0,0,0,1,0},
diff --git a/tools/grib_to_netcdf.c b/tools/grib_to_netcdf.c
index d90abee..4af8443 100644
--- a/tools/grib_to_netcdf.c
+++ b/tools/grib_to_netcdf.c
@@ -1641,7 +1641,7 @@ static hypercube *new_hypercube(const request *r)
     int total = 0, count = 0;
     int n = 0;
     const char *val = 0;
-
+    Assert(h);
     h->r = clone_one_request(r);
     h->cube = empty_request("CUBE");
 
@@ -1746,8 +1746,10 @@ static hypercube *new_hypercube_from_mars_request(const request *r)
     }
 
     n = count_values(s.c->cube, "axis");
-    if(n)
+    if(n) {
         s.c->compare = (namecmp*)calloc(sizeof(namecmp), n);
+        Assert(s.c->compare);
+    }
 
     for(i = 0; i < n; i++)
         s.c->compare[i] = comparator(get_value(s.c->cube, "axis", i));
@@ -1771,8 +1773,10 @@ static hypercube *new_simple_hypercube_from_mars_request(const request *r)
 
     free_one_request(s.r);
     n = count_values(s.c->cube, "axis");
-    if(n)
+    if(n) {
         s.c->compare = (namecmp*)calloc(sizeof(namecmp), n);
+        Assert(s.c->compare);
+    }
 
     for(i = 0; i < n; i++)
         s.c->compare[i] = comparator(get_value(s.c->cube, "axis", i));
diff --git a/tools/gts_copy.c b/tools/gts_copy.c
index 5af856b..8304aa9 100644
--- a/tools/gts_copy.c
+++ b/tools/gts_copy.c
@@ -22,7 +22,7 @@ grib_option grib_options[]={
         {"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."
+        {"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 "
diff --git a/tools/metar_copy.c b/tools/metar_copy.c
index 9f79d8c..b13ba85 100644
--- a/tools/metar_copy.c
+++ b/tools/metar_copy.c
@@ -22,8 +22,8 @@ grib_option grib_options[]={
         {"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 "
+        {"w:","key[:{s|d|i}]=value,key[:{s|d|i}]=value,...","\n\t\tWhere clause."
+                "\n\t\tOnly 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},
diff --git a/version.sh b/version.sh
index 0438ff3..ef984d4 100644
--- a/version.sh
+++ b/version.sh
@@ -14,7 +14,7 @@ PACKAGE_NAME='eccodes'
 
 # Package version
 ECCODES_MAJOR_VERSION=2
-ECCODES_MINOR_VERSION=1
+ECCODES_MINOR_VERSION=2
 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