[eccodes] 84/106: upstream release 2.3.0

Alastair McKinstry mckinstry at moszumanska.debian.org
Fri Jul 28 09:05:43 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 a7aee90d71c42107ec828dabeebbd81fd02a00c4
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Thu May 25 06:42:17 2017 +0100

    upstream release 2.3.0
---
 VERSION.cmake                                      |    2 +-
 cmake/CMakeLists.txt                               |    5 +
 cmake/FindNAG.cmake                                |   43 +
 cmake/VERSION.cmake                                |    8 +-
 cmake/compiler_flags/Clang_C.cmake                 |    2 +-
 cmake/compiler_flags/Clang_CXX.cmake               |    2 +-
 cmake/compiler_flags/GNU_Fortran.cmake             |    2 +
 cmake/compiler_flags/Intel_Fortran.cmake           |   16 +-
 .../contrib/GreatCMakeCookOff/tests/CMakeLists.txt |   12 +
 .../GreatCMakeCookOff/tests/cpp11/CMakeLists.txt   |    3 +
 cmake/ecbuild-config-version.cmake                 |   12 -
 cmake/ecbuild-config.cmake                         |   97 --
 cmake/ecbuild_add_executable.cmake                 |   35 +-
 cmake/ecbuild_add_library.cmake                    |   27 +-
 cmake/ecbuild_add_test.cmake                       |   21 +-
 cmake/ecbuild_append_to_rpath.cmake                |   15 +-
 cmake/ecbuild_bundle.cmake                         |   10 +-
 cmake/ecbuild_check_os.cmake                       |  171 +++-
 cmake/ecbuild_compiler_flags.cmake                 |   16 +-
 cmake/ecbuild_declare_project.cmake                |   11 +-
 cmake/ecbuild_define_paths.cmake                   |   19 +-
 cmake/ecbuild_find_omp.cmake                       |    4 +-
 cmake/ecbuild_get_test_data.cmake                  |    9 +-
 cmake/ecbuild_git.cmake                            |    6 +-
 cmake/ecbuild_install_project.cmake                |    2 +
 cmake/ecbuild_log.cmake                            |    2 +-
 cmake/ecbuild_pkgconfig.cmake                      |    2 +-
 cmake/ecbuild_remove_fortran_flags.cmake           |    6 +-
 cmake/ecbuild_setup_test_framework.cmake           |   29 +-
 cmake/ecbuild_system.cmake                         |   15 +-
 cmake/ecbuild_uninstall.cmake.in                   |   15 +-
 cmake/project-config.cmake.in                      |    2 +-
 cmake/sg.pl                                        |    0
 data/bufr/bufr_data_files.txt                      |    2 +
 definitions/Makefile.am                            | 1075 ++++++++++++++++++++
 .../bufr/tables/0/local/1/254/0/element.table      |    6 +
 .../tables/0/local/4/98/0/codetables/25192.table   |    3 +
 .../bufr/tables/0/local/4/98/0/element.table       |    8 +
 .../bufr/tables/0/wmo/28/codetables/1003.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/10063.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/10064.table    |    4 +
 .../0/wmo/{latest => 28}/codetables/1007.table     |    1 +
 .../bufr/tables/0/wmo/28/codetables/1024.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/1028.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/1029.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/1033.table     |  234 +++++
 .../0/wmo/{latest => 28}/codetables/1034.table     |    3 +-
 .../bufr/tables/0/wmo/28/codetables/1036.table     |   38 +
 .../bufr/tables/0/wmo/28/codetables/1038.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/1052.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/1090.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/1092.table     |    5 +
 .../0/wmo/{latest => 28}/codetables/1101.table     |    2 +-
 .../bufr/tables/0/wmo/28/codetables/11030.table    |   25 +
 .../bufr/tables/0/wmo/28/codetables/11031.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/11037.table    |   30 +
 .../bufr/tables/0/wmo/28/codetables/11038.table    |   17 +
 .../bufr/tables/0/wmo/28/codetables/11039.table    |   17 +
 .../bufr/tables/0/wmo/28/codetables/1150.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/1151.table     |    3 +
 .../bufr/tables/0/wmo/28/codetables/13038.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/13039.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/13040.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/13041.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/13051.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/13056.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/13057.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/15025.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/19001.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/19008.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/19010.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/19100.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/19101.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/19102.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/19103.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/19104.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/19105.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/19107.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/19108.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/19109.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/19110.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/19113.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/19117.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/19119.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/20003.table    |  266 +++++
 .../bufr/tables/0/wmo/28/codetables/20004.table    |   21 +
 .../bufr/tables/0/wmo/28/codetables/20005.table    |   21 +
 .../bufr/tables/0/wmo/28/codetables/20006.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/20008.table    |   19 +
 .../bufr/tables/0/wmo/28/codetables/20009.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/2001.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/20011.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/20012.table    |   48 +
 .../bufr/tables/0/wmo/28/codetables/20017.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20018.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/2002.table     |    3 +
 .../bufr/tables/0/wmo/28/codetables/20021.table    |   23 +
 .../bufr/tables/0/wmo/28/codetables/20022.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/20023.table    |   14 +
 .../bufr/tables/0/wmo/28/codetables/20024.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/20025.table    |   13 +
 .../bufr/tables/0/wmo/28/codetables/20026.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/20027.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/20028.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/20029.table    |    4 +
 .../0/wmo/{latest => 28}/codetables/2003.table     |    1 +
 .../bufr/tables/0/wmo/28/codetables/20032.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/20033.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/20034.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/20035.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/20036.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/20037.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/2004.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/20040.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/20041.table    |   14 +
 .../bufr/tables/0/wmo/28/codetables/20042.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/20045.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/20048.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/20050.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/20055.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/20056.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/20062.table    |   21 +
 .../bufr/tables/0/wmo/28/codetables/20063.table    |   71 ++
 .../bufr/tables/0/wmo/28/codetables/2007.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/20071.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20085.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/20086.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20087.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/20089.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20090.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/20101.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20102.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20103.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20104.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20105.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/20106.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/20107.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20108.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/2011.table     |  100 ++
 .../bufr/tables/0/wmo/28/codetables/20119.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/20124.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/2013.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/20136.table    |   44 +
 .../bufr/tables/0/wmo/28/codetables/20137.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/20138.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/2014.table     |   51 +
 .../bufr/tables/0/wmo/28/codetables/2015.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2016.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2017.table     |    6 +
 .../0/wmo/{latest => 28}/codetables/2019.table     |    1 +
 .../bufr/tables/0/wmo/28/codetables/2020.table     |   31 +
 .../bufr/tables/0/wmo/28/codetables/2021.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/2022.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2023.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/2024.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2025.table     |   16 +
 .../bufr/tables/0/wmo/28/codetables/2030.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/2031.table     |   21 +
 .../bufr/tables/0/wmo/28/codetables/2032.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2033.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2034.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2036.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2037.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/2038.table     |   16 +
 .../bufr/tables/0/wmo/28/codetables/2039.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2040.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/2041.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/2042.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2044.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/2045.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2046.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2047.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/2048.table     |   14 +
 .../bufr/tables/0/wmo/28/codetables/2049.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2050.table     |   19 +
 .../bufr/tables/0/wmo/28/codetables/2051.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2052.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2053.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2054.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/2055.table     |   10 +
 .../bufr/tables/0/wmo/28/codetables/2056.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/2057.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2058.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2059.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2060.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2061.table     |    3 +
 .../bufr/tables/0/wmo/28/codetables/2062.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2064.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2066.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/2070.table     |   13 +
 .../bufr/tables/0/wmo/28/codetables/2080.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2081.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/2083.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2084.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2095.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2096.table     |    9 +
 .../0/wmo/{latest => 28}/codetables/2097.table     |    2 +-
 .../bufr/tables/0/wmo/28/codetables/2099.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2101.table     |   10 +
 .../bufr/tables/0/wmo/28/codetables/2103.table     |    1 +
 .../bufr/tables/0/wmo/28/codetables/2104.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/21066.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/21067.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/21068.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/21069.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/21070.table    |   22 +
 .../bufr/tables/0/wmo/28/codetables/21072.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/21073.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/21076.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/21109.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/21115.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/21116.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/21119.table    |   14 +
 .../bufr/tables/0/wmo/28/codetables/21144.table    |    1 +
 .../bufr/tables/0/wmo/28/codetables/21148.table    |    2 +
 .../bufr/tables/0/wmo/28/codetables/2115.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/21150.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/21155.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/21158.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/21159.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/21169.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/2119.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/2131.table     |    1 +
 .../bufr/tables/0/wmo/28/codetables/2137.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2138.table     |    3 +
 .../bufr/tables/0/wmo/28/codetables/2139.table     |    3 +
 .../bufr/tables/0/wmo/28/codetables/2143.table     |   21 +
 .../bufr/tables/0/wmo/28/codetables/2144.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/2145.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/2146.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/2147.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/2148.table     |   12 +
 .../bufr/tables/0/wmo/28/codetables/2149.table     |   38 +
 .../bufr/tables/0/wmo/28/codetables/2150.table     |   55 +
 .../bufr/tables/0/wmo/28/codetables/2151.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/2152.table     |   13 +
 .../bufr/tables/0/wmo/28/codetables/2158.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/2159.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2160.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/2163.table     |   16 +
 .../bufr/tables/0/wmo/28/codetables/2164.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2165.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2166.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/2167.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2169.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2170.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2172.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2175.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/2176.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/2177.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/2178.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2179.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/2180.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/2181.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/2182.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2183.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/2184.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/2185.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/2186.table     |   23 +
 .../bufr/tables/0/wmo/28/codetables/2187.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/2188.table     |   10 +
 .../bufr/tables/0/wmo/28/codetables/2189.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/2191.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/22056.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/22060.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/22061.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/22067.table    |  101 ++
 .../bufr/tables/0/wmo/28/codetables/22068.table    |   43 +
 .../bufr/tables/0/wmo/28/codetables/22120.table    |   13 +
 .../bufr/tables/0/wmo/28/codetables/22121.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/22122.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/22123.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/22178.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/23001.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/23002.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/23003.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/23004.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/23005.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/23006.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/23007.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/23008.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/23009.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/23016.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/23018.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/23031.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/23032.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/24003.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/25004.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25005.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25006.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/25009.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25010.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/25011.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25012.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25013.table    |    1 +
 .../bufr/tables/0/wmo/28/codetables/25015.table    |    1 +
 .../bufr/tables/0/wmo/28/codetables/25017.table    |    1 +
 .../bufr/tables/0/wmo/28/codetables/25020.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25021.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/25022.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/25023.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/25024.table    |   13 +
 .../bufr/tables/0/wmo/28/codetables/25029.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/25030.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25031.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/25032.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25033.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25034.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/25035.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/25036.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25040.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/25041.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25042.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25053.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/25063.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25069.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/25086.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25090.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/25093.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/25095.table    |    1 +
 .../bufr/tables/0/wmo/28/codetables/25096.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25097.table    |   11 +
 .../bufr/tables/0/wmo/28/codetables/25098.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/25099.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/25110.table    |    6 +
 .../bufr/tables/0/wmo/28/codetables/25112.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/25113.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/25120.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25122.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25123.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25124.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/25150.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/25174.table    |   13 +
 .../bufr/tables/0/wmo/28/codetables/25181.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/25182.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/25184.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/25185.table    |    2 +
 .../bufr/tables/0/wmo/28/codetables/25187.table    |    3 +
 .../0/wmo/{latest => 28}/codetables/25188.table    |    4 +-
 .../bufr/tables/0/wmo/28/codetables/26010.table    |   25 +
 .../bufr/tables/0/wmo/28/codetables/29001.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/29002.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/3001.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/3003.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/30031.table    |   13 +
 .../bufr/tables/0/wmo/28/codetables/30032.table    |    9 +
 .../0/wmo/{latest => 28}/codetables/3004.table     |    2 +-
 .../bufr/tables/0/wmo/28/codetables/3008.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/3010.table     |   12 +
 .../bufr/tables/0/wmo/28/codetables/3011.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/3012.table     |    3 +
 .../bufr/tables/0/wmo/28/codetables/3016.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/3017.table     |    5 +
 .../0/wmo/{latest => 28}/codetables/3018.table     |    2 +-
 .../bufr/tables/0/wmo/28/codetables/3019.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/3020.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/3021.table     |    4 +
 .../0/wmo/{latest => 28}/codetables/3022.table     |    2 +-
 .../0/wmo/{latest => 28}/codetables/3023.table     |    4 +-
 .../bufr/tables/0/wmo/28/codetables/31021.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/31031.table    |    1 +
 .../bufr/tables/0/wmo/28/codetables/33002.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33003.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/33005.table    |   23 +
 .../bufr/tables/0/wmo/28/codetables/33006.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/33015.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/33020.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/33021.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33022.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33023.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33024.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/33025.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/33026.table    |   17 +
 .../0/wmo/{latest => 28}/codetables/33027.table    |    2 +-
 .../bufr/tables/0/wmo/28/codetables/33028.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/33030.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/33031.table    |   21 +
 .../bufr/tables/0/wmo/28/codetables/33032.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/33033.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/33035.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/33037.table    |   19 +
 .../bufr/tables/0/wmo/28/codetables/33038.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/33039.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/33041.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33042.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/33043.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33044.table    |   14 +
 .../bufr/tables/0/wmo/28/codetables/33047.table    |   27 +
 .../bufr/tables/0/wmo/28/codetables/33048.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33049.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33050.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/33060.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/33070.table    |   14 +
 .../bufr/tables/0/wmo/28/codetables/33071.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/33072.table    |   18 +
 .../bufr/tables/0/wmo/28/codetables/33075.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/33076.table    |    2 +
 .../bufr/tables/0/wmo/28/codetables/33077.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/33078.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/33079.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/33080.table    |   13 +
 .../bufr/tables/0/wmo/28/codetables/33081.table    |    9 +
 .../bufr/tables/0/wmo/28/codetables/33082.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/33083.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/33084.table    |   10 +
 .../0/wmo/{latest => 28}/codetables/33085.table    |    2 +-
 .../bufr/tables/0/wmo/28/codetables/33086.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/33087.table    |   10 +
 .../0/wmo/{latest => 28}/codetables/33088.table    |    2 +-
 .../bufr/tables/0/wmo/28/codetables/35000.table    |    1 +
 .../bufr/tables/0/wmo/28/codetables/35001.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/35030.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/35031.table    |   20 +
 .../bufr/tables/0/wmo/28/codetables/35032.table    |   10 +
 .../bufr/tables/0/wmo/28/codetables/35033.table    |   12 +
 .../bufr/tables/0/wmo/28/codetables/35034.table    |    7 +
 .../bufr/tables/0/wmo/28/codetables/35035.table    |   20 +
 .../bufr/tables/0/wmo/28/codetables/40005.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/40006.table    |    8 +
 .../bufr/tables/0/wmo/28/codetables/40011.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/40012.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/40013.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/40020.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/40023.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/40024.table    |    5 +
 .../bufr/tables/0/wmo/28/codetables/40025.table    |    4 +
 .../bufr/tables/0/wmo/28/codetables/40028.table    |   16 +
 .../bufr/tables/0/wmo/28/codetables/40036.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/4059.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/4080.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/42004.table    |    3 +
 .../bufr/tables/0/wmo/28/codetables/5069.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8001.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/8002.table     |   19 +
 .../bufr/tables/0/wmo/28/codetables/8003.table     |   12 +
 .../bufr/tables/0/wmo/28/codetables/8004.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/8005.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/8006.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/8007.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/8008.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/8009.table     |   16 +
 .../bufr/tables/0/wmo/28/codetables/8010.table     |   14 +
 .../bufr/tables/0/wmo/28/codetables/8011.table     |   27 +
 .../bufr/tables/0/wmo/28/codetables/8012.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8013.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8014.table     |   10 +
 .../bufr/tables/0/wmo/28/codetables/8015.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8016.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/8017.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8018.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8019.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/8021.table     |   32 +
 .../bufr/tables/0/wmo/28/codetables/8023.table     |   14 +
 .../bufr/tables/0/wmo/28/codetables/8024.table     |   12 +
 .../bufr/tables/0/wmo/28/codetables/8025.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/8026.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/8029.table     |   16 +
 .../bufr/tables/0/wmo/28/codetables/8032.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/8033.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/8034.table     |   10 +
 .../bufr/tables/0/wmo/28/codetables/8035.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/8036.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/8039.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/8040.table     |   49 +
 .../bufr/tables/0/wmo/28/codetables/8041.table     |   15 +
 .../bufr/tables/0/wmo/28/codetables/8042.table     |   17 +
 .../bufr/tables/0/wmo/28/codetables/8043.table     |   17 +
 .../bufr/tables/0/wmo/28/codetables/8050.table     |   11 +
 .../bufr/tables/0/wmo/28/codetables/8051.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/8052.table     |   26 +
 .../bufr/tables/0/wmo/28/codetables/8053.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8054.table     |    3 +
 .../bufr/tables/0/wmo/28/codetables/8060.table     |    8 +
 .../bufr/tables/0/wmo/28/codetables/8065.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8066.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8070.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/8072.table     |    6 +
 .../bufr/tables/0/wmo/28/codetables/8074.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8075.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8076.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/8077.table     |    7 +
 .../bufr/tables/0/wmo/28/codetables/8079.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/8080.table     |   14 +
 .../bufr/tables/0/wmo/28/codetables/8081.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/8082.table     |    3 +
 .../bufr/tables/0/wmo/28/codetables/8083.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/8085.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8086.table     |    9 +
 .../bufr/tables/0/wmo/28/codetables/8087.table     |    5 +
 .../bufr/tables/0/wmo/28/codetables/8088.table     |    4 +
 .../bufr/tables/0/wmo/28/codetables/8091.table     |   11 +
 .../bufr/tables/0/wmo/{latest => 28}/element.table |   36 +-
 .../bufr/tables/0/wmo/{latest => 28}/sequence.def  |    9 +
 .../bufr/tables/0/wmo/latest/codetables/1007.table |    1 +
 .../bufr/tables/0/wmo/latest/codetables/1034.table |    3 +-
 .../bufr/tables/0/wmo/latest/codetables/1101.table |    2 +-
 .../tables/0/wmo/latest/codetables/11037.table     |   42 +-
 .../tables/0/wmo/latest/codetables/11038.table     |   28 +-
 .../tables/0/wmo/latest/codetables/11039.table     |   28 +-
 .../bufr/tables/0/wmo/latest/codetables/1150.table |    8 +-
 .../tables/0/wmo/latest/codetables/20006.table     |    4 +-
 .../bufr/tables/0/wmo/latest/codetables/2003.table |    1 +
 .../bufr/tables/0/wmo/latest/codetables/2019.table |    1 +
 .../bufr/tables/0/wmo/latest/codetables/2097.table |    2 +-
 .../tables/0/wmo/latest/codetables/25188.table     |    4 +-
 .../bufr/tables/0/wmo/latest/codetables/3004.table |    2 +-
 .../bufr/tables/0/wmo/latest/codetables/3018.table |    2 +-
 .../bufr/tables/0/wmo/latest/codetables/3022.table |    2 +-
 .../bufr/tables/0/wmo/latest/codetables/3023.table |    4 +-
 .../tables/0/wmo/latest/codetables/33027.table     |    2 +-
 .../tables/0/wmo/latest/codetables/33085.table     |    2 +-
 .../tables/0/wmo/latest/codetables/33088.table     |    2 +-
 .../tables/0/wmo/latest/codetables/42004.table     |    4 +-
 .../bufr/tables/0/wmo/latest/codetables/8088.table |    8 +-
 definitions/bufr/tables/0/wmo/latest/element.table |   36 +-
 definitions/bufr/tables/0/wmo/latest/sequence.def  |    9 +
 definitions/common/c-1.table                       |    3 +-
 definitions/common/c-11.table                      |    3 +-
 .../localConcepts/ecmf/stepTypeForConversion.def   |    7 +
 definitions/grib1/localConcepts/rjtd/cfVarName.def |   52 +-
 definitions/grib1/localConcepts/rjtd/name.def      |   80 +-
 definitions/grib1/localConcepts/rjtd/paramId.def   |   52 +-
 definitions/grib1/localConcepts/rjtd/shortName.def |   52 +-
 definitions/grib1/localConcepts/rjtd/units.def     |   50 +-
 definitions/grib1/section.1.def                    |   92 +-
 definitions/grib1/stepTypeForConversion.def        |    3 +
 definitions/grib2/boot.def                         |    2 +-
 definitions/grib2/cfVarName.def                    |   22 +
 definitions/grib2/grib2LocalSectionNumber.98.table |    1 +
 version.sh => definitions/grib2/local.98.5.def     |   14 +-
 definitions/grib2/localConcepts/ecmf/cfVarName.def |   24 +
 definitions/grib2/localConcepts/ecmf/name.def      |   24 +
 definitions/grib2/localConcepts/ecmf/paramId.def   |   24 +
 definitions/grib2/localConcepts/ecmf/shortName.def |   24 +
 definitions/grib2/localConcepts/ecmf/units.def     |   24 +
 .../localConcepts/edzw/default_step_units.def      |    4 +
 definitions/grib2/name.def                         |   22 +
 definitions/grib2/paramId.def                      |   22 +
 definitions/grib2/products_uerra.def               |   13 +
 definitions/grib2/sections.def                     |    6 +-
 definitions/grib2/shortName.def                    |   22 +
 definitions/grib2/tables/1.0.table                 |    5 +-
 definitions/grib2/tables/18/4.0.table              |    2 +-
 definitions/grib2/tables/19/0.0.table              |   10 +
 definitions/grib2/tables/19/1.0.table              |   24 +
 definitions/grib2/tables/19/1.1.table              |    4 +
 definitions/grib2/tables/19/1.2.table              |    8 +
 definitions/grib2/tables/19/1.3.table              |   14 +
 definitions/grib2/tables/19/1.4.table              |   13 +
 definitions/grib2/tables/19/1.5.table              |    7 +
 definitions/grib2/tables/19/1.6.table              |    8 +
 definitions/grib2/tables/19/3.0.table              |    6 +
 definitions/grib2/tables/19/3.1.table              |   47 +
 definitions/grib2/tables/19/3.10.table             |    8 +
 definitions/grib2/tables/19/3.11.table             |    7 +
 definitions/grib2/tables/19/3.15.table             |   23 +
 definitions/grib2/tables/19/3.2.table              |   14 +
 definitions/grib2/tables/19/3.20.table             |    6 +
 definitions/grib2/tables/19/3.21.table             |    8 +
 definitions/grib2/tables/19/3.3.table              |    9 +
 definitions/grib2/tables/19/3.4.table              |   17 +
 definitions/grib2/tables/19/3.5.table              |    5 +
 definitions/grib2/tables/19/3.6.table              |    2 +
 definitions/grib2/tables/19/3.7.table              |    5 +
 definitions/grib2/tables/19/3.8.table              |    7 +
 definitions/grib2/tables/19/3.9.table              |    4 +
 definitions/grib2/tables/{18 => 19}/4.0.table      |   27 +-
 definitions/grib2/tables/19/4.1.0.table            |   27 +
 definitions/grib2/tables/19/4.1.1.table            |    7 +
 definitions/grib2/tables/19/4.1.10.table           |   10 +
 definitions/grib2/tables/19/4.1.192.table          |    4 +
 definitions/grib2/tables/19/4.1.2.table            |    9 +
 definitions/grib2/tables/19/4.1.3.table            |   11 +
 definitions/grib2/tables/19/4.10.table             |   16 +
 definitions/grib2/tables/19/4.11.table             |   10 +
 definitions/grib2/tables/19/4.12.table             |    7 +
 definitions/grib2/tables/19/4.13.table             |    6 +
 definitions/grib2/tables/19/4.14.table             |    6 +
 definitions/grib2/tables/19/4.15.table             |   11 +
 definitions/grib2/tables/19/4.192.table            |    4 +
 definitions/grib2/tables/19/4.2.0.0.table          |   34 +
 definitions/grib2/tables/19/4.2.0.1.table          |  123 +++
 definitions/grib2/tables/19/4.2.0.13.table         |    5 +
 definitions/grib2/tables/19/4.2.0.14.table         |    7 +
 definitions/grib2/tables/19/4.2.0.15.table         |   21 +
 definitions/grib2/tables/19/4.2.0.16.table         |   10 +
 definitions/grib2/tables/19/4.2.0.17.table         |    3 +
 definitions/grib2/tables/19/4.2.0.18.table         |   23 +
 definitions/grib2/tables/19/4.2.0.19.table         |   36 +
 definitions/grib2/tables/19/4.2.0.190.table        |    5 +
 definitions/grib2/tables/19/4.2.0.191.table        |    8 +
 definitions/grib2/tables/19/4.2.0.2.table          |   51 +
 definitions/grib2/tables/19/4.2.0.20.table         |   47 +
 definitions/grib2/tables/19/4.2.0.3.table          |   36 +
 definitions/grib2/tables/19/4.2.0.4.table          |   24 +
 definitions/grib2/tables/19/4.2.0.5.table          |   13 +
 definitions/grib2/tables/19/4.2.0.6.table          |   49 +
 definitions/grib2/tables/19/4.2.0.7.table          |   24 +
 definitions/grib2/tables/19/4.2.1.0.table          |   21 +
 definitions/grib2/tables/19/4.2.1.1.table          |    7 +
 definitions/grib2/tables/19/4.2.1.2.table          |   15 +
 definitions/grib2/tables/19/4.2.10.0.table         |   50 +
 definitions/grib2/tables/19/4.2.10.1.table         |    8 +
 definitions/grib2/tables/19/4.2.10.191.table       |    8 +
 definitions/grib2/tables/19/4.2.10.2.table         |   17 +
 definitions/grib2/tables/19/4.2.10.3.table         |    7 +
 definitions/grib2/tables/19/4.2.10.4.table         |   18 +
 definitions/grib2/tables/19/4.2.2.0.table          |   43 +
 definitions/grib2/tables/19/4.2.2.3.table          |   32 +
 definitions/grib2/tables/19/4.2.2.4.table          |   16 +
 definitions/grib2/tables/19/4.2.2.5.table          |    2 +
 definitions/grib2/tables/19/4.2.3.0.table          |   14 +
 definitions/grib2/tables/19/4.2.3.1.table          |   32 +
 definitions/grib2/tables/19/4.2.3.2.table          |   13 +
 definitions/grib2/tables/19/4.2.3.3.table          |    4 +
 definitions/grib2/tables/19/4.2.3.4.table          |   10 +
 definitions/grib2/tables/19/4.2.3.5.table          |    7 +
 definitions/grib2/tables/19/4.2.3.6.table          |    7 +
 definitions/grib2/tables/19/4.201.table            |   15 +
 definitions/grib2/tables/19/4.202.table            |    4 +
 definitions/grib2/tables/19/4.203.table            |   26 +
 definitions/grib2/tables/19/4.204.table            |    9 +
 definitions/grib2/tables/19/4.205.table            |    6 +
 definitions/grib2/tables/19/4.206.table            |    6 +
 definitions/grib2/tables/19/4.207.table            |   10 +
 definitions/grib2/tables/19/4.208.table            |    9 +
 definitions/grib2/tables/19/4.209.table            |    9 +
 definitions/grib2/tables/19/4.210.table            |    6 +
 definitions/grib2/tables/19/4.211.table            |    7 +
 definitions/grib2/tables/19/4.212.table            |   18 +
 definitions/grib2/tables/19/4.213.table            |   16 +
 definitions/grib2/tables/19/4.215.table            |    9 +
 definitions/grib2/tables/19/4.216.table            |   96 ++
 definitions/grib2/tables/19/4.217.table            |    8 +
 definitions/grib2/tables/19/4.218.table            |   44 +
 definitions/grib2/tables/19/4.219.table            |    8 +
 definitions/grib2/tables/19/4.220.table            |    6 +
 definitions/grib2/tables/19/4.221.table            |    6 +
 definitions/grib2/tables/19/4.222.table            |    6 +
 definitions/grib2/tables/19/4.223.table            |    5 +
 definitions/grib2/tables/19/4.224.table            |   18 +
 definitions/grib2/tables/19/4.225.table            |  267 +++++
 definitions/grib2/tables/19/4.227.table            |    9 +
 definitions/grib2/tables/19/4.230.table            |  449 ++++++++
 definitions/grib2/tables/19/4.233.table            |  449 ++++++++
 definitions/grib2/tables/19/4.234.table            |   21 +
 definitions/grib2/tables/19/4.236.table            |    8 +
 definitions/grib2/tables/19/4.240.table            |   13 +
 definitions/grib2/tables/19/4.241.table            |    9 +
 definitions/grib2/tables/19/4.242.table            |    7 +
 definitions/grib2/tables/19/4.243.table            |   43 +
 definitions/grib2/tables/19/4.3.table              |   23 +
 definitions/grib2/tables/19/4.4.table              |   17 +
 definitions/grib2/tables/19/4.5.table              |   72 ++
 definitions/grib2/tables/19/4.6.table              |    9 +
 definitions/grib2/tables/19/4.7.table              |   14 +
 definitions/grib2/tables/19/4.8.table              |    6 +
 definitions/grib2/tables/19/4.9.table              |    9 +
 definitions/grib2/tables/19/4.91.table             |   16 +
 definitions/grib2/tables/19/5.0.table              |   25 +
 definitions/grib2/tables/19/5.1.table              |    6 +
 definitions/grib2/tables/19/5.2.table              |    8 +
 definitions/grib2/tables/19/5.3.table              |    7 +
 definitions/grib2/tables/19/5.4.table              |    6 +
 definitions/grib2/tables/19/5.40.table             |    5 +
 definitions/grib2/tables/19/5.40000.table          |    5 +
 definitions/grib2/tables/19/5.5.table              |    7 +
 definitions/grib2/tables/19/5.50002.table          |   19 +
 definitions/grib2/tables/19/5.6.table              |    7 +
 definitions/grib2/tables/19/5.7.table              |    7 +
 definitions/grib2/tables/19/6.0.table              |    6 +
 definitions/grib2/tables/19/stepType.table         |    4 +
 definitions/grib2/tables/local/kwbc/1/4.5.table    |   89 ++
 definitions/grib2/template.4.20.def                |    4 +-
 definitions/grib2/template.4.40.def                |    2 +-
 definitions/grib2/template.4.41.def                |    2 +-
 definitions/grib2/template.4.42.def                |    2 +-
 definitions/grib2/template.4.43.def                |    2 +-
 definitions/grib2/template.4.parameter.def         |    4 +-
 definitions/grib2/template.4.parameter_aerosol.def |    4 +-
 .../grib2/template.4.parameter_aerosol_44.def      |    4 +-
 .../grib2/template.4.parameter_aerosol_optical.def |    4 +-
 .../grib2/template.4.parameter_chemical.def        |    4 +-
 .../template.4.parameter_chemical_distribution.def |    4 +-
 .../grib2/template.4.parameter_partition.def       |    4 +-
 .../grib2/template.4.parameter_postproc.def        |    4 +-
 definitions/grib2/template.4.parameter_tile.def    |    4 +-
 definitions/grib2/units.def                        |   22 +
 eccodes.sublime-project                            |   55 +-
 examples/C/grib_iterator.c                         |    8 +-
 examples/C/grib_print_data.c                       |    8 +-
 examples/python/CMakeLists.txt                     |    3 +-
 examples/python/ecc-448.py                         |   76 ++
 examples/python/ecc-448.sh                         |   33 +
 examples/python/grib_iterator.c                    |    8 +-
 examples/python/grib_iterator.py                   |    8 +-
 examples/python/grib_iterator.sh                   |   19 +-
 examples/python/grib_set_keys.py                   |   15 +-
 examples/python/high_level_api.py                  |  168 ++-
 fortran/grib_fortran.c                             |    6 +-
 memfs.py                                           |    2 +-
 python/CMakeLists.txt                              |    8 +-
 python/eccodes/high_level/bufr.py                  |   59 +-
 python/eccodes/high_level/codesmessage.py          |   11 +-
 python/gribapi/gribapi.py                          |  150 +--
 src/TODO                                           |    6 +-
 src/action_class_assert.c                          |    2 +-
 src/bufr_keys_iterator.c                           |    5 +-
 src/eccodes.c                                      |    1 -
 src/grib_accessor_class_assert.c                   |    2 +-
 src/grib_accessor_class_bits.c                     |    6 +-
 src/grib_accessor_class_bufr_data_array.c          |    3 +
 src/grib_accessor_class_data_complex_packing.c     |  682 +------------
 ..._data_g1second_order_general_extended_packing.c |   67 +-
 ...lass_data_g2simple_packing_with_preprocessing.c |    1 +
 src/grib_accessor_class_g1step_range.c             |    2 +-
 src/grib_accessor_class_headers_only.c             |   18 +-
 src/grib_accessor_class_local_definition.c         |    1 +
 src/grib_accessor_class_validity_date.c            |    5 +-
 src/grib_accessor_class_validity_time.c            |    5 +-
 src/grib_api.h                                     |    3 +
 src/grib_api_internal.h                            |   29 +-
 src/grib_api_prototypes.h                          |    1 -
 src/grib_api_version.c                             |    2 +-
 src/grib_context.c                                 |   25 +-
 src/grib_errors.c                                  |    8 -
 src/grib_errors.c.in                               |    7 -
 src/grib_gaussian_reduced.c                        |    3 +-
 src/grib_handle.c                                  |   24 +
 src/grib_io.c                                      |    2 +-
 src/grib_iterator_class_space_view.c               |    2 +-
 src/grib_value.c                                   |    5 +
 src/md5.c                                          |    4 +-
 tests/CMakeLists.txt                               |   42 +-
 tests/Makefile.am                                  |   42 +-
 tests/bufr_filter.sh                               |    1 -
 tests/decimalPrecision.sh                          |   13 +-
 tests/grib1to2.sh                                  |    9 +-
 tests/{bitmap.sh => grib_bitmap.sh}                |    0
 tests/{bitsPerValue.sh => grib_bitsPerValue.sh}    |    0
 tests/{ccsds.sh => grib_ccsds.sh}                  |    0
 tests/{ccsds_perf.c => grib_ccsds_perf.c}          |    2 +-
 ...{change_scanning.sh => grib_change_scanning.sh} |    0
 tests/{concept.sh => grib_concept.sh}              |    0
 tests/{global.sh => grib_global.sh}                |    0
 tests/{iterator.sh => grib_iterator.sh}            |    0
 tests/{jpeg.sh => grib_jpeg.sh}                    |    0
 tests/{level.sh => grib_level.sh}                  |    0
 tests/grib_local.sh                                |  109 ++
 tests/{ls.sh => grib_ls.sh}                        |    0
 tests/{multi.sh => grib_multi.sh}                  |   10 +-
 tests/{neg_fctime.sh => grib_neg_fctime.sh}        |    0
 tests/{octahedral.sh => grib_octahedral.sh}        |    0
 tests/{padding.sh => grib_padding.sh}              |    0
 tests/{second_order.sh => grib_second_order.sh}    |   72 +-
 tests/{set.sh => grib_set.sh}                      |    0
 tests/{statistics.sh => grib_statistics.sh}        |    0
 tests/{step.sh => grib_step.sh}                    |    6 +-
 tests/local.sh                                     |   67 --
 tests/unit_tests.c                                 |   27 +-
 tigge/tigge_check.c                                |   38 +-
 tigge/tigge_check.h                                |  510 ++++++----
 tools/bufr_compare.c                               |    4 +-
 version.sh                                         |    2 +-
 764 files changed, 11226 insertions(+), 1860 deletions(-)

diff --git a/VERSION.cmake b/VERSION.cmake
index 1628156..f81bdd0 100644
--- a/VERSION.cmake
+++ b/VERSION.cmake
@@ -1 +1 @@
-set( ${PROJECT_NAME}_VERSION_STR  "2.2.0" )
+set( ${PROJECT_NAME}_VERSION_STR  "2.3.0" )
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
new file mode 100644
index 0000000..d42a153
--- /dev/null
+++ b/cmake/CMakeLists.txt
@@ -0,0 +1,5 @@
+file( GLOB_RECURSE ecbuild_support_files  RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*" )
+
+ecbuild_add_resources(  TARGET ${PROJECT_NAME}_ecbuild_support_files
+						SOURCES_PACK
+							${ecbuild_support_files} )
diff --git a/cmake/FindNAG.cmake b/cmake/FindNAG.cmake
new file mode 100644
index 0000000..883a375
--- /dev/null
+++ b/cmake/FindNAG.cmake
@@ -0,0 +1,43 @@
+# (C) Copyright 1996-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.
+
+# - Try to find the NAG includes and library
+# This module defines
+#
+#  NAG_FOUND         - System has NAG
+#  NAG_INCLUDE_DIRS  - the NAG include directories
+#  NAG_LIBRARIES     - the libraries needed to use NAG
+#
+# The following paths will be searched with priority if set in CMake or env
+#
+#  NAG_DIR   - root folder of the NAG installation
+#  NAG_PATH  - root folder of the NAG installation
+
+find_path( NAG_INCLUDE_DIR nag_library.mod
+           PATHS ${NAG_PATH} ENV NAG_PATH
+                 ${NAG_DIR}  ENV NAG_DIR
+           PATH_SUFFIXES include
+           NO_DEFAULT_PATH )
+
+find_library( NAG_LIBRARY NAMES nag nag_nag
+              PATHS ${NAG_PATH} ENV NAG_PATH
+                    ${NAG_DIR}  ENV NAG_DIR
+              PATH_SUFFIXES lib lib64
+              NO_DEFAULT_PATH )
+
+set( NAG_LIBRARIES    ${NAG_LIBRARY} )
+set( NAG_INCLUDE_DIRS ${NAG_INCLUDE_DIR} )
+
+include(FindPackageHandleStandardArgs)
+
+# handle the QUIETLY and REQUIRED arguments and set NAG_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args( NAG DEFAULT_MSG
+                                   NAG_LIBRARY NAG_INCLUDE_DIR )
+
+mark_as_advanced( NAG_INCLUDE_DIR NAG_LIBRARY )
diff --git a/cmake/VERSION.cmake b/cmake/VERSION.cmake
index ca1bacb..a95e4a9 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 "1" )
+set( ECBUILD_MINOR_VERSION "7" )
+set( ECBUILD_PATCH_VERSION "0" )
 
-set( ECBUILD_VERSION_STR  "2.6.1" )
+set( ECBUILD_VERSION_STR  "2.7.0" )
 
-set( ECBUILD_MACRO_VERSION "${ECBUILD_MAJOR_VERSION}.${ECBUILD_MINOR_VERSION}" )
+set( ECBUILD_MACRO_VERSION "${ECBUILD_VERSION_STR}" )
diff --git a/cmake/compiler_flags/Clang_C.cmake b/cmake/compiler_flags/Clang_C.cmake
index b742a5b..51cf72b 100644
--- a/cmake/compiler_flags/Clang_C.cmake
+++ b/cmake/compiler_flags/Clang_C.cmake
@@ -8,6 +8,6 @@
 
 set( CMAKE_C_FLAGS_RELEASE        "-O3 -DNDEBUG"   CACHE STRING "C compiler flags for Release builds"          FORCE )
 set( CMAKE_C_FLAGS_BIT            "-O2 -DNDEBUG"   CACHE STRING "C compiler flags for Bit-reproducible builds" FORCE )
-set( CMAKE_C_FLAGS_DEBUG          "-O0 -g -ftrapv" CACHE STRING "C compiler flags for Debug builds"            FORCE )
+set( CMAKE_C_FLAGS_DEBUG          "-O0 -g"         CACHE STRING "C compiler flags for Debug builds"            FORCE )
 set( CMAKE_C_FLAGS_PRODUCTION     "-O3 -g"         CACHE STRING "C compiler flags for Production builds."      FORCE )
 set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g"         CACHE STRING "C compiler flags for RelWithDebInfo builds."  FORCE )
diff --git a/cmake/compiler_flags/Clang_CXX.cmake b/cmake/compiler_flags/Clang_CXX.cmake
index 7570630..7f6524e 100644
--- a/cmake/compiler_flags/Clang_CXX.cmake
+++ b/cmake/compiler_flags/Clang_CXX.cmake
@@ -8,6 +8,6 @@
 
 set( CMAKE_CXX_FLAGS_RELEASE        "-O3 -DNDEBUG"   CACHE STRING "C++ compiler flags for Release builds"          FORCE )
 set( CMAKE_CXX_FLAGS_BIT            "-O2 -DNDEBUG"   CACHE STRING "C++ compiler flags for Bit-reproducible builds" FORCE )
-set( CMAKE_CXX_FLAGS_DEBUG          "-O0 -g -ftrapv" CACHE STRING "C++ compiler flags for Debug builds"            FORCE )
+set( CMAKE_CXX_FLAGS_DEBUG          "-O0 -g"         CACHE STRING "C++ compiler flags for Debug builds"            FORCE )
 set( CMAKE_CXX_FLAGS_PRODUCTION     "-O3 -g"         CACHE STRING "C++ compiler flags for Production builds."      FORCE )
 set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g"         CACHE STRING "C++ compiler flags for RelWithDebInfo builds."  FORCE )
diff --git a/cmake/compiler_flags/GNU_Fortran.cmake b/cmake/compiler_flags/GNU_Fortran.cmake
index 6e28844..cd4dbfa 100644
--- a/cmake/compiler_flags/GNU_Fortran.cmake
+++ b/cmake/compiler_flags/GNU_Fortran.cmake
@@ -12,6 +12,8 @@ set( CMAKE_Fortran_FLAGS_DEBUG          "-O0 -g -fcheck=bounds -fbacktrace -fini
 set( CMAKE_Fortran_FLAGS_PRODUCTION     "-O2 -g"                                                                   CACHE STRING "Fortran compiler flags for Production builds."      FORCE )
 set( CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-O2 -g"                                                                   CACHE STRING "Fortran compiler flags for RelWithDebInfo builds."  FORCE )
 
+set( Fortran_FLAG_STACK_ARRAYS "-fstack-arrays" )
+
 ####################################################################
 
 # Meaning of flags
diff --git a/cmake/compiler_flags/Intel_Fortran.cmake b/cmake/compiler_flags/Intel_Fortran.cmake
index abd85f8..d6e9719 100644
--- a/cmake/compiler_flags/Intel_Fortran.cmake
+++ b/cmake/compiler_flags/Intel_Fortran.cmake
@@ -6,9 +6,15 @@
 # granted to it by virtue of its status as an intergovernmental organisation
 # nor does it submit to any jurisdiction.
 
-set( CMAKE_Fortran_FLAGS_RELEASE        "-O3 -unroll -inline -heap-arrays"          CACHE STRING "Release Fortran flags"                 FORCE )
-set( CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-O2 -g"                                    CACHE STRING "Release-with-debug-info Fortran flags" FORCE )
-set( CMAKE_Fortran_FLAGS_BIT            "-O2 -unroll -inline -heap-arrays"          CACHE STRING "Bit-reproducible Fortran flags"        FORCE )
+set( Fortran_AUTOMATIC_ARRAYS_LIMIT 32768 )  # (32 kb)
+math( EXPR Fortran_AUTOMATIC_ARRAYS_LIMIT_KB "${Fortran_AUTOMATIC_ARRAYS_LIMIT}/1024" )
+
+set( Fortran_FLAG_STACK_ARRAYS     "-no-heap-arrays" )
+set( Fortran_FLAG_AUTOMATIC_ARRAYS "-heap-arrays ${Fortran_AUTOMATIC_ARRAYS_LIMIT_KB}" )
+
+set( CMAKE_Fortran_FLAGS_RELEASE        "-O3 -unroll -inline ${Fortran_FLAG_AUTOMATIC_ARRAYS}"          CACHE STRING "Release Fortran flags"                 FORCE )
+set( CMAKE_Fortran_FLAGS_RELWITHDEBINFO "-O2 -g ${Fortran_FLAG_AUTOMATIC_ARRAYS}"                       CACHE STRING "Release-with-debug-info Fortran flags" FORCE )
+set( CMAKE_Fortran_FLAGS_BIT            "-O2 -unroll -inline ${Fortran_FLAG_AUTOMATIC_ARRAYS}"          CACHE STRING "Bit-reproducible Fortran flags"        FORCE )
 # -check all implies -check bounds
-set( CMAKE_Fortran_FLAGS_DEBUG          "-O0 -g -traceback -heap-arrays -check all" CACHE STRING "Debug Fortran flags"                   FORCE )
-set( CMAKE_Fortran_FLAGS_PRODUCTION     "-O3 -g"                                    CACHE STRING "Production Fortran compiler flags"     FORCE )
+set( CMAKE_Fortran_FLAGS_DEBUG          "-O0 -g -traceback ${Fortran_FLAG_AUTOMATIC_ARRAYS} -check all" CACHE STRING "Debug Fortran flags"                   FORCE )
+set( CMAKE_Fortran_FLAGS_PRODUCTION     "-O3 -g ${Fortran_FLAG_AUTOMATIC_ARRAYS}"                       CACHE STRING "Production Fortran compiler flags"     FORCE )
diff --git a/cmake/contrib/GreatCMakeCookOff/tests/CMakeLists.txt b/cmake/contrib/GreatCMakeCookOff/tests/CMakeLists.txt
new file mode 100644
index 0000000..f2eb4d0
--- /dev/null
+++ b/cmake/contrib/GreatCMakeCookOff/tests/CMakeLists.txt
@@ -0,0 +1,12 @@
+cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
+project(COOKOFF_TEST)
+
+enable_testing()
+
+include(${PROJECT_SOURCE_DIR}/../TestCMake.cmake)
+
+cmake_test(checkisnan SOURCE)
+cmake_test(checkcpp11flags)
+cmake_test(addgtest NOEXEC SOURCE --test-command ${CMAKE_MAKE_PROGRAM} test)
+
+add_subdirectory(cpp11)
diff --git a/cmake/contrib/GreatCMakeCookOff/tests/cpp11/CMakeLists.txt b/cmake/contrib/GreatCMakeCookOff/tests/cpp11/CMakeLists.txt
new file mode 100644
index 0000000..45d20a5
--- /dev/null
+++ b/cmake/contrib/GreatCMakeCookOff/tests/cpp11/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_test(allfeatures)
+cmake_test(parse_input_features)
+cmake_test(check_features)
diff --git a/cmake/ecbuild-config-version.cmake b/cmake/ecbuild-config-version.cmake
deleted file mode 100644
index a5e3af1..0000000
--- a/cmake/ecbuild-config-version.cmake
+++ /dev/null
@@ -1,12 +0,0 @@
-set(PACKAGE_VERSION "2.6.1")
-
-# check whether the requested PACKAGE_FIND_VERSION is compatible
-
-if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
-  set(PACKAGE_VERSION_COMPATIBLE FALSE)
-else()
-  set(PACKAGE_VERSION_COMPATIBLE TRUE)
-  if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
-    set(PACKAGE_VERSION_EXACT TRUE)
-  endif()
-endif()
diff --git a/cmake/ecbuild-config.cmake b/cmake/ecbuild-config.cmake
deleted file mode 100644
index 3f65950..0000000
--- a/cmake/ecbuild-config.cmake
+++ /dev/null
@@ -1,97 +0,0 @@
-# Config file for the ecbuild package
-# Defines the following variables:
-#
-#  ECBUILD_INCLUDE_DIRS   - include directories
-#  ECBUILD_DEFINITIONS    - preprocessor definitions
-#  ECBUILD_LIBRARIES      - libraries to link against
-#  ECBUILD_FEATURES       - list of enabled features
-#  ECBUILD_VERSION        - version of the package
-#  ECBUILD_GIT_SHA1       - Git revision of the package
-#  ECBUILD_GIT_SHA1_SHORT - short Git revision of the package
-#
-# Also defines ecbuild third-party library dependencies:
-#  ECBUILD_TPLS             - package names of  third-party library dependencies
-#  ECBUILD_TPL_INCLUDE_DIRS - include directories
-#  ECBUILD_TPL_DEFINITIONS  - preprocessor definitions
-#  ECBUILD_TPL_LIBRARIES    - libraries to link against
-
-### compute paths
-
-get_filename_component(ECBUILD_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
-
-set( ECBUILD_SELF_INCLUDE_DIRS "${ECBUILD_CMAKE_DIR}/../../../include" )
-set( ECBUILD_SELF_DEFINITIONS  "" )
-set( ECBUILD_SELF_LIBRARIES    "" )
-
-set( ECBUILD_TPLS              "" )
-set( ECBUILD_TPL_INCLUDE_DIRS  "" )
-set( ECBUILD_TPL_DEFINITIONS   "" )
-set( ECBUILD_TPL_LIBRARIES     "" )
-
-set( ECBUILD_VERSION           "2.6.1" )
-set( ECBUILD_GIT_SHA1          "25fa5e66715cbc38481ea8f8619ee4e89e015e9e" )
-set( ECBUILD_GIT_SHA1_SHORT    "25fa5e6" )
-
-### export include paths as absolute paths
-
-set( ECBUILD_INCLUDE_DIRS "" )
-foreach( path ${ECBUILD_SELF_INCLUDE_DIRS} )
-  get_filename_component( abspath ${path} ABSOLUTE )
-  list( APPEND ECBUILD_INCLUDE_DIRS ${abspath} )
-endforeach()
-list( APPEND ECBUILD_INCLUDE_DIRS ${ECBUILD_TPL_INCLUDE_DIRS} )
-
-### export definitions
-
-set( ECBUILD_DEFINITIONS      ${ECBUILD_SELF_DEFINITIONS} ${ECBUILD_TPL_DEFINITIONS} )
-
-### export list of all libraries
-
-set( ECBUILD_LIBRARIES        ${ECBUILD_SELF_LIBRARIES}   ${ECBUILD_TPL_LIBRARIES}   )
-
-### export the features provided by the package
-
-set( ECBUILD_FEATURES    "TESTS;INSTALL" )
-foreach( _f ${ECBUILD_FEATURES} )
-  set( ECBUILD_HAVE_${_f} 1 )
-endforeach()
-
-# Has this configuration been exported from a build tree?
-set( ECBUILD_IS_BUILD_DIR_EXPORT OFF )
-
-if( EXISTS ${ECBUILD_CMAKE_DIR}/ecbuild-import.cmake )
-  set( ECBUILD_IMPORT_FILE "${ECBUILD_CMAKE_DIR}/ecbuild-import.cmake" )
-  include( ${ECBUILD_IMPORT_FILE} )
-endif()
-
-# here goes the imports of the TPL's
-
-include( ${CMAKE_CURRENT_LIST_FILE}.tpls OPTIONAL )
-
-# insert definitions for IMPORTED targets
-
-if( NOT ecbuild_BINARY_DIR )
-
-  if( ECBUILD_IS_BUILD_DIR_EXPORT )
-    include( "/tmp/metabuilds/ecflow-metab_5062/leap42/ecbuild/builds/ecbuild-targets.cmake" OPTIONAL )
-  else()
-    include( "${ECBUILD_CMAKE_DIR}/ecbuild-targets.cmake" )
-  endif()
-
-endif()
-
-# publish this file as imported
-
-set( ECBUILD_IMPORT_FILE ${CMAKE_CURRENT_LIST_FILE} )
-mark_as_advanced( ECBUILD_IMPORT_FILE )
-
-# set ecbuild_BASE_DIR for final installations or build directories
-
-if( NOT ecbuild )
-  if( ECBUILD_IS_BUILD_DIR_EXPORT )
-    set( ecbuild_BASE_DIR /tmp/metabuilds/ecflow-metab_5062/leap42/ecbuild/builds )
-  else()
-    get_filename_component( abspath ${CMAKE_CURRENT_LIST_DIR}/../../.. ABSOLUTE )
-    set( ecbuild_BASE_DIR ${abspath} )
-  endif()
-endif()
diff --git a/cmake/ecbuild_add_executable.cmake b/cmake/ecbuild_add_executable.cmake
index 5d78348..f6cb128 100644
--- a/cmake/ecbuild_add_executable.cmake
+++ b/cmake/ecbuild_add_executable.cmake
@@ -27,6 +27,7 @@
 #                           [ GENERATED <file1> [<file2> ...] ]
 #                           [ DEPENDS <target1> [<target2> ...] ]
 #                           [ CONDITION <condition> ]
+#                           [ PROPERTIES <prop1> <val1> [<prop2> <val2> ...] ]
 #                           [ NOINSTALL ]
 #                           [ VERSION <version> | AUTO_VERSION ]
 #                           [ CFLAGS <flag1> [<flag2> ...] ]
@@ -80,6 +81,9 @@
 #   conditional expression which must evaluate to true for this target to be
 #   built (must be valid in a CMake ``if`` statement)
 #
+# PROPERTIES : optional
+#   custom properties to set on the target
+#
 # NOINSTALL : optional
 #   do not install the executable
 #
@@ -110,7 +114,9 @@ macro( ecbuild_add_executable )
 
   set( options NOINSTALL AUTO_VERSION )
   set( single_value_args TARGET COMPONENT LINKER_LANGUAGE VERSION OUTPUT_NAME )
-  set( multi_value_args  SOURCES SOURCES_GLOB SOURCES_EXCLUDE_REGEX OBJECTS TEMPLATES LIBS INCLUDES DEPENDS PERSISTENT DEFINITIONS CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION )
+  set( multi_value_args SOURCES SOURCES_GLOB SOURCES_EXCLUDE_REGEX OBJECTS
+                        TEMPLATES LIBS INCLUDES DEPENDS PERSISTENT DEFINITIONS
+                        CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION PROPERTIES )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
@@ -148,12 +154,6 @@ macro( ecbuild_add_executable )
       list( APPEND _all_objects $<TARGET_OBJECTS:${_obj}> )
     endforeach()
 
-    list( APPEND _PAR_SOURCES ${_glob_srcs} )
-
-    if( ECBUILD_LIST_SOURCES )
-      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): sources ${_PAR_SOURCES}")
-    endif()
-
     # glob sources
     unset( _glob_srcs )
     foreach( pattern ${_PAR_SOURCES_GLOB} )
@@ -164,6 +164,12 @@ macro( ecbuild_add_executable )
       ecbuild_list_exclude_pattern( LIST _glob_srcs REGEX "${pattern}" )
     endforeach()
 
+    list( APPEND _PAR_SOURCES ${_glob_srcs} )
+
+    if( ECBUILD_LIST_SOURCES )
+      ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): sources ${_PAR_SOURCES}")
+    endif()
+
     # add persistent layer files
     if( DEFINED _PAR_PERSISTENT )
       if( DEFINED PERSISTENT_NAMESPACE )
@@ -201,6 +207,11 @@ macro( ecbuild_add_executable )
       cuda_add_executable( ${_PAR_TARGET} ${_PAR_SOURCES}  ${_all_objects} )
     endif()
 
+    # Set custom properties
+    if( ${_PAR_PROPERTIES} )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES ${_PAR_PROPERTIES} )
+    endif()
+
     # ecbuild_echo_target( ${_PAR_TARGET} )
 
     # add include dirs if defined
@@ -279,7 +290,7 @@ macro( ecbuild_add_executable )
 
       # set build location
 
-      set_property( TARGET ${_PAR_TARGET} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
 
       # export location of target to other projects -- must be exactly after setting the build location (see previous command)
 
@@ -288,8 +299,8 @@ macro( ecbuild_add_executable )
     else()
       ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): not installing")
       # NOINSTALL targets are always built the build_rpath, not the install_rpath
-      set_property( TARGET ${_PAR_TARGET} PROPERTY SKIP_BUILD_RPATH         FALSE )
-      set_property( TARGET ${_PAR_TARGET} PROPERTY BUILD_WITH_INSTALL_RPATH FALSE )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES SKIP_BUILD_RPATH         FALSE )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE )
     endif()
 
     # add definitions to compilation
@@ -297,13 +308,13 @@ macro( ecbuild_add_executable )
       get_property( _target_defs TARGET ${_PAR_TARGET} PROPERTY COMPILE_DEFINITIONS )
       list( APPEND _target_defs ${_PAR_DEFINITIONS} )
       ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): using definitions ${_target_defs}")
-      set_property( TARGET ${_PAR_TARGET} PROPERTY COMPILE_DEFINITIONS ${_target_defs} )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES COMPILE_DEFINITIONS "${_target_defs}" )
     endif()
 
     # set linker language
     if( DEFINED _PAR_LINKER_LANGUAGE )
       ecbuild_debug("ecbuild_add_executable(${_PAR_TARGET}): using linker language ${_PAR_LINKER_LANGUAGE}")
-      set_property( TARGET ${_PAR_TARGET} PROPERTY LINKER_LANGUAGE ${_PAR_LINKER_LANGUAGE} )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES LINKER_LANGUAGE ${_PAR_LINKER_LANGUAGE} )
       if( ECBUILD_${_PAR_LINKER_LANGUAGE}_IMPLICIT_LINK_LIBRARIES )
         target_link_libraries( ${_PAR_TARGET} ${ECBUILD_${_PAR_LINKER_LANGUAGE}_IMPLICIT_LINK_LIBRARIES} )
       endif()
diff --git a/cmake/ecbuild_add_library.cmake b/cmake/ecbuild_add_library.cmake
index ee29008..f9f567f 100644
--- a/cmake/ecbuild_add_library.cmake
+++ b/cmake/ecbuild_add_library.cmake
@@ -30,6 +30,7 @@
 #                        [ GENERATED <file1> [<file2> ...] ]
 #                        [ DEPENDS <target1> [<target2> ...] ]
 #                        [ CONDITION <condition> ]
+#                        [ PROPERTIES <prop1> <val1> [<prop2> <val2> ...] ]
 #                        [ NOINSTALL ]
 #                        [ HEADER_DESTINATION <path> ]
 #                        [ INSTALL_HEADERS LISTED|ALL ]
@@ -105,6 +106,9 @@
 #   conditional expression which must evaluate to true for this target to be
 #   built (must be valid in a CMake ``if`` statement)
 #
+# PROPERTIES : optional
+#   custom properties to set on the target
+#
 # NOINSTALL : optional
 #   do not install the library
 #
@@ -155,8 +159,14 @@
 function( ecbuild_add_library_impl )
 
   set( options NOINSTALL AUTO_VERSION AUTO_SOVERSION )
-  set( single_value_args TARGET TYPE COMPONENT INSTALL_HEADERS INSTALL_HEADERS_REGEX LINKER_LANGUAGE HEADER_DESTINATION VERSION SOVERSION OUTPUT_NAME )
-  set( multi_value_args  SOURCES SOURCES_GLOB SOURCES_EXCLUDE_REGEX OBJECTS TEMPLATES LIBS INCLUDES PRIVATE_INCLUDES PUBLIC_INCLUDES DEPENDS PERSISTENT DEFINITIONS INSTALL_HEADERS_LIST CFLAGS CXXFLAGS FFLAGS GENERATED CONDITION )
+  set( single_value_args TARGET TYPE COMPONENT INSTALL_HEADERS
+                         INSTALL_HEADERS_REGEX LINKER_LANGUAGE
+                         HEADER_DESTINATION VERSION SOVERSION OUTPUT_NAME )
+  set( multi_value_args  SOURCES SOURCES_GLOB SOURCES_EXCLUDE_REGEX OBJECTS
+                         TEMPLATES LIBS INCLUDES PRIVATE_INCLUDES
+                         PUBLIC_INCLUDES DEPENDS PERSISTENT DEFINITIONS
+                         INSTALL_HEADERS_LIST CFLAGS CXXFLAGS FFLAGS GENERATED
+                         CONDITION PROPERTIES )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
@@ -263,6 +273,11 @@ function( ecbuild_add_library_impl )
     endif()
     # ecbuild_echo_target( ${_PAR_TARGET} )
 
+    # Set custom properties
+    if( ${_PAR_PROPERTIES} )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES ${_PAR_PROPERTIES} )
+    endif()
+
     # set OUTPUT_NAME
 
     if( DEFINED _PAR_OUTPUT_NAME )
@@ -394,7 +409,7 @@ function( ecbuild_add_library_impl )
     # set linker language
     if( DEFINED _PAR_LINKER_LANGUAGE )
       ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): using linker language ${_PAR_LINKER_LANGUAGE}")
-      set_property( TARGET ${_PAR_TARGET} PROPERTY LINKER_LANGUAGE ${_PAR_LINKER_LANGUAGE} )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES LINKER_LANGUAGE ${_PAR_LINKER_LANGUAGE} )
       if( ECBUILD_${_PAR_LINKER_LANGUAGE}_IMPLICIT_LINK_LIBRARIES )
         target_link_libraries( ${_PAR_TARGET} ${ECBUILD_${_PAR_LINKER_LANGUAGE}_IMPLICIT_LINK_LIBRARIES} )
       endif()
@@ -469,8 +484,8 @@ function( ecbuild_add_library_impl )
 
       # set build location
 
-      set_property( TARGET ${_PAR_TARGET} PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
-      set_property( TARGET ${_PAR_TARGET} PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
 
       # export location of target to other projects -- must be exactly after setting the build location (see previous 2 commands)
 
@@ -483,7 +498,7 @@ function( ecbuild_add_library_impl )
       get_property( _target_defs TARGET ${_PAR_TARGET} PROPERTY COMPILE_DEFINITIONS )
       list( APPEND _target_defs ${_PAR_DEFINITIONS} )
       ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): using definitions ${_target_defs}")
-      set_property( TARGET ${_PAR_TARGET} PROPERTY COMPILE_DEFINITIONS ${_target_defs} )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES COMPILE_DEFINITIONS "${_target_defs}" )
     endif()
 
     # make sure target is removed before - some problems with AIX
diff --git a/cmake/ecbuild_add_test.cmake b/cmake/ecbuild_add_test.cmake
index 1da8568..da0bd22 100644
--- a/cmake/ecbuild_add_test.cmake
+++ b/cmake/ecbuild_add_test.cmake
@@ -35,6 +35,7 @@
 #                     [ DEPENDS <target1> [<target2> ...] ]
 #                     [ TEST_DEPENDS <target1> [<target2> ...] ]
 #                     [ CONDITION <condition> ]
+#                     [ PROPERTIES <prop1> <val1> [<prop2> <val2> ...] ]
 #                     [ ENVIRONMENT <variable1> [<variable2> ...] ]
 #                     [ WORKING_DIRECTORY <path> ]
 #                     [ CFLAGS <flag1> [<flag2> ...] ]
@@ -131,6 +132,9 @@
 #   conditional expression which must evaluate to true for this target to be
 #   built (must be valid in a CMake ``if`` statement)
 #
+# PROPERTIES : optional
+#   custom properties to set on the target
+#
 # ENVIRONMENT : optional
 #   list of environment variables to set in the test environment
 #
@@ -157,7 +161,7 @@ macro( ecbuild_add_test )
   set( single_value_args TARGET ENABLED COMMAND TYPE LINKER_LANGUAGE MPI OMP WORKING_DIRECTORY )
   set( multi_value_args  SOURCES OBJECTS LIBS INCLUDES TEST_DEPENDS DEPENDS LABELS ARGS
                          PERSISTENT DEFINITIONS RESOURCES TEST_DATA CFLAGS
-                         CXXFLAGS FFLAGS GENERATED CONDITION ENVIRONMENT )
+                         CXXFLAGS FFLAGS GENERATED CONDITION PROPERTIES ENVIRONMENT )
 
   cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}"  ${_FIRST_ARG} ${ARGN} )
 
@@ -374,21 +378,21 @@ macro( ecbuild_add_test )
 
       if( _target_defs )
         ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): using definitions ${_target_defs}")
-        set_property( TARGET ${_PAR_TARGET} PROPERTY COMPILE_DEFINITIONS ${_target_defs} )
+        set_target_properties( ${_PAR_TARGET} PROPERTIES COMPILE_DEFINITIONS "${_target_defs}" )
       endif()
 
       # set build location to local build dir
       # not the project base as defined for libs and execs
-      set_property( TARGET ${_PAR_TARGET} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${_TEST_DIR} )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${_TEST_DIR} )
 
       # whatever project settings are, we always build tests with the build_rpath, not the install_rpath
-      set_property( TARGET ${_PAR_TARGET} PROPERTY BUILD_WITH_INSTALL_RPATH FALSE )
-      set_property( TARGET ${_PAR_TARGET} PROPERTY SKIP_BUILD_RPATH         FALSE )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES BUILD_WITH_INSTALL_RPATH FALSE )
+      set_target_properties( ${_PAR_TARGET} PROPERTIES SKIP_BUILD_RPATH         FALSE )
 
       # set linker language
       if( DEFINED _PAR_LINKER_LANGUAGE )
         ecbuild_debug("ecbuild_add_test(${_PAR_TARGET}): using linker language ${_PAR_LINKER_LANGUAGE}")
-        set_property( TARGET ${_PAR_TARGET} PROPERTY LINKER_LANGUAGE ${_PAR_LINKER_LANGUAGE} )
+        set_target_properties( ${_PAR_TARGET} PROPERTIES LINKER_LANGUAGE ${_PAR_LINKER_LANGUAGE} )
       endif()
 
       # make sure target is removed before - some problems with AIX
@@ -452,6 +456,11 @@ macro( ecbuild_add_test )
         add_test( NAME ${_PAR_TARGET} COMMAND ${_PAR_TARGET}  ${TEST_ARGS} ${_working_dir} ) # run the test that was generated
       endif()
 
+      # Set custom properties
+      if( ${_PAR_PROPERTIES} )
+        set_target_properties( ${_PAR_TARGET} PROPERTIES ${_PAR_PROPERTIES} )
+      endif()
+
       # get test data
 
       if( _PAR_TEST_DATA )
diff --git a/cmake/ecbuild_append_to_rpath.cmake b/cmake/ecbuild_append_to_rpath.cmake
index 895f837..38ecbb2 100644
--- a/cmake/ecbuild_append_to_rpath.cmake
+++ b/cmake/ecbuild_append_to_rpath.cmake
@@ -67,7 +67,12 @@ macro( ecbuild_append_to_rpath RPATH_DIRS )
 
 				endif()
 
-				if( EC_OS_NAME STREQUAL "linux" )
+                if( EC_OS_NAME STREQUAL "freebsd" )
+                    _path_append( CMAKE_INSTALL_RPATH "$ORIGIN/${RPATH_DIR}" )
+                    set( _done 1 )
+                endif()
+
+                if( EC_OS_NAME STREQUAL "linux" )
 					_path_append( CMAKE_INSTALL_RPATH "$ORIGIN/${RPATH_DIR}" )
 					set( _done 1 )
 				endif()
@@ -77,10 +82,10 @@ macro( ecbuild_append_to_rpath RPATH_DIRS )
 					set( _done 1 )
 				endif()
 
-				if( EC_OS_NAME STREQUAL "aix" ) # always relative to exectuable path
-					_path_append( CMAKE_INSTALL_RPATH "${RPATH_DIR}" ) 
-					set( _done 1 )
-				endif()
+                if( EC_OS_NAME STREQUAL "aix" ) # always relative to exectuable path
+                    _path_append( CMAKE_INSTALL_RPATH "${RPATH_DIR}" )
+                    set( _done 1 )
+                endif()
 
 				# fallback
 
diff --git a/cmake/ecbuild_bundle.cmake b/cmake/ecbuild_bundle.cmake
index 6a49354..9778e27 100644
--- a/cmake/ecbuild_bundle.cmake
+++ b/cmake/ecbuild_bundle.cmake
@@ -130,9 +130,12 @@ macro( ecbuild_bundle )
 
   string(TOUPPER "${_PAR_PROJECT}" PNAME)
 
+  ecbuild_info( "---------------------------------------------------------" )
+
   if( BUNDLE_SKIP_${PNAME} )
-    ecbuild_info( "Skipping bundle project ${PNAME}" )
+    ecbuild_info( "Skipping bundle project ${_PAR_PROJECT}" )
   else()
+    ecbuild_info( "Adding bundle project ${_PAR_PROJECT}" )
 
     if( _PAR_STASH )
       ecmwf_stash( PROJECT ${_PAR_PROJECT} DIR ${PROJECT_SOURCE_DIR}/${_PAR_PROJECT} STASH ${_PAR_STASH} ${_PAR_UNPARSED_ARGUMENTS} )
@@ -149,7 +152,10 @@ macro( ecbuild_bundle )
       ecbuild_critical("Source directory '${CMAKE_CURRENT_SOURCE_DIR}/${_PAR_PROJECT}' for subproject '${_PAR_PROJECT}' does not exist or does not contain a CMakeLists.txt file.")
     endif()
 
-    ecbuild_use_package( PROJECT ${_PAR_PROJECT} )
+    # Do not descend into ecbuild if included in a bundle (ECBUILD-333)
+    if( NOT _PAR_PROJECT STREQUAL "ecbuild" )
+      ecbuild_use_package( PROJECT ${_PAR_PROJECT} )
+    endif()
   endif()
 
 endmacro()
diff --git a/cmake/ecbuild_check_os.cmake b/cmake/ecbuild_check_os.cmake
index be92c87..d2af403 100644
--- a/cmake/ecbuild_check_os.cmake
+++ b/cmake/ecbuild_check_os.cmake
@@ -205,31 +205,160 @@ if( ENABLE_OS_ENDINESS_TEST )
 endif()
 
 ############################################################################################
-# enable profiling
+# enable profiling via gprof
 
 if( ENABLE_PROFILING )
+  ecbuild_deprecate( "ENABLE_PROFILING is deprecated and ignored, use ENABLE_GPROF instead" )
+endif()
 
-  if( CMAKE_C_COMPILER_ID MATCHES "GNU" )
+if( ENABLE_GPROF )
+
+  # User defined profiling flag takes precedence
+  if( ECBUILD_GPROF_FLAG )
+
+    ecbuild_debug( "Enabling profiling with user defined flag '${ECBUILD_GPROF_FLAG}'" )
+
+  # -p  Generate extra code to write profile information suitable for the analysis program
+  #     prof.  You must use this option when compiling the source files you want data about,
+  #     and you must also use it when linking.
+  #
+  # -pg Generate extra code to write profile information suitable for the analysis program
+  #     gprof.  You must use this option when compiling the source files you want data about,
+  #     and you must also use it when linking.
+  #
+  # --coverage
+  #      This option is used to compile and link code instrumented for coverage analysis.  The
+  #      option is a synonym for -fprofile-arcs -ftest-coverage (when compiling) and -lgcov
+  #      (when linking).  See the documentation for those options for more details.
+  #
+  #      *   Compile the source files with -fprofile-arcs plus optimization and code generation
+  #          options.  For test coverage analysis, use the additional -ftest-coverage option.
+  #          You do not need to profile every source file in a program.
+  #
+  #      *   Link your object files with -lgcov or -fprofile-arcs (the latter implies the
+  #          former).
+  #
+  #      *   Run the program on a representative workload to generate the arc profile
+  #          information.  This may be repeated any number of times.  You can run concurrent
+  #          instances of your program, and provided that the file system supports locking, the
+  #          data files will be correctly updated.  Also "fork" calls are detected and correctly
+  #          handled (double counting will not happen).
+  #
+  #      *   For profile-directed optimizations, compile the source files again with the same
+  #          optimization and code generation options plus -fbranch-probabilities.
+  #
+  #      *   For test coverage analysis, use gcov to produce human readable information from the
+  #          .gcno and .gcda files.  Refer to the gcov documentation for further information.
+  #
+  #      With -fprofile-arcs, for each function of your program GCC creates a program flow
+  #      graph, then finds a spanning tree for the graph.  Only arcs that are not on the
+  #      spanning tree have to be instrumented: the compiler adds code to count the number of
+  #      times that these arcs are executed.  When an arc is the only exit or only entrance to a
+  #      block, the instrumentation code can be added to the block; otherwise, a new basic block
+  #      must be created to hold the instrumentation code.
+  elseif( CMAKE_C_COMPILER_ID MATCHES "GNU" )
+
+    set( ECBUILD_GPROF_FLAG "-pg --coverage" )
+    ecbuild_debug( "Enabling profiling with GNU flag '${ECBUILD_GPROF_FLAG}'" )
+
+  # -p
+  #
+  #        Compiles and links for function profiling
+  #               with gprof(1).
+  #
+  #        Architecture  Restrictions:  Not  available  on  Intel(R)   64   architecture
+  #        targeting the
+  #               Intel(R)  Xeon  Phi(TM) coprocessor x100 product family (formerly code
+  #               name  Knights  Corner),  on  IA-32  architecture  targeting   Intel(R)
+  #               Graphics Technology, or on Intel(R) 64 architecture targeting Intel(R)
+  #               Graphics Technology
+  #
+  #        Arguments:
+  #
+  #        None
+  #
+  #        Default:
+  #
+  #        OFF               Files are compiled and linked without profiling.
+  #
+  #        Description:
+  #
+  #        This option compiles and links for function profiling with gprof(1).
+  #
+  #        When you specify this option, inlining is disabled. However, you can override
+  #        this  by  specifying  pragma forceinline, declspec forceinline (Windows* OS),
+  #        attribute always_inline (Linux* OS and OS X*), or a compiler option  such  as
+  #        [Q]inline-forceinline.
+  elseif( CMAKE_C_COMPILER_ID MATCHES "Intel" )
+
+    set( ECBUILD_GPROF_FLAG "-p" )
+    ecbuild_debug( "Enabling profiling with Intel flag '${ECBUILD_GPROF_FLAG}'" )
+
+  # -Mprof[=option[,option,...]]
+  #        Set performance profiling options.  Use of these options will cause the resulting
+  #        executable to create a performance profile that can be viewed and analyzed with the
+  #        PGPROF performance profiler.  In the descriptions below, PGI-style profiling implies
+  #        compiler-generated source instrumentation.  MPICH-style profiling implies the use of
+  #        instrumented wrappers for MPI library routines.  The -Mprof options are:
+  #
+  #        ccff
+  #
+  #        dwarf     Generate limited DWARF symbol information sufficient for most performance
+  #                  profilers.
+  #
+  #        func      Perform PGI-style function level profiling.
+  #
+  #        hwcts     Generate a profile using event-based sampling of hardware counters via the
+  #                  PAPI interface (linux86-64 only, PAPI must be installed).
+  #
+  #        lines     Perform PGI-style line level profiling.
+  #
+  #        hpmpi     (PGI CDK only) Perform MPICH-style profiling for the HP Implies
+  #                  -Mmpi=hpmpi.
+  #
+  #        mpich1    (PGI CDK only) Perform MPICH-style profiling for MPICH-1.  Implies
+  #                  -Mmpi=mpich1.  Use MPIDIR to point to the MPICH-1 libraries.  This flag is
+  #                  no longer fully supported.
+  #
+  #        mpich2    (PGI CDK only) Perform MPICH-style profiling for MPICH-2.  Implies
+  #                  -Mmpi=mpich2.  Use MPIDIR to point to the MPICH-1 libraries.  This flag is
+  #                  no longer fully supported.
+  #
+  #        mvapich1  (PGI CDK only) Perform MPICH-style profiling for MVAPICH.  Implies
+  #                  -Mmpi=mvapich1.  Use MPIDIR to point to the MPICH-1 libraries.  This flag
+  #                  is no longer fully supported.
+  #
+  #        time      Generate a profile using time-based instruction-level statistical
+  #                  sampling. This is equivalent to -pg, except that the profile is saved in a
+  #                  file named pgprof.out instead of gmon.out.
+  #
+  #        On Linux systems that have OProfile installed, PGPROF supports collection of
+  #        performance data without recompilation. Use of -Mprof=dwarf is useful for this mode
+  #        of profiling.
+  elseif( CMAKE_C_COMPILER_ID MATCHES "PGI" )
+
+    set( ECBUILD_GPROF_FLAG "-Mprof=dwarf,time" )
+    ecbuild_debug( "Enabling profiling with PGI flag '${ECBUILD_GPROF_FLAG}'" )
+
+  # There is no equivalent to -pg for clang:
+  # http://lists.llvm.org/pipermail/cfe-dev/2010-September/011255.html
+  else()
 
-    set( _flags "-pg --coverage" )
+    ecbuild_warn( "Profiling enabled but ecbuild doesn't know how to enable for this particular compiler ${CMAKE_C_COMPILER_ID}")
 
-    set( CMAKE_EXE_LINKER_FLAGS    "${CMAKE_EXE_LINKER_FLAGS} ${_flags}" )
-    set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_flags}" )
-    set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${_flags}" )
+  endif()
 
-    set( _trust_flags ${ECBUILD_TRUST_FLAGS} )
-    set( ECBUILD_TRUST_FLAGS ON )
-    ecbuild_add_c_flags( "${_flags}" )
-    ecbuild_add_cxx_flags( "${_flags}" )
-    ecbuild_add_fortran_flags( "${_flags}" )
-    set( ECBUILD_TRUST_FLAGS ${_trust_flags} )
-    unset( _trust_flags )
+  set( CMAKE_EXE_LINKER_FLAGS    "${CMAKE_EXE_LINKER_FLAGS} ${ECBUILD_GPROF_FLAG}" )
+  set( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${ECBUILD_GPROF_FLAG}" )
+  set( CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${ECBUILD_GPROF_FLAG}" )
 
-    unset( _flags )
-
-  else()
-    ecbuild_warn( "Profiling enabled but ecbuild doesn't know how to enable for this particular compiler ${CMAKE_C_COMPILER_ID}")
-  endif()
+  set( _trust_flags ${ECBUILD_TRUST_FLAGS} )
+  set( ECBUILD_TRUST_FLAGS ON )
+  ecbuild_add_c_flags( "${ECBUILD_GPROF_FLAG}" )
+  ecbuild_add_cxx_flags( "${ECBUILD_GPROF_FLAG}" )
+  ecbuild_add_fortran_flags( "${ECBUILD_GPROF_FLAG}" )
+  set( ECBUILD_TRUST_FLAGS ${_trust_flags} )
+  unset( _trust_flags )
 
 endif()
 
@@ -278,6 +407,12 @@ if( UNIX )
 
   endif()
 
+  ### FreeBSD ###
+
+  if( ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD" )
+    set( EC_OS_NAME "freebsd" )
+  endif()
+
   ### Solaris ###
 
   if( ${CMAKE_SYSTEM_NAME} MATCHES "SunOS" )
diff --git a/cmake/ecbuild_compiler_flags.cmake b/cmake/ecbuild_compiler_flags.cmake
index a6c2944..139038b 100644
--- a/cmake/ecbuild_compiler_flags.cmake
+++ b/cmake/ecbuild_compiler_flags.cmake
@@ -18,18 +18,18 @@
 #
 # The procedure is as follows:
 #
-# 1.  ecBuild does *not* set ``CMAKE_<lang>_FLAGS`` i.e. the user can set these
-#     via -D or the CMake cache and these will be the "base" flags.
+# 1.  ecBuild does **not** set ``CMAKE_<lang>_FLAGS`` i.e. the user can set
+#     these via ``-D`` or the CMake cache and these will be the "base" flags.
 #
-# 2.  ecBuild *overwrites* ``CMAKE_<lang>_FLAGS_<btype>`` in the CMake cache
+# 2.  ecBuild **overwrites** ``CMAKE_<lang>_FLAGS_<btype>`` in the CMake cache
 #     for all build types with compiler specific defaults for the currently
-#     loaded compiler i.e. any value set by the user via -D or the CMake cache
-#     *has no effect*.
+#     loaded compiler i.e. any value set by the user via ``-D`` or the CMake
+#     cache **has no effect**.
 #
 # 3.  Any value the user provides via ``ECBUILD_<lang>_FLAGS`` or
-#     ``ECBUILD_<lang>_FLAGS_<btype>`` *overrides* the corresponding
-#     ``CMAKE_<lang>_FLAGS`` or ``CMAKE_<lang>_FLAGS_<btype>`` *without being
-#     written to the CMake cache*.
+#     ``ECBUILD_<lang>_FLAGS_<btype>`` **overrides** the corresponding
+#     ``CMAKE_<lang>_FLAGS`` or ``CMAKE_<lang>_FLAGS_<btype>`` **without being
+#     written to the CMake cache**.
 #
 ##############################################################################
 
diff --git a/cmake/ecbuild_declare_project.cmake b/cmake/ecbuild_declare_project.cmake
index 348e2fe..b3f29e7 100644
--- a/cmake/ecbuild_declare_project.cmake
+++ b/cmake/ecbuild_declare_project.cmake
@@ -134,15 +134,6 @@ macro( ecbuild_declare_project )
   mark_as_advanced( INSTALL_DATA_DIR )
   mark_as_advanced( INSTALL_CMAKE_DIR )
 
-  # overrides of install dirs (deprecated in ecBuild 2.4.0)
-
-  foreach( p LIB BIN INCLUDE DATA CMAKE )
-    if( ${PNAME}_INSTALL_${p}_DIR )
-      ecbuild_deprecate( "Use of ${PNAME}_INSTALL_${p}_DIR is deprecated and will be removed in a future release. Use INSTALL_${p}_DIR instead." )
-      set( INSTALL_${p}_DIR ${${PNAME}_INSTALL_${p}_DIR} )
-    endif()
-  endforeach()
-
   # warnings for non-relocatable projects
 
   foreach( p LIB BIN INCLUDE DATA CMAKE )
@@ -196,7 +187,7 @@ macro( ecbuild_declare_project )
 
   # print project header
 
-  message( STATUS "---------------------------------------------------------" )
+  ecbuild_info( "---------------------------------------------------------" )
 
   if( ${PNAME}_GIT_SHA1_SHORT )
     ecbuild_info( "[${PROJECT_NAME}] (${${PNAME}_VERSION_STR}) [${${PNAME}_GIT_SHA1_SHORT}]" )
diff --git a/cmake/ecbuild_define_paths.cmake b/cmake/ecbuild_define_paths.cmake
index c5e4830..16d7b94 100644
--- a/cmake/ecbuild_define_paths.cmake
+++ b/cmake/ecbuild_define_paths.cmake
@@ -23,14 +23,17 @@ set( CMAKE_SKIP_BUILD_RPATH              FALSE  )
 
 # If INSTALL_LIB_DIR is set to anything other than lib, the relative install
 # RPATH is wrong in the build tree
-if( ENABLE_RELATIVE_RPATHS AND (NOT INSTALL_LIB_DIR OR INSTALL_LIB_DIR STREQUAL "lib") )
-  # when building, use the install RPATH immediately (we don't want to relink)
-  set( CMAKE_BUILD_WITH_INSTALL_RPATH      TRUE  )
-  ecbuild_debug( "Building with install RPATH" )
-else()
-  # when building, don't use the install RPATH yet, but later on when installing
-  set( CMAKE_BUILD_WITH_INSTALL_RPATH      FALSE  )
-  ecbuild_debug( "Not building with install RPATH, need to relink when installing" )
+if( ENABLE_RELATIVE_RPATHS )
+  ecbuild_debug( "Relative RPATHS are enabled" )
+  if( INSTALL_LIB_DIR STREQUAL "lib" OR (NOT INSTALL_LIB_DIR) )
+    # when building, use the install RPATH immediately (we don't want to relink)
+    set( CMAKE_BUILD_WITH_INSTALL_RPATH      TRUE  )
+    ecbuild_debug( "Building with install RPATH" )
+  else()
+    # when building, don't use the install RPATH yet, but later on when installing
+    set( CMAKE_BUILD_WITH_INSTALL_RPATH      FALSE  )
+    ecbuild_debug( "Not building with install RPATH, need to relink when installing" )
+  endif()
 endif()
 
 # Always include srcdir and builddir in include path
diff --git a/cmake/ecbuild_find_omp.cmake b/cmake/ecbuild_find_omp.cmake
index 15a5b81..3dc6fac 100644
--- a/cmake/ecbuild_find_omp.cmake
+++ b/cmake/ecbuild_find_omp.cmake
@@ -19,8 +19,8 @@ macro( lookup_omp_flags )
   set(_OMP_FLAG_XL         "-qsmp=omp")
   set(_OMPSTUBS_FLAG_XL    "-qsmp=noomp")
 
-  set(_OMP_FLAG_Intel      "-openmp")
-  set(_OMPSTUBS_FLAG_Intel "-openmp-stubs")
+  set(_OMP_FLAG_Intel      "-qopenmp")
+  set(_OMPSTUBS_FLAG_Intel "-qopenmp-stubs")
 
   # sample C openmp source code to test
   set(_OMP_C_TEST_SOURCE
diff --git a/cmake/ecbuild_get_test_data.cmake b/cmake/ecbuild_get_test_data.cmake
index 37ea904..4945b90 100644
--- a/cmake/ecbuild_get_test_data.cmake
+++ b/cmake/ecbuild_get_test_data.cmake
@@ -47,7 +47,7 @@ function( _download_test_data _p_NAME _p_DIRNAME )
     if( WGET_PROGRAM )
 
       # wget takes the total number of tries, curl the number or retries
-      math( EXPR ECBUILD_DOWNLOAD_RETRIES ${ECBUILD_DOWNLOAD_RETRIES} + 1 )
+      math( EXPR ECBUILD_DOWNLOAD_RETRIES "${ECBUILD_DOWNLOAD_RETRIES} + 1" )
 
       add_custom_command( OUTPUT ${_p_NAME}
         COMMENT "(wget) downloading http://download.ecmwf.org/test-data/${_p_DIRNAME}/${_p_NAME}"
@@ -407,8 +407,13 @@ endfunction()\n\n" )
 
         # The option /fast disables dependency checking on a target, see
         # https://cmake.org/Wiki/CMake_FAQ#Is_there_a_way_to_skip_checking_of_dependent_libraries_when_compiling.3F
+        if( WIN32 )
+          set( _fast "\fast" )
+        else()
+          set( _fast "/fast" )
+        endif()
         file( APPEND ${_script}
-            "exec_check( \"${CMAKE_COMMAND}\" --build \"${CMAKE_BINARY_DIR}\" --target __get_data_${_p_TARGET}_${_name}/fast )\n" )
+              "exec_check( \"${CMAKE_COMMAND}\" --build \"${CMAKE_BINARY_DIR}\" --target __get_data_${_p_TARGET}_${_name}${_fast} )\n" )
 
     endforeach()
 
diff --git a/cmake/ecbuild_git.cmake b/cmake/ecbuild_git.cmake
index b2d38fa..18aab19 100644
--- a/cmake/ecbuild_git.cmake
+++ b/cmake/ecbuild_git.cmake
@@ -227,11 +227,13 @@ macro( ecbuild_git )
 
       if( DEFINED _PAR_BRANCH AND _PAR_UPDATE ) #############################################################################
 
-        execute_process( COMMAND "${GIT_EXECUTABLE}" pull -q
+        # Use git pull --ff-only, we WANT this to fail on upstream rebase and
+        # we DON'T want merge commits here!
+        execute_process( COMMAND "${GIT_EXECUTABLE}" pull -q --ff-only
                          RESULT_VARIABLE nok ERROR_VARIABLE error
                          WORKING_DIRECTORY "${ABS_PAR_DIR}")
         if(nok)
-          ecbuild_warn("git pull of branch ${_PAR_BRANCH} on ${_PAR_DIR} failed:\n ${error}")
+          ecbuild_critical("git pull of branch ${_PAR_BRANCH} on ${_PAR_DIR} failed:\n ${error}")
         endif()
 
       endif() ####################################################################################
diff --git a/cmake/ecbuild_install_project.cmake b/cmake/ecbuild_install_project.cmake
index ddba836..113e642 100644
--- a/cmake/ecbuild_install_project.cmake
+++ b/cmake/ecbuild_install_project.cmake
@@ -125,6 +125,8 @@ macro( ecbuild_install_project )
 
     ecbuild_set_if_not_defined(CPACK_PACKAGE_NAME      "${_PAR_NAME}")
     ecbuild_set_if_not_defined(CPACK_PACKAGE_VERSION   "${${PNAME}_VERSION_STR}")
+    # Convert "/" to "-" for the case where the version string contains a "/"
+    string( REPLACE "/" "-" CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION} )
 
     ecbuild_set_if_not_defined(CPACK_PACKAGE_FILE_NAME   "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
 
diff --git a/cmake/ecbuild_log.cmake b/cmake/ecbuild_log.cmake
index ca058fe..57ebf0d 100644
--- a/cmake/ecbuild_log.cmake
+++ b/cmake/ecbuild_log.cmake
@@ -121,7 +121,7 @@ endif()
 function( ecbuild_log LEVEL )
   string( REPLACE ";" " " MSG "${ARGN}" )
   string( TIMESTAMP _time )
-  file( APPEND ${ECBUILD_LOG_FILE} "${_time} - ${LEVEL} - ${MSG}\n" )
+  file( APPEND ${ECBUILD_LOG_FILE} "${_time} - ${PROJECT_NAME} - ${LEVEL} - ${MSG}\n" )
 endfunction( ecbuild_log )
 
 ##############################################################################
diff --git a/cmake/ecbuild_pkgconfig.cmake b/cmake/ecbuild_pkgconfig.cmake
index ed1076d..5ae273e 100644
--- a/cmake/ecbuild_pkgconfig.cmake
+++ b/cmake/ecbuild_pkgconfig.cmake
@@ -415,7 +415,7 @@ function( ecbuild_pkgconfig )
   ecbuild_info( "pkg-config file created: ${_PAR_FILENAME}" )
 
   install( FILES ${CMAKE_BINARY_DIR}/${_PAR_FILENAME}
-           DESTINATION ${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}/pkgconfig/
+           DESTINATION ${INSTALL_LIB_DIR}/pkgconfig/
            COMPONENT utilities )
 
 endfunction(ecbuild_pkgconfig)
diff --git a/cmake/ecbuild_remove_fortran_flags.cmake b/cmake/ecbuild_remove_fortran_flags.cmake
index 2a41f04..93aab17 100644
--- a/cmake/ecbuild_remove_fortran_flags.cmake
+++ b/cmake/ecbuild_remove_fortran_flags.cmake
@@ -36,7 +36,10 @@ macro( ecbuild_remove_fortran_flags m_flags )
     cmake_parse_arguments( _PAR "" "${single_value_args}" "${multi_value_args}" ${_FIRST_ARG} ${ARGN} )
 
     string( TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_CAPS )
-    string( TOUPPER ${_PAR_BUILD} _PAR_BUILD_CAPS )
+
+    if( _PAR_BUILD )
+      string( TOUPPER ${_PAR_BUILD} _PAR_BUILD_CAPS )
+    endif()
 
     if( _PAR_BUILD AND (CMAKE_BUILD_TYPE_CAPS MATCHES "${_PAR_BUILD_CAPS}") )
 
@@ -48,6 +51,7 @@ macro( ecbuild_remove_fortran_flags m_flags )
     elseif( NOT _PAR_BUILD )
 
       foreach( _flag ${_flags} )
+        string(REGEX REPLACE " *${_flag} *" " " CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE_CAPS} ${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE_CAPS}} )
         string(REGEX REPLACE " *${_flag} *" " " CMAKE_Fortran_FLAGS ${CMAKE_Fortran_FLAGS} )
         ecbuild_debug( "Fortran FLAG [${_flag}] removed" )
       endforeach()
diff --git a/cmake/ecbuild_setup_test_framework.cmake b/cmake/ecbuild_setup_test_framework.cmake
index c14b2f9..b4b3ccb 100644
--- a/cmake/ecbuild_setup_test_framework.cmake
+++ b/cmake/ecbuild_setup_test_framework.cmake
@@ -40,6 +40,33 @@ if( ENABLE_TESTS AND CMAKE_CXX_COMPILER_LOADED )
 
 endif()
 
-if( NOT ENABLE_TESTS )
+if( ENABLE_TESTS )
+
+  # CTest has built-in support for running with memcheck
+  # (https://cmake.org/cmake/help/latest/manual/ctest.1.html#ctest-memcheck-step)
+  # via `ctest -T memcheck`, however by default memcheck does not exit with a
+  # non-zero error code if any issues are found.
+  #
+  # CTest will run ${MEMORYCHECK_COMMAND} with ${MEMORYCHECK_COMMAND_OPTIONS}.
+  # Suppressions are read from ${MEMORYCHECK_SUPPRESSIONS_FILE} if given.
+
+  find_program( MEMORYCHECK_COMMAND valgrind )
+  ecbuild_debug_var( MEMORYCHECK_COMMAND )
+
+  if( NOT MEMORYCHECK_COMMAND_OPTIONS )
+    set( MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full --error-exitcode=1"
+         CACHE STRING "Options passed to memcheck command" )
+  endif()
+  ecbuild_debug_var( MEMORYCHECK_COMMAND_OPTIONS )
+
+  if( NOT MEMORYCHECK_SUPPRESSIONS_FILE AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/valgrind_suppress.txt" )
+    set( MEMORYCHECK_SUPPRESSIONS_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.supp"
+         CACHE FILEPATH "Suppressions file to be used with memcheck command" )
+  endif()
+  ecbuild_debug_var( MEMORYCHECK_SUPPRESSIONS_FILE )
+
+else()
+
   ecbuild_info("Tests have been disabled")
+
 endif()
diff --git a/cmake/ecbuild_system.cmake b/cmake/ecbuild_system.cmake
index 10af0c8..16c0299 100644
--- a/cmake/ecbuild_system.cmake
+++ b/cmake/ecbuild_system.cmake
@@ -102,12 +102,6 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
     # would bring FindEigen in, so for the moment keep it out
     # set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/contrib/GreatCMakeCookOff" )
 
-    include(CTest)                 # add cmake testing support
-    enable_testing()
-
-    # keep this until we modify the meaning to 'check' if installation worked
-    add_custom_target( check COMMAND ${CMAKE_CTEST_COMMAND} )
-
     ############################################################################################
     # define valid build types
 
@@ -249,6 +243,15 @@ if( PROJECT_NAME STREQUAL CMAKE_PROJECT_NAME )
     ecbuild_flush_cache()
 
     ############################################################################################
+    # Testing
+
+    include(CTest)                 # add cmake testing support
+    enable_testing()
+
+    # keep this until we modify the meaning to 'check' if installation worked
+    add_custom_target( check COMMAND ${CMAKE_CTEST_COMMAND} )
+
+    ############################################################################################
     # define the build timestamp, unless the user provided one via EC_BUILD_TIMESTAMP
 
     if( NOT DEFINED EC_BUILD_TIMESTAMP )
diff --git a/cmake/ecbuild_uninstall.cmake.in b/cmake/ecbuild_uninstall.cmake.in
index 2037e36..33b1949 100644
--- a/cmake/ecbuild_uninstall.cmake.in
+++ b/cmake/ecbuild_uninstall.cmake.in
@@ -1,9 +1,16 @@
 if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
   message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
-endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+endif()
 
 file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
 string(REGEX REPLACE "\n" ";" files "${files}")
+
+if(EXISTS "@CMAKE_CURRENT_BINARY_DIR@/extra_install.txt")
+  file(READ "@CMAKE_CURRENT_BINARY_DIR@/extra_install.txt" __files)
+  string(REGEX REPLACE "\n" ";" __files "${__files}")
+  list(APPEND files ${__files})
+endif()
+
 foreach(file ${files})
   message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
   if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
@@ -14,8 +21,8 @@ foreach(file ${files})
       )
     if(NOT "${rm_retval}" STREQUAL 0)
       message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
-    endif(NOT "${rm_retval}" STREQUAL 0)
-  else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+    endif()
+  else()
     message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
-  endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
+  endif()
 endforeach(file)
diff --git a/cmake/project-config.cmake.in b/cmake/project-config.cmake.in
index 6d48728..0e1e83b 100644
--- a/cmake/project-config.cmake.in
+++ b/cmake/project-config.cmake.in
@@ -75,7 +75,7 @@ if( NOT @PROJECT_NAME at _BINARY_DIR )
   if( @PNAME at _IS_BUILD_DIR_EXPORT )
     include( "@TOP_PROJECT_TARGETS_FILE@" OPTIONAL )
   else()
-    include( "${@PNAME at _CMAKE_DIR}/@PROJECT_NAME at -targets.cmake" )
+    include( "${@PNAME at _CMAKE_DIR}/@PROJECT_NAME at -targets.cmake" OPTIONAL )
   endif()
 
 endif()
diff --git a/cmake/sg.pl b/cmake/sg.pl
old mode 100644
new mode 100755
diff --git a/data/bufr/bufr_data_files.txt b/data/bufr/bufr_data_files.txt
index e5d5005..cbe5331 100644
--- a/data/bufr/bufr_data_files.txt
+++ b/data/bufr/bufr_data_files.txt
@@ -138,3 +138,5 @@ metar_with_2_bias.bufr
 temp-land-with-substituted-values.bufr
 imssnow.bufr
 sentinel1.bufr
+srals3_ecmwf4.bufr
+srals3_eumetsat.bufr
diff --git a/definitions/Makefile.am b/definitions/Makefile.am
index 886789f..b491a4f 100644
--- a/definitions/Makefile.am
+++ b/definitions/Makefile.am
@@ -47,6 +47,10 @@ definitionsbufr_tablesdir = @ECCODES_DEFINITION_PATH@/bufr/tables
 dist_definitionsbufr_tables_DATA = \
 	bufr/tables/operators.table
 
+definitionsbufr_tables_0_local_1_254_0dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/local/1/254/0
+dist_definitionsbufr_tables_0_local_1_254_0_DATA = \
+	bufr/tables/0/local/1/254/0/element.table
+
 definitionsbufr_tables_0_local_1_98_0dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/local/1/98/0
 dist_definitionsbufr_tables_0_local_1_98_0_DATA = \
 	bufr/tables/0/local/1/98/0/element.table\
@@ -199,6 +203,15 @@ dist_definitionsbufr_tables_0_local_3_98_0_codetables_DATA = \
 	bufr/tables/0/local/3/98/0/codetables/5237.table\
 	bufr/tables/0/local/3/98/0/codetables/8201.table
 
+definitionsbufr_tables_0_local_4_98_0dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/local/4/98/0
+dist_definitionsbufr_tables_0_local_4_98_0_DATA = \
+	bufr/tables/0/local/4/98/0/element.table
+
+definitionsbufr_tables_0_local_4_98_0_codetablesdir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/local/4/98/0/codetables
+dist_definitionsbufr_tables_0_local_4_98_0_codetables_DATA = \
+	bufr/tables/0/local/4/98/0/codetables/25192.table\
+	bufr/tables/0/local/4/98/0/codetables/40192.table
+
 definitionsbufr_tables_0_wmo_10dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/10
 dist_definitionsbufr_tables_0_wmo_10_DATA = \
 	bufr/tables/0/wmo/10/element.table\
@@ -7512,6 +7525,467 @@ dist_definitionsbufr_tables_0_wmo_27_codetables_DATA = \
 	bufr/tables/0/wmo/27/codetables/8088.table\
 	bufr/tables/0/wmo/27/codetables/8091.table
 
+definitionsbufr_tables_0_wmo_28dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/28
+dist_definitionsbufr_tables_0_wmo_28_DATA = \
+	bufr/tables/0/wmo/28/element.table\
+	bufr/tables/0/wmo/28/sequence.def
+
+definitionsbufr_tables_0_wmo_28_codetablesdir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/28/codetables
+dist_definitionsbufr_tables_0_wmo_28_codetables_DATA = \
+	bufr/tables/0/wmo/28/codetables/1003.table\
+	bufr/tables/0/wmo/28/codetables/10063.table\
+	bufr/tables/0/wmo/28/codetables/10064.table\
+	bufr/tables/0/wmo/28/codetables/1007.table\
+	bufr/tables/0/wmo/28/codetables/1024.table\
+	bufr/tables/0/wmo/28/codetables/1028.table\
+	bufr/tables/0/wmo/28/codetables/1029.table\
+	bufr/tables/0/wmo/28/codetables/1033.table\
+	bufr/tables/0/wmo/28/codetables/1034.table\
+	bufr/tables/0/wmo/28/codetables/1036.table\
+	bufr/tables/0/wmo/28/codetables/1038.table\
+	bufr/tables/0/wmo/28/codetables/1052.table\
+	bufr/tables/0/wmo/28/codetables/1090.table\
+	bufr/tables/0/wmo/28/codetables/1092.table\
+	bufr/tables/0/wmo/28/codetables/1101.table\
+	bufr/tables/0/wmo/28/codetables/11030.table\
+	bufr/tables/0/wmo/28/codetables/11031.table\
+	bufr/tables/0/wmo/28/codetables/11037.table\
+	bufr/tables/0/wmo/28/codetables/11038.table\
+	bufr/tables/0/wmo/28/codetables/11039.table\
+	bufr/tables/0/wmo/28/codetables/1150.table\
+	bufr/tables/0/wmo/28/codetables/1151.table\
+	bufr/tables/0/wmo/28/codetables/13038.table\
+	bufr/tables/0/wmo/28/codetables/13039.table\
+	bufr/tables/0/wmo/28/codetables/13040.table\
+	bufr/tables/0/wmo/28/codetables/13041.table\
+	bufr/tables/0/wmo/28/codetables/13051.table\
+	bufr/tables/0/wmo/28/codetables/13056.table\
+	bufr/tables/0/wmo/28/codetables/13057.table\
+	bufr/tables/0/wmo/28/codetables/15025.table\
+	bufr/tables/0/wmo/28/codetables/19001.table\
+	bufr/tables/0/wmo/28/codetables/19008.table\
+	bufr/tables/0/wmo/28/codetables/19010.table\
+	bufr/tables/0/wmo/28/codetables/19100.table\
+	bufr/tables/0/wmo/28/codetables/19101.table\
+	bufr/tables/0/wmo/28/codetables/19102.table\
+	bufr/tables/0/wmo/28/codetables/19103.table\
+	bufr/tables/0/wmo/28/codetables/19104.table\
+	bufr/tables/0/wmo/28/codetables/19105.table\
+	bufr/tables/0/wmo/28/codetables/19107.table\
+	bufr/tables/0/wmo/28/codetables/19108.table\
+	bufr/tables/0/wmo/28/codetables/19109.table\
+	bufr/tables/0/wmo/28/codetables/19110.table\
+	bufr/tables/0/wmo/28/codetables/19113.table\
+	bufr/tables/0/wmo/28/codetables/19117.table\
+	bufr/tables/0/wmo/28/codetables/19119.table\
+	bufr/tables/0/wmo/28/codetables/20003.table\
+	bufr/tables/0/wmo/28/codetables/20004.table\
+	bufr/tables/0/wmo/28/codetables/20005.table\
+	bufr/tables/0/wmo/28/codetables/20006.table\
+	bufr/tables/0/wmo/28/codetables/20008.table\
+	bufr/tables/0/wmo/28/codetables/20009.table\
+	bufr/tables/0/wmo/28/codetables/2001.table\
+	bufr/tables/0/wmo/28/codetables/20011.table\
+	bufr/tables/0/wmo/28/codetables/20012.table\
+	bufr/tables/0/wmo/28/codetables/20017.table\
+	bufr/tables/0/wmo/28/codetables/20018.table\
+	bufr/tables/0/wmo/28/codetables/2002.table\
+	bufr/tables/0/wmo/28/codetables/20021.table\
+	bufr/tables/0/wmo/28/codetables/20022.table\
+	bufr/tables/0/wmo/28/codetables/20023.table\
+	bufr/tables/0/wmo/28/codetables/20024.table\
+	bufr/tables/0/wmo/28/codetables/20025.table\
+	bufr/tables/0/wmo/28/codetables/20026.table\
+	bufr/tables/0/wmo/28/codetables/20027.table\
+	bufr/tables/0/wmo/28/codetables/20028.table\
+	bufr/tables/0/wmo/28/codetables/20029.table\
+	bufr/tables/0/wmo/28/codetables/2003.table\
+	bufr/tables/0/wmo/28/codetables/20032.table\
+	bufr/tables/0/wmo/28/codetables/20033.table\
+	bufr/tables/0/wmo/28/codetables/20034.table\
+	bufr/tables/0/wmo/28/codetables/20035.table\
+	bufr/tables/0/wmo/28/codetables/20036.table\
+	bufr/tables/0/wmo/28/codetables/20037.table\
+	bufr/tables/0/wmo/28/codetables/2004.table\
+	bufr/tables/0/wmo/28/codetables/20040.table\
+	bufr/tables/0/wmo/28/codetables/20041.table\
+	bufr/tables/0/wmo/28/codetables/20042.table\
+	bufr/tables/0/wmo/28/codetables/20045.table\
+	bufr/tables/0/wmo/28/codetables/20048.table\
+	bufr/tables/0/wmo/28/codetables/20050.table\
+	bufr/tables/0/wmo/28/codetables/20055.table\
+	bufr/tables/0/wmo/28/codetables/20056.table\
+	bufr/tables/0/wmo/28/codetables/20062.table\
+	bufr/tables/0/wmo/28/codetables/20063.table\
+	bufr/tables/0/wmo/28/codetables/2007.table\
+	bufr/tables/0/wmo/28/codetables/20071.table\
+	bufr/tables/0/wmo/28/codetables/20085.table\
+	bufr/tables/0/wmo/28/codetables/20086.table\
+	bufr/tables/0/wmo/28/codetables/20087.table\
+	bufr/tables/0/wmo/28/codetables/20089.table\
+	bufr/tables/0/wmo/28/codetables/20090.table\
+	bufr/tables/0/wmo/28/codetables/20101.table\
+	bufr/tables/0/wmo/28/codetables/20102.table\
+	bufr/tables/0/wmo/28/codetables/20103.table\
+	bufr/tables/0/wmo/28/codetables/20104.table\
+	bufr/tables/0/wmo/28/codetables/20105.table\
+	bufr/tables/0/wmo/28/codetables/20106.table\
+	bufr/tables/0/wmo/28/codetables/20107.table\
+	bufr/tables/0/wmo/28/codetables/20108.table\
+	bufr/tables/0/wmo/28/codetables/2011.table\
+	bufr/tables/0/wmo/28/codetables/20119.table\
+	bufr/tables/0/wmo/28/codetables/20124.table\
+	bufr/tables/0/wmo/28/codetables/2013.table\
+	bufr/tables/0/wmo/28/codetables/20136.table\
+	bufr/tables/0/wmo/28/codetables/20137.table\
+	bufr/tables/0/wmo/28/codetables/20138.table\
+	bufr/tables/0/wmo/28/codetables/2014.table\
+	bufr/tables/0/wmo/28/codetables/2015.table\
+	bufr/tables/0/wmo/28/codetables/2016.table\
+	bufr/tables/0/wmo/28/codetables/2017.table\
+	bufr/tables/0/wmo/28/codetables/2019.table\
+	bufr/tables/0/wmo/28/codetables/2020.table\
+	bufr/tables/0/wmo/28/codetables/2021.table\
+	bufr/tables/0/wmo/28/codetables/2022.table\
+	bufr/tables/0/wmo/28/codetables/2023.table\
+	bufr/tables/0/wmo/28/codetables/2024.table\
+	bufr/tables/0/wmo/28/codetables/2025.table\
+	bufr/tables/0/wmo/28/codetables/2030.table\
+	bufr/tables/0/wmo/28/codetables/2031.table\
+	bufr/tables/0/wmo/28/codetables/2032.table\
+	bufr/tables/0/wmo/28/codetables/2033.table\
+	bufr/tables/0/wmo/28/codetables/2034.table\
+	bufr/tables/0/wmo/28/codetables/2036.table\
+	bufr/tables/0/wmo/28/codetables/2037.table\
+	bufr/tables/0/wmo/28/codetables/2038.table\
+	bufr/tables/0/wmo/28/codetables/2039.table\
+	bufr/tables/0/wmo/28/codetables/2040.table\
+	bufr/tables/0/wmo/28/codetables/2041.table\
+	bufr/tables/0/wmo/28/codetables/2042.table\
+	bufr/tables/0/wmo/28/codetables/2044.table\
+	bufr/tables/0/wmo/28/codetables/2045.table\
+	bufr/tables/0/wmo/28/codetables/2046.table\
+	bufr/tables/0/wmo/28/codetables/2047.table\
+	bufr/tables/0/wmo/28/codetables/2048.table\
+	bufr/tables/0/wmo/28/codetables/2049.table\
+	bufr/tables/0/wmo/28/codetables/2050.table\
+	bufr/tables/0/wmo/28/codetables/2051.table\
+	bufr/tables/0/wmo/28/codetables/2052.table\
+	bufr/tables/0/wmo/28/codetables/2053.table\
+	bufr/tables/0/wmo/28/codetables/2054.table\
+	bufr/tables/0/wmo/28/codetables/2055.table\
+	bufr/tables/0/wmo/28/codetables/2056.table\
+	bufr/tables/0/wmo/28/codetables/2057.table\
+	bufr/tables/0/wmo/28/codetables/2058.table\
+	bufr/tables/0/wmo/28/codetables/2059.table\
+	bufr/tables/0/wmo/28/codetables/2060.table\
+	bufr/tables/0/wmo/28/codetables/2061.table\
+	bufr/tables/0/wmo/28/codetables/2062.table\
+	bufr/tables/0/wmo/28/codetables/2064.table\
+	bufr/tables/0/wmo/28/codetables/2066.table\
+	bufr/tables/0/wmo/28/codetables/2070.table\
+	bufr/tables/0/wmo/28/codetables/2080.table\
+	bufr/tables/0/wmo/28/codetables/2081.table\
+	bufr/tables/0/wmo/28/codetables/2083.table\
+	bufr/tables/0/wmo/28/codetables/2084.table\
+	bufr/tables/0/wmo/28/codetables/2095.table\
+	bufr/tables/0/wmo/28/codetables/2096.table\
+	bufr/tables/0/wmo/28/codetables/2097.table\
+	bufr/tables/0/wmo/28/codetables/2099.table\
+	bufr/tables/0/wmo/28/codetables/2101.table\
+	bufr/tables/0/wmo/28/codetables/2103.table\
+	bufr/tables/0/wmo/28/codetables/2104.table\
+	bufr/tables/0/wmo/28/codetables/21066.table\
+	bufr/tables/0/wmo/28/codetables/21067.table\
+	bufr/tables/0/wmo/28/codetables/21068.table\
+	bufr/tables/0/wmo/28/codetables/21069.table\
+	bufr/tables/0/wmo/28/codetables/21070.table\
+	bufr/tables/0/wmo/28/codetables/21072.table\
+	bufr/tables/0/wmo/28/codetables/21073.table\
+	bufr/tables/0/wmo/28/codetables/21076.table\
+	bufr/tables/0/wmo/28/codetables/21109.table\
+	bufr/tables/0/wmo/28/codetables/21115.table\
+	bufr/tables/0/wmo/28/codetables/21116.table\
+	bufr/tables/0/wmo/28/codetables/21119.table\
+	bufr/tables/0/wmo/28/codetables/21144.table\
+	bufr/tables/0/wmo/28/codetables/21148.table\
+	bufr/tables/0/wmo/28/codetables/2115.table\
+	bufr/tables/0/wmo/28/codetables/21150.table\
+	bufr/tables/0/wmo/28/codetables/21155.table\
+	bufr/tables/0/wmo/28/codetables/21158.table\
+	bufr/tables/0/wmo/28/codetables/21159.table\
+	bufr/tables/0/wmo/28/codetables/21169.table\
+	bufr/tables/0/wmo/28/codetables/2119.table\
+	bufr/tables/0/wmo/28/codetables/2131.table\
+	bufr/tables/0/wmo/28/codetables/2137.table\
+	bufr/tables/0/wmo/28/codetables/2138.table\
+	bufr/tables/0/wmo/28/codetables/2139.table\
+	bufr/tables/0/wmo/28/codetables/2143.table\
+	bufr/tables/0/wmo/28/codetables/2144.table\
+	bufr/tables/0/wmo/28/codetables/2145.table\
+	bufr/tables/0/wmo/28/codetables/2146.table\
+	bufr/tables/0/wmo/28/codetables/2147.table\
+	bufr/tables/0/wmo/28/codetables/2148.table\
+	bufr/tables/0/wmo/28/codetables/2149.table\
+	bufr/tables/0/wmo/28/codetables/2150.table\
+	bufr/tables/0/wmo/28/codetables/2151.table\
+	bufr/tables/0/wmo/28/codetables/2152.table\
+	bufr/tables/0/wmo/28/codetables/2158.table\
+	bufr/tables/0/wmo/28/codetables/2159.table\
+	bufr/tables/0/wmo/28/codetables/2160.table\
+	bufr/tables/0/wmo/28/codetables/2163.table\
+	bufr/tables/0/wmo/28/codetables/2164.table\
+	bufr/tables/0/wmo/28/codetables/2165.table\
+	bufr/tables/0/wmo/28/codetables/2166.table\
+	bufr/tables/0/wmo/28/codetables/2167.table\
+	bufr/tables/0/wmo/28/codetables/2169.table\
+	bufr/tables/0/wmo/28/codetables/2170.table\
+	bufr/tables/0/wmo/28/codetables/2172.table\
+	bufr/tables/0/wmo/28/codetables/2175.table\
+	bufr/tables/0/wmo/28/codetables/2176.table\
+	bufr/tables/0/wmo/28/codetables/2177.table\
+	bufr/tables/0/wmo/28/codetables/2178.table\
+	bufr/tables/0/wmo/28/codetables/2179.table\
+	bufr/tables/0/wmo/28/codetables/2180.table\
+	bufr/tables/0/wmo/28/codetables/2181.table\
+	bufr/tables/0/wmo/28/codetables/2182.table\
+	bufr/tables/0/wmo/28/codetables/2183.table\
+	bufr/tables/0/wmo/28/codetables/2184.table\
+	bufr/tables/0/wmo/28/codetables/2185.table\
+	bufr/tables/0/wmo/28/codetables/2186.table\
+	bufr/tables/0/wmo/28/codetables/2187.table\
+	bufr/tables/0/wmo/28/codetables/2188.table\
+	bufr/tables/0/wmo/28/codetables/2189.table\
+	bufr/tables/0/wmo/28/codetables/2191.table\
+	bufr/tables/0/wmo/28/codetables/22056.table\
+	bufr/tables/0/wmo/28/codetables/22060.table\
+	bufr/tables/0/wmo/28/codetables/22061.table\
+	bufr/tables/0/wmo/28/codetables/22067.table\
+	bufr/tables/0/wmo/28/codetables/22068.table\
+	bufr/tables/0/wmo/28/codetables/22120.table\
+	bufr/tables/0/wmo/28/codetables/22121.table\
+	bufr/tables/0/wmo/28/codetables/22122.table\
+	bufr/tables/0/wmo/28/codetables/22123.table\
+	bufr/tables/0/wmo/28/codetables/22178.table\
+	bufr/tables/0/wmo/28/codetables/23001.table\
+	bufr/tables/0/wmo/28/codetables/23002.table\
+	bufr/tables/0/wmo/28/codetables/23003.table\
+	bufr/tables/0/wmo/28/codetables/23004.table\
+	bufr/tables/0/wmo/28/codetables/23005.table\
+	bufr/tables/0/wmo/28/codetables/23006.table\
+	bufr/tables/0/wmo/28/codetables/23007.table\
+	bufr/tables/0/wmo/28/codetables/23008.table\
+	bufr/tables/0/wmo/28/codetables/23009.table\
+	bufr/tables/0/wmo/28/codetables/23016.table\
+	bufr/tables/0/wmo/28/codetables/23018.table\
+	bufr/tables/0/wmo/28/codetables/23031.table\
+	bufr/tables/0/wmo/28/codetables/23032.table\
+	bufr/tables/0/wmo/28/codetables/24003.table\
+	bufr/tables/0/wmo/28/codetables/25004.table\
+	bufr/tables/0/wmo/28/codetables/25005.table\
+	bufr/tables/0/wmo/28/codetables/25006.table\
+	bufr/tables/0/wmo/28/codetables/25009.table\
+	bufr/tables/0/wmo/28/codetables/25010.table\
+	bufr/tables/0/wmo/28/codetables/25011.table\
+	bufr/tables/0/wmo/28/codetables/25012.table\
+	bufr/tables/0/wmo/28/codetables/25013.table\
+	bufr/tables/0/wmo/28/codetables/25015.table\
+	bufr/tables/0/wmo/28/codetables/25017.table\
+	bufr/tables/0/wmo/28/codetables/25020.table\
+	bufr/tables/0/wmo/28/codetables/25021.table\
+	bufr/tables/0/wmo/28/codetables/25022.table\
+	bufr/tables/0/wmo/28/codetables/25023.table\
+	bufr/tables/0/wmo/28/codetables/25024.table\
+	bufr/tables/0/wmo/28/codetables/25029.table\
+	bufr/tables/0/wmo/28/codetables/25030.table\
+	bufr/tables/0/wmo/28/codetables/25031.table\
+	bufr/tables/0/wmo/28/codetables/25032.table\
+	bufr/tables/0/wmo/28/codetables/25033.table\
+	bufr/tables/0/wmo/28/codetables/25034.table\
+	bufr/tables/0/wmo/28/codetables/25035.table\
+	bufr/tables/0/wmo/28/codetables/25036.table\
+	bufr/tables/0/wmo/28/codetables/25040.table\
+	bufr/tables/0/wmo/28/codetables/25041.table\
+	bufr/tables/0/wmo/28/codetables/25042.table\
+	bufr/tables/0/wmo/28/codetables/25053.table\
+	bufr/tables/0/wmo/28/codetables/25063.table\
+	bufr/tables/0/wmo/28/codetables/25069.table\
+	bufr/tables/0/wmo/28/codetables/25086.table\
+	bufr/tables/0/wmo/28/codetables/25090.table\
+	bufr/tables/0/wmo/28/codetables/25093.table\
+	bufr/tables/0/wmo/28/codetables/25095.table\
+	bufr/tables/0/wmo/28/codetables/25096.table\
+	bufr/tables/0/wmo/28/codetables/25097.table\
+	bufr/tables/0/wmo/28/codetables/25098.table\
+	bufr/tables/0/wmo/28/codetables/25099.table\
+	bufr/tables/0/wmo/28/codetables/25110.table\
+	bufr/tables/0/wmo/28/codetables/25112.table\
+	bufr/tables/0/wmo/28/codetables/25113.table\
+	bufr/tables/0/wmo/28/codetables/25120.table\
+	bufr/tables/0/wmo/28/codetables/25122.table\
+	bufr/tables/0/wmo/28/codetables/25123.table\
+	bufr/tables/0/wmo/28/codetables/25124.table\
+	bufr/tables/0/wmo/28/codetables/25150.table\
+	bufr/tables/0/wmo/28/codetables/25174.table\
+	bufr/tables/0/wmo/28/codetables/25181.table\
+	bufr/tables/0/wmo/28/codetables/25182.table\
+	bufr/tables/0/wmo/28/codetables/25184.table\
+	bufr/tables/0/wmo/28/codetables/25185.table\
+	bufr/tables/0/wmo/28/codetables/25187.table\
+	bufr/tables/0/wmo/28/codetables/25188.table\
+	bufr/tables/0/wmo/28/codetables/26010.table\
+	bufr/tables/0/wmo/28/codetables/29001.table\
+	bufr/tables/0/wmo/28/codetables/29002.table\
+	bufr/tables/0/wmo/28/codetables/3001.table\
+	bufr/tables/0/wmo/28/codetables/3003.table\
+	bufr/tables/0/wmo/28/codetables/30031.table\
+	bufr/tables/0/wmo/28/codetables/30032.table\
+	bufr/tables/0/wmo/28/codetables/3004.table\
+	bufr/tables/0/wmo/28/codetables/3008.table\
+	bufr/tables/0/wmo/28/codetables/3010.table\
+	bufr/tables/0/wmo/28/codetables/3011.table\
+	bufr/tables/0/wmo/28/codetables/3012.table\
+	bufr/tables/0/wmo/28/codetables/3016.table\
+	bufr/tables/0/wmo/28/codetables/3017.table\
+	bufr/tables/0/wmo/28/codetables/3018.table\
+	bufr/tables/0/wmo/28/codetables/3019.table\
+	bufr/tables/0/wmo/28/codetables/3020.table\
+	bufr/tables/0/wmo/28/codetables/3021.table\
+	bufr/tables/0/wmo/28/codetables/3022.table\
+	bufr/tables/0/wmo/28/codetables/3023.table\
+	bufr/tables/0/wmo/28/codetables/31021.table\
+	bufr/tables/0/wmo/28/codetables/31031.table\
+	bufr/tables/0/wmo/28/codetables/33002.table\
+	bufr/tables/0/wmo/28/codetables/33003.table\
+	bufr/tables/0/wmo/28/codetables/33005.table\
+	bufr/tables/0/wmo/28/codetables/33006.table\
+	bufr/tables/0/wmo/28/codetables/33015.table\
+	bufr/tables/0/wmo/28/codetables/33020.table\
+	bufr/tables/0/wmo/28/codetables/33021.table\
+	bufr/tables/0/wmo/28/codetables/33022.table\
+	bufr/tables/0/wmo/28/codetables/33023.table\
+	bufr/tables/0/wmo/28/codetables/33024.table\
+	bufr/tables/0/wmo/28/codetables/33025.table\
+	bufr/tables/0/wmo/28/codetables/33026.table\
+	bufr/tables/0/wmo/28/codetables/33027.table\
+	bufr/tables/0/wmo/28/codetables/33028.table\
+	bufr/tables/0/wmo/28/codetables/33030.table\
+	bufr/tables/0/wmo/28/codetables/33031.table\
+	bufr/tables/0/wmo/28/codetables/33032.table\
+	bufr/tables/0/wmo/28/codetables/33033.table\
+	bufr/tables/0/wmo/28/codetables/33035.table\
+	bufr/tables/0/wmo/28/codetables/33037.table\
+	bufr/tables/0/wmo/28/codetables/33038.table\
+	bufr/tables/0/wmo/28/codetables/33039.table\
+	bufr/tables/0/wmo/28/codetables/33041.table\
+	bufr/tables/0/wmo/28/codetables/33042.table\
+	bufr/tables/0/wmo/28/codetables/33043.table\
+	bufr/tables/0/wmo/28/codetables/33044.table\
+	bufr/tables/0/wmo/28/codetables/33047.table\
+	bufr/tables/0/wmo/28/codetables/33048.table\
+	bufr/tables/0/wmo/28/codetables/33049.table\
+	bufr/tables/0/wmo/28/codetables/33050.table\
+	bufr/tables/0/wmo/28/codetables/33060.table\
+	bufr/tables/0/wmo/28/codetables/33070.table\
+	bufr/tables/0/wmo/28/codetables/33071.table\
+	bufr/tables/0/wmo/28/codetables/33072.table\
+	bufr/tables/0/wmo/28/codetables/33075.table\
+	bufr/tables/0/wmo/28/codetables/33076.table\
+	bufr/tables/0/wmo/28/codetables/33077.table\
+	bufr/tables/0/wmo/28/codetables/33078.table\
+	bufr/tables/0/wmo/28/codetables/33079.table\
+	bufr/tables/0/wmo/28/codetables/33080.table\
+	bufr/tables/0/wmo/28/codetables/33081.table\
+	bufr/tables/0/wmo/28/codetables/33082.table\
+	bufr/tables/0/wmo/28/codetables/33083.table\
+	bufr/tables/0/wmo/28/codetables/33084.table\
+	bufr/tables/0/wmo/28/codetables/33085.table\
+	bufr/tables/0/wmo/28/codetables/33086.table\
+	bufr/tables/0/wmo/28/codetables/33087.table\
+	bufr/tables/0/wmo/28/codetables/33088.table\
+	bufr/tables/0/wmo/28/codetables/35000.table\
+	bufr/tables/0/wmo/28/codetables/35001.table\
+	bufr/tables/0/wmo/28/codetables/35030.table\
+	bufr/tables/0/wmo/28/codetables/35031.table\
+	bufr/tables/0/wmo/28/codetables/35032.table\
+	bufr/tables/0/wmo/28/codetables/35033.table\
+	bufr/tables/0/wmo/28/codetables/35034.table\
+	bufr/tables/0/wmo/28/codetables/35035.table\
+	bufr/tables/0/wmo/28/codetables/40005.table\
+	bufr/tables/0/wmo/28/codetables/40006.table\
+	bufr/tables/0/wmo/28/codetables/40011.table\
+	bufr/tables/0/wmo/28/codetables/40012.table\
+	bufr/tables/0/wmo/28/codetables/40013.table\
+	bufr/tables/0/wmo/28/codetables/40020.table\
+	bufr/tables/0/wmo/28/codetables/40023.table\
+	bufr/tables/0/wmo/28/codetables/40024.table\
+	bufr/tables/0/wmo/28/codetables/40025.table\
+	bufr/tables/0/wmo/28/codetables/40028.table\
+	bufr/tables/0/wmo/28/codetables/40036.table\
+	bufr/tables/0/wmo/28/codetables/4059.table\
+	bufr/tables/0/wmo/28/codetables/4080.table\
+	bufr/tables/0/wmo/28/codetables/42004.table\
+	bufr/tables/0/wmo/28/codetables/5069.table\
+	bufr/tables/0/wmo/28/codetables/8001.table\
+	bufr/tables/0/wmo/28/codetables/8002.table\
+	bufr/tables/0/wmo/28/codetables/8003.table\
+	bufr/tables/0/wmo/28/codetables/8004.table\
+	bufr/tables/0/wmo/28/codetables/8005.table\
+	bufr/tables/0/wmo/28/codetables/8006.table\
+	bufr/tables/0/wmo/28/codetables/8007.table\
+	bufr/tables/0/wmo/28/codetables/8008.table\
+	bufr/tables/0/wmo/28/codetables/8009.table\
+	bufr/tables/0/wmo/28/codetables/8010.table\
+	bufr/tables/0/wmo/28/codetables/8011.table\
+	bufr/tables/0/wmo/28/codetables/8012.table\
+	bufr/tables/0/wmo/28/codetables/8013.table\
+	bufr/tables/0/wmo/28/codetables/8014.table\
+	bufr/tables/0/wmo/28/codetables/8015.table\
+	bufr/tables/0/wmo/28/codetables/8016.table\
+	bufr/tables/0/wmo/28/codetables/8017.table\
+	bufr/tables/0/wmo/28/codetables/8018.table\
+	bufr/tables/0/wmo/28/codetables/8019.table\
+	bufr/tables/0/wmo/28/codetables/8021.table\
+	bufr/tables/0/wmo/28/codetables/8023.table\
+	bufr/tables/0/wmo/28/codetables/8024.table\
+	bufr/tables/0/wmo/28/codetables/8025.table\
+	bufr/tables/0/wmo/28/codetables/8026.table\
+	bufr/tables/0/wmo/28/codetables/8029.table\
+	bufr/tables/0/wmo/28/codetables/8032.table\
+	bufr/tables/0/wmo/28/codetables/8033.table\
+	bufr/tables/0/wmo/28/codetables/8034.table\
+	bufr/tables/0/wmo/28/codetables/8035.table\
+	bufr/tables/0/wmo/28/codetables/8036.table\
+	bufr/tables/0/wmo/28/codetables/8039.table\
+	bufr/tables/0/wmo/28/codetables/8040.table\
+	bufr/tables/0/wmo/28/codetables/8041.table\
+	bufr/tables/0/wmo/28/codetables/8042.table\
+	bufr/tables/0/wmo/28/codetables/8043.table\
+	bufr/tables/0/wmo/28/codetables/8050.table\
+	bufr/tables/0/wmo/28/codetables/8051.table\
+	bufr/tables/0/wmo/28/codetables/8052.table\
+	bufr/tables/0/wmo/28/codetables/8053.table\
+	bufr/tables/0/wmo/28/codetables/8054.table\
+	bufr/tables/0/wmo/28/codetables/8060.table\
+	bufr/tables/0/wmo/28/codetables/8065.table\
+	bufr/tables/0/wmo/28/codetables/8066.table\
+	bufr/tables/0/wmo/28/codetables/8070.table\
+	bufr/tables/0/wmo/28/codetables/8072.table\
+	bufr/tables/0/wmo/28/codetables/8074.table\
+	bufr/tables/0/wmo/28/codetables/8075.table\
+	bufr/tables/0/wmo/28/codetables/8076.table\
+	bufr/tables/0/wmo/28/codetables/8077.table\
+	bufr/tables/0/wmo/28/codetables/8079.table\
+	bufr/tables/0/wmo/28/codetables/8080.table\
+	bufr/tables/0/wmo/28/codetables/8081.table\
+	bufr/tables/0/wmo/28/codetables/8082.table\
+	bufr/tables/0/wmo/28/codetables/8083.table\
+	bufr/tables/0/wmo/28/codetables/8085.table\
+	bufr/tables/0/wmo/28/codetables/8086.table\
+	bufr/tables/0/wmo/28/codetables/8087.table\
+	bufr/tables/0/wmo/28/codetables/8088.table\
+	bufr/tables/0/wmo/28/codetables/8091.table
+
 definitionsbufr_tables_0_wmo_6dir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/6
 dist_definitionsbufr_tables_0_wmo_6_DATA = \
 	bufr/tables/0/wmo/6/element.table\
@@ -8767,6 +9241,467 @@ dist_definitionsbufr_tables_0_wmo_9_codetables_DATA = \
 	bufr/tables/0/wmo/9/codetables/8083.table\
 	bufr/tables/0/wmo/9/codetables/8085.table
 
+definitionsbufr_tables_0_wmo_latestdir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/latest
+dist_definitionsbufr_tables_0_wmo_latest_DATA = \
+	bufr/tables/0/wmo/latest/element.table\
+	bufr/tables/0/wmo/latest/sequence.def
+
+definitionsbufr_tables_0_wmo_latest_codetablesdir = @ECCODES_DEFINITION_PATH@/bufr/tables/0/wmo/latest/codetables
+dist_definitionsbufr_tables_0_wmo_latest_codetables_DATA = \
+	bufr/tables/0/wmo/latest/codetables/1003.table\
+	bufr/tables/0/wmo/latest/codetables/10063.table\
+	bufr/tables/0/wmo/latest/codetables/10064.table\
+	bufr/tables/0/wmo/latest/codetables/1007.table\
+	bufr/tables/0/wmo/latest/codetables/1024.table\
+	bufr/tables/0/wmo/latest/codetables/1028.table\
+	bufr/tables/0/wmo/latest/codetables/1029.table\
+	bufr/tables/0/wmo/latest/codetables/1033.table\
+	bufr/tables/0/wmo/latest/codetables/1034.table\
+	bufr/tables/0/wmo/latest/codetables/1036.table\
+	bufr/tables/0/wmo/latest/codetables/1038.table\
+	bufr/tables/0/wmo/latest/codetables/1052.table\
+	bufr/tables/0/wmo/latest/codetables/1090.table\
+	bufr/tables/0/wmo/latest/codetables/1092.table\
+	bufr/tables/0/wmo/latest/codetables/1101.table\
+	bufr/tables/0/wmo/latest/codetables/11030.table\
+	bufr/tables/0/wmo/latest/codetables/11031.table\
+	bufr/tables/0/wmo/latest/codetables/11037.table\
+	bufr/tables/0/wmo/latest/codetables/11038.table\
+	bufr/tables/0/wmo/latest/codetables/11039.table\
+	bufr/tables/0/wmo/latest/codetables/1150.table\
+	bufr/tables/0/wmo/latest/codetables/1151.table\
+	bufr/tables/0/wmo/latest/codetables/13038.table\
+	bufr/tables/0/wmo/latest/codetables/13039.table\
+	bufr/tables/0/wmo/latest/codetables/13040.table\
+	bufr/tables/0/wmo/latest/codetables/13041.table\
+	bufr/tables/0/wmo/latest/codetables/13051.table\
+	bufr/tables/0/wmo/latest/codetables/13056.table\
+	bufr/tables/0/wmo/latest/codetables/13057.table\
+	bufr/tables/0/wmo/latest/codetables/15025.table\
+	bufr/tables/0/wmo/latest/codetables/19001.table\
+	bufr/tables/0/wmo/latest/codetables/19008.table\
+	bufr/tables/0/wmo/latest/codetables/19010.table\
+	bufr/tables/0/wmo/latest/codetables/19100.table\
+	bufr/tables/0/wmo/latest/codetables/19101.table\
+	bufr/tables/0/wmo/latest/codetables/19102.table\
+	bufr/tables/0/wmo/latest/codetables/19103.table\
+	bufr/tables/0/wmo/latest/codetables/19104.table\
+	bufr/tables/0/wmo/latest/codetables/19105.table\
+	bufr/tables/0/wmo/latest/codetables/19107.table\
+	bufr/tables/0/wmo/latest/codetables/19108.table\
+	bufr/tables/0/wmo/latest/codetables/19109.table\
+	bufr/tables/0/wmo/latest/codetables/19110.table\
+	bufr/tables/0/wmo/latest/codetables/19113.table\
+	bufr/tables/0/wmo/latest/codetables/19117.table\
+	bufr/tables/0/wmo/latest/codetables/19119.table\
+	bufr/tables/0/wmo/latest/codetables/20003.table\
+	bufr/tables/0/wmo/latest/codetables/20004.table\
+	bufr/tables/0/wmo/latest/codetables/20005.table\
+	bufr/tables/0/wmo/latest/codetables/20006.table\
+	bufr/tables/0/wmo/latest/codetables/20008.table\
+	bufr/tables/0/wmo/latest/codetables/20009.table\
+	bufr/tables/0/wmo/latest/codetables/2001.table\
+	bufr/tables/0/wmo/latest/codetables/20011.table\
+	bufr/tables/0/wmo/latest/codetables/20012.table\
+	bufr/tables/0/wmo/latest/codetables/20017.table\
+	bufr/tables/0/wmo/latest/codetables/20018.table\
+	bufr/tables/0/wmo/latest/codetables/2002.table\
+	bufr/tables/0/wmo/latest/codetables/20021.table\
+	bufr/tables/0/wmo/latest/codetables/20022.table\
+	bufr/tables/0/wmo/latest/codetables/20023.table\
+	bufr/tables/0/wmo/latest/codetables/20024.table\
+	bufr/tables/0/wmo/latest/codetables/20025.table\
+	bufr/tables/0/wmo/latest/codetables/20026.table\
+	bufr/tables/0/wmo/latest/codetables/20027.table\
+	bufr/tables/0/wmo/latest/codetables/20028.table\
+	bufr/tables/0/wmo/latest/codetables/20029.table\
+	bufr/tables/0/wmo/latest/codetables/2003.table\
+	bufr/tables/0/wmo/latest/codetables/20032.table\
+	bufr/tables/0/wmo/latest/codetables/20033.table\
+	bufr/tables/0/wmo/latest/codetables/20034.table\
+	bufr/tables/0/wmo/latest/codetables/20035.table\
+	bufr/tables/0/wmo/latest/codetables/20036.table\
+	bufr/tables/0/wmo/latest/codetables/20037.table\
+	bufr/tables/0/wmo/latest/codetables/2004.table\
+	bufr/tables/0/wmo/latest/codetables/20040.table\
+	bufr/tables/0/wmo/latest/codetables/20041.table\
+	bufr/tables/0/wmo/latest/codetables/20042.table\
+	bufr/tables/0/wmo/latest/codetables/20045.table\
+	bufr/tables/0/wmo/latest/codetables/20048.table\
+	bufr/tables/0/wmo/latest/codetables/20050.table\
+	bufr/tables/0/wmo/latest/codetables/20055.table\
+	bufr/tables/0/wmo/latest/codetables/20056.table\
+	bufr/tables/0/wmo/latest/codetables/20062.table\
+	bufr/tables/0/wmo/latest/codetables/20063.table\
+	bufr/tables/0/wmo/latest/codetables/2007.table\
+	bufr/tables/0/wmo/latest/codetables/20071.table\
+	bufr/tables/0/wmo/latest/codetables/20085.table\
+	bufr/tables/0/wmo/latest/codetables/20086.table\
+	bufr/tables/0/wmo/latest/codetables/20087.table\
+	bufr/tables/0/wmo/latest/codetables/20089.table\
+	bufr/tables/0/wmo/latest/codetables/20090.table\
+	bufr/tables/0/wmo/latest/codetables/20101.table\
+	bufr/tables/0/wmo/latest/codetables/20102.table\
+	bufr/tables/0/wmo/latest/codetables/20103.table\
+	bufr/tables/0/wmo/latest/codetables/20104.table\
+	bufr/tables/0/wmo/latest/codetables/20105.table\
+	bufr/tables/0/wmo/latest/codetables/20106.table\
+	bufr/tables/0/wmo/latest/codetables/20107.table\
+	bufr/tables/0/wmo/latest/codetables/20108.table\
+	bufr/tables/0/wmo/latest/codetables/2011.table\
+	bufr/tables/0/wmo/latest/codetables/20119.table\
+	bufr/tables/0/wmo/latest/codetables/20124.table\
+	bufr/tables/0/wmo/latest/codetables/2013.table\
+	bufr/tables/0/wmo/latest/codetables/20136.table\
+	bufr/tables/0/wmo/latest/codetables/20137.table\
+	bufr/tables/0/wmo/latest/codetables/20138.table\
+	bufr/tables/0/wmo/latest/codetables/2014.table\
+	bufr/tables/0/wmo/latest/codetables/2015.table\
+	bufr/tables/0/wmo/latest/codetables/2016.table\
+	bufr/tables/0/wmo/latest/codetables/2017.table\
+	bufr/tables/0/wmo/latest/codetables/2019.table\
+	bufr/tables/0/wmo/latest/codetables/2020.table\
+	bufr/tables/0/wmo/latest/codetables/2021.table\
+	bufr/tables/0/wmo/latest/codetables/2022.table\
+	bufr/tables/0/wmo/latest/codetables/2023.table\
+	bufr/tables/0/wmo/latest/codetables/2024.table\
+	bufr/tables/0/wmo/latest/codetables/2025.table\
+	bufr/tables/0/wmo/latest/codetables/2030.table\
+	bufr/tables/0/wmo/latest/codetables/2031.table\
+	bufr/tables/0/wmo/latest/codetables/2032.table\
+	bufr/tables/0/wmo/latest/codetables/2033.table\
+	bufr/tables/0/wmo/latest/codetables/2034.table\
+	bufr/tables/0/wmo/latest/codetables/2036.table\
+	bufr/tables/0/wmo/latest/codetables/2037.table\
+	bufr/tables/0/wmo/latest/codetables/2038.table\
+	bufr/tables/0/wmo/latest/codetables/2039.table\
+	bufr/tables/0/wmo/latest/codetables/2040.table\
+	bufr/tables/0/wmo/latest/codetables/2041.table\
+	bufr/tables/0/wmo/latest/codetables/2042.table\
+	bufr/tables/0/wmo/latest/codetables/2044.table\
+	bufr/tables/0/wmo/latest/codetables/2045.table\
+	bufr/tables/0/wmo/latest/codetables/2046.table\
+	bufr/tables/0/wmo/latest/codetables/2047.table\
+	bufr/tables/0/wmo/latest/codetables/2048.table\
+	bufr/tables/0/wmo/latest/codetables/2049.table\
+	bufr/tables/0/wmo/latest/codetables/2050.table\
+	bufr/tables/0/wmo/latest/codetables/2051.table\
+	bufr/tables/0/wmo/latest/codetables/2052.table\
+	bufr/tables/0/wmo/latest/codetables/2053.table\
+	bufr/tables/0/wmo/latest/codetables/2054.table\
+	bufr/tables/0/wmo/latest/codetables/2055.table\
+	bufr/tables/0/wmo/latest/codetables/2056.table\
+	bufr/tables/0/wmo/latest/codetables/2057.table\
+	bufr/tables/0/wmo/latest/codetables/2058.table\
+	bufr/tables/0/wmo/latest/codetables/2059.table\
+	bufr/tables/0/wmo/latest/codetables/2060.table\
+	bufr/tables/0/wmo/latest/codetables/2061.table\
+	bufr/tables/0/wmo/latest/codetables/2062.table\
+	bufr/tables/0/wmo/latest/codetables/2064.table\
+	bufr/tables/0/wmo/latest/codetables/2066.table\
+	bufr/tables/0/wmo/latest/codetables/2070.table\
+	bufr/tables/0/wmo/latest/codetables/2080.table\
+	bufr/tables/0/wmo/latest/codetables/2081.table\
+	bufr/tables/0/wmo/latest/codetables/2083.table\
+	bufr/tables/0/wmo/latest/codetables/2084.table\
+	bufr/tables/0/wmo/latest/codetables/2095.table\
+	bufr/tables/0/wmo/latest/codetables/2096.table\
+	bufr/tables/0/wmo/latest/codetables/2097.table\
+	bufr/tables/0/wmo/latest/codetables/2099.table\
+	bufr/tables/0/wmo/latest/codetables/2101.table\
+	bufr/tables/0/wmo/latest/codetables/2103.table\
+	bufr/tables/0/wmo/latest/codetables/2104.table\
+	bufr/tables/0/wmo/latest/codetables/21066.table\
+	bufr/tables/0/wmo/latest/codetables/21067.table\
+	bufr/tables/0/wmo/latest/codetables/21068.table\
+	bufr/tables/0/wmo/latest/codetables/21069.table\
+	bufr/tables/0/wmo/latest/codetables/21070.table\
+	bufr/tables/0/wmo/latest/codetables/21072.table\
+	bufr/tables/0/wmo/latest/codetables/21073.table\
+	bufr/tables/0/wmo/latest/codetables/21076.table\
+	bufr/tables/0/wmo/latest/codetables/21109.table\
+	bufr/tables/0/wmo/latest/codetables/21115.table\
+	bufr/tables/0/wmo/latest/codetables/21116.table\
+	bufr/tables/0/wmo/latest/codetables/21119.table\
+	bufr/tables/0/wmo/latest/codetables/21144.table\
+	bufr/tables/0/wmo/latest/codetables/21148.table\
+	bufr/tables/0/wmo/latest/codetables/2115.table\
+	bufr/tables/0/wmo/latest/codetables/21150.table\
+	bufr/tables/0/wmo/latest/codetables/21155.table\
+	bufr/tables/0/wmo/latest/codetables/21158.table\
+	bufr/tables/0/wmo/latest/codetables/21159.table\
+	bufr/tables/0/wmo/latest/codetables/21169.table\
+	bufr/tables/0/wmo/latest/codetables/2119.table\
+	bufr/tables/0/wmo/latest/codetables/2131.table\
+	bufr/tables/0/wmo/latest/codetables/2137.table\
+	bufr/tables/0/wmo/latest/codetables/2138.table\
+	bufr/tables/0/wmo/latest/codetables/2139.table\
+	bufr/tables/0/wmo/latest/codetables/2143.table\
+	bufr/tables/0/wmo/latest/codetables/2144.table\
+	bufr/tables/0/wmo/latest/codetables/2145.table\
+	bufr/tables/0/wmo/latest/codetables/2146.table\
+	bufr/tables/0/wmo/latest/codetables/2147.table\
+	bufr/tables/0/wmo/latest/codetables/2148.table\
+	bufr/tables/0/wmo/latest/codetables/2149.table\
+	bufr/tables/0/wmo/latest/codetables/2150.table\
+	bufr/tables/0/wmo/latest/codetables/2151.table\
+	bufr/tables/0/wmo/latest/codetables/2152.table\
+	bufr/tables/0/wmo/latest/codetables/2158.table\
+	bufr/tables/0/wmo/latest/codetables/2159.table\
+	bufr/tables/0/wmo/latest/codetables/2160.table\
+	bufr/tables/0/wmo/latest/codetables/2163.table\
+	bufr/tables/0/wmo/latest/codetables/2164.table\
+	bufr/tables/0/wmo/latest/codetables/2165.table\
+	bufr/tables/0/wmo/latest/codetables/2166.table\
+	bufr/tables/0/wmo/latest/codetables/2167.table\
+	bufr/tables/0/wmo/latest/codetables/2169.table\
+	bufr/tables/0/wmo/latest/codetables/2170.table\
+	bufr/tables/0/wmo/latest/codetables/2172.table\
+	bufr/tables/0/wmo/latest/codetables/2175.table\
+	bufr/tables/0/wmo/latest/codetables/2176.table\
+	bufr/tables/0/wmo/latest/codetables/2177.table\
+	bufr/tables/0/wmo/latest/codetables/2178.table\
+	bufr/tables/0/wmo/latest/codetables/2179.table\
+	bufr/tables/0/wmo/latest/codetables/2180.table\
+	bufr/tables/0/wmo/latest/codetables/2181.table\
+	bufr/tables/0/wmo/latest/codetables/2182.table\
+	bufr/tables/0/wmo/latest/codetables/2183.table\
+	bufr/tables/0/wmo/latest/codetables/2184.table\
+	bufr/tables/0/wmo/latest/codetables/2185.table\
+	bufr/tables/0/wmo/latest/codetables/2186.table\
+	bufr/tables/0/wmo/latest/codetables/2187.table\
+	bufr/tables/0/wmo/latest/codetables/2188.table\
+	bufr/tables/0/wmo/latest/codetables/2189.table\
+	bufr/tables/0/wmo/latest/codetables/2191.table\
+	bufr/tables/0/wmo/latest/codetables/22056.table\
+	bufr/tables/0/wmo/latest/codetables/22060.table\
+	bufr/tables/0/wmo/latest/codetables/22061.table\
+	bufr/tables/0/wmo/latest/codetables/22067.table\
+	bufr/tables/0/wmo/latest/codetables/22068.table\
+	bufr/tables/0/wmo/latest/codetables/22120.table\
+	bufr/tables/0/wmo/latest/codetables/22121.table\
+	bufr/tables/0/wmo/latest/codetables/22122.table\
+	bufr/tables/0/wmo/latest/codetables/22123.table\
+	bufr/tables/0/wmo/latest/codetables/22178.table\
+	bufr/tables/0/wmo/latest/codetables/23001.table\
+	bufr/tables/0/wmo/latest/codetables/23002.table\
+	bufr/tables/0/wmo/latest/codetables/23003.table\
+	bufr/tables/0/wmo/latest/codetables/23004.table\
+	bufr/tables/0/wmo/latest/codetables/23005.table\
+	bufr/tables/0/wmo/latest/codetables/23006.table\
+	bufr/tables/0/wmo/latest/codetables/23007.table\
+	bufr/tables/0/wmo/latest/codetables/23008.table\
+	bufr/tables/0/wmo/latest/codetables/23009.table\
+	bufr/tables/0/wmo/latest/codetables/23016.table\
+	bufr/tables/0/wmo/latest/codetables/23018.table\
+	bufr/tables/0/wmo/latest/codetables/23031.table\
+	bufr/tables/0/wmo/latest/codetables/23032.table\
+	bufr/tables/0/wmo/latest/codetables/24003.table\
+	bufr/tables/0/wmo/latest/codetables/25004.table\
+	bufr/tables/0/wmo/latest/codetables/25005.table\
+	bufr/tables/0/wmo/latest/codetables/25006.table\
+	bufr/tables/0/wmo/latest/codetables/25009.table\
+	bufr/tables/0/wmo/latest/codetables/25010.table\
+	bufr/tables/0/wmo/latest/codetables/25011.table\
+	bufr/tables/0/wmo/latest/codetables/25012.table\
+	bufr/tables/0/wmo/latest/codetables/25013.table\
+	bufr/tables/0/wmo/latest/codetables/25015.table\
+	bufr/tables/0/wmo/latest/codetables/25017.table\
+	bufr/tables/0/wmo/latest/codetables/25020.table\
+	bufr/tables/0/wmo/latest/codetables/25021.table\
+	bufr/tables/0/wmo/latest/codetables/25022.table\
+	bufr/tables/0/wmo/latest/codetables/25023.table\
+	bufr/tables/0/wmo/latest/codetables/25024.table\
+	bufr/tables/0/wmo/latest/codetables/25029.table\
+	bufr/tables/0/wmo/latest/codetables/25030.table\
+	bufr/tables/0/wmo/latest/codetables/25031.table\
+	bufr/tables/0/wmo/latest/codetables/25032.table\
+	bufr/tables/0/wmo/latest/codetables/25033.table\
+	bufr/tables/0/wmo/latest/codetables/25034.table\
+	bufr/tables/0/wmo/latest/codetables/25035.table\
+	bufr/tables/0/wmo/latest/codetables/25036.table\
+	bufr/tables/0/wmo/latest/codetables/25040.table\
+	bufr/tables/0/wmo/latest/codetables/25041.table\
+	bufr/tables/0/wmo/latest/codetables/25042.table\
+	bufr/tables/0/wmo/latest/codetables/25053.table\
+	bufr/tables/0/wmo/latest/codetables/25063.table\
+	bufr/tables/0/wmo/latest/codetables/25069.table\
+	bufr/tables/0/wmo/latest/codetables/25086.table\
+	bufr/tables/0/wmo/latest/codetables/25090.table\
+	bufr/tables/0/wmo/latest/codetables/25093.table\
+	bufr/tables/0/wmo/latest/codetables/25095.table\
+	bufr/tables/0/wmo/latest/codetables/25096.table\
+	bufr/tables/0/wmo/latest/codetables/25097.table\
+	bufr/tables/0/wmo/latest/codetables/25098.table\
+	bufr/tables/0/wmo/latest/codetables/25099.table\
+	bufr/tables/0/wmo/latest/codetables/25110.table\
+	bufr/tables/0/wmo/latest/codetables/25112.table\
+	bufr/tables/0/wmo/latest/codetables/25113.table\
+	bufr/tables/0/wmo/latest/codetables/25120.table\
+	bufr/tables/0/wmo/latest/codetables/25122.table\
+	bufr/tables/0/wmo/latest/codetables/25123.table\
+	bufr/tables/0/wmo/latest/codetables/25124.table\
+	bufr/tables/0/wmo/latest/codetables/25150.table\
+	bufr/tables/0/wmo/latest/codetables/25174.table\
+	bufr/tables/0/wmo/latest/codetables/25181.table\
+	bufr/tables/0/wmo/latest/codetables/25182.table\
+	bufr/tables/0/wmo/latest/codetables/25184.table\
+	bufr/tables/0/wmo/latest/codetables/25185.table\
+	bufr/tables/0/wmo/latest/codetables/25187.table\
+	bufr/tables/0/wmo/latest/codetables/25188.table\
+	bufr/tables/0/wmo/latest/codetables/26010.table\
+	bufr/tables/0/wmo/latest/codetables/29001.table\
+	bufr/tables/0/wmo/latest/codetables/29002.table\
+	bufr/tables/0/wmo/latest/codetables/3001.table\
+	bufr/tables/0/wmo/latest/codetables/3003.table\
+	bufr/tables/0/wmo/latest/codetables/30031.table\
+	bufr/tables/0/wmo/latest/codetables/30032.table\
+	bufr/tables/0/wmo/latest/codetables/3004.table\
+	bufr/tables/0/wmo/latest/codetables/3008.table\
+	bufr/tables/0/wmo/latest/codetables/3010.table\
+	bufr/tables/0/wmo/latest/codetables/3011.table\
+	bufr/tables/0/wmo/latest/codetables/3012.table\
+	bufr/tables/0/wmo/latest/codetables/3016.table\
+	bufr/tables/0/wmo/latest/codetables/3017.table\
+	bufr/tables/0/wmo/latest/codetables/3018.table\
+	bufr/tables/0/wmo/latest/codetables/3019.table\
+	bufr/tables/0/wmo/latest/codetables/3020.table\
+	bufr/tables/0/wmo/latest/codetables/3021.table\
+	bufr/tables/0/wmo/latest/codetables/3022.table\
+	bufr/tables/0/wmo/latest/codetables/3023.table\
+	bufr/tables/0/wmo/latest/codetables/31021.table\
+	bufr/tables/0/wmo/latest/codetables/31031.table\
+	bufr/tables/0/wmo/latest/codetables/33002.table\
+	bufr/tables/0/wmo/latest/codetables/33003.table\
+	bufr/tables/0/wmo/latest/codetables/33005.table\
+	bufr/tables/0/wmo/latest/codetables/33006.table\
+	bufr/tables/0/wmo/latest/codetables/33015.table\
+	bufr/tables/0/wmo/latest/codetables/33020.table\
+	bufr/tables/0/wmo/latest/codetables/33021.table\
+	bufr/tables/0/wmo/latest/codetables/33022.table\
+	bufr/tables/0/wmo/latest/codetables/33023.table\
+	bufr/tables/0/wmo/latest/codetables/33024.table\
+	bufr/tables/0/wmo/latest/codetables/33025.table\
+	bufr/tables/0/wmo/latest/codetables/33026.table\
+	bufr/tables/0/wmo/latest/codetables/33027.table\
+	bufr/tables/0/wmo/latest/codetables/33028.table\
+	bufr/tables/0/wmo/latest/codetables/33030.table\
+	bufr/tables/0/wmo/latest/codetables/33031.table\
+	bufr/tables/0/wmo/latest/codetables/33032.table\
+	bufr/tables/0/wmo/latest/codetables/33033.table\
+	bufr/tables/0/wmo/latest/codetables/33035.table\
+	bufr/tables/0/wmo/latest/codetables/33037.table\
+	bufr/tables/0/wmo/latest/codetables/33038.table\
+	bufr/tables/0/wmo/latest/codetables/33039.table\
+	bufr/tables/0/wmo/latest/codetables/33041.table\
+	bufr/tables/0/wmo/latest/codetables/33042.table\
+	bufr/tables/0/wmo/latest/codetables/33043.table\
+	bufr/tables/0/wmo/latest/codetables/33044.table\
+	bufr/tables/0/wmo/latest/codetables/33047.table\
+	bufr/tables/0/wmo/latest/codetables/33048.table\
+	bufr/tables/0/wmo/latest/codetables/33049.table\
+	bufr/tables/0/wmo/latest/codetables/33050.table\
+	bufr/tables/0/wmo/latest/codetables/33060.table\
+	bufr/tables/0/wmo/latest/codetables/33070.table\
+	bufr/tables/0/wmo/latest/codetables/33071.table\
+	bufr/tables/0/wmo/latest/codetables/33072.table\
+	bufr/tables/0/wmo/latest/codetables/33075.table\
+	bufr/tables/0/wmo/latest/codetables/33076.table\
+	bufr/tables/0/wmo/latest/codetables/33077.table\
+	bufr/tables/0/wmo/latest/codetables/33078.table\
+	bufr/tables/0/wmo/latest/codetables/33079.table\
+	bufr/tables/0/wmo/latest/codetables/33080.table\
+	bufr/tables/0/wmo/latest/codetables/33081.table\
+	bufr/tables/0/wmo/latest/codetables/33082.table\
+	bufr/tables/0/wmo/latest/codetables/33083.table\
+	bufr/tables/0/wmo/latest/codetables/33084.table\
+	bufr/tables/0/wmo/latest/codetables/33085.table\
+	bufr/tables/0/wmo/latest/codetables/33086.table\
+	bufr/tables/0/wmo/latest/codetables/33087.table\
+	bufr/tables/0/wmo/latest/codetables/33088.table\
+	bufr/tables/0/wmo/latest/codetables/35000.table\
+	bufr/tables/0/wmo/latest/codetables/35001.table\
+	bufr/tables/0/wmo/latest/codetables/35030.table\
+	bufr/tables/0/wmo/latest/codetables/35031.table\
+	bufr/tables/0/wmo/latest/codetables/35032.table\
+	bufr/tables/0/wmo/latest/codetables/35033.table\
+	bufr/tables/0/wmo/latest/codetables/35034.table\
+	bufr/tables/0/wmo/latest/codetables/35035.table\
+	bufr/tables/0/wmo/latest/codetables/40005.table\
+	bufr/tables/0/wmo/latest/codetables/40006.table\
+	bufr/tables/0/wmo/latest/codetables/40011.table\
+	bufr/tables/0/wmo/latest/codetables/40012.table\
+	bufr/tables/0/wmo/latest/codetables/40013.table\
+	bufr/tables/0/wmo/latest/codetables/40020.table\
+	bufr/tables/0/wmo/latest/codetables/40023.table\
+	bufr/tables/0/wmo/latest/codetables/40024.table\
+	bufr/tables/0/wmo/latest/codetables/40025.table\
+	bufr/tables/0/wmo/latest/codetables/40028.table\
+	bufr/tables/0/wmo/latest/codetables/40036.table\
+	bufr/tables/0/wmo/latest/codetables/4059.table\
+	bufr/tables/0/wmo/latest/codetables/4080.table\
+	bufr/tables/0/wmo/latest/codetables/42004.table\
+	bufr/tables/0/wmo/latest/codetables/5069.table\
+	bufr/tables/0/wmo/latest/codetables/8001.table\
+	bufr/tables/0/wmo/latest/codetables/8002.table\
+	bufr/tables/0/wmo/latest/codetables/8003.table\
+	bufr/tables/0/wmo/latest/codetables/8004.table\
+	bufr/tables/0/wmo/latest/codetables/8005.table\
+	bufr/tables/0/wmo/latest/codetables/8006.table\
+	bufr/tables/0/wmo/latest/codetables/8007.table\
+	bufr/tables/0/wmo/latest/codetables/8008.table\
+	bufr/tables/0/wmo/latest/codetables/8009.table\
+	bufr/tables/0/wmo/latest/codetables/8010.table\
+	bufr/tables/0/wmo/latest/codetables/8011.table\
+	bufr/tables/0/wmo/latest/codetables/8012.table\
+	bufr/tables/0/wmo/latest/codetables/8013.table\
+	bufr/tables/0/wmo/latest/codetables/8014.table\
+	bufr/tables/0/wmo/latest/codetables/8015.table\
+	bufr/tables/0/wmo/latest/codetables/8016.table\
+	bufr/tables/0/wmo/latest/codetables/8017.table\
+	bufr/tables/0/wmo/latest/codetables/8018.table\
+	bufr/tables/0/wmo/latest/codetables/8019.table\
+	bufr/tables/0/wmo/latest/codetables/8021.table\
+	bufr/tables/0/wmo/latest/codetables/8023.table\
+	bufr/tables/0/wmo/latest/codetables/8024.table\
+	bufr/tables/0/wmo/latest/codetables/8025.table\
+	bufr/tables/0/wmo/latest/codetables/8026.table\
+	bufr/tables/0/wmo/latest/codetables/8029.table\
+	bufr/tables/0/wmo/latest/codetables/8032.table\
+	bufr/tables/0/wmo/latest/codetables/8033.table\
+	bufr/tables/0/wmo/latest/codetables/8034.table\
+	bufr/tables/0/wmo/latest/codetables/8035.table\
+	bufr/tables/0/wmo/latest/codetables/8036.table\
+	bufr/tables/0/wmo/latest/codetables/8039.table\
+	bufr/tables/0/wmo/latest/codetables/8040.table\
+	bufr/tables/0/wmo/latest/codetables/8041.table\
+	bufr/tables/0/wmo/latest/codetables/8042.table\
+	bufr/tables/0/wmo/latest/codetables/8043.table\
+	bufr/tables/0/wmo/latest/codetables/8050.table\
+	bufr/tables/0/wmo/latest/codetables/8051.table\
+	bufr/tables/0/wmo/latest/codetables/8052.table\
+	bufr/tables/0/wmo/latest/codetables/8053.table\
+	bufr/tables/0/wmo/latest/codetables/8054.table\
+	bufr/tables/0/wmo/latest/codetables/8060.table\
+	bufr/tables/0/wmo/latest/codetables/8065.table\
+	bufr/tables/0/wmo/latest/codetables/8066.table\
+	bufr/tables/0/wmo/latest/codetables/8070.table\
+	bufr/tables/0/wmo/latest/codetables/8072.table\
+	bufr/tables/0/wmo/latest/codetables/8074.table\
+	bufr/tables/0/wmo/latest/codetables/8075.table\
+	bufr/tables/0/wmo/latest/codetables/8076.table\
+	bufr/tables/0/wmo/latest/codetables/8077.table\
+	bufr/tables/0/wmo/latest/codetables/8079.table\
+	bufr/tables/0/wmo/latest/codetables/8080.table\
+	bufr/tables/0/wmo/latest/codetables/8081.table\
+	bufr/tables/0/wmo/latest/codetables/8082.table\
+	bufr/tables/0/wmo/latest/codetables/8083.table\
+	bufr/tables/0/wmo/latest/codetables/8085.table\
+	bufr/tables/0/wmo/latest/codetables/8086.table\
+	bufr/tables/0/wmo/latest/codetables/8087.table\
+	bufr/tables/0/wmo/latest/codetables/8088.table\
+	bufr/tables/0/wmo/latest/codetables/8091.table
+
 definitionsbufr_tables_3_local_1_98_0dir = @ECCODES_DEFINITION_PATH@/bufr/tables/3/local/1/98/0
 dist_definitionsbufr_tables_3_local_1_98_0_DATA = \
 	bufr/tables/3/local/1/98/0/element.table\
@@ -9027,6 +9962,7 @@ dist_definitionsgrib1_DATA = \
 	grib1/sensitive_area_domain.def\
 	grib1/shortName.def\
 	grib1/stepType.def\
+	grib1/stepTypeForConversion.def\
 	grib1/tube_domain.def\
 	grib1/typeOfLevel.def\
 	grib1/units.def
@@ -9070,6 +10006,7 @@ dist_definitionsgrib1_localConcepts_ecmf_DATA = \
 	grib1/localConcepts/ecmf/paramId.def\
 	grib1/localConcepts/ecmf/shortName.def\
 	grib1/localConcepts/ecmf/stepType.def\
+	grib1/localConcepts/ecmf/stepTypeForConversion.def\
 	grib1/localConcepts/ecmf/typeOfLevel.def\
 	grib1/localConcepts/ecmf/units.def
 
@@ -9209,6 +10146,7 @@ dist_definitionsgrib2_DATA = \
 	grib2/local.98.36.def\
 	grib2/local.98.38.def\
 	grib2/local.98.39.def\
+	grib2/local.98.5.def\
 	grib2/local.98.500.def\
 	grib2/local.98.7.def\
 	grib2/local.98.9.def\
@@ -9445,6 +10383,7 @@ dist_definitionsgrib2_localConcepts_ecmf_DATA = \
 
 definitionsgrib2_localConcepts_edzwdir = @ECCODES_DEFINITION_PATH@/grib2/localConcepts/edzw
 dist_definitionsgrib2_localConcepts_edzw_DATA = \
+	grib2/localConcepts/edzw/default_step_units.def\
 	grib2/localConcepts/edzw/modelName.def\
 	grib2/localConcepts/edzw/name.def\
 	grib2/localConcepts/edzw/paramId.def\
@@ -10868,6 +11807,138 @@ dist_definitionsgrib2_tables_18_DATA = \
 	grib2/tables/18/6.0.table\
 	grib2/tables/18/stepType.table
 
+definitionsgrib2_tables_19dir = @ECCODES_DEFINITION_PATH@/grib2/tables/19
+dist_definitionsgrib2_tables_19_DATA = \
+	grib2/tables/19/0.0.table\
+	grib2/tables/19/1.0.table\
+	grib2/tables/19/1.1.table\
+	grib2/tables/19/1.2.table\
+	grib2/tables/19/1.3.table\
+	grib2/tables/19/1.4.table\
+	grib2/tables/19/1.5.table\
+	grib2/tables/19/1.6.table\
+	grib2/tables/19/3.0.table\
+	grib2/tables/19/3.1.table\
+	grib2/tables/19/3.10.table\
+	grib2/tables/19/3.11.table\
+	grib2/tables/19/3.15.table\
+	grib2/tables/19/3.2.table\
+	grib2/tables/19/3.20.table\
+	grib2/tables/19/3.21.table\
+	grib2/tables/19/3.3.table\
+	grib2/tables/19/3.4.table\
+	grib2/tables/19/3.5.table\
+	grib2/tables/19/3.6.table\
+	grib2/tables/19/3.7.table\
+	grib2/tables/19/3.8.table\
+	grib2/tables/19/3.9.table\
+	grib2/tables/19/4.0.table\
+	grib2/tables/19/4.1.0.table\
+	grib2/tables/19/4.1.1.table\
+	grib2/tables/19/4.1.10.table\
+	grib2/tables/19/4.1.192.table\
+	grib2/tables/19/4.1.2.table\
+	grib2/tables/19/4.1.3.table\
+	grib2/tables/19/4.10.table\
+	grib2/tables/19/4.11.table\
+	grib2/tables/19/4.12.table\
+	grib2/tables/19/4.13.table\
+	grib2/tables/19/4.14.table\
+	grib2/tables/19/4.15.table\
+	grib2/tables/19/4.192.table\
+	grib2/tables/19/4.2.0.0.table\
+	grib2/tables/19/4.2.0.1.table\
+	grib2/tables/19/4.2.0.13.table\
+	grib2/tables/19/4.2.0.14.table\
+	grib2/tables/19/4.2.0.15.table\
+	grib2/tables/19/4.2.0.16.table\
+	grib2/tables/19/4.2.0.17.table\
+	grib2/tables/19/4.2.0.18.table\
+	grib2/tables/19/4.2.0.19.table\
+	grib2/tables/19/4.2.0.190.table\
+	grib2/tables/19/4.2.0.191.table\
+	grib2/tables/19/4.2.0.2.table\
+	grib2/tables/19/4.2.0.20.table\
+	grib2/tables/19/4.2.0.3.table\
+	grib2/tables/19/4.2.0.4.table\
+	grib2/tables/19/4.2.0.5.table\
+	grib2/tables/19/4.2.0.6.table\
+	grib2/tables/19/4.2.0.7.table\
+	grib2/tables/19/4.2.1.0.table\
+	grib2/tables/19/4.2.1.1.table\
+	grib2/tables/19/4.2.1.2.table\
+	grib2/tables/19/4.2.10.0.table\
+	grib2/tables/19/4.2.10.1.table\
+	grib2/tables/19/4.2.10.191.table\
+	grib2/tables/19/4.2.10.2.table\
+	grib2/tables/19/4.2.10.3.table\
+	grib2/tables/19/4.2.10.4.table\
+	grib2/tables/19/4.2.2.0.table\
+	grib2/tables/19/4.2.2.3.table\
+	grib2/tables/19/4.2.2.4.table\
+	grib2/tables/19/4.2.2.5.table\
+	grib2/tables/19/4.2.3.0.table\
+	grib2/tables/19/4.2.3.1.table\
+	grib2/tables/19/4.2.3.2.table\
+	grib2/tables/19/4.2.3.3.table\
+	grib2/tables/19/4.2.3.4.table\
+	grib2/tables/19/4.2.3.5.table\
+	grib2/tables/19/4.2.3.6.table\
+	grib2/tables/19/4.201.table\
+	grib2/tables/19/4.202.table\
+	grib2/tables/19/4.203.table\
+	grib2/tables/19/4.204.table\
+	grib2/tables/19/4.205.table\
+	grib2/tables/19/4.206.table\
+	grib2/tables/19/4.207.table\
+	grib2/tables/19/4.208.table\
+	grib2/tables/19/4.209.table\
+	grib2/tables/19/4.210.table\
+	grib2/tables/19/4.211.table\
+	grib2/tables/19/4.212.table\
+	grib2/tables/19/4.213.table\
+	grib2/tables/19/4.215.table\
+	grib2/tables/19/4.216.table\
+	grib2/tables/19/4.217.table\
+	grib2/tables/19/4.218.table\
+	grib2/tables/19/4.219.table\
+	grib2/tables/19/4.220.table\
+	grib2/tables/19/4.221.table\
+	grib2/tables/19/4.222.table\
+	grib2/tables/19/4.223.table\
+	grib2/tables/19/4.224.table\
+	grib2/tables/19/4.225.table\
+	grib2/tables/19/4.227.table\
+	grib2/tables/19/4.230.table\
+	grib2/tables/19/4.233.table\
+	grib2/tables/19/4.234.table\
+	grib2/tables/19/4.236.table\
+	grib2/tables/19/4.240.table\
+	grib2/tables/19/4.241.table\
+	grib2/tables/19/4.242.table\
+	grib2/tables/19/4.243.table\
+	grib2/tables/19/4.3.table\
+	grib2/tables/19/4.4.table\
+	grib2/tables/19/4.5.table\
+	grib2/tables/19/4.6.table\
+	grib2/tables/19/4.7.table\
+	grib2/tables/19/4.8.table\
+	grib2/tables/19/4.9.table\
+	grib2/tables/19/4.91.table\
+	grib2/tables/19/5.0.table\
+	grib2/tables/19/5.1.table\
+	grib2/tables/19/5.2.table\
+	grib2/tables/19/5.3.table\
+	grib2/tables/19/5.4.table\
+	grib2/tables/19/5.40.table\
+	grib2/tables/19/5.40000.table\
+	grib2/tables/19/5.5.table\
+	grib2/tables/19/5.50002.table\
+	grib2/tables/19/5.6.table\
+	grib2/tables/19/5.7.table\
+	grib2/tables/19/6.0.table\
+	grib2/tables/19/stepType.table
+
 definitionsgrib2_tables_2dir = @ECCODES_DEFINITION_PATH@/grib2/tables/2
 dist_definitionsgrib2_tables_2_DATA = \
 	grib2/tables/2/0.0.table\
@@ -13341,6 +14412,10 @@ definitionsgrib2_tables_local_ecmf_4dir = @ECCODES_DEFINITION_PATH@/grib2/tables
 dist_definitionsgrib2_tables_local_ecmf_4_DATA = \
 	grib2/tables/local/ecmf/4/1.2.table
 
+definitionsgrib2_tables_local_kwbc_1dir = @ECCODES_DEFINITION_PATH@/grib2/tables/local/kwbc/1
+dist_definitionsgrib2_tables_local_kwbc_1_DATA = \
+	grib2/tables/local/kwbc/1/4.5.table
+
 definitionsgtsdir = @ECCODES_DEFINITION_PATH@/gts
 dist_definitionsgts_DATA = \
 	gts/boot.def
diff --git a/definitions/bufr/tables/0/local/1/254/0/element.table b/definitions/bufr/tables/0/local/1/254/0/element.table
new file mode 100644
index 0000000..9f546a6
--- /dev/null
+++ b/definitions/bufr/tables/0/local/1/254/0/element.table
@@ -0,0 +1,6 @@
+#code|abbreviation|type|name|unit|scale|reference|width|crex_unit|crex_scale|crex_width
+025200|bandSpecificOceanQualityFlag|flag|BAND SPECIFIC OCEAN QUALITY FLAG|Flag table|0|0|9|Flag table|0|3
+025201|altimeterEchoProcessingMode|table|Altimeter Echo Processing Mode|Code Table|0|0|8|Code Table|0|3
+025202|altimeterTrackingMode|table|Altimeter Tracking Mode|Code Table|0|0|8|Code Table|0|3
+025203|seaIceFreeboard|double|Sea Ice Freeboard|m|3|-131072|18|m|3|6
+010200|meanDynamicTopographyAccuracy|double|MEAN DYNAMIC TOPOGRAPHY ACCURACY|m|3|-131072|18|m|3|6
diff --git a/definitions/bufr/tables/0/local/4/98/0/codetables/25192.table b/definitions/bufr/tables/0/local/4/98/0/codetables/25192.table
new file mode 100644
index 0000000..5c51db0
--- /dev/null
+++ b/definitions/bufr/tables/0/local/4/98/0/codetables/25192.table
@@ -0,0 +1,3 @@
+0 0 MEAN SEA LEVEL PRESSURE
+1 1 STATION PRESSURE
+3 3 MISSING VALUE
diff --git a/definitions/bufr/tables/0/local/4/98/0/element.table b/definitions/bufr/tables/0/local/4/98/0/element.table
new file mode 100755
index 0000000..7f0bf4f
--- /dev/null
+++ b/definitions/bufr/tables/0/local/4/98/0/element.table
@@ -0,0 +1,8 @@
+#code|abbreviation|type|name|unit|scale|reference|width|crex_unit|crex_scale|crex_width
+010200|meanDynamicTopographyAccuracy|double|MEAN DYNAMIC TOPOGRAPHY ACCURACY|m|3|-131072|18|m|3|6
+025192|pressureCode|table|Pressure Code|CODE TABLE|0|0|2|
+025200|bandSpecificOceanQualityFlag|flag|BAND SPECIFIC OCEAN QUALITY FLAG|Flag table|0|0|9|Flag table|0|3
+025201|altimeterEchoProcessingMode|table|Altimeter Echo Processing Mode|Code Table|0|0|8|Code Table|0|3
+025202|altimeterTrackingMode|table|Altimeter Tracking Mode|Code Table|0|0|8|Code Table|0|3
+025203|seaIceFreeboard|double|Sea Ice Freeboard|m|3|-131072|18|m|3|6
+033192|psBiasCorrection|double|Surface Pressure Bias Correction|Numeric|2|-300000|19
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/1003.table b/definitions/bufr/tables/0/wmo/28/codetables/1003.table
new file mode 100644
index 0000000..a0c90ee
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/10063.table b/definitions/bufr/tables/0/wmo/28/codetables/10063.table
new file mode 100644
index 0000000..5097874
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/10064.table b/definitions/bufr/tables/0/wmo/28/codetables/10064.table
new file mode 100644
index 0000000..88ba38a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1007.table
similarity index 99%
copy from definitions/bufr/tables/0/wmo/latest/codetables/1007.table
copy to definitions/bufr/tables/0/wmo/28/codetables/1007.table
index 7b15c1d..7910980 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/1007.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/1007.table
@@ -106,6 +106,7 @@
 341 341 RESURS 01-4
 410 410 KALPANA-1
 421 421 OCEANSAT-2
+422 422 SCATSAT-1
 430 430 INSAT 1B
 431 431 INSAT 1C
 432 432 INSAT 1D
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/1024.table b/definitions/bufr/tables/0/wmo/28/codetables/1024.table
new file mode 100644
index 0000000..cdc9e24
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1028.table b/definitions/bufr/tables/0/wmo/28/codetables/1028.table
new file mode 100644
index 0000000..18f8206
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1029.table b/definitions/bufr/tables/0/wmo/28/codetables/1029.table
new file mode 100644
index 0000000..d63d07e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1033.table b/definitions/bufr/tables/0/wmo/28/codetables/1033.table
new file mode 100644
index 0000000..6006582
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1034.table
similarity index 97%
copy from definitions/bufr/tables/0/wmo/latest/codetables/1034.table
copy to definitions/bufr/tables/0/wmo/28/codetables/1034.table
index fface93..98ea28c 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/1034.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/1034.table
@@ -20,7 +20,7 @@
 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)
+24 24 GEODETIC OBSERVATORY PECNY (CZECHIA)
 25 25 INSTITUT D'ESTUDIS ESPACIALS DE CATALUNYA (SPAIN)
 26 26 FEDERAL OFFICE OF TOPOGRAPHY (SWITZERLAND)
 27 27 NORDIC COMMISSION OF GEODESY (NORWAY)
@@ -49,6 +49,7 @@
 102 102 NATIONAL RESEARCH COUNCIL/INSTITUTE OF ATMOSPHERIC SCIENCES AND CLIMATE (CNR-ISAC)
 110 110 NOWCAST MOBILE (LIGHTNING DATA)
 120 120 EWA BEACH, HAWAII
+125 125 FORD ISLAND, HAWAII
 130 130 MIAMI, FLORIDA
 140 140 LANNION (FRANCE)
 150 150 SVALBARD (NORWAY)
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/1036.table b/definitions/bufr/tables/0/wmo/28/codetables/1036.table
new file mode 100644
index 0000000..e7e4045
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1038.table b/definitions/bufr/tables/0/wmo/28/codetables/1038.table
new file mode 100644
index 0000000..2eee38b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1052.table b/definitions/bufr/tables/0/wmo/28/codetables/1052.table
new file mode 100644
index 0000000..b8e14ed
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1090.table b/definitions/bufr/tables/0/wmo/28/codetables/1090.table
new file mode 100644
index 0000000..55f7ca2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1092.table b/definitions/bufr/tables/0/wmo/28/codetables/1092.table
new file mode 100644
index 0000000..dc9bf1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1101.table
similarity index 99%
copy from definitions/bufr/tables/0/wmo/latest/codetables/1101.table
copy to definitions/bufr/tables/0/wmo/28/codetables/1101.table
index 21e0cf5..f798e14 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/1101.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/1101.table
@@ -159,7 +159,7 @@
 607 607 BULGARIA
 608 608 CROATIA
 609 609 CYPRUS
-610 610 CZECH REPUBLIC
+610 610 CZECHIA
 611 611 DENMARK
 612 612 ESTONIA
 613 613 FINLAND
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/11030.table b/definitions/bufr/tables/0/wmo/28/codetables/11030.table
new file mode 100644
index 0000000..253b8fc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/11031.table b/definitions/bufr/tables/0/wmo/28/codetables/11031.table
new file mode 100644
index 0000000..7bece1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/11037.table b/definitions/bufr/tables/0/wmo/28/codetables/11037.table
new file mode 100644
index 0000000..e25c9da
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/11038.table b/definitions/bufr/tables/0/wmo/28/codetables/11038.table
new file mode 100644
index 0000000..68876b0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/11039.table b/definitions/bufr/tables/0/wmo/28/codetables/11039.table
new file mode 100644
index 0000000..e5af0f2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/1150.table b/definitions/bufr/tables/0/wmo/28/codetables/1150.table
new file mode 100644
index 0000000..20043c9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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 AND THE INTERNATIONAL REFERENCE POLE AS THE PRIME MERIDIAN AND PRIME POLE, RESPECTIVELY, AND THE ORIGIN OF THE INTERNATIONAL TERRESTRIAL REFERENCE SYSTEM (ITRS). INTERNATIONAL REFERENCE MERIDIAN, INTERNATIONAL REFERENCE POLE AND ITRS ARE MAINTAINED BY THE INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
+65535 65535 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/1151.table b/definitions/bufr/tables/0/wmo/28/codetables/1151.table
new file mode 100644
index 0000000..8907f23
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/13038.table b/definitions/bufr/tables/0/wmo/28/codetables/13038.table
new file mode 100644
index 0000000..19bc422
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/13039.table b/definitions/bufr/tables/0/wmo/28/codetables/13039.table
new file mode 100644
index 0000000..c070b1d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/13040.table b/definitions/bufr/tables/0/wmo/28/codetables/13040.table
new file mode 100644
index 0000000..30c08bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/13041.table b/definitions/bufr/tables/0/wmo/28/codetables/13041.table
new file mode 100644
index 0000000..9e77b64
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/13051.table b/definitions/bufr/tables/0/wmo/28/codetables/13051.table
new file mode 100644
index 0000000..4bdb73e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/13056.table b/definitions/bufr/tables/0/wmo/28/codetables/13056.table
new file mode 100644
index 0000000..448c269
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/13057.table b/definitions/bufr/tables/0/wmo/28/codetables/13057.table
new file mode 100644
index 0000000..6dfa18d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/15025.table b/definitions/bufr/tables/0/wmo/28/codetables/15025.table
new file mode 100644
index 0000000..6bb6ed5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19001.table b/definitions/bufr/tables/0/wmo/28/codetables/19001.table
new file mode 100644
index 0000000..af893eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19008.table b/definitions/bufr/tables/0/wmo/28/codetables/19008.table
new file mode 100644
index 0000000..3bcb519
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19010.table b/definitions/bufr/tables/0/wmo/28/codetables/19010.table
new file mode 100644
index 0000000..b091d96
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19100.table b/definitions/bufr/tables/0/wmo/28/codetables/19100.table
new file mode 100644
index 0000000..1f03a6f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19101.table b/definitions/bufr/tables/0/wmo/28/codetables/19101.table
new file mode 100644
index 0000000..0cd1ff4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19102.table b/definitions/bufr/tables/0/wmo/28/codetables/19102.table
new file mode 100644
index 0000000..21ab775
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19103.table b/definitions/bufr/tables/0/wmo/28/codetables/19103.table
new file mode 100644
index 0000000..3abb184
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19104.table b/definitions/bufr/tables/0/wmo/28/codetables/19104.table
new file mode 100644
index 0000000..67ae474
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19105.table b/definitions/bufr/tables/0/wmo/28/codetables/19105.table
new file mode 100644
index 0000000..becfcee
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19107.table b/definitions/bufr/tables/0/wmo/28/codetables/19107.table
new file mode 100644
index 0000000..ed6b79c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19108.table b/definitions/bufr/tables/0/wmo/28/codetables/19108.table
new file mode 100644
index 0000000..9350bc2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19109.table b/definitions/bufr/tables/0/wmo/28/codetables/19109.table
new file mode 100644
index 0000000..e3c9c05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19110.table b/definitions/bufr/tables/0/wmo/28/codetables/19110.table
new file mode 100644
index 0000000..81f4f59
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19113.table b/definitions/bufr/tables/0/wmo/28/codetables/19113.table
new file mode 100644
index 0000000..ba46dca
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19117.table b/definitions/bufr/tables/0/wmo/28/codetables/19117.table
new file mode 100644
index 0000000..b623197
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/19119.table b/definitions/bufr/tables/0/wmo/28/codetables/19119.table
new file mode 100644
index 0000000..8329a8a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20003.table b/definitions/bufr/tables/0/wmo/28/codetables/20003.table
new file mode 100644
index 0000000..0ebc7c7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20004.table b/definitions/bufr/tables/0/wmo/28/codetables/20004.table
new file mode 100644
index 0000000..6d6e7da
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20005.table b/definitions/bufr/tables/0/wmo/28/codetables/20005.table
new file mode 100644
index 0000000..6d6e7da
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20006.table b/definitions/bufr/tables/0/wmo/28/codetables/20006.table
new file mode 100644
index 0000000..cc26121
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20008.table b/definitions/bufr/tables/0/wmo/28/codetables/20008.table
new file mode 100644
index 0000000..966bcc2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20009.table b/definitions/bufr/tables/0/wmo/28/codetables/20009.table
new file mode 100644
index 0000000..f0119eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2001.table b/definitions/bufr/tables/0/wmo/28/codetables/2001.table
new file mode 100644
index 0000000..470fccc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20011.table b/definitions/bufr/tables/0/wmo/28/codetables/20011.table
new file mode 100644
index 0000000..06c6e10
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20012.table b/definitions/bufr/tables/0/wmo/28/codetables/20012.table
new file mode 100644
index 0000000..99bdc17
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20017.table b/definitions/bufr/tables/0/wmo/28/codetables/20017.table
new file mode 100644
index 0000000..5ec10bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20018.table b/definitions/bufr/tables/0/wmo/28/codetables/20018.table
new file mode 100644
index 0000000..c0ffc36
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2002.table b/definitions/bufr/tables/0/wmo/28/codetables/2002.table
new file mode 100644
index 0000000..a701e1e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20021.table b/definitions/bufr/tables/0/wmo/28/codetables/20021.table
new file mode 100644
index 0000000..747a759
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20022.table b/definitions/bufr/tables/0/wmo/28/codetables/20022.table
new file mode 100644
index 0000000..a551aac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20023.table b/definitions/bufr/tables/0/wmo/28/codetables/20023.table
new file mode 100644
index 0000000..97670df
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20024.table b/definitions/bufr/tables/0/wmo/28/codetables/20024.table
new file mode 100644
index 0000000..13aba87
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20025.table b/definitions/bufr/tables/0/wmo/28/codetables/20025.table
new file mode 100644
index 0000000..4d70e33
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20026.table b/definitions/bufr/tables/0/wmo/28/codetables/20026.table
new file mode 100644
index 0000000..2852094
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20027.table b/definitions/bufr/tables/0/wmo/28/codetables/20027.table
new file mode 100644
index 0000000..c337f16
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20028.table b/definitions/bufr/tables/0/wmo/28/codetables/20028.table
new file mode 100644
index 0000000..6b701a2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20029.table b/definitions/bufr/tables/0/wmo/28/codetables/20029.table
new file mode 100644
index 0000000..8b46da8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2003.table
similarity index 96%
copy from definitions/bufr/tables/0/wmo/latest/codetables/2003.table
copy to definitions/bufr/tables/0/wmo/28/codetables/2003.table
index e0aa923..f364d18 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/2003.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/2003.table
@@ -8,5 +8,6 @@
 7 7 SATELLITE NAVIGATION
 8 8 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
 9 9 SODAR
+10 10 LIDAR
 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/28/codetables/20032.table b/definitions/bufr/tables/0/wmo/28/codetables/20032.table
new file mode 100644
index 0000000..fd37c1e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20033.table b/definitions/bufr/tables/0/wmo/28/codetables/20033.table
new file mode 100644
index 0000000..8178733
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20034.table b/definitions/bufr/tables/0/wmo/28/codetables/20034.table
new file mode 100644
index 0000000..668e916
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20035.table b/definitions/bufr/tables/0/wmo/28/codetables/20035.table
new file mode 100644
index 0000000..07a4a02
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20036.table b/definitions/bufr/tables/0/wmo/28/codetables/20036.table
new file mode 100644
index 0000000..b4cc874
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20037.table b/definitions/bufr/tables/0/wmo/28/codetables/20037.table
new file mode 100644
index 0000000..474eeaa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2004.table b/definitions/bufr/tables/0/wmo/28/codetables/2004.table
new file mode 100644
index 0000000..a55de6c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20040.table b/definitions/bufr/tables/0/wmo/28/codetables/20040.table
new file mode 100644
index 0000000..889393b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20041.table b/definitions/bufr/tables/0/wmo/28/codetables/20041.table
new file mode 100644
index 0000000..fc57120
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20042.table b/definitions/bufr/tables/0/wmo/28/codetables/20042.table
new file mode 100644
index 0000000..2493af7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20045.table b/definitions/bufr/tables/0/wmo/28/codetables/20045.table
new file mode 100644
index 0000000..91ae63f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20048.table b/definitions/bufr/tables/0/wmo/28/codetables/20048.table
new file mode 100644
index 0000000..4a54882
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20050.table b/definitions/bufr/tables/0/wmo/28/codetables/20050.table
new file mode 100644
index 0000000..3f8654e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20055.table b/definitions/bufr/tables/0/wmo/28/codetables/20055.table
new file mode 100644
index 0000000..ea06427
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20056.table b/definitions/bufr/tables/0/wmo/28/codetables/20056.table
new file mode 100644
index 0000000..d493792
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20062.table b/definitions/bufr/tables/0/wmo/28/codetables/20062.table
new file mode 100644
index 0000000..24d96c4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20063.table b/definitions/bufr/tables/0/wmo/28/codetables/20063.table
new file mode 100644
index 0000000..90ce1c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2007.table b/definitions/bufr/tables/0/wmo/28/codetables/2007.table
new file mode 100644
index 0000000..05b4c6b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20071.table b/definitions/bufr/tables/0/wmo/28/codetables/20071.table
new file mode 100644
index 0000000..72367bf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20085.table b/definitions/bufr/tables/0/wmo/28/codetables/20085.table
new file mode 100644
index 0000000..f929e87
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20086.table b/definitions/bufr/tables/0/wmo/28/codetables/20086.table
new file mode 100644
index 0000000..b543330
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20087.table b/definitions/bufr/tables/0/wmo/28/codetables/20087.table
new file mode 100644
index 0000000..ee7971a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20089.table b/definitions/bufr/tables/0/wmo/28/codetables/20089.table
new file mode 100644
index 0000000..f616c62
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20090.table b/definitions/bufr/tables/0/wmo/28/codetables/20090.table
new file mode 100644
index 0000000..d13502e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20101.table b/definitions/bufr/tables/0/wmo/28/codetables/20101.table
new file mode 100644
index 0000000..abe89f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20102.table b/definitions/bufr/tables/0/wmo/28/codetables/20102.table
new file mode 100644
index 0000000..6a53039
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20103.table b/definitions/bufr/tables/0/wmo/28/codetables/20103.table
new file mode 100644
index 0000000..9c4f689
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20104.table b/definitions/bufr/tables/0/wmo/28/codetables/20104.table
new file mode 100644
index 0000000..15ca8ac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20105.table b/definitions/bufr/tables/0/wmo/28/codetables/20105.table
new file mode 100644
index 0000000..b7406c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20106.table b/definitions/bufr/tables/0/wmo/28/codetables/20106.table
new file mode 100644
index 0000000..2a8c4a0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20107.table b/definitions/bufr/tables/0/wmo/28/codetables/20107.table
new file mode 100644
index 0000000..0bea30a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20108.table b/definitions/bufr/tables/0/wmo/28/codetables/20108.table
new file mode 100644
index 0000000..4404614
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2011.table b/definitions/bufr/tables/0/wmo/28/codetables/2011.table
new file mode 100644
index 0000000..7eeb67d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20119.table b/definitions/bufr/tables/0/wmo/28/codetables/20119.table
new file mode 100644
index 0000000..4a4b40f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20124.table b/definitions/bufr/tables/0/wmo/28/codetables/20124.table
new file mode 100644
index 0000000..f78eacb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2013.table b/definitions/bufr/tables/0/wmo/28/codetables/2013.table
new file mode 100644
index 0000000..91ce650
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20136.table b/definitions/bufr/tables/0/wmo/28/codetables/20136.table
new file mode 100644
index 0000000..0369f5d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20137.table b/definitions/bufr/tables/0/wmo/28/codetables/20137.table
new file mode 100644
index 0000000..adda880
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/20138.table b/definitions/bufr/tables/0/wmo/28/codetables/20138.table
new file mode 100644
index 0000000..ed9b315
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2014.table b/definitions/bufr/tables/0/wmo/28/codetables/2014.table
new file mode 100644
index 0000000..bc5c5fc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2015.table b/definitions/bufr/tables/0/wmo/28/codetables/2015.table
new file mode 100644
index 0000000..7b0ccaf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2016.table b/definitions/bufr/tables/0/wmo/28/codetables/2016.table
new file mode 100644
index 0000000..4a30226
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2017.table b/definitions/bufr/tables/0/wmo/28/codetables/2017.table
new file mode 100644
index 0000000..7fac2e1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2019.table
similarity index 99%
copy from definitions/bufr/tables/0/wmo/latest/codetables/2019.table
copy to definitions/bufr/tables/0/wmo/28/codetables/2019.table
index 8e7586d..11ab065 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/2019.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/2019.table
@@ -211,6 +211,7 @@
 607 607 HIRS/4
 615 615 IMAGER
 616 616 VIIRS
+617 617 GLM
 620 620 CRIRS/NP
 621 621 ATMS
 622 622 MSS
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/2020.table b/definitions/bufr/tables/0/wmo/28/codetables/2020.table
new file mode 100644
index 0000000..fc19e6d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2021.table b/definitions/bufr/tables/0/wmo/28/codetables/2021.table
new file mode 100644
index 0000000..b95fdc9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2022.table b/definitions/bufr/tables/0/wmo/28/codetables/2022.table
new file mode 100644
index 0000000..5068e7f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2023.table b/definitions/bufr/tables/0/wmo/28/codetables/2023.table
new file mode 100644
index 0000000..be7eb84
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2024.table b/definitions/bufr/tables/0/wmo/28/codetables/2024.table
new file mode 100644
index 0000000..00ec80e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2025.table b/definitions/bufr/tables/0/wmo/28/codetables/2025.table
new file mode 100644
index 0000000..64dc018
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2030.table b/definitions/bufr/tables/0/wmo/28/codetables/2030.table
new file mode 100644
index 0000000..2777bbc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2031.table b/definitions/bufr/tables/0/wmo/28/codetables/2031.table
new file mode 100644
index 0000000..a96b857
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2032.table b/definitions/bufr/tables/0/wmo/28/codetables/2032.table
new file mode 100644
index 0000000..7e9310d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2033.table b/definitions/bufr/tables/0/wmo/28/codetables/2033.table
new file mode 100644
index 0000000..8215be0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2034.table b/definitions/bufr/tables/0/wmo/28/codetables/2034.table
new file mode 100644
index 0000000..06cdd52
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2036.table b/definitions/bufr/tables/0/wmo/28/codetables/2036.table
new file mode 100644
index 0000000..7782d30
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2037.table b/definitions/bufr/tables/0/wmo/28/codetables/2037.table
new file mode 100644
index 0000000..729c40e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2038.table b/definitions/bufr/tables/0/wmo/28/codetables/2038.table
new file mode 100644
index 0000000..458f141
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2039.table b/definitions/bufr/tables/0/wmo/28/codetables/2039.table
new file mode 100644
index 0000000..0a94982
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2040.table b/definitions/bufr/tables/0/wmo/28/codetables/2040.table
new file mode 100644
index 0000000..78b2917
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2041.table b/definitions/bufr/tables/0/wmo/28/codetables/2041.table
new file mode 100644
index 0000000..ef5bf86
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2042.table b/definitions/bufr/tables/0/wmo/28/codetables/2042.table
new file mode 100644
index 0000000..eb2445b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2044.table b/definitions/bufr/tables/0/wmo/28/codetables/2044.table
new file mode 100644
index 0000000..0e10ed8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2045.table b/definitions/bufr/tables/0/wmo/28/codetables/2045.table
new file mode 100644
index 0000000..374e4f2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2046.table b/definitions/bufr/tables/0/wmo/28/codetables/2046.table
new file mode 100644
index 0000000..57fb9d6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2047.table b/definitions/bufr/tables/0/wmo/28/codetables/2047.table
new file mode 100644
index 0000000..8213931
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2048.table b/definitions/bufr/tables/0/wmo/28/codetables/2048.table
new file mode 100644
index 0000000..d7cb2ef
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2049.table b/definitions/bufr/tables/0/wmo/28/codetables/2049.table
new file mode 100644
index 0000000..ade5cac
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2050.table b/definitions/bufr/tables/0/wmo/28/codetables/2050.table
new file mode 100644
index 0000000..fbcce61
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2051.table b/definitions/bufr/tables/0/wmo/28/codetables/2051.table
new file mode 100644
index 0000000..3524ae7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2052.table b/definitions/bufr/tables/0/wmo/28/codetables/2052.table
new file mode 100644
index 0000000..8b6262c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2053.table b/definitions/bufr/tables/0/wmo/28/codetables/2053.table
new file mode 100644
index 0000000..03e5e29
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2054.table b/definitions/bufr/tables/0/wmo/28/codetables/2054.table
new file mode 100644
index 0000000..0995688
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2055.table b/definitions/bufr/tables/0/wmo/28/codetables/2055.table
new file mode 100644
index 0000000..ce06f00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2056.table b/definitions/bufr/tables/0/wmo/28/codetables/2056.table
new file mode 100644
index 0000000..86eb983
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2057.table b/definitions/bufr/tables/0/wmo/28/codetables/2057.table
new file mode 100644
index 0000000..681e6bd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2058.table b/definitions/bufr/tables/0/wmo/28/codetables/2058.table
new file mode 100644
index 0000000..6c45eda
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2059.table b/definitions/bufr/tables/0/wmo/28/codetables/2059.table
new file mode 100644
index 0000000..8f089d3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2060.table b/definitions/bufr/tables/0/wmo/28/codetables/2060.table
new file mode 100644
index 0000000..6f84698
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2061.table b/definitions/bufr/tables/0/wmo/28/codetables/2061.table
new file mode 100644
index 0000000..592d51e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2062.table b/definitions/bufr/tables/0/wmo/28/codetables/2062.table
new file mode 100644
index 0000000..2d0f4e2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2064.table b/definitions/bufr/tables/0/wmo/28/codetables/2064.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2066.table b/definitions/bufr/tables/0/wmo/28/codetables/2066.table
new file mode 100644
index 0000000..a3865dc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2070.table b/definitions/bufr/tables/0/wmo/28/codetables/2070.table
new file mode 100644
index 0000000..5a098ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2080.table b/definitions/bufr/tables/0/wmo/28/codetables/2080.table
new file mode 100644
index 0000000..c68a39d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2081.table b/definitions/bufr/tables/0/wmo/28/codetables/2081.table
new file mode 100644
index 0000000..dfe9551
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2083.table b/definitions/bufr/tables/0/wmo/28/codetables/2083.table
new file mode 100644
index 0000000..611c5bf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2084.table b/definitions/bufr/tables/0/wmo/28/codetables/2084.table
new file mode 100644
index 0000000..be6430a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2095.table b/definitions/bufr/tables/0/wmo/28/codetables/2095.table
new file mode 100644
index 0000000..580fe93
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2096.table b/definitions/bufr/tables/0/wmo/28/codetables/2096.table
new file mode 100644
index 0000000..9f1b102
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2097.table
similarity index 93%
copy from definitions/bufr/tables/0/wmo/latest/codetables/2097.table
copy to definitions/bufr/tables/0/wmo/28/codetables/2097.table
index 3f6b471..309ef64 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/2097.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/2097.table
@@ -10,7 +10,7 @@
 9 9 CARBON HYGRISTOR
 10 10 PSYCHROMETER
 11 11 CAPACITIVE (POLYMER)
-12 12 CAPACITIVE (CERAMIC, INCL. METAL OXIDE)
+12 12 CAPACITIVE (CERAMIC, INCLUDING METAL OXIDE)
 13 13 RESISTIVE (GENERIC)
 14 14 RESISTIVE (SALT POLYMER)
 15 15 RESISTIVE (CONDUCTIVE POLYMER)
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/2099.table b/definitions/bufr/tables/0/wmo/28/codetables/2099.table
new file mode 100644
index 0000000..74cb817
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2101.table b/definitions/bufr/tables/0/wmo/28/codetables/2101.table
new file mode 100644
index 0000000..efdb3ec
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2103.table b/definitions/bufr/tables/0/wmo/28/codetables/2103.table
new file mode 100644
index 0000000..417d2c9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/2103.table
@@ -0,0 +1 @@
+1 1 RADAR ANTENNA IS PROTECTED BY A RADOME
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/2104.table b/definitions/bufr/tables/0/wmo/28/codetables/2104.table
new file mode 100644
index 0000000..e39a153
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21066.table b/definitions/bufr/tables/0/wmo/28/codetables/21066.table
new file mode 100644
index 0000000..9bcafea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21067.table b/definitions/bufr/tables/0/wmo/28/codetables/21067.table
new file mode 100644
index 0000000..a0ed399
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21068.table b/definitions/bufr/tables/0/wmo/28/codetables/21068.table
new file mode 100644
index 0000000..102171f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21069.table b/definitions/bufr/tables/0/wmo/28/codetables/21069.table
new file mode 100644
index 0000000..320890a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21070.table b/definitions/bufr/tables/0/wmo/28/codetables/21070.table
new file mode 100644
index 0000000..669655f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21072.table b/definitions/bufr/tables/0/wmo/28/codetables/21072.table
new file mode 100644
index 0000000..99e4b1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21073.table b/definitions/bufr/tables/0/wmo/28/codetables/21073.table
new file mode 100644
index 0000000..9538fa5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21076.table b/definitions/bufr/tables/0/wmo/28/codetables/21076.table
new file mode 100644
index 0000000..bc52ac5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21109.table b/definitions/bufr/tables/0/wmo/28/codetables/21109.table
new file mode 100644
index 0000000..deb577a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21115.table b/definitions/bufr/tables/0/wmo/28/codetables/21115.table
new file mode 100644
index 0000000..9e90133
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21116.table b/definitions/bufr/tables/0/wmo/28/codetables/21116.table
new file mode 100644
index 0000000..10b5c53
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21119.table b/definitions/bufr/tables/0/wmo/28/codetables/21119.table
new file mode 100644
index 0000000..e17e3c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21144.table b/definitions/bufr/tables/0/wmo/28/codetables/21144.table
new file mode 100644
index 0000000..1f082e6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/21144.table
@@ -0,0 +1 @@
+1 1 RAIN
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/21148.table b/definitions/bufr/tables/0/wmo/28/codetables/21148.table
new file mode 100644
index 0000000..11413ed
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2115.table b/definitions/bufr/tables/0/wmo/28/codetables/2115.table
new file mode 100644
index 0000000..c7e866c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21150.table b/definitions/bufr/tables/0/wmo/28/codetables/21150.table
new file mode 100644
index 0000000..8510046
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21155.table b/definitions/bufr/tables/0/wmo/28/codetables/21155.table
new file mode 100644
index 0000000..a7837cf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21158.table b/definitions/bufr/tables/0/wmo/28/codetables/21158.table
new file mode 100644
index 0000000..dd53c51
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21159.table b/definitions/bufr/tables/0/wmo/28/codetables/21159.table
new file mode 100644
index 0000000..1703f9b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/21169.table b/definitions/bufr/tables/0/wmo/28/codetables/21169.table
new file mode 100644
index 0000000..9b93444
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2119.table b/definitions/bufr/tables/0/wmo/28/codetables/2119.table
new file mode 100644
index 0000000..0640af6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2131.table b/definitions/bufr/tables/0/wmo/28/codetables/2131.table
new file mode 100644
index 0000000..f4336ef
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/2131.table
@@ -0,0 +1 @@
+1 1 STC OPERATIONAL
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/2137.table b/definitions/bufr/tables/0/wmo/28/codetables/2137.table
new file mode 100644
index 0000000..40d33fd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2138.table b/definitions/bufr/tables/0/wmo/28/codetables/2138.table
new file mode 100644
index 0000000..a574506
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2139.table b/definitions/bufr/tables/0/wmo/28/codetables/2139.table
new file mode 100644
index 0000000..f6cf802
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2143.table b/definitions/bufr/tables/0/wmo/28/codetables/2143.table
new file mode 100644
index 0000000..975d068
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2144.table b/definitions/bufr/tables/0/wmo/28/codetables/2144.table
new file mode 100644
index 0000000..5b0f37b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2145.table b/definitions/bufr/tables/0/wmo/28/codetables/2145.table
new file mode 100644
index 0000000..1944e69
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2146.table b/definitions/bufr/tables/0/wmo/28/codetables/2146.table
new file mode 100644
index 0000000..871b357
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2147.table b/definitions/bufr/tables/0/wmo/28/codetables/2147.table
new file mode 100644
index 0000000..4ff1c92
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2148.table b/definitions/bufr/tables/0/wmo/28/codetables/2148.table
new file mode 100644
index 0000000..7d8ca51
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2149.table b/definitions/bufr/tables/0/wmo/28/codetables/2149.table
new file mode 100644
index 0000000..04638d2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2150.table b/definitions/bufr/tables/0/wmo/28/codetables/2150.table
new file mode 100644
index 0000000..8193b57
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2151.table b/definitions/bufr/tables/0/wmo/28/codetables/2151.table
new file mode 100644
index 0000000..45c80df
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2152.table b/definitions/bufr/tables/0/wmo/28/codetables/2152.table
new file mode 100644
index 0000000..880c384
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2158.table b/definitions/bufr/tables/0/wmo/28/codetables/2158.table
new file mode 100644
index 0000000..97c4449
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2159.table b/definitions/bufr/tables/0/wmo/28/codetables/2159.table
new file mode 100644
index 0000000..63cb87c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2160.table b/definitions/bufr/tables/0/wmo/28/codetables/2160.table
new file mode 100644
index 0000000..fd7f372
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2163.table b/definitions/bufr/tables/0/wmo/28/codetables/2163.table
new file mode 100644
index 0000000..8cac631
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2164.table b/definitions/bufr/tables/0/wmo/28/codetables/2164.table
new file mode 100644
index 0000000..01dc970
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2165.table b/definitions/bufr/tables/0/wmo/28/codetables/2165.table
new file mode 100644
index 0000000..628be0e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2166.table b/definitions/bufr/tables/0/wmo/28/codetables/2166.table
new file mode 100644
index 0000000..efac38f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2167.table b/definitions/bufr/tables/0/wmo/28/codetables/2167.table
new file mode 100644
index 0000000..acb2f9d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2169.table b/definitions/bufr/tables/0/wmo/28/codetables/2169.table
new file mode 100644
index 0000000..bd31667
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2170.table b/definitions/bufr/tables/0/wmo/28/codetables/2170.table
new file mode 100644
index 0000000..05bab00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2172.table b/definitions/bufr/tables/0/wmo/28/codetables/2172.table
new file mode 100644
index 0000000..3c3641a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2175.table b/definitions/bufr/tables/0/wmo/28/codetables/2175.table
new file mode 100644
index 0000000..2cf2a3d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2176.table b/definitions/bufr/tables/0/wmo/28/codetables/2176.table
new file mode 100644
index 0000000..2c27a6f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2177.table b/definitions/bufr/tables/0/wmo/28/codetables/2177.table
new file mode 100644
index 0000000..e7bb67a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2178.table b/definitions/bufr/tables/0/wmo/28/codetables/2178.table
new file mode 100644
index 0000000..f4f8b59
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2179.table b/definitions/bufr/tables/0/wmo/28/codetables/2179.table
new file mode 100644
index 0000000..9e9ba18
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2180.table b/definitions/bufr/tables/0/wmo/28/codetables/2180.table
new file mode 100644
index 0000000..0b21b2c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2181.table b/definitions/bufr/tables/0/wmo/28/codetables/2181.table
new file mode 100644
index 0000000..5096dc4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2182.table b/definitions/bufr/tables/0/wmo/28/codetables/2182.table
new file mode 100644
index 0000000..4ffab26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2183.table b/definitions/bufr/tables/0/wmo/28/codetables/2183.table
new file mode 100644
index 0000000..a804ea1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2184.table b/definitions/bufr/tables/0/wmo/28/codetables/2184.table
new file mode 100644
index 0000000..cf5ee84
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2185.table b/definitions/bufr/tables/0/wmo/28/codetables/2185.table
new file mode 100644
index 0000000..45b0810
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2186.table b/definitions/bufr/tables/0/wmo/28/codetables/2186.table
new file mode 100644
index 0000000..05e1a36
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2187.table b/definitions/bufr/tables/0/wmo/28/codetables/2187.table
new file mode 100644
index 0000000..def3d2f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2188.table b/definitions/bufr/tables/0/wmo/28/codetables/2188.table
new file mode 100644
index 0000000..bb8114c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2189.table b/definitions/bufr/tables/0/wmo/28/codetables/2189.table
new file mode 100644
index 0000000..61ac9e3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/2191.table b/definitions/bufr/tables/0/wmo/28/codetables/2191.table
new file mode 100644
index 0000000..2e96256
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22056.table b/definitions/bufr/tables/0/wmo/28/codetables/22056.table
new file mode 100644
index 0000000..28ddbf4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22060.table b/definitions/bufr/tables/0/wmo/28/codetables/22060.table
new file mode 100644
index 0000000..b73ad32
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22061.table b/definitions/bufr/tables/0/wmo/28/codetables/22061.table
new file mode 100644
index 0000000..aa8c62b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22067.table b/definitions/bufr/tables/0/wmo/28/codetables/22067.table
new file mode 100644
index 0000000..621b7a4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22068.table b/definitions/bufr/tables/0/wmo/28/codetables/22068.table
new file mode 100644
index 0000000..f6ddeb2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22120.table b/definitions/bufr/tables/0/wmo/28/codetables/22120.table
new file mode 100644
index 0000000..8c747ce
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22121.table b/definitions/bufr/tables/0/wmo/28/codetables/22121.table
new file mode 100644
index 0000000..7d4dfa8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22122.table b/definitions/bufr/tables/0/wmo/28/codetables/22122.table
new file mode 100644
index 0000000..aa9d5eb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22123.table b/definitions/bufr/tables/0/wmo/28/codetables/22123.table
new file mode 100644
index 0000000..acfb616
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/22178.table b/definitions/bufr/tables/0/wmo/28/codetables/22178.table
new file mode 100644
index 0000000..355848c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23001.table b/definitions/bufr/tables/0/wmo/28/codetables/23001.table
new file mode 100644
index 0000000..92ac5de
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23002.table b/definitions/bufr/tables/0/wmo/28/codetables/23002.table
new file mode 100644
index 0000000..12815c6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23003.table b/definitions/bufr/tables/0/wmo/28/codetables/23003.table
new file mode 100644
index 0000000..e3e891f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23004.table b/definitions/bufr/tables/0/wmo/28/codetables/23004.table
new file mode 100644
index 0000000..383731c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23005.table b/definitions/bufr/tables/0/wmo/28/codetables/23005.table
new file mode 100644
index 0000000..c5ff5ae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23006.table b/definitions/bufr/tables/0/wmo/28/codetables/23006.table
new file mode 100644
index 0000000..fe7706a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23007.table b/definitions/bufr/tables/0/wmo/28/codetables/23007.table
new file mode 100644
index 0000000..59fc043
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23008.table b/definitions/bufr/tables/0/wmo/28/codetables/23008.table
new file mode 100644
index 0000000..4ac5c58
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23009.table b/definitions/bufr/tables/0/wmo/28/codetables/23009.table
new file mode 100644
index 0000000..4ac5c58
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23016.table b/definitions/bufr/tables/0/wmo/28/codetables/23016.table
new file mode 100644
index 0000000..ae84bae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23018.table b/definitions/bufr/tables/0/wmo/28/codetables/23018.table
new file mode 100644
index 0000000..ccdcc45
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23031.table b/definitions/bufr/tables/0/wmo/28/codetables/23031.table
new file mode 100644
index 0000000..cf20e26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/23032.table b/definitions/bufr/tables/0/wmo/28/codetables/23032.table
new file mode 100644
index 0000000..0f439b7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/24003.table b/definitions/bufr/tables/0/wmo/28/codetables/24003.table
new file mode 100644
index 0000000..2daa810
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25004.table b/definitions/bufr/tables/0/wmo/28/codetables/25004.table
new file mode 100644
index 0000000..dfe4517
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25005.table b/definitions/bufr/tables/0/wmo/28/codetables/25005.table
new file mode 100644
index 0000000..bc693a7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25006.table b/definitions/bufr/tables/0/wmo/28/codetables/25006.table
new file mode 100644
index 0000000..bf9d1f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25009.table b/definitions/bufr/tables/0/wmo/28/codetables/25009.table
new file mode 100644
index 0000000..bf34fb2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25010.table b/definitions/bufr/tables/0/wmo/28/codetables/25010.table
new file mode 100644
index 0000000..e88b3ca
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25011.table b/definitions/bufr/tables/0/wmo/28/codetables/25011.table
new file mode 100644
index 0000000..f739498
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25012.table b/definitions/bufr/tables/0/wmo/28/codetables/25012.table
new file mode 100644
index 0000000..c869a4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25013.table b/definitions/bufr/tables/0/wmo/28/codetables/25013.table
new file mode 100644
index 0000000..b91ea71
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/25013.table
@@ -0,0 +1 @@
+1 1 BRIGHT-BAND CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/25015.table b/definitions/bufr/tables/0/wmo/28/codetables/25015.table
new file mode 100644
index 0000000..043e587
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/25015.table
@@ -0,0 +1 @@
+1 1 RADOME ATTENUATION CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/25017.table b/definitions/bufr/tables/0/wmo/28/codetables/25017.table
new file mode 100644
index 0000000..ed48487
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/25017.table
@@ -0,0 +1 @@
+1 1 PRECIPITATION ATTENUATION CORRECTION
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/25020.table b/definitions/bufr/tables/0/wmo/28/codetables/25020.table
new file mode 100644
index 0000000..6133da3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25021.table b/definitions/bufr/tables/0/wmo/28/codetables/25021.table
new file mode 100644
index 0000000..314716b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25022.table b/definitions/bufr/tables/0/wmo/28/codetables/25022.table
new file mode 100644
index 0000000..9584878
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25023.table b/definitions/bufr/tables/0/wmo/28/codetables/25023.table
new file mode 100644
index 0000000..e4840dc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25024.table b/definitions/bufr/tables/0/wmo/28/codetables/25024.table
new file mode 100644
index 0000000..81b2638
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25029.table b/definitions/bufr/tables/0/wmo/28/codetables/25029.table
new file mode 100644
index 0000000..fb00d01
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25030.table b/definitions/bufr/tables/0/wmo/28/codetables/25030.table
new file mode 100644
index 0000000..c3235d6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25031.table b/definitions/bufr/tables/0/wmo/28/codetables/25031.table
new file mode 100644
index 0000000..16ff950
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25032.table b/definitions/bufr/tables/0/wmo/28/codetables/25032.table
new file mode 100644
index 0000000..9b894f4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25033.table b/definitions/bufr/tables/0/wmo/28/codetables/25033.table
new file mode 100644
index 0000000..e7141c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25034.table b/definitions/bufr/tables/0/wmo/28/codetables/25034.table
new file mode 100644
index 0000000..473338a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25035.table b/definitions/bufr/tables/0/wmo/28/codetables/25035.table
new file mode 100644
index 0000000..a0c8faa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25036.table b/definitions/bufr/tables/0/wmo/28/codetables/25036.table
new file mode 100644
index 0000000..79ebd88
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25040.table b/definitions/bufr/tables/0/wmo/28/codetables/25040.table
new file mode 100644
index 0000000..3ddf12e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25041.table b/definitions/bufr/tables/0/wmo/28/codetables/25041.table
new file mode 100644
index 0000000..f388da0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25042.table b/definitions/bufr/tables/0/wmo/28/codetables/25042.table
new file mode 100644
index 0000000..f3cf059
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25053.table b/definitions/bufr/tables/0/wmo/28/codetables/25053.table
new file mode 100644
index 0000000..af34138
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25063.table b/definitions/bufr/tables/0/wmo/28/codetables/25063.table
new file mode 100644
index 0000000..a8970ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25069.table b/definitions/bufr/tables/0/wmo/28/codetables/25069.table
new file mode 100644
index 0000000..e627613
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25086.table b/definitions/bufr/tables/0/wmo/28/codetables/25086.table
new file mode 100644
index 0000000..294fa69
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25090.table b/definitions/bufr/tables/0/wmo/28/codetables/25090.table
new file mode 100644
index 0000000..309fefc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25093.table b/definitions/bufr/tables/0/wmo/28/codetables/25093.table
new file mode 100644
index 0000000..e547e6c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25095.table b/definitions/bufr/tables/0/wmo/28/codetables/25095.table
new file mode 100644
index 0000000..c446a50
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/25095.table
@@ -0,0 +1 @@
+1 1 ALTIMETER OPERATING (0 IF NOMINAL, 1 IF BACKUP)
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/25096.table b/definitions/bufr/tables/0/wmo/28/codetables/25096.table
new file mode 100644
index 0000000..89dcc39
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25097.table b/definitions/bufr/tables/0/wmo/28/codetables/25097.table
new file mode 100644
index 0000000..d4e1e46
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25098.table b/definitions/bufr/tables/0/wmo/28/codetables/25098.table
new file mode 100644
index 0000000..9d505a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25099.table b/definitions/bufr/tables/0/wmo/28/codetables/25099.table
new file mode 100644
index 0000000..40f35b1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25110.table b/definitions/bufr/tables/0/wmo/28/codetables/25110.table
new file mode 100644
index 0000000..912e01f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25112.table b/definitions/bufr/tables/0/wmo/28/codetables/25112.table
new file mode 100644
index 0000000..a2a4ec9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25113.table b/definitions/bufr/tables/0/wmo/28/codetables/25113.table
new file mode 100644
index 0000000..ef394b6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25120.table b/definitions/bufr/tables/0/wmo/28/codetables/25120.table
new file mode 100644
index 0000000..bdb9f96
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25122.table b/definitions/bufr/tables/0/wmo/28/codetables/25122.table
new file mode 100644
index 0000000..1085ef9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25123.table b/definitions/bufr/tables/0/wmo/28/codetables/25123.table
new file mode 100644
index 0000000..70f0670
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25124.table b/definitions/bufr/tables/0/wmo/28/codetables/25124.table
new file mode 100644
index 0000000..dce5b04
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25150.table b/definitions/bufr/tables/0/wmo/28/codetables/25150.table
new file mode 100644
index 0000000..7b452c3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25174.table b/definitions/bufr/tables/0/wmo/28/codetables/25174.table
new file mode 100644
index 0000000..c8a11b6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25181.table b/definitions/bufr/tables/0/wmo/28/codetables/25181.table
new file mode 100644
index 0000000..2c1eabf
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25182.table b/definitions/bufr/tables/0/wmo/28/codetables/25182.table
new file mode 100644
index 0000000..9827b1d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25184.table b/definitions/bufr/tables/0/wmo/28/codetables/25184.table
new file mode 100644
index 0000000..29005c1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25185.table b/definitions/bufr/tables/0/wmo/28/codetables/25185.table
new file mode 100644
index 0000000..ac18aba
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/25185.table
@@ -0,0 +1,2 @@
+0 0 AES 256
+255 255 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/25187.table b/definitions/bufr/tables/0/wmo/28/codetables/25187.table
new file mode 100644
index 0000000..683c097
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/25188.table
similarity index 52%
copy from definitions/bufr/tables/0/wmo/latest/codetables/25188.table
copy to definitions/bufr/tables/0/wmo/28/codetables/25188.table
index 75641e0..b18013f 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/25188.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/25188.table
@@ -1,5 +1,5 @@
-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
+0 0 PRESSURE ADJUSTED TO MEAN SEA LEVEL FOLLOWING WMO-NO. 8 FOR LOW LEVEL (< 50 M) STATIONS
+1 1 PRESSURE ADJUSTED TO MEAN SEA LEVEL FOLLOWING WMO-NO. 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
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/26010.table b/definitions/bufr/tables/0/wmo/28/codetables/26010.table
new file mode 100644
index 0000000..f825040
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/29001.table b/definitions/bufr/tables/0/wmo/28/codetables/29001.table
new file mode 100644
index 0000000..1481243
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/29002.table b/definitions/bufr/tables/0/wmo/28/codetables/29002.table
new file mode 100644
index 0000000..1d7efd0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3001.table b/definitions/bufr/tables/0/wmo/28/codetables/3001.table
new file mode 100644
index 0000000..cfa2c1a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3003.table b/definitions/bufr/tables/0/wmo/28/codetables/3003.table
new file mode 100644
index 0000000..cf53023
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/30031.table b/definitions/bufr/tables/0/wmo/28/codetables/30031.table
new file mode 100644
index 0000000..80cce26
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/30032.table b/definitions/bufr/tables/0/wmo/28/codetables/30032.table
new file mode 100644
index 0000000..942cb5d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3004.table
similarity index 91%
copy from definitions/bufr/tables/0/wmo/latest/codetables/3004.table
copy to definitions/bufr/tables/0/wmo/28/codetables/3004.table
index c3604a4..571e234 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/3004.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/3004.table
@@ -5,7 +5,7 @@
 4 4 RECTANGULAR SECTION SHIELD
 5 5 SQUARE SECTION SHIELD
 6 6 TRIANGULAR SECTION SHIELD
-7 7 OPEN COVERED LEAN TO
+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/28/codetables/3008.table b/definitions/bufr/tables/0/wmo/28/codetables/3008.table
new file mode 100644
index 0000000..e321d55
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3010.table b/definitions/bufr/tables/0/wmo/28/codetables/3010.table
new file mode 100644
index 0000000..75746a1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3011.table b/definitions/bufr/tables/0/wmo/28/codetables/3011.table
new file mode 100644
index 0000000..7488268
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3012.table b/definitions/bufr/tables/0/wmo/28/codetables/3012.table
new file mode 100644
index 0000000..35bdead
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3016.table b/definitions/bufr/tables/0/wmo/28/codetables/3016.table
new file mode 100644
index 0000000..792788f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3017.table b/definitions/bufr/tables/0/wmo/28/codetables/3017.table
new file mode 100644
index 0000000..e94c0a4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3018.table
similarity index 94%
copy from definitions/bufr/tables/0/wmo/latest/codetables/3018.table
copy to definitions/bufr/tables/0/wmo/28/codetables/3018.table
index 79e0375..b3769ae 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/3018.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/3018.table
@@ -13,7 +13,7 @@
 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
+21 21 BRIDGE ACROSS A VALLEY IN AN 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
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/3019.table b/definitions/bufr/tables/0/wmo/28/codetables/3019.table
new file mode 100644
index 0000000..2f55b00
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3020.table b/definitions/bufr/tables/0/wmo/28/codetables/3020.table
new file mode 100644
index 0000000..9f0feae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3021.table b/definitions/bufr/tables/0/wmo/28/codetables/3021.table
new file mode 100644
index 0000000..27e1bfa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/3022.table
similarity index 50%
copy from definitions/bufr/tables/0/wmo/latest/codetables/3022.table
copy to definitions/bufr/tables/0/wmo/28/codetables/3022.table
index 7ecac34..daf67e2 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/3022.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/3022.table
@@ -1,4 +1,4 @@
-0 0 NATIONAL HYDRO METEOROLOGICAL/WEATHER SERVICE
+0 0 NATIONAL HYDROMETEOROLOGICAL/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/28/codetables/3023.table
similarity index 71%
copy from definitions/bufr/tables/0/wmo/latest/codetables/3023.table
copy to definitions/bufr/tables/0/wmo/28/codetables/3023.table
index 8376a8d..9e683c8 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/3023.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/3023.table
@@ -1,6 +1,6 @@
-0 0 SINGLE V SECTION LOUVERS
+0 0 SINGLE V-SECTION LOUVERS
 1 1 OVERLAPPING LOUVERS
-2 2 DOUBLE V SECTION LOUVERS
+2 2 DOUBLE V-SECTION LOUVERS
 3 3 NON-OVERLAPPING LOUVERS
 4 4 VENTED, NON-LOUVERED
 5 5 NOT APPLICABLE
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/31021.table b/definitions/bufr/tables/0/wmo/28/codetables/31021.table
new file mode 100644
index 0000000..fb70e1c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/31031.table b/definitions/bufr/tables/0/wmo/28/codetables/31031.table
new file mode 100644
index 0000000..1f27429
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/31031.table
@@ -0,0 +1 @@
+1 1 
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/33002.table b/definitions/bufr/tables/0/wmo/28/codetables/33002.table
new file mode 100644
index 0000000..4177c05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33003.table b/definitions/bufr/tables/0/wmo/28/codetables/33003.table
new file mode 100644
index 0000000..7577129
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33005.table b/definitions/bufr/tables/0/wmo/28/codetables/33005.table
new file mode 100644
index 0000000..8d7569a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33006.table b/definitions/bufr/tables/0/wmo/28/codetables/33006.table
new file mode 100644
index 0000000..0ea44a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33015.table b/definitions/bufr/tables/0/wmo/28/codetables/33015.table
new file mode 100644
index 0000000..f585808
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33020.table b/definitions/bufr/tables/0/wmo/28/codetables/33020.table
new file mode 100644
index 0000000..ba7a4d4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33021.table b/definitions/bufr/tables/0/wmo/28/codetables/33021.table
new file mode 100644
index 0000000..e3e67ae
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33022.table b/definitions/bufr/tables/0/wmo/28/codetables/33022.table
new file mode 100644
index 0000000..50ef65f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33023.table b/definitions/bufr/tables/0/wmo/28/codetables/33023.table
new file mode 100644
index 0000000..896c816
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33024.table b/definitions/bufr/tables/0/wmo/28/codetables/33024.table
new file mode 100644
index 0000000..771e04b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33025.table b/definitions/bufr/tables/0/wmo/28/codetables/33025.table
new file mode 100644
index 0000000..4da695a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33026.table b/definitions/bufr/tables/0/wmo/28/codetables/33026.table
new file mode 100644
index 0000000..08c6125
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33027.table
similarity index 89%
copy from definitions/bufr/tables/0/wmo/latest/codetables/33027.table
copy to definitions/bufr/tables/0/wmo/28/codetables/33027.table
index 8997392..c563af4 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/33027.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/33027.table
@@ -2,5 +2,5 @@
 1 1 500 M =< RADIUS <1500 M
 2 2 250 M =< RADIUS < 500 M
 3 3 RADIUS < 250 M
-4 4 <= 100 M
+4 4 =< 100 M
 7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/33028.table b/definitions/bufr/tables/0/wmo/28/codetables/33028.table
new file mode 100644
index 0000000..84bd666
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33030.table b/definitions/bufr/tables/0/wmo/28/codetables/33030.table
new file mode 100644
index 0000000..c9e36c0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33031.table b/definitions/bufr/tables/0/wmo/28/codetables/33031.table
new file mode 100644
index 0000000..c11fd4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33032.table b/definitions/bufr/tables/0/wmo/28/codetables/33032.table
new file mode 100644
index 0000000..33307f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33033.table b/definitions/bufr/tables/0/wmo/28/codetables/33033.table
new file mode 100644
index 0000000..6fd3205
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33035.table b/definitions/bufr/tables/0/wmo/28/codetables/33035.table
new file mode 100644
index 0000000..01996ba
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33037.table b/definitions/bufr/tables/0/wmo/28/codetables/33037.table
new file mode 100644
index 0000000..9f26652
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33038.table b/definitions/bufr/tables/0/wmo/28/codetables/33038.table
new file mode 100644
index 0000000..3dc1192
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33039.table b/definitions/bufr/tables/0/wmo/28/codetables/33039.table
new file mode 100644
index 0000000..50ff126
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33041.table b/definitions/bufr/tables/0/wmo/28/codetables/33041.table
new file mode 100644
index 0000000..8bbdba9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33042.table b/definitions/bufr/tables/0/wmo/28/codetables/33042.table
new file mode 100644
index 0000000..b75447a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33043.table b/definitions/bufr/tables/0/wmo/28/codetables/33043.table
new file mode 100644
index 0000000..398d9ab
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33044.table b/definitions/bufr/tables/0/wmo/28/codetables/33044.table
new file mode 100644
index 0000000..01746c7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33047.table b/definitions/bufr/tables/0/wmo/28/codetables/33047.table
new file mode 100644
index 0000000..f69b56e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33048.table b/definitions/bufr/tables/0/wmo/28/codetables/33048.table
new file mode 100644
index 0000000..312ba40
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33049.table b/definitions/bufr/tables/0/wmo/28/codetables/33049.table
new file mode 100644
index 0000000..bdde061
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33050.table b/definitions/bufr/tables/0/wmo/28/codetables/33050.table
new file mode 100644
index 0000000..ee7bb6d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33060.table b/definitions/bufr/tables/0/wmo/28/codetables/33060.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33070.table b/definitions/bufr/tables/0/wmo/28/codetables/33070.table
new file mode 100644
index 0000000..8a0467b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33071.table b/definitions/bufr/tables/0/wmo/28/codetables/33071.table
new file mode 100644
index 0000000..8c9d4de
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33072.table b/definitions/bufr/tables/0/wmo/28/codetables/33072.table
new file mode 100644
index 0000000..fcc7f09
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33075.table b/definitions/bufr/tables/0/wmo/28/codetables/33075.table
new file mode 100644
index 0000000..23edae6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33076.table b/definitions/bufr/tables/0/wmo/28/codetables/33076.table
new file mode 100644
index 0000000..7100c4a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33077.table b/definitions/bufr/tables/0/wmo/28/codetables/33077.table
new file mode 100644
index 0000000..742c83c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33078.table b/definitions/bufr/tables/0/wmo/28/codetables/33078.table
new file mode 100644
index 0000000..f3a2180
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33079.table b/definitions/bufr/tables/0/wmo/28/codetables/33079.table
new file mode 100644
index 0000000..0875143
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33080.table b/definitions/bufr/tables/0/wmo/28/codetables/33080.table
new file mode 100644
index 0000000..a39dd47
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33081.table b/definitions/bufr/tables/0/wmo/28/codetables/33081.table
new file mode 100644
index 0000000..f8759e0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33082.table b/definitions/bufr/tables/0/wmo/28/codetables/33082.table
new file mode 100644
index 0000000..4671574
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33083.table b/definitions/bufr/tables/0/wmo/28/codetables/33083.table
new file mode 100644
index 0000000..6fe63f6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33084.table b/definitions/bufr/tables/0/wmo/28/codetables/33084.table
new file mode 100644
index 0000000..accb209
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33085.table
similarity index 91%
copy from definitions/bufr/tables/0/wmo/latest/codetables/33085.table
copy to definitions/bufr/tables/0/wmo/28/codetables/33085.table
index 7962ec5..0872a2b 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/33085.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/33085.table
@@ -2,7 +2,7 @@
 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
+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
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/33086.table b/definitions/bufr/tables/0/wmo/28/codetables/33086.table
new file mode 100644
index 0000000..b7cda32
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33087.table b/definitions/bufr/tables/0/wmo/28/codetables/33087.table
new file mode 100644
index 0000000..f3000e2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/33088.table
similarity index 91%
copy from definitions/bufr/tables/0/wmo/latest/codetables/33088.table
copy to definitions/bufr/tables/0/wmo/28/codetables/33088.table
index 8f7b539..1dfa368 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/33088.table
+++ b/definitions/bufr/tables/0/wmo/28/codetables/33088.table
@@ -5,7 +5,7 @@
 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)
+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)
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/35000.table b/definitions/bufr/tables/0/wmo/28/codetables/35000.table
new file mode 100644
index 0000000..8c57023
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/35000.table
@@ -0,0 +1 @@
+1023 1023 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/35001.table b/definitions/bufr/tables/0/wmo/28/codetables/35001.table
new file mode 100644
index 0000000..bba0c81
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/35030.table b/definitions/bufr/tables/0/wmo/28/codetables/35030.table
new file mode 100644
index 0000000..5b83f8b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/35031.table b/definitions/bufr/tables/0/wmo/28/codetables/35031.table
new file mode 100644
index 0000000..bdd705d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/35032.table b/definitions/bufr/tables/0/wmo/28/codetables/35032.table
new file mode 100644
index 0000000..7f53a05
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/35033.table b/definitions/bufr/tables/0/wmo/28/codetables/35033.table
new file mode 100644
index 0000000..86e9592
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/35034.table b/definitions/bufr/tables/0/wmo/28/codetables/35034.table
new file mode 100644
index 0000000..7297664
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/35035.table b/definitions/bufr/tables/0/wmo/28/codetables/35035.table
new file mode 100644
index 0000000..0fce6dd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40005.table b/definitions/bufr/tables/0/wmo/28/codetables/40005.table
new file mode 100644
index 0000000..045a4f1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40006.table b/definitions/bufr/tables/0/wmo/28/codetables/40006.table
new file mode 100644
index 0000000..d53382e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40011.table b/definitions/bufr/tables/0/wmo/28/codetables/40011.table
new file mode 100644
index 0000000..ddc7e86
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40012.table b/definitions/bufr/tables/0/wmo/28/codetables/40012.table
new file mode 100644
index 0000000..d8ce14d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40013.table b/definitions/bufr/tables/0/wmo/28/codetables/40013.table
new file mode 100644
index 0000000..79b991a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40020.table b/definitions/bufr/tables/0/wmo/28/codetables/40020.table
new file mode 100644
index 0000000..fa1d1f5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40023.table b/definitions/bufr/tables/0/wmo/28/codetables/40023.table
new file mode 100644
index 0000000..2e4cbfb
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40024.table b/definitions/bufr/tables/0/wmo/28/codetables/40024.table
new file mode 100644
index 0000000..c8421e5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40025.table b/definitions/bufr/tables/0/wmo/28/codetables/40025.table
new file mode 100644
index 0000000..7414302
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40028.table b/definitions/bufr/tables/0/wmo/28/codetables/40028.table
new file mode 100644
index 0000000..e094f29
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/40036.table b/definitions/bufr/tables/0/wmo/28/codetables/40036.table
new file mode 100644
index 0000000..9a5418e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/4059.table b/definitions/bufr/tables/0/wmo/28/codetables/4059.table
new file mode 100644
index 0000000..91fc6f4
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/4080.table b/definitions/bufr/tables/0/wmo/28/codetables/4080.table
new file mode 100644
index 0000000..84caf21
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/42004.table b/definitions/bufr/tables/0/wmo/28/codetables/42004.table
new file mode 100644
index 0000000..15a91da
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/codetables/42004.table
@@ -0,0 +1,3 @@
+0 0 WAVE DIRECTION RESOLVED
+1 1 180-DEGREE AMBIGUITY NOT RESOLVED
+15 15 MISSING
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/5069.table b/definitions/bufr/tables/0/wmo/28/codetables/5069.table
new file mode 100644
index 0000000..e267747
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8001.table b/definitions/bufr/tables/0/wmo/28/codetables/8001.table
new file mode 100644
index 0000000..6210da3
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8002.table b/definitions/bufr/tables/0/wmo/28/codetables/8002.table
new file mode 100644
index 0000000..6ab4fd7
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8003.table b/definitions/bufr/tables/0/wmo/28/codetables/8003.table
new file mode 100644
index 0000000..3731351
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8004.table b/definitions/bufr/tables/0/wmo/28/codetables/8004.table
new file mode 100644
index 0000000..2a8925e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8005.table b/definitions/bufr/tables/0/wmo/28/codetables/8005.table
new file mode 100644
index 0000000..587ea99
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8006.table b/definitions/bufr/tables/0/wmo/28/codetables/8006.table
new file mode 100644
index 0000000..9f56c62
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8007.table b/definitions/bufr/tables/0/wmo/28/codetables/8007.table
new file mode 100644
index 0000000..3e4d2cc
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8008.table b/definitions/bufr/tables/0/wmo/28/codetables/8008.table
new file mode 100644
index 0000000..2714b5a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8009.table b/definitions/bufr/tables/0/wmo/28/codetables/8009.table
new file mode 100644
index 0000000..b033982
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8010.table b/definitions/bufr/tables/0/wmo/28/codetables/8010.table
new file mode 100644
index 0000000..3c5fe71
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8011.table b/definitions/bufr/tables/0/wmo/28/codetables/8011.table
new file mode 100644
index 0000000..e7a8221
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8012.table b/definitions/bufr/tables/0/wmo/28/codetables/8012.table
new file mode 100644
index 0000000..769bc0b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8013.table b/definitions/bufr/tables/0/wmo/28/codetables/8013.table
new file mode 100644
index 0000000..e18d295
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8014.table b/definitions/bufr/tables/0/wmo/28/codetables/8014.table
new file mode 100644
index 0000000..e6f2e46
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8015.table b/definitions/bufr/tables/0/wmo/28/codetables/8015.table
new file mode 100644
index 0000000..6830b95
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8016.table b/definitions/bufr/tables/0/wmo/28/codetables/8016.table
new file mode 100644
index 0000000..6b8a1fa
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8017.table b/definitions/bufr/tables/0/wmo/28/codetables/8017.table
new file mode 100644
index 0000000..b3156f8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8018.table b/definitions/bufr/tables/0/wmo/28/codetables/8018.table
new file mode 100644
index 0000000..f91e554
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8019.table b/definitions/bufr/tables/0/wmo/28/codetables/8019.table
new file mode 100644
index 0000000..4ed4133
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8021.table b/definitions/bufr/tables/0/wmo/28/codetables/8021.table
new file mode 100644
index 0000000..20fd793
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8023.table b/definitions/bufr/tables/0/wmo/28/codetables/8023.table
new file mode 100644
index 0000000..2125e23
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8024.table b/definitions/bufr/tables/0/wmo/28/codetables/8024.table
new file mode 100644
index 0000000..377858b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8025.table b/definitions/bufr/tables/0/wmo/28/codetables/8025.table
new file mode 100644
index 0000000..1d88fa5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8026.table b/definitions/bufr/tables/0/wmo/28/codetables/8026.table
new file mode 100644
index 0000000..9bcef78
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8029.table b/definitions/bufr/tables/0/wmo/28/codetables/8029.table
new file mode 100644
index 0000000..d0eae5a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8032.table b/definitions/bufr/tables/0/wmo/28/codetables/8032.table
new file mode 100644
index 0000000..712400d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8033.table b/definitions/bufr/tables/0/wmo/28/codetables/8033.table
new file mode 100644
index 0000000..1c69537
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8034.table b/definitions/bufr/tables/0/wmo/28/codetables/8034.table
new file mode 100644
index 0000000..879f274
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8035.table b/definitions/bufr/tables/0/wmo/28/codetables/8035.table
new file mode 100644
index 0000000..3d641fd
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8036.table b/definitions/bufr/tables/0/wmo/28/codetables/8036.table
new file mode 100644
index 0000000..6436989
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8039.table b/definitions/bufr/tables/0/wmo/28/codetables/8039.table
new file mode 100644
index 0000000..f4403c6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8040.table b/definitions/bufr/tables/0/wmo/28/codetables/8040.table
new file mode 100644
index 0000000..42c5af0
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8041.table b/definitions/bufr/tables/0/wmo/28/codetables/8041.table
new file mode 100644
index 0000000..1f48fbe
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8042.table b/definitions/bufr/tables/0/wmo/28/codetables/8042.table
new file mode 100644
index 0000000..c71709a
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8043.table b/definitions/bufr/tables/0/wmo/28/codetables/8043.table
new file mode 100644
index 0000000..249fd0e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8050.table b/definitions/bufr/tables/0/wmo/28/codetables/8050.table
new file mode 100644
index 0000000..4b401f1
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8051.table b/definitions/bufr/tables/0/wmo/28/codetables/8051.table
new file mode 100644
index 0000000..5249fe6
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8052.table b/definitions/bufr/tables/0/wmo/28/codetables/8052.table
new file mode 100644
index 0000000..46dcbbe
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8053.table b/definitions/bufr/tables/0/wmo/28/codetables/8053.table
new file mode 100644
index 0000000..cbc11c9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8054.table b/definitions/bufr/tables/0/wmo/28/codetables/8054.table
new file mode 100644
index 0000000..51b908e
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8060.table b/definitions/bufr/tables/0/wmo/28/codetables/8060.table
new file mode 100644
index 0000000..2865fec
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8065.table b/definitions/bufr/tables/0/wmo/28/codetables/8065.table
new file mode 100644
index 0000000..69b80ea
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8066.table b/definitions/bufr/tables/0/wmo/28/codetables/8066.table
new file mode 100644
index 0000000..fcc0252
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8070.table b/definitions/bufr/tables/0/wmo/28/codetables/8070.table
new file mode 100644
index 0000000..f580617
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8072.table b/definitions/bufr/tables/0/wmo/28/codetables/8072.table
new file mode 100644
index 0000000..7dcd961
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8074.table b/definitions/bufr/tables/0/wmo/28/codetables/8074.table
new file mode 100644
index 0000000..5778e65
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8075.table b/definitions/bufr/tables/0/wmo/28/codetables/8075.table
new file mode 100644
index 0000000..5f5e3a2
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8076.table b/definitions/bufr/tables/0/wmo/28/codetables/8076.table
new file mode 100644
index 0000000..431496f
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8077.table b/definitions/bufr/tables/0/wmo/28/codetables/8077.table
new file mode 100644
index 0000000..2c7902b
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8079.table b/definitions/bufr/tables/0/wmo/28/codetables/8079.table
new file mode 100644
index 0000000..735a09c
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8080.table b/definitions/bufr/tables/0/wmo/28/codetables/8080.table
new file mode 100644
index 0000000..1a0f3a5
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8081.table b/definitions/bufr/tables/0/wmo/28/codetables/8081.table
new file mode 100644
index 0000000..75d2887
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8082.table b/definitions/bufr/tables/0/wmo/28/codetables/8082.table
new file mode 100644
index 0000000..1f24db8
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8083.table b/definitions/bufr/tables/0/wmo/28/codetables/8083.table
new file mode 100644
index 0000000..174ef34
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8085.table b/definitions/bufr/tables/0/wmo/28/codetables/8085.table
new file mode 100644
index 0000000..79e1a3d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8086.table b/definitions/bufr/tables/0/wmo/28/codetables/8086.table
new file mode 100644
index 0000000..47665e9
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8087.table b/definitions/bufr/tables/0/wmo/28/codetables/8087.table
new file mode 100644
index 0000000..d556c98
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/codetables/8088.table b/definitions/bufr/tables/0/wmo/28/codetables/8088.table
new file mode 100644
index 0000000..d6f51be
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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
diff --git a/definitions/bufr/tables/0/wmo/28/codetables/8091.table b/definitions/bufr/tables/0/wmo/28/codetables/8091.table
new file mode 100644
index 0000000..3a8c44d
--- /dev/null
+++ b/definitions/bufr/tables/0/wmo/28/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/28/element.table
similarity index 98%
copy from definitions/bufr/tables/0/wmo/latest/element.table
copy to definitions/bufr/tables/0/wmo/28/element.table
index 9841331..cf493fd 100644
--- a/definitions/bufr/tables/0/wmo/latest/element.table
+++ b/definitions/bufr/tables/0/wmo/28/element.table
@@ -103,9 +103,13 @@
 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
+001125|wigosIdentifierSeries|long|WIGOS IDENTIFIER SERIES|Numeric|0|0|4|Numeric|0|2
+001126|wigosIssuerOfIdentifier|long|WIGOS ISSUER OF IDENTIFIER|Numeric|0|0|16|Numeric|0|5
+001127|wigosIssueNumber|long|WIGOS ISSUE NUMBER|Numeric|0|0|16|Numeric|0|5
+001128|wigosLocalIdentifierCharacter|string|WIGOS LOCAL IDENTIFIER (CHARACTER)|CCITT IA5|0|0|128|Character|0|16
 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
+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
@@ -180,6 +184,7 @@
 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
+002088|volumeOfGasUsedInBalloon|double|VOLUME OF GAS USED IN BALLOON|m3|3|0|13|m3|3|4
 002091|entrySensor4Or20Ma|double|ENTRY SENSOR 4/20 MA|A|4|0|10|A|4|3
 002095|pressureSensorType|table|TYPE OF PRESSURE SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2
 002096|temperatureSensorType|table|TYPE OF TEMPERATURE SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2
@@ -297,6 +302,7 @@
 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
+003027|typeOfFlightRig|table|TYPE OF FLIGHT RIG|CODE TABLE|0|0|4|CODE TABLE|0|2
 004001|year|long|YEAR|a|0|0|12|a|0|4
 004002|month|long|MONTH|mon|0|0|4|mon|0|2
 004003|day|long|DAY|d|0|0|6|d|0|2
@@ -449,6 +455,8 @@
 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
+008037|baselineCheckSignificance|table|BASELINE CHECK SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2
+008038|instrumentDataSignificance|table|INSTRUMENT DATA SIGNIFICANCE|CODE TABLE|0|0|8|CODE TABLE|0|3
 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
@@ -482,6 +490,8 @@
 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
+008092|measurementUncertaintyExpression|table|MEASUREMENT UNCERTAINTY EXPRESSION|CODE TABLE|0|0|5|CODE TABLE|0|2
+008093|measurementUncertaintySignificance|table|MEASUREMENT UNCERTAINTY SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2
 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
@@ -510,6 +520,7 @@
 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
+010071|verticalResolution|long|VERTICAL RESOLUTION|m|0|0|14|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
@@ -607,6 +618,9 @@
 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
+011110|uncertaintyInUComponent|double|UNCERTAINTY IN U-COMPONENT|m/s|1|-4096|13|m/s|1|4
+011111|uncertaintyInVComponent|double|UNCERTAINTY IN V-COMPONENT|m/s|1|-4096|13|m/s|1|4
+011112|uncertaintyInWComponent|double|UNCERTAINTY IN W-COMPONENT|m/s|2|-4096|13|m/s|2|4
 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
@@ -614,6 +628,7 @@
 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
+012008|uncertaintyInVirtualTemperature|double|UNCERTAINTY IN VIRTUAL TEMPERATURE|K|1|0|12|C|1|4
 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
@@ -665,7 +680,7 @@
 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
+012129|roadSubSurfaceTemperature|double|ROAD SUBSURFACE 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
@@ -846,6 +861,16 @@
 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
+015063|attenuatedBackscatter|double|ATTENUATED BACKSCATTER|m-1 Sr-1|8|0|20|m-1 Sr-1|8|7
+015064|uncertaintyInAttenuatedBackscatter|double|UNCERTAINTY IN ATTENUATED BACKSCATTER|m-1 Sr-1|8|0|20|m-1 Sr-1|8|7
+015065|particleBackscatterCoefficient|double|PARTICLE BACKSCATTER COEFFICIENT|m-1 Sr-1|8|0|20|m-1 Sr-1|8|7
+015066|uncertaintyInParticleBackscatterCoefficient|double|UNCERTAINTY IN PARTICLE BACKSCATTER COEFFICIENT|m-1 Sr-1|8|0|20|m-1 Sr-1|8|7
+015067|particleExtinctionCoefficient|double|PARTICLE EXTINCTION COEFFICIENT|/m|8|0|20|/m|8|7
+015068|uncertaintyInParticleExtinctionCoefficient|double|UNCERTAINTY IN PARTICLE EXTINCTION COEFFICIENT|/m|8|0|20|/m|8|7
+015069|particleLidarRatio|double|PARTICLE LIDAR RATIO|Sr|2|0|14|Sr|2|5
+015070|uncertaintyInLidarRatio|double|UNCERTAINTY IN LIDAR RATIO|Sr|2|0|14|Sr|2|5
+015071|particleDepolarizationRatio|double|PARTICLE DEPOLARIZATION RATIO|%|2|0|14|%|2|5
+015072|uncertaintyInDepolarizationRatio|double|UNCERTAINTY IN DEPOLARIZATION RATIO|%|2|0|14|%|2|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
@@ -1195,11 +1220,11 @@
 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
+022103|scaledMaximumNonDirectionalSpectralWaveDensityByWavenumber|long|SCALED MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|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
+022105|scaledNonDirectionalSpectralWaveDensityByWavenumber|long|SCALED NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|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
+022107|scaledDirectionalSpectralWaveDensityByWavenumber|long|SCALED DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|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
@@ -1456,6 +1481,7 @@
 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
+027079|horizontalWidthOfSampledVolume|long|HORIZONTAL WIDTH OF SAMPLED VOLUME|m|0|0|18|m|0|6
 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
diff --git a/definitions/bufr/tables/0/wmo/latest/sequence.def b/definitions/bufr/tables/0/wmo/28/sequence.def
similarity index 98%
copy from definitions/bufr/tables/0/wmo/latest/sequence.def
copy to definitions/bufr/tables/0/wmo/28/sequence.def
index 26a604d..6d8580b 100644
--- a/definitions/bufr/tables/0/wmo/latest/sequence.def
+++ b/definitions/bufr/tables/0/wmo/28/sequence.def
@@ -85,6 +85,7 @@
 "301128" = [  001081, 001082, 001083, 001095, 002015, 002016, 002017, 002066, 002067, 002080,
                002081, 002082, 002083, 002084, 002085, 002086, 002095, 002096, 002097, 002103,
                002191, 025061, 035035 ]
+"301150" = [  001125, 001126, 001127, 001128 ]
 "302001" = [  010004, 010051, 010061, 010063 ]
 "302002" = [  010004, 007004, 010003, 010061, 010063 ]
 "302003" = [  011011, 011012, 012004, 012006, 013003, 020001, 020003, 020004, 020005 ]
@@ -487,6 +488,14 @@
 "309018" = [  301040, 302004, 101000, 031001, 303014 ]
 "309019" = [  301031, 002003, 101000, 031001, 303011 ]
 "309020" = [  301031, 002003, 104000, 031001, 007003, 011003, 011004, 011005 ]
+"309021" = [  301001, 005001, 006001, 007030, 301014, 002003, 002121, 112000, 031001, 007007,
+               301021, 011003, 011110, 011004, 011111, 033002, 011006, 011112, 033002, 010071,
+               027079 ]
+"309022" = [  301001, 005001, 006001, 007030, 301014, 002003, 002121, 110000, 031001, 007007,
+               301021, 012007, 012008, 033002, 011006, 011112, 033002, 010071, 027079 ]
+"309023" = [  301001, 005001, 006001, 007030, 301014, 002003, 302004, 302005, 114000, 031001,
+               007007, 301021, 101000, 031001, 002121, 015063, 015064, 015065, 015066, 015067,
+               015068, 015069, 015070, 015071, 015072, 033002, 010071, 027079 ]
 "309030" = [  015004, 015005, 104000, 031001, 004015, 008006, 007004, 015003 ]
 "309031" = [  015004, 015005, 104000, 031001, 004025, 008006, 007004, 015003 ]
 "309040" = [  301075, 301076, 309030 ]
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/1007.table b/definitions/bufr/tables/0/wmo/latest/codetables/1007.table
index 7b15c1d..7910980 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/1007.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/1007.table
@@ -106,6 +106,7 @@
 341 341 RESURS 01-4
 410 410 KALPANA-1
 421 421 OCEANSAT-2
+422 422 SCATSAT-1
 430 430 INSAT 1B
 431 431 INSAT 1C
 432 432 INSAT 1D
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/1034.table b/definitions/bufr/tables/0/wmo/latest/codetables/1034.table
index fface93..98ea28c 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/1034.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/1034.table
@@ -20,7 +20,7 @@
 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)
+24 24 GEODETIC OBSERVATORY PECNY (CZECHIA)
 25 25 INSTITUT D'ESTUDIS ESPACIALS DE CATALUNYA (SPAIN)
 26 26 FEDERAL OFFICE OF TOPOGRAPHY (SWITZERLAND)
 27 27 NORDIC COMMISSION OF GEODESY (NORWAY)
@@ -49,6 +49,7 @@
 102 102 NATIONAL RESEARCH COUNCIL/INSTITUTE OF ATMOSPHERIC SCIENCES AND CLIMATE (CNR-ISAC)
 110 110 NOWCAST MOBILE (LIGHTNING DATA)
 120 120 EWA BEACH, HAWAII
+125 125 FORD ISLAND, HAWAII
 130 130 MIAMI, FLORIDA
 140 140 LANNION (FRANCE)
 150 150 SVALBARD (NORWAY)
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/1101.table b/definitions/bufr/tables/0/wmo/latest/codetables/1101.table
index 21e0cf5..f798e14 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/1101.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/1101.table
@@ -159,7 +159,7 @@
 607 607 BULGARIA
 608 608 CROATIA
 609 609 CYPRUS
-610 610 CZECH REPUBLIC
+610 610 CZECHIA
 611 611 DENMARK
 612 612 ESTONIA
 613 613 FINLAND
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/11037.table b/definitions/bufr/tables/0/wmo/latest/codetables/11037.table
index 423eef7..e25c9da 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/11037.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/11037.table
@@ -1,30 +1,30 @@
 0 0 AVE < 0.1
 1 1 AVE < 0.1
-2 2 0.1 <= AVE < 0.2
+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
+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
+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
+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
+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
+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
index f0c5cce..68876b0 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/11038.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/11038.table
@@ -1,17 +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
+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
index c2abbda..e5af0f2 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/11039.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/11039.table
@@ -1,17 +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
+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
index 05fe4b3..20043c9 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/1150.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/1150.table
@@ -1,6 +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)
+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 AND THE INTERNATIONAL REFERENCE POLE AS THE PRIME MERIDIAN AND PRIME POLE, RESPECTIVELY, AND THE ORIGIN OF THE INTERNATIONAL TERRESTRIAL REFERENCE SYSTEM (ITRS). INTERNATIONAL REFERENCE MERIDIAN, INTERNATIONAL REFERENCE POLE AND ITRS ARE 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/20006.table b/definitions/bufr/tables/0/wmo/latest/codetables/20006.table
index a250af9..cc26121 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/20006.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/20006.table
@@ -1,5 +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
+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/2003.table b/definitions/bufr/tables/0/wmo/latest/codetables/2003.table
index e0aa923..f364d18 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/2003.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2003.table
@@ -8,5 +8,6 @@
 7 7 SATELLITE NAVIGATION
 8 8 RADIO-ACOUSTIC SOUNDING SYSTEM (RASS)
 9 9 SODAR
+10 10 LIDAR
 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/2019.table b/definitions/bufr/tables/0/wmo/latest/codetables/2019.table
index 8e7586d..11ab065 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/2019.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2019.table
@@ -211,6 +211,7 @@
 607 607 HIRS/4
 615 615 IMAGER
 616 616 VIIRS
+617 617 GLM
 620 620 CRIRS/NP
 621 621 ATMS
 622 622 MSS
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/2097.table b/definitions/bufr/tables/0/wmo/latest/codetables/2097.table
index 3f6b471..309ef64 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/2097.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/2097.table
@@ -10,7 +10,7 @@
 9 9 CARBON HYGRISTOR
 10 10 PSYCHROMETER
 11 11 CAPACITIVE (POLYMER)
-12 12 CAPACITIVE (CERAMIC, INCL. METAL OXIDE)
+12 12 CAPACITIVE (CERAMIC, INCLUDING METAL OXIDE)
 13 13 RESISTIVE (GENERIC)
 14 14 RESISTIVE (SALT POLYMER)
 15 15 RESISTIVE (CONDUCTIVE POLYMER)
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/25188.table b/definitions/bufr/tables/0/wmo/latest/codetables/25188.table
index 75641e0..b18013f 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/25188.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/25188.table
@@ -1,5 +1,5 @@
-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
+0 0 PRESSURE ADJUSTED TO MEAN SEA LEVEL FOLLOWING WMO-NO. 8 FOR LOW LEVEL (< 50 M) STATIONS
+1 1 PRESSURE ADJUSTED TO MEAN SEA LEVEL FOLLOWING WMO-NO. 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
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/3004.table b/definitions/bufr/tables/0/wmo/latest/codetables/3004.table
index c3604a4..571e234 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/3004.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3004.table
@@ -5,7 +5,7 @@
 4 4 RECTANGULAR SECTION SHIELD
 5 5 SQUARE SECTION SHIELD
 6 6 TRIANGULAR SECTION SHIELD
-7 7 OPEN COVERED LEAN TO
+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/3018.table b/definitions/bufr/tables/0/wmo/latest/codetables/3018.table
index 79e0375..b3769ae 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/3018.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3018.table
@@ -13,7 +13,7 @@
 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
+21 21 BRIDGE ACROSS A VALLEY IN AN 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
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/3022.table b/definitions/bufr/tables/0/wmo/latest/codetables/3022.table
index 7ecac34..daf67e2 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/3022.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3022.table
@@ -1,4 +1,4 @@
-0 0 NATIONAL HYDRO METEOROLOGICAL/WEATHER SERVICE
+0 0 NATIONAL HYDROMETEOROLOGICAL/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
index 8376a8d..9e683c8 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/3023.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/3023.table
@@ -1,6 +1,6 @@
-0 0 SINGLE V SECTION LOUVERS
+0 0 SINGLE V-SECTION LOUVERS
 1 1 OVERLAPPING LOUVERS
-2 2 DOUBLE V SECTION LOUVERS
+2 2 DOUBLE V-SECTION LOUVERS
 3 3 NON-OVERLAPPING LOUVERS
 4 4 VENTED, NON-LOUVERED
 5 5 NOT APPLICABLE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/33027.table b/definitions/bufr/tables/0/wmo/latest/codetables/33027.table
index 8997392..c563af4 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/33027.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/33027.table
@@ -2,5 +2,5 @@
 1 1 500 M =< RADIUS <1500 M
 2 2 250 M =< RADIUS < 500 M
 3 3 RADIUS < 250 M
-4 4 <= 100 M
+4 4 =< 100 M
 7 7 MISSING VALUE
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/33085.table b/definitions/bufr/tables/0/wmo/latest/codetables/33085.table
index 7962ec5..0872a2b 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/33085.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/33085.table
@@ -2,7 +2,7 @@
 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
+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
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/33088.table b/definitions/bufr/tables/0/wmo/latest/codetables/33088.table
index 8f7b539..1dfa368 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/33088.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/33088.table
@@ -5,7 +5,7 @@
 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)
+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)
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/42004.table b/definitions/bufr/tables/0/wmo/latest/codetables/42004.table
index a846810..15a91da 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/42004.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/42004.table
@@ -1,3 +1,3 @@
 0 0 WAVE DIRECTION RESOLVED
-1 1 180-DEGREE AMBIGUITY NOT RESOLVE
-15 15 MISSING VALUE
+1 1 180-DEGREE AMBIGUITY NOT RESOLVED
+15 15 MISSING
diff --git a/definitions/bufr/tables/0/wmo/latest/codetables/8088.table b/definitions/bufr/tables/0/wmo/latest/codetables/8088.table
index 7791d33..d6f51be 100644
--- a/definitions/bufr/tables/0/wmo/latest/codetables/8088.table
+++ b/definitions/bufr/tables/0/wmo/latest/codetables/8088.table
@@ -1,4 +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
+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
diff --git a/definitions/bufr/tables/0/wmo/latest/element.table b/definitions/bufr/tables/0/wmo/latest/element.table
index 9841331..cf493fd 100644
--- a/definitions/bufr/tables/0/wmo/latest/element.table
+++ b/definitions/bufr/tables/0/wmo/latest/element.table
@@ -103,9 +103,13 @@
 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
+001125|wigosIdentifierSeries|long|WIGOS IDENTIFIER SERIES|Numeric|0|0|4|Numeric|0|2
+001126|wigosIssuerOfIdentifier|long|WIGOS ISSUER OF IDENTIFIER|Numeric|0|0|16|Numeric|0|5
+001127|wigosIssueNumber|long|WIGOS ISSUE NUMBER|Numeric|0|0|16|Numeric|0|5
+001128|wigosLocalIdentifierCharacter|string|WIGOS LOCAL IDENTIFIER (CHARACTER)|CCITT IA5|0|0|128|Character|0|16
 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
+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
@@ -180,6 +184,7 @@
 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
+002088|volumeOfGasUsedInBalloon|double|VOLUME OF GAS USED IN BALLOON|m3|3|0|13|m3|3|4
 002091|entrySensor4Or20Ma|double|ENTRY SENSOR 4/20 MA|A|4|0|10|A|4|3
 002095|pressureSensorType|table|TYPE OF PRESSURE SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2
 002096|temperatureSensorType|table|TYPE OF TEMPERATURE SENSOR|CODE TABLE|0|0|5|CODE TABLE|0|2
@@ -297,6 +302,7 @@
 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
+003027|typeOfFlightRig|table|TYPE OF FLIGHT RIG|CODE TABLE|0|0|4|CODE TABLE|0|2
 004001|year|long|YEAR|a|0|0|12|a|0|4
 004002|month|long|MONTH|mon|0|0|4|mon|0|2
 004003|day|long|DAY|d|0|0|6|d|0|2
@@ -449,6 +455,8 @@
 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
+008037|baselineCheckSignificance|table|BASELINE CHECK SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2
+008038|instrumentDataSignificance|table|INSTRUMENT DATA SIGNIFICANCE|CODE TABLE|0|0|8|CODE TABLE|0|3
 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
@@ -482,6 +490,8 @@
 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
+008092|measurementUncertaintyExpression|table|MEASUREMENT UNCERTAINTY EXPRESSION|CODE TABLE|0|0|5|CODE TABLE|0|2
+008093|measurementUncertaintySignificance|table|MEASUREMENT UNCERTAINTY SIGNIFICANCE|CODE TABLE|0|0|5|CODE TABLE|0|2
 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
@@ -510,6 +520,7 @@
 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
+010071|verticalResolution|long|VERTICAL RESOLUTION|m|0|0|14|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
@@ -607,6 +618,9 @@
 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
+011110|uncertaintyInUComponent|double|UNCERTAINTY IN U-COMPONENT|m/s|1|-4096|13|m/s|1|4
+011111|uncertaintyInVComponent|double|UNCERTAINTY IN V-COMPONENT|m/s|1|-4096|13|m/s|1|4
+011112|uncertaintyInWComponent|double|UNCERTAINTY IN W-COMPONENT|m/s|2|-4096|13|m/s|2|4
 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
@@ -614,6 +628,7 @@
 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
+012008|uncertaintyInVirtualTemperature|double|UNCERTAINTY IN VIRTUAL TEMPERATURE|K|1|0|12|C|1|4
 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
@@ -665,7 +680,7 @@
 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
+012129|roadSubSurfaceTemperature|double|ROAD SUBSURFACE 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
@@ -846,6 +861,16 @@
 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
+015063|attenuatedBackscatter|double|ATTENUATED BACKSCATTER|m-1 Sr-1|8|0|20|m-1 Sr-1|8|7
+015064|uncertaintyInAttenuatedBackscatter|double|UNCERTAINTY IN ATTENUATED BACKSCATTER|m-1 Sr-1|8|0|20|m-1 Sr-1|8|7
+015065|particleBackscatterCoefficient|double|PARTICLE BACKSCATTER COEFFICIENT|m-1 Sr-1|8|0|20|m-1 Sr-1|8|7
+015066|uncertaintyInParticleBackscatterCoefficient|double|UNCERTAINTY IN PARTICLE BACKSCATTER COEFFICIENT|m-1 Sr-1|8|0|20|m-1 Sr-1|8|7
+015067|particleExtinctionCoefficient|double|PARTICLE EXTINCTION COEFFICIENT|/m|8|0|20|/m|8|7
+015068|uncertaintyInParticleExtinctionCoefficient|double|UNCERTAINTY IN PARTICLE EXTINCTION COEFFICIENT|/m|8|0|20|/m|8|7
+015069|particleLidarRatio|double|PARTICLE LIDAR RATIO|Sr|2|0|14|Sr|2|5
+015070|uncertaintyInLidarRatio|double|UNCERTAINTY IN LIDAR RATIO|Sr|2|0|14|Sr|2|5
+015071|particleDepolarizationRatio|double|PARTICLE DEPOLARIZATION RATIO|%|2|0|14|%|2|5
+015072|uncertaintyInDepolarizationRatio|double|UNCERTAINTY IN DEPOLARIZATION RATIO|%|2|0|14|%|2|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
@@ -1195,11 +1220,11 @@
 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
+022103|scaledMaximumNonDirectionalSpectralWaveDensityByWavenumber|long|SCALED MAXIMUM NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|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
+022105|scaledNonDirectionalSpectralWaveDensityByWavenumber|long|SCALED NON-DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|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
+022107|scaledDirectionalSpectralWaveDensityByWavenumber|long|SCALED DIRECTIONAL SPECTRAL WAVE DENSITY BY WAVE NUMBER|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
@@ -1456,6 +1481,7 @@
 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
+027079|horizontalWidthOfSampledVolume|long|HORIZONTAL WIDTH OF SAMPLED VOLUME|m|0|0|18|m|0|6
 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
diff --git a/definitions/bufr/tables/0/wmo/latest/sequence.def b/definitions/bufr/tables/0/wmo/latest/sequence.def
index 26a604d..6d8580b 100644
--- a/definitions/bufr/tables/0/wmo/latest/sequence.def
+++ b/definitions/bufr/tables/0/wmo/latest/sequence.def
@@ -85,6 +85,7 @@
 "301128" = [  001081, 001082, 001083, 001095, 002015, 002016, 002017, 002066, 002067, 002080,
                002081, 002082, 002083, 002084, 002085, 002086, 002095, 002096, 002097, 002103,
                002191, 025061, 035035 ]
+"301150" = [  001125, 001126, 001127, 001128 ]
 "302001" = [  010004, 010051, 010061, 010063 ]
 "302002" = [  010004, 007004, 010003, 010061, 010063 ]
 "302003" = [  011011, 011012, 012004, 012006, 013003, 020001, 020003, 020004, 020005 ]
@@ -487,6 +488,14 @@
 "309018" = [  301040, 302004, 101000, 031001, 303014 ]
 "309019" = [  301031, 002003, 101000, 031001, 303011 ]
 "309020" = [  301031, 002003, 104000, 031001, 007003, 011003, 011004, 011005 ]
+"309021" = [  301001, 005001, 006001, 007030, 301014, 002003, 002121, 112000, 031001, 007007,
+               301021, 011003, 011110, 011004, 011111, 033002, 011006, 011112, 033002, 010071,
+               027079 ]
+"309022" = [  301001, 005001, 006001, 007030, 301014, 002003, 002121, 110000, 031001, 007007,
+               301021, 012007, 012008, 033002, 011006, 011112, 033002, 010071, 027079 ]
+"309023" = [  301001, 005001, 006001, 007030, 301014, 002003, 302004, 302005, 114000, 031001,
+               007007, 301021, 101000, 031001, 002121, 015063, 015064, 015065, 015066, 015067,
+               015068, 015069, 015070, 015071, 015072, 033002, 010071, 027079 ]
 "309030" = [  015004, 015005, 104000, 031001, 004015, 008006, 007004, 015003 ]
 "309031" = [  015004, 015005, 104000, 031001, 004025, 008006, 007004, 015003 ]
 "309040" = [  301075, 301076, 309030 ]
diff --git a/definitions/common/c-1.table b/definitions/common/c-1.table
index abb984a..4f8bad4 100644
--- a/definitions/common/c-1.table
+++ b/definitions/common/c-1.table
@@ -17,7 +17,8 @@
 22 22 Lagos (RSMC)
 24 fapr Pretoria (RSMC)
 26 26 Khabarovsk (RSMC)
-28 28 New Delhi (RSMC/RAFC)
+28 vabb New Delhi (IMD)
+29 dems New Delhi (NCMRWF)
 30 30 Novosibirsk (RSMC)
 32 32 Tashkent (RSMC)
 33 33 Jeddah (RSMC)
diff --git a/definitions/common/c-11.table b/definitions/common/c-11.table
index c5b43af..889bc3d 100644
--- a/definitions/common/c-11.table
+++ b/definitions/common/c-11.table
@@ -17,7 +17,8 @@
 22 22 Lagos (RSMC)
 24 fapr Pretoria (RSMC)
 26 26 Khabarovsk (RSMC)
-28 28 New Delhi (RSMC/RAFC)
+28 vabb New Delhi (IMD)
+29 dems New Delhi (NCMRWF)
 30 30 Novosibirsk (RSMC)
 32 32 Tashkent (RSMC)
 33 33 Jeddah (RSMC)
diff --git a/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def
new file mode 100644
index 0000000..5b370d1
--- /dev/null
+++ b/definitions/grib1/localConcepts/ecmf/stepTypeForConversion.def
@@ -0,0 +1,7 @@
+# Concept stepTypeForConversion for ECMWF
+# set uses the FIRST one
+# get returns the LAST match
+
+# ECC-457: ECMWF Total Precipitation
+"accum" = {timeRangeIndicator=0;indicatorOfParameter=228;gribTablesVersionNo=128;centre=98;}
+"accum" = {timeRangeIndicator=1;indicatorOfParameter=228;gribTablesVersionNo=128;centre=98;}
diff --git a/definitions/grib1/localConcepts/rjtd/cfVarName.def b/definitions/grib1/localConcepts/rjtd/cfVarName.def
index 9a4dd4e..dcfc62d 100644
--- a/definitions/grib1/localConcepts/rjtd/cfVarName.def
+++ b/definitions/grib1/localConcepts/rjtd/cfVarName.def
@@ -39,6 +39,16 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 4 ;
 	}
+#Total column cloud liquid water
+'tclw' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 227 ;
+	}
+#Total column cloud ice water
+'tciw' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 58 ;
+	}
 #Geopotential
 'z' = {
 	 table2Version = 200 ;
@@ -228,11 +238,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 212 ;
 	}
-#Cloud Ice
-'cice' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 58 ;
-	}
 #Cloud water
 'cwat' = {
 	 table2Version = 200 ;
@@ -285,32 +290,32 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 84 ;
 	}
-#Evaporation
+#Mean evaporation
 'evpsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Total precipitation
+#Mean total precipitation
 'tpratsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 61 ;
 	}
-#Large scale precipitation
+#Mean large scale precipitation
 'lpratsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 62 ;
 	}
-#Convective precipitation
+#Mean convective precipitation
 'cpratsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 63 ;
 	}
-#Snowfall rate water equivalent
+#Mean snowfall rate water equivalent
 'srweqsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 64 ;
 	}
-#Water run-off
+#Mean surface water runoff
 'rofsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 90 ;
@@ -330,17 +335,17 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 165 ;
 	}
-#Frequency of deep convection
+#Mean frequency of deep convection
 'frcvsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 170 ;
 	}
-#Frequency of shallow convection
+#Mean frequency of shallow convection
 'frcvssfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 171 ;
 	}
-#Frequency of stratocumulus parameterisation
+#Mean frequency of stratocumulus parameterisation
 'frscsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 172 ;
@@ -355,7 +360,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 174 ;
 	}
-#Evapotranspiration
+#Mean evapotranspiration
 'ltrssfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 202 ;
@@ -380,11 +385,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 226 ;
 	}
-#Cloud liquid water
-'cwclm' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 227 ;
-	}
 #Upward mass flux at cloud base
 'mflxbhbl' = {
 	 table2Version = 200 ;
@@ -410,22 +410,22 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 239 ;
 	}
-#Zonal momentum flux by long gravity wave
+#Mean zonal momentum flux by long gravity wave
 'fglusfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 147 ;
 	}
-#Meridional momentum flux by long gravity wave
+#Mean meridional momentum flux by long gravity wave
 'fglvsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 148 ;
 	}
-#Meridional momentum flux by short gravity wave
+#Mean meridional momentum flux by short gravity wave
 'fgsvsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 154 ;
 	}
-#Zonal momentum flux by short gravity wave
+#Mean zonal momentum flux by short gravity wave
 'fgsusfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 159 ;
@@ -950,8 +950,8 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 85 ;
 	}
-#Snow Fall water equivalent
-'sf' = {
+#Snow depth water equivalent
+'sd' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 65 ;
 	}
diff --git a/definitions/grib1/localConcepts/rjtd/name.def b/definitions/grib1/localConcepts/rjtd/name.def
index e0b2d03..abf47d5 100644
--- a/definitions/grib1/localConcepts/rjtd/name.def
+++ b/definitions/grib1/localConcepts/rjtd/name.def
@@ -39,6 +39,16 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 4 ;
 	}
+#Total column cloud liquid water
+'Total column cloud liquid water' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 227 ;
+	}
+#Total column cloud ice water
+'Total column cloud ice water' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 58 ;
+	}
 #Geopotential
 'Geopotential' = {
 	 table2Version = 200 ;
@@ -228,11 +238,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 212 ;
 	}
-#Cloud Ice
-'Cloud Ice' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 58 ;
-	}
 #Cloud water
 'Cloud water' = {
 	 table2Version = 200 ;
@@ -285,33 +290,33 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 84 ;
 	}
-#Evaporation
-'Evaporation' = {
+#Mean evaporation
+'Mean evaporation' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Total precipitation
-'Total precipitation' = {
+#Mean total precipitation
+'Mean total precipitation' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 61 ;
 	}
-#Large scale precipitation
-'Large scale precipitation' = {
+#Mean large scale precipitation
+'Mean large scale precipitation' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 62 ;
 	}
-#Convective precipitation
-'Convective precipitation' = {
+#Mean convective precipitation
+'Mean convective precipitation' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 63 ;
 	}
-#Snowfall rate water equivalent
-'Snowfall rate water equivalent' = {
+#Mean snowfall rate water equivalent
+'Mean snowfall rate water equivalent' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 64 ;
 	}
-#Water run-off
-'Water run-off' = {
+#Mean surface water runoff
+'Mean surface water runoff' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 90 ;
 	}
@@ -330,18 +335,18 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 165 ;
 	}
-#Frequency of deep convection
-'Frequency of deep convection' = {
+#Mean frequency of deep convection
+'Mean frequency of deep convection' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 170 ;
 	}
-#Frequency of shallow convection
-'Frequency of shallow convection' = {
+#Mean frequency of shallow convection
+'Mean frequency of shallow convection' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 171 ;
 	}
-#Frequency of stratocumulus parameterisation
-'Frequency of stratocumulus parameterisation' = {
+#Mean frequency of stratocumulus parameterisation
+'Mean frequency of stratocumulus parameterisation' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 172 ;
 	}
@@ -355,8 +360,8 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 174 ;
 	}
-#Evapotranspiration
-'Evapotranspiration' = {
+#Mean evapotranspiration
+'Mean evapotranspiration' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 202 ;
 	}
@@ -380,11 +385,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 226 ;
 	}
-#Cloud liquid water
-'Cloud liquid water' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 227 ;
-	}
 #Upward mass flux at cloud base
 'Upward mass flux at cloud base' = {
 	 table2Version = 200 ;
@@ -410,23 +410,23 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 239 ;
 	}
-#Zonal momentum flux by long gravity wave
-'Zonal momentum flux by long gravity wave' = {
+#Mean zonal momentum flux by long gravity wave
+'Mean zonal momentum flux by long gravity wave' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 147 ;
 	}
-#Meridional momentum flux by long gravity wave
-'Meridional momentum flux by long gravity wave' = {
+#Mean meridional momentum flux by long gravity wave
+'Mean meridional momentum flux by long gravity wave' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 148 ;
 	}
-#Meridional momentum flux by short gravity wave
-'Meridional momentum flux by short gravity wave' = {
+#Mean meridional momentum flux by short gravity wave
+'Mean meridional momentum flux by short gravity wave' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 154 ;
 	}
-#Zonal momentum flux by short gravity wave
-'Zonal momentum flux by short gravity wave' = {
+#Mean zonal momentum flux by short gravity wave
+'Mean zonal momentum flux by short gravity wave' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 159 ;
 	}
@@ -950,8 +950,8 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 85 ;
 	}
-#Snow Fall water equivalent
-'Snow Fall water equivalent' = {
+#Snow depth water equivalent
+'Snow depth water equivalent' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 65 ;
 	}
diff --git a/definitions/grib1/localConcepts/rjtd/paramId.def b/definitions/grib1/localConcepts/rjtd/paramId.def
index 8c32276..5a914b7 100644
--- a/definitions/grib1/localConcepts/rjtd/paramId.def
+++ b/definitions/grib1/localConcepts/rjtd/paramId.def
@@ -39,6 +39,16 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 4 ;
 	}
+#Total column cloud liquid water
+'78' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 227 ;
+	}
+#Total column cloud ice water
+'79' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 58 ;
+	}
 #Geopotential
 '129' = {
 	 table2Version = 200 ;
@@ -228,11 +238,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 212 ;
 	}
-#Cloud Ice
-'260101' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 58 ;
-	}
 #Cloud water
 '260102' = {
 	 table2Version = 200 ;
@@ -285,32 +290,32 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 84 ;
 	}
-#Evaporation
+#Mean evaporation
 '260600' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Total precipitation
+#Mean total precipitation
 '260601' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 61 ;
 	}
-#Large scale precipitation
+#Mean large scale precipitation
 '260602' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 62 ;
 	}
-#Convective precipitation
+#Mean convective precipitation
 '260603' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 63 ;
 	}
-#Snowfall rate water equivalent
+#Mean snowfall rate water equivalent
 '260604' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 64 ;
 	}
-#Water run-off
+#Mean surface water runoff
 '260605' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 90 ;
@@ -330,17 +335,17 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 165 ;
 	}
-#Frequency of deep convection
+#Mean frequency of deep convection
 '260610' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 170 ;
 	}
-#Frequency of shallow convection
+#Mean frequency of shallow convection
 '260611' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 171 ;
 	}
-#Frequency of stratocumulus parameterisation
+#Mean frequency of stratocumulus parameterisation
 '260612' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 172 ;
@@ -355,7 +360,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 174 ;
 	}
-#Evapotranspiration
+#Mean evapotranspiration
 '260615' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 202 ;
@@ -380,11 +385,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 226 ;
 	}
-#Cloud liquid water
-'260620' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 227 ;
-	}
 #Upward mass flux at cloud base
 '260621' = {
 	 table2Version = 200 ;
@@ -410,22 +410,22 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 239 ;
 	}
-#Zonal momentum flux by long gravity wave
+#Mean zonal momentum flux by long gravity wave
 '260626' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 147 ;
 	}
-#Meridional momentum flux by long gravity wave
+#Mean meridional momentum flux by long gravity wave
 '260627' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 148 ;
 	}
-#Meridional momentum flux by short gravity wave
+#Mean meridional momentum flux by short gravity wave
 '260628' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 154 ;
 	}
-#Zonal momentum flux by short gravity wave
+#Mean zonal momentum flux by short gravity wave
 '260629' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 159 ;
@@ -950,8 +950,8 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 85 ;
 	}
-#Snow Fall water equivalent
-'228144' = {
+#Snow depth water equivalent
+'228141' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 65 ;
 	}
diff --git a/definitions/grib1/localConcepts/rjtd/shortName.def b/definitions/grib1/localConcepts/rjtd/shortName.def
index f0dd3be..5fbe1ab 100644
--- a/definitions/grib1/localConcepts/rjtd/shortName.def
+++ b/definitions/grib1/localConcepts/rjtd/shortName.def
@@ -39,6 +39,16 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 4 ;
 	}
+#Total column cloud liquid water
+'tclw' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 227 ;
+	}
+#Total column cloud ice water
+'tciw' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 58 ;
+	}
 #Geopotential
 'z' = {
 	 table2Version = 200 ;
@@ -228,11 +238,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 212 ;
 	}
-#Cloud Ice
-'cice' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 58 ;
-	}
 #Cloud water
 'cwat' = {
 	 table2Version = 200 ;
@@ -285,32 +290,32 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 84 ;
 	}
-#Evaporation
+#Mean evaporation
 'evpsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Total precipitation
+#Mean total precipitation
 'tpratsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 61 ;
 	}
-#Large scale precipitation
+#Mean large scale precipitation
 'lpratsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 62 ;
 	}
-#Convective precipitation
+#Mean convective precipitation
 'cpratsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 63 ;
 	}
-#Snowfall rate water equivalent
+#Mean snowfall rate water equivalent
 'srweqsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 64 ;
 	}
-#Water run-off
+#Mean surface water runoff
 'rofsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 90 ;
@@ -330,17 +335,17 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 165 ;
 	}
-#Frequency of deep convection
+#Mean frequency of deep convection
 'frcvsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 170 ;
 	}
-#Frequency of shallow convection
+#Mean frequency of shallow convection
 'frcvssfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 171 ;
 	}
-#Frequency of stratocumulus parameterisation
+#Mean frequency of stratocumulus parameterisation
 'frscsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 172 ;
@@ -355,7 +360,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 174 ;
 	}
-#Evapotranspiration
+#Mean evapotranspiration
 'ltrssfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 202 ;
@@ -380,11 +385,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 226 ;
 	}
-#Cloud liquid water
-'cwclm' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 227 ;
-	}
 #Upward mass flux at cloud base
 'mflxbhbl' = {
 	 table2Version = 200 ;
@@ -410,22 +410,22 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 239 ;
 	}
-#Zonal momentum flux by long gravity wave
+#Mean zonal momentum flux by long gravity wave
 'fglusfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 147 ;
 	}
-#Meridional momentum flux by long gravity wave
+#Mean meridional momentum flux by long gravity wave
 'fglvsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 148 ;
 	}
-#Meridional momentum flux by short gravity wave
+#Mean meridional momentum flux by short gravity wave
 'fgsvsfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 154 ;
 	}
-#Zonal momentum flux by short gravity wave
+#Mean zonal momentum flux by short gravity wave
 'fgsusfc' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 159 ;
@@ -950,8 +950,8 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 85 ;
 	}
-#Snow Fall water equivalent
-'sf' = {
+#Snow depth water equivalent
+'sd' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 65 ;
 	}
diff --git a/definitions/grib1/localConcepts/rjtd/units.def b/definitions/grib1/localConcepts/rjtd/units.def
index 2d67d1f..148d1ec 100644
--- a/definitions/grib1/localConcepts/rjtd/units.def
+++ b/definitions/grib1/localConcepts/rjtd/units.def
@@ -39,6 +39,16 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 4 ;
 	}
+#Total column cloud liquid water
+'kg m**-2' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 227 ;
+	}
+#Total column cloud ice water
+'kg m**-2' = {
+	 table2Version = 200 ;
+	 indicatorOfParameter = 58 ;
+	}
 #Geopotential
 'm**2 s**-2' = {
 	 table2Version = 200 ;
@@ -228,11 +238,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 212 ;
 	}
-#Cloud Ice
-'kg m**-2' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 58 ;
-	}
 #Cloud water
 'kg m**-2' = {
 	 table2Version = 200 ;
@@ -285,32 +290,32 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 84 ;
 	}
-#Evaporation
+#Mean evaporation
 'mm per day' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 57 ;
 	}
-#Total precipitation
+#Mean total precipitation
 'mm per day' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 61 ;
 	}
-#Large scale precipitation
+#Mean large scale precipitation
 'mm per day' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 62 ;
 	}
-#Convective precipitation
+#Mean convective precipitation
 'mm per day' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 63 ;
 	}
-#Snowfall rate water equivalent
+#Mean snowfall rate water equivalent
 'mm per day' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 64 ;
 	}
-#Water run-off
+#Mean surface water runoff
 'mm per day' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 90 ;
@@ -330,17 +335,17 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 165 ;
 	}
-#Frequency of deep convection
+#Mean frequency of deep convection
 '%' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 170 ;
 	}
-#Frequency of shallow convection
+#Mean frequency of shallow convection
 '%' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 171 ;
 	}
-#Frequency of stratocumulus parameterisation
+#Mean frequency of stratocumulus parameterisation
 '%' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 172 ;
@@ -355,7 +360,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 174 ;
 	}
-#Evapotranspiration
+#Mean evapotranspiration
 'W m**-2' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 202 ;
@@ -380,11 +385,6 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 226 ;
 	}
-#Cloud liquid water
-'kg m**-2' = {
-	 table2Version = 200 ;
-	 indicatorOfParameter = 227 ;
-	}
 #Upward mass flux at cloud base
 'kg m**-2 s**-1' = {
 	 table2Version = 200 ;
@@ -410,22 +410,22 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 239 ;
 	}
-#Zonal momentum flux by long gravity wave
+#Mean zonal momentum flux by long gravity wave
 'N m**-2' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 147 ;
 	}
-#Meridional momentum flux by long gravity wave
+#Mean meridional momentum flux by long gravity wave
 'N m**-2' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 148 ;
 	}
-#Meridional momentum flux by short gravity wave
+#Mean meridional momentum flux by short gravity wave
 'N m**-2' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 154 ;
 	}
-#Zonal momentum flux by short gravity wave
+#Mean zonal momentum flux by short gravity wave
 'N m**-2' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 159 ;
@@ -950,7 +950,7 @@
 	 table2Version = 200 ;
 	 indicatorOfParameter = 85 ;
 	}
-#Snow Fall water equivalent
+#Snow depth water equivalent
 'kg m**-2' = {
 	 table2Version = 200 ;
 	 indicatorOfParameter = 65 ;
diff --git a/definitions/grib1/section.1.def b/definitions/grib1/section.1.def
index 062dc81..be0f16c 100644
--- a/definitions/grib1/section.1.def
+++ b/definitions/grib1/section.1.def
@@ -92,26 +92,25 @@ if ( indicatorOfTypeOfLevel == 101 or
 }
 else
 {
-  unsigned[2] level : can_be_missing,dump;
-  if (indicatorOfTypeOfLevel == 210) {
-    meta marsLevel scale(level,oneConstant,hundred) : read_only;
-	alias mars.levelist = marsLevel;
-  } 
-  alias vertical.level=level;
-  alias vertical.topLevel    = level;
-  alias vertical.bottomLevel = level;
-  alias ls.level=level;
-  alias lev=level;
-
+    unsigned[2] level : can_be_missing,dump;
+    if (indicatorOfTypeOfLevel == 210) {
+        meta marsLevel scale(level,oneConstant,hundred) : read_only;
+        alias mars.levelist = marsLevel;
+    }
+    alias vertical.level=level;
+    alias vertical.topLevel    = level;
+    alias vertical.bottomLevel = level;
+    alias ls.level=level;
+    alias lev=level;
 }
 
-if(	indicatorOfTypeOfLevel == 109 ||
-	indicatorOfTypeOfLevel == 100 ||
-	indicatorOfTypeOfLevel == 110 ||
-	indicatorOfTypeOfLevel == 113 ||
-	indicatorOfTypeOfLevel == 117)
+if( indicatorOfTypeOfLevel == 109 ||
+    indicatorOfTypeOfLevel == 100 ||
+    indicatorOfTypeOfLevel == 110 ||
+    indicatorOfTypeOfLevel == 113 ||
+    indicatorOfTypeOfLevel == 117)
 {
-	  alias mars.levelist = level;
+    alias mars.levelist = level;
 }
 
 unsigned[1] yearOfCentury : edition_specific ;
@@ -144,9 +143,9 @@ codetable[1] subCentre 'grib1/0.[centre].table' : dump;
 if(table2Version >= 128) {
   _if (centre != 98 && subCentre == 98) {
     alias centreForTable2 = subCentre;
-} else {
+  } else {
     alias centreForTable2 = centre;
-}
+  }
 } else {
   alias centreForTable2 = WMO;
 }
@@ -178,15 +177,15 @@ transient setLocalDefinition= 0 : no_copy;
 # Try different values of binaryScaleFactor and decimalScaleFactor to reduce packing error
 transient optimizeScaleFactor = 0;
 
-meta      dataDate            g1date(centuryOfReferenceTimeOfData,yearOfCentury,month,day) : dump;
-meta      year                evaluate(dataDate / 10000) ;
+meta dataDate   g1date(centuryOfReferenceTimeOfData,yearOfCentury,month,day) : dump;
+meta year       evaluate(dataDate / 10000) ;
 
 meta dataTime   time(hour,minute,second) : dump;
 meta julianDay  julian_day(dataDate,hour,minute,second) : edition_specific;
 
 codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
 
-concept_nofail stepType (timeRangeIndicator, "stepType.def", conceptsMasterDir, conceptsLocalDirAll)
+concept_nofail stepType (timeRangeIndicator, "stepType.def", conceptsMasterDir, conceptsLocalDirAll);
 
 #alias stepTypeInternal=stepType;
 #alias lengthOfTimeRange=numberIncludedInAverage;
@@ -195,18 +194,18 @@ concept_nofail stepType (timeRangeIndicator, "stepType.def", conceptsMasterDir,
 #alias timeIncrement=zero;
 
 #if (timeRangeIndicator==113) {
-#	alias lengthOfTimeRange=numberIncludedInAverage;
-#	alias indicatorOfUnitForTimeRange=unitOfTimeRange;
-#	alias indicatorOfUnitForTimeIncrement=unitOfTimeRange;
-#	alias timeIncrement=P2;
-#	alias forecastTime=P1;
+#    alias lengthOfTimeRange=numberIncludedInAverage;
+#    alias indicatorOfUnitForTimeRange=unitOfTimeRange;
+#    alias indicatorOfUnitForTimeIncrement=unitOfTimeRange;
+#    alias timeIncrement=P2;
+#    alias forecastTime=P1;
 #}
 
 #if (stepType is "accum") {
-#		transient accumulationRange=P2-P1;
-#		alias lengthOfTimeRange=accumulationRange;
-#		alias forecastTime=P1;
-#		alias indicatorOfUnitForTimeRange=unitOfTimeRange;
+#        transient accumulationRange=P2-P1;
+#        alias lengthOfTimeRange=accumulationRange;
+#        alias forecastTime=P1;
+#        alias indicatorOfUnitForTimeRange=unitOfTimeRange;
 #}
 
 #conversion 1->2
@@ -237,6 +236,12 @@ alias mars.param  = marsParam;
 if (centre == 34 && subCentre == 241)
 {
    alias mars.param = paramId;
+
+   if (indicatorOfTypeOfLevel == 101) {
+      # See ECC-467
+      constant sfc_levtype = "sfc";
+      alias mars.levtype = sfc_levtype;
+   }
 }
 
 meta time.validityDate validity_date(dataDate,dataTime,step,stepUnits);
@@ -262,21 +267,20 @@ if(((section1Length > 40) or new() or setLocalDefinition> 0) and deleteLocalDefi
       }
     }
 
-	template_nofail marsKeywords "mars/grib.[stream:s].[type:s].def";
-	#template marsKeywords "mars/grib.[stream:s].[type:s].def";
+    template_nofail marsKeywords "mars/grib.[stream:s].[type:s].def";
+    #template marsKeywords "mars/grib.[stream:s].[type:s].def";
 
   }
   else
-  { 
-	if ( !new() || setLocalDefinition ) {
-		# Other centres
-		pad reservedNeedNotBePresent(12);
-		template_nofail  localDefinition  "grib1/local.[centre:l].def";
+  {
+    if ( !new() || setLocalDefinition ) {
+        # Other centres
+        pad reservedNeedNotBePresent(12);
+        template_nofail  localDefinition  "grib1/local.[centre:l].def";
     
-		section_padding localExtensionPadding : read_only;
-	}
+        section_padding localExtensionPadding : read_only;
+    }
   }
-
 }
 else
 {
@@ -311,4 +315,10 @@ alias time.startStep=startStep;
 alias time.endStep=endStep;
 alias time.stepType=stepType;
 
+# ECC-457: GRIB1 to GRIB2 conversion
+concept_nofail stepTypeForConversion (unknown, "stepTypeForConversion.def", conceptsMasterDir, conceptsLocalDirAll);
+if (stepTypeForConversion is "accum" ) {
+    alias productDefinitionTemplateNumber=eight;
+}
+
 meta md5Section1 md5(offsetSection1,section1Length);
diff --git a/definitions/grib1/stepTypeForConversion.def b/definitions/grib1/stepTypeForConversion.def
new file mode 100644
index 0000000..c8b68e6
--- /dev/null
+++ b/definitions/grib1/stepTypeForConversion.def
@@ -0,0 +1,3 @@
+# Concept stepTypeForConversion
+# See ECC-457
+"unknown" = {dummy=0;}
diff --git a/definitions/grib2/boot.def b/definitions/grib2/boot.def
index 5edcc86..b8e4333 100644
--- a/definitions/grib2/boot.def
+++ b/definitions/grib2/boot.def
@@ -9,7 +9,7 @@
 
 # This gets updated twice a year by WMO.
 # See http://www.wmo.int/pages/prog/www/WMOCodes/WMO306_vI2/LatestVERSION/LatestVERSION.html
-constant tablesVersionLatest = 18 : edition_specific;
+constant tablesVersionLatest = 19 : edition_specific;
 
 constant one = 1 : hidden ;
 constant million = 1000000 : hidden;
diff --git a/definitions/grib2/cfVarName.def b/definitions/grib2/cfVarName.def
index 809c36e..c20aa39 100644
--- a/definitions/grib2/cfVarName.def
+++ b/definitions/grib2/cfVarName.def
@@ -580,6 +580,28 @@
 	 typeOfStatisticalProcessing = 1 ;
 	 typeOfFirstFixedSurface = 1 ;
 	}
+#Evaporation in the last 6 hours
+'eva06' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 lengthOfTimeRange = 6 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 is_uerra = 0 ;
+	}
+#Evaporation in the last 24 hours
+'eva24' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 lengthOfTimeRange = 24 ;
+	 is_uerra = 0 ;
+	}
 #Soil temperature
 'sot' = {
 	 discipline = 2 ;
diff --git a/definitions/grib2/grib2LocalSectionNumber.98.table b/definitions/grib2/grib2LocalSectionNumber.98.table
index c26fccc..cd2de3e 100644
--- a/definitions/grib2/grib2LocalSectionNumber.98.table
+++ b/definitions/grib2/grib2LocalSectionNumber.98.table
@@ -1,5 +1,6 @@
 0 0  Empty local section
 1 1  MARS labelling
+5 5  Forecast probability data
 7 7  Sensitivity data
 9 9  Singular vectors and ensemble perturbations
 11 11  Supplementary data used by the analysis
diff --git a/version.sh b/definitions/grib2/local.98.5.def
similarity index 62%
copy from version.sh
copy to definitions/grib2/local.98.5.def
index ef984d4..78c9556 100644
--- a/version.sh
+++ b/definitions/grib2/local.98.5.def
@@ -6,17 +6,7 @@
 # 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.
 #
-# Package name and versioning information
-#
-#
-# Package base name
-PACKAGE_NAME='eccodes'
 
-# Package version
-ECCODES_MAJOR_VERSION=2
-ECCODES_MINOR_VERSION=2
-ECCODES_REVISION_VERSION=0
+label "empty section";
 
-ECCODES_CURRENT=1
-ECCODES_REVISION=0
-ECCODES_AGE=0
+# END   1/local.98.5 ----------------------------------------------------------------------
diff --git a/definitions/grib2/localConcepts/ecmf/cfVarName.def b/definitions/grib2/localConcepts/ecmf/cfVarName.def
index 864e44c..3d59929 100644
--- a/definitions/grib2/localConcepts/ecmf/cfVarName.def
+++ b/definitions/grib2/localConcepts/ecmf/cfVarName.def
@@ -9467,6 +9467,30 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 94 ;
 	}
+#Evaporation from the top of canopy
+'evatc' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 100 ;
+	}
+#Evaporation from bare soil
+'evabs' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 101 ;
+	}
+#Evaporation from open water surfaces excluding oceans
+'evaow' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 102 ;
+	}
+#Evaporation from vegetation transpiration
+'evavt' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 103 ;
+	}
 #Surface solar radiation downward clear-sky
 'ssrdc' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/name.def b/definitions/grib2/localConcepts/ecmf/name.def
index de3678e..d58f3b8 100644
--- a/definitions/grib2/localConcepts/ecmf/name.def
+++ b/definitions/grib2/localConcepts/ecmf/name.def
@@ -9467,6 +9467,30 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 94 ;
 	}
+#Evaporation from the top of canopy
+'Evaporation from the top of canopy' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 100 ;
+	}
+#Evaporation from bare soil
+'Evaporation from bare soil' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 101 ;
+	}
+#Evaporation from open water surfaces excluding oceans
+'Evaporation from open water surfaces excluding oceans' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 102 ;
+	}
+#Evaporation from vegetation transpiration
+'Evaporation from vegetation transpiration' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 103 ;
+	}
 #Surface solar radiation downward clear-sky
 'Surface solar radiation downward clear-sky' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/paramId.def b/definitions/grib2/localConcepts/ecmf/paramId.def
index 857ac69..28b51b2 100644
--- a/definitions/grib2/localConcepts/ecmf/paramId.def
+++ b/definitions/grib2/localConcepts/ecmf/paramId.def
@@ -9467,6 +9467,30 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 94 ;
 	}
+#Evaporation from the top of canopy
+'228100' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 100 ;
+	}
+#Evaporation from bare soil
+'228101' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 101 ;
+	}
+#Evaporation from open water surfaces excluding oceans
+'228102' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 102 ;
+	}
+#Evaporation from vegetation transpiration
+'228103' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 103 ;
+	}
 #Surface solar radiation downward clear-sky
 '228129' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/shortName.def b/definitions/grib2/localConcepts/ecmf/shortName.def
index 5987937..1c2b9ec 100644
--- a/definitions/grib2/localConcepts/ecmf/shortName.def
+++ b/definitions/grib2/localConcepts/ecmf/shortName.def
@@ -9467,6 +9467,30 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 94 ;
 	}
+#Evaporation from the top of canopy
+'evatc' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 100 ;
+	}
+#Evaporation from bare soil
+'evabs' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 101 ;
+	}
+#Evaporation from open water surfaces excluding oceans
+'evaow' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 102 ;
+	}
+#Evaporation from vegetation transpiration
+'evavt' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 103 ;
+	}
 #Surface solar radiation downward clear-sky
 'ssrdc' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/ecmf/units.def b/definitions/grib2/localConcepts/ecmf/units.def
index c0b92e2..341b0f1 100644
--- a/definitions/grib2/localConcepts/ecmf/units.def
+++ b/definitions/grib2/localConcepts/ecmf/units.def
@@ -9467,6 +9467,30 @@
 	 parameterCategory = 228 ;
 	 parameterNumber = 94 ;
 	}
+#Evaporation from the top of canopy
+'m of water equivalent' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 100 ;
+	}
+#Evaporation from bare soil
+'m of water equivalent' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 101 ;
+	}
+#Evaporation from open water surfaces excluding oceans
+'m of water equivalent' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 102 ;
+	}
+#Evaporation from vegetation transpiration
+'m of water equivalent' = {
+	 discipline = 192 ;
+	 parameterCategory = 228 ;
+	 parameterNumber = 103 ;
+	}
 #Surface solar radiation downward clear-sky
 'J m**-2' = {
 	 discipline = 192 ;
diff --git a/definitions/grib2/localConcepts/edzw/default_step_units.def b/definitions/grib2/localConcepts/edzw/default_step_units.def
new file mode 100644
index 0000000..1403376
--- /dev/null
+++ b/definitions/grib2/localConcepts/edzw/default_step_units.def
@@ -0,0 +1,4 @@
+# Override for sub-hourly steps
+# See ECC-438
+label "subhourly";
+alias defaultStepUnits=indicatorOfUnitOfTimeRange;
diff --git a/definitions/grib2/name.def b/definitions/grib2/name.def
index 06c36a8..f096294 100644
--- a/definitions/grib2/name.def
+++ b/definitions/grib2/name.def
@@ -580,6 +580,28 @@
 	 typeOfStatisticalProcessing = 1 ;
 	 typeOfFirstFixedSurface = 1 ;
 	}
+#Evaporation in the last 6 hours
+'Evaporation in the last 6 hours' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 lengthOfTimeRange = 6 ;
+	 is_uerra = 0 ;
+	}
+#Evaporation in the last 24 hours
+'Evaporation in the last 24 hours' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 is_uerra = 0 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 lengthOfTimeRange = 24 ;
+	}
 #Soil temperature
 'Soil temperature' = {
 	 discipline = 2 ;
diff --git a/definitions/grib2/paramId.def b/definitions/grib2/paramId.def
index a6c29e7..ed317d7 100644
--- a/definitions/grib2/paramId.def
+++ b/definitions/grib2/paramId.def
@@ -580,6 +580,28 @@
 	 typeOfFirstFixedSurface = 1 ;
 	 typeOfStatisticalProcessing = 1 ;
 	}
+#Evaporation in the last 6 hours
+'260265' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 is_uerra = 0 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 lengthOfTimeRange = 6 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	}
+#Evaporation in the last 24 hours
+'260266' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 lengthOfTimeRange = 24 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 is_uerra = 0 ;
+	}
 #Soil temperature
 '260360' = {
 	 discipline = 2 ;
diff --git a/definitions/grib2/products_uerra.def b/definitions/grib2/products_uerra.def
index 7e2880b..8ea23e7 100644
--- a/definitions/grib2/products_uerra.def
+++ b/definitions/grib2/products_uerra.def
@@ -62,6 +62,19 @@ concept marsType {
      typeOfProcessedData = 0;
    }
 
+   # See ECC-456. Special rule for Swedish data
+   # oi is Optimal Interpolation
+   oi = {
+     centre = 82;
+     typeOfGeneratingProcess = 0;
+     generatingProcessIdentifier = 50;
+   }
+   "4" = {
+     centre = 82;
+     typeOfGeneratingProcess = 0;
+     generatingProcessIdentifier = 50;
+   }
+
    "default" = {
      dummyc = 0;
    }
diff --git a/definitions/grib2/sections.def b/definitions/grib2/sections.def
index e1364f2..6e36bb2 100644
--- a/definitions/grib2/sections.def
+++ b/definitions/grib2/sections.def
@@ -19,11 +19,13 @@
    transient grib2LocalSectionPresent=0;
    alias section2Used=zero;
    alias setLocalDefinition=grib2LocalSectionPresent;
+   transient deleteLocalDefinition=0;
 
-   if( sectionNumber == 2 or grib2LocalSectionPresent>0 ){
+   if( (sectionNumber == 2 or grib2LocalSectionPresent>0) and deleteLocalDefinition == 0 ){
       position     sectionPosition;
       template     section_2 "grib2/section.2.def";
-   } 
+   }
+   alias localUsePresent=section2Used;
    
    lookup[1]    sectionNumber(4) ;
 
diff --git a/definitions/grib2/shortName.def b/definitions/grib2/shortName.def
index 1594d44..3939c16 100644
--- a/definitions/grib2/shortName.def
+++ b/definitions/grib2/shortName.def
@@ -580,6 +580,28 @@
 	 typeOfStatisticalProcessing = 1 ;
 	 typeOfFirstFixedSurface = 1 ;
 	}
+#Evaporation in the last 6 hours
+'eva06' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 lengthOfTimeRange = 6 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 is_uerra = 0 ;
+	}
+#Evaporation in the last 24 hours
+'eva24' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 lengthOfTimeRange = 24 ;
+	 is_uerra = 0 ;
+	}
 #Soil temperature
 'sot' = {
 	 discipline = 2 ;
diff --git a/definitions/grib2/tables/1.0.table b/definitions/grib2/tables/1.0.table
index 0e6f26f..06710c1 100644
--- a/definitions/grib2/tables/1.0.table
+++ b/definitions/grib2/tables/1.0.table
@@ -18,6 +18,7 @@
 16 16 Version implemented on 11 November 2015
 17 17 Version implemented on 4 May 2016
 18 18 Version implemented on 2 November 2016
-19 19 Pre-operational to be implemented by next amendment
-# 20-254 Future versions
+19 19 Version implemented on 3 May 2017
+20 20 Pre-operational to be implemented by next amendment
+# 21-254 Future versions
 255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used.
diff --git a/definitions/grib2/tables/18/4.0.table b/definitions/grib2/tables/18/4.0.table
index 63ffa4a..5ad2ed8 100644
--- a/definitions/grib2/tables/18/4.0.table
+++ b/definitions/grib2/tables/18/4.0.table
@@ -51,7 +51,7 @@
 70 70 Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a point in time
 71 71 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time
 72 72 Post-processing average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval
-73 73 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or n a horizontal layer, in a continuous or non-continuous time interval
+73 73 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval
 # 74-90 Reserved
 91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
 # 92-253 Reserved
diff --git a/definitions/grib2/tables/19/0.0.table b/definitions/grib2/tables/19/0.0.table
new file mode 100644
index 0000000..b24c505
--- /dev/null
+++ b/definitions/grib2/tables/19/0.0.table
@@ -0,0 +1,10 @@
+# Code table 0.0 - Discipline of processed data in the GRIB message, number of GRIB Master table
+0 0 Meteorological products 
+1 1 Hydrological products 
+2 2 Land surface products 
+3 3 Space products 
+# 4-9 Reserved 
+10 10 Oceanographic products 
+# 11-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/1.0.table b/definitions/grib2/tables/19/1.0.table
new file mode 100644
index 0000000..bd54828
--- /dev/null
+++ b/definitions/grib2/tables/19/1.0.table
@@ -0,0 +1,24 @@
+# Code table 1.0 - GRIB master tables version number
+0 0 Experimental 
+1 1 Version implemented on 7 November 2001 
+2 2 Version implemented on 4 November 2003 
+3 3 Version implemented on 2 November 2005 
+4 4 Version implemented on 7 November 2007 
+5 5 Version implemented on 4 November 2009 
+6 6 Version implemented on 15 September 2010 
+7 7 Version implemented on 4 May 2011 
+8 8 Version implemented on 2 November 2011 
+9 9 Version implemented on 2 May 2012 
+10 10 Version implemented on 7 November 2012 
+11 11 Version implemented on 8 May 2013 
+12 12 Version implemented on 14 November 2013 
+13 13 Version implemented on 7 May 2014 
+14 14 Version implemented on 5 November 2014 
+15 15 Version implemented on 6 May 2015 
+16 16 Version implemented on 11 November 2015 
+17 17 Version implemented on 4 May 2016 
+18 18 Version implemented on 2 November 2016
+19 19 Version implemented on 3 May 2017
+20 20 Pre-operational to be implemented by next amendment
+# 21-254 Future versions
+255 255 Master tables not used. Local table entries and local templates may use the entire range of the table, not just those sections marked Reserved for local used.
diff --git a/definitions/grib2/tables/19/1.1.table b/definitions/grib2/tables/19/1.1.table
new file mode 100644
index 0000000..d50f8fd
--- /dev/null
+++ b/definitions/grib2/tables/19/1.1.table
@@ -0,0 +1,4 @@
+# Code table 1.1 - GRIB local tables version number
+0 0 Local tables not used. Only table entries and templates from the current master table are valid 
+# 1-254 Number of local tables version used 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/1.2.table b/definitions/grib2/tables/19/1.2.table
new file mode 100644
index 0000000..934b704
--- /dev/null
+++ b/definitions/grib2/tables/19/1.2.table
@@ -0,0 +1,8 @@
+# Code table 1.2 - Significance of reference time
+0 0 Analysis 
+1 1 Start of forecast 
+2 2 Verifying time of forecast 
+3 3 Observation time 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/1.3.table b/definitions/grib2/tables/19/1.3.table
new file mode 100644
index 0000000..0c95269
--- /dev/null
+++ b/definitions/grib2/tables/19/1.3.table
@@ -0,0 +1,14 @@
+# Code table 1.3 - Production status of data
+0 0 Operational products 
+1 1 Operational test products 
+2 2 Research products 
+3 3 Re-analysis products 
+4 4 THORPEX Interactive Grand Global Ensemble (TIGGE) 
+5 5 THORPEX Interactive Grand Global Ensemble test (TIGGE)
+6 6 S2S operational products 
+7 7 S2S test products 
+8 8 Uncertainties in Ensembles of Regional ReAnalyses project (UERRA)
+9 9 Uncertainties in Ensembles of Regional ReAnalyses project test (UERRA)
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/1.4.table b/definitions/grib2/tables/19/1.4.table
new file mode 100644
index 0000000..03203d8
--- /dev/null
+++ b/definitions/grib2/tables/19/1.4.table
@@ -0,0 +1,13 @@
+# Code table 1.4 - Type of data
+0 an Analysis products 
+1 fc Forecast products 
+2 af Analysis and forecast products 
+3 cf Control forecast products 
+4 pf Perturbed forecast products 
+5 cp Control and perturbed forecast products 
+6 sa Processed satellite observations 
+7 ra Processed radar observations 
+8 ep Event probability 
+# 9-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/19/1.5.table b/definitions/grib2/tables/19/1.5.table
new file mode 100644
index 0000000..b2cf9f0
--- /dev/null
+++ b/definitions/grib2/tables/19/1.5.table
@@ -0,0 +1,7 @@
+# Code table 1.5 - Identification template number
+0 0 Calendar definition 
+1 1 Paleontological offset 
+2 2 Calendar definition and paleontological offset 
+# 3-32767 Reserved 
+# 32768-65534 Reserved for local use 
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/19/1.6.table b/definitions/grib2/tables/19/1.6.table
new file mode 100644
index 0000000..5db9219
--- /dev/null
+++ b/definitions/grib2/tables/19/1.6.table
@@ -0,0 +1,8 @@
+# Code table 1.6 - Type of calendar
+0 0 Gregorian 
+1 1 360-day 
+2 2 365-day 
+3 3 Proleptic Gregorian 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/3.0.table b/definitions/grib2/tables/19/3.0.table
new file mode 100644
index 0000000..45187b8
--- /dev/null
+++ b/definitions/grib2/tables/19/3.0.table
@@ -0,0 +1,6 @@
+# Code table 3.0 - Source of grid definition
+0 0 Specified in Code table 3.1 
+1 1 Predetermined grid definition (Defined by originating centre)
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 A grid definition does not apply to this product 
diff --git a/definitions/grib2/tables/19/3.1.table b/definitions/grib2/tables/19/3.1.table
new file mode 100644
index 0000000..aa8d987
--- /dev/null
+++ b/definitions/grib2/tables/19/3.1.table
@@ -0,0 +1,47 @@
+# Code table 3.1 - Grid definition template number
+0 0 Latitude/longitude (Also called equidistant cylindrical, or Plate Carree)
+1 1 Rotated latitude/longitude
+2 2 Stretched latitude/longitude
+3 3 Stretched and rotated latitude/longitude
+4 4 Variable resolution latitude/longitude 
+5 5 Variable resolution rotated latitude/longitude 
+# 6-9 Reserved
+10 10 Mercator
+12 12 Transverse Mercator
+# 13-19 Reserved
+20 20 Polar stereographic projection (Can be south or north)
+# 21-29 Reserved 
+30 30 Lambert conformal (Can be secant or tangent, conical or bipolar)
+31 31 Albers equal area 
+# 32-39 Reserved 
+40 40 Gaussian latitude/longitude 
+41 41 Rotated Gaussian latitude/longitude 
+42 42 Stretched Gaussian latitude/longitude 
+43 43 Stretched and rotated Gaussian latitude/longitude 
+# 44-49 Reserved 
+50 50 Spherical harmonic coefficients 
+51 51 Rotated spherical harmonic coefficients 
+52 52 Stretched spherical harmonic coefficients 
+53 53 Stretched and rotated spherical harmonic coefficients 
+# 54-89 Reserved 
+90 90 Space view perspective or orthographic 
+# 91-99 Reserved 
+100 100 Triangular grid based on an icosahedron 
+101 101 General unstructured grid 
+# 102-109 Reserved 
+110 110 Equatorial azimuthal equidistant projection 
+# 111-119 Reserved 
+120 120 Azimuth-range projection 
+# 121-129 Reserved
+130 130 Irregular latitude/longitude grid
+# 131-139 Reserved
+140 140 Lambert azimuthal equal area projection 
+# 141-999 Reserved 
+1000 1000 Cross-section grid with points equally spaced on the horizontal 
+# 1001-1099 Reserved 
+1100 1100 Hovmoller diagram grid with points equally spaced on the horizontal 
+# 1101-1199 Reserved 
+1200 1200 Time section grid 
+# 1201-32767 Reserved 
+# 32768-65534 Reserved for local use 
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/19/3.10.table b/definitions/grib2/tables/19/3.10.table
new file mode 100644
index 0000000..afa8843
--- /dev/null
+++ b/definitions/grib2/tables/19/3.10.table
@@ -0,0 +1,8 @@
+# Flag table 3.10 - Scanning mode for one diamond
+1 0 Points scan in +i direction, i.e. from pole to Equator 
+1 1 Points scan in -i direction, i.e. from Equator to pole 
+2 0 Points scan in +j direction, i.e. from west to east 
+2 1 Points scan in -j direction, i.e. from east to west 
+3 0 Adjacent points in i direction are consecutive 
+3 1 Adjacent points in j direction are consecutive 
+# 4-8 Reserved 
diff --git a/definitions/grib2/tables/19/3.11.table b/definitions/grib2/tables/19/3.11.table
new file mode 100644
index 0000000..e516a2a
--- /dev/null
+++ b/definitions/grib2/tables/19/3.11.table
@@ -0,0 +1,7 @@
+# Code table 3.11 - Interpretation of list of numbers at end of section 3
+0 0 There is no appended list 
+1 1 Numbers define number of points corresponding to full coordinate circles (i.e. parallels), coordinate values on each circle are multiple of the circle mesh, and extreme coordinate values given in grid definition (i.e. extreme longitudes) may not be reached in all rows 
+2 2 Numbers define number of points corresponding to coordinate lines delimited by extreme coordinate values given in grid definition (i.e. extreme longitudes) which are present in each row 
+3 3 Numbers define the actual latitudes for each row in the grid. The list of numbers are integer values of the valid latitudes in microdegrees (scaled by 10-6) or in unit equal to the ratio of the basic angle and the subdivisions number for each row, in the same order as specified in the scanning mode flag (bit no. 2) 
+# 4-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/3.15.table b/definitions/grib2/tables/19/3.15.table
new file mode 100644
index 0000000..331217e
--- /dev/null
+++ b/definitions/grib2/tables/19/3.15.table
@@ -0,0 +1,23 @@
+# Code table 3.15 - Physical meaning of vertical coordinate
+# 0-19 Reserved 
+20 20 Temperature (K)
+# 21-99 Reserved 
+100 100 Pressure (Pa)
+101 101 Pressure deviation from mean sea level (Pa)
+102 102 Altitude above mean sea level (m)
+103 103 Height above ground (m)
+104 104 Sigma coordinate 
+105 105 Hybrid coordinate 
+106 106 Depth below land surface (m)
+107 pt Potential temperature (theta) (K)
+108 108 Pressure deviation from ground to level (Pa)
+109 pv Potential vorticity (K m-2 kg-1 s-1)
+110 110 Geometrical height (m)
+111 111 Eta coordinate 
+112 112 Geopotential height (gpm)
+113 113 Logarithmic hybrid coordinate 
+# 114-159 Reserved 
+160 160 Depth below sea level (m)
+# 161-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/3.2.table b/definitions/grib2/tables/19/3.2.table
new file mode 100644
index 0000000..1b5c824
--- /dev/null
+++ b/definitions/grib2/tables/19/3.2.table
@@ -0,0 +1,14 @@
+# Code table 3.2 - Shape of the Earth
+0 0 Earth assumed spherical with radius = 6 367 470.0 m 
+1 1 Earth assumed spherical with radius specified (in m) by data producer 
+2 2 Earth assumed oblate spheroid with size as determined by IAU in 1965 (major axis = 6 378 160.0 m, minor axis = 6 356 775.0 m, f = 1/297.0) 
+3 3 Earth assumed oblate spheroid with major and minor axes specified (in km) by data producer 
+4 4 Earth assumed oblate spheroid as defined in IAG-GRS80 model (major axis = 6 378 137.0 m, minor axis = 6 356 752.314 m, f = 1/298.257 222 101) 
+5 5 Earth assumed represented by WGS-84 (as used by ICAO since 1998) 
+6 6 Earth assumed spherical with radius of 6 371 229.0 m 
+7 7 Earth assumed oblate spheroid with major or minor axes specified (in m) by data producer 
+8 8 Earth model assumed spherical with radius of 6 371 200 m, but the horizontal datum of the resulting latitude/longitude field is the WGS-84 reference frame 
+9 9 Earth represented by the Ordnance Survey Great Britain 1936 Datum, using the Airy 1830 Spheroid, the Greenwich meridian as 0 longitude, and the Newlyn datum as mean sea level, 0 height 
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/3.20.table b/definitions/grib2/tables/19/3.20.table
new file mode 100644
index 0000000..efbf08d
--- /dev/null
+++ b/definitions/grib2/tables/19/3.20.table
@@ -0,0 +1,6 @@
+# Code table 3.20 - Type of horizontal line
+0 0 Rhumb 
+1 1 Great circle 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/3.21.table b/definitions/grib2/tables/19/3.21.table
new file mode 100644
index 0000000..88dbb90
--- /dev/null
+++ b/definitions/grib2/tables/19/3.21.table
@@ -0,0 +1,8 @@
+# Code table 3.21 - Vertical dimension coordinate values definition
+0 0 Explicit coordinate values set 
+1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 
+# 2-10 Reserved 
+11 11 Geometric coordinates f(1) = C1, f(n) = C2 * f(n-1) 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/3.3.table b/definitions/grib2/tables/19/3.3.table
new file mode 100644
index 0000000..5dd7c70
--- /dev/null
+++ b/definitions/grib2/tables/19/3.3.table
@@ -0,0 +1,9 @@
+# Flag table 3.3 - Resolution and component flags
+# 1-2 Reserved 
+3 0 i direction increments not given 
+3 1 i direction increments given 
+4 0 j direction increments not given 
+4 1 j direction increments given 
+5 0 Resolved u- and v- components of vector quantities relative to easterly and northerly directions 
+5 1 Resolved u- and v- components of vector quantities relative to the defined grid in the direction of increasing x and y (or i and j) coordinates, respectively 
+# 6-8 Reserved - set to zero 
diff --git a/definitions/grib2/tables/19/3.4.table b/definitions/grib2/tables/19/3.4.table
new file mode 100644
index 0000000..897b813
--- /dev/null
+++ b/definitions/grib2/tables/19/3.4.table
@@ -0,0 +1,17 @@
+# Flag table 3.4 - Scanning mode
+1 0 Points of first row or column scan in the +i (+x) direction 
+1 1 Points of first row or column scan in the -i (-x) direction 
+2 0 Points of first row or column scan in the -j (-y) direction 
+2 1 Points of first row or column scan in the +j (+y) direction 
+3 0 Adjacent points in i (x) direction are consecutive 
+3 1 Adjacent points in j (y) direction is consecutive 
+4 0 All rows scan in the same direction 
+4 1 Adjacent rows scans in the opposite direction 
+5 0 Points within odd rows are not offset in i (x) direction 
+5 1 Points within odd rows are offset by Di/2 in i (x) direction 
+6 0 Points within even rows are not offset in i (x) direction 
+6 1 Points within even rows are offset by Di/2 in i (x) direction 
+7 0 Points are not offset in j (y) direction 
+7 1 Points are offset by Dj/2 in j (y) direction 
+8 0 Rows have Ni grid points and columns have Nj grid points 
+8 1 Rows have Ni grid points if points are not offset in i direction  Rows have Ni-1 grid points if points are offset by Di/2 in i direction  Columns have Nj grid points if points are not offset in j direction  Columns have Nj-1 grid points if points are offset by Dj/2 in j direction 
diff --git a/definitions/grib2/tables/19/3.5.table b/definitions/grib2/tables/19/3.5.table
new file mode 100644
index 0000000..eabdde8
--- /dev/null
+++ b/definitions/grib2/tables/19/3.5.table
@@ -0,0 +1,5 @@
+# Flag table 3.5 - Projection centre
+1 0 North Pole is on the projection plane 
+1 1 South Pole is on the projection plane 
+2 0 Only one projection centre is used 
+2 1 Projection is bipolar and symmetric 
diff --git a/definitions/grib2/tables/19/3.6.table b/definitions/grib2/tables/19/3.6.table
new file mode 100644
index 0000000..d381959
--- /dev/null
+++ b/definitions/grib2/tables/19/3.6.table
@@ -0,0 +1,2 @@
+# Code table 3.6 - Spectral data representation type
+1 1 see separate doc or pdf file
diff --git a/definitions/grib2/tables/19/3.7.table b/definitions/grib2/tables/19/3.7.table
new file mode 100644
index 0000000..0a7d6ef
--- /dev/null
+++ b/definitions/grib2/tables/19/3.7.table
@@ -0,0 +1,5 @@
+# Code table 3.7 - Spectral data representation mode
+0 0 Reserved 
+1 1 see separate doc or pdf file
+# 2-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/3.8.table b/definitions/grib2/tables/19/3.8.table
new file mode 100644
index 0000000..844e742
--- /dev/null
+++ b/definitions/grib2/tables/19/3.8.table
@@ -0,0 +1,7 @@
+# Code table 3.8 - Grid point position
+0 0 Grid points at triangle vertices 
+1 1 Grid points at centres of triangles 
+2 2 Grid points at midpoints of triangle sides 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/3.9.table b/definitions/grib2/tables/19/3.9.table
new file mode 100644
index 0000000..fd730bc
--- /dev/null
+++ b/definitions/grib2/tables/19/3.9.table
@@ -0,0 +1,4 @@
+# Flag table 3.9 - Numbering order of diamonds as seen from the corresponding pole
+1 0 Clockwise orientation 
+1 1 Anti-clockwise (i.e. counter-clockwise) orientation 
+# 2-8 Reserved 
diff --git a/definitions/grib2/tables/18/4.0.table b/definitions/grib2/tables/19/4.0.table
similarity index 90%
copy from definitions/grib2/tables/18/4.0.table
copy to definitions/grib2/tables/19/4.0.table
index 63ffa4a..906bf12 100644
--- a/definitions/grib2/tables/18/4.0.table
+++ b/definitions/grib2/tables/19/4.0.table
@@ -15,7 +15,7 @@
 13 13 Derived forecasts based on a cluster of ensemble members over a rectangular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
 14 14 Derived forecasts based on a cluster of ensemble members over a circular area, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval 
 15 15 Average, accumulation, extreme values, or other statistically processed values over a spatial area at a horizontal level or in a horizontal layer at a point in time 
-# 16-19 Reserved
+# 16-19 Reserved 
 20 20 Radar product 
 # 21-29 Reserved 
 30 30 Satellite product (deprecated) 
@@ -23,7 +23,7 @@
 32 32 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data 
 33 33 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for simulated (synthetic) satellite data 
 34 34 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous interval for simulated (synthetic) satellite data 
-# 35-39 Reserved
+# 35-39 Reserved 
 311 311 Satellite product auxiliary information
 40 40 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents 
 41 41 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents 
@@ -34,27 +34,30 @@
 46 46 Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol 
 47 47 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for aerosol 
 48 48 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol 
-49 49 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol
+49 49 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for optical properties of aerosol 
 # 50 Reserved 
 51 51 Categorical forecasts at a horizontal level or in a horizontal layer at a point in time 
 # 52 Reserved
 53 53 Partitioned parameters at a horizontal level or in a horizontal layer at a point in time 
 54 54 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for partitioned parameters 
 55 55 Spatio-temporal changing tiles at a horizontal level or horizontal layer at a point in time 
-56 56 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (deprecated)
+56 56 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (deprecated) 
 57 57 Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function 
-58 58 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function
-59 59 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (corrected version of template 4.56)
+58 58 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents based on a distribution function 
+59 59 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for spatio-temporal changing tile parameters (corrected version of template 4.56) 
 60 60 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time 
 61 61 Individual ensemble reforecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval 
-# 62-69 Reserved
+# 62-66 Reserved 
+67 67 Average, accumulation and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents based on a distribution function 
+68 68 Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents based on a distribution function 
+# 69 Reserved
 70 70 Post-processing analysis or forecast at a horizontal level or in a horizontal layer at a point in time
-71 71 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time
-72 72 Post-processing average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval
-73 73 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or n a horizontal layer, in a continuous or non-continuous time interval
-# 74-90 Reserved
+71 71 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time 
+72 72 Post-processing average, accumulation, extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
+73 73 Post-processing individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer, in a continuous or non-continuous time interval 
+# 74-90 Reserved 
 91 91 Categorical forecasts at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval 
-# 92-253 Reserved
+# 92-253 Reserved 
 254 254 CCITT IA5 character string 
 # 255-999 Reserved 
 1000 1000 Cross-section of analysis and forecast at a point in time 
diff --git a/definitions/grib2/tables/19/4.1.0.table b/definitions/grib2/tables/19/4.1.0.table
new file mode 100644
index 0000000..04cfd78
--- /dev/null
+++ b/definitions/grib2/tables/19/4.1.0.table
@@ -0,0 +1,27 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Temperature 
+1 1 Moisture 
+2 2 Momentum 
+3 3 Mass 
+4 4 Short-wave radiation 
+5 5 Long-wave radiation 
+6 6 Cloud 
+7 7 Thermodynamic stability indices 
+8 8 Kinematic stability indices 
+9 9 Temperature probabilities 
+10 10 Moisture probabilities 
+11 11 Momentum probabilities 
+12 12 Mass probabilities 
+13 13 Aerosols 
+14 14 Trace gases (e.g. ozone, CO2) 
+15 15 Radar 
+16 16 Forecast radar imagery 
+17 17 Electrodynamics 
+18 18 Nuclear/radiology 
+19 19 Physical atmospheric properties 
+20 20 Atmospheric chemical constituents 
+# 21-189 Reserved 
+190 190 CCITT IA5 string 
+191 191 Miscellaneous 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.1.1.table b/definitions/grib2/tables/19/4.1.1.table
new file mode 100644
index 0000000..7b22b6f
--- /dev/null
+++ b/definitions/grib2/tables/19/4.1.1.table
@@ -0,0 +1,7 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Hydrology basic products 
+1 1 Hydrology probabilities 
+2 2 Inland water and sediment properties 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.1.10.table b/definitions/grib2/tables/19/4.1.10.table
new file mode 100644
index 0000000..a9b20eb
--- /dev/null
+++ b/definitions/grib2/tables/19/4.1.10.table
@@ -0,0 +1,10 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Waves 
+1 1 Currents 
+2 2 Ice 
+3 3 Surface properties 
+4 4 Subsurface properties 
+# 5-190 Reserved 
+191 191 Miscellaneous 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.1.192.table b/definitions/grib2/tables/19/4.1.192.table
new file mode 100644
index 0000000..c428aca
--- /dev/null
+++ b/definitions/grib2/tables/19/4.1.192.table
@@ -0,0 +1,4 @@
+#Discipline 192: ECMWF local parameters
+255 255 Missing
+
+
diff --git a/definitions/grib2/tables/19/4.1.2.table b/definitions/grib2/tables/19/4.1.2.table
new file mode 100644
index 0000000..5b488fe
--- /dev/null
+++ b/definitions/grib2/tables/19/4.1.2.table
@@ -0,0 +1,9 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Vegetation/biomass 
+1 1 Agri-/aquacultural special products 
+2 2 Transportation-related products 
+3 3 Soil products 
+4 4 Fire weather products 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.1.3.table b/definitions/grib2/tables/19/4.1.3.table
new file mode 100644
index 0000000..7bf60d4
--- /dev/null
+++ b/definitions/grib2/tables/19/4.1.3.table
@@ -0,0 +1,11 @@
+# Code table 4.1 - Parameter category by product discipline
+0 0 Image format products 
+1 1 Quantitative products 
+2 2 Cloud properties 
+3 3 Flight rule conditions 
+4 4 Volcanic ash 
+5 5 Sea-surface temperature 
+6 6 Solar radiation 
+# 7-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.10.table b/definitions/grib2/tables/19/4.10.table
new file mode 100644
index 0000000..1a92baa
--- /dev/null
+++ b/definitions/grib2/tables/19/4.10.table
@@ -0,0 +1,16 @@
+# Code table 4.10 - Type of statistical processing
+0 avg Average 
+1 accum Accumulation 
+2 max Maximum 
+3 min Minimum 
+4 diff Difference (value at the end of time range minus value at the beginning) 
+5 rms Root mean square 
+6 sd Standard deviation 
+7 cov Covariance (temporal variance) 
+8 8 Difference (value at the start of time range minus value at the end) 
+9 ratio Ratio 
+10 10 Standardized anomaly 
+11 11 Summation 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/19/4.11.table b/definitions/grib2/tables/19/4.11.table
new file mode 100644
index 0000000..7f404c8
--- /dev/null
+++ b/definitions/grib2/tables/19/4.11.table
@@ -0,0 +1,10 @@
+# Code table 4.11 - Type of time intervals
+0 0 Reserved 
+1 1 Successive times processed have same forecast time, start time of forecast is incremented 
+2 2 Successive times processed have same start time of forecast, forecast time is incremented 
+3 3 Successive times processed have start time of forecast incremented and forecast time decremented so that valid time remains constant 
+4 4 Successive times processed have start time of forecast decremented and forecast time incremented so that valid time remains constant 
+5 5 Floating subinterval of time between forecast time and end of overall time interval 
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.12.table b/definitions/grib2/tables/19/4.12.table
new file mode 100644
index 0000000..03fd89b
--- /dev/null
+++ b/definitions/grib2/tables/19/4.12.table
@@ -0,0 +1,7 @@
+# Code table 4.12 - Operating mode
+0 0 Maintenance mode 
+1 1 Clear air 
+2 2 Precipitation 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.13.table b/definitions/grib2/tables/19/4.13.table
new file mode 100644
index 0000000..c92854e
--- /dev/null
+++ b/definitions/grib2/tables/19/4.13.table
@@ -0,0 +1,6 @@
+# Code table 4.13 - Quality control indicator
+0 0 No quality control applied 
+1 1 Quality control applied 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.14.table b/definitions/grib2/tables/19/4.14.table
new file mode 100644
index 0000000..a88cb93
--- /dev/null
+++ b/definitions/grib2/tables/19/4.14.table
@@ -0,0 +1,6 @@
+# Code table 4.14 - Clutter filter indicator
+0 0 No clutter filter used 
+1 1 Clutter filter used 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.15.table b/definitions/grib2/tables/19/4.15.table
new file mode 100644
index 0000000..2e5f3de
--- /dev/null
+++ b/definitions/grib2/tables/19/4.15.table
@@ -0,0 +1,11 @@
+# Code table 4.15 - Type of spatial processing used to arrive at given data value from the source data
+0 0 Data is calculated directly from the source grid with no interpolation 
+1 1 Bilinear interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+2 2 Bicubic interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+3 3 Using the value from the source grid grid-point which is nearest to the nominal grid-point 
+4 4 Budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+5 5 Spectral interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+6 6 Neighbor-budget interpolation using the 4 source grid grid-point values surrounding the nominal grid-point 
+# 7-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.192.table b/definitions/grib2/tables/19/4.192.table
new file mode 100644
index 0000000..e1fd915
--- /dev/null
+++ b/definitions/grib2/tables/19/4.192.table
@@ -0,0 +1,4 @@
+1 1 first
+2 2 second
+3 3 third
+4 4 fourth
diff --git a/definitions/grib2/tables/19/4.2.0.0.table b/definitions/grib2/tables/19/4.2.0.0.table
new file mode 100644
index 0000000..7201a86
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.0.table
@@ -0,0 +1,34 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Temperature (K)
+1 1 Virtual temperature (K)
+2 2 Potential temperature (K)
+3 3 Pseudo-adiabatic potential temperature or equivalent potential temperature (K)
+4 4 Maximum temperature (K)
+5 5 Minimum temperature (K)
+6 6 Dewpoint temperature (K)
+7 7 Dewpoint depression (or deficit) (K)
+8 8 Lapse rate (K/m)
+9 9 Temperature anomaly (K)
+10 10 Latent heat net flux (W m-2)
+11 11 Sensible heat net flux (W m-2)
+12 12 Heat index (K)
+13 13 Wind chill factor (K)
+14 14 Minimum dewpoint depression (K)
+15 15 Virtual potential temperature (K)
+16 16 Snow phase change heat flux (W m-2)
+17 17 Skin temperature (K)
+18 18 Snow temperature (top of snow) (K)
+19 19 Turbulent transfer coefficient for heat (Numeric)
+20 20 Turbulent diffusion coefficient for heat (m2/s)
+21 21 Apparent temperature (K)
+22 22 Temperature tendency due to short-wave radiation (K s-1)
+23 23 Temperature tendency due to long-wave radiation (K s-1)
+24 24 Temperature tendency due to short-wave radiation, clear sky (K s-1)
+25 25 Temperature tendency due to long-wave radiation, clear sky (K s-1)
+26 26 Temperature tendency due to parameterization (K s-1)
+27 27 Wet-bulb temperature (K)
+28 28 Unbalanced component of temperature (K)
+29 29 Temperature advection (K s-1)
+# 30-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.1.table b/definitions/grib2/tables/19/4.2.0.1.table
new file mode 100644
index 0000000..8f96bcd
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.1.table
@@ -0,0 +1,123 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Specific humidity (kg/kg)
+1 1 Relative humidity (%)
+2 2 Humidity mixing ratio (kg/kg)
+3 3 Precipitable water (kg m-2)
+4 4 Vapour pressure (Pa)
+5 5 Saturation deficit (Pa)
+6 6 Evaporation (kg m-2)
+7 7 Precipitation rate (kg m-2 s-1)
+8 8 Total precipitation (kg m-2)
+9 9 Large-scale precipitation (non-convective) (kg m-2)
+10 10 Convective precipitation (kg m-2)
+11 11 Snow depth (m)
+12 12 Snowfall rate water equivalent (kg m-2 s-1)
+13 13 Water equivalent of accumulated snow depth (kg m-2)
+14 14 Convective snow (kg m-2)
+15 15 Large-scale snow (kg m-2)
+16 16 Snow melt (kg m-2)
+17 17 Snow age (d)
+18 18 Absolute humidity (kg m-3)
+19 19 Precipitation type ((Code table 4.201))
+20 20 Integrated liquid water (kg m-2)
+21 21 Condensate (kg/kg)
+22 22 Cloud mixing ratio (kg/kg)
+23 23 Ice water mixing ratio (kg/kg)
+24 24 Rain mixing ratio (kg/kg)
+25 25 Snow mixing ratio (kg/kg)
+26 26 Horizontal moisture convergence (kg kg-1 s-1)
+27 27 Maximum relative humidity (%)
+28 28 Maximum absolute humidity (kg m-3)
+29 29 Total snowfall (m)
+30 30 Precipitable water category ((Code table 4.202))
+31 31 Hail (m)
+32 32 Graupel (snow pellets) (kg/kg)
+33 33 Categorical rain ((Code table 4.222))
+34 34 Categorical freezing rain ((Code table 4.222))
+35 35 Categorical ice pellets ((Code table 4.222))
+36 36 Categorical snow ((Code table 4.222))
+37 37 Convective precipitation rate (kg m-2 s-1)
+38 38 Horizontal moisture divergence (kg kg-1 s-1)
+39 39 Per cent frozen precipitation (%)
+40 40 Potential evaporation (kg m-2)
+41 41 Potential evaporation rate (W m-2)
+42 42 Snow cover (%)
+43 43 Rain fraction of total cloud water (Proportion)
+44 44 Rime factor (Numeric)
+45 45 Total column integrated rain (kg m-2)
+46 46 Total column integrated snow (kg m-2)
+47 47 Large scale water precipitation (non-convective) (kg m-2)
+48 48 Convective water precipitation (kg m-2)
+49 49 Total water precipitation (kg m-2)
+50 50 Total snow precipitation (kg m-2)
+51 51 Total column water (Vertically integrated total water (vapour + cloud water/ice)) (kg m-2)
+52 52 Total precipitation rate (kg m-2 s-1)
+53 53 Total snowfall rate water equivalent (kg m-2 s-1)
+54 54 Large scale precipitation rate (kg m-2 s-1)
+55 55 Convective snowfall rate water equivalent (kg m-2 s-1)
+56 56 Large scale snowfall rate water equivalent (kg m-2 s-1)
+57 57 Total snowfall rate (m/s)
+58 58 Convective snowfall rate (m/s)
+59 59 Large scale snowfall rate (m/s)
+60 60 Snow depth water equivalent (kg m-2)
+61 61 Snow density (kg m-3)
+62 62 Snow evaporation (kg m-2)
+63 63 Reserved 
+64 64 Total column integrated water vapour (kg m-2)
+65 65 Rain precipitation rate (kg m-2 s-1)
+66 66 Snow precipitation rate (kg m-2 s-1)
+67 67 Freezing rain precipitation rate (kg m-2 s-1)
+68 68 Ice pellets precipitation rate (kg m-2 s-1)
+69 69 Total column integrated cloud water (kg m-2)
+70 70 Total column integrated cloud ice (kg m-2)
+71 71 Hail mixing ratio (kg/kg)
+72 72 Total column integrated hail (kg m-2)
+73 73 Hail precipitation rate (kg m-2 s-1)
+74 74 Total column integrated graupel (kg m-2)
+75 75 Graupel (snow pellets) precipitation rate (kg m-2 s-1)
+76 76 Convective rain rate (kg m-2 s-1)
+77 77 Large scale rain rate (kg m-2 s-1)
+78 78 Total column integrated water (all components including precipitation) (kg m-2)
+79 79 Evaporation rate (kg m-2 s-1)
+80 80 Total condensate (kg/kg)
+81 81 Total column-integrated condensate (kg m-2)
+82 82 Cloud ice mixing-ratio (kg/kg)
+83 83 Specific cloud liquid water content (kg/kg)
+84 84 Specific cloud ice water content (kg/kg)
+85 85 Specific rainwater content (kg/kg)
+86 86 Specific snow water content (kg/kg)
+# 87-89 Reserved 
+90 90 Total kinematic moisture flux (kg kg-1 m s-1)
+91 91 u-component (zonal) kinematic moisture flux (kg kg-1 m s-1)
+92 92 v-component (meridional) kinematic moisture flux (kg kg-1 m s-1)
+93 93 Relative humidity with respect to water (%)
+94 94 Relative humidity with respect to ice (%)
+95 95 Freezing or frozen precipitation rate (kg m-2 s-1)
+96 96 Mass density of rain (kg m-3)
+97 97 Mass density of snow (kg m-3)
+98 98 Mass density of graupel (kg m-3)
+99 99 Mass density of hail (kg m-3)
+100 100 Specific number concentration of rain (kg-1)
+101 101 Specific number concentration of snow (kg-1)
+102 102 Specific number concentration of graupel (kg-1)
+103 103 Specific number concentration of hail (kg-1)
+104 104 Number density of rain (m-3)
+105 105 Number density of snow (m-3)
+106 106 Number density of graupel (m-3)
+107 107 Number density of hail (m-3)
+108 108 Specific humidity tendency due to parameterization (kg kg-1 s-1)
+109 109 Mass density of liquid water coating on hail expressed as mass of liquid water per unit volume of air (kg m-3)
+110 110 Specific mass of liquid water coating on hail expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+111 111 Mass mixing ratio of liquid water coating on hail expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+112 112 Mass density of liquid water coating on graupel expressed as mass of liquid water per unit volume of air (kg m-3)
+113 113 Specific mass of liquid water coating on graupel expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+114 114 Mass mixing ratio of liquid water coating on graupel expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+115 115 Mass density of liquid water coating on snow expressed as mass of liquid water per unit volume of air (kg m-3)
+116 116 Specific mass of liquid water coating on snow expressed as mass of liquid water per unit mass of moist air (kg kg-1)
+117 117 Mass mixing ratio of liquid water coating on snow expressed as mass of liquid water per unit mass of dry air (kg kg-1)
+118 118 Unbalanced component of specific humidity (kg kg-1)
+119 119 Unbalanced component of specific cloud liquid water content (kg kg-1)
+120 120 Unbalanced component of specific cloud ice water content (kg kg-1)
+# 121-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.13.table b/definitions/grib2/tables/19/4.2.0.13.table
new file mode 100644
index 0000000..e9feb09
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.13.table
@@ -0,0 +1,5 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Aerosol type ((Code table 4.205))
+# 1-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.14.table b/definitions/grib2/tables/19/4.2.0.14.table
new file mode 100644
index 0000000..2158847
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.14.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Total ozone (DU)
+1 1 Ozone mixing ratio (kg/kg)
+2 2 Total column integrated ozone (DU)
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.15.table b/definitions/grib2/tables/19/4.2.0.15.table
new file mode 100644
index 0000000..dfbc4d1
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.15.table
@@ -0,0 +1,21 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Base spectrum width (m/s)
+1 1 Base reflectivity (dB)
+2 2 Base radial velocity (m/s)
+3 3 Vertically integrated liquid water (VIL) (kg m-2)
+4 4 Layer-maximum base reflectivity (dB)
+5 5 Precipitation (kg m-2)
+6 6 Radar spectra (1) (-)
+7 7 Radar spectra (2) (-)
+8 8 Radar spectra (3) (-)
+9 9 Reflectivity of cloud droplets (dB)
+10 10 Reflectivity of cloud ice (dB)
+11 11 Reflectivity of snow (dB)
+12 12 Reflectivity of rain (dB)
+13 13 Reflectivity of graupel (dB)
+14 14 Reflectivity of hail (dB)
+15 15 Hybrid scan reflectivity (dB)
+16 16 Hybrid scan reflectivity height (m)
+# 17-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.16.table b/definitions/grib2/tables/19/4.2.0.16.table
new file mode 100644
index 0000000..0c240a8
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.16.table
@@ -0,0 +1,10 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Equivalent radar reflectivity factor for rain (mm6 m-3)
+1 1 Equivalent radar reflectivity factor for snow (mm6 m-3)
+2 2 Equivalent radar reflectivity factor for parameterized convection (mm6 m-3)
+3 3 Echo top (m)
+4 4 Reflectivity (dB)
+5 5 Composite reflectivity (dB)
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.17.table b/definitions/grib2/tables/19/4.2.0.17.table
new file mode 100644
index 0000000..a679963
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.17.table
@@ -0,0 +1,3 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Lightning strike density (m-2 s-1)
+1 1 Lightning potential index (LPI) (J kg-1)
diff --git a/definitions/grib2/tables/19/4.2.0.18.table b/definitions/grib2/tables/19/4.2.0.18.table
new file mode 100644
index 0000000..9d106f4
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.18.table
@@ -0,0 +1,23 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Air concentration of caesium 137 (Bq m-3)
+1 1 Air concentration of iodine 131 (Bq m-3)
+2 2 Air concentration of radioactive pollutant (Bq m-3)
+3 3 Ground deposition of caesium 137 (Bq m-2)
+4 4 Ground deposition of iodine 131 (Bq m-2)
+5 5 Ground deposition of radioactive pollutant (Bq m-2)
+6 6 Time-integrated air concentration of caesium pollutant (Bq s m-3)
+7 7 Time-integrated air concentration of iodine pollutant (Bq s m-3)
+8 8 Time-integrated air concentration of radioactive pollutant (Bq s m-3)
+9 9 Reserved 
+10 10 Air concentration (Bq m-3)
+11 11 Wet deposition (Bq m-2)
+12 12 Dry deposition (Bq m-2)
+13 13 Total deposition (wet + dry) (Bq m-2)
+14 14 Specific activity concentration (Bq kg-1)
+15 15 Maximum of air concentration in layer (Bq m-3)
+16 16 Height of maximum air concentration (m)
+17 17 Column-integrated air concentration (Bq m-2)
+18 18 Column-averaged air concentration in layer (Bq m-3)
+# 19-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.19.table b/definitions/grib2/tables/19/4.2.0.19.table
new file mode 100644
index 0000000..0e49286
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.19.table
@@ -0,0 +1,36 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Visibility (m)
+1 1 Albedo (%)
+2 2 Thunderstorm probability (%)
+3 3 Mixed layer depth (m)
+4 4 Volcanic ash ((Code table 4.206))
+5 5 Icing top (m)
+6 6 Icing base (m)
+7 7 Icing ((Code table 4.207))
+8 8 Turbulence top (m)
+9 9 Turbulence base (m)
+10 10 Turbulence ((Code table 4.208))
+11 11 Turbulent kinetic energy (J/kg)
+12 12 Planetary boundary-layer regime ((Code table 4.209))
+13 13 Contrail intensity ((Code table 4.210))
+14 14 Contrail engine type ((Code table 4.211))
+15 15 Contrail top (m)
+16 16 Contrail base (m)
+17 17 Maximum snow albedo (%)
+18 18 Snow free albedo (%)
+19 19 Snow albedo (%)
+20 20 Icing (%)
+21 21 In-cloud turbulence (%)
+22 22 Clear air turbulence (CAT) (%)
+23 23 Supercooled large droplet probability (%)
+24 24 Convective turbulent kinetic energy (J/kg)
+25 25 Weather ((Code table 4.225))
+26 26 Convective outlook ((Code table 4.224))
+27 27 Icing scenario ((Code table 4.227))
+28 28 Mountain wave turbulence (eddy dissipation rate) (m2/3 s-1)
+29 29 Clear air turbulence (CAT) (m2/3 s-1)
+30 30 Eddy dissipation parameter (m2/3 s-1)
+31 31 Maximum of eddy dissipation parameter in layer (m2/3 s-1)
+# 32-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.190.table b/definitions/grib2/tables/19/4.2.0.190.table
new file mode 100644
index 0000000..de621a9
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.190.table
@@ -0,0 +1,5 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Arbitrary text string (CCITT IA5)
+# 1-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.191.table b/definitions/grib2/tables/19/4.2.0.191.table
new file mode 100644
index 0000000..e3bba0e
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.191.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Seconds prior to initial reference time (defined in Section 1) (s)
+1 1 Geographical latitude (deg N)
+2 2 Geographical longitude (deg E)
+3 3 Days since last observation (d)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.2.table b/definitions/grib2/tables/19/4.2.0.2.table
new file mode 100644
index 0000000..5446262
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.2.table
@@ -0,0 +1,51 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Wind direction (from which blowing) (degree true)
+1 1 Wind speed (m/s)
+2 2 u-component of wind (m/s)
+3 3 v-component of wind (m/s)
+4 4 Stream function (m2/s)
+5 5 Velocity potential (m2/s)
+6 6 Montgomery stream function (m2 s-2)
+7 7 Sigma coordinate vertical velocity (/s)
+8 8 Vertical velocity (pressure) (Pa/s)
+9 9 Vertical velocity (geometric) (m/s)
+10 10 Absolute vorticity (/s)
+11 11 Absolute divergence (/s)
+12 12 Relative vorticity (/s)
+13 13 Relative divergence (/s)
+14 14 Potential vorticity (K m2 kg-1 s-1)
+15 15 Vertical u-component shear (/s)
+16 16 Vertical v-component shear (/s)
+17 17 Momentum flux, u-component (N m-2)
+18 18 Momentum flux, v-component (N m-2)
+19 19 Wind mixing energy (J)
+20 20 Boundary layer dissipation (W m-2)
+21 21 Maximum wind speed (m/s)
+22 22 Wind speed (gust) (m/s)
+23 23 u-component of wind (gust) (m/s)
+24 24 v-component of wind (gust) (m/s)
+25 25 Vertical speed shear (/s)
+26 26 Horizontal momentum flux (N m-2)
+27 27 u-component storm motion (m/s)
+28 28 v-component storm motion (m/s)
+29 29 Drag coefficient (Numeric)
+30 30 Frictional velocity (m/s)
+31 31 Turbulent diffusion coefficient for momentum (m2/s)
+32 32 Eta coordinate vertical velocity (/s)
+33 33 Wind fetch (m)
+34 34 Normal wind component (m/s)
+35 35 Tangential wind component (m/s)
+36 36 Amplitude function for Rossby wave envelope for meridional wind (m/s)
+37 37 Northward turbulent surface stress (N m-2 s)
+38 38 Eastward turbulent surface stress (N m-2 s)
+39 39 Eastward wind tendency due to parameterization (m s-2)
+40 40 Northward wind tendency due to parameterization (m s-2)
+41 41 u-component of geostrophic wind (m s-1)
+42 42 v-component of geostrophic wind (m s-1)
+43 43 Geostrophic wind direction (degree true)
+44 44 Geostrophic wind speed (m s-1)
+45 45 Unbalanced component of divergence (s-1)
+46 46 Vorticity advection (s-2)
+# 47-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.20.table b/definitions/grib2/tables/19/4.2.0.20.table
new file mode 100644
index 0000000..efc427a
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.20.table
@@ -0,0 +1,47 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Mass density (concentration) (kg m-3)
+1 1 Column-integrated mass density (kg m-2)
+2 2 Mass mixing ratio (mass fraction in air) (kg/kg)
+3 3 Atmosphere emission mass flux (kg m-2 s-1)
+4 4 Atmosphere net production mass flux (kg m-2 s-1)
+5 5 Atmosphere net production and emission mass flux (kg m-2 s-1)
+6 6 Surface dry deposition mass flux (kg m-2 s-1)
+7 7 Surface wet deposition mass flux (kg m-2 s-1)
+8 8 Atmosphere re-emission mass flux (kg m-2 s-1)
+9 9 Wet deposition by large-scale precipitation mass flux (kg m-2 s-1)
+10 10 Wet deposition by convective precipitation mass flux (kg m-2 s-1)
+11 11 Sedimentation mass flux (kg m-2 s-1)
+12 12 Dry deposition mass flux (kg m-2 s-1)
+13 13 Transfer from hydrophobic to hydrophilic (kg kg-1 s-1)
+14 14 Transfer from SO2 (sulphur dioxide) to SO4 (sulphate) (kg kg-1 s-1)
+# 15-49 Reserved 
+50 50 Amount in atmosphere (mol)
+51 51 Concentration in air (mol m-3)
+52 52 Volume mixing ratio (fraction in air) (mol/mol)
+53 53 Chemical gross production rate of concentration (mol m-3 s-1)
+54 54 Chemical gross destruction rate of concentration (mol m-3 s-1)
+55 55 Surface flux (mol m-2 s-1)
+56 56 Changes of amount in atmosphere (mol/s)
+57 57 Total yearly average burden of the atmosphere (mol)
+58 58 Total yearly averaged atmospheric loss (mol/s)
+59 59 Aerosol number concentration (m-3)
+60 60 Aerosol specific number concentration (kg-1)
+61 61 Maximum of mass density in layer (kg m-3)
+62 62 Height of maximum mass density (m)
+63 63 Column-averaged mass density in layer (kg m-3)
+# 64-99 Reserved 
+100 100 Surface area density (aerosol) (/m)
+101 101 Vertical visual range (m)
+102 102 Aerosol optical thickness (Numeric)
+103 103 Single scattering albedo (Numeric)
+104 104 Asymmetry factor (Numeric)
+105 105 Aerosol extinction coefficient (/m)
+106 106 Aerosol absorption coefficient (/m)
+107 107 Aerosol lidar backscatter from satellite (m-1 sr-1)
+108 108 Aerosol lidar backscatter from the ground (m-1 sr-1)
+109 109 Aerosol lidar extinction from satellite (/m)
+110 110 Aerosol lidar extinction from the ground (/m)
+111 111 Angstrom exponent (Numeric)
+# 112-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.3.table b/definitions/grib2/tables/19/4.2.0.3.table
new file mode 100644
index 0000000..34941dc
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.3.table
@@ -0,0 +1,36 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Pressure (Pa)
+1 1 Pressure reduced to MSL (Pa)
+2 2 Pressure tendency (Pa/s)
+3 3 ICAO Standard Atmosphere Reference Height (m)
+4 4 Geopotential (m2 s-2)
+5 5 Geopotential height (gpm)
+6 6 Geometric height (m)
+7 7 Standard deviation of height (m)
+8 8 Pressure anomaly (Pa)
+9 9 Geopotential height anomaly (gpm)
+10 10 Density (kg m-3)
+11 11 Altimeter setting (Pa)
+12 12 Thickness (m)
+13 13 Pressure altitude (m)
+14 14 Density altitude (m)
+15 15 5-wave geopotential height (gpm)
+16 16 Zonal flux of gravity wave stress (N m-2)
+17 17 Meridional flux of gravity wave stress (N m-2)
+18 18 Planetary boundary layer height (m)
+19 19 5-wave geopotential height anomaly (gpm)
+20 20 Standard deviation of sub-grid scale orography (m)
+21 21 Angle of sub-gridscale orography (rad)
+22 22 Slope of sub-gridscale orography (Numeric)
+23 23 Gravity wave dissipation (W m-2)
+24 24 Anisotropy of sub-gridscale orography (Numeric)
+25 25 Natural logarithm of pressure in Pa (Numeric)
+26 26 Exner pressure (Numeric)
+27 27 Updraught mass flux (kg m-2 s-1)
+28 28 Downdraught mass flux (kg m-2 s-1)
+29 29 Updraught detrainment rate (kg m-3 s-1)
+30 30 Downdraught detrainment rate (kg m-3 s-1)
+31 31 Unbalanced component of logarithm of surface pressure (-)
+# 32-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.4.table b/definitions/grib2/tables/19/4.2.0.4.table
new file mode 100644
index 0000000..0a5ded2
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.4.table
@@ -0,0 +1,24 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Net short-wave radiation flux (surface) (W m-2)
+1 1 Net short-wave radiation flux (top of atmosphere) (W m-2)
+2 2 Short-wave radiation flux (W m-2)
+3 3 Global radiation flux (W m-2)
+4 4 Brightness temperature (K)
+5 5 Radiance (with respect to wave number) (W m-1 sr-1)
+6 6 Radiance (with respect to wavelength) (W m-3 sr-1)
+7 7 Downward short-wave radiation flux (W m-2)
+8 8 Upward short-wave radiation flux (W m-2)
+9 9 Net short wave radiation flux (W m-2)
+10 10 Photosynthetically active radiation (W m-2)
+11 11 Net short-wave radiation flux, clear sky (W m-2)
+12 12 Downward UV radiation (W m-2)
+13 13 Direct short-wave radiation flux (W m-2)
+14 14 Diffuse short-wave radiation flux (W m-2)
+# 15-49 Reserved 
+50 50 UV index (under clear sky) (Numeric)
+51 51 UV index (Numeric)
+52 52 Downward short-wave radiation flux, clear sky (W m-2)
+53 53 Upward short-wave radiation flux, clear sky (W m-2)
+# 54-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.5.table b/definitions/grib2/tables/19/4.2.0.5.table
new file mode 100644
index 0000000..4550220
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.5.table
@@ -0,0 +1,13 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Net long-wave radiation flux (surface) (W m-2)
+1 1 Net long-wave radiation flux (top of atmosphere) (W m-2)
+2 2 Long-wave radiation flux (W m-2)
+3 3 Downward long-wave radiation flux (W m-2)
+4 4 Upward long-wave radiation flux (W m-2)
+5 5 Net long-wave radiation flux (W m-2)
+6 6 Net long-wave radiation flux, clear sky (W m-2)
+7 7 Brightness temperature (K)
+8 8 Downward long-wave radiation flux, clear sky (W m-2)
+# 9-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.6.table b/definitions/grib2/tables/19/4.2.0.6.table
new file mode 100644
index 0000000..1483d8c
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.6.table
@@ -0,0 +1,49 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Cloud ice (kg m-2)
+1 1 Total cloud cover (%)
+2 2 Convective cloud cover (%)
+3 3 Low cloud cover (%)
+4 4 Medium cloud cover (%)
+5 5 High cloud cover (%)
+6 6 Cloud water (kg m-2)
+7 7 Cloud amount (%)
+8 8 Cloud type ((Code table 4.203))
+9 9 Thunderstorm maximum tops (m)
+10 10 Thunderstorm coverage ((Code table 4.204))
+11 11 Cloud base (m)
+12 12 Cloud top (m)
+13 13 Ceiling (m)
+14 14 Non-convective cloud cover (%)
+15 15 Cloud work function (J/kg)
+16 16 Convective cloud efficiency (Proportion)
+17 17 Total condensate (kg/kg)
+18 18 Total column-integrated cloud water (kg m-2)
+19 19 Total column-integrated cloud ice (kg m-2)
+20 20 Total column-integrated condensate (kg m-2)
+21 21 Ice fraction of total condensate (Proportion)
+22 22 Cloud cover (%)
+23 23 Cloud ice mixing ratio (kg/kg)
+24 24 Sunshine (Numeric)
+25 25 Horizontal extent of cumulonimbus (CB) (%)
+26 26 Height of convective cloud base (m)
+27 27 Height of convective cloud top (m)
+28 28 Number of cloud droplets per unit mass of air (/kg)
+29 29 Number of cloud ice particles per unit mass of air (/kg)
+30 30 Number density of cloud droplets (m-3)
+31 31 Number density of cloud ice particles (m-3)
+32 32 Fraction of cloud cover (Numeric)
+33 33 Sunshine duration (s)
+34 34 Surface long-wave effective total cloudiness (Numeric)
+35 35 Surface short-wave effective total cloudiness (Numeric)
+36 36 Fraction of stratiform precipitation cover (Proportion)
+37 37 Fraction of convective precipitation cover (Proportion)
+38 38 Mass density of cloud droplets (kg m-3)
+39 39 Mass density of cloud ice (kg m-3)
+40 40 Mass density of convective cloud water droplets (kg m-3)
+# 41-46 Reserved 
+47 47 Volume fraction of cloud water droplets (Numeric)
+48 48 Volume fraction of cloud ice particles (Numeric)
+49 49 Volume fraction of cloud (ice and/or water) (Numeric)
+# 50-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.0.7.table b/definitions/grib2/tables/19/4.2.0.7.table
new file mode 100644
index 0000000..aff6a65
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.0.7.table
@@ -0,0 +1,24 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Parcel lifted index (to 500 hPa) (K)
+1 1 Best lifted index (to 500 hPa) (K)
+2 2 K index (K)
+3 3 KO index (K)
+4 4 Total totals index (K)
+5 5 Sweat index (Numeric)
+6 6 Convective available potential energy (J/kg)
+7 7 Convective inhibition (J/kg)
+8 8 Storm relative helicity (J/kg)
+9 9 Energy helicity index (Numeric)
+10 10 Surface lifted index (K)
+11 11 Best (4-layer) lifted index (K)
+12 12 Richardson number (Numeric)
+13 13 Showalter index (K)
+14 14 Reserved 
+15 15 Updraught helicity (m2 s-2)
+16 16 Bulk Richardson number (Numeric)
+17 17 Gradient Richardson number (Numeric)
+18 18 Flux Richardson number (Numeric)
+19 19 Convective available potential energy - shear (m2 s-2)
+# 20-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.1.0.table b/definitions/grib2/tables/19/4.2.1.0.table
new file mode 100644
index 0000000..e906af7
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.1.0.table
@@ -0,0 +1,21 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Flash flood guidance (Encoded as an accumulation over a floating subinterval of time between the reference time and valid time) (kg m-2)
+1 1 Flash flood runoff (Encoded as an accumulation over a floating subinterval of time) (kg m-2)
+2 2 Remotely-sensed snow cover ((Code table 4.215))
+3 3 Elevation of snow-covered terrain ((Code table 4.216))
+4 4 Snow water equivalent per cent of normal (%)
+5 5 Baseflow-groundwater runoff (kg m-2)
+6 6 Storm surface runoff (kg m-2)
+7 7 Discharge from rivers or streams (m3/s)
+8 8 Groundwater upper storage (kg m-2)
+9 9 Groundwater lower storage (kg m-2)
+10 10 Side flow into river channel (m3 s-1 m-1)
+11 11 River storage of water (m3)
+12 12 Floodplain storage of water (m3)
+13 13 Depth of water on soil surface (kg m-2)
+14 14 Upstream accumulated precipitation (kg m-2)
+15 15 Upstream accumulated snow melt (kg m-2)
+16 16 Percolation rate (kg m-2 s-1)
+# 17-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.1.1.table b/definitions/grib2/tables/19/4.2.1.1.table
new file mode 100644
index 0000000..b488eb0
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.1.1.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Conditional per cent precipitation amount fractile for an overall period (Encoded as an accumulation) (kg m-2)
+1 1 Per cent precipitation in a sub-period of an overall period (Encoded as per cent accumulation over the sub-period) (%)
+2 2 Probability of 0.01 inch of precipitation (POP) (%)
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.1.2.table b/definitions/grib2/tables/19/4.2.1.2.table
new file mode 100644
index 0000000..ec9b11d
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.1.2.table
@@ -0,0 +1,15 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Water depth (m)
+1 1 Water temperature (K)
+2 2 Water fraction (Proportion)
+3 3 Sediment thickness (m)
+4 4 Sediment temperature (K)
+5 5 Ice thickness (m)
+6 6 Ice temperature (K)
+7 7 Ice cover (Proportion)
+8 8 Land cover (0 = water, 1 = land) (Proportion)
+9 9 Shape factor with respect to salinity profile (-)
+10 10 Shape factor with respect to temperature profile in thermocline (-)
+11 11 Attenuation coefficient of water with respect to solar radiation (/m)
+12 12 Salinity (kg/kg)
+13 13 Cross-sectional area of flow in channel (m2)
diff --git a/definitions/grib2/tables/19/4.2.10.0.table b/definitions/grib2/tables/19/4.2.10.0.table
new file mode 100644
index 0000000..095f51b
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.10.0.table
@@ -0,0 +1,50 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Wave spectra (1) (-)
+1 1 Wave spectra (2) (-)
+2 2 Wave spectra (3) (-)
+3 3 Significant height of combined wind waves and swell (m)
+4 4 Direction of wind waves (degree true)
+5 5 Significant height of wind waves (m)
+6 6 Mean period of wind waves (s)
+7 7 Direction of swell waves (degree true)
+8 8 Significant height of swell waves (m)
+9 9 Mean period of swell waves (s)
+10 10 Primary wave direction (degree true)
+11 11 Primary wave mean period (s)
+12 12 Secondary wave direction (degree true)
+13 13 Secondary wave mean period (s)
+14 14 Direction of combined wind waves and swell (degree true)
+15 15 Mean period of combined wind waves and swell (s)
+16 16 Coefficient of drag with waves (-)
+17 17 Friction velocity (m/s)
+18 18 Wave stress (N m-2)
+19 19 Normalized wave stress (-)
+20 20 Mean square slope of waves (-)
+21 21 u-component surface Stokes drift (m/s)
+22 22 v-component surface Stokes drift (m/s)
+23 23 Period of maximum individual wave height (s)
+24 24 Maximum individual wave height (m)
+25 25 Inverse mean wave frequency (s)
+26 26 Inverse mean frequency of wind waves (s)
+27 27 Inverse mean frequency of total swell (s)
+28 28 Mean zero-crossing wave period (s)
+29 29 Mean zero-crossing period of wind waves (s)
+30 30 Mean zero-crossing period of total swell (s)
+31 31 Wave directional width (-)
+32 32 Directional width of wind waves (-)
+33 33 Directional width of total swell (-)
+34 34 Peak wave period (s)
+35 35 Peak period of wind waves (s)
+36 36 Peak period of total swell (s)
+37 37 Altimeter wave height (m)
+38 38 Altimeter corrected wave height (m)
+39 39 Altimeter range relative correction (-)
+40 40 10-metre neutral wind speed over waves (m/s)
+41 41 10-metre wind direction over waves (deg)
+42 42 Wave energy spectrum (m2 s rad-1)
+43 43 Kurtosis of the sea-surface elevation due to waves (-)
+44 44 Benjamin-Feir index (-)
+45 45 Spectral peakedness factor (/s)
+# 46-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.10.1.table b/definitions/grib2/tables/19/4.2.10.1.table
new file mode 100644
index 0000000..5959bfa
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.10.1.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Current direction (degree true)
+1 1 Current speed (m/s)
+2 2 u-component of current (m/s)
+3 3 v-component of current (m/s)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.10.191.table b/definitions/grib2/tables/19/4.2.10.191.table
new file mode 100644
index 0000000..524929e
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.10.191.table
@@ -0,0 +1,8 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Seconds prior to initial reference time (defined in Section 1) (s)
+1 1 Meridional overturning stream function (m3/s)
+2 2 Reserved 
+3 3 Days since last observation (d)
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.10.2.table b/definitions/grib2/tables/19/4.2.10.2.table
new file mode 100644
index 0000000..6797062
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.10.2.table
@@ -0,0 +1,17 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Ice cover (Proportion)
+1 1 Ice thickness (m)
+2 2 Direction of ice drift (degree true)
+3 3 Speed of ice drift (m/s)
+4 4 u-component of ice drift (m/s)
+5 5 v-component of ice drift (m/s)
+6 6 Ice growth rate (m/s)
+7 7 Ice divergence (/s)
+8 8 Ice temperature (K)
+9 9 Module of ice internal pressure (Pa m)
+10 10 Zonal vector component of vertically integrated ice internal pressure (Pa m)
+11 11 Meridional vector component of vertically integrated ice internal pressure (Pa m)
+12 12 Compressive ice strength (N/m)
+# 13-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.10.3.table b/definitions/grib2/tables/19/4.2.10.3.table
new file mode 100644
index 0000000..de7afd6
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.10.3.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Water temperature (K)
+1 1 Deviation of sea level from mean (m)
+2 2 Heat exchange coefficient (-)
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.10.4.table b/definitions/grib2/tables/19/4.2.10.4.table
new file mode 100644
index 0000000..54774f1
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.10.4.table
@@ -0,0 +1,18 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Main thermocline depth (m)
+1 1 Main thermocline anomaly (m)
+2 2 Transient thermocline depth (m)
+3 3 Salinity (kg/kg)
+4 4 Ocean vertical heat diffusivity (m2/s)
+5 5 Ocean vertical salt diffusivity (m2/s)
+6 6 Ocean vertical momentum diffusivity (m2/s)
+7 7 Bathymetry (m)
+# 8-10 Reserved 
+11 11 Shape factor with respect to salinity profile (-)
+12 12 Shape factor with respect to temperature profile in thermocline (-)
+13 13 Attenuation coefficient of water with respect to solar radiation (/m)
+14 14 Water depth (m)
+15 15 Water temperature (K)
+# 16-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.2.0.table b/definitions/grib2/tables/19/4.2.2.0.table
new file mode 100644
index 0000000..f11616d
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.2.0.table
@@ -0,0 +1,43 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Land cover (0 = sea, 1 = land) (Proportion)
+1 1 Surface roughness (m)
+2 2 Soil temperature (K)
+3 3 Soil moisture content (kg m-2)
+4 4 Vegetation (%)
+5 5 Water runoff (kg m-2)
+6 6 Evapotranspiration (kg-2 s-1)
+7 7 Model terrain height (m)
+8 8 Land use ((Code table 4.212))
+9 9 Volumetric soil moisture content (Proportion)
+10 10 Ground heat flux (W m-2)
+11 11 Moisture availability (%)
+12 12 Exchange coefficient (kg m-2 s-1)
+13 13 Plant canopy surface water (kg m-2)
+14 14 Blackadar's mixing length scale (m)
+15 15 Canopy conductance (m/s)
+16 16 Minimal stomatal resistance (s/m)
+17 17 Wilting point (Proportion)
+18 18 Solar parameter in canopy conductance (Proportion)
+19 19 Temperature parameter in canopy (Proportion)
+20 20 Humidity parameter in canopy conductance (Proportion)
+21 21 Soil moisture parameter in canopy conductance (Proportion)
+22 22 Soil moisture (kg m-3)
+23 23 Column-integrated soil water (kg m-2)
+24 24 Heat flux (W m-2)
+25 25 Volumetric soil moisture (m3 m-3)
+26 26 Wilting point (kg m-3)
+27 27 Volumetric wilting point (m3 m-3)
+28 28 Leaf area index (Numeric)
+29 29 Evergreen forest cover (Proportion)
+30 30 Deciduous forest cover (Proportion)
+31 31 Normalized differential vegetation index (NDVI) (Numeric)
+32 32 Root depth of vegetation (m)
+33 33 Water runoff and drainage (kg m-2)
+34 34 Surface water runoff (kg m-2)
+35 35 Tile class (Code table 4.243)
+36 36 Tile fraction (Proportion)
+37 37 Tile percentage (%)
+38 38 Soil volumetric ice content (water equivalent) (m3 m-3)
+# 39-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.2.3.table b/definitions/grib2/tables/19/4.2.2.3.table
new file mode 100644
index 0000000..447e4f9
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.2.3.table
@@ -0,0 +1,32 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Soil type ((Code table 4.213))
+1 1 Upper layer soil temperature (K)
+2 2 Upper layer soil moisture (kg m-3)
+3 3 Lower layer soil moisture (kg m-3)
+4 4 Bottom layer soil temperature (K)
+5 5 Liquid volumetric soil moisture (non-frozen) (Proportion)
+6 6 Number of soil layers in root zone (Numeric)
+7 7 Transpiration stress-onset (soil moisture) (Proportion)
+8 8 Direct evaporation cease (soil moisture) (Proportion)
+9 9 Soil porosity (Proportion)
+10 10 Liquid volumetric soil moisture (non-frozen) (m3 m-3)
+11 11 Volumetric transpiration stress-onset (soil moisture) (m3 m-3)
+12 12 Transpiration stress-onset (soil moisture) (kg m-3)
+13 13 Volumetric direct evaporation cease (soil moisture) (m3 m-3)
+14 14 Direct evaporation cease (soil moisture) (kg m-3)
+15 15 Soil porosity (m3 m-3)
+16 16 Volumetric saturation of soil moisture (m3 m-3)
+17 17 Saturation of soil moisture (kg m-3)
+18 18 Soil temperature (K)
+19 19 Soil moisture (kg m-3)
+20 20 Column-integrated soil moisture (kg m-2)
+21 21 Soil ice (kg m-3)
+22 22 Column-integrated soil ice (kg m-2)
+23 23 Liquid water in snow pack (kg m-2)
+24 24 Frost index (K day-1)
+25 25 Snow depth at elevation bands (kg m-2)
+26 26 Soil heat flux (W m-2)
+27 27 Soil depth (m)
+# 28-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.2.4.table b/definitions/grib2/tables/19/4.2.2.4.table
new file mode 100644
index 0000000..bb54fac
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.2.4.table
@@ -0,0 +1,16 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Fire outlook (Code table 4.224)
+1 1 Fire outlook due to dry thunderstorm (Code table 4.224)
+2 2 Haines index (Numeric)
+3 3 Fire burned area (%)
+4 4 Fosberg index (Numeric)
+5 5 Forest Fire Weather Index (Canadian Forest Service) (Numeric)
+6 6 Fine Fuel Moisture Code (Canadian Forest Service) (Numeric)
+7 7 Duff Moisture Code (Canadian Forest Service) (Numeric)
+8 8 Drought Code (Canadian Forest Service) (Numeric)
+9 9 Initial Fire Spread Index (Canadian Forest Service) (Numeric)
+10 10 Fire Buildup Index (Canadian Forest Service) (Numeric)
+11 11 Fire Daily Severity Rating (Canadian Forest Service) (Numeric)
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.2.5.table b/definitions/grib2/tables/19/4.2.2.5.table
new file mode 100644
index 0000000..10fb689
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.2.5.table
@@ -0,0 +1,2 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+1 1 Glacier temperature (K)
diff --git a/definitions/grib2/tables/19/4.2.3.0.table b/definitions/grib2/tables/19/4.2.3.0.table
new file mode 100644
index 0000000..c0ffa29
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.3.0.table
@@ -0,0 +1,14 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Scaled radiance (Numeric)
+1 1 Scaled albedo (Numeric)
+2 2 Scaled brightness temperature (Numeric)
+3 3 Scaled precipitable water (Numeric)
+4 4 Scaled lifted index (Numeric)
+5 5 Scaled cloud top pressure (Numeric)
+6 6 Scaled skin temperature (Numeric)
+7 7 Cloud mask (Code table 4.217)
+8 8 Pixel scene type (Code table 4.218)
+9 9 Fire detection indicator (Code table 4.223)
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.3.1.table b/definitions/grib2/tables/19/4.2.3.1.table
new file mode 100644
index 0000000..8e0793f
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.3.1.table
@@ -0,0 +1,32 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Estimated precipitation (kg m-2)
+1 1 Instantaneous rain rate (kg m-2 s-1)
+2 2 Cloud top height (m)
+3 3 Cloud top height quality indicator (Code table 4.219)
+4 4 Estimated u-component of wind (m/s)
+5 5 Estimated v-component of wind (m/s)
+6 6 Number of pixel used (Numeric)
+7 7 Solar zenith angle (deg)
+8 8 Relative azimuth angle (deg)
+9 9 Reflectance in 0.6 micron channel (%)
+10 10 Reflectance in 0.8 micron channel (%)
+11 11 Reflectance in 1.6 micron channel (%)
+12 12 Reflectance in 3.9 micron channel (%)
+13 13 Atmospheric divergence (/s)
+14 14 Cloudy brightness temperature (K)
+15 15 Clear-sky brightness temperature (K)
+16 16 Cloudy radiance (with respect to wave number) (W m-1 sr-1)
+17 17 Clear-sky radiance (with respect to wave number) (W m-1 sr-1)
+18 18 Reserved 
+19 19 Wind speed (m/s)
+20 20 Aerosol optical thickness at 0.635 um
+21 21 Aerosol optical thickness at 0.810 um
+22 22 Aerosol optical thickness at 1.640 um
+23 23 Angstrom coefficient 
+# 24-26 Reserved 
+27 27 Bidirectional reflectance factor (Numeric)
+28 28 Brightness temperature (K)
+29 29 Scaled radiance (Numeric)
+# 30-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.2.3.2.table b/definitions/grib2/tables/19/4.2.3.2.table
new file mode 100644
index 0000000..191f352
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.3.2.table
@@ -0,0 +1,13 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Clear sky probability (%)
+1 1 Cloud top temperature (K)
+2 2 Cloud top pressure (Pa)
+3 3 Cloud type (Code table 4.218)
+4 4 Cloud phase (Code table 4.218)
+5 5 Cloud optical depth (Numeric)
+6 6 Cloud particle effective radius (m)
+7 7 Cloud liquid water path (kg m-2)
+8 8 Cloud ice water path (kg m-2)
+9 9 Cloud albedo (Numeric)
+10 10 Cloud emissivity (Numeric)
+11 11 Effective absorption optical depth ratio (Numeric)
diff --git a/definitions/grib2/tables/19/4.2.3.3.table b/definitions/grib2/tables/19/4.2.3.3.table
new file mode 100644
index 0000000..cb5c4b6
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.3.3.table
@@ -0,0 +1,4 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Probability of encountering marginal visual flight rule conditions (%)
+1 1 Probability of encountering low instrument flight rule conditions (%)
+2 2 Probability of encountering instrument flight rule conditions (%)
diff --git a/definitions/grib2/tables/19/4.2.3.4.table b/definitions/grib2/tables/19/4.2.3.4.table
new file mode 100644
index 0000000..f86d2d6
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.3.4.table
@@ -0,0 +1,10 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Volcanic ash probability (%)
+1 1 Volcanic ash cloud top temperature (K)
+2 2 Volcanic ash cloud top pressure (Pa)
+3 3 Volcanic ash cloud top height (m)
+4 4 Volcanic ash cloud emissivity (Numeric)
+5 5 Volcanic ash effective absorption optical depth ratio (Numeric)
+6 6 Volcanic ash cloud optical depth (Numeric)
+7 7 Volcanic ash column density (kg m-2)
+8 8 Volcanic ash particle effective radius (m)
diff --git a/definitions/grib2/tables/19/4.2.3.5.table b/definitions/grib2/tables/19/4.2.3.5.table
new file mode 100644
index 0000000..92a050d
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.3.5.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Interface sea-surface temperature (K)
+1 1 Skin sea-surface temperature (K)
+2 2 Sub-skin sea-surface temperature (K)
+3 3 Foundation sea-surface temperature (K)
+4 4 Estimated bias between sea-surface temperature and standard (K)
+5 5 Estimated standard deviation between sea surface temperature and standard (K)
diff --git a/definitions/grib2/tables/19/4.2.3.6.table b/definitions/grib2/tables/19/4.2.3.6.table
new file mode 100644
index 0000000..471beed
--- /dev/null
+++ b/definitions/grib2/tables/19/4.2.3.6.table
@@ -0,0 +1,7 @@
+# Code table 4.2 - Parameter number by product discipline and parameter category
+0 0 Global solar irradiance (W m-2)
+1 1 Global solar exposure (J m-2)
+2 2 Direct solar irradiance (W m-2)
+3 3 Direct solar exposure (J m-2)
+4 4 Diffuse solar irradiance (W m-2)
+5 5 Diffuse solar exposure (J m-2)
diff --git a/definitions/grib2/tables/19/4.201.table b/definitions/grib2/tables/19/4.201.table
new file mode 100644
index 0000000..47f1b48
--- /dev/null
+++ b/definitions/grib2/tables/19/4.201.table
@@ -0,0 +1,15 @@
+# Code table 4.201 - Precipitation type
+0 0 Reserved 
+1 1 Rain 
+2 2 Thunderstorm 
+3 3 Freezing rain 
+4 4 Mixed/ice 
+5 5 Snow 
+6 6 Wet snow 
+7 7 Mixture of rain and snow 
+8 8 Ice pellets 
+9 9 Graupel 
+10 10 Hail 
+# 11-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.202.table b/definitions/grib2/tables/19/4.202.table
new file mode 100644
index 0000000..438502f
--- /dev/null
+++ b/definitions/grib2/tables/19/4.202.table
@@ -0,0 +1,4 @@
+# Code table 4.202 - Precipitable water category
+# 0-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.203.table b/definitions/grib2/tables/19/4.203.table
new file mode 100644
index 0000000..8a9aedf
--- /dev/null
+++ b/definitions/grib2/tables/19/4.203.table
@@ -0,0 +1,26 @@
+# Code table 4.203 - Cloud type
+0 0 Clear 
+1 1 Cumulonimbus 
+2 2 Stratus 
+3 3 Stratocumulus 
+4 4 Cumulus 
+5 5 Altostratus 
+6 6 Nimbostratus 
+7 7 Altocumulus 
+8 8 Cirrostratus 
+9 9 Cirrocumulus 
+10 10 Cirrus 
+11 11 Cumulonimbus - ground-based fog beneath the lowest layer 
+12 12 Stratus - ground-based fog beneath the lowest layer 
+13 13 Stratocumulus - ground-based fog beneath the lowest layer 
+14 14 Cumulus - ground-based fog beneath the lowest layer 
+15 15 Altostratus - ground-based fog beneath the lowest layer 
+16 16 Nimbostratus - ground-based fog beneath the lowest layer 
+17 17 Altocumulus - ground-based fog beneath the lowest layer 
+18 18 Cirrostratus - ground-based fog beneath the lowest layer 
+19 19 Cirrocumulus - ground-based fog beneath the lowest layer 
+20 20 Cirrus - ground-based fog beneath the lowest layer 
+# 21-190 Reserved 
+191 191 Unknown 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.204.table b/definitions/grib2/tables/19/4.204.table
new file mode 100644
index 0000000..4813729
--- /dev/null
+++ b/definitions/grib2/tables/19/4.204.table
@@ -0,0 +1,9 @@
+# Code table 4.204 - Thunderstorm coverage
+0 0 None 
+1 1 Isolated (1-2%) 
+2 2 Few (3-5%) 
+3 3 Scattered (6-45%) 
+4 4 Numerous (> 45%) 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.205.table b/definitions/grib2/tables/19/4.205.table
new file mode 100644
index 0000000..5b4484d
--- /dev/null
+++ b/definitions/grib2/tables/19/4.205.table
@@ -0,0 +1,6 @@
+# Code table 4.205 - Presence of aerosol
+0 0 Aerosol not present 
+1 1 Aerosol present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.206.table b/definitions/grib2/tables/19/4.206.table
new file mode 100644
index 0000000..02c3dfd
--- /dev/null
+++ b/definitions/grib2/tables/19/4.206.table
@@ -0,0 +1,6 @@
+# Code table 4.206 - Volcanic ash
+0 0 Not present 
+1 1 Present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.207.table b/definitions/grib2/tables/19/4.207.table
new file mode 100644
index 0000000..8ddb2e0
--- /dev/null
+++ b/definitions/grib2/tables/19/4.207.table
@@ -0,0 +1,10 @@
+# Code table 4.207 - Icing
+0 0 None 
+1 1 Light 
+2 2 Moderate 
+3 3 Severe 
+4 4 Trace 
+5 5 Heavy 
+# 6-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.208.table b/definitions/grib2/tables/19/4.208.table
new file mode 100644
index 0000000..b83685a
--- /dev/null
+++ b/definitions/grib2/tables/19/4.208.table
@@ -0,0 +1,9 @@
+# Code table 4.208 - Turbulence
+0 0 None (smooth) 
+1 1 Light 
+2 2 Moderate 
+3 3 Severe 
+4 4 Extreme 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.209.table b/definitions/grib2/tables/19/4.209.table
new file mode 100644
index 0000000..cb76170
--- /dev/null
+++ b/definitions/grib2/tables/19/4.209.table
@@ -0,0 +1,9 @@
+# Code table 4.209 - Planetary boundary-layer regime
+0 0 Reserved 
+1 1 Stable 
+2 2 Mechanically driven turbulence 
+3 3 Forced convection 
+4 4 Free convection 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.210.table b/definitions/grib2/tables/19/4.210.table
new file mode 100644
index 0000000..524a6ca
--- /dev/null
+++ b/definitions/grib2/tables/19/4.210.table
@@ -0,0 +1,6 @@
+# Code table 4.210 - Contrail intensity
+0 0 Contrail not present 
+1 1 Contrail present 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.211.table b/definitions/grib2/tables/19/4.211.table
new file mode 100644
index 0000000..098eb2d
--- /dev/null
+++ b/definitions/grib2/tables/19/4.211.table
@@ -0,0 +1,7 @@
+# Code table 4.211 - Contrail engine type
+0 0 Low bypass 
+1 1 High bypass 
+2 2 Non-bypass 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.212.table b/definitions/grib2/tables/19/4.212.table
new file mode 100644
index 0000000..1a085b8
--- /dev/null
+++ b/definitions/grib2/tables/19/4.212.table
@@ -0,0 +1,18 @@
+# Code table 4.212 - Land use
+0 0 Reserved 
+1 1 Urban land 
+2 2 Agriculture 
+3 3 Range land 
+4 4 Deciduous forest 
+5 5 Coniferous forest 
+6 6 Forest/wetland 
+7 7 Water 
+8 8 Wetlands 
+9 9 Desert 
+10 10 Tundra 
+11 11 Ice 
+12 12 Tropical forest 
+13 13 Savannah 
+# 14-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.213.table b/definitions/grib2/tables/19/4.213.table
new file mode 100644
index 0000000..c65784a
--- /dev/null
+++ b/definitions/grib2/tables/19/4.213.table
@@ -0,0 +1,16 @@
+# Code table 4.213 - Soil type
+0 0 Reserved 
+1 1 Sand 
+2 2 Loamy sand 
+3 3 Sandy loam 
+4 4 Silt loam 
+5 5 Organic (redefined) 
+6 6 Sandy clay loam 
+7 7 Silt clay loam 
+8 8 Clay loam 
+9 9 Sandy clay 
+10 10 Silty clay 
+11 11 Clay 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.215.table b/definitions/grib2/tables/19/4.215.table
new file mode 100644
index 0000000..034db72
--- /dev/null
+++ b/definitions/grib2/tables/19/4.215.table
@@ -0,0 +1,9 @@
+# Code table 4.215 - Remotely sensed snow coverage
+# 0-49 Reserved 
+50 50 No-snow/no-cloud 
+# 51-99 Reserved 
+100 100 Clouds 
+# 101-249 Reserved 
+250 250 Snow 
+# 251-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.216.table b/definitions/grib2/tables/19/4.216.table
new file mode 100644
index 0000000..fd785ef
--- /dev/null
+++ b/definitions/grib2/tables/19/4.216.table
@@ -0,0 +1,96 @@
+# Code table 4.216 - Elevation of snow-covered terrain
+# 0-90 Elevation in increments of 100 m 
+0 0  Elevation in increments of 100 m
+1 1  Elevation in increments of 100 m
+2 2  Elevation in increments of 100 m
+3 3  Elevation in increments of 100 m
+4 4  Elevation in increments of 100 m
+5 5  Elevation in increments of 100 m
+6 6  Elevation in increments of 100 m
+7 7  Elevation in increments of 100 m
+8 8  Elevation in increments of 100 m
+9 9  Elevation in increments of 100 m
+10 10  Elevation in increments of 100 m
+11 11  Elevation in increments of 100 m
+12 12  Elevation in increments of 100 m
+13 13  Elevation in increments of 100 m
+14 14  Elevation in increments of 100 m
+15 15  Elevation in increments of 100 m
+16 16  Elevation in increments of 100 m
+17 17  Elevation in increments of 100 m
+18 18  Elevation in increments of 100 m
+19 19  Elevation in increments of 100 m
+20 20  Elevation in increments of 100 m
+21 21  Elevation in increments of 100 m
+22 22  Elevation in increments of 100 m
+23 23  Elevation in increments of 100 m
+24 24  Elevation in increments of 100 m
+25 25  Elevation in increments of 100 m
+26 26  Elevation in increments of 100 m
+27 27  Elevation in increments of 100 m
+28 28  Elevation in increments of 100 m
+29 29  Elevation in increments of 100 m
+30 30  Elevation in increments of 100 m
+31 31  Elevation in increments of 100 m
+32 32  Elevation in increments of 100 m
+33 33  Elevation in increments of 100 m
+34 34  Elevation in increments of 100 m
+35 35  Elevation in increments of 100 m
+36 36  Elevation in increments of 100 m
+37 37  Elevation in increments of 100 m
+38 38  Elevation in increments of 100 m
+39 39  Elevation in increments of 100 m
+40 40  Elevation in increments of 100 m
+41 41  Elevation in increments of 100 m
+42 42  Elevation in increments of 100 m
+43 43  Elevation in increments of 100 m
+44 44  Elevation in increments of 100 m
+45 45  Elevation in increments of 100 m
+46 46  Elevation in increments of 100 m
+47 47  Elevation in increments of 100 m
+48 48  Elevation in increments of 100 m
+49 49  Elevation in increments of 100 m
+50 50  Elevation in increments of 100 m
+51 51  Elevation in increments of 100 m
+52 52  Elevation in increments of 100 m
+53 53  Elevation in increments of 100 m
+54 54  Elevation in increments of 100 m
+55 55  Elevation in increments of 100 m
+56 56  Elevation in increments of 100 m
+57 57  Elevation in increments of 100 m
+58 58  Elevation in increments of 100 m
+59 59  Elevation in increments of 100 m
+60 60  Elevation in increments of 100 m
+61 61  Elevation in increments of 100 m
+62 62  Elevation in increments of 100 m
+63 63  Elevation in increments of 100 m
+64 64  Elevation in increments of 100 m
+65 65  Elevation in increments of 100 m
+66 66  Elevation in increments of 100 m
+67 67  Elevation in increments of 100 m
+68 68  Elevation in increments of 100 m
+69 69  Elevation in increments of 100 m
+70 70  Elevation in increments of 100 m
+71 71  Elevation in increments of 100 m
+72 72  Elevation in increments of 100 m
+73 73  Elevation in increments of 100 m
+74 74  Elevation in increments of 100 m
+75 75  Elevation in increments of 100 m
+76 76  Elevation in increments of 100 m
+77 77  Elevation in increments of 100 m
+78 78  Elevation in increments of 100 m
+79 79  Elevation in increments of 100 m
+80 80  Elevation in increments of 100 m
+81 81  Elevation in increments of 100 m
+82 82  Elevation in increments of 100 m
+83 83  Elevation in increments of 100 m
+84 84  Elevation in increments of 100 m
+85 85  Elevation in increments of 100 m
+86 86  Elevation in increments of 100 m
+87 87  Elevation in increments of 100 m
+88 88  Elevation in increments of 100 m
+89 89  Elevation in increments of 100 m
+90 90  Elevation in increments of 100 m
+# 91-253 Reserved 
+254 254 Clouds 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.217.table b/definitions/grib2/tables/19/4.217.table
new file mode 100644
index 0000000..a445218
--- /dev/null
+++ b/definitions/grib2/tables/19/4.217.table
@@ -0,0 +1,8 @@
+# Code table 4.217 - Cloud mask type
+0 0 Clear over water 
+1 1 Clear over land 
+2 2 Cloud 
+3 3 No data 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.218.table b/definitions/grib2/tables/19/4.218.table
new file mode 100644
index 0000000..7e3a695
--- /dev/null
+++ b/definitions/grib2/tables/19/4.218.table
@@ -0,0 +1,44 @@
+# Code table 4.218 - Pixel scene type
+0 0 No scene identified 
+1 1 Green needle-leafed forest 
+2 2 Green broad-leafed forest 
+3 3 Deciduous needle-leafed forest 
+4 4 Deciduous broad-leafed forest 
+5 5 Deciduous mixed forest 
+6 6 Closed shrub-land 
+7 7 Open shrub-land 
+8 8 Woody savannah 
+9 9 Savannah 
+10 10 Grassland 
+11 11 Permanent wetland 
+12 12 Cropland 
+13 13 Urban 
+14 14 Vegetation/crops 
+15 15 Permanent snow/ice 
+16 16 Barren desert 
+17 17 Water bodies 
+18 18 Tundra 
+19 19 Warm liquid water cloud 
+20 20 Supercooled liquid water cloud 
+21 21 Mixed-phase cloud 
+22 22 Optically thin ice cloud 
+23 23 Optically thick ice cloud 
+24 24 Multilayered cloud 
+# 25-96 Reserved 
+97 97 Snow/ice on land 
+98 98 Snow/ice on water 
+99 99 Sun-glint 
+100 100 General cloud 
+101 101 Low cloud/fog/Stratus 
+102 102 Low cloud/Stratocumulus 
+103 103 Low cloud/unknown type 
+104 104 Medium cloud/Nimbostratus 
+105 105 Medium cloud/Altostratus 
+106 106 Medium cloud/unknown type 
+107 107 High cloud/Cumulus 
+108 108 High cloud/Cirrus 
+109 109 High cloud/unknown 
+110 110 Unknown cloud type 
+# 111-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.219.table b/definitions/grib2/tables/19/4.219.table
new file mode 100644
index 0000000..86df052
--- /dev/null
+++ b/definitions/grib2/tables/19/4.219.table
@@ -0,0 +1,8 @@
+# Code table 4.219 - Cloud top height quality indicator
+0 0 Nominal cloud top height quality 
+1 1 Fog in segment 
+2 2 Poor quality height estimation 
+3 3 Fog in segment and poor quality height estimation 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.220.table b/definitions/grib2/tables/19/4.220.table
new file mode 100644
index 0000000..93e841f
--- /dev/null
+++ b/definitions/grib2/tables/19/4.220.table
@@ -0,0 +1,6 @@
+# Code table 4.220 - Horizontal dimension processed
+0 0 Latitude 
+1 1 Longitude 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.221.table b/definitions/grib2/tables/19/4.221.table
new file mode 100644
index 0000000..8448533
--- /dev/null
+++ b/definitions/grib2/tables/19/4.221.table
@@ -0,0 +1,6 @@
+# Code table 4.221 - Treatment of missing data
+0 0 Not included 
+1 1 Extrapolated 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.222.table b/definitions/grib2/tables/19/4.222.table
new file mode 100644
index 0000000..57f1130
--- /dev/null
+++ b/definitions/grib2/tables/19/4.222.table
@@ -0,0 +1,6 @@
+# Code table 4.222 - Categorical result
+0 0 No 
+1 1 Yes 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.223.table b/definitions/grib2/tables/19/4.223.table
new file mode 100644
index 0000000..f0deb07
--- /dev/null
+++ b/definitions/grib2/tables/19/4.223.table
@@ -0,0 +1,5 @@
+# Code table 4.223 - Fire detection indicator
+0 0 No fire detected 
+1 1 Possible fire detected 
+2 2 Probable fire detected 
+3 3 Missing 
diff --git a/definitions/grib2/tables/19/4.224.table b/definitions/grib2/tables/19/4.224.table
new file mode 100644
index 0000000..e87cde4
--- /dev/null
+++ b/definitions/grib2/tables/19/4.224.table
@@ -0,0 +1,18 @@
+# Code table 4.224 - Categorical outlook
+0 0 No risk area 
+1 1 Reserved 
+2 2 General thunderstorm risk area 
+3 3 Reserved 
+4 4 Slight risk area 
+5 5 Reserved 
+6 6 Moderate risk area 
+7 7 Reserved 
+8 8 High risk area 
+# 9-10 Reserved 
+11 11 Dry thunderstorm (dry lightning) risk area 
+# 12-13 Reserved 
+14 14 Critical risk area 
+# 15-17 Reserved 
+18 18 Extremely critical risk area 
+# 19-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.225.table b/definitions/grib2/tables/19/4.225.table
new file mode 100644
index 0000000..537f110
--- /dev/null
+++ b/definitions/grib2/tables/19/4.225.table
@@ -0,0 +1,267 @@
+# Code table 4.225 - Weather (see FM 94 BUFR/FM 95 CREX Code table 0 20 003 - Present weather)
+00 00 Cloud development not observed or not observable
+01 01 Clouds generally dissolving or becoming less developed
+02 02 State of sky on the whole unchanged
+03 03 Clouds generally forming or developing
+04 04 Visibility reduced by smoke, e.g. veldt or forest fires, industrial smoke or volcanic ashes
+05 05 Haze
+06 06 Widespread dust in suspension in the air, not raised by wind at or near the station at the time of observation
+07 07 Dust or sand raised by wind at or near the station at the time of observation, but no well developed dust whirl(s) or sand whirl(s), and no duststorm or sandstorm seen; or, in the case of sea stations and coastal stations, blowing spray at the station
+08 08 Well-developed dust whirl(s) or sand whirl(s) seen at or near the station during the preceding hour or at the same time of observation, but no duststorm or sandstorm
+09 09 Duststorm or sandstorm within sight at the time of observation, or at the station during the preceding hour
+10 10 Mist
+11 11 Patches
+12 12 More or less continuous
+13 13 Lightning visible, no thunder heard
+14 14 Precipitation within sight, not reaching the ground or the surface of the sea
+15 15 Precipitation within sight, reaching the ground or the surface of the sea, but distant, i.e. estimated to be more than 5 km from the station
+16 16 Precipitation within sight, reaching the ground or the surface of the sea, near to, but not at the station
+17 17 Thunderstorm, but no precipitation at the time of observation
+18 18 Squalls
+19 19 Funnel cloud(s)
+20 20 Drizzle (not freezing) or snow grains
+21 21 Rain (not freezing)
+22 22 Snow
+23 23 Rain and snow or ice pellets
+24 24 Freezing drizzle or freezing rain
+25 25 Shower(s) of rain
+26 26 Shower(s) of snow, or of rain and snow
+27 27 Shower(s) of hail, or of rain and hail
+28 28 Fog or ice fog
+29 29 Thunderstorm (with or without precipitation)
+30 30 Slight or moderate duststorm or sandstorm has decreased during the preceding hour
+31 31 Slight or moderate duststorm or sandstorm no appreciable change during the preceding hour
+32 32 Slight or moderate duststorm or sandstorm has begun or has increased during the preceding hour
+33 33 Severe duststorm or sandstorm has decreased during the preceding hour
+34 34 Severe duststorm or sandstorm no appreciable change during the preceding hour
+35 35 Severe duststorm or sandstorm has begun or has increased during the preceding hour
+36 36 Slight or moderate drifting snow generally low (below eye level)
+37 37 Heavy drifting snow generally low (below eye level)
+38 38 Slight or moderate blowing snow generally high (above eye level)
+39 39 Heavy blowing snow generally high (above eye level)
+40 40 Fog or ice fog at a distance at the time of observation, but not at the station during the preceding hour, the fog or ice fog extending to a level above that of the observer
+41 41 Fog or ice fog in patches
+42 42 Fog or ice fog, sky visible has become thinner during the preceding hour
+43 43 Fog or ice fog, sky invisible has become thinner during the preceding hour
+44 44 Fog or ice fog, sky visible no appreciable change during the preceding hour
+45 45 Fog or ice fog, sky invisible no appreciable change during the preceding hour
+46 46 Fog or ice fog, sky visible has begun or has become thicker during the preceding hour
+47 47 Fog or ice fog, sky invisible has begun or has become thicker during the preceding hour
+48 48 Fog, depositing rime, sky visible
+49 49 Fog, depositing rime, sky invisible
+50 50 Drizzle, not freezing, intermittent slight at time of observation
+51 51 Drizzle, not freezing, continuous slight at time of observation
+52 52 Drizzle, not freezing, intermittent moderate at time of observation
+53 53 Drizzle, not freezing, continuous moderate at time of observation
+54 54 Drizzle, not freezing, intermittent heavy (dense) at time of observation
+55 55 Drizzle, not freezing, continuous heavy (dense) at time of observation
+56 56 Drizzle, freezing, slight
+57 57 Drizzle, freezing, moderate or heavy (dense)
+58 58 Drizzle and rain, slight
+59 59 Drizzle and rain, moderate or heavy
+60 60 Rain, not freezing, intermittent slight at time of observation
+61 61 Rain, not freezing, continuous slight at time of observation
+62 62 Rain, not freezing, intermittent moderate at time of observation
+63 63 Rain, not freezing, continuous moderate at time of observation
+64 64 Rain, not freezing, intermittent heavy at time of observation
+65 65 Rain, not freezing, continuous heavy at time of observation
+66 66 Rain, freezing, slight
+67 67 Rain, freezing, moderate or heavy
+68 68 Rain or drizzle and snow, slight
+69 69 Rain or drizzle and snow, moderate or heavy
+70 70 Intermittent fall of snowflakes slight at time of observation
+71 71 Continuous fall of snowflakes slight at time of observation
+72 72 Intermittent fall of snowflakes moderate at time of observation
+73 73 Continuous fall of snowflakes moderate at time of observation
+74 74 Intermittent fall of snowflakes heavy at time of observation
+75 75 Continuous fall of snowflakes heavy at time of observation
+76 76 Diamond dust (with or without fog)
+77 77 Snow grains (with or without fog)
+78 78 Isolated star-like snow crystals (with or without fog)
+79 79 Ice pellets
+80 80 Rain shower(s), slight
+81 81 Rain shower(s), moderate or heavy
+82 82 Rain shower(s), violent
+83 83 Shower(s) of rain and snow mixed, slight
+84 84 Shower(s) of rain and snow mixed, moderate or heavy
+85 85 Snow shower(s), slight
+86 86 Snow shower(s), moderate or heavy
+87 87 Shower(s) of snow pellets or small hail, with or without rain or rain and snow mixed slight
+88 88 Shower(s) of snow pellets or small hail, with or without rain or rain and snow mixed moderate or heavy
+89 89 Shower(s) of hail, with or without rain or rain and snow mixed, not associated with thunder slight
+90 90 Shower(s) of hail, with or without rain or rain and snow mixed, not associated with thunder moderate or heavy
+91 91 Slight rain at time of observation
+92 92 Moderate or heavy rain at time of observation
+93 93 Slight snow, or rain and snow mixed or hail at time of observation
+94 94 Moderate or heavy snow, or rain and snow mixed or hail at time of observation
+95 95 Thunderstorm, slight or moderate, without hail, but with rain and/or snow at time of observation
+96 96 Thunderstorm, slight or moderate, with hail at time of observation
+97 97 Thunderstorm, heavy, without hail, but with rain and/or snow at time of observation
+98 98 Thunderstorm combined with duststorm or sandstorm at time of observation
+99 99 Thunderstorm, heavy, with hail at time of observation
+100 100 No significant weather observed
+101 101 Clouds generally dissolving or becoming less developed during the past hour
+102 102 State of sky on the whole unchanged during the past hour
+103 103 Clouds generally forming or developing during the past hour
+104 104 Haze or smoke, or dust in suspension in the air, visibility equal to, or greater than, 1 km
+105 105 Haze or smoke, or dust in suspension in the air, visibility less than 1 km
+#106-109 Reserved
+110 110 Mist
+111 111 Diamond dust
+112 112 Distant lightning
+#113-117 Reserved
+118 118 Squalls
+#119 Reserved
+120 120 Fog
+121 121 PRECIPITATION
+122 122 Drizzle (not freezing) or snow grains
+123 123 Rain (not freezing)
+124 124 Snow
+125 125 Freezing drizzle or freezing rain
+126 126 Thunderstorm (with or without precipitation)
+127 127 BLOWING OR DRIFTING SNOW OR SAND
+128 128 Blowing or drifting snow or sand, visibility equal to, or greater than, 1 km
+129 129 Blowing or drifting snow or sand, visibility less than 1 km
+130 130 FOG
+131 131 Fog or ice fog in patches
+132 132 Fog or ice fog, has become thinner during the past hour
+133 133 Fog or ice fog, no appreciable change during the past hour
+134 134 Fog or ice fog, has begun or become thicker during the past hour
+135 135 Fog, depositing rime
+#136-139 Reserved
+140 140 PRECIPITATION
+141 141 Precipitation, slight or moderate
+142 142 Precipitation, heavy
+143 143 Liquid precipitation, slight or moderate
+144 144 Liquid precipitation, heavy
+145 145 Solid precipitation, slight or moderate
+146 146 Solid precipitation, heavy
+147 147 Freezing precipitation, slight or moderate
+148 148 Freezing precipitation, heavy
+#149 Reserved
+150 150 DRIZZLE
+151 151 Drizzle, not freezing, slight
+152 152 Drizzle, not freezing, moderate
+153 153 Drizzle, not freezing, heavy
+154 154 Drizzle, freezing, slight
+155 155 Drizzle, freezing, moderate
+156 156 Drizzle, freezing, heavy
+157 157 Drizzle and rain, slight
+158 158 Drizzle and rain, moderate or heavy
+#159 Reserved
+160 160 RAIN
+161 161 Rain, not freezing, slight
+162 162 Rain, not freezing, moderate
+163 163 Rain, not freezing, heavy
+164 164 Rain, freezing, slight
+165 165 Rain, freezing, moderate
+166 166 Rain, freezing, heavy
+167 167 Rain (or drizzle) and snow, slight
+168 168 Rain (or drizzle) and snow, moderate or heavy
+#169 Reserved
+170 170 SNOW
+171 171 Snow, slight
+172 172 Snow, moderate
+173 173 Snow, heavy
+174 174 Ice pellets, slight
+175 175 Ice pellets, moderate
+176 176 Ice pellets, heavy
+177 177 Snow grains
+178 178 Ice crystals
+#179 Reserved
+180 180 SHOWER(S) OR INTERMITTENT PRECIPITATION
+181 181 Rain shower(s) or intermittent rain, slight
+182 182 Rain shower(s) or intermittent rain, moderate
+183 183 Rain shower(s) or intermittent rain, heavy
+184 184 Rain shower(s) or intermittent rain, violent
+185 185 Snow shower(s) or intermittent snow, slight
+186 186 Snow shower(s) or intermittent snow, moderate
+187 187 Snow shower(s) or intermittent snow, heavy
+#188 Reserved
+189 189 Hail
+190 190 THUNDERSTORM
+191 191 Thunderstorm, slight or moderate, with no precipitation
+192 192 Thunderstorm, slight or moderate, with rain showers and/or snow showers
+193 193 Thunderstorm, slight or moderate, with hail
+194 194 Thunderstorm, heavy, with no precipitation
+195 195 Thunderstorm, heavy, with rain showers and/or snow showers
+196 196 Thunderstorm, heavy, with hail
+#197-198 Reserved
+199 199 Tornado
+204 204 Volcanic ash suspended in the air aloft
+206 206 Thick dust haze, visibility less than 1 km
+207 207 Blowing spray at the station
+208 208 Drifting dust (sand)
+209 209 Wall of dust or sand in distance (like haboob)
+210 210 Snow haze
+211 211 Whiteout
+213 213 Lightning, cloud to surface
+#214-216 Not used
+217 217 Dry thunderstorm
+219 219 Tornado cloud (destructive) at or within sight of the station during preceding hour or at the time of observation
+220 220 Deposition of volcanic ash
+221 221 Deposition of dust or sand
+222 222 Deposition of dew
+223 223 Deposition of wet snow
+224 224 Deposition of soft rime
+225 225 Deposition of hard rime
+226 226 Deposition of hoar frost
+227 227 Deposition of glaze
+228 228 Deposition of ice crust (ice slick)
+230 230 Duststorm or sandstorm with temperature below 0 degrees
+239 239 Blowing snow, impossible to determine whether snow is falling or not
+241 241 Fog on sea
+242 242 Fog in valleys
+243 243 Arctic or Antarctic sea smoke
+244 244 Steam fog (sea, lake or river)
+245 245 Steam log (land)
+246 246 Fog over ice or snow cover
+247 247 Dense fog, visibility 60-90 m
+248 248 Dense fog, visibility 30-60 m
+249 249 Dense fog, visibility less than 30 m
+250 250 Drizzle, rate of fall - less than 0.10 mm h-1
+251 251 Drizzle, rate of fall - 0.10-0.19 mm h-1
+252 252 Drizzle, rate of fall - 0.20-0.39 mm h-1
+253 253 Drizzle, rate of fall - 0.40-0.79 mm h-1
+254 254 Drizzle, rate of fall - 0.80-1.59 mm h-1
+255 255 Drizzle, rate of fall - 1.60-3.19 mm h-1
+256 256 Drizzle, rate of fall - 3.20-6.39 mm h-1
+257 257 Drizzle, rate of fall - 6.4 mm h-1 or more
+259 259 Drizzle and snow
+260 260 Rain, rate of fall - less than 1.0 mm h-1
+261 261 Rain, rate of fall - 1.0-1.9 mm h-1
+262 262 Rain, rate of fall - 2.0-3.9 mm h-1
+263 263 Rain, rate of fall - 4.0-7.9 mm h-1
+264 264 Rain, rate of fall - 8.0-15.9 mm h-1
+265 265 Rain, rate of fall - 16.0-31.9 mm h-1
+266 266 Rain, rate of fall - 32.0-63.9 mm h-1
+267 267 Rain, rate of fall - 64.0 mm h-1 or more
+270 270 Snow, rate of fall - less than 1.0 cm h-1
+271 271 Snow, rate of fall - 1.0-1.9 cm h-1
+272 272 Snow, rate of fall - 2.0-3.9 cm h-1
+273 273 Snow, rate of fall - 4.0-7.9 cm h-1
+274 274 Snow, rate of fall - 8.0-15.9 cm h-1
+275 275 Snow, rate of fall - 16.0-31.9 cm h-1
+276 276 Snow, rate of fall - 32.0-63.9 cm h-1
+277 277 Snow, rate of fall - 64.0 cm h-1 or more
+278 278 Snow or ice crystal precipitation from a clear sky
+279 279 Wet snow, freezing on contact
+280 280 Precipitation of rain
+281 281 Precipitation of rain, freezing
+282 282 Precipitation of rain and snow mixed
+283 283 Precipitation of snow
+284 284 Precipitation of snow pellets or small hall
+285 285 Precipitation of snow pellets or small hail, with rain
+286 286 Precipitation of snow pellets or small hail, with rain and snow mixed
+287 287 Precipitation of snow pellets or small hail, with snow
+288 288 Precipitation of hail
+289 289 Precipitation of hail, with rain
+290 290 Precipitation of hall, with rain and snow mixed
+291 291 Precipitation of hail, with snow
+292 292 Shower(s) or thunderstorm over sea
+293 293 Shower(s) or thunderstorm over mountains
+#300-507 Reserved
+508 508 No significant phenomenon to report, present and past weather omitted
+509 509 No observation, data not available, present and past weather omitted
+510 510 Present and past weather missing, but expected
+511 511 Missing value
diff --git a/definitions/grib2/tables/19/4.227.table b/definitions/grib2/tables/19/4.227.table
new file mode 100644
index 0000000..27c7655
--- /dev/null
+++ b/definitions/grib2/tables/19/4.227.table
@@ -0,0 +1,9 @@
+# Code table 4.227 - Icing scenario (weather/cloud classification)
+0 0 None 
+1 1 General 
+2 2 Convective 
+3 3 Stratiform 
+4 4 Freezing 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/19/4.230.table b/definitions/grib2/tables/19/4.230.table
new file mode 100644
index 0000000..272731d
--- /dev/null
+++ b/definitions/grib2/tables/19/4.230.table
@@ -0,0 +1,449 @@
+# Code table 4.230 - Atmospheric chemical constituent type
+0 0 Ozone O3
+1 1 Water vapour H2O
+2 2 Methane CH4
+3 3 Carbon dioxide CO2
+4 4 Carbon monoxide CO
+5 5 Nitrogen dioxide NO2
+6 6 Nitrous oxide N2O
+7 7 Formaldehyde HCHO
+8 8 Sulphur dioxide SO2
+9 9 Ammonia NH3
+10 10 Ammonium NH4+
+11 11 Nitrogen monoxide NO
+12 12 Atomic oxygen O
+13 13 Nitrate radical NO3
+14 14 Hydroperoxyl radical HO2
+15 15 Dinitrogen pentoxide N2O5
+16 16 Nitrous acid HONO
+17 17 Nitric acid HNO3
+18 18 Peroxynitric acid HO2NO2
+19 19 Hydrogen peroxide H2O2
+20 20 Molecular hydrogen H
+21 21 Atomic nitrogen N
+22 22 Sulphate SO42-
+23 23 Radon Rn
+24 24 Elemental mercury Hg(0)
+25 25 Divalent mercury Hg2+
+26 26 Atomic chlorine Cl
+27 27 Chlorine monoxide ClO
+28 28 Dichlorine peroxide Cl2O2
+29 29 Hypochlorous acid HClO
+30 30 Chlorine nitrate ClONO2
+31 31 Chlorine dioxide ClO2
+32 32 Atomic bromine Br
+33 33 Bromine monoxide BrO
+34 34 Bromine chloride BrCl
+35 35 Hydrogen bromide HBr
+36 36 Hypobromous acid HBrO
+37 37 Bromine nitrate BrONO2
+38 38 Oxygen O2
+#39-9999 Reserved
+10000 10000 Hydroxyl radical OH
+10001 10001 Methyl peroxy radical CH3O2
+10002 10002 Methyl hydroperoxide CH3O2H
+10004 10004 Methanol CH3OH
+10005 10005 Formic acid CH3OOH
+10006 10006 Hydrogen cyanide HCN
+10007 10007 Aceto nitrile CH3CN
+10008 10008 Ethane C2H6
+10009 10009 Ethene (= Ethylene) C2H4
+10010 10010 Ethyne (= Acetylene) C2H2
+10011 10011 Ethanol C2H5OH
+10012 10012 Acetic acid C2H5OOH
+10013 10013 Peroxyacetyl nitrate CH3C(O)OONO2
+10014 10014 Propane C3H8
+10015 10015 Propene C3H6
+10016 10016 Butanes C4H10
+10017 10017 Isoprene C5H10
+10018 10018 Alpha pinene C10H16
+10019 10019 Beta pinene C10H16
+10020 10020 Limonene C10H16
+10021 10021 Benzene C6H6
+10022 10022 Toluene C7H8
+10023 10023 Xylene C8H10
+#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...)
+10500 10500 Dimethyl sulphide CH3SCH3 (DMS)
+#10501-20000 Reserved
+20001 20001 Hydrogen chloride
+20002 20002 CFC-11
+20003 20003 CFC-12
+20004 20004 CFC-113
+20005 20005 CFC-113a
+20006 20006 CFC-114
+20007 20007 CFC-115
+20008 20008 HCFC-22
+20009 20009 HCFC-141b
+20010 20010 HCFC-142b
+20011 20011 Halon-1202
+20012 20012 Halon-1211
+20013 20013 Halon-1301
+20014 20014 Halon-2402
+20015 20015 Methyl chloride (HCC-40)
+20016 20016 Carbon tetrachloride (HCC-10)
+20017 20017 HCC-140a CH3CCl3
+20018 20018 Methyl bromide (HBC-40B1)
+20019 20019 Hexachlorocyclohexane (HCH)
+20020 20020 Alpha hexachlorocyclohexane
+20021 20021 Hexachlorobiphenyl (PCB-153)
+#20022-29999 Reserved
+30000 30000 Radioactive pollutant (tracer, defined by originating centre)
+#30001-30009 Reserved
+30010 30010 Hydrogen H-3
+30011 30011 Hydrogen organic bounded H-3o
+30012 30012 Hydrogen inorganic H-3a
+30013 30013 Beryllium 7 Be-7
+30014 30014 Beryllium 10 Be-10
+30015 30015 Carbon 14 C-14
+30016 30016 Carbon 14 CO2 C-14CO2
+30017 30017 Carbon 14 other gases C-14og
+30018 30018 Nitrogen 13 N-13
+30019 30019 Nitrogen 16 N-16
+30020 30020 Fluorine 18 F-18
+30021 30021 Sodium 22 Na-22
+30022 30022 Phosphate 32 P-32
+30023 30023 Phosphate 33 P-33
+30024 30024 Sulphur 35 S-35
+30025 30025 Chlorine 36 Cl-36
+30026 30026 Potassium 40 K-40
+30027 30027 Argon 41 Ar-41
+30028 30028 Calcium 41 Ca-41
+30029 30029 Calcium 45 Ca-45
+30030 30030 Titanium 44 Ti-44
+30031 30031 Scandium 46 Sc-46
+30032 30032 Vanadium 48 V-48
+30033 30033 Vanadium 49 V-49
+30034 30034 Chrome 51 Cr-51
+30035 30035 Manganese 52 Mn-52
+30036 30036 Manganese 54 Mn-54
+30037 30037 Iron 55 Fe-55
+30038 30038 Iron 59 Fe-59
+30039 30039 Cobalt 56 Co-56
+30040 30040 Cobalt 57 Co-57
+30041 30041 Cobalt 58 Co-58
+30042 30042 Cobalt 60 Co-60
+30043 30043 Nickel 59 Ni-59
+30044 30044 Nickel 63 Ni-63
+30045 30045 Zinc 65 Zn-65
+30046 30046 Gallium 67 Ga-67
+30047 30047 Gallium 68 Ga-68
+30048 30048 Germanium 68 Ge-68
+30049 30049 Germanium 69 Ge-69
+30050 30050 Arsenic 73 As-73
+30051 30051 Selenium 75 Se-75
+30052 30052 Selenium 79 Se-79
+30053 30053 Rubidium 81 Rb-81
+30054 30054 Rubidium 83 Rb-83
+30055 30055 Rubidium 84 Rb-84
+30056 30056 Rubidium 86 Rb-86
+30057 30057 Rubidium 87 Rb-87
+30058 30058 Rubidium 88 Rb-88
+30059 30059 Krypton 85 Kr-85
+30060 30060 Krypton 85 metastable Kr-85m
+30061 30061 Krypton 87 Kr-87
+30062 30062 Krypton 88 Kr-88
+30063 30063 Krypton 89 Kr-89
+30064 30064 Strontium 85 Sr-85
+30065 30065 Strontium 89 Sr-89
+30066 30066 Strontium 89/90 Sr-8990
+30067 30067 Strontium 90 Sr-90
+30068 30068 Strontium 91 Sr-91
+30069 30069 Strontium 92 Sr-92
+30070 30070 Yttrium 87 Y-87
+30071 30071 Yttrium 88 Y-88
+30072 30072 Yttrium 90 Y-90
+30073 30073 Yttrium 91 Y-91
+30074 30074 Yttrium 91 metastable Y-91m
+30075 30075 Yttrium 92 Y-92
+30076 30076 Yttrium 93 Y-93
+30077 30077 Zirconium 89 Zr-89
+30078 30078 Zirconium 93 Zr-93
+30079 30079 Zirconium 95 Zr-95
+30080 30080 Zirconium 97 Zr-97
+30081 30081 Niobium 93 metastable Nb-93m
+30082 30082 Niobium 94 Nb-94
+30083 30083 Niobium 95 Nb-95
+30084 30084 Niobium 95 metastable Nb-95m
+30085 30085 Niobium 97 Nb-97
+30086 30086 Niobium 97 metastable Nb-97m
+30087 30087 Molybdenum 93 Mo-93
+30088 30088 Molybdenum 99 Mo-99
+30089 30089 Technetium 95 metastable Tc-95m
+30090 30090 Technetium 96 Tc-96
+30091 30091 Technetium 99 Tc-99
+30092 30092 Technetium 99 metastable Tc-99m
+30093 30093 Rhodium 99 Rh-99
+30094 30094 Rhodium 101 Rh-101
+30095 30095 Rhodium 102 metastable Rh-102m
+30096 30096 Rhodium 103 metastable Rh-103m
+30097 30097 Rhodium 105 Rh-105
+30098 30098 Rhodium 106 Rh-106
+30099 30099 Palladium 100 Pd-100
+30100 30100 Palladium 103 Pd-103
+30101 30101 Palladium 107 Pd-107
+30102 30102 Ruthenium 103 Ru-103
+30103 30103 Ruthenium 105 Ru-105
+30104 30104 Ruthenium 106 Ru-106
+30105 30105 Silver 108 metastable Ag-108m
+30106 30106 Silver 110 metastable Ag-110m
+30107 30107 Cadmium 109 Cd-109
+30108 30108 Cadmium 113 metastable Cd-113m
+30109 30109 Cadmium 115 metastable Cd-115m
+30110 30110 Indium 114 metastable In-114m
+30111 30111 Tin 113 Sn-113
+30112 30112 Tin 119 metastable Sn-119m
+30113 30113 Tin 121 metastable Sn-121m
+30114 30114 Tin 122 Sn-122
+30115 30115 Tin 123 Sn-123
+30116 30116 Tin 126 Sn-126
+30117 30117 Antimony 124 Sb-124
+30118 30118 Antimony 125 Sb-125
+30119 30119 Antimony 126 Sb-126
+30120 30120 Antimony 127 Sb-127
+30121 30121 Antimony 129 Sb-129
+30122 30122 Tellurium 123 metastable Te-123m
+30123 30123 Tellurium 125 metastable Te-125m
+30124 30124 Tellurium 127 Te-127
+30125 30125 Tellurium 127 metastable Te-127m
+30126 30126 Tellurium 129 Te-129
+30127 30127 Tellurium 129 metastable Te-129m
+30128 30128 Tellurium 131 metastable Te-131m
+30129 30129 Tellurium 132 Te-132
+30130 30130 Iodine 123 I-123
+30131 30131 Iodine 124 I-124
+30132 30132 Iodine 125 I-125
+30133 30133 Iodine 126 I-126
+30134 30134 Iodine 129 I-129
+30135 30135 Iodine 129 elementary gaseous I-129g
+30136 30136 Iodine 129 organic bounded I-129o
+30137 30137 Iodine 131 I-131
+30138 30138 Iodine 131 elementary gaseous I-131g
+30139 30139 Iodine 131 organic bounded I-131o
+30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go
+30141 30141 Iodine 131 aerosol I-131a
+30142 30142 Iodine 132 I-132
+30143 30143 Iodine 132 elementary gaseous I-132g
+30144 30144 Iodine 132 organic bounded I-132o
+30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go
+30146 30146 Iodine 132 aerosol I-132a
+30147 30147 Iodine 133 I-133
+30148 30148 Iodine 133 elementary gaseous I-133g
+30149 30149 Iodine 133 organic bounded I-133o
+30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go
+30151 30151 Iodine 133 aerosol I-133a
+30152 30152 Iodine 134 I-134
+30153 30153 Iodine 134 elementary gaseous I-134g
+30154 30154 Iodine 134 organic bounded I-134o
+30155 30155 Iodine 135 I-135
+30156 30156 Iodine 135 elementary gaseous I-135g
+30157 30157 Iodine 135 organic bounded I-135o
+30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go
+30159 30159 Iodine 135 aerosol I-135a
+30160 30160 Xenon 131 metastable Xe-131m
+30161 30161 Xenon 133 Xe-133
+30162 30162 Xenon 133 metastable Xe-133m
+30163 30163 Xenon 135 Xe-135
+30164 30164 Xenon 135 metastable Xe-135m
+30165 30165 Xenon 137 Xe-137
+30166 30166 Xenon 138 Xe-138
+30167 30167 Xenon sum of all Xenon isotopes Xe-sum
+30168 30168 Caesium 131 Cs-131
+30169 30169 Caesium 134 Cs-134
+30170 30170 Caesium 135 Cs-135
+30171 30171 Caesium 136 Cs-136
+30172 30172 Caesium 137 Cs-137
+30173 30173 Barium 133 Ba-133
+30174 30174 Barium 137 metastable Ba-137m
+30175 30175 Barium 140 Ba-140
+30176 30176 Cerium 139 Ce-139
+30177 30177 Cerium 141 Ce-141
+30178 30178 Cerium 143 Ce-143
+30179 30179 Cerium 144 Ce-144
+30180 30180 Lanthanum 140 La-140
+30181 30181 Lanthanum 141 La-141
+30182 30182 Praseodymium 143 Pr-143
+30183 30183 Praseodymium 144 Pr-144
+30184 30184 Praseodymium 144 metastable Pr-144m
+30185 30185 Samarium 145 Sm-145
+30186 30186 Samarium 147 Sm-147
+30187 30187 Samarium 151 Sm-151
+30188 30188 Neodymium 147 Nd-147
+30189 30189 Promethium 146 Pm-146
+30190 30190 Promethium 147 Pm-147
+30191 30191 Promethium 151 Pm-151
+30192 30192 Europium 152 Eu-152
+30193 30193 Europium 154 Eu-154
+30194 30194 Europium 155 Eu-155
+30195 30195 Gadolinium 153 Gd-153
+30196 30196 Terbium 160 Tb-160
+30197 30197 Holmium 166 metastable Ho-166m
+30198 30198 Thulium 170 Tm-170
+30199 30199 Ytterbium 169 Yb-169
+30200 30200 Hafnium 175 Hf-175
+30201 30201 Hafnium 181 Hf-181
+30202 30202 Tantalum 179 Ta-179
+30203 30203 Tantalum 182 Ta-182
+30204 30204 Rhenium 184 Re-184
+30205 30205 Iridium 192 Ir-192
+30206 30206 Mercury 203 Hg-203
+30207 30207 Thallium 204 Tl-204
+30208 30208 Thallium 207 Tl-207
+30209 30209 Thallium 208 Tl-208
+30210 30210 Thallium 209 Tl-209
+30211 30211 Bismuth 205 Bi-205
+30212 30212 Bismuth 207 Bi-207
+30213 30213 Bismuth 210 Bi-210
+30214 30214 Bismuth 211 Bi-211
+30215 30215 Bismuth 212 Bi-212
+30216 30216 Bismuth 213 Bi-213
+30217 30217 Bismuth 214 Bi-214
+30218 30218 Polonium 208 Po-208
+30219 30219 Polonium 210 Po-210
+30220 30220 Polonium 212 Po-212
+30221 30221 Polonium 213 Po-213
+30222 30222 Polonium 214 Po-214
+30223 30223 Polonium 215 Po-215
+30224 30224 Polonium 216 Po-216
+30225 30225 Polonium 218 Po-218
+30226 30226 Lead 209 Pb-209
+30227 30227 Lead 210 Pb-210
+30228 30228 Lead 211 Pb-211
+30229 30229 Lead 212 Pb-212
+30230 30230 Lead 214 Pb-214
+30231 30231 Astatine 217 At-217
+30232 30232 Radon 219 Rn-219
+30233 30233 Radon 220 Rn-220
+30234 30234 Radon 222 Rn-222
+30235 30235 Francium 221 Fr-221
+30236 30236 Francium 223 Fr-223
+30237 30237 Radium 223 Ra-223
+30238 30238 Radium 224 Ra-224
+30239 30239 Radium 225 Ra-225
+30240 30240 Radium 226 Ra-226
+30241 30241 Radium 228 Ra-228
+30242 30242 Actinium 225 Ac-225
+30243 30243 Actinium 227 Ac-227
+30244 30244 Actinium 228 Ac-228
+30245 30245 Thorium 227 Th-227
+30246 30246 Thorium 228 Th-228
+30247 30247 Thorium 229 Th-229
+30248 30248 Thorium 230 Th-230
+30249 30249 Thorium 231 Th-231
+30250 30250 Thorium 232 Th-232
+30251 30251 Thorium 234 Th-234
+30252 30252 Protactinium 231 Pa-231
+30253 30253 Protactinium 233 Pa-233
+30254 30254 Protactinium 234 metastable Pa-234m
+30255 30255 Uranium 232 U-232
+30256 30256 Uranium 233 U-233
+30257 30257 Uranium 234 U-234
+30258 30258 Uranium 235 U-235
+30259 30259 Uranium 236 U-236
+30260 30260 Uranium 237 U-237
+30261 30261 Uranium 238 U-238
+30262 30262 Plutonium 236 Pu-236
+30263 30263 Plutonium 238 Pu-238
+30264 30264 Plutonium 239 Pu-239
+30265 30265 Plutonium 240 Pu-240
+30266 30266 Plutonium 241 Pu-241
+30267 30267 Plutonium 242 Pu-242
+30268 30268 Plutonium 244 Pu-244
+30269 30269 Neptunium 237 Np-237
+30270 30270 Neptunium 238 Np-238
+30271 30271 Neptunium 239 Np-239
+30272 30272 Americium 241 Am-241
+30273 30273 Americium 242 Am-242
+30274 30274 Americium 242 metastable Am-242m
+30275 30275 Americium 243 Am-243
+30276 30276 Curium 242 Cm-242
+30277 30277 Curium 243 Cm-243
+30278 30278 Curium 244 Cm-244
+30279 30279 Curium 245 Cm-245
+30280 30280 Curium 246 Cm-246
+30281 30281 Curium 247 Cm-247
+30282 30282 Curium 248 Cm-248
+30283 30283 Curium 243/244 Cm-243244
+30284 30284 Plutonium 238/Americium 241 Pu-238Am-241
+30285 30285 Plutonium 239/240 Pu-239240
+30286 30286 Berkelium 249 Bk-249
+30287 30287 Californium 249 Cf-249
+30288 30288 Californium 250 Cf-250
+30289 30289 Californium 252 Cf-252
+30290 30290 Sum aerosol particulates SumAer
+30291 30291 Sum Iodine SumIod
+30292 30292 Sum noble gas SumNG
+30293 30293 Activation gas ActGas
+30294 30294 Cs-137 Equivalent EquCs137
+#30295-59999 Reserved
+60000 60000 HOx radical (OH+HO2)
+60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2)
+60002 60002 Passive Ozone
+60003 60003 NOx expressed as nitrogen NOx
+60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy
+60005 60005 Total inorganic chlorine Clx
+60006 60006 Total inorganic bromine Brx
+60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx
+60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx
+60009 60009 Lumped alkanes
+60010 60010 Lumped alkenes
+60011 60011 Lumped aromatic compounds
+60012 60012 Lumped terpenes
+60013 60013 Non-methane volatile organic compounds expressed as carbon
+60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon
+60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon
+60016 60016 Lumped oxygenated hydrocarbons
+60017 60017 NOx expressed as nitrogen dioxide (NO2)
+#60018-61999 Reserved
+62000 62000 Total aerosol
+62001 62001 Dust dry
+62002 62002 Water in ambient
+62003 62003 Ammonium dry
+62004 62004 Nitrate dry
+62005 62005 Nitric acid trihydrate
+62006 62006 Sulphate dry
+62007 62007 Mercury dry
+62008 62008 Sea salt dry
+62009 62009 Black carbon dry
+62010 62010 Particulate organic matter dry
+62011 62011 Primary particulate organic matter dry
+62012 62012 Secondary particulate organic matter dry
+62013 62013 Black carbon hydrophilic dry
+62014 62014 Black carbon hydrophobic dry
+62015 62015 Particulate organic matter hydrophilic dry
+62016 62016 Particulate organic matter hydrophobic dry
+62017 62017 Nitrate hydrophilic dry
+62018 62018 Nitrate hydrophobic dry
+#62019 Reserved
+62020 62020 Smoke - high absorption
+62021 62021 Smoke - low absorption
+62022 62022 Aerosol - high absorption
+62023 62023 Aerosol - low absorption
+62025 62025 Volcanic ash
+62026 62026 Particulate matter (PM)
+# 62027-62099 Reserved
+62100 62100 Alnus (Alder) pollen
+62101 62101 Betula (Birch) pollen
+62102 62102 Castanea (Chestnut) pollen
+62103 62103 Carpinus (Hornbeam) pollen
+62104 62104 Corylus (Hazel) pollen
+62105 62105 Fagus (Beech) pollen
+62106 62106 Fraxinus (Ash) pollen
+62107 62107 Pinus (Pine) pollen
+62108 62108 Platanus (Plane) pollen
+62109 62109 Populus (Cottonwood, Poplar) pollen
+62110 62110 Quercus (Oak) pollen
+62111 62111 Salix (Willow) pollen
+62112 62112 Taxus (Yew) pollen
+62113 62113 Tilia (Lime, Linden) pollen
+62114 62114 Ulmus (Elm) pollen
+# 62115-62199 Reserved
+62200 62200 Ambrosia (Ragweed, Burr-ragweed ) pollen
+62201 62201 Artemisia (Sagebrush, Wormwood, Mugwort) pollen
+62202 62202 Brassica (Rape, Broccoli, Brussels Sprouts, Cabbage, Cauliflower, Collards, Kale, Kohlrabi, Mustard, Rutabaga) pollen
+62203 62203 Plantago (Plantain) pollen
+62204 62204 Rumex (Dock, Sorrel) pollen
+62205 62205 Urtica (Nettle) pollen
+# 62206-62299 Reserved 
+62300 62300 Poaceae (Grass family) pollen
+# 62301-65534 Reserved
+65535 65535 Missing
diff --git a/definitions/grib2/tables/19/4.233.table b/definitions/grib2/tables/19/4.233.table
new file mode 100644
index 0000000..1d3021e
--- /dev/null
+++ b/definitions/grib2/tables/19/4.233.table
@@ -0,0 +1,449 @@
+# Code table 4.233 - Aerosol type
+0 0 Ozone O3
+1 1 Water vapour H2O
+2 2 Methane CH4
+3 3 Carbon dioxide CO2
+4 4 Carbon monoxide CO
+5 5 Nitrogen dioxide NO2
+6 6 Nitrous oxide N2O
+7 7 Formaldehyde HCHO
+8 8 Sulphur dioxide SO2
+9 9 Ammonia NH3
+10 10 Ammonium NH4+
+11 11 Nitrogen monoxide NO
+12 12 Atomic oxygen O
+13 13 Nitrate radical NO3
+14 14 Hydroperoxyl radical HO2
+15 15 Dinitrogen pentoxide N2O5
+16 16 Nitrous acid HONO
+17 17 Nitric acid HNO3
+18 18 Peroxynitric acid HO2NO2
+19 19 Hydrogen peroxide H2O2
+20 20 Molecular hydrogen H
+21 21 Atomic nitrogen N
+22 22 Sulphate SO42-
+23 23 Radon Rn
+24 24 Elemental mercury Hg(0)
+25 25 Divalent mercury Hg2+
+26 26 Atomic chlorine Cl
+27 27 Chlorine monoxide ClO
+28 28 Dichlorine peroxide Cl2O2
+29 29 Hypochlorous acid HClO
+30 30 Chlorine nitrate ClONO2
+31 31 Chlorine dioxide ClO2
+32 32 Atomic bromine Br
+33 33 Bromine monoxide BrO
+34 34 Bromine chloride BrCl
+35 35 Hydrogen bromide HBr
+36 36 Hypobromous acid HBrO
+37 37 Bromine nitrate BrONO2
+38 38 Oxygen O2
+#39-9999 Reserved
+10000 10000 Hydroxyl radical OH
+10001 10001 Methyl peroxy radical CH3O2
+10002 10002 Methyl hydroperoxide CH3O2H
+10004 10004 Methanol CH3OH
+10005 10005 Formic acid CH3OOH
+10006 10006 Hydrogen cyanide HCN
+10007 10007 Aceto nitrile CH3CN
+10008 10008 Ethane C2H6
+10009 10009 Ethene (= Ethylene) C2H4
+10010 10010 Ethyne (= Acetylene) C2H2
+10011 10011 Ethanol C2H5OH
+10012 10012 Acetic acid C2H5OOH
+10013 10013 Peroxyacetyl nitrate CH3C(O)OONO2
+10014 10014 Propane C3H8
+10015 10015 Propene C3H6
+10016 10016 Butanes C4H10
+10017 10017 Isoprene C5H10
+10018 10018 Alpha pinene C10H16
+10019 10019 Beta pinene C10H16
+10020 10020 Limonene C10H16
+10021 10021 Benzene C6H6
+10022 10022 Toluene C7H8
+10023 10023 Xylene C8H10
+#10024-10499 Reserved for other simple organic molecules (e.g. higher aldehydes, alcohols, peroxides...)
+10500 10500 Dimethyl sulphide CH3SCH3 (DMS)
+#10501-20000 Reserved
+20001 20001 Hydrogen chloride
+20002 20002 CFC-11
+20003 20003 CFC-12
+20004 20004 CFC-113
+20005 20005 CFC-113a
+20006 20006 CFC-114
+20007 20007 CFC-115
+20008 20008 HCFC-22
+20009 20009 HCFC-141b
+20010 20010 HCFC-142b
+20011 20011 Halon-1202
+20012 20012 Halon-1211
+20013 20013 Halon-1301
+20014 20014 Halon-2402
+20015 20015 Methyl chloride (HCC-40)
+20016 20016 Carbon tetrachloride (HCC-10)
+20017 20017 HCC-140a CH3CCl3
+20018 20018 Methyl bromide (HBC-40B1)
+20019 20019 Hexachlorocyclohexane (HCH)
+20020 20020 Alpha hexachlorocyclohexane
+20021 20021 Hexachlorobiphenyl (PCB-153)
+#20022-29999 Reserved
+30000 30000 Radioactive pollutant (tracer, defined by originating centre)
+#30001-30009 Reserved
+30010 30010 Hydrogen H-3
+30011 30011 Hydrogen organic bounded H-3o
+30012 30012 Hydrogen inorganic H-3a
+30013 30013 Beryllium 7 Be-7
+30014 30014 Beryllium 10 Be-10
+30015 30015 Carbon 14 C-14
+30016 30016 Carbon 14 CO2 C-14CO2
+30017 30017 Carbon 14 other gases C-14og
+30018 30018 Nitrogen 13 N-13
+30019 30019 Nitrogen 16 N-16
+30020 30020 Fluorine 18 F-18
+30021 30021 Sodium 22 Na-22
+30022 30022 Phosphate 32 P-32
+30023 30023 Phosphate 33 P-33
+30024 30024 Sulphur 35 S-35
+30025 30025 Chlorine 36 Cl-36
+30026 30026 Potassium 40 K-40
+30027 30027 Argon 41 Ar-41
+30028 30028 Calcium 41 Ca-41
+30029 30029 Calcium 45 Ca-45
+30030 30030 Titanium 44 Ti-44
+30031 30031 Scandium 46 Sc-46
+30032 30032 Vanadium 48 V-48
+30033 30033 Vanadium 49 V-49
+30034 30034 Chrome 51 Cr-51
+30035 30035 Manganese 52 Mn-52
+30036 30036 Manganese 54 Mn-54
+30037 30037 Iron 55 Fe-55
+30038 30038 Iron 59 Fe-59
+30039 30039 Cobalt 56 Co-56
+30040 30040 Cobalt 57 Co-57
+30041 30041 Cobalt 58 Co-58
+30042 30042 Cobalt 60 Co-60
+30043 30043 Nickel 59 Ni-59
+30044 30044 Nickel 63 Ni-63
+30045 30045 Zinc 65 Zn-65
+30046 30046 Gallium 67 Ga-67
+30047 30047 Gallium 68 Ga-68
+30048 30048 Germanium 68 Ge-68
+30049 30049 Germanium 69 Ge-69
+30050 30050 Arsenic 73 As-73
+30051 30051 Selenium 75 Se-75
+30052 30052 Selenium 79 Se-79
+30053 30053 Rubidium 81 Rb-81
+30054 30054 Rubidium 83 Rb-83
+30055 30055 Rubidium 84 Rb-84
+30056 30056 Rubidium 86 Rb-86
+30057 30057 Rubidium 87 Rb-87
+30058 30058 Rubidium 88 Rb-88
+30059 30059 Krypton 85 Kr-85
+30060 30060 Krypton 85 metastable Kr-85m
+30061 30061 Krypton 87 Kr-87
+30062 30062 Krypton 88 Kr-88
+30063 30063 Krypton 89 Kr-89
+30064 30064 Strontium 85 Sr-85
+30065 30065 Strontium 89 Sr-89
+30066 30066 Strontium 89/90 Sr-8990
+30067 30067 Strontium 90 Sr-90
+30068 30068 Strontium 91 Sr-91
+30069 30069 Strontium 92 Sr-92
+30070 30070 Yttrium 87 Y-87
+30071 30071 Yttrium 88 Y-88
+30072 30072 Yttrium 90 Y-90
+30073 30073 Yttrium 91 Y-91
+30074 30074 Yttrium 91 metastable Y-91m
+30075 30075 Yttrium 92 Y-92
+30076 30076 Yttrium 93 Y-93
+30077 30077 Zirconium 89 Zr-89
+30078 30078 Zirconium 93 Zr-93
+30079 30079 Zirconium 95 Zr-95
+30080 30080 Zirconium 97 Zr-97
+30081 30081 Niobium 93 metastable Nb-93m
+30082 30082 Niobium 94 Nb-94
+30083 30083 Niobium 95 Nb-95
+30084 30084 Niobium 95 metastable Nb-95m
+30085 30085 Niobium 97 Nb-97
+30086 30086 Niobium 97 metastable Nb-97m
+30087 30087 Molybdenum 93 Mo-93
+30088 30088 Molybdenum 99 Mo-99
+30089 30089 Technetium 95 metastable Tc-95m
+30090 30090 Technetium 96 Tc-96
+30091 30091 Technetium 99 Tc-99
+30092 30092 Technetium 99 metastable Tc-99m
+30093 30093 Rhodium 99 Rh-99
+30094 30094 Rhodium 101 Rh-101
+30095 30095 Rhodium 102 metastable Rh-102m
+30096 30096 Rhodium 103 metastable Rh-103m
+30097 30097 Rhodium 105 Rh-105
+30098 30098 Rhodium 106 Rh-106
+30099 30099 Palladium 100 Pd-100
+30100 30100 Palladium 103 Pd-103
+30101 30101 Palladium 107 Pd-107
+30102 30102 Ruthenium 103 Ru-103
+30103 30103 Ruthenium 105 Ru-105
+30104 30104 Ruthenium 106 Ru-106
+30105 30105 Silver 108 metastable Ag-108m
+30106 30106 Silver 110 metastable Ag-110m
+30107 30107 Cadmium 109 Cd-109
+30108 30108 Cadmium 113 metastable Cd-113m
+30109 30109 Cadmium 115 metastable Cd-115m
+30110 30110 Indium 114 metastable In-114m
+30111 30111 Tin 113 Sn-113
+30112 30112 Tin 119 metastable Sn-119m
+30113 30113 Tin 121 metastable Sn-121m
+30114 30114 Tin 122 Sn-122
+30115 30115 Tin 123 Sn-123
+30116 30116 Tin 126 Sn-126
+30117 30117 Antimony 124 Sb-124
+30118 30118 Antimony 125 Sb-125
+30119 30119 Antimony 126 Sb-126
+30120 30120 Antimony 127 Sb-127
+30121 30121 Antimony 129 Sb-129
+30122 30122 Tellurium 123 metastable Te-123m
+30123 30123 Tellurium 125 metastable Te-125m
+30124 30124 Tellurium 127 Te-127
+30125 30125 Tellurium 127 metastable Te-127m
+30126 30126 Tellurium 129 Te-129
+30127 30127 Tellurium 129 metastable Te-129m
+30128 30128 Tellurium 131 metastable Te-131m
+30129 30129 Tellurium 132 Te-132
+30130 30130 Iodine 123 I-123
+30131 30131 Iodine 124 I-124
+30132 30132 Iodine 125 I-125
+30133 30133 Iodine 126 I-126
+30134 30134 Iodine 129 I-129
+30135 30135 Iodine 129 elementary gaseous I-129g
+30136 30136 Iodine 129 organic bounded I-129o
+30137 30137 Iodine 131 I-131
+30138 30138 Iodine 131 elementary gaseous I-131g
+30139 30139 Iodine 131 organic bounded I-131o
+30140 30140 Iodine 131 gaseous elementary and organic bounded I-131go
+30141 30141 Iodine 131 aerosol I-131a
+30142 30142 Iodine 132 I-132
+30143 30143 Iodine 132 elementary gaseous I-132g
+30144 30144 Iodine 132 organic bounded I-132o
+30145 30145 Iodine 132 gaseous elementary and organic bounded I-132go
+30146 30146 Iodine 132 aerosol I-132a
+30147 30147 Iodine 133 I-133
+30148 30148 Iodine 133 elementary gaseous I-133g
+30149 30149 Iodine 133 organic bounded I-133o
+30150 30150 Iodine 133 gaseous elementary and organic bounded I-133go
+30151 30151 Iodine 133 aerosol I-133a
+30152 30152 Iodine 134 I-134
+30153 30153 Iodine 134 elementary gaseous I-134g
+30154 30154 Iodine 134 organic bounded I-134o
+30155 30155 Iodine 135 I-135
+30156 30156 Iodine 135 elementary gaseous I-135g
+30157 30157 Iodine 135 organic bounded I-135o
+30158 30158 Iodine 135 gaseous elementary and organic bounded I-135go
+30159 30159 Iodine 135 aerosol I-135a
+30160 30160 Xenon 131 metastable Xe-131m
+30161 30161 Xenon 133 Xe-133
+30162 30162 Xenon 133 metastable Xe-133m
+30163 30163 Xenon 135 Xe-135
+30164 30164 Xenon 135 metastable Xe-135m
+30165 30165 Xenon 137 Xe-137
+30166 30166 Xenon 138 Xe-138
+30167 30167 Xenon sum of all Xenon isotopes Xe-sum
+30168 30168 Caesium 131 Cs-131
+30169 30169 Caesium 134 Cs-134
+30170 30170 Caesium 135 Cs-135
+30171 30171 Caesium 136 Cs-136
+30172 30172 Caesium 137 Cs-137
+30173 30173 Barium 133 Ba-133
+30174 30174 Barium 137 metastable Ba-137m
+30175 30175 Barium 140 Ba-140
+30176 30176 Cerium 139 Ce-139
+30177 30177 Cerium 141 Ce-141
+30178 30178 Cerium 143 Ce-143
+30179 30179 Cerium 144 Ce-144
+30180 30180 Lanthanum 140 La-140
+30181 30181 Lanthanum 141 La-141
+30182 30182 Praseodymium 143 Pr-143
+30183 30183 Praseodymium 144 Pr-144
+30184 30184 Praseodymium 144 metastable Pr-144m
+30185 30185 Samarium 145 Sm-145
+30186 30186 Samarium 147 Sm-147
+30187 30187 Samarium 151 Sm-151
+30188 30188 Neodymium 147 Nd-147
+30189 30189 Promethium 146 Pm-146
+30190 30190 Promethium 147 Pm-147
+30191 30191 Promethium 151 Pm-151
+30192 30192 Europium 152 Eu-152
+30193 30193 Europium 154 Eu-154
+30194 30194 Europium 155 Eu-155
+30195 30195 Gadolinium 153 Gd-153
+30196 30196 Terbium 160 Tb-160
+30197 30197 Holmium 166 metastable Ho-166m
+30198 30198 Thulium 170 Tm-170
+30199 30199 Ytterbium 169 Yb-169
+30200 30200 Hafnium 175 Hf-175
+30201 30201 Hafnium 181 Hf-181
+30202 30202 Tantalum 179 Ta-179
+30203 30203 Tantalum 182 Ta-182
+30204 30204 Rhenium 184 Re-184
+30205 30205 Iridium 192 Ir-192
+30206 30206 Mercury 203 Hg-203
+30207 30207 Thallium 204 Tl-204
+30208 30208 Thallium 207 Tl-207
+30209 30209 Thallium 208 Tl-208
+30210 30210 Thallium 209 Tl-209
+30211 30211 Bismuth 205 Bi-205
+30212 30212 Bismuth 207 Bi-207
+30213 30213 Bismuth 210 Bi-210
+30214 30214 Bismuth 211 Bi-211
+30215 30215 Bismuth 212 Bi-212
+30216 30216 Bismuth 213 Bi-213
+30217 30217 Bismuth 214 Bi-214
+30218 30218 Polonium 208 Po-208
+30219 30219 Polonium 210 Po-210
+30220 30220 Polonium 212 Po-212
+30221 30221 Polonium 213 Po-213
+30222 30222 Polonium 214 Po-214
+30223 30223 Polonium 215 Po-215
+30224 30224 Polonium 216 Po-216
+30225 30225 Polonium 218 Po-218
+30226 30226 Lead 209 Pb-209
+30227 30227 Lead 210 Pb-210
+30228 30228 Lead 211 Pb-211
+30229 30229 Lead 212 Pb-212
+30230 30230 Lead 214 Pb-214
+30231 30231 Astatine 217 At-217
+30232 30232 Radon 219 Rn-219
+30233 30233 Radon 220 Rn-220
+30234 30234 Radon 222 Rn-222
+30235 30235 Francium 221 Fr-221
+30236 30236 Francium 223 Fr-223
+30237 30237 Radium 223 Ra-223
+30238 30238 Radium 224 Ra-224
+30239 30239 Radium 225 Ra-225
+30240 30240 Radium 226 Ra-226
+30241 30241 Radium 228 Ra-228
+30242 30242 Actinium 225 Ac-225
+30243 30243 Actinium 227 Ac-227
+30244 30244 Actinium 228 Ac-228
+30245 30245 Thorium 227 Th-227
+30246 30246 Thorium 228 Th-228
+30247 30247 Thorium 229 Th-229
+30248 30248 Thorium 230 Th-230
+30249 30249 Thorium 231 Th-231
+30250 30250 Thorium 232 Th-232
+30251 30251 Thorium 234 Th-234
+30252 30252 Protactinium 231 Pa-231
+30253 30253 Protactinium 233 Pa-233
+30254 30254 Protactinium 234 metastable Pa-234m
+30255 30255 Uranium 232 U-232
+30256 30256 Uranium 233 U-233
+30257 30257 Uranium 234 U-234
+30258 30258 Uranium 235 U-235
+30259 30259 Uranium 236 U-236
+30260 30260 Uranium 237 U-237
+30261 30261 Uranium 238 U-238
+30262 30262 Plutonium 236 Pu-236
+30263 30263 Plutonium 238 Pu-238
+30264 30264 Plutonium 239 Pu-239
+30265 30265 Plutonium 240 Pu-240
+30266 30266 Plutonium 241 Pu-241
+30267 30267 Plutonium 242 Pu-242
+30268 30268 Plutonium 244 Pu-244
+30269 30269 Neptunium 237 Np-237
+30270 30270 Neptunium 238 Np-238
+30271 30271 Neptunium 239 Np-239
+30272 30272 Americium 241 Am-241
+30273 30273 Americium 242 Am-242
+30274 30274 Americium 242 metastable Am-242m
+30275 30275 Americium 243 Am-243
+30276 30276 Curium 242 Cm-242
+30277 30277 Curium 243 Cm-243
+30278 30278 Curium 244 Cm-244
+30279 30279 Curium 245 Cm-245
+30280 30280 Curium 246 Cm-246
+30281 30281 Curium 247 Cm-247
+30282 30282 Curium 248 Cm-248
+30283 30283 Curium 243/244 Cm-243244
+30284 30284 Plutonium 238/Americium 241 Pu-238Am-241
+30285 30285 Plutonium 239/240 Pu-239240
+30286 30286 Berkelium 249 Bk-249
+30287 30287 Californium 249 Cf-249
+30288 30288 Californium 250 Cf-250
+30289 30289 Californium 252 Cf-252
+30290 30290 Sum aerosol particulates SumAer
+30291 30291 Sum Iodine SumIod
+30292 30292 Sum noble gas SumNG
+30293 30293 Activation gas ActGas
+30294 30294 Cs-137 Equivalent EquCs137
+#30295-59999 Reserved
+60000 60000 HOx radical (OH+HO2)
+60001 60001 Total inorganic and organic peroxy radicals (HO2 + RO2)
+60002 60002 Passive Ozone
+60003 60003 NOx expressed as nitrogen NOx
+60004 60004 All nitrogen oxides (NOy) expressed as nitrogen NOy
+60005 60005 Total inorganic chlorine Clx
+60006 60006 Total inorganic bromine Brx
+60007 60007 Total inorganic chlorine except HCl, ClONO2: ClOx
+60008 60008 Total inorganic bromine except HBr, BrONO2: BrOx
+60009 60009 Lumped alkanes
+60010 60010 Lumped alkenes
+60011 60011 Lumped aromatic compounds
+60012 60012 Lumped terpenes
+60013 60013 Non-methane volatile organic compounds expressed as carbon
+60014 60014 Anthropogenic non-methane volatile organic compounds expressed as carbon
+60015 60015 Biogenic non-methane volatile organic compounds expressed as carbon
+60016 60016 Lumped oxygenated hydrocarbons
+60017 60017 NOx expressed as nitrogen dioxide (NO2)
+#60018-61999 Reserved
+62000 62000 Total aerosol
+62001 62001 Dust dry
+62002 62002 Water in ambient
+62003 62003 Ammonium dry
+62004 62004 Nitrate dry
+62005 62005 Nitric acid trihydrate
+62006 62006 Sulphate dry
+62007 62007 Mercury dry
+62008 62008 Sea salt dry
+62009 62009 Black carbon dry
+62010 62010 Particulate organic matter dry
+62011 62011 Primary particulate organic matter dry
+62012 62012 Secondary particulate organic matter dry
+62013 62013 Black carbon hydrophilic dry
+62014 62014 Black carbon hydrophobic dry
+62015 62015 Particulate organic matter hydrophilic dry
+62016 62016 Particulate organic matter hydrophobic dry
+62017 62017 Nitrate hydrophilic dry
+62018 62018 Nitrate hydrophobic dry
+#62019 Reserved
+62020 62020 Smoke - high absorption
+62021 62021 Smoke - low absorption
+62022 62022 Aerosol - high absorption
+62023 62023 Aerosol - low absorption
+62025 62025 Volcanic ash
+62026 62026 Particulate matter (PM)
+# 62027-62099 Reserved
+62100 62100 Alnus (Alder) pollen
+62101 62101 Betula (Birch) pollen
+62102 62102 Castanea (Chestnut) pollen
+62103 62103 Carpinus (Hornbeam) pollen
+62104 62104 Corylus (Hazel) pollen
+62105 62105 Fagus (Beech) pollen
+62106 62106 Fraxinus (Ash) pollen
+62107 62107 Pinus (Pine) pollen
+62108 62108 Platanus (Plane) pollen
+62109 62109 Populus (Cottonwood, Poplar) pollen
+62110 62110 Quercus (Oak) pollen
+62111 62111 Salix (Willow) pollen
+62112 62112 Taxus (Yew) pollen
+62113 62113 Tilia (Lime, Linden) pollen
+62114 62114 Ulmus (Elm) pollen
+# 62115-62199 Reserved
+62200 62200 Ambrosia (Ragweed, Burr-ragweed ) pollen
+62201 62201 Artemisia (Sagebrush, Wormwood, Mugwort) pollen
+62202 62202 Brassica (Rape, Broccoli, Brussels Sprouts, Cabbage, Cauliflower, Collards, Kale, Kohlrabi, Mustard, Rutabaga) pollen
+62203 62203 Plantago (Plantain) pollen
+62204 62204 Rumex (Dock, Sorrel) pollen
+62205 62205 Urtica (Nettle) pollen
+# 62206-62299 Reserved 
+62300 62300 Poaceae (Grass family) pollen
+# 62301-65534 Reserved
+65535 65535 Missing
diff --git a/definitions/grib2/tables/19/4.234.table b/definitions/grib2/tables/19/4.234.table
new file mode 100644
index 0000000..816541c
--- /dev/null
+++ b/definitions/grib2/tables/19/4.234.table
@@ -0,0 +1,21 @@
+# Code table 4.234 - Canopy cover fraction (to be used as partitioned parameter in product definition template 4.53 or 4.54)
+1 1 Crops, mixed farming 
+2 2 Short grass 
+3 3 Evergreen needleleaf trees 
+4 4 Deciduous needleleaf trees 
+5 5 Deciduous broadleaf trees 
+6 6 Evergreen broadleaf trees 
+7 7 Tall grass 
+8 8 Desert 
+9 9 Tundra 
+10 10 Irrigated crops 
+11 11 Semidesert 
+12 12 Ice caps and glaciers 
+13 13 Bogs and marshes 
+14 14 Inland water 
+15 15 Ocean 
+16 16 Evergreen shrubs 
+17 17 Deciduous shrubs 
+18 18 Mixed forest 
+19 19 Interrupted forest 
+20 20 Water and land mixtures 
diff --git a/definitions/grib2/tables/19/4.236.table b/definitions/grib2/tables/19/4.236.table
new file mode 100644
index 0000000..fbe093c
--- /dev/null
+++ b/definitions/grib2/tables/19/4.236.table
@@ -0,0 +1,8 @@
+# Code table 4.236 - Soil texture fraction (to be used as partitioned parameter in product definition template 4.53 or 4.54)
+1 1 Coarse 
+2 2 Medium 
+3 3 Medium-fine 
+4 4 Fine 
+5 5 Very-fine 
+6 6 Organic 
+7 7 Tropical-organic 
diff --git a/definitions/grib2/tables/19/4.240.table b/definitions/grib2/tables/19/4.240.table
new file mode 100644
index 0000000..35e3632
--- /dev/null
+++ b/definitions/grib2/tables/19/4.240.table
@@ -0,0 +1,13 @@
+# Code table 4.240 - Type of distribution function
+0 0 No specific distribution function given 
+1 1 Delta functions with spatially variable concentration and fixed diameters Dl (p1) in metre 
+2 2 Delta functions with spatially variable concentration and fixed masses Ml (p1) in kg 
+3 3 Gaussian (normal) distribution with spatially variable concentration and fixed mean diameter Dl(p1) and variance(p2) 
+4 4 Gaussian (normal) distribution with spatially variable concentration, mean diameter and variance 
+5 5 Log-normal distribution with spatially variable number density, mean diameter and variance 
+6 6 Log-normal distribution with spatially variable number density, mean diameter and fixed variance(p1) 
+7 7 Log-normal distribution with spatially variable number density and mass density and fixed variance(p1) and fixed particle density(p2)
+8 8 No distribution function. The encoded variable is derived from variables characterized by type of distribution function of type no. 7 (see above) with fixed variance(p1) and fixed particle density(p2)
+# 9-49151 Reserved 
+# 49152-65534 Reserved for local use 
+65535 65535 Missing value 
diff --git a/definitions/grib2/tables/19/4.241.table b/definitions/grib2/tables/19/4.241.table
new file mode 100644
index 0000000..a037b4b
--- /dev/null
+++ b/definitions/grib2/tables/19/4.241.table
@@ -0,0 +1,9 @@
+# Code table 4.241 - Coverage attributes
+0 0 Undefined 
+1 1 Unmodified 
+2 2 Snow covered 
+3 3 Flooded 
+4 4 Ice covered 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/19/4.242.table b/definitions/grib2/tables/19/4.242.table
new file mode 100644
index 0000000..083f88c
--- /dev/null
+++ b/definitions/grib2/tables/19/4.242.table
@@ -0,0 +1,7 @@
+# Code table 4.242 - Tile classification
+0 0 Reserved 
+1 1 Land use classes according to ESA-GlobCover GCV2009 
+2 2 Land use classes according to European Commission-Global Land Cover Project GLC2000 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing value 
diff --git a/definitions/grib2/tables/19/4.243.table b/definitions/grib2/tables/19/4.243.table
new file mode 100644
index 0000000..b390533
--- /dev/null
+++ b/definitions/grib2/tables/19/4.243.table
@@ -0,0 +1,43 @@
+# Code table 4.243 - Tile class
+0 0 Reserved 
+1 1 Evergreen broadleaved forest 
+2 2 Deciduous broadleaved closed forest 
+3 3 Deciduous broadleaved open forest 
+4 4 Evergreen needle-leaf forest 
+5 5 Deciduous needle-leaf forest 
+6 6 Mixed leaf trees 
+7 7 Freshwater flooded trees 
+8 8 Saline water flooded trees 
+9 9 Mosaic tree/natural vegetation 
+10 10 Burnt tree cover 
+11 11 Evergreen shrubs closed-open 
+12 12 Deciduous shrubs closed-open 
+13 13 Herbaceous vegetation closed-open 
+14 14 Sparse herbaceous or grass 
+15 15 Flooded shrubs or herbaceous 
+16 16 Cultivated and managed areas 
+17 17 Mosaic crop/tree/natural vegetation 
+18 18 Mosaic crop/shrub/grass 
+19 19 Bare areas 
+20 20 Water 
+21 21 Snow and ice 
+22 22 Artificial surface 
+23 23 Ocean 
+24 24 Irrigated croplands 
+25 25 Rainfed croplands 
+26 26 Mosaic cropland (50-70%) - vegetation (20-50%) 
+27 27 Mosaic vegetation (50-70%) - cropland (20-50%) 
+28 28 Closed broadleaved evergreen forest 
+29 29 Closed needle-leaved evergreen forest 
+30 30 Open needle-leaved deciduous forest 
+31 31 Mixed broadleaved and needle-leaved forest 
+32 32 Mosaic shrubland (50-70%) - grassland (20-50%) 
+33 33 Mosaic grassland (50-70%) - shrubland (20-50%) 
+34 34 Closed to open shrubland 
+35 35 Sparse vegetation 
+36 36 Closed to open forest regularly flooded 
+37 37 Closed forest or shrubland permanently flooded 
+38 38 Closed to open grassland regularly flooded 
+39 39 Undefined 
+# 40-32767 Reserved 
+# 32768- Reserved for local use 
diff --git a/definitions/grib2/tables/19/4.3.table b/definitions/grib2/tables/19/4.3.table
new file mode 100644
index 0000000..8ba9e08
--- /dev/null
+++ b/definitions/grib2/tables/19/4.3.table
@@ -0,0 +1,23 @@
+# Code table 4.3 - Type of generating process
+0 0 Analysis 
+1 1 Initialization 
+2 2 Forecast 
+3 3 Bias corrected forecast 
+4 4 Ensemble forecast 
+5 5 Probability forecast 
+6 6 Forecast error 
+7 7 Analysis error 
+8 8 Observation 
+9 9 Climatological 
+10 10 Probability-weighted forecast 
+11 11 Bias-corrected ensemble forecast 
+12 12 Post-processed analysis 
+13 13 Post-processed forecast 
+14 14 Nowcast 
+15 15 Hindcast 
+16 16 Physical retrieval 
+17 17 Regression analysis 
+18 18 Difference between two forecasts 
+# 19-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.4.table b/definitions/grib2/tables/19/4.4.table
new file mode 100644
index 0000000..7087ebd
--- /dev/null
+++ b/definitions/grib2/tables/19/4.4.table
@@ -0,0 +1,17 @@
+# Code table 4.4 - Indicator of unit of time range
+0 m Minute 
+1 h Hour 
+2 D Day 
+3 M Month 
+4 Y Year 
+5 10Y Decade (10 years) 
+6 30Y Normal (30 years) 
+7 C Century (100 years) 
+# 8-9 Reserved 
+10 3h 3 hours 
+11 6h 6 hours 
+12 12h 12 hours 
+13 s Second 
+# 14-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.5.table b/definitions/grib2/tables/19/4.5.table
new file mode 100644
index 0000000..c14343e
--- /dev/null
+++ b/definitions/grib2/tables/19/4.5.table
@@ -0,0 +1,72 @@
+# Code table 4.5 - Fixed surface types and units
+0 0 Reserved 
+1 sfc Ground or water surface (-)
+2 2 Cloud base level (-)
+3 3 Level of cloud tops (-)
+4 4 Level of 0 degree C isotherm (-)
+5 5 Level of adiabatic condensation lifted from the surface (-)
+6 6 Maximum wind level (-)
+7 7 Tropopause (-)
+8 sfc Nominal top of the atmosphere (-)
+9 9 Sea bottom (-)
+10 10 Entire atmosphere (-)
+11 11 Cumulonimbus (CB) base (m)
+12 12 Cumulonimbus (CB) top (m)
+13 13 Lowest level where vertically integrated cloud cover exceeds the specified percentage (cloud base for a given percentage cloud cover) (%)
+14 14 Level of free convection (LFC)
+15 15 Convective condensation level (CCL)
+16 16 Level of neutral buoyancy or equilibrium level (LNB)
+# 17-19 Reserved 
+20 20 Isothermal level (K)
+21 21 Lowest level where mass density exceeds the specified value (base for a given threshold of mass density) (kg m-3)
+22 22 Highest level where mass density exceeds the specified value (top for a given threshold of mass density) (kg m-3)
+23 23 Lowest level where air concentration exceeds the specified value (base for a given threshold of air concentration) (Bq m-3)
+24 24 Highest level where air concentration exceeds the specified value (top for a given threshold of air concentration) (Bq m-3)
+# 25-99 Reserved 
+100 pl Isobaric surface (Pa)
+101 sfc Mean sea level 
+102 102 Specific altitude above mean sea level (m)
+103 sfc Specified height level above ground (m)
+104 104 Sigma level (sigma value)
+105 ml Hybrid level (-)
+106 sfc Depth below land surface (m)
+107 pt Isentropic (theta) level (K)
+108 108 Level at specified pressure difference from ground to level (Pa)
+109 pv Potential vorticity surface (K m2 kg-1 s-1)
+110 110 Reserved 
+111 111 Eta level (-)
+112 112 Reserved 
+113 113 Logarithmic hybrid level 
+114 114 Snow level (Numeric)
+115 115 Sigma height level
+# 116 Reserved
+117 117 Mixed layer depth (m)
+118 hhl Hybrid height level (-)
+119 hpl Hybrid pressure level (-)
+# 120-149 Reserved 
+150 150 Generalized vertical height coordinate 
+151 sol Soil level (Numeric)
+# 152-159 Reserved 
+160 160 Depth below sea level (m)
+161 161 Depth below water surface (m)
+162 162 Lake or river bottom (-)
+163 163 Bottom of sediment layer (-)
+164 164 Bottom of thermally active sediment layer (-)
+165 165 Bottom of sediment layer penetrated by thermal wave (-)
+166 166 Mixing layer (-)
+167 167 Bottom of root zone (-)
+# 168-173 Reserved 
+174 174 Top surface of ice on sea, lake or river
+175 175 Top surface of ice, under snow cover, on sea, lake or river
+176 176 Bottom surface (underside) ice on sea, lake or river
+177 sfc Deep soil (of indefinite depth)
+# 178 Reserved
+179 179 Top surface of glacier ice and inland ice
+180 180 Deep inland or glacier ice (of indefinite depth)
+181 181 Grid tile land fraction as a model surface
+182 182 Grid tile water fraction as a model surface
+183 183 Grid tile ice fraction on sea, lake or river as a model surface
+184 184 Grid tile glacier ice and inland ice fraction as a model surface
+# 185-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.6.table b/definitions/grib2/tables/19/4.6.table
new file mode 100644
index 0000000..b2dfeb4
--- /dev/null
+++ b/definitions/grib2/tables/19/4.6.table
@@ -0,0 +1,9 @@
+# Code table 4.6 - Type of ensemble forecast
+0 0 Unperturbed high-resolution control forecast 
+1 1 Unperturbed low-resolution control forecast 
+2 2 Negatively perturbed forecast 
+3 3 Positively perturbed forecast 
+4 4 Multi-model forecast 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.7.table b/definitions/grib2/tables/19/4.7.table
new file mode 100644
index 0000000..e0de0e1
--- /dev/null
+++ b/definitions/grib2/tables/19/4.7.table
@@ -0,0 +1,14 @@
+# Code table 4.7 - Derived forecast
+0 0 Unweighted mean of all members 
+1 1 Weighted mean of all members 
+2 2 Standard deviation with respect to cluster mean 
+3 3 Standard deviation with respect to cluster mean, normalized 
+4 4 Spread of all members 
+5 5 Large anomaly index of all members 
+6 6 Unweighted mean of the cluster members 
+7 7 Interquartile range (range between the 25th and 75th quantile) 
+8 8 Minimum of all ensemble members 
+9 9 Maximum of all ensemble members 
+# 10-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.8.table b/definitions/grib2/tables/19/4.8.table
new file mode 100644
index 0000000..ad88303
--- /dev/null
+++ b/definitions/grib2/tables/19/4.8.table
@@ -0,0 +1,6 @@
+# Code table 4.8 - Clustering method
+0 0 Anomaly correlation 
+1 1 Root mean square 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.9.table b/definitions/grib2/tables/19/4.9.table
new file mode 100644
index 0000000..5878b5a
--- /dev/null
+++ b/definitions/grib2/tables/19/4.9.table
@@ -0,0 +1,9 @@
+# Code table 4.9 - Probability type
+0 0 Probability of event below lower limit 
+1 1 Probability of event above upper limit 
+2 2 Probability of event between lower and upper limits (the range includes the lower limit but not the upper limit) 
+3 3 Probability of event above lower limit 
+4 4 Probability of event below upper limit 
+# 5-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/4.91.table b/definitions/grib2/tables/19/4.91.table
new file mode 100644
index 0000000..44cf25f
--- /dev/null
+++ b/definitions/grib2/tables/19/4.91.table
@@ -0,0 +1,16 @@
+# Code table 4.91 - Type of Interval
+0 0 Smaller than first limit 
+1 1 Greater than second limit 
+2 2 Between first and second limit. The range includes the first limit but not the second limit 
+3 3 Greater than first limit 
+4 4 Smaller than second limit 
+5 5 Smaller or equal first limit 
+6 6 Greater or equal second limit 
+7 7 Between first and second. The range includes the first limit and the second limit 
+8 8 Greater or equal first limit 
+9 9 Smaller or equal second limit 
+10 10 Between first and second limit. The range includes the second limit but not the first limit 
+11 11 Equal to first limit 
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 missing Missing 
diff --git a/definitions/grib2/tables/19/5.0.table b/definitions/grib2/tables/19/5.0.table
new file mode 100644
index 0000000..1d4c5e5
--- /dev/null
+++ b/definitions/grib2/tables/19/5.0.table
@@ -0,0 +1,25 @@
+# Code table 5.0 - Data representation template number
+0 0 Grid point data - simple packing 
+1 1 Matrix value at grid point - simple packing 
+2 2 Grid point data - complex packing 
+3 3 Grid point data - complex packing and spatial differencing 
+4 4 Grid point data - IEEE floating point data 
+6 6 Grid point data - simple packing with pre-processing
+40 40 Grid point data - JPEG 2000 code stream format 
+41 41 Grid point data - Portable Network Graphics (PNG) 
+42 42 Grid point and spectral data - CCSDS recommended lossless compression
+# 43-49 Reserved 
+50 50 Spectral data - simple packing 
+51 51 Spherical harmonics data - complex packing 
+# 52-60 Reserved 
+61 61 Grid point data - simple packing with logarithm pre-processing 
+# 62-199 Reserved 
+200 200 Run length packing with level values 
+# 201-49151 Reserved 
+# 49152-65534 Reserved for local use 
+40000 40000 JPEG2000 Packing
+40010 40010 PNG pacling
+50000 50000 Sperical harmonics ieee packing
+50001 50001 Second order packing
+50002 50002 Second order packing
+65535 65535 Missing 
diff --git a/definitions/grib2/tables/19/5.1.table b/definitions/grib2/tables/19/5.1.table
new file mode 100644
index 0000000..854330c
--- /dev/null
+++ b/definitions/grib2/tables/19/5.1.table
@@ -0,0 +1,6 @@
+# Code table 5.1 - Type of original field values
+0 0 Floating point 
+1 1 Integer 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/5.2.table b/definitions/grib2/tables/19/5.2.table
new file mode 100644
index 0000000..40586a1
--- /dev/null
+++ b/definitions/grib2/tables/19/5.2.table
@@ -0,0 +1,8 @@
+# Code table 5.2 - Matrix coordinate value function definition
+0 0 Explicit coordinate values set 
+1 1 Linear coordinates f(1) = C1, f(n) = f(n-1) + C2 
+# 2-10 Reserved 
+11 11 Geometric coordinates f(1)=C1, f(n)=C2*f(n-1)
+# 12-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/5.3.table b/definitions/grib2/tables/19/5.3.table
new file mode 100644
index 0000000..c3b7b30
--- /dev/null
+++ b/definitions/grib2/tables/19/5.3.table
@@ -0,0 +1,7 @@
+# Code table 5.3 - Matrix coordinate parameter
+1 1 Direction degrees true 
+2 2 Frequency (s-1) 
+3 3 Radial number (2pi/lambda) (m-1) 
+# 4-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/5.4.table b/definitions/grib2/tables/19/5.4.table
new file mode 100644
index 0000000..8121c18
--- /dev/null
+++ b/definitions/grib2/tables/19/5.4.table
@@ -0,0 +1,6 @@
+# Code table 5.4 - Group splitting method
+0 0 Row by row splitting 
+1 1 General group splitting 
+# 2-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/5.40.table b/definitions/grib2/tables/19/5.40.table
new file mode 100644
index 0000000..b9bad2c
--- /dev/null
+++ b/definitions/grib2/tables/19/5.40.table
@@ -0,0 +1,5 @@
+# Code table 5.40 - Type of compression
+0 0 Lossless 
+1 1 Lossy 
+# 2-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/5.40000.table b/definitions/grib2/tables/19/5.40000.table
new file mode 100644
index 0000000..1eef7c7
--- /dev/null
+++ b/definitions/grib2/tables/19/5.40000.table
@@ -0,0 +1,5 @@
+# Code Table 5.40: Type of Compression
+0 0 Lossless
+1 1 Lossy
+#2-254 Reserved
+255 255 Missing
diff --git a/definitions/grib2/tables/19/5.5.table b/definitions/grib2/tables/19/5.5.table
new file mode 100644
index 0000000..3ef3eb0
--- /dev/null
+++ b/definitions/grib2/tables/19/5.5.table
@@ -0,0 +1,7 @@
+# Code table 5.5 - Missing value management for complex packing
+0 0 No explicit missing values included within data values 
+1 1 Primary missing values included within data values 
+2 2 Primary and secondary missing values included within data values 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/5.50002.table b/definitions/grib2/tables/19/5.50002.table
new file mode 100644
index 0000000..10c243c
--- /dev/null
+++ b/definitions/grib2/tables/19/5.50002.table
@@ -0,0 +1,19 @@
+# second order packing modes table
+
+1 0 no boustrophedonic
+1 1 boustrophedonic
+2 0 Reserved
+2 1 Reserved
+3 0 Reserved
+3 1 Reserved
+4 0 Reserved
+4 1 Reserved
+5 0 Reserved
+5 1 Reserved
+6 0 Reserved
+6 1 Reserved
+7 0 Reserved
+7 1 Reserved
+8 0 Reserved
+8 1 Reserved
+
diff --git a/definitions/grib2/tables/19/5.6.table b/definitions/grib2/tables/19/5.6.table
new file mode 100644
index 0000000..6d51778
--- /dev/null
+++ b/definitions/grib2/tables/19/5.6.table
@@ -0,0 +1,7 @@
+# Code table 5.6 - Order of spatial differencing
+0 0 Reserved 
+1 1 First-order spatial differencing 
+2 2 Second-order spatial differencing 
+# 3-191 Reserved 
+# 192-254 Reserved for local use 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/5.7.table b/definitions/grib2/tables/19/5.7.table
new file mode 100644
index 0000000..5ab7800
--- /dev/null
+++ b/definitions/grib2/tables/19/5.7.table
@@ -0,0 +1,7 @@
+# Code table 5.7 - Precision of floating-point numbers
+0 0 Reserved 
+1 1 IEEE 32-bit (I=4 in section 7) 
+2 2 IEEE 64-bit (I=8 in section 7) 
+3 3 IEEE 128-bit (I=16 in section 7) 
+# 4-254 Reserved 
+255 255 Missing 
diff --git a/definitions/grib2/tables/19/6.0.table b/definitions/grib2/tables/19/6.0.table
new file mode 100644
index 0000000..2a29aa2
--- /dev/null
+++ b/definitions/grib2/tables/19/6.0.table
@@ -0,0 +1,6 @@
+# Code table 6.0 - Bit map indicator
+0 0 A bit map applies to this product and is specified in this Section 
+1 1  A bit map pre-determined by the originating/generating centre applies to this product and is not specified in this Section
+# 1-253 A bit map predetermined by the originating/generating centre applies to this product and is not specified in this Section 
+254 254 A bit map defined previously in the same GRIB message applies to this product 
+255 255 A bit map does not apply to this product 
diff --git a/definitions/grib2/tables/19/stepType.table b/definitions/grib2/tables/19/stepType.table
new file mode 100644
index 0000000..d88e441
--- /dev/null
+++ b/definitions/grib2/tables/19/stepType.table
@@ -0,0 +1,4 @@
+# CODE TABLE Step Type
+
+0 instant  Instant
+1 interval Interval
diff --git a/definitions/grib2/tables/local/kwbc/1/4.5.table b/definitions/grib2/tables/local/kwbc/1/4.5.table
new file mode 100644
index 0000000..3a7c143
--- /dev/null
+++ b/definitions/grib2/tables/local/kwbc/1/4.5.table
@@ -0,0 +1,89 @@
+# Code table 4.5 - Fixed surface types and units
+0 0 Reserved 
+1 sfc Ground or water surface (-)
+2 2 Cloud base level (-)
+3 3 Level of cloud tops (-)
+4 4 Level of 0 degree C isotherm (-)
+5 5 Level of adiabatic condensation lifted from the surface (-)
+6 6 Maximum wind level (-)
+7 7 Tropopause (-)
+8 sfc Nominal top of the atmosphere (-)
+9 9 Sea bottom (-)
+10 10 Entire atmosphere (-)
+11 11 Cumulonimbus (CB) base (m)
+12 12 Cumulonimbus (CB) top (m)
+13 13 Lowest level where vertically integrated cloud cover exceeds the specified percentage (cloud base for a given percentage cloud cover) (%)
+14 14 Level of free convection (LFC)
+15 15 Convective condensation level (CCL)
+16 16 Level of neutral buoyancy or equilibrium level (LNB)
+# 17-19 Reserved 
+20 20 Isothermal level (K)
+21 21 Lowest level where mass density exceeds the specified value (base for a given threshold of mass density) (kg m-3)
+22 22 Highest level where mass density exceeds the specified value (top for a given threshold of mass density) (kg m-3)
+23 23 Lowest level where air concentration exceeds the specified value (base for a given threshold of air concentration) (Bq m-3)
+24 24 Highest level where air concentration exceeds the specified value (top for a given threshold of air concentration) (Bq m-3)
+# 25-99 Reserved 
+100 pl Isobaric surface (Pa)
+101 sfc Mean sea level 
+102 102 Specific altitude above mean sea level (m)
+103 sfc Specified height level above ground (m)
+104 104 Sigma level (sigma value)
+105 ml Hybrid level (-)
+106 sfc Depth below land surface (m)
+107 pt Isentropic (theta) level (K)
+108 108 Level at specified pressure difference from ground to level (Pa)
+109 pv Potential vorticity surface (K m2 kg-1 s-1)
+110 110 Reserved 
+111 111 Eta level (-)
+112 112 Reserved 
+113 113 Logarithmic hybrid level 
+114 114 Snow level (Numeric)
+115 115 Sigma height level
+# 116 Reserved
+117 117 Mixed layer depth (m)
+118 hhl Hybrid height level (-)
+119 hpl Hybrid pressure level (-)
+# 120-149 Reserved 
+150 150 Generalized vertical height coordinate 
+151 sol Soil level (Numeric)
+# 152-159 Reserved 
+160 160 Depth below sea level (m)
+161 161 Depth below water surface (m)
+162 162 Lake or river bottom (-)
+163 163 Bottom of sediment layer (-)
+164 164 Bottom of thermally active sediment layer (-)
+165 165 Bottom of sediment layer penetrated by thermal wave (-)
+166 166 Mixing layer (-)
+167 167 Bottom of root zone (-)
+# 168-173 Reserved 
+174 174 Top surface of ice on sea, lake or river
+175 175 Top surface of ice, under snow cover, on sea, lake or river
+176 176 Bottom surface (underside) ice on sea, lake or river
+177 sfc Deep soil (of indefinite depth)
+# 178 Reserved
+179 179 Top surface of glacier ice and inland ice
+180 180 Deep inland or glacier ice (of indefinite depth)
+181 181 Grid tile land fraction as a model surface
+182 182 Grid tile water fraction as a model surface
+183 183 Grid tile ice fraction on sea, lake or river as a model surface
+184 184 Grid tile glacier ice and inland ice fraction as a model surface
+# 185-191 Reserved
+# 192-254 Reserved for local use
+# See ECC-469
+200 200 Entire atmosphere (considered as a single layer)
+204 204 Highest tropospheric freezing level
+211 211 Boundary layer cloud layer
+212 212 Low cloud bottom level
+213 213 Low cloud top level
+214 214 Low cloud layer
+220 220 Planetary boundary layer
+222 222 Middle cloud bottom level
+223 223 Middle cloud top level
+224 224 Middle cloud layer
+232 232 High cloud bottom level
+233 233 High cloud top level
+234 234 High cloud layer
+242 242 Convective cloud bottom level
+243 243 Convective cloud top level
+244 244 Convective cloud layer
+255 255 Missing 
diff --git a/definitions/grib2/template.4.20.def b/definitions/grib2/template.4.20.def
index 11588f3..def5e3a 100644
--- a/definitions/grib2/template.4.20.def
+++ b/definitions/grib2/template.4.20.def
@@ -26,7 +26,9 @@ unsigned[1] numberOfRadarSitesUsed  : dump;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Site latitude
 # (in 10-6 degree)
diff --git a/definitions/grib2/template.4.40.def b/definitions/grib2/template.4.40.def
index 427179f..22f80fc 100644
--- a/definitions/grib2/template.4.40.def
+++ b/definitions/grib2/template.4.40.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-# TEMPLATE 4.40, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time
+# TEMPLATE 4.40, Analysis or forecast at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents
 
 include "grib2/template.4.parameter_chemical.def";
 include "grib2/template.4.point_in_time.def";
diff --git a/definitions/grib2/template.4.41.def b/definitions/grib2/template.4.41.def
index 3e9780d..60c09ae 100644
--- a/definitions/grib2/template.4.41.def
+++ b/definitions/grib2/template.4.41.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-# TEMPLATE 4.41, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time
+# TEMPLATE 4.41, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer at a point in time for atmospheric chemical constituents
 
 include "grib2/template.4.parameter_chemical.def"
 include "grib2/template.4.point_in_time.def";
diff --git a/definitions/grib2/template.4.42.def b/definitions/grib2/template.4.42.def
index df4caa4..144c017 100644
--- a/definitions/grib2/template.4.42.def
+++ b/definitions/grib2/template.4.42.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-# TEMPLATE 4.42, Average, accumulation, and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval
+# TEMPLATE 4.42, Average, accumulation and/or extreme values or other statistically processed values at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents
 
 include "grib2/template.4.parameter_chemical.def"
 include "grib2/template.4.horizontal.def"
diff --git a/definitions/grib2/template.4.43.def b/definitions/grib2/template.4.43.def
index e753e93..a49b8de 100644
--- a/definitions/grib2/template.4.43.def
+++ b/definitions/grib2/template.4.43.def
@@ -7,7 +7,7 @@
 # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
 #
 
-# TEMPLATE 4.43, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval
+# TEMPLATE 4.43, Individual ensemble forecast, control and perturbed, at a horizontal level or in a horizontal layer in a continuous or non-continuous time interval for atmospheric chemical constituents
 
 include "grib2/template.4.parameter_chemical.def"
 include "grib2/template.4.horizontal.def"
diff --git a/definitions/grib2/template.4.parameter.def b/definitions/grib2/template.4.parameter.def
index 2347f3e..aedfc8f 100644
--- a/definitions/grib2/template.4.parameter.def
+++ b/definitions/grib2/template.4.parameter.def
@@ -39,7 +39,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by octet 18 (GRIB-29: supports negative forecast time)
 signed[4] forecastTime  : dump;
diff --git a/definitions/grib2/template.4.parameter_aerosol.def b/definitions/grib2/template.4.parameter_aerosol.def
index e09d5d6..216de61 100644
--- a/definitions/grib2/template.4.parameter_aerosol.def
+++ b/definitions/grib2/template.4.parameter_aerosol.def
@@ -52,7 +52,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by octet 18 (GRIB-29: supports negative forecast time)
 signed[4] forecastTime  : dump;
diff --git a/definitions/grib2/template.4.parameter_aerosol_44.def b/definitions/grib2/template.4.parameter_aerosol_44.def
index bea4af8..019ce81 100644
--- a/definitions/grib2/template.4.parameter_aerosol_44.def
+++ b/definitions/grib2/template.4.parameter_aerosol_44.def
@@ -55,7 +55,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by octet 18
 #  See GRIB-530: We have to make a special case for the error in WMO spec
diff --git a/definitions/grib2/template.4.parameter_aerosol_optical.def b/definitions/grib2/template.4.parameter_aerosol_optical.def
index 1dfecdf..b44a882 100644
--- a/definitions/grib2/template.4.parameter_aerosol_optical.def
+++ b/definitions/grib2/template.4.parameter_aerosol_optical.def
@@ -61,7 +61,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by octet 18 (GRIB-29: supports negative forecast time)
 signed[4] forecastTime  : dump;
diff --git a/definitions/grib2/template.4.parameter_chemical.def b/definitions/grib2/template.4.parameter_chemical.def
index 1660834..a957b9f 100644
--- a/definitions/grib2/template.4.parameter_chemical.def
+++ b/definitions/grib2/template.4.parameter_chemical.def
@@ -42,7 +42,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by indicatorOfUnitOfTimeRange
 signed[4] startStep : dump;
diff --git a/definitions/grib2/template.4.parameter_chemical_distribution.def b/definitions/grib2/template.4.parameter_chemical_distribution.def
index 0632446..456231d 100644
--- a/definitions/grib2/template.4.parameter_chemical_distribution.def
+++ b/definitions/grib2/template.4.parameter_chemical_distribution.def
@@ -59,7 +59,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir) : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by previous octet (GRIB-29: supports negative forecast time)
 signed[4] forecastTime  : dump;
diff --git a/definitions/grib2/template.4.parameter_partition.def b/definitions/grib2/template.4.parameter_partition.def
index 6a96648..95c08c3 100644
--- a/definitions/grib2/template.4.parameter_partition.def
+++ b/definitions/grib2/template.4.parameter_partition.def
@@ -45,7 +45,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by octet 18 (GRIB-29: supports negative forecast time)
 signed[4] forecastTime  : dump;
diff --git a/definitions/grib2/template.4.parameter_postproc.def b/definitions/grib2/template.4.parameter_postproc.def
index 394f26c..81d411c 100644
--- a/definitions/grib2/template.4.parameter_postproc.def
+++ b/definitions/grib2/template.4.parameter_postproc.def
@@ -47,7 +47,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by indicatorOfUnitOfTimeRange
 signed[4] forecastTime  : dump;
diff --git a/definitions/grib2/template.4.parameter_tile.def b/definitions/grib2/template.4.parameter_tile.def
index 209d54b..010336f 100644
--- a/definitions/grib2/template.4.parameter_tile.def
+++ b/definitions/grib2/template.4.parameter_tile.def
@@ -52,7 +52,9 @@ alias minutesAfterReferenceTimeOfDataCutoff=minutesAfterDataCutoff;
 
 #  Indicator of unit of time range
 codetable[1] indicatorOfUnitOfTimeRange ('4.4.table',masterDir,localDir)  : dump;
-codetable[1] stepUnits 'stepUnits.table' = 1 : transient,dump,no_copy;
+alias defaultStepUnits = one; # 1 means Hour. See code table 4.4
+template_nofail default_step_units "grib2/localConcepts/[centre:s]/default_step_units.def";
+codetable[1] stepUnits 'stepUnits.table' = defaultStepUnits : transient,dump,no_copy;
 
 #  Forecast time in units defined by octet 24
 signed[4] forecastTime  : dump;
diff --git a/definitions/grib2/units.def b/definitions/grib2/units.def
index 3bea618..58a6f70 100644
--- a/definitions/grib2/units.def
+++ b/definitions/grib2/units.def
@@ -580,6 +580,28 @@
 	 typeOfStatisticalProcessing = 1 ;
 	 typeOfFirstFixedSurface = 1 ;
 	}
+#Evaporation in the last 6 hours
+'kg m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 lengthOfTimeRange = 6 ;
+	 is_uerra = 0 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	 typeOfFirstFixedSurface = 1 ;
+	}
+#Evaporation in the last 24 hours
+'kg m**-2' = {
+	 discipline = 0 ;
+	 parameterCategory = 1 ;
+	 parameterNumber = 79 ;
+	 typeOfFirstFixedSurface = 1 ;
+	 lengthOfTimeRange = 24 ;
+	 is_uerra = 0 ;
+	 indicatorOfUnitForTimeRange = 1 ;
+	 typeOfStatisticalProcessing = 1 ;
+	}
 #Soil temperature
 'K' = {
 	 discipline = 2 ;
diff --git a/eccodes.sublime-project b/eccodes.sublime-project
index e3f210b..8d5cd6b 100644
--- a/eccodes.sublime-project
+++ b/eccodes.sublime-project
@@ -1,18 +1,41 @@
 {
-    "folders": [
-        {
-            "path": ".", 
-            "follow_symlinks": true
-        }
-    ], 
-    "build_systems": [
-        {
-            "working_dir": "${project_path}/../../build/eccodes", 
-            "cmd": [
-                "make"
-            ], 
-            "file_regex": "([/\\w\\-\\.]+):(\\d+):(\\d+:)?", 
-            "name": "ecbuild"
-        }
-    ]
+	"build_systems":
+	[
+		{
+			"file_regex": "([/\\w\\-\\.]+):(\\d+):(\\d+:)?",
+			"name": "eccodes",
+			"shell_cmd": "make",
+			"syntax": "Packages/CMakeBuilder/Syntax/Make.sublime-syntax",
+			"variants":
+			[
+				{
+					"name": "clean",
+					"shell_cmd": "make clean"
+				},
+			],
+			"working_dir": "${project_path}/../../build/eccodes"
+		},
+		{
+			"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
+			"name": "Anaconda Python Builder",
+			"selector": "source.python",
+			"shell_cmd": "\"python\" -u \"$file\""
+		}
+	],
+	"cmake":
+	{
+		"build_folder": "${project_path}/../../build/eccodes",
+		"command_line_overrides":
+		{
+			"DEVELOPER_MODE": 1,
+			"ENABLE_MEMFS": 1
+		}
+	},
+	"folders":
+	[
+		{
+			"follow_symlinks": true,
+			"path": "."
+		}
+	]
 }
diff --git a/examples/C/grib_iterator.c b/examples/C/grib_iterator.c
index 432f319..e41e526 100644
--- a/examples/C/grib_iterator.c
+++ b/examples/C/grib_iterator.c
@@ -30,7 +30,8 @@ int main(int argc, char** argv)
 {
     FILE* in = NULL;
     int err = 0;
-    double lat,lon,value,missingValue=0;
+    double lat,lon,value;
+    double missingValue = 1e+20; /* A value out of range */
     int n=0;
     char* filename = NULL;
 
@@ -54,8 +55,9 @@ int main(int argc, char** argv)
         /* Check of errors after reading a message. */
         if (err != CODES_SUCCESS) CODES_CHECK(err,0);
 
-        /* Get the double representing the missing value in the field. */
-        CODES_CHECK(codes_get_double(h,"missingValue",&missingValue),0);
+        /* Set the double representing the missing value in the field. */
+        /* Choose a missingValue that does not correspond to any real value in the data array */
+        CODES_CHECK(codes_set_double(h, "missingValue", missingValue),0);
 
         /* A new iterator on lat/lon/values is created from the message handle h. */
         iter=codes_grib_iterator_new(h,0,&err);
diff --git a/examples/C/grib_print_data.c b/examples/C/grib_print_data.c
index 75b4eaa..91d622e 100644
--- a/examples/C/grib_print_data.c
+++ b/examples/C/grib_print_data.c
@@ -73,9 +73,13 @@ int main(int argc, char** argv)
     {
         /* Example of accessing specific elements from data values */
         int i=0;
-        const int NUM = 3;
-        int index_arr[]    = {0, values_len/2, values_len-1};
         double vals_arr[3] = {0, 0, 0};
+        const int NUM = 3;
+        int index_arr[3];
+        index_arr[0] = 0;             /* first element */
+        index_arr[1] = values_len/2;  /* middle element */
+        index_arr[2] = values_len-1;  /* last element */
+
         CODES_CHECK(codes_get_double_elements(h, "values", index_arr, NUM, vals_arr), 0);
         for (i=0; i<NUM; ++i){
             printf("value at index %d = %.10e\n", index_arr[i], vals_arr[i]);
diff --git a/examples/python/CMakeLists.txt b/examples/python/CMakeLists.txt
index 7294af1..efc2a18 100644
--- a/examples/python/CMakeLists.txt
+++ b/examples/python/CMakeLists.txt
@@ -60,12 +60,13 @@ list( APPEND tests
    get_product_kind
    gts_get_keys
    metar_get_keys
+   ecc-448
 )
 
 # The high level python test requires new features in the unittest
 # which are only there for python 2.7 onwards
 if( HAVE_PYTHON AND PYTHON_VERSION_STRING VERSION_GREATER "2.7" )
-    ecbuild_info("Python examples: Adding test for PythonicGrib")
+    ecbuild_info("Python examples: Adding test for High-level Pythonic Interface")
     list( APPEND tests high_level_api )
 endif()
 
diff --git a/examples/python/ecc-448.py b/examples/python/ecc-448.py
new file mode 100644
index 0000000..d7ed84f
--- /dev/null
+++ b/examples/python/ecc-448.py
@@ -0,0 +1,76 @@
+# 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.
+
+import traceback
+import sys
+
+from eccodes import *
+
+INPUT = '../../data/bufr/syno_1.bufr'
+VERBOSE = 1  # verbose error reporting
+
+
+def example():
+
+    # open bufr file
+    f = open(INPUT)
+
+    cnt = 0
+
+    # loop for the messages in the file
+    while 1:
+        # get handle for message
+        bufr = codes_bufr_new_from_file(f)
+        if bufr is None:
+            break
+
+        print "message: %s" % cnt
+        
+        # ECC-448: create a new BUFR handle from the message
+        #          of the original
+        the_message = codes_get_message(bufr)
+        newbufr = codes_new_from_message(the_message)
+
+        codes_set(newbufr,'unpack',1)
+
+        # get BUFR key iterator
+        iterid = codes_bufr_keys_iterator_new(newbufr)
+
+        # loop over the keys
+        while codes_bufr_keys_iterator_next(iterid):
+
+            # print key name
+            keyname = codes_bufr_keys_iterator_get_name(iterid)
+            print "  %s" % keyname
+
+        # delete the key iterator
+        codes_bufr_keys_iterator_delete(iterid)
+
+        cnt += 1
+
+        # delete handle
+        codes_release(bufr)
+
+    # close the file
+    f.close()
+
+
+def main():
+    try:
+        example()
+    except CodesInternalError as err:
+        if VERBOSE:
+            traceback.print_exc(file=sys.stderr)
+        else:
+            sys.stderr.write(err.msg + '\n')
+
+        return 1
+
+if __name__ == "__main__":
+    sys.exit(main())
diff --git a/examples/python/ecc-448.sh b/examples/python/ecc-448.sh
new file mode 100755
index 0000000..7d68c62
--- /dev/null
+++ b/examples/python/ecc-448.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+# 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.sh
+
+#Define a common label for all the tmp files
+label="ecc_448_test_p"
+
+#Define tmp file
+fTmp=${label}".tmp.txt"
+rm -f $fTmp
+
+REDIRECT=/dev/null
+
+#The bufr file to use 
+f=${data_dir}/bufr/syno_1.bufr
+
+#The input ($f) is hardcoded in the example!!!
+$PYTHON $examples_src/ecc-448.py 2> $REDIRECT > $fTmp
+
+#TODO: check the output
+grep -q '#6#cloudType->percentConfidence' $fTmp
+grep -q '#2#verticalSignificanceSurfaceObservations->percentConfidence' $fTmp
+
+#Clean up
+rm -f $fTmp
diff --git a/examples/python/grib_iterator.c b/examples/python/grib_iterator.c
index 690eac4..5752ea4 100644
--- a/examples/python/grib_iterator.c
+++ b/examples/python/grib_iterator.c
@@ -29,7 +29,8 @@ static void usage(const char* prog) {
 int main(int argc, char** argv) {
 	FILE* in = NULL;
 	int err = 0;
-	double lat,lon,value,missingValue=0;
+	double lat,lon,value;
+    double missingValue = 1e+20; /* A value out of range */
 	int n=0;
 	char* filename = NULL;
 
@@ -53,8 +54,9 @@ int main(int argc, char** argv) {
 		/* Check of errors after reading a message. */
 		if (err != GRIB_SUCCESS) GRIB_CHECK(err,0);
 
-		/* Get the double representing the missing value in the field. */
-		GRIB_CHECK(grib_get_double(h,"missingValue",&missingValue),0);
+		/* Set the double representing the missing value in the field. */
+        /* Choose a missingValue that does not correspond to any real value in the data array */
+		GRIB_CHECK(grib_set_double(h, "missingValue", missingValue),0);
 
 		/* A new iterator on lat/lon/values is created from the message handle h. */
 		iter=grib_iterator_new(h,0,&err);
diff --git a/examples/python/grib_iterator.py b/examples/python/grib_iterator.py
index 8f1fa46..f5c0470 100644
--- a/examples/python/grib_iterator.py
+++ b/examples/python/grib_iterator.py
@@ -14,7 +14,7 @@ import sys
 from eccodes import *
 
 VERBOSE = 1  # verbose error reporting
-
+missingValue = 1e+20 # A value out of range
 
 def example(INPUT):
     f = open(INPUT)
@@ -24,9 +24,11 @@ def example(INPUT):
         if gid is None:
             break
 
-        iterid = codes_grib_iterator_new(gid, 0)
+        # Set the value representing the missing value in the field.
+        # Choose a missingValue that does not correspond to any real value in the data array
+        codes_set(gid, "missingValue", missingValue)
 
-        missingValue = codes_get_double(gid, "missingValue")
+        iterid = codes_grib_iterator_new(gid, 0)
 
         i = 0
         while 1:
diff --git a/examples/python/grib_iterator.sh b/examples/python/grib_iterator.sh
index 74005e7..edc91f3 100755
--- a/examples/python/grib_iterator.sh
+++ b/examples/python/grib_iterator.sh
@@ -2,28 +2,29 @@
 
 . ./include.sh
 
-TEMP1=temp1.$$
-TEMP2=temp2.$$
-TEMP3=temp3.$$
+label="py_grib_iterator"
+TEMP1=$label.temp1.$$
+TEMP2=$label.temp2.$$
+TEMP3=$label.temp3.$$
 
 # Input file with some missing data values
 FILE="${data_dir}/reduced_latlon_surface.grib1"
 $PYTHON $examples_src/grib_iterator.py $FILE 2> $TEMP1 > $TEMP1
 ./p_grib_iterator $FILE                      2> $TEMP2 > $TEMP2
-diff $TEMP1 $TEMP2
+diff $TEMP1 $TEMP2 >/dev/null
 
 $PYTHON $examples_src/grib_iterator_bitmap.py $FILE 2> $TEMP3 > $TEMP3
-diff $TEMP1 $TEMP3
+diff $TEMP1 $TEMP3 >/dev/null
 
 
 # Polar stereographic
 FILE="${ECCODES_SAMPLES_PATH}/polar_stereographic_pl_grib2.tmpl"
 $PYTHON $examples_src/grib_iterator.py $FILE 2> $TEMP1 > $TEMP1
 ./p_grib_iterator $FILE        2> $TEMP2 > $TEMP2
-diff $TEMP1 $TEMP2
+diff $TEMP1 $TEMP2 >/dev/null
 
 $PYTHON $examples_src/grib_iterator_bitmap.py $FILE 2> $TEMP3 > $TEMP3
-diff $TEMP1 $TEMP3
+diff $TEMP1 $TEMP3 >/dev/null
 
-
-rm $TEMP1 $TEMP2 $TEMP3 || true
+# Clean up
+rm $TEMP1 $TEMP2 $TEMP3
diff --git a/examples/python/grib_set_keys.py b/examples/python/grib_set_keys.py
index 41e0c02..8f88050 100644
--- a/examples/python/grib_set_keys.py
+++ b/examples/python/grib_set_keys.py
@@ -12,6 +12,7 @@ import sys
 
 from eccodes import *
 from datetime import date
+from collections import OrderedDict
 
 INPUT = '../../data/regular_latlon_surface_constant.grib1'
 OUTPUT = 'out.set.grib'
@@ -39,15 +40,23 @@ def example():
     print 'get date as a string - date = %s' % dateStrVal[0]
 
     # Now do the same but using set_key_vals, setting keys all at once
-    codes_set_key_vals(gid, 'level=1,centre=98')  # with a String
+    print 'set keys using one long comma-separated string...'
+    codes_set_key_vals(gid, 'level=1,centre=98')
     assert(codes_get(gid, 'centre', str) == 'ecmf')
     assert(codes_get(gid, 'level', int) == 1)
 
-    codes_set_key_vals(gid, ['level=2', 'centre=kwbc'])  # with a Tuple
+    print 'set keys using a list of strings...'
+    codes_set_key_vals(gid, ['level=2', 'centre=kwbc'])
     assert(codes_get(gid, 'centre', int) == 7)
     assert(codes_get(gid, 'level', int) == 2)
 
-    codes_set_key_vals(gid, {'level': 3, 'centre': 84})  # with a Dictionary
+    print 'set keys using a dictionary (order not as specified!)...'
+    codes_set_key_vals(gid, {'level': 3, 'centre': 84})
+    assert(codes_get(gid, 'centre', str) == 'lfpw')
+    assert(codes_get(gid, 'level', int) == 3)
+
+    print 'set keys using an ordered dictionary...'
+    codes_set_key_vals(gid, OrderedDict( [('level', 3), ('centre', 84)] ))
     assert(codes_get(gid, 'centre', str) == 'lfpw')
     assert(codes_get(gid, 'level', int) == 3)
 
diff --git a/examples/python/high_level_api.py b/examples/python/high_level_api.py
index c7b59d4..9bb5e09 100644
--- a/examples/python/high_level_api.py
+++ b/examples/python/high_level_api.py
@@ -182,40 +182,41 @@ class TestGribFile(unittest.TestCase):
 
     def test_memory_management(self):
         """Messages in GribFile can be opened and closed properly."""
-        with GribFile(TESTGRIB) as grib:
-            self.assertEqual(len(grib), 5)
-            for i in range(len(grib)):
-                msg = GribMessage(grib)
+        with GribFile(TESTGRIB) as grib_file:
+            self.assertEqual(len(grib_file), 5)
+            for i in range(len(grib_file)):
+                msg = GribMessage(grib_file)
                 self.assertEqual(msg["shortName"], "msl")
-            self.assertEqual(len(grib.open_messages), 5)
-        self.assertEqual(len(grib.open_messages), 0)
+                self.assertEqual(msg['count'], i+1)
+            self.assertEqual(len(grib_file.open_messages), 5)
+        self.assertEqual(len(grib_file.open_messages), 0)
 
     def test_message_counting_works(self):
         """The GribFile is aware of its messages."""
-        with GribFile(TESTGRIB) as grib:
-            msg_count = len(grib)
+        with GribFile(TESTGRIB) as grib_file:
+            msg_count = len(grib_file)
         self.assertEqual(msg_count, 5)
 
     def test_iterator_protocol(self):
         """The GribFile allows pythonic iteration over all messages."""
         step_ranges = []
-        with GribFile(TESTGRIB) as grib:
-            for msg in grib:
+        with GribFile(TESTGRIB) as grib_file:
+            for msg in grib_file:
                 step_ranges.append(msg["stepRange"])
         self.assertSequenceEqual(step_ranges, ["0", "6", "12", "18", "24"])
 
     def test_read_past_last_message(self):
         """Trying to open message on exhausted GRIB file raises IOError."""
-        with GribFile(TESTGRIB) as grib:
-            for _ in range(len(grib)):
-                GribMessage(grib)
-            self.assertRaises(IOError, lambda: GribMessage(grib))
+        with GribFile(TESTGRIB) as grib_file:
+            for _ in range(len(grib_file)):
+                GribMessage(grib_file)
+            self.assertRaises(IOError, lambda: GribMessage(grib_file))
 
     def test_read_invalid_file(self):
         """Trying to open message on nonexistent GRIB file raises IOError."""
         with NamedTemporaryFile(mode='r') as f:
-            with GribFile(f.name) as grib:
-                self.assertRaises(IOError, lambda: GribMessage(grib))
+            with GribFile(f.name) as grib_file:
+                self.assertRaises(IOError, lambda: GribMessage(grib_file))
 
 
 class TestGribMessage(unittest.TestCase):
@@ -224,8 +225,8 @@ class TestGribMessage(unittest.TestCase):
 
     def test_metadata(self):
         """Metadata is read correctly from GribMessage."""
-        with GribFile(TESTGRIB) as grib:
-            msg = GribMessage(grib)
+        with GribFile(TESTGRIB) as grib_file:
+            msg = GribMessage(grib_file)
             msg_keys = msg.keys()
             for key in KNOWN_GRIB_KEYS:
                 assert key in msg_keys
@@ -234,8 +235,8 @@ class TestGribMessage(unittest.TestCase):
 
     def test_missing_message_behaviour(self):
         """Key with MISSING value."""
-        with GribFile(TESTGRIB) as grib:
-            msg = GribMessage(grib)
+        with GribFile(TESTGRIB) as grib_file:
+            msg = GribMessage(grib_file)
             self.assertTrue(msg.missing("scaleFactorOfSecondFixedSurface"))
             msg["scaleFactorOfSecondFixedSurface"] = 5
             msg.set_missing("scaleFactorOfSecondFixedSurface")
@@ -244,23 +245,38 @@ class TestGribMessage(unittest.TestCase):
 
     def test_value_setting(self):
         """Keys can be set properly."""
-        with GribFile(TESTGRIB) as grib:
-            msg = GribMessage(grib)
+        with GribFile(TESTGRIB) as grib_file:
+            msg = GribMessage(grib_file)
             msg["scaleFactorOfSecondFixedSurface"] = 5
             msg["values"] = [1, 2, 3]
+            self.assertEqual( msg['scaleFactorOfSecondFixedSurface'], 5 )
+
+    def test_multi_value_setting(self):
+        """Multiple keys/values can be set properly."""
+        msg = GribMessage(sample='GRIB1')
+        msg[ 'paramId', 'stepType', 'edition' ] = 49, 'avg', 2
+        self.assertEqual( msg['shortName'], '10fg' )
+        # Another test
+        with GribFile(TESTGRIB) as grib_file:
+            msg = GribMessage(grib_file)
+            msg[ 'setLocalDefinition', 'localDefinitionNumber' ] = 1,25
+            msg[ 'typeOfFirstFixedSurface', 'typeOfSecondFixedSurface' ] = 1, 8
+            msg[ ('typeOfFirstFixedSurface','typeOfSecondFixedSurface') ] = (1, 8) #Also works
+            self.assertEqual( msg['localDefinitionNumber'], 25 )
+            self.assertEqual( msg['typeOfLevel'], 'entireAtmosphere' )
 
     def test_serialize(self):
         """Message can be serialized to file."""
-        with GribFile(TESTGRIB) as grib:
-            msg = GribMessage(grib)
+        with GribFile(TESTGRIB) as grib_file:
+            msg = GribMessage(grib_file)
             with open(TEST_OUTPUT, "w") as test:
                 msg.write(test)
         os.unlink(TEST_OUTPUT)
 
     def test_clone(self):
         """Messages can be used to produce clone Messages."""
-        with GribFile(TESTGRIB) as grib:
-            msg = GribMessage(grib)
+        with GribFile(TESTGRIB) as grib_file:
+            msg = GribMessage(grib_file)
             msg2 = GribMessage(clone=msg)
             self.assertSequenceEqual(msg.keys(), msg2.keys())
 
@@ -305,40 +321,41 @@ class TestBufrFile(unittest.TestCase):
 
     def test_memory_management(self):
         """Messages in BufrFile can be opened and closed properly."""
-        with BufrFile(TESTBUFR) as bufr:
-            self.assertEqual(len(bufr), 3)
-            for i in range(len(bufr)):
-                msg = BufrMessage(bufr)
+        with BufrFile(TESTBUFR) as bufr_file:
+            self.assertEqual(len(bufr_file), 3)
+            for i in range(len(bufr_file)):
+                msg = BufrMessage(bufr_file)
                 self.assertEqual(msg["bufrHeaderCentre"], 98)
-            self.assertEqual(len(bufr.open_messages), 3)
-        self.assertEquals(len(bufr.open_messages), 0)
+                self.assertEqual(msg['count'], i+1)
+            self.assertEqual(len(bufr_file.open_messages), 3)
+        self.assertEquals(len(bufr_file.open_messages), 0)
 
     def test_message_counting_works(self):
         """The BufrFile is aware of its messages."""
-        with BufrFile(TESTBUFR) as bufr:
-            msg_count = len(bufr)
+        with BufrFile(TESTBUFR) as bufr_file:
+            msg_count = len(bufr_file)
         self.assertEqual(msg_count, 3)
 
     def test_iterator_protocol(self):
         """The BufrFile allows pythonic iteration over all messages."""
         latitudes = []
-        with BufrFile(TESTBUFR) as bufr:
-            for msg in bufr:
+        with BufrFile(TESTBUFR) as bufr_file:
+            for msg in bufr_file:
                 latitudes.append(msg["localLatitude"])
         self.assertSequenceEqual(latitudes, [70.93, 77, 78.92])
 
     def test_read_past_last_message(self):
         """Trying to open message on exhausted BUFR file raises IOError."""
-        with BufrFile(TESTBUFR) as bufr:
-            for _ in range(len(bufr)):
-                BufrMessage(bufr)
-            self.assertRaises(IOError, lambda: BufrMessage(bufr))
+        with BufrFile(TESTBUFR) as bufr_file:
+            for _ in range(len(bufr_file)):
+                BufrMessage(bufr_file)
+            self.assertRaises(IOError, lambda: BufrMessage(bufr_file))
 
     def test_read_invalid_file(self):
         """Trying to open message on nonexistent file raises IOError."""
         with NamedTemporaryFile(mode='r') as f:
-            with BufrFile(f.name) as bufr:
-                self.assertRaises(IOError, lambda: BufrMessage(bufr))
+            with BufrFile(f.name) as bufr_file:
+                self.assertRaises(IOError, lambda: BufrMessage(bufr_file))
 
 
 class TestBufrMessage(unittest.TestCase):
@@ -347,8 +364,9 @@ class TestBufrMessage(unittest.TestCase):
 
     def test_metadata(self):
         """Metadata is read correctly from BufrMessage."""
-        with BufrFile(TESTBUFR) as bufr:
-            msg = BufrMessage(bufr)
+        with BufrFile(TESTBUFR) as bufr_file:
+            msg = BufrMessage(bufr_file)
+            msg.unpack()
             msg_keys = msg.keys()
             for key in KNOWN_BUFR_KEYS:
                 assert key in msg_keys
@@ -357,35 +375,81 @@ class TestBufrMessage(unittest.TestCase):
 
     def test_content(self):
         """Data values are read correctly from BufrMessage."""
-        with BufrFile(TESTBUFR) as bufr:
-            msg = BufrMessage(bufr)
+        with BufrFile(TESTBUFR) as bufr_file:
+            msg = BufrMessage(bufr_file)
+            msg.unpack()
             self.assertEqual(msg["airTemperatureAt2M"], 274.5)
 
     # TODO: Test behaviour with missing messages (SUP-1874)
 
     def test_value_setting(self):
         """Keys can be set properly."""
-        with BufrFile(TESTBUFR) as bufr:
-            msg = BufrMessage(bufr)
+        with BufrFile(TESTBUFR) as bufr_file:
+            msg = BufrMessage(bufr_file)
             key, val = "localLongitude", 5
             msg[key] = val
             self.assertEqual(msg[key], val)
 
     def test_serialize(self):
         """Message can be serialized to file."""
-        with BufrFile(TESTBUFR) as bufr:
-            msg = BufrMessage(bufr)
+        with BufrFile(TESTBUFR) as bufr_file:
+            msg = BufrMessage(bufr_file)
             with open(TEST_OUTPUT, "w") as test:
                 msg.write(test)
         os.unlink(TEST_OUTPUT)
 
     def test_clone(self):
         """Messages can be used to produce clone Messages."""
-        with BufrFile(TESTBUFR) as bufr:
-            msg = BufrMessage(bufr)
+        with BufrFile(TESTBUFR) as bufr_file:
+            msg = BufrMessage(bufr_file)
             msg2 = BufrMessage(clone=msg)
             self.assertSequenceEqual(msg.keys(), msg2.keys())
 
+    def test_copy_data(self):
+        """Can copy data section from one message to another"""
+        bufr = BufrMessage(sample='BUFR3')
+        with BufrFile('../../data/bufr/metar_with_2_bias.bufr') as bufr_file:
+            bufrin = BufrMessage(bufr_file)
+            ivalues=(
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+                1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
+                1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+                1, 1, 1, 1, 1, 1, 1, 1, 0)
+            bufr['inputDataPresentIndicator'] = ivalues
+            bufr['edition'] = 3
+            bufr['masterTableNumber'] = 0
+            bufr['bufrHeaderSubCentre'] = 0
+            bufr['bufrHeaderCentre'] = 98
+            bufr['updateSequenceNumber'] = 1
+            bufr['dataCategory'] = 0
+            bufr['dataSubCategory'] = 140
+            bufr['masterTablesVersionNumber'] = 13
+            bufr['localTablesVersionNumber'] = 1
+            bufr['typicalYearOfCentury'] = 15
+            bufr['typicalMonth'] = 5
+            bufr['typicalDay'] = 4
+            bufr['typicalHour'] = 9
+            bufr['typicalMinute'] = 30
+            bufr['numberOfSubsets'] = 1
+            bufr['observedData'] = 1
+            bufr['compressedData'] = 0
+            ivalues=(
+                307011,7006,10004,222000,101023,31031,1031,1032,101023,33007,
+                225000,236000,101023,31031,1031,1032,8024,101001,225255,225000,
+                236000,101023,31031,1031,1032,8024,101001,225255,
+                1063,2001,4001,4002,4003,4004,4005,5002,
+                6002,7001,7006,11001,11016,11017,11002)
+            bufr['unexpandedDescriptors'] = ivalues
+            bufrin.unpack()
+            bufrin.copy_data(bufr)
+            with open(TEST_OUTPUT, 'w') as test:
+                bufr.write(test)
+            os.unlink(TEST_OUTPUT)
+
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/fortran/grib_fortran.c b/fortran/grib_fortran.c
index 2c4ee7f..e75ce5d 100644
--- a/fortran/grib_fortran.c
+++ b/fortran/grib_fortran.c
@@ -536,7 +536,7 @@ static int push_keys_iterator(grib_keys_iterator *i)
     return ret;
 }
 
-// BUFR Keys iterator
+/* BUFR Keys iterator */
 static int _push_bufr_keys_iterator(bufr_keys_iterator *i)
 {
     l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
@@ -704,7 +704,7 @@ static grib_keys_iterator* get_keys_iterator(int keys_iterator_id)
     return i;
 }
 
-// BUFR
+/* BUFR */
 static bufr_keys_iterator* _get_bufr_keys_iterator(int keys_iterator_id)
 {
     l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
@@ -863,7 +863,7 @@ static int clear_keys_iterator(int keys_iterator_id)
     return ret;
 }
 
-//BUFR
+/* BUFR */
 static int _clear_bufr_keys_iterator(int keys_iterator_id)
 {
     l_bufr_keys_iterator* current  = bufr_keys_iterator_set;
diff --git a/memfs.py b/memfs.py
index 44f51e9..8990bdd 100755
--- a/memfs.py
+++ b/memfs.py
@@ -84,7 +84,7 @@ for k, v in sorted(items):
 
 print("""};
 
-#ifdef EC_HAVE_FUNOPEN
+#if defined(EC_HAVE_FUNOPEN) && !defined(EC_HAVE_FMEMOPEN)
 
 typedef struct mem_file {
     const char* buffer;
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index 2095ae2..ab2eea2 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -58,7 +58,13 @@ if( HAVE_PYTHON )
     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}
+    install(CODE "if( \$ENV{DESTDIR} )
+                    set( __root \"--root \$ENV{DESTDIR}\" )
+                  endif()
+                  execute_process(COMMAND ${PYTHON_EXECUTABLE} setup.py install
+                                            \${__root}
+                                            --prefix ${CMAKE_INSTALL_PREFIX}
+                                            --record=${CMAKE_BINARY_DIR}/extra_install.txt
                                   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
 
 endif()
diff --git a/python/eccodes/high_level/bufr.py b/python/eccodes/high_level/bufr.py
index d4e337c..e333391 100644
--- a/python/eccodes/high_level/bufr.py
+++ b/python/eccodes/high_level/bufr.py
@@ -33,14 +33,14 @@ class BufrMessage(CodesMessage):
         """
         super(self.__class__, self).__init__(codes_file, clone, sample,
                                              headers_only)
-        self._unpacked = False
+        #self._unpacked = False
 
-    def get(self, key, ktype=None):
-        """Return requested value, unpacking data values if necessary."""
-        # TODO: Only do this if accessing arrays that need unpacking
-        if not self._unpacked:
-            self.unpacked = True
-        return super(self.__class__, self).get(key, ktype)
+    #def get(self, key, ktype=None):
+    #    """Return requested value, unpacking data values if necessary."""
+    #    # TODO: Only do this if accessing arrays that need unpacking
+    #    if not self._unpacked:
+    #        self.unpacked = True
+    #    return super(self.__class__, self).get(key, ktype)
 
     #def missing(self, key):
     #    """
@@ -50,8 +50,16 @@ class BufrMessage(CodesMessage):
     #    """
     #    return not bool(eccodes.codes_is_defined(self.codes_id, key))
 
+    def unpack(self):
+        """Decode data section"""
+        eccodes.codes_set(self.codes_id, 'unpack', 1)
+
+    def pack(self):
+        """Encode data section"""
+        eccodes.codes_set(self.codes_id, 'pack', 1)
+
     def keys(self, namespace=None):
-        self.unpacked = True
+        #self.unpack()
         #return super(self.__class__, self).keys(namespace)
         iterator = eccodes.codes_bufr_keys_iterator_new(self.codes_id)
         keys = []
@@ -61,22 +69,25 @@ class BufrMessage(CodesMessage):
         eccodes.codes_bufr_keys_iterator_delete(iterator)
         return keys
 
-    @property
-    def unpacked(self):
-        return self._unpacked
-
-    @unpacked.setter
-    def unpacked(self, val):
-        eccodes.codes_set(self.codes_id, "unpack", val)
-        self._unpacked = val
-
-    def __setitem__(self, key, value):
-        """Set item and pack BUFR."""
-        if not self._unpacked:
-            self.unpacked = True
-        super(self.__class__, self).__setitem__(key, value)
-        eccodes.codes_set(self.codes_id, "pack", True)
-
+    #@property
+    #def unpacked(self):
+    #    return self._unpacked
+
+    #@unpacked.setter
+    #def unpacked(self, val):
+    #    eccodes.codes_set(self.codes_id, "unpack", val)
+    #    self._unpacked = val
+
+    #def __setitem__(self, key, value):
+    #    """Set item and pack BUFR."""
+    #    if not self._unpacked:
+    #        self.unpacked = True
+    #    super(self.__class__, self).__setitem__(key, value)
+    #    eccodes.codes_set(self.codes_id, "pack", True)
+
+    def copy_data(self, destMsg):
+        """Copy data values from this message to another message"""
+        return eccodes.codes_bufr_copy_data(self.codes_id, destMsg.codes_id)
 
 class BufrFile(CodesFile):
 
diff --git a/python/eccodes/high_level/codesmessage.py b/python/eccodes/high_level/codesmessage.py
index a35a2f6..234c144 100644
--- a/python/eccodes/high_level/codesmessage.py
+++ b/python/eccodes/high_level/codesmessage.py
@@ -109,8 +109,15 @@ class CodesMessage(object):
 
         Iterables and scalars are handled intelligently.
         """
-        # Passed value is iterable and not string
-        if hasattr(value, "__iter__"):
+        # Passed key is iterable. Value has to be iterable too
+        if hasattr(key, "__iter__"):
+            if type(key) != type(value):
+                raise TypeError('Key must have same type as value')
+            if len(key) != len(value):
+                raise ValueError('Key array must have same size as value array')
+            eccodes.codes_set_key_vals(self.codes_id,",".join([str(key[i])+"="+str(value[i]) for i in range(len(key))]))
+        elif hasattr(value, "__iter__"):
+            # Passed value is iterable and not string
             eccodes.codes_set_array(self.codes_id, key, value)
         else:
             eccodes.codes_set(self.codes_id, key, value)
diff --git a/python/gribapi/gribapi.py b/python/gribapi/gribapi.py
index 3660cec..b8d6157 100644
--- a/python/gribapi/gribapi.py
+++ b/python/gribapi/gribapi.py
@@ -66,7 +66,9 @@ no_type_checks = os.environ.get('GRIB_API_PYTHON_NO_TYPE_CHECKS') is not None
 # modified to support multiple allowed types and all types in the same decorator call
 # This returns a decorator. _params_ is the dict with the type specs
 def require(**_params_):
-    # The actual decorator. Receives the target function in _func_
+    """
+    The actual decorator. Receives the target function in _func_
+    """
     def check_types(_func_, _params_=_params_):
         if no_type_checks:
             return _func_
@@ -145,17 +147,17 @@ def gts_new_from_file(fileobj, headers_only=False):
 
     @param fileobj        python file object
     @param headers_only   whether or not to load the message with the headers only
-    @return id of the GTS loaded in memory
+    @return               id of the GTS loaded in memory
     @exception GribInternalError
     """
-    err, gribid = _internal.grib_c_new_gts_from_file(fileobj, headers_only, 0)
+    err, gtsid = _internal.grib_c_new_gts_from_file(fileobj, headers_only, 0)
     if err:
         if err == _internal.GRIB_END_OF_FILE:
             return None
         else:
             GRIB_CHECK(err)
     else:
-        return gribid
+        return gtsid
 
 
 @require(fileobj=file)
@@ -168,17 +170,17 @@ def metar_new_from_file(fileobj, headers_only=False):
 
     @param fileobj        python file object
     @param headers_only   whether or not to load the message with the headers only
-    @return id of the METAR loaded in memory
+    @return               id of the METAR loaded in memory
     @exception GribInternalError
     """
-    err, gribid = _internal.grib_c_new_metar_from_file(fileobj, headers_only, 0)
+    err, metarid = _internal.grib_c_new_metar_from_file(fileobj, headers_only, 0)
     if err:
         if err == _internal.GRIB_END_OF_FILE:
             return None
         else:
             GRIB_CHECK(err)
     else:
-        return gribid
+        return metarid
 
 
 @require(fileobj=file, product_kind=int)
@@ -225,14 +227,14 @@ def any_new_from_file(fileobj, headers_only=False):
     @return               id of the message loaded in memory
     @exception GribInternalError
     """
-    err, gribid = _internal.grib_c_new_any_from_file(fileobj, headers_only, 0)
+    err, msgid = _internal.grib_c_new_any_from_file(fileobj, headers_only, 0)
     if err:
         if err == _internal.GRIB_END_OF_FILE:
             return None
         else:
             GRIB_CHECK(err)
     else:
-        return gribid
+        return msgid
 
 
 @require(fileobj=file)
@@ -247,23 +249,23 @@ def bufr_new_from_file(fileobj, headers_only=False):
 
     @param fileobj        python file object
     @param headers_only   whether or not to load the message with the headers only
-    @return id of the BUFR loaded in memory
+    @return               id of the BUFR loaded in memory
     @exception GribInternalError
     """
-    err, gribid = _internal.grib_c_new_bufr_from_file(fileobj, headers_only, 0)
+    err, bufrid = _internal.grib_c_new_bufr_from_file(fileobj, headers_only, 0)
     if err:
         if err == _internal.GRIB_END_OF_FILE:
             return None
         else:
             GRIB_CHECK(err)
     else:
-        return gribid
+        return bufrid
 
 
 @require(fileobj=file)
 def grib_new_from_file(fileobj, headers_only=False):
     """
-    @brief Load in memory a grib message from a file.
+    @brief Load in memory a GRIB message from a file.
 
     The message can be accessed through its gribid and will be available\n
     until @ref grib_release is called.\n
@@ -279,7 +281,7 @@ def grib_new_from_file(fileobj, headers_only=False):
 
     @param fileobj        python file object
     @param headers_only   whether or not to load the message with the headers only
-    @return id of the grib loaded in memory
+    @return               id of the grib loaded in memory
     @exception GribInternalError
     """
     err, gribid = _internal.grib_c_new_from_file(fileobj, 0, headers_only)
@@ -300,7 +302,7 @@ def grib_count_in_file(fileobj):
     \b Examples: \ref count_messages.py "count_messages.py"
 
     @param fileobj  python file object
-    @return number of messages in the file
+    @return         number of messages in the file
     @exception GribInternalError
     """
     err, num = _internal.grib_c_count_in_file(fileobj)
@@ -346,7 +348,7 @@ def grib_get_string(msgid, key):
 
     @param msgid       id of the message loaded in memory
     @param key         key name
-    @return string value of key
+    @return            string value of key
     @exception GribInternalError
     """
     length = grib_get_string_length(msgid, key)
@@ -366,8 +368,8 @@ def grib_set_string(msgid, key, value):
     @brief Set the value for a string key in a message.
 
     @param msgid      id of the message loaded in memory
-    @param key         key name
-    @param value       string value
+    @param key        key name
+    @param value      string value
     @exception GribInternalError
     """
     GRIB_CHECK(_internal.grib_c_set_string(msgid, key, value, len(value)))
@@ -460,7 +462,7 @@ def grib_get_string_length(msgid, key):
     @brief Get the length of the string version of a key.
 
     @param msgid      id of the message loaded in memory
-    @param key         name of the key
+    @param key        name of the key
     @exception GribInternalError
     """
     err, result = _internal.grib_c_get_string_length(msgid, key)
@@ -565,7 +567,7 @@ def grib_iterator_new(gribid, mode):
 
     @param gribid  id of the GRIB loaded in memory
     @param mode    flags for future use
-    @return geoiterator id
+    @return        geoiterator id
     """
     err, iterid = _internal.grib_c_iterator_new(gribid, mode)
     GRIB_CHECK(err)
@@ -592,8 +594,8 @@ def grib_iterator_next(iterid):
 
     \b Examples: \ref grib_iterator.py "grib_iterator.py"
 
-    @param iterid geoiterator id
-    @return tuple with the latitude, longitude and value
+    @param    iterid geoiterator id
+    @return   tuple with the latitude, longitude and value
     @exception GribInternalError
     """
     err, lat, lon, value = _internal.grib_c_iterator_next(iterid)
@@ -773,7 +775,7 @@ def grib_get_long(msgid, key):
 
     @param msgid       id of the message loaded in memory
     @param key         key name
-    @return value of key as int
+    @return            value of key as int
     @exception GribInternalError
     """
     err, value = _internal.grib_c_get_long(msgid, key)
@@ -787,8 +789,8 @@ def grib_get_double(msgid, key):
     @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
-    @return value of key as float
+    @param key        key name
+    @return           value of key as float
     @exception GribInternalError
     """
     err, value = _internal.grib_c_get_double(msgid, key)
@@ -805,8 +807,8 @@ def grib_set_long(msgid, key, value):
     as an integer.
 
     @param msgid      id of the message loaded in memory
-    @param key         key name
-    @param value       value to set
+    @param key        key name
+    @param value      value to set
     @exception GribInternalError,TypeError
     """
     try:
@@ -876,7 +878,7 @@ def grib_new_from_samples(samplename):
     \b Examples: \ref grib_samples.py "grib_samples.py"
 
     @param samplename   name of the sample to be used
-    @return id of the message loaded in memory
+    @return             id of the message loaded in memory
     @exception GribInternalError
     """
     err, msgid = _internal.grib_c_grib_new_from_samples(0, samplename)
@@ -931,8 +933,8 @@ def grib_clone(msgid_src):
 
     \b Examples: \ref grib_clone.py "grib_clone.py"
 
-    @param msgid_src     id of message to be cloned
-    @return id of clone
+    @param msgid_src   id of message to be cloned
+    @return            id of clone
     @exception GribInternalError
     """
     err, newmsgid_src = _internal.grib_c_clone(msgid_src, 0)
@@ -953,9 +955,9 @@ def grib_set_double_array(msgid, key, inarray):
 
     The elements of the input sequence need to be convertible to a double.
 
-    @param msgid   id of the message loaded in memory
-    @param key     key name
-    @param inarray tuple,list,array,numpy.ndarray
+    @param msgid    id of the message loaded in memory
+    @param key      key name
+    @param inarray  tuple,list,array,numpy.ndarray
     @exception GribInternalError
     """
     GRIB_CHECK(_internal.grib_set_double_ndarray(msgid, key, inarray))
@@ -1373,29 +1375,29 @@ def grib_get_message_offset(msgid):
     return value
 
 
- at require(gribid=int, key=str, index=int)
-def grib_get_double_element(gribid, key, index):
+ at require(msgid=int, key=str, index=int)
+def grib_get_double_element(msgid, key, index):
     """
     @brief Get as double the i-th element of the "key" array.
 
-    @param gribid      id of the grib loaded in memory
+    @param msgid       id of the message loaded in memory
     @param key         the key to be searched
     @param index       zero based index of value to retrieve
     @return            value
     @exception GribInternalError
 
     """
-    err, value = _internal.grib_c_get_real8_element(gribid, key, index)
+    err, value = _internal.grib_c_get_real8_element(msgid, key, index)
     GRIB_CHECK(err)
     return value
 
 
- at require(gribid=int, key=str, indexes=(list, tuple))
-def grib_get_double_elements(gribid, key, indexes):
+ at require(msgid=int, key=str, indexes=(list, tuple))
+def grib_get_double_elements(msgid, key, indexes):
     """
     @brief Get as double array the elements of the "key" array whose indexes are listed in the input array.
 
-    @param gribid      id of the grib loaded in memory
+    @param msgid       id of the message loaded in memory
     @param key         the key to be searched
     @param indexes     list or tuple of indexes
     @return            numpy.ndarray
@@ -1403,17 +1405,17 @@ def grib_get_double_elements(gribid, key, indexes):
 
     """
     nidx = len(indexes)
-    err, result = _internal.grib_get_double_ndelements(gribid, key, indexes, nidx)
+    err, result = _internal.grib_get_double_ndelements(msgid, key, indexes, nidx)
     GRIB_CHECK(err)
     return result
 
 
- at require(gribid=int, key=str)
-def grib_get_elements(gribid, key, indexes):
+ at require(msgid=int, key=str)
+def grib_get_elements(msgid, key, indexes):
     """
     @brief Retrieve the elements of the key array for the indexes specified in the input.
 
-    @param gribid     id of the grib loaded in memory
+    @param msgid      id of the message loaded in memory
     @param key        the key to be searched
     @param indexes    single index or a list of indexes
     @return           numpy.ndarray containing the values of key for the given indexes
@@ -1425,7 +1427,7 @@ def grib_get_elements(gribid, key, indexes):
         indexes = (indexes,)
 
     nidx = len(indexes)
-    err, result = _internal.grib_get_double_ndelements(gribid, key, indexes, nidx)
+    err, result = _internal.grib_get_double_ndelements(msgid, key, indexes, nidx)
     GRIB_CHECK(err)
     return result
 
@@ -1497,8 +1499,8 @@ def grib_is_missing(msgid, key):
     in the WMO documentation.
 
     @param msgid      id of the message loaded in memory
-    @param key         key name
-    @return 0->not missing, 1->missing
+    @param key        key name
+    @return           0->not missing, 1->missing
     @exception GribInternalError
     """
     err, value = _internal.grib_c_is_missing(msgid, key)
@@ -1569,19 +1571,19 @@ def grib_find_nearest(gribid, inlat, inlon, is_lsm=False, npoints=1):
         raise ValueError("Invalid value for npoints. Expecting 1 or 4.")
 
 
- at require(gribid=int, key=str)
-def grib_get_native_type(gribid, key):
+ at require(msgid=int, key=str)
+def grib_get_native_type(msgid, key):
     """
     @brief Retrieve the native type of a key.
 
     Possible values can be int, float or string.
 
-    @param gribid   id of the grib loaded in memory
-    @param key      key we want to find out the type for
-    @return type of key given as input or None if not determined
+    @param msgid   id of the message loaded in memory
+    @param key     key we want to find out the type for
+    @return        type of key given as input or None if not determined
     @exception GribInternalError
     """
-    err, itype = _internal.grib_c_get_native_type(gribid, key)
+    err, itype = _internal.grib_c_get_native_type(msgid, key)
     GRIB_CHECK(err)
     if itype in KEYTYPES:
         return KEYTYPES[itype]
@@ -1604,9 +1606,9 @@ def grib_get(msgid, key, ktype=None):
 
     @see grib_new_from_file, grib_release, grib_set
 
-    @param msgid      id of the grib loaded in memory
-    @param key         key name
-    @param ktype       the type we want the output in (int, float or str), native type if not specified
+    @param msgid      id of the message loaded in memory
+    @param key        key name
+    @param ktype      the type we want the output in (int, float or str), native type if not specified
     @return scalar value of key as int, float or str
     @exception GribInternalError
     """
@@ -1629,8 +1631,8 @@ def grib_get_array(msgid, key, ktype=None):
     """
     @brief Get the contents of an array key.
 
-    The output array will be stored in a NumPy ndarray.
     The type of the array returned depends on the native type of the requested key.
+    For numeric data, the output array will be stored in a NumPy ndarray.
     The type of value returned can be forced by using the type argument of the function.
     The type argument can be int, float or string.
 
@@ -1657,13 +1659,13 @@ def grib_get_array(msgid, key, ktype=None):
 @require(gribid=int)
 def grib_get_values(gribid):
     """
-    @brief Retrieve the contents of the 'values' key.
+    @brief Retrieve the contents of the 'values' key for a GRIB message.
 
-    A NumPy ndarray containing the values in the message is returned.
+    A NumPy ndarray containing the values in the GRIB message is returned.
 
     \b Examples: \ref grib_print_data.py "grib_print_data.py", \ref grib_samples.py "grib_samples.py"
 
-    @param gribid   id of the grib loaded in memory
+    @param gribid   id of the GRIB loaded in memory
     @return         numpy.ndarray
     @exception GribInternalError
     """
@@ -1673,7 +1675,7 @@ def grib_get_values(gribid):
 @require(gribid=int)
 def grib_set_values(gribid, values):
     """
-    @brief Set the contents of the 'values' key.
+    @brief Set the contents of the 'values' key for a GRIB message.
 
     The input array can be a numpy.ndarray or a python sequence like tuple, list, array, ...
 
@@ -1685,7 +1687,7 @@ def grib_set_values(gribid, values):
 
     \b Examples: \ref grib_clone.py "grib_clone.py", \ref grib_samples.py "grib_samples.py"
 
-    @param gribid   id of the grib loaded in memory
+    @param gribid   id of the GRIB loaded in memory
     @param values   array of values to set as tuple, list, array or numpy.ndarray
     """
     grib_set_double_array(gribid, "values", values)
@@ -1702,9 +1704,9 @@ def grib_set(msgid, key, value):
 
     @see grib_new_from_file, grib_release, grib_get
 
-    @param msgid      id of the grib loaded in memory
-    @param key         key name
-    @param value       scalar value to set for key
+    @param msgid      id of the message loaded in memory
+    @param key        key name
+    @param value      scalar value to set for key
     @exception GribInternalError
     """
     if isinstance(value, int):
@@ -1871,9 +1873,9 @@ def grib_gts_header(flag):
 
 def grib_get_api_version():
     """
-    @brief Get the api version.
+    @brief Get the API version.
 
-    Returns the version of the api as a string in the format "major.minor.revision".
+    Returns the version of the API as a string in the format "major.minor.revision".
     """
     div = lambda v, d: (v / d, v % d)
     v = _internal.grib_c_get_api_version()
@@ -1891,12 +1893,12 @@ def grib_get_message(msgid):
     """
     @brief Get the binary message.
 
-    Returns the binary string message associated with the grib identified by msgid.
+    Returns the binary string message associated with the message identified by msgid.
 
     @see grib_new_from_message
 
-    @param msgid      id of the grib loaded in memory
-    @return binary string message associated with msgid
+    @param msgid      id of the message loaded in memory
+    @return           binary string message associated with msgid
     @exception GribInternalError
     """
     error, message = _internal.grib_c_get_message(msgid)
@@ -1907,14 +1909,14 @@ def grib_get_message(msgid):
 @require(message=str)
 def grib_new_from_message(message):
     """
-    @brief Create a grib handle from a message in memory.
+    @brief Create a handle from a message in memory.
 
-    Create a new message from the input binary string and return its grib id.
+    Create a new message from the input binary string and return its id.
 
     @see grib_get_message
 
-    @param message binary string message
-    @return msgid of the newly created message
+    @param         message binary string 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/src/TODO b/src/TODO
index 26490c0..9b9bb5d 100644
--- a/src/TODO
+++ b/src/TODO
@@ -4,19 +4,17 @@ grib1 words = grib2 words
                     ??? (grib2)
   
 
-find a way to have the version in grib_api.h
 why if(a->offset%2) buflen++;
 lat/lon is not in 0..180
 
-
 constness
 
 reparse on unsigned[size]
-repasre lists
+reparse lists
 
 expression: persitemy malloc
 tidy errors
-iterator  and scanning mode
+iterator and scanning mode
 gribex and missing local definition
 
 SST dats
diff --git a/src/action_class_assert.c b/src/action_class_assert.c
index c10d070..94d75c0 100644
--- a/src/action_class_assert.c
+++ b/src/action_class_assert.c
@@ -101,7 +101,7 @@ static int create_accessor(grib_section* p, grib_action* act,grib_loader *h)
 
   grib_push_accessor(as,p->block);
 
-  
+
   return GRIB_SUCCESS;
 }
 
diff --git a/src/bufr_keys_iterator.c b/src/bufr_keys_iterator.c
index a364c85..7eb3778 100644
--- a/src/bufr_keys_iterator.c
+++ b/src/bufr_keys_iterator.c
@@ -182,8 +182,9 @@ 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;
+    grib_string_list* sl = NULL;
+    Assert(kiter->current);
 
     if (kiter->prefix) {
         int iattribute=kiter->i_curr_attribute-1;
@@ -201,7 +202,7 @@ char* codes_bufr_keys_iterator_get_name(bufr_keys_iterator* kiter)
     }
 
     /* 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=(grib_string_list*)grib_context_malloc_clear(c, sizeof(grib_string_list));
     sl->value = ret;
     if (!kiter->names) {
         kiter->names = sl;
diff --git a/src/eccodes.c b/src/eccodes.c
index 6b7394b..0f67c59 100644
--- a/src/eccodes.c
+++ b/src/eccodes.c
@@ -9,7 +9,6 @@
  */
 
 #include "eccodes.h"
-#include <assert.h>
 
 /* Generic functions */
 /******************************************************************************/
diff --git a/src/grib_accessor_class_assert.c b/src/grib_accessor_class_assert.c
index 3f6c748..acbeea0 100644
--- a/src/grib_accessor_class_assert.c
+++ b/src/grib_accessor_class_assert.c
@@ -14,7 +14,7 @@
 
 
 #include "grib_api_internal.h"
-/* 
+/*
    This is used by make_class.pl
 
    START_CLASS_DEF
diff --git a/src/grib_accessor_class_bits.c b/src/grib_accessor_class_bits.c
index 06f37fd..ebfc52e 100644
--- a/src/grib_accessor_class_bits.c
+++ b/src/grib_accessor_class_bits.c
@@ -14,7 +14,7 @@
 
 
 #include "grib_api_internal.h"
-#include <assert.h>
+
 
 /*
    This is used by make_class.pl
@@ -175,7 +175,7 @@ static void init(grib_accessor* a,const long l, grib_arguments* c)
         self->scale=grib_arguments_get_double(grib_handle_of_accessor(a),c,n++);
     }
 
-    assert(self->len <= sizeof(long)*8);
+    Assert(self->len <= sizeof(long)*8);
 
     a->length=0;
 }
@@ -298,7 +298,7 @@ static int get_native_type(grib_accessor* a)
     int type=GRIB_TYPE_BYTES;
     grib_accessor_bits* self = (grib_accessor_bits*)a;
 
-    if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE)  
+    if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE)
         type=GRIB_TYPE_STRING;
 
     if (a->flags & GRIB_ACCESSOR_FLAG_LONG_TYPE)
diff --git a/src/grib_accessor_class_bufr_data_array.c b/src/grib_accessor_class_bufr_data_array.c
index 973a676..4c88145 100644
--- a/src/grib_accessor_class_bufr_data_array.c
+++ b/src/grib_accessor_class_bufr_data_array.c
@@ -2373,6 +2373,9 @@ static int process_elements(grib_accessor* a,int flag,long onlySubset,long start
             case 2:
                 /* Operator */
                 switch(descriptors[i]->X) {
+                case 3:
+                    grib_context_log(c,GRIB_LOG_ERROR,"process_elements: operator %d not yet implemented\n",descriptors[i]->X);
+                    return GRIB_NOT_IMPLEMENTED;
                 case 5:
                     descriptors[i]->width=descriptors[i]->Y*8;
                     descriptors[i]->type=BUFR_DESCRIPTOR_TYPE_STRING;
diff --git a/src/grib_accessor_class_data_complex_packing.c b/src/grib_accessor_class_data_complex_packing.c
index 19bff0a..7380176 100644
--- a/src/grib_accessor_class_data_complex_packing.c
+++ b/src/grib_accessor_class_data_complex_packing.c
@@ -221,231 +221,7 @@ static int value_count(grib_accessor* a,long* count)
     return ret;
 }
 
-static int unpack_double_standard(grib_accessor* a, double* val, size_t *len)
-{
-    grib_accessor_data_complex_packing* self =  (grib_accessor_data_complex_packing*)a;
-    grib_handle* gh = grib_handle_of_accessor(a);
-
-    size_t i = 0;
-    int ret = GRIB_SUCCESS;
-    long   hcount = 0;
-    long   lcount = 0;
-    long   hpos = 0;
-    long   lup = 0;
-    long   mmax = 0;
-    long   n_vals = 0;
-    double *scals  = NULL;
-    double *pscals=NULL,*pval=NULL;
-
-    double s = 0;
-    double d = 0;
-    double laplacianOperator = 0;
-    unsigned char* buf = NULL;
-    unsigned char* hres = NULL;
-    unsigned char* lres = NULL;
-    unsigned long packed_offset;
-    long   lpos = 0;
-
-    long   maxv = 0;
-    long   GRIBEX_sh_bug_present =0;
-    long ieee_floats  = 0;
-
-    long   offsetdata           = 0;
-    long   bits_per_value          = 0;
-    double reference_value      = 0;
-    long   binary_scale_factor         = 0;
-    long   decimal_scale_factor = 0;
-
-    long   sub_j= 0;
-    long   sub_k= 0;
-    long   sub_m= 0;
-    long   pen_j= 0;
-    long   pen_k= 0;
-    long   pen_m= 0;
-
-    double operat= 0;
-    int bytes;
-    int err=0;
-
-    decode_float_proc decode_float = NULL;
-
-    err=grib_value_count(a,&n_vals);
-    if (err) return err;
-
-    if(*len < n_vals){
-        *len = n_vals;
-        return GRIB_ARRAY_TOO_SMALL;
-    }
-
-    if((ret = grib_get_long_internal(gh,self->offsetdata,&offsetdata))
-            != GRIB_SUCCESS)   return ret;
-    if((ret = grib_get_long_internal(gh,self->bits_per_value,&bits_per_value))
-            != GRIB_SUCCESS)   return ret;
-    if((ret = grib_get_double_internal(gh,self->reference_value,&reference_value))
-            != GRIB_SUCCESS)   return ret;
-    if((ret = grib_get_long_internal(gh,self->binary_scale_factor,&binary_scale_factor))
-            != GRIB_SUCCESS)           return ret;
-
-    if((ret = grib_get_long_internal(gh,self->decimal_scale_factor,&decimal_scale_factor))
-            != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_long_internal(gh,self->GRIBEX_sh_bug_present,&GRIBEX_sh_bug_present))
-            != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_long_internal(gh,self->ieee_floats,&ieee_floats)) != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_double_internal(gh,self->laplacianOperator,&laplacianOperator))
-            != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->sub_j,&sub_j)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->sub_k,&sub_k)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->sub_m,&sub_m)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->pen_j,&pen_j)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->pen_k,&pen_k)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->pen_m,&pen_m)) != GRIB_SUCCESS)
-        return ret;
-
-    self->dirty=0;
-
-    switch (ieee_floats) {
-    case 0:
-        decode_float=grib_long_to_ibm;
-        bytes=4;
-        break;
-    case 1:
-        decode_float=grib_long_to_ieee;
-        bytes=4;
-        break;
-    case 2:
-        decode_float=grib_long_to_ieee64;
-        bytes=8;
-        break;
-    default:
-        return GRIB_NOT_IMPLEMENTED;
-    }
-
-    Assert (sub_j == sub_k);
-    Assert (sub_j == sub_m);
-    Assert (pen_j == pen_k);
-    Assert (pen_j == pen_m);
-
-    buf = (unsigned char*)gh->buffer->data;
-
-    maxv = pen_j+1;
-
-    buf  += grib_byte_offset(a);
-    hres = buf;
-    lres = buf;
-
-    if (pen_j == sub_j) {
-        n_vals = (pen_j+1)*(pen_j+2);
-        d = grib_power(-decimal_scale_factor,10) ;
-        grib_ieee_decode_array(a->context,buf,n_vals,bytes,val);
-        if (d) {
-            for (i=0;i<n_vals;i++) val[i]*=d;
-        }
-        return 0;
-    }
-
-    packed_offset = grib_byte_offset(a) +  4*(sub_k+1)*(sub_k+2);
-
-    lpos = 8*(packed_offset-offsetdata);
-
-    s = grib_power(binary_scale_factor,2);
-    d = grib_power(-decimal_scale_factor,10) ;
-
-    scals   = (double*)grib_context_malloc(a->context,maxv*sizeof(double));
-    Assert(scals);
-
-    scals[0] = 0;
-    for(i=1;i<maxv;i++){
-        operat = pow(i*(i+1),laplacianOperator);
-        if(operat !=  0)
-            scals[i] = (1.0/operat);
-        else{
-            grib_context_log(a->context,GRIB_LOG_WARNING,
-                    "COMPLEX_PACKING : problem with operator div by zero at index %d of %d \n",
-                    i , maxv);
-            scals[i] = 0;
-        }
-    }
-
-    /*
-  printf("UNPACKING LAPLACE=%.20f\n",laplacianOperator);
-
-  printf("packed offset=%ld\n",packed_offset);
-  for(i=0;i<maxv;i++)
-    printf("scals[%d]=%g\n",i,scals[i]);*/
-
-    i=0;
-
-    while(maxv>0)
-    {
-        lup=mmax;
-        if(sub_k>=0)
-        {
-            for(hcount=0;hcount<sub_k+1;hcount++)
-            {
-                val[i++] =  decode_float(grib_decode_unsigned_long(hres,&hpos,32))*d;
-                val[i++] =  decode_float(grib_decode_unsigned_long(hres,&hpos,32))*d;
-
-                if (GRIBEX_sh_bug_present && hcount==sub_k){
-                    /*  bug in ecmwf data, last row (K+1)is scaled but should not */
-                    val[i-2] *= scals[lup];
-                    val[i-1] *= scals[lup];
-                }
-                lup++;
-            }
-            sub_k--;
-        }
-
-        pscals=scals+lup;
-        pval=val+i;
-#if FAST_BIG_ENDIAN
-        grib_decode_double_array_complex(lres,
-                &lpos,bits_per_value,
-                reference_value,s,pscals,(maxv-hcount)*2,pval);
-        i+=(maxv-hcount)*2;
-#else
-        (void)pscals; /* suppress gcc warning */
-        (void)pval;   /* suppress gcc warning */
-        for(lcount=hcount; lcount < maxv ; lcount++)
-        {
-            val[i++] =  (double) ((grib_decode_unsigned_long(lres, &lpos,
-                    bits_per_value)*s)+reference_value)*scals[lup];
-            val[i++] =  (double) ((grib_decode_unsigned_long(lres, &lpos,
-                    bits_per_value)*s)+reference_value)*scals[lup];
-            lup++;
-        }
-#endif
-
-        maxv--;
-        hcount=0;
-        mmax++;
-    }
-
-    Assert(*len >= i);
-    *len = i;
-
-    if(d != 1) {
-        for(i=0;i<*len;i++)
-            val[i++] *= d;
-    }
-
-    grib_context_free(a->context,scals);
-
-    return ret;
-}
-
-static int unpack_double_optimised(grib_accessor* a, double* val, size_t *len)
+static int unpack_double(grib_accessor* a, double* val, size_t *len)
 {
     grib_accessor_data_complex_packing* self =  (grib_accessor_data_complex_packing*)a;
     grib_handle* gh = grib_handle_of_accessor(a);
@@ -769,7 +545,7 @@ static double calculate_pfactor(grib_context *ctx,const double* spectralField, l
     return pFactor;
 }
 
-static int pack_double_standard(grib_accessor* a, const double* val, size_t *len)
+static int pack_double(grib_accessor* a, const double* val, size_t *len)
 {
     grib_accessor_data_complex_packing* self =  (grib_accessor_data_complex_packing*)a;
     grib_handle* gh = grib_handle_of_accessor(a);
@@ -884,7 +660,6 @@ static int pack_double_standard(grib_accessor* a, const double* val, size_t *len
     Assert (pen_j == pen_k); Assert( pen_j == pen_m);
 
     n_vals = (pen_j+1)*(pen_j+2);
-    d = grib_power(decimal_scale_factor,10) ;
 
     if(*len != n_vals){
         grib_context_log(a->context,GRIB_LOG_ERROR,"COMPLEX_PACKING : wrong number of values, expected %d - got %d",n_vals,*len);
@@ -893,6 +668,7 @@ static int pack_double_standard(grib_accessor* a, const double* val, size_t *len
 
     if (pen_j == sub_j) {
         double* values;
+        d = grib_power(decimal_scale_factor,10) ;
         if (d) {
             values=(double*)grib_context_malloc_clear(a->context,sizeof(double)*n_vals);
             for (i=0;i<n_vals;i++) values[i]=val[i]*d;
@@ -915,10 +691,6 @@ static int pack_double_standard(grib_accessor* a, const double* val, size_t *len
         grib_get_double_internal(gh,self->laplacianOperator,&laplacianOperator);
     }
 
-    /*
-   printf("PACKING LAPLACE set=%ld value=%.20f\n",laplacianOperatorIsSet,laplacianOperator);
-     */
-
     hsize = 4*(sub_k+1)*(sub_k+2);
     lsize = ((n_vals - ((sub_k+1)*(sub_k+2)))*bits_per_value)/8;
 
@@ -963,7 +735,7 @@ static int pack_double_standard(grib_accessor* a, const double* val, size_t *len
 
         for(lcount=hcount; lcount < maxv ; lcount++)
         {
-            current_val = ((val[i++]*d) * scals[lup]);
+            current_val = ((val[i++]) * scals[lup]);
             if(mixmax_unset == 0){
                 max = current_val;
                 min = current_val;
@@ -973,7 +745,7 @@ static int pack_double_standard(grib_accessor* a, const double* val, size_t *len
             if(current_val > max) max = current_val;
             if(current_val < min) min = current_val;
 
-            current_val = ((val[i++]*d) * scals[lup]);
+            current_val = ((val[i++]) * scals[lup]);
             if(current_val > max) max = current_val;
             if(current_val < min) min = current_val;
 
@@ -984,384 +756,43 @@ static int pack_double_standard(grib_accessor* a, const double* val, size_t *len
         mmax++;
     }
 
-    if (grib_get_nearest_smaller_value(gh,self->reference_value,min,&reference_value)
-            !=GRIB_SUCCESS) {
-        grib_context_log(a->context,GRIB_LOG_ERROR,
-                "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-        return GRIB_INTERNAL_ERROR;
-    }
-    binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret);
-
-    if (ret==GRIB_UNDERFLOW) {
-        d=0;
-        binary_scale_factor = 0;
-        reference_value=0;
-    } else {
-        if (ret!=GRIB_SUCCESS) {
-            grib_context_log(a->context,GRIB_LOG_ERROR,"COMPLEX_PACKING : Cannot compute binary_scale_factor");
-            return ret;
+    if (optimize_scaling_factor)
+    {
+        ret = grib_optimize_decimal_factor (a, self->reference_value,
+                max, min, bits_per_value, 0, 1,
+                &decimal_scale_factor,
+                &binary_scale_factor,
+                &reference_value);
+        if (ret !=GRIB_SUCCESS) {
+            grib_context_log(gh->context,GRIB_LOG_ERROR,
+                    "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
+            return GRIB_INTERNAL_ERROR;
         }
+        d = grib_power(+decimal_scale_factor,10);
     }
-    s = grib_power(-binary_scale_factor,2);
+    else
+    {
+        d = grib_power(+decimal_scale_factor,10);
+        if (grib_get_nearest_smaller_value(gh,self->reference_value,d*min,&reference_value)
+                !=GRIB_SUCCESS) {
+            grib_context_log(gh->context,GRIB_LOG_ERROR,
+                    "unable to find nearest_smaller_value of %g for %s",d*min,self->reference_value);
+            return GRIB_INTERNAL_ERROR;
+        }
+        binary_scale_factor = grib_get_binary_scale_fact(d*max,reference_value,bits_per_value,&ret);
 
-    /* printf("D : %.30f\n",d); */
-
-    i=0;
-
-    mmax = 0;
-    maxv = pen_j+1;
-    i=0;
-    lcount=0;
-    hcount=0;
-    sub_k = sub_j;
-
-    while(maxv>0)
-    {
-        lup=mmax;
-
-        if(sub_k>=0)
-        {
-            for(hcount=0;hcount<sub_k+1;hcount++)
-            {
-                if ( GRIBEX_sh_bug_present && hcount==sub_k ) {
-                    /* _test(val[i]*d*scals[lup],1); */
-                    grib_encode_unsigned_long(hres, encode_float((val[i++]*d)*scals[lup]) , &hpos, 32);
-                    /* _test(val[i]*d*scals[lup],1); */
-                    grib_encode_unsigned_long(hres, encode_float((val[i++]*d)*scals[lup]) , &hpos, 32);
-                }else{
-
-                    /* _test(val[i]*d,0); */
-
-                    grib_encode_unsigned_long(hres, encode_float(val[i++]*d) , &hpos, 32);
-                    /* _test(val[i]*d,0); */
-                    grib_encode_unsigned_long(hres, encode_float(val[i++]*d) , &hpos, 32);
-                }
-                lup++;
-            }
-            sub_k--;
-        }
-
-#if FAST_BIG_ENDIAN
-        grib_encode_double_array_complex((maxv-hcount)*2,&(val[i]),bits_per_value,reference_value,&(scals[lup]),d,s,lres,&lpos);
-        i+=(maxv-hcount)*2;
-#else
-        if (bits_per_value % 8) {
-            for(lcount=hcount; lcount < maxv ; lcount++)
-            {
-                current_val = (((((val[i++]*d) * scals[lup])-reference_value)*s)+0.5);
-                if(current_val < 0)
-                    grib_context_log(a->context,GRIB_LOG_ERROR,
-                            "COMPLEX_PACKING : negative coput before packing (%g)", current_val);
-                grib_encode_unsigned_longb(lres, current_val, &lpos, bits_per_value);
-
-                current_val = (((((val[i++]*d) * scals[lup])-reference_value)*s)+0.5);
-                if(current_val < 0)
-                    grib_context_log(a->context,GRIB_LOG_ERROR,
-                            "COMPLEX_PACKING : negative coput before packing (%g)", current_val);
-                grib_encode_unsigned_longb(lres, current_val, &lpos, bits_per_value);
-                lup++;
-            }
-        } else {
-            for(lcount=hcount; lcount < maxv ; lcount++)
-            {
-                current_val = (((((val[i++]*d) * scals[lup])-reference_value)*s)+0.5);
-                if(current_val < 0)
-                    grib_context_log(a->context,GRIB_LOG_ERROR,
-                            "COMPLEX_PACKING : negative coput before packing (%g)", current_val);
-                grib_encode_unsigned_long(lres, current_val, &lpos, bits_per_value);
-
-                current_val = (((((val[i++]*d) * scals[lup])-reference_value)*s)+0.5);
-                if(current_val < 0)
-                    grib_context_log(a->context,GRIB_LOG_ERROR,
-                            "COMPLEX_PACKING : negative coput before packing (%g)", current_val);
-                grib_encode_unsigned_long(lres, current_val, &lpos, bits_per_value);
-                lup++;
-            }
-        }
-#endif
-
-        maxv--;
-        hcount=0;
-        mmax++;
-    }
-
-    if(((hpos/8) != hsize) &&((lpos/8) != lsize))
-    {
-        grib_context_log(a->context,GRIB_LOG_ERROR,
-                "COMPLEX_PACKING : Mismatch in packing between high resolution and low resolution part");
-        grib_context_free(a->context,buf);
-        grib_context_free(a->context,scals);
-        return GRIB_INTERNAL_ERROR;
-    }
-
-    buflen = ((hpos + lpos)/8);
-
-    if((ret = grib_set_double_internal(gh,self->reference_value, reference_value)) != GRIB_SUCCESS)
-        return ret;
-    {
-        /* Make sure we can decode it again */
-        double ref = 1e-100;
-        grib_get_double_internal(gh,self->reference_value,&ref);
-        Assert(ref == reference_value);
-    }
-
-    if((ret = grib_set_long_internal(gh,self->binary_scale_factor, binary_scale_factor)) != GRIB_SUCCESS)
-        return ret;
-
-    grib_buffer_replace(a, buf, buflen,1,1);
-    grib_context_free(a->context,buf);
-    grib_context_free(a->context,scals);
-
-    return ret;
-}
-
-static int pack_double_optimised(grib_accessor* a, const double* val, size_t *len)
-{
-    grib_accessor_data_complex_packing* self =  (grib_accessor_data_complex_packing*)a;
-    grib_handle* gh = grib_handle_of_accessor(a);
-
-    size_t i = 0;
-    int ret = GRIB_SUCCESS;
-    long   hcount = 0;
-    long   lcount = 0;
-    long   hpos = 0;
-    long   lup = 0;
-    long   mmax = 0;
-    long   n_vals = 0;
-    double *scals  = NULL;
-
-    double s = 0;
-    double d = 0;
-
-    unsigned char* buf    = NULL;
-
-    size_t         buflen = 0;
-    size_t         hsize = 0;
-    size_t         lsize = 0;
-
-    unsigned char* hres = NULL;
-    unsigned char* lres = NULL;
-
-    long   lpos = 0;
-    long   maxv = 0;
-
-    long   offsetdata           = 0;
-    long   bits_per_value          = 0;
-    double reference_value      = 0;
-    long   binary_scale_factor         = 0;
-    long   decimal_scale_factor = 0;
-    long   optimize_scaling_factor = 0;
-    long   laplacianOperatorIsSet = 0;
-
-    double laplacianOperator = 0;
-    long   sub_j= 0;
-    long   sub_k= 0;
-    long   sub_m= 0;
-    long   pen_j= 0;
-    long   pen_k= 0;
-    long   pen_m= 0;
-    long   GRIBEX_sh_bug_present =0;
-    long   ieee_floats =0;
-    double min = 0;
-    double max = 0;
-    double current_val = 0;
-    short mixmax_unset = 0;
-    int bytes;
-
-    encode_float_proc encode_float = NULL;
-
-    if (*len ==0) return GRIB_NO_VALUES;
-
-    if((ret = grib_get_long_internal(gh,self->offsetdata,&offsetdata)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_long_internal(gh,self->decimal_scale_factor,&decimal_scale_factor)) != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_long_internal(gh,self->optimize_scaling_factor,&optimize_scaling_factor)) != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_long_internal(gh,self->GRIBEX_sh_bug_present,&GRIBEX_sh_bug_present)) != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_long_internal(gh,self->ieee_floats,&ieee_floats)) != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_long_internal(gh,self->laplacianOperatorIsSet,&laplacianOperatorIsSet)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_double_internal(gh,self->laplacianOperator,&laplacianOperator)) != GRIB_SUCCESS)
-        return ret;
-
-    if((ret = grib_get_long_internal(gh,self->sub_j,&sub_j)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->sub_k,&sub_k)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->sub_m,&sub_m)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->pen_j,&pen_j)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->pen_k,&pen_k)) != GRIB_SUCCESS)
-        return ret;
-    if((ret = grib_get_long_internal(gh,self->pen_m,&pen_m)) != GRIB_SUCCESS)
-        return ret;
-
-    self->dirty=1;
-
-    switch (ieee_floats) {
-    case 0:
-        encode_float =grib_ibm_to_long;
-        bytes=4;
-        break;
-    case 1:
-        encode_float =grib_ieee_to_long;
-        bytes=4;
-        break;
-    case 2:
-        encode_float =grib_ieee64_to_long;
-        bytes=8;
-        break;
-    default:
-        return GRIB_NOT_IMPLEMENTED;
-    }
-
-    Assert (sub_j == sub_k); Assert( sub_j == sub_m);
-    Assert (pen_j == pen_k); Assert( pen_j == pen_m);
-
-    n_vals = (pen_j+1)*(pen_j+2);
-
-    if(*len != n_vals){
-        grib_context_log(a->context,GRIB_LOG_ERROR,"COMPLEX_PACKING : wrong number of values, expected %d - got %d",n_vals,*len);
-        return GRIB_INTERNAL_ERROR;
-    }
-
-    if (pen_j == sub_j) {
-        double* values;
-        d = grib_power(decimal_scale_factor,10) ;
-        if (d) {
-            values=(double*)grib_context_malloc_clear(a->context,sizeof(double)*n_vals);
-            for (i=0;i<n_vals;i++) values[i]=val[i]*d;
-        } else {
-            values=(double*)val;
-        }
-        buflen=n_vals*bytes;
-        buf = (unsigned char*)grib_context_malloc_clear(a->context,buflen);
-        grib_ieee_encode_array(a->context,values,n_vals,bytes,buf);
-        if (d) grib_context_free(a->context,values);
-        grib_buffer_replace(a, buf, buflen,1,1);
-        grib_context_free(a->context,buf);
-        return 0;
-    }
-
-    if(!laplacianOperatorIsSet) {
-        laplacianOperator = calculate_pfactor(a->context,val,pen_j,sub_j);
-        if((ret = grib_set_double_internal(gh,self->laplacianOperator,laplacianOperator))
-                != GRIB_SUCCESS) return ret;
-        grib_get_double_internal(gh,self->laplacianOperator,&laplacianOperator);
-    }
-
-    hsize = 4*(sub_k+1)*(sub_k+2);
-    lsize = ((n_vals - ((sub_k+1)*(sub_k+2)))*bits_per_value)/8;
-
-    buflen = hsize+lsize;
-
-    buf  = (unsigned char*)grib_context_malloc(a->context,buflen);
-    hres = buf;
-    lres = buf+hsize;
-
-    maxv = pen_j+1;
-
-    lpos = 0;
-    hpos = 0;
-
-    scals   = (double*) grib_context_malloc(a->context,maxv*sizeof(double));
-    Assert(scals);
-
-    scals[0] =0;
-    for(i=1;i<maxv;i++)
-        scals[i] = ((double)pow(i*(i+1),laplacianOperator));
-
-    i=0;
-
-    mmax = 0;
-    maxv = pen_j+1;
-    i=0;
-    lcount=0;
-    hcount=0;
-    sub_k = sub_j;
-
-    while(maxv>0)
-    {
-        lup=mmax;
-
-        if(sub_k>=0)
-        {
-            i   += 2*(sub_k+1);
-            lup +=    sub_k+1 ;
-            hcount += sub_k+1 ;
-            sub_k--;
-        }
-
-        for(lcount=hcount; lcount < maxv ; lcount++)
-        {
-            current_val = ((val[i++]) * scals[lup]);
-            if(mixmax_unset == 0){
-                max = current_val;
-                min = current_val;
-                mixmax_unset = 1;
-            }
-
-            if(current_val > max) max = current_val;
-            if(current_val < min) min = current_val;
-
-            current_val = ((val[i++]) * scals[lup]);
-            if(current_val > max) max = current_val;
-            if(current_val < min) min = current_val;
-
-            lup++;
-        }
-        maxv--;
-        hcount=0;
-        mmax++;
-    }
-
-    if (optimize_scaling_factor)
-    {
-        ret = grib_optimize_decimal_factor (a, self->reference_value,
-                max, min, bits_per_value, 0, 1,
-                &decimal_scale_factor,
-                &binary_scale_factor,
-                &reference_value);
-        if (ret !=GRIB_SUCCESS) {
-            grib_context_log(gh->context,GRIB_LOG_ERROR,
-                    "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-            return GRIB_INTERNAL_ERROR;
-        }
-    }
-    else
-    {
-        if (grib_get_nearest_smaller_value(gh,self->reference_value,min,&reference_value)
-                !=GRIB_SUCCESS) {
-            grib_context_log(gh->context,GRIB_LOG_ERROR,
-                    "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-            return GRIB_INTERNAL_ERROR;
-        }
-        binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret);
-
-        if (ret==GRIB_UNDERFLOW) {
-            d=0;
-            binary_scale_factor = 0;
-            reference_value=0;
-        } else {
-            if (ret!=GRIB_SUCCESS) {
-                grib_context_log(a->context,GRIB_LOG_ERROR,"COMPLEX_PACKING : Cannot compute binary_scale_factor");
-                return ret;
-            }
-        }
-    }
-    d = grib_power(+decimal_scale_factor,10);
-    s = grib_power(- binary_scale_factor, 2);
+        if (ret==GRIB_UNDERFLOW) {
+            d=0;
+            binary_scale_factor = 0;
+            reference_value=0;
+        } else {
+            if (ret!=GRIB_SUCCESS) {
+                grib_context_log(a->context,GRIB_LOG_ERROR,"COMPLEX_PACKING : Cannot compute binary_scale_factor");
+                return ret;
+            }
+        }
+    }
+    s = grib_power(- binary_scale_factor, 2);
 
     i=0;
 
@@ -1473,38 +904,3 @@ static int pack_double_optimised(grib_accessor* a, const double* val, size_t *le
 
     return ret;
 }
-
-/* The driver unpack and pack routines. See ECC-261 */
-static int unpack_double(grib_accessor* a, double* val, size_t *len)
-{
-    grib_accessor_data_complex_packing* self =  (grib_accessor_data_complex_packing*)a;
-    grib_handle* gh = grib_handle_of_accessor(a);
-    int ret = GRIB_SUCCESS;
-    long optimize_scaling_factor = 0;
-
-    if ((ret = grib_get_long_internal(gh, self->optimize_scaling_factor, &optimize_scaling_factor)) != GRIB_SUCCESS)
-        return ret;
-
-    if (optimize_scaling_factor) {
-        return unpack_double_optimised(a, val, len);
-    } else {
-        return unpack_double_standard(a, val, len);
-    }
-}
-
-static int pack_double(grib_accessor* a, const double* val, size_t *len)
-{
-    grib_accessor_data_complex_packing* self =  (grib_accessor_data_complex_packing*)a;
-    grib_handle* gh = grib_handle_of_accessor(a);
-    int ret = GRIB_SUCCESS;
-    long optimize_scaling_factor = 0;
-
-    if ((ret = grib_get_long_internal(gh, self->optimize_scaling_factor, &optimize_scaling_factor)) != GRIB_SUCCESS)
-        return ret;
-
-    if (optimize_scaling_factor) {
-        return pack_double_optimised(a, val, len);
-    } else {
-        return pack_double_standard(a, val, len);
-    }
-}
diff --git a/src/grib_accessor_class_data_g1second_order_general_extended_packing.c b/src/grib_accessor_class_data_g1second_order_general_extended_packing.c
index feb2e1a..5f81e1e 100644
--- a/src/grib_accessor_class_data_g1second_order_general_extended_packing.c
+++ b/src/grib_accessor_class_data_g1second_order_general_extended_packing.c
@@ -610,7 +610,9 @@ static void grib_split_long_groups(grib_handle* hand, grib_context* c,long* numb
     grib_context_free(c,localFirstOrderValues);
 }
 
-static int pack_double_standard(grib_accessor* a, const double* val, size_t *len)
+#if 0
+/* Old implementation. Now superseded. See ECC-441 and ECC-261 */
+static int pack_double_old(grib_accessor* a, const double* val, size_t *len)
 {
     grib_accessor_data_g1second_order_general_extended_packing* self =  (grib_accessor_data_g1second_order_general_extended_packing*)a;
     int ret=0;
@@ -1213,8 +1215,9 @@ static int pack_double_standard(grib_accessor* a, const double* val, size_t *len
 
     return ret;
 }
+#endif
 
-static int pack_double_optimised(grib_accessor* a, const double* val, size_t *len)
+static int pack_double(grib_accessor* a, const double* val, size_t *len)
 {
     grib_accessor_data_g1second_order_general_extended_packing* self =  (grib_accessor_data_g1second_order_general_extended_packing*)a;
     int ret=0;
@@ -1258,8 +1261,6 @@ static int pack_double_optimised(grib_accessor* a, const double* val, size_t *le
     long decimal_scale_factor;
     grib_handle* handle = grib_handle_of_accessor(a);
     long optimize_scaling_factor = 0;
-    grib_context* c=handle->context;
-    int compat_gribex = c->gribex_mode_on && self->edition==1;
 
     self->dirty=1;
 
@@ -1271,20 +1272,31 @@ static int pack_double_optimised(grib_accessor* a, const double* val, size_t *le
         if (val[i] < min ) min = val[i];
     }
 
-    if((ret=grib_get_long_internal(handle,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS)
+    if ((ret=grib_get_long_internal(handle,self->bits_per_value,&bits_per_value)) != GRIB_SUCCESS)
         return ret;
 
-    if((ret = grib_get_long_internal(handle,self->optimize_scaling_factor, &optimize_scaling_factor))
+    if ((ret = grib_get_long_internal(handle,self->optimize_scaling_factor, &optimize_scaling_factor))
             != GRIB_SUCCESS)
         return ret;
 
     if (optimize_scaling_factor)
     {
+        const int compat_gribex = handle->context->gribex_mode_on && self->edition==1;
+        const int compat_32bit = 1;
         if((ret=grib_optimize_decimal_factor (a, self->reference_value,
                 max, min, bits_per_value,
-                compat_gribex, 1,
+                compat_gribex, compat_32bit,
                 &decimal_scale_factor, &binary_scale_factor, &reference_value)) != GRIB_SUCCESS)
             return ret;
+
+        decimal = grib_power(decimal_scale_factor,10);
+        divisor = grib_power(-binary_scale_factor,2);
+        min = min * decimal;
+        max = max * decimal;
+
+        if((ret = grib_set_long_internal(handle,self->decimal_scale_factor, decimal_scale_factor)) !=
+                GRIB_SUCCESS)
+            return ret;
     }
     else
     {
@@ -1292,33 +1304,26 @@ static int pack_double_optimised(grib_accessor* a, const double* val, size_t *le
         if (min==max) {
             grib_set_long_internal(handle,self->decimal_scale_factor, 0);
         }
+
         if((ret = grib_get_long_internal(handle,self->decimal_scale_factor, &decimal_scale_factor))
                 != GRIB_SUCCESS)
             return ret;
 
+        decimal = grib_power(decimal_scale_factor,10);
+        min = min * decimal;
+        max = max * decimal;
+
         if (grib_get_nearest_smaller_value(handle,self->reference_value,min,&reference_value)
                 !=GRIB_SUCCESS) {
-            grib_context_log(handle->context,GRIB_LOG_ERROR,
+            grib_context_log(a->context,GRIB_LOG_ERROR,
                     "unable to find nearest_smaller_value of %g for %s",min,self->reference_value);
-            exit(GRIB_INTERNAL_ERROR);
+            return GRIB_INTERNAL_ERROR;
         }
         binary_scale_factor = grib_get_binary_scale_fact(max,reference_value,bits_per_value,&ret);
 
-        if((ret = grib_set_long_internal(handle,self->binary_scale_factor, binary_scale_factor)) !=
-                GRIB_SUCCESS)
-            return ret;
+        divisor = grib_power(-binary_scale_factor,2);
     }
 
-    decimal = grib_power(decimal_scale_factor,10);
-    divisor = grib_power(-binary_scale_factor,2);
-
-    min = min * decimal;
-    max = max * decimal;
-
-    if((ret = grib_set_long_internal(handle,self->decimal_scale_factor, decimal_scale_factor)) !=
-            GRIB_SUCCESS)
-        return ret;
-
     if((ret = grib_set_long_internal(handle,self->binary_scale_factor, binary_scale_factor)) !=
             GRIB_SUCCESS)
         return ret;
@@ -1842,24 +1847,6 @@ static int pack_double_optimised(grib_accessor* a, const double* val, size_t *le
     return ret;
 }
 
-/* The driver pack routine.  See ECC-261 */
-static int pack_double(grib_accessor* a, const double* val, size_t *len)
-{
-    grib_accessor_data_g1second_order_general_extended_packing* self =  (grib_accessor_data_g1second_order_general_extended_packing*)a;
-    int ret = GRIB_SUCCESS;
-    grib_handle* handle = grib_handle_of_accessor(a);
-    long optimize_scaling_factor = 0;
-
-    if((ret = grib_get_long_internal(handle,self->optimize_scaling_factor, &optimize_scaling_factor)) != GRIB_SUCCESS)
-        return ret;
-
-    if (optimize_scaling_factor) {
-        return pack_double_optimised(a,val,len);
-    } else {
-        return pack_double_standard(a,val,len);
-    }
-}
-
 static void destroy(grib_context* context,grib_accessor* a)
 {
     grib_accessor_data_g1second_order_general_extended_packing *self =(grib_accessor_data_g1second_order_general_extended_packing*)a;
diff --git a/src/grib_accessor_class_data_g2simple_packing_with_preprocessing.c b/src/grib_accessor_class_data_g2simple_packing_with_preprocessing.c
index ea7640c..cc25053 100644
--- a/src/grib_accessor_class_data_g2simple_packing_with_preprocessing.c
+++ b/src/grib_accessor_class_data_g2simple_packing_with_preprocessing.c
@@ -71,6 +71,7 @@ typedef struct grib_accessor_data_g2simple_packing_with_preprocessing {
 	const char*  reference_value;
 	const char*  binary_scale_factor;
 	const char*  decimal_scale_factor;
+	const char*  optimize_scaling_factor;
 /* Members defined in data_g2simple_packing */
 /* Members defined in data_g2simple_packing_with_preprocessing */
 	const char*  pre_processing;
diff --git a/src/grib_accessor_class_g1step_range.c b/src/grib_accessor_class_g1step_range.c
index f512ef6..87be7ae 100644
--- a/src/grib_accessor_class_g1step_range.c
+++ b/src/grib_accessor_class_g1step_range.c
@@ -614,7 +614,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t *len)
 {
     char buff[100];
     size_t bufflen=100;
-    char sval[100];
+    char sval[100] = {0};
     char* p=sval;
     size_t svallen=100;
     grib_accessor_g1step_range* self = (grib_accessor_g1step_range*)a;
diff --git a/src/grib_accessor_class_headers_only.c b/src/grib_accessor_class_headers_only.c
index 687ba14..8914c00 100644
--- a/src/grib_accessor_class_headers_only.c
+++ b/src/grib_accessor_class_headers_only.c
@@ -128,19 +128,19 @@ static void init_class(grib_accessor_class* c)
 
 static void init(grib_accessor* a,const long l, grib_arguments* c)
 {
-  a->flags  |= GRIB_ACCESSOR_FLAG_READ_ONLY;
-  a->flags  |= GRIB_ACCESSOR_FLAG_HIDDEN;
-  a->length=0;
+    a->flags  |= GRIB_ACCESSOR_FLAG_READ_ONLY;
+    a->flags  |= GRIB_ACCESSOR_FLAG_HIDDEN;
+    a->length=0;
 }
 
 static int  unpack_long(grib_accessor* a, long* val, size_t *len)
 {
-  *val = grib_handle_of_accessor(a)->partial;
-  *len =1;
-  return 0;
+    *val = grib_handle_of_accessor(a)->partial;
+    *len =1;
+    return 0;
 }
 
-static int  get_native_type(grib_accessor* a){
-  return GRIB_TYPE_LONG;
+static int  get_native_type(grib_accessor* a)
+{
+    return GRIB_TYPE_LONG;
 }
-
diff --git a/src/grib_accessor_class_local_definition.c b/src/grib_accessor_class_local_definition.c
index 4698586..2b76f45 100644
--- a/src/grib_accessor_class_local_definition.c
+++ b/src/grib_accessor_class_local_definition.c
@@ -269,6 +269,7 @@ static int pack_long(grib_accessor* a, const long* val, size_t *len)
         }
         break;
 
+    case 5: /* Forecast probability data */
     case 7:  /* Sensitivity data */
     case 9:  /* Singular vectors and ensemble perturbations */
     case 11: /* Supplementary data used by the analysis */
diff --git a/src/grib_accessor_class_validity_date.c b/src/grib_accessor_class_validity_date.c
index 3bcb3c5..a47f05e 100644
--- a/src/grib_accessor_class_validity_date.c
+++ b/src/grib_accessor_class_validity_date.c
@@ -9,9 +9,8 @@
  */
 
 #include "grib_api_internal.h"
-#include <assert.h>
 
-/* 
+/*
    This is used by make_class.pl
 
    START_CLASS_DEF
@@ -198,7 +197,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper)
 }
 
 static int unpack_long(grib_accessor* a, long* val, size_t *len)
-{   
+{
     grib_accessor_validity_date* self = (grib_accessor_validity_date*)a;
     int ret=0;
     long date = 0;
diff --git a/src/grib_accessor_class_validity_time.c b/src/grib_accessor_class_validity_time.c
index ae36ccc..23f2d44 100644
--- a/src/grib_accessor_class_validity_time.c
+++ b/src/grib_accessor_class_validity_time.c
@@ -9,9 +9,8 @@
  */
 
 #include "grib_api_internal.h"
-#include <assert.h>
 
-/* 
+/*
    This is used by make_class.pl
 
    START_CLASS_DEF
@@ -195,7 +194,7 @@ static void dump(grib_accessor* a, grib_dumper* dumper)
 }
 
 static int unpack_long(grib_accessor* a, long* val, size_t *len)
-{   
+{
     grib_accessor_validity_time* self = (grib_accessor_validity_time*)a;
     int ret=0;
     long date = 0;
diff --git a/src/grib_api.h b/src/grib_api.h
index eedbdb4..c3c810a 100644
--- a/src/grib_api.h
+++ b/src/grib_api.h
@@ -1536,6 +1536,9 @@ grib_handle *grib_util_set_spec2(grib_handle *h,
 /* --------------------------------------- */
 
 
+typedef void (*codes_assertion_failed_proc)(const char* message);
+void codes_set_codes_assertion_failed_proc(codes_assertion_failed_proc proc);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/grib_api_internal.h b/src/grib_api_internal.h
index 4003172..dc00cb0 100644
--- a/src/grib_api_internal.h
+++ b/src/grib_api_internal.h
@@ -22,7 +22,7 @@ extern "C" {
 #endif
 
 /* cmake config header */
-#ifdef HAVE_ECCODES_CONFIG_H 
+#ifdef HAVE_ECCODES_CONFIG_H
 #include "eccodes_config.h"
 #endif
 
@@ -125,11 +125,11 @@ extern "C" {
 #if GRIB_PTHREADS
  #include <pthread.h>
  #define GRIB_MUTEX_INIT_ONCE(a,b) pthread_once(a,b);
- #define GRIB_MUTEX_LOCK(a) pthread_mutex_lock(a); 
+ #define GRIB_MUTEX_LOCK(a) pthread_mutex_lock(a);
  #define GRIB_MUTEX_UNLOCK(a) pthread_mutex_unlock(a);
  /*
  #define GRIB_MUTEX_LOCK(a) {pthread_mutex_lock(a); printf("MUTEX LOCK %p %s line %d\n",(void*)a,__FILE__,__LINE__);}
- #define GRIB_MUTEX_UNLOCK(a) {pthread_mutex_unlock(a);printf("MUTEX UNLOCK %p %s line %d\n",(void*)a,__FILE__,__LINE__);} 
+ #define GRIB_MUTEX_UNLOCK(a) {pthread_mutex_unlock(a);printf("MUTEX UNLOCK %p %s line %d\n",(void*)a,__FILE__,__LINE__);}
  */
 #elif GRIB_OMP_THREADS
  #include <omp.h>
@@ -162,14 +162,7 @@ extern "C" {
 #define ftello ftell
 #endif
 
-#define Assert(a) {if(!(a)) grib_fail(#a,__FILE__,__LINE__,0);}
-#define AssertSilent(a) {if(!(a)) grib_fail(#a,__FILE__,__LINE__,1);}
-
-#ifndef NDEBUG
- #define DebugAssert(a) Assert(a)
-#else
- #define DebugAssert(a)
-#endif
+#define Assert(a) do { if(!(a)) codes_assertion_failed(#a, __FILE__, __LINE__); } while(0)
 
 #ifdef __gnu_hurd__
  #define COMPILE_TIME_ASSERT(condition) \
@@ -182,12 +175,14 @@ extern "C" {
       } while (0)
 #endif
 
-#ifndef NDEBUG
+#ifdef DEBUG
+ #define DebugAssert(a) Assert(a)
  #define DebugAssertAccess(array, index, size) \
    do { \
     if (!((index) >= 0 && (index) < (size)) ) {printf("ARRAY ACCESS ERROR: array=%s idx=%ld size=%ld @ %s +%d \n", #array, index, size, __FILE__, __LINE__); abort();} \
    } while(0)
 #else
+ #define DebugAssert(a)
  #define DebugAssertAccess(array, index, size)
 #endif
 
@@ -504,9 +499,9 @@ struct grib_buffer
 typedef struct grib_virtual_value grib_virtual_value;
 
 struct grib_virtual_value {
-  long     lval;       
-  double   dval;  
-  char*    cval; 
+  long     lval;
+  double   dval;
+  char*    cval;
   int      missing;
   int      length;
   int      type;
@@ -814,6 +809,9 @@ struct codes_condition {
   double rightDouble;
 };
 
+
+void codes_assertion_failed(const char* message, const char* file, int line);
+
 #define MAX_SET_VALUES      10
 #define MAX_ACCESSOR_CACHE  100
 
@@ -1037,7 +1035,6 @@ struct grib_context
     grib_trie*                      def_files;
     grib_string_list*               blacklist;
     int                             ieee_packing;
-    int                             unpack;
     int                             bufrdc_mode;
     int                             bufr_set_to_missing_if_out_of_range;
     FILE*                           log_stream;
diff --git a/src/grib_api_prototypes.h b/src/grib_api_prototypes.h
index be3e1e9..64548e0 100644
--- a/src/grib_api_prototypes.h
+++ b/src/grib_api_prototypes.h
@@ -1271,7 +1271,6 @@ int codes_copy_key(grib_handle *h1, grib_handle *h2, const char *key, int type);
 /* grib_errors.c */
 const char *grib_get_error_message(int code);
 void grib_check(const char *call, const char *file, int line, int e, const char *msg);
-void grib_fail(const char *expr, const char *file, int line, int silent);
 
 /* grib_expression_class_binop.c */
 grib_expression *new_binop_expression(grib_context *c, grib_binop_long_proc long_func, grib_binop_double_proc double_func, grib_expression *left, grib_expression *right);
diff --git a/src/grib_api_version.c b/src/grib_api_version.c
index 26e4185..3e78440 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 "58c63967ad2e7f6da14d0565a2d0f9dac5f07bea"; }
+const char * grib_get_git_sha1() { return "97b4056c8d2d31d2c5fd2eae1fd58359830b9188"; }
diff --git a/src/grib_context.c b/src/grib_context.c
index 4202933..7f6f544 100644
--- a/src/grib_context.c
+++ b/src/grib_context.c
@@ -343,7 +343,6 @@ static grib_context default_grib_context = {
         0,                            /* def_files                  */
         0,                            /* blacklist                  */
         0,                            /* ieee_packing               */
-        0,                            /* unpack                     */
         0,                            /* bufrdc_mode                */
         0,                            /* bufr_set_to_missing_if_out_of_range */
         0,                            /* log_stream                 */
@@ -381,7 +380,6 @@ grib_context* grib_context_get_default()
         const char* keep_matrix = NULL;
         const char* bufrdc_mode = NULL;
         const char* bufr_set_to_missing_if_out_of_range = NULL;
-        const char* nounpack = NULL;
 
         write_on_fail = codes_getenv("ECCODES_GRIB_WRITE_ON_FAIL");
         bufrdc_mode = codes_getenv("ECCODES_BUFRDC_MODE_ON");
@@ -396,7 +394,6 @@ grib_context* grib_context_get_default()
         no_big_group_split = codes_getenv("ECCODES_GRIB_NO_BIG_GROUP_SPLIT");
         no_spd = codes_getenv("ECCODES_GRIB_NO_SPD");
         keep_matrix = codes_getenv("ECCODES_GRIB_KEEP_MATRIX");
-        nounpack = codes_getenv("ECCODES_NO_UNPACK");
 
         /* On UNIX, when we read from a file we get exactly what is in the file on disk.
          * But on Windows a file can be opened in binary or text mode. In binary mode the system behaves exactly as in UNIX.
@@ -410,7 +407,6 @@ grib_context* grib_context_get_default()
         default_grib_context.no_big_group_split = no_big_group_split ? atoi(no_big_group_split) : 0;
         default_grib_context.no_spd = no_spd ? atoi(no_spd) : 0;
         default_grib_context.keep_matrix = keep_matrix ? atoi(keep_matrix) : 1;
-        default_grib_context.unpack = nounpack ? 0 : 1;
         default_grib_context.write_on_fail  = write_on_fail ? atoi(write_on_fail) : 0;
         default_grib_context.no_abort  = no_abort ? atoi(no_abort) : 0;
         default_grib_context.debug  = debug ? atoi(debug) : 0;
@@ -982,3 +978,24 @@ void grib_context_increment_handle_total_count(grib_context *c)
     GRIB_MUTEX_UNLOCK(&mutex_c);
 }
 
+static codes_assertion_failed_proc assertion = NULL;
+
+void codes_set_codes_assertion_failed_proc(codes_assertion_failed_proc proc)
+{
+    assertion = proc;
+}
+
+void codes_assertion_failed(const char* message, const char* file, int line)
+{
+    /* Default behaviour is to abort
+     * unless user has supplied his own assertion routine */
+    if (assertion == NULL) {
+        fprintf(stderr, "ecCodes assertion failed: `%s' in %s:%d\n", message, file, line);
+        abort();
+    }
+    else {
+        char buffer[10240];
+        sprintf(buffer, "ecCodes assertion failed: `%s' in %s:%d", message, file, line);
+        assertion(buffer);
+    }
+}
diff --git a/src/grib_errors.c b/src/grib_errors.c
index 41010c4..1719797 100644
--- a/src/grib_errors.c
+++ b/src/grib_errors.c
@@ -113,11 +113,3 @@ void grib_check(const char* call,const char*  file,int line,int e,const char* ms
         exit(e);
     }
 }
-
-
-void grib_fail(const char* expr,const char* file,int line,int silent) {
-	 if (!silent)
-   fprintf(stderr,"%s at line %d: assertion failure Assert(%s)\n",file,line,expr);
-   abort();
-}
-
diff --git a/src/grib_errors.c.in b/src/grib_errors.c.in
index 3e2f963..7def1bb 100644
--- a/src/grib_errors.c.in
+++ b/src/grib_errors.c.in
@@ -35,10 +35,3 @@ void grib_check(const char* call,const char*  file,int line,int e,const char* ms
     }
 }
 
-
-void grib_fail(const char* expr,const char* file,int line,int silent) {
-	 if (!silent)
-   fprintf(stderr,"%s at line %d: assertion failure Assert(%s)\n",file,line,expr);
-   abort();
-}
-
diff --git a/src/grib_gaussian_reduced.c b/src/grib_gaussian_reduced.c
index 12b978c..d46c32a 100644
--- a/src/grib_gaussian_reduced.c
+++ b/src/grib_gaussian_reduced.c
@@ -8,7 +8,6 @@
  * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
  */
 #include "grib_api_internal.h"
-#include <assert.h>
 
 /*
  * C Implementation: gaussian_reduced
@@ -87,7 +86,7 @@ void grib_get_reduced_row(long pl, double lon_first, double lon_last, long* npoi
       }
     }
 
-    assert(*npoints==irange);
+    Assert(*npoints==irange);
 #if EFDEBUG
 	printf("--  pl=%ld npoints=%ld range=%.10e ilon_first=%ld ilon_last=%ld irange=%ld\n",
 		   pl,*npoints,range,*ilon_first,*ilon_last,irange);
diff --git a/src/grib_handle.c b/src/grib_handle.c
index bb1223c..a42543e 100644
--- a/src/grib_handle.c
+++ b/src/grib_handle.c
@@ -356,6 +356,24 @@ grib_handle* codes_gts_handle_new_from_file(grib_context* c, FILE* f, int* error
     return gts_new_from_file(c, f, error);
 }
 
+static int determine_product_kind(grib_handle* h, ProductKind* prod_kind)
+{
+    int err = 0;
+    size_t len = 0;
+    char prod_kind_str[256]={0,};
+    err = grib_get_length(h, "kindOfProduct", &len);
+    if (!err) {
+        err = grib_get_string(h, "kindOfProduct", prod_kind_str, &len);
+        if      (strcmp(prod_kind_str, "GRIB")==0)  *prod_kind = PRODUCT_GRIB;
+        else if (strcmp(prod_kind_str, "BUFR")==0)  *prod_kind = PRODUCT_BUFR;
+        else if (strcmp(prod_kind_str, "METAR")==0) *prod_kind = PRODUCT_METAR;
+        else if (strcmp(prod_kind_str, "GTS")==0)   *prod_kind = PRODUCT_GTS;
+        else if (strcmp(prod_kind_str, "TAF")==0)   *prod_kind = PRODUCT_TAF;
+        else *prod_kind = PRODUCT_ANY;
+    }
+    return err;
+}
+
 grib_handle* grib_handle_new_from_message_copy ( grib_context* c, const void* data, size_t size )
 {
     grib_handle *g = NULL;
@@ -411,9 +429,15 @@ grib_handle* grib_handle_new_from_message ( grib_context* c, const void* data, s
 {
     grib_handle  *gl = NULL;
     grib_handle  *h = NULL;
+    ProductKind product_kind = PRODUCT_ANY;
     if ( c == NULL ) c = grib_context_get_default();
     gl = grib_new_handle ( c );
     h=grib_handle_create ( gl,  c, data,  buflen );
+
+    /* See ECC-448 */
+    if (determine_product_kind(h, &product_kind) == GRIB_SUCCESS) {
+        h->product_kind = product_kind;
+    }
     return h;
 }
 
diff --git a/src/grib_io.c b/src/grib_io.c
index ff84970..7994b9f 100644
--- a/src/grib_io.c
+++ b/src/grib_io.c
@@ -617,7 +617,7 @@ static int read_BUFR(reader *r)
 
     edition = tmp[i++];
 
-    /* assert(edition != 1); */
+    /* Assert(edition != 1); */
 
     switch (edition) {
       case 0:
diff --git a/src/grib_iterator_class_space_view.c b/src/grib_iterator_class_space_view.c
index 9e15ed4..218942f 100644
--- a/src/grib_iterator_class_space_view.c
+++ b/src/grib_iterator_class_space_view.c
@@ -292,7 +292,7 @@ static int init(grib_iterator* iter, grib_handle* h, grib_arguments* args)
             
             Sd = height * cos_x * cos_y;
             Sd = Sd * Sd - tmp1*factor_1;
-            if (Sd <= 0.0) {    // outside of view
+            if (Sd <= 0.0) {    /* outside of view */
                 lats[i] = lons[i] = 0; /* TODO: error? */
             }
             else {
diff --git a/src/grib_value.c b/src/grib_value.c
index 07d3837..6753fbe 100644
--- a/src/grib_value.c
+++ b/src/grib_value.c
@@ -796,6 +796,11 @@ static int _grib_set_long_array(grib_handle* h, const char* name, const long* va
     int err =0;
 
     if (!a) return GRIB_NOT_FOUND ;
+
+    if (h->context->debug) {
+        printf("ECCODES DEBUG _grib_set_long_array key=%s %ld values\n",name,(long)length);
+    }
+
     if (name[0]=='/' || name[0]=='#' ) {
         if(check && (a->flags & GRIB_ACCESSOR_FLAG_READ_ONLY))
             return GRIB_READ_ONLY;
diff --git a/src/md5.c b/src/md5.c
index e28ca1d..877a08b 100644
--- a/src/md5.c
+++ b/src/md5.c
@@ -9,10 +9,10 @@
  */
 
 #include "md5.h"
+#include "grib_api_internal.h"
 
 #include <stdio.h>
 #include <string.h>
-#include <assert.h>
 
 /* On CRAY, disable all automatic optimisations for this module */
 #if _CRAYC
@@ -215,7 +215,7 @@ static void grib_md5_flush(grib_md5_state* s)
 
 void grib_md5_init(grib_md5_state* s)
 {
-	assert( sizeof(UnsignedInt64) == 8 );
+	Assert( sizeof(UnsignedInt64) == 8 );
 	memset(s,0,sizeof(grib_md5_state));
 	s->h0 = 0x67452301;
 	s->h1 = 0xefcdab89;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 84c5a23..bb5fc09 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -88,40 +88,40 @@ list( APPEND tests_data_reqd
     grib1to2
     grib2to1
     badgrib
-    ls
+    grib_ls
     grib_filter
-    multi
+    grib_multi
     budg
     gridType
-    octahedral
-    global
-    concept
+    grib_octahedral
+    grib_global
+    grib_concept
     decimalPrecision
-    bitsPerValue
+    grib_bitsPerValue
     get_fail
     missing
-    local
-    step
-    set
-    iterator
+    grib_local
+    grib_step
+    grib_set
+    grib_iterator
     grib_compare
-    level
+    grib_level
     index
-    bitmap
+    grib_bitmap
     list
-    second_order
+    grib_second_order
     multi_from_message
-    change_scanning
-    statistics
+    grib_change_scanning
+    grib_statistics
     tigge
     tigge_conversions
     read_any
-    padding
+    grib_padding
     grib_dump
     grib_dump_debug
     grib_util_set_spec
     local_MeteoFrance
-    neg_fctime
+    grib_neg_fctime
 )
 if( HAVE_FORTRAN AND ENABLE_EXTRA_TESTS )
     list(APPEND tests_data_reqd bufr_dump_encode_fortran)
@@ -197,10 +197,10 @@ ecbuild_add_test( TARGET eccodes_t_grib_to_netcdf
                   TEST_DEPENDS eccodes_download_gribs
 )
 
-ecbuild_add_test( TARGET eccodes_t_jpeg
+ecbuild_add_test( TARGET eccodes_t_grib_jpeg
                   TYPE SCRIPT
                   CONDITION HAVE_JPEG
-                  COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/jpeg.sh
+                  COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_jpeg.sh
                   TEST_DEPENDS eccodes_download_gribs
 )
 
@@ -211,10 +211,10 @@ ecbuild_add_test( TARGET eccodes_t_grib_png
                   TEST_DEPENDS eccodes_download_gribs
 )
 
-ecbuild_add_test( TARGET eccodes_t_ccsds
+ecbuild_add_test( TARGET eccodes_t_grib_ccsds
                   TYPE SCRIPT
                   CONDITION HAVE_AEC
-                  COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ccsds.sh
+                  COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/grib_ccsds.sh
                   TEST_DEPENDS eccodes_download_gribs
 )
 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index fa35167..ef70afc 100755
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -22,45 +22,45 @@ TESTS = definitions.sh \
         unit_tests.sh \
         grib2to1.sh \
         badgrib.sh \
-        ls.sh \
+        grib_ls.sh \
         grib_filter.sh  \
-        multi.sh \
+        grib_multi.sh \
         budg.sh \
         gridType.sh \
-        octahedral.sh \
-        global.sh \
-        concept.sh \
+        grib_octahedral.sh \
+        grib_global.sh \
+        grib_concept.sh \
         decimalPrecision.sh \
-        bitsPerValue.sh \
+        grib_bitsPerValue.sh \
         get_fail.sh \
         missing.sh \
-        local.sh \
-        step.sh \
-        set.sh \
-        iterator.sh \
+        grib_local.sh \
+        grib_step.sh \
+        grib_set.sh \
+        grib_iterator.sh \
         grib_compare.sh \
-        level.sh \
+        grib_level.sh \
         index.sh \
-        bitmap.sh \
+        grib_bitmap.sh \
         list.sh \
-        second_order.sh \
+        grib_second_order.sh \
         multi_from_message.sh \
-        change_scanning.sh \
+        grib_change_scanning.sh \
         julian.sh \
-        statistics.sh \
+        grib_statistics.sh \
         tigge.sh \
         uerra.sh \
         tigge_conversions.sh \
         read_any.sh \
-        padding.sh \
+        grib_padding.sh \
         lamb_az_eq_area.sh \
         grib_to_netcdf.sh \
         grib_dump_debug.sh \
-        jpeg.sh \
-        ccsds.sh \
+        grib_jpeg.sh \
+        grib_ccsds.sh \
         md5.sh \
         grib_util_set_spec.sh \
-        neg_fctime.sh \
+        grib_neg_fctime.sh \
         ecc-197.sh \
         ecc-286.sh \
         ecc-288.sh
@@ -73,7 +73,7 @@ download_data:
 
 noinst_PROGRAMS = packing_check gauss_sub read_any grib_double_cmp packing pack_unpack \
                   multi_from_message julian read_index index gribex_perf\
-                  jpeg_perf ccsds_perf so_perf png_perf bpv_limit laplacian \
+                  jpeg_perf grib_ccsds_perf so_perf png_perf bpv_limit laplacian \
                   unit_tests grib_util_set_spec
 
 multi_from_message_SOURCES = multi_from_message.c
@@ -90,7 +90,7 @@ read_index_SOURCES = read_index.c
 jpeg_perf_SOURCES = jpeg_perf.c
 so_perf_SOURCES = so_perf.c
 png_perf_SOURCES = png_perf.c
-ccsds_perf_SOURCES  = ccsds_perf.c
+grib_ccsds_perf_SOURCES  = grib_ccsds_perf.c
 gribex_perf_SOURCES = gribex_perf.c
 gauss_sub_SOURCES = gauss_sub.c
 grib_util_set_spec_SOURCES = grib_util_set_spec.c
diff --git a/tests/bufr_filter.sh b/tests/bufr_filter.sh
index 85c843a..503b491 100755
--- a/tests/bufr_filter.sh
+++ b/tests/bufr_filter.sh
@@ -1400,7 +1400,6 @@ rm -f ${f}.log ${f}.log.ref ${f}.out $fLog $fRules
 cat > $fRules <<EOF
 set simpleThinningSkip=36;
 set doSimpleThinning=1;
-set pack=1;
 write;
 assert(numberOfSubsets == 5);
 EOF
diff --git a/tests/decimalPrecision.sh b/tests/decimalPrecision.sh
index b018f57..8194770 100755
--- a/tests/decimalPrecision.sh
+++ b/tests/decimalPrecision.sh
@@ -16,7 +16,6 @@ files="regular_latlon_surface.grib2 \
        regular_latlon_surface.grib1"
 
 for file in $files; do
-
   infile=${data_dir}/$file
   outfile1=${infile}_decimalPrecision_1
   outfile2=${infile}_decimalPrecision_2
@@ -26,5 +25,15 @@ for file in $files; do
   ${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
+  rm -f $outfile1 $outfile2
 done
+
+# ECC-458: spectral_complex packing
+temp=temp.grib_decimalPrecision.grib
+infile=${data_dir}/spectral_complex.grib1
+# Catch errors re negative values
+export ECCODES_FAIL_IF_LOG_MESSAGE=1
+${tools_dir}/grib_set -r -s decimalScaleFactor=0 $infile $temp
+${tools_dir}/grib_set -r -s decimalScaleFactor=1 $infile $temp
+
+rm -f $temp
diff --git a/tests/grib1to2.sh b/tests/grib1to2.sh
index c979a8e..6e7e591 100755
--- a/tests/grib1to2.sh
+++ b/tests/grib1to2.sh
@@ -50,6 +50,14 @@ do
 
 done
 
+# ECC-457 ECMWF total precipitation
+input=${data_dir}/tp_ecmwf.grib
+output=temp.grib1to2.grib
+${tools_dir}/grib_set -s edition=2 $input $output
+res=`${tools_dir}/grib_get -w count=1 -p edition,paramId,units $output`
+[ "$res" = "2 228228 kg m**-2" ]
+rm -f $output
+
 #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
@@ -60,4 +68,3 @@ done
 #${tools_dir}/grib_compare -Pe ${data_dir}/test.grib1 ${data_dir}/test.grib2
 
 #rm -f ${data_dir}/test.grib2
-
diff --git a/tests/bitmap.sh b/tests/grib_bitmap.sh
similarity index 100%
rename from tests/bitmap.sh
rename to tests/grib_bitmap.sh
diff --git a/tests/bitsPerValue.sh b/tests/grib_bitsPerValue.sh
similarity index 100%
rename from tests/bitsPerValue.sh
rename to tests/grib_bitsPerValue.sh
diff --git a/tests/ccsds.sh b/tests/grib_ccsds.sh
similarity index 100%
rename from tests/ccsds.sh
rename to tests/grib_ccsds.sh
diff --git a/tests/ccsds_perf.c b/tests/grib_ccsds_perf.c
similarity index 99%
rename from tests/ccsds_perf.c
rename to tests/grib_ccsds_perf.c
index 34cdbfd..171a031 100644
--- a/tests/ccsds_perf.c
+++ b/tests/grib_ccsds_perf.c
@@ -48,7 +48,7 @@ int main(int argc, char* argv[]) {
   FILE* fout=NULL;
   char* finname;
   char* ofilename;
-  char defofilename[]="ccsds_perf.out";
+  char defofilename[]="grib_ccsds_perf.out";
   double *values=NULL;
   int append=0;
   size_t nvalues=0;
diff --git a/tests/change_scanning.sh b/tests/grib_change_scanning.sh
similarity index 100%
rename from tests/change_scanning.sh
rename to tests/grib_change_scanning.sh
diff --git a/tests/concept.sh b/tests/grib_concept.sh
similarity index 100%
rename from tests/concept.sh
rename to tests/grib_concept.sh
diff --git a/tests/global.sh b/tests/grib_global.sh
similarity index 100%
rename from tests/global.sh
rename to tests/grib_global.sh
diff --git a/tests/iterator.sh b/tests/grib_iterator.sh
similarity index 100%
rename from tests/iterator.sh
rename to tests/grib_iterator.sh
diff --git a/tests/jpeg.sh b/tests/grib_jpeg.sh
similarity index 100%
rename from tests/jpeg.sh
rename to tests/grib_jpeg.sh
diff --git a/tests/level.sh b/tests/grib_level.sh
similarity index 100%
rename from tests/level.sh
rename to tests/grib_level.sh
diff --git a/tests/grib_local.sh b/tests/grib_local.sh
new file mode 100755
index 0000000..3f53858
--- /dev/null
+++ b/tests/grib_local.sh
@@ -0,0 +1,109 @@
+#!/bin/sh
+# 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.sh
+#set -x
+
+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
+
+# 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_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_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
+    
+    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
+    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
+
+diff local.log local.good.log
+
+rm -f local.log loc.grib1 loc.grib2 loc1.grib1 loc1.grib2 eps.grib1 eps.grib2
+
+# Delete Local Definition
+# -----------------------
+sample_g1=$ECCODES_SAMPLES_PATH/reduced_gg_pl_640_grib1.tmpl
+sample_g2=$ECCODES_SAMPLES_PATH/reduced_gg_pl_640_grib2.tmpl
+temp=temp.grib_local.grib
+grib_check_key_equals $sample_g1 localUsePresent 1
+${tools_dir}/grib_set -s deleteLocalDefinition=1 $sample_g1 $temp
+grib_check_key_equals $temp localUsePresent 0
+
+grib_check_key_equals $sample_g2 "localUsePresent,section2Used" "1 1"
+${tools_dir}/grib_set -s deleteLocalDefinition=1 $sample_g2 $temp
+grib_check_key_equals $temp "localUsePresent,section2Used" "0 0"
+rm -f $temp
+
+# Empty local section for GRIB2
+# ------------------------------
+sample_g2=$ECCODES_SAMPLES_PATH/reduced_gg_pl_640_grib2.tmpl
+temp=temp.grib_local.grib
+${tools_dir}/grib_set -s setLocalDefinition=1,addEmptySection2=1 $sample_g2 $temp
+grib_check_key_equals $temp section2Length 5
+
+sample_g2=$ECCODES_SAMPLES_PATH/reduced_gg_pl_400_grib2.tmpl
+grib_check_key_equals $sample_g2 section2Length 17
+${tools_dir}/grib_set -s addEmptySection2=1 $sample_g2 $temp
+grib_check_key_equals $temp section2Length 5
+rm -f $temp
+
+# Local Definition 5
+# -----------------------
+sample_g1=$ECCODES_SAMPLES_PATH/GRIB1.tmpl
+temp=temp.grib_local.grib
+${tools_dir}/grib_set -s setLocalDefinition=1,localDefinitionNumber=5 $sample_g1 $temp.1
+${tools_dir}/grib_set -s \
+   forecastProbabilityNumber=2,totalNumberOfForecastProbabilities=25,thresholdIndicator=3,lowerThreshold=54,upperThreshold=56 \
+   $temp.1 $temp.2
+${tools_dir}/grib_set -s edition=2 $temp.2 $temp.3
+# Now check all LD5 keys from grib1 made it into grib2
+grib_check_key_equals $temp.3 edition,productDefinitionTemplateNumber "2 5"
+grib_check_key_equals $temp.3 forecastProbabilityNumber,totalNumberOfForecastProbabilities "2 25"
+grib_check_key_equals $temp.3 probabilityType,scaledValueOfLowerLimit,scaledValueOfUpperLimit "2 54 56"
+
+rm -f $temp $temp.1 $temp.2 $temp.3
diff --git a/tests/ls.sh b/tests/grib_ls.sh
similarity index 100%
rename from tests/ls.sh
rename to tests/grib_ls.sh
diff --git a/tests/multi.sh b/tests/grib_multi.sh
similarity index 88%
rename from tests/multi.sh
rename to tests/grib_multi.sh
index d21f519..8845faa 100755
--- a/tests/multi.sh
+++ b/tests/grib_multi.sh
@@ -10,13 +10,7 @@
 
 . ./include.sh
 
-if [ ! -f ${data_dir}/multi.grib2 ]
-then
-  echo no data to test
-  exit 0
-fi
-
-tmpdata=grib_api.$$.grib
+tmpdata=grib_multi.$$.grib
 rm -f $tmpdata
 
 parameterNumber=`${tools_dir}/grib_get -p parameterNumber -w parameterCategory=2,parameterNumber=3 ${data_dir}/multi.grib2`
@@ -42,4 +36,4 @@ then
   exit 1
 fi
 
-rm -f $tmpdata.1 $tmpdata.rules || true
+rm -f $tmpdata.1 $tmpdata.rules
diff --git a/tests/neg_fctime.sh b/tests/grib_neg_fctime.sh
similarity index 100%
rename from tests/neg_fctime.sh
rename to tests/grib_neg_fctime.sh
diff --git a/tests/octahedral.sh b/tests/grib_octahedral.sh
similarity index 100%
rename from tests/octahedral.sh
rename to tests/grib_octahedral.sh
diff --git a/tests/padding.sh b/tests/grib_padding.sh
similarity index 100%
rename from tests/padding.sh
rename to tests/grib_padding.sh
diff --git a/tests/second_order.sh b/tests/grib_second_order.sh
similarity index 55%
rename from tests/second_order.sh
rename to tests/grib_second_order.sh
index 08f2ded..24532c4 100755
--- a/tests/second_order.sh
+++ b/tests/grib_second_order.sh
@@ -18,6 +18,7 @@ cd ${data_dir}
 encoding=1
 simple_no_bitmap=simple.grib
 simple_bitmap=simple_bitmap.grib
+test_filter=temp.grib_second_order.filter
 
 files_no_bitmap="gen_ext.grib \
 gen_ext_boust.grib \
@@ -38,33 +39,33 @@ 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
-
-	for f in $files
-	do 
-		${tools_dir}/grib_filter test.filter $f > $f.data
-		diff $simple.data $f.data > /dev/null
-		${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
-			diff $simple.data $f.copied.data > /dev/null
-			${tools_dir}/grib_compare -cvalues $f.copied $simple
-			echo $f encoding test passed > $REDIRECT
-			echo > $REDIRECT
-		fi
-
-	done
-	rm -f *.data *.copied
+    ${tools_dir}/grib_filter $test_filter $simple > $simple.data
+
+    for f in $files
+    do 
+        ${tools_dir}/grib_filter $test_filter $f > $f.data
+        diff $simple.data $f.data > /dev/null
+        ${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
+            diff $simple.data $f.copied.data > /dev/null
+            ${tools_dir}/grib_compare -cvalues $f.copied $simple
+            echo $f encoding test passed > $REDIRECT
+            echo > $REDIRECT
+        fi
+
+    done
+    rm -f *.data *.copied
 }
 
 
-cat > test.filter<<EOF
+cat > $test_filter<<EOF
 print "[values!1]!";
 EOF
 
@@ -93,12 +94,29 @@ nums=`${tools_dir}/grib_get -p numberOfDataPoints,numberOfCodedValues,numberOfMi
 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" = "20560.7 20563.4 20554.7 20559.5 " ]
 
-rm -f $sec_ord_bmp
-rm -f test.filter
+# Unpack/pack test for second order grib1 data
+# --------------------------------------------
+g1files="lfpw.grib1
+   gen_ext_spd_2.grib
+   gen_ext_spd_3.grib"
+temp_grib1=temp.grib_second_order.grib
+temp_stat1=temp.grib_second_order.stat1
+temp_stat2=temp.grib_second_order.stat2
+
+for f1 in $g1files; do
+    # This does unpack and repack
+    ${tools_dir}/grib_copy -r $f1 $temp_grib1
+    ${tools_dir}/grib_get -n statistics $f1         > $temp_stat1
+    ${tools_dir}/grib_get -n statistics $temp_grib1 > $temp_stat2
+    perl ${test_dir}/number_compare.pl $temp_stat1 $temp_stat2
+done
+rm -f $temp_stat1 $temp_stat2
+rm -f $temp_grib1 $sec_ord_bmp
+rm -f $test_filter
diff --git a/tests/set.sh b/tests/grib_set.sh
similarity index 100%
rename from tests/set.sh
rename to tests/grib_set.sh
diff --git a/tests/statistics.sh b/tests/grib_statistics.sh
similarity index 100%
rename from tests/statistics.sh
rename to tests/grib_statistics.sh
diff --git a/tests/step.sh b/tests/grib_step.sh
similarity index 95%
rename from tests/step.sh
rename to tests/grib_step.sh
index 8c4c762..22f1892 100755
--- a/tests/step.sh
+++ b/tests/grib_step.sh
@@ -94,6 +94,10 @@ ${tools_dir}/grib_set -s indicatorOfUnitOfTimeRange=m $grib2_sample $temp
 unit=`${tools_dir}/grib_get -p indicatorOfUnitOfTimeRange $temp`
 [ "$unit" = "0" ]
 
+# ECC-457
+input=${data_dir}/tp_ecmwf.grib
+stepRange=`${tools_dir}/grib_get -w count=1 -p stepRange,startStep,endStep,stepType $input`
+[ "$stepRange" = "12 12 12 instant" ]
+
 rm -f $temp
 rm -f $grib2File.p8tmp ${grib2File}.tmp x.grib
-
diff --git a/tests/local.sh b/tests/local.sh
deleted file mode 100755
index ee6ec47..0000000
--- a/tests/local.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh
-# 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.sh
-#set -x
-
-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
-
-# 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_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_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
-	
-	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
-	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
-
-diff local.log local.good.log
-
-rm -f local.log loc.grib1 loc.grib2 loc1.grib1 loc1.grib2 eps.grib1 eps.grib2
-
diff --git a/tests/unit_tests.c b/tests/unit_tests.c
index db01013..f4baef4 100644
--- a/tests/unit_tests.c
+++ b/tests/unit_tests.c
@@ -11,6 +11,8 @@
 #include <assert.h>
 #include "grib_api_internal.h"
 
+int assertion_caught = 0;
+
 typedef enum {IBM_FLOAT, IEEE_FLOAT} FloatRep;
 
 void compare_doubles(const double d1, const double d2, const double epsilon)
@@ -1398,9 +1400,32 @@ void test_string_splitting()
     /*  input having several adjacent delimiters e.g. 'A||B|||C' */
 }
 
+static void my_assertion_proc(const char* message)
+{
+    printf("Caught it: %s\n", message);
+    assertion_caught = 1;
+}
+
+void test_assertion_catching()
+{
+    assert(assertion_caught == 0);
+    codes_set_codes_assertion_failed_proc(&my_assertion_proc);
+
+    /* Do something illegal */
+    string_split("", " ");
+
+    assert(assertion_caught == 1);
+
+    /* Restore everything */
+    codes_set_codes_assertion_failed_proc(NULL);
+    assertion_caught = 0;
+}
+
 int main(int argc, char** argv)
 {
-    /*printf("Doing unit tests. GRIB API version = %ld\n", grib_get_api_version());*/
+    /*printf("Doing unit tests. ecCodes version = %ld\n", grib_get_api_version());*/
+
+    test_assertion_catching();
 
     test_gaussian_latitude_640();
 
diff --git a/tigge/tigge_check.c b/tigge/tigge_check.c
index 2ad4495..db23563 100755
--- a/tigge/tigge_check.c
+++ b/tigge/tigge_check.c
@@ -382,26 +382,34 @@ static void check_validity_datetime(grib_handle* h)
 
 static void check_range(grib_handle* h,const parameter* p,double min,double max)
 {
+    double missing = 0;
     if(!valueflg)
         return;
 
-    if(min < p->min1 || min > p->min2)
-    {
-        printf("warning: %s, field %d [%s]: %s minimum value %g is not in [%g,%g]\n",file,field,param,
-                p->name,
-                min,p->min1,p->min2);
-        printf("  => [%g,%g]\n",min < p->min1 ? min : p->min1, min > p->min2 ? min : p->min2);
+    missing = dget(h,"missingValue");
 
-        warning++;
-    }
+    /* See ECC-437 */
+    if(!(get(h,"bitMapIndicator") == 0 && min == missing && max == missing)){
+
+        if(min < p->min1 || min > p->min2)
+        {
+            printf("warning: %s, field %d [%s]: %s minimum value %g is not in [%g,%g]\n",file,field,param,
+                    p->name,
+                    min,p->min1,p->min2);
+            printf("  => [%g,%g]\n",min < p->min1 ? min : p->min1, min > p->min2 ? min : p->min2);
+
+            warning++;
+        }
+
+        if(max < p->max1 || max > p->max2 )
+        {
+            printf("warning: %s, field %d [%s]: %s maximum value %g is not in [%g,%g]\n",file,field,param,
+                    p->name,
+                    max,p->max1,p->max2);
+            printf("  => [%g,%g]\n",max < p->max1 ? max : p->max1, max > p->max2 ? max : p->max2);
+            warning++;
+        }
 
-    if(max < p->max1 || max > p->max2 )
-    {
-        printf("warning: %s, field %d [%s]: %s maximum value %g is not in [%g,%g]\n",file,field,param,
-                p->name,
-                max,p->max1,p->max2);
-        printf("  => [%g,%g]\n",max < p->max1 ? max : p->max1, max > p->max2 ? max : p->max2);
-        warning++;
     }
 }
 
diff --git a/tigge/tigge_check.h b/tigge/tigge_check.h
index f8e31cf..b91102c 100644
--- a/tigge/tigge_check.h
+++ b/tigge/tigge_check.h
@@ -96,31 +96,6 @@ parameter parameters[] = {
       1,
       100,
       {
-         {"model", GRIB_TYPE_STRING, 0, "glob"},
-
-         {"paramId", GRIB_TYPE_LONG, 166},
-
-         {"discipline", GRIB_TYPE_LONG, 0},
-         {"parameterCategory", GRIB_TYPE_LONG, 2},
-         {"parameterNumber", GRIB_TYPE_LONG, 3},
-
-         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
-         {NULL, },
-      },
-      {&point_in_time, &given_level},
-   },
-
-   {
-      "10_meter_v_velocity_sfc.lam",
-      -100,
-      -1,
-      1,
-      100,
-      {
-         {"model", GRIB_TYPE_STRING, 0, "lam"},
-
          {"paramId", GRIB_TYPE_LONG, 166},
 
          {"discipline", GRIB_TYPE_LONG, 0},
@@ -130,7 +105,6 @@ parameter parameters[] = {
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
          {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
          {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 10},
-
          {NULL, },
       },
       {&point_in_time, &given_level},
@@ -312,29 +286,6 @@ parameter parameters[] = {
       1,
       1,
       {
-         {"model", GRIB_TYPE_STRING, 0, "glob"},
-
-         {"paramId", GRIB_TYPE_LONG, 172},
-
-         {"discipline", GRIB_TYPE_LONG, 2},
-         {"parameterCategory", GRIB_TYPE_LONG, 0},
-         {"parameterNumber", GRIB_TYPE_LONG, 0},
-
-         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {NULL, },
-      },
-      {&point_in_time, &predefined_level},
-   },
-
-   {
-      "land_sea_mask_sfc.lam",
-      0,
-      0,
-      1,
-      1,
-      {
-         {"model", GRIB_TYPE_STRING, 0, "lam"},
-
          {"paramId", GRIB_TYPE_LONG, 172},
 
          {"discipline", GRIB_TYPE_LONG, 2},
@@ -555,7 +506,6 @@ parameter parameters[] = {
       270,
       350,
       {
-         {"model", GRIB_TYPE_STRING, 0, "glob"},
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 0},
          {"parameterNumber", GRIB_TYPE_LONG, 0},
@@ -566,58 +516,6 @@ parameter parameters[] = {
    },
 
 /* 
-warning: tigge_lam.20141019_00+045.mem009.grib2: surface_air_temperature_sfc.lam minimum value 219.508 is not in [220,290]
-mogreps in the past -> min <180, 290>
-*/
-
-   {
-      "surface_air_temperature_sfc.lam",
-      180,
-      290,
-      270,
-      350,
-      {
-         {"model", GRIB_TYPE_STRING, 0, "lam"},
-
-         {"paramId", GRIB_TYPE_LONG, 167},
-
-         {"discipline", GRIB_TYPE_LONG, 0},
-         {"parameterCategory", GRIB_TYPE_LONG, 0},
-         {"parameterNumber", GRIB_TYPE_LONG, 0},
-
-         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 2},
-         {NULL, },
-      },
-      {&point_in_time, &given_level},
-   },
-
-   {
-      "surface_air_temperature_sfc.lam",
-      180,
-      290,
-      270,
-      350,
-      {
-         {"model", GRIB_TYPE_STRING, 0, "lam"},
-         {"suiteName", GRIB_TYPE_STRING, 1, "mogreps-mo-eua"},
-
-         {"paramId", GRIB_TYPE_LONG, 167},
-
-         {"discipline", GRIB_TYPE_LONG, 0},
-         {"parameterCategory", GRIB_TYPE_LONG, 0},
-         {"parameterNumber", GRIB_TYPE_LONG, 0},
-
-         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 103},
-         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"scaledValueOfFirstFixedSurface", GRIB_TYPE_LONG, 15},
-         {NULL, },
-      },
-      {&point_in_time, &given_level},
-   },
-
-/* 
    cosmodeeps-dwd-eu (origin=7)
    2014-01-08: minimum limit for surface_air_dew_point_temperature_sfc changed to <160,290>
    2014-11-06: glameps: tigge_lam.20141106_00+042.mem012.grib2, surface_air_dew_point_temperature_sfc.lam minimum value 128.003 is not in [160,290]
@@ -1130,13 +1028,14 @@ s2s/lfpw: warning: s2s.lfpw_msl_0.grib2, field 1 [mean_sea_level_pressure_sfc]:
 s2s/rjtd: warning: s2s.z_tigge_c_rjtd_201605101200_glob_prod_pf_sl_0636_009_0000_msl.grib2, field 1 [mean_sea_level_pressure_sfc]: mean_sea_level_pressure_sfc maximum value 109411 is not in [98000,109000]
 s2s/ammc: warning: s2s.z_s2s_c_cwao_20010602000000_glob_prod_sl_000.grib2, field 833 [mean_sea_level_pressure_sfc]: mean_sea_level_pressure_sfc maximum value 109994
 s2s/enfh/cwao: warning: s2s.z_s2s_c_cwao_20070721000000_glob_prod_sl_001.grib2, field 298 [mean_sea_level_pressure_sfc]: mean_sea_level_pressure_sfc maximum value 110320 is not in [98000,110000]
+s2s/enfo/rjtd:2s.2017011812.prod.046.sl.grib2, field 373 [mean_sea_level_pressure_sfc]: mean_sea_level_pressure_sfc maximum value 113559 is not in [98000,113000]
 */
    {
       "mean_sea_level_pressure_sfc",
       88000,
       104000,
       98000,
-      111000,
+      115000,
       {
          {"paramId", GRIB_TYPE_LONG, 151},
 
@@ -1182,12 +1081,31 @@ s2s/egrr: s2s.z_s2s_c_ukmo_20160102000000_glob_prod_pf_1440_002.rt.pl.grib2, fie
 */
    {
       "geopotential_height_pl",
-      -1300,
+      -5000,
+      30600,
+      200,
+      35000,
+      {
+         {"model", GRIB_TYPE_STRING, 0, "glob"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 5},
+
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 100},
+         {NULL, },
+      },
+      {&point_in_time, &given_level, &pressure_level},
+   },
+   {
+      "geopotential_height_pl.uerra",
+      -5000,
       30600,
       200,
       35000,
       {
-/*       {"model", GRIB_TYPE_STRING, 0, "glob"}, */
+         {"paramId", GRIB_TYPE_LONG, 156},
+         {"class", GRIB_TYPE_STRING, 0, "ur"}, 
 
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 3},
@@ -1201,12 +1119,12 @@ s2s/egrr: s2s.z_s2s_c_ukmo_20160102000000_glob_prod_pf_1440_002.rt.pl.grib2, fie
 
    {
       "geopotential_pl",
-      -1300,
+      -5000,
       306000,
-      200,
+      2000,
       350000,
       {
-/*       {"model", GRIB_TYPE_STRING, 0, "glob"}, */
+         {"model", GRIB_TYPE_STRING, 0, "glob"},
 
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 3},
@@ -1218,6 +1136,25 @@ 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.uerra",
+      -5000,
+      306000,
+      2000,
+      350000,
+      {
+         {"paramId", GRIB_TYPE_LONG, 129},
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+
+         {"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]
@@ -1301,6 +1238,8 @@ warning: s2s.z_tigge_c_kwbc_20020817000000_ncep_prod_pf_pl_0000_003_0010_u.grib2
       },
       {&point_in_time, &given_level, &pressure_level},
    },
+
+
 /* 
    S2S/CAWCR: v_velocity_pl maximum value 8.54936 is not in [10,150]
    S2S/CAWCR: v_velocity_pl minimum value -128.209 is not in [-120,-10]
@@ -1308,7 +1247,6 @@ warning: s2s.z_tigge_c_kwbc_20020817000000_ncep_prod_pf_pl_0000_003_0010_u.grib2
    ammc-s2s-enfo: warning: s2s.v_20160324_7.grib2, field 160 [v_velocity_pl]: v_velocity_pl maximum value 3.79724 is not in [4,190]
    ammc-s2s-enfo: warning: s2s.v_20160526_0.grib2, field 611 [v_velocity_pl]: v_velocity_pl minimum value -194.691 is not in [-190,-2]
 */
-
    {
       "v_velocity_pl",
       -200,
@@ -1374,9 +1312,9 @@ warning: s2s.z_tigge_c_kwbc_20150817000000_ncep_prod_pf_pl_0000_015_0500_w.grib2
    {
       "w_vertical_velocity_pl",
       -25,
-      0,
+        0,
        -2,
-      25,
+       25,
       {
          {"paramId", GRIB_TYPE_LONG, 135},
 
@@ -1409,7 +1347,7 @@ warning: s2s.z_tigge_c_kwbc_20150817000000_ncep_prod_pf_pl_0000_015_0500_w.grib2
 
          {NULL, },
       },
-      {&point_in_time, &predefined_level},
+      {&point_in_time, &predefined_level, &has_bitmap},
    },
 /*
 s2s_devel, ecmf, 20141229, 00UTC, test, enfh, real:  s2s.2014122900.test.768.10.pf.19941229.sl.168.grib2, field 21 [surface_pressure_sfc]: surface_pressure_sfc maximum value 102851 is not in [102900,110000]
@@ -1505,7 +1443,7 @@ uerra, eswi-an: an.sp.sfc.grib2, field 1 [surface_pressure_sfc]: surface_pressur
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&from_start, &predefined_level},
+      {&from_start, &predefined_level, &has_bitmap},
    },
 
    {
@@ -1526,7 +1464,7 @@ uerra, eswi-an: an.sp.sfc.grib2, field 1 [surface_pressure_sfc]: surface_pressur
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&point_in_time, &predefined_level},
+      {&point_in_time, &predefined_level, &has_bitmap},
    },
 
    {
@@ -1547,15 +1485,15 @@ uerra, eswi-an: an.sp.sfc.grib2, field 1 [surface_pressure_sfc]: surface_pressur
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&point_in_time, &predefined_level},
+      {&point_in_time, &predefined_level, &has_bitmap},
    },
 
    {
       "sea_surface_temperature_sfc.glob",
-      -1.5e+6,
-       1.5e+6,
-      -1.5e+6,
-       1.5e+6,
+       200,
+       290,
+       260,
+       320,
       {
          {"model", GRIB_TYPE_STRING, 0, "glob"},
 
@@ -1568,9 +1506,38 @@ uerra, eswi-an: an.sp.sfc.grib2, field 1 [surface_pressure_sfc]: surface_pressur
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&point_in_time, &predefined_level},
+      {&point_in_time, &predefined_level, &has_bitmap},
    },
 
+/* 
+  s2s/rums/enfo: warning: s2s.z_s2s_c_rhmc_20170301000000_glob_prod_00.sl.grib2, field 141 [sea_surface_temperature_sfc.glob.s2]: sea_surface_temperature_sfc.glob.s2 minimum value 0 is not in [200,290]
+
+  SHOULD be fixed now!
+
+   {
+      "sea_surface_temperature_sfc.glob.s2s.rums",
+       0,
+       290,
+       260,
+       320,
+      {
+         {"model", GRIB_TYPE_STRING, 0, "glob"},
+         {"class", GRIB_TYPE_STRING, 0, "s2"},
+         {"centre", GRIB_TYPE_STRING, 1, "rums"},
+
+         {"paramId", GRIB_TYPE_LONG, 34},
+
+         {"discipline", GRIB_TYPE_LONG, 10},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
+         {NULL, },
+      },
+      {&daily_average, &predefined_level, &has_bitmap},
+   },
+*/
+
    {
       "convective_available_potential_energy_sfc.glob.s2",
       0,
@@ -1771,8 +1738,7 @@ warning: s2s.z_s2s_c_babj_20150817000000_glob_prod_cf_1440_000.sl.grib2, field 1
          {"scaledValueOfSecondFixedSurface", GRIB_TYPE_LONG, 2},
          {NULL, },
       },
-/*    {&daily_average, &given_thickness, &has_bitmap},  todo bitmap?? */
-      {&daily_average, &given_thickness},
+      {&daily_average, &given_thickness, &has_bitmap},
    },
 
 /*
@@ -1807,8 +1773,7 @@ s2s/rums warning: s2s.z_s2s_c_rhmc_20150819000000_glob_prod_1464_001.sl.grib2, f
          {"scaledValueOfSecondFixedSurface", GRIB_TYPE_LONG, 10},
          {NULL, },
       },
-/*    {&daily_average, &given_thickness, &has_bitmap},  todo bitmap?? */
-      {&daily_average, &given_thickness},
+      {&daily_average, &given_thickness, &has_bitmap},
    },
 /*
 s2s_devel/ecmf/enfh/rea: warning: s2s.2015011200.test.768.10.cf.20100112.sl.24.grib2, field 25 [soil_temperature_top_20_cm_sfc.glob]: soil_temperature_top_20_cm_sfc.glob minimum value 199.519 is not in [200,230]
@@ -1840,7 +1805,7 @@ s2s_prod/ammc/enfo:warning: s2s.st20_20151004_4.grib2, field 61 [soil_temperatur
          {"scaledValueOfSecondFixedSurface", GRIB_TYPE_LONG, 2},
          {NULL, },
       },
-      {&daily_average, &given_thickness},
+      {&daily_average, &given_thickness, &has_bitmap},
    },
 
 /*
@@ -1874,7 +1839,7 @@ s2s_prod/ammc/enfo:warning: s2s.st20_20151004_4.grib2, field 61 [soil_temperatur
          {"scaledValueOfSecondFixedSurface", GRIB_TYPE_LONG, 2},
          {NULL, },
       },
-      {&daily_average, &given_thickness},
+      {&daily_average, &given_thickness, &has_bitmap},
    },
 
 
@@ -1907,7 +1872,7 @@ s2s_prod/ammc/enfo:warning: s2s.st20_20151004_4.grib2, field 61 [soil_temperatur
          {"scaledValueOfSecondFixedSurface", GRIB_TYPE_LONG, 10},
          {NULL, },
       },
-      {&daily_average, &given_thickness},
+      {&daily_average, &given_thickness, &has_bitmap},
    },
 
 /* 
@@ -1942,7 +1907,7 @@ s2s_prod/ammc/enfo:warning: s2s.st20_20151004_4.grib2, field 61 [soil_temperatur
          {"scaledValueOfSecondFixedSurface", GRIB_TYPE_LONG, 10},
          {NULL, },
       },
-      {&daily_average, &given_thickness},
+      {&daily_average, &given_thickness, &has_bitmap},
    },
 /* 
    S2S/CAWCR: snow_depth_water_equivalent_sfc.glob maximum value 9066.25 is not in [10000,15000]
@@ -2002,6 +1967,7 @@ warning: s2s.z_tigge_c_kwbc_20150817000000_ncep_prod_cf_sl_0024_000_0000_tcc.gri
 warning: s2s.z_s2s_c_babj_20150817000000_glob_prod_cf_1440_000.sl.grib2, field 2582 [total_cloud_cover_sfc.glob]: total_cloud_cover_sfc.glob maximum value 94.4214 is not in [99.99,100.01]
 warning: s2s.z_tigge_c_kwbc_20150817000000_ncep_prod_pf_sl_0024_009_0000_tcc.grib2, field 1 [total_cloud_cover_sfc.glob]: total_cloud_cover_sfc.glob maximum value 100.503 is not in [90,100.1]
 s2s/lfpw: warning: s2s.lfpw_tcc_0.grib2, field 60 [total_cloud_cover_sfc.glob]: total_cloud_cover_sfc.glob minimum value -0.0300206 is not in [0,5]
+s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: total_cloud_cover_sfc.glob maximum value 128 is not in [90,101]
  */
    {
       "total_cloud_cover_sfc.glob.s2",
@@ -2028,35 +1994,6 @@ s2s/lfpw: warning: s2s.lfpw_tcc_0.grib2, field 60 [total_cloud_cover_sfc.glob]:
       {&daily_average, &predefined_thickness},
    },
 
- /*
-s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: total_cloud_cover_sfc.glob maximum value 128 is not in [90,101]
- */
-   {
-      "total_cloud_cover_sfc.glob.s2.ammc",
-      -0.1,
-      5,
-      90.,
-      150.,
-      {
-         {"model", GRIB_TYPE_STRING, 0, "glob"},
-         {"class", GRIB_TYPE_STRING, 0, "s2"},
-         {"centre", GRIB_TYPE_STRING, 1, "ammc"},
-
-         {"paramId", GRIB_TYPE_LONG, 228164},
-
-         {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 0},
-
-         {"discipline", GRIB_TYPE_LONG, 0},
-         {"parameterCategory", GRIB_TYPE_LONG, 6},
-         {"parameterNumber", GRIB_TYPE_LONG, 1},
-
-         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
-         {NULL, },
-      },
-      {&daily_average, &predefined_thickness},
-   },
-
 /*
    s2s/lfpw warning: s2s.lfpw_tcc_0.grib2, field 1 [total_cloud_cover_sfc.glob]: total_cloud_cover_sfc.glob maximum value 75 is not in [90,101] xxx should be fixed by provider!!
 */
@@ -2131,7 +2068,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&daily_average, &predefined_level},
+      {&daily_average, &predefined_level, &has_bitmap},
    },
 
    {
@@ -2158,12 +2095,16 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
       {&daily_average, &predefined_level},
    },
 
+/*
+  s2s/ammc/enfo: warning: s2s.sst_20170223_4.sl.grib2, field 59 [sea_surface_temperature_sfc.glob.s2]: sea_surface_temperature_sfc.glob.s2 minimum value 194.496 is not in [200,290]
+*/
+
    {
       "sea_surface_temperature_sfc.glob.s2",
-      -1.5e+6,
-       1.5e+6,
-      -1.5e+6,
-       1.5e+6,
+       180,
+       290,
+       260,
+       320,
       {
          {"model", GRIB_TYPE_STRING, 0, "glob"},
          {"class", GRIB_TYPE_STRING, 0, "s2"},
@@ -2179,7 +2120,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&daily_average, &predefined_level},
+      {&daily_average, &predefined_level, &has_bitmap},
    },
 
    {
@@ -2202,7 +2143,7 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&daily_average, &predefined_level},
+      {&daily_average, &predefined_level, &has_bitmap},
    },
 
 /* UERRA */
@@ -2230,23 +2171,6 @@ s2s/ammc/enfo:s2s.tcc_20151004_9.grib2, field 21 [total_cloud_cover_sfc.glob]: t
       100.00001,
       {
          {"discipline", GRIB_TYPE_LONG, 0},
-         {"discipline", GRIB_TYPE_LONG, 0},
-         {"parameterCategory", GRIB_TYPE_LONG, 6},
-         {"parameterNumber", GRIB_TYPE_LONG, 5},
-         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
-         {"typeOfSecondFixedSurface", GRIB_TYPE_LONG, 8},
-         {NULL, },
-      },
-      {&point_in_time, &predefined_thickness},
-   },
-   {
-      "medium_cloud_cover_sfc",
-      0,
-      1e-10,
-      0.9999,
-      100.00001,
-      {
-         {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 6},
          {"parameterNumber", GRIB_TYPE_LONG, 4},
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
@@ -2301,6 +2225,7 @@ uerra/egrr (something like ad hoc 1 grid-point issue (similarly grid-point storm
       100,
       108000,
       {
+         {"paramId", GRIB_TYPE_LONG, 54},
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 3},
          {"parameterNumber", GRIB_TYPE_LONG, 0},
@@ -2311,6 +2236,26 @@ uerra/egrr (something like ad hoc 1 grid-point issue (similarly grid-point storm
       {&point_in_time, &given_level}, /* check model levels?? */
    },
    {
+      "pressure_ml.edzw",
+      100,
+      100000,
+      100,
+      108000,
+      {
+         {"paramId", GRIB_TYPE_LONG, 54},
+         {"origin", GRIB_TYPE_STRING, 0, "edzw"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 3},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 118},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+
+   {
       "specific_humidity_ml",
       -0.1,
       0.01,
@@ -2327,6 +2272,26 @@ uerra/egrr (something like ad hoc 1 grid-point issue (similarly grid-point storm
       {&point_in_time, &given_level}, /* check model levels?? */
    },
    {
+      "specific_humidity_ml.edzw",
+      -0.1,
+      0.01,
+         0,
+       0.1,
+      {
+         {"paramId", GRIB_TYPE_LONG, 133},
+         {"origin", GRIB_TYPE_STRING, 0, "edzw"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 118},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+
+   {
       "temperature_ml",
       150,
       300,
@@ -2343,6 +2308,25 @@ uerra/egrr (something like ad hoc 1 grid-point issue (similarly grid-point storm
       },
       {&point_in_time, &given_level}, /* check model levels?? */
    },
+   {
+      "temperature_ml.edzw",
+      150,
+      300,
+      200,
+      330,
+      {
+         {"paramId", GRIB_TYPE_LONG, 130},
+         {"origin", GRIB_TYPE_STRING, 0, "edzw"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 0},
+         {"parameterNumber", GRIB_TYPE_LONG, 0},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 118},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
 
 /*
   uerra, eswi-an: an.200812020000+0.ml.grib2, field 3 [u_velocity_ml]: u_velocity_ml minimum value 1.55574 is not in [-200,1]
@@ -2366,6 +2350,26 @@ uerra/egrr (something like ad hoc 1 grid-point issue (similarly grid-point storm
       {&point_in_time, &given_level}, /* check model levels?? */
    },
    {
+      "u_velocity_ml.edzw",
+      -200,
+        10,
+       0.1,
+       200,
+      {
+         {"paramId", GRIB_TYPE_LONG, 131},
+         {"origin", GRIB_TYPE_STRING, 0, "edzw"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 2},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 118},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+
+   {
       "v_velocity_ml",
       -200,
       -1,
@@ -2383,6 +2387,26 @@ uerra/egrr (something like ad hoc 1 grid-point issue (similarly grid-point storm
       {&point_in_time, &given_level}, /* check model levels?? */
    },
    {
+      "v_velocity_ml.edzw",
+      -200,
+      -1,
+      1,
+      200,
+      {
+         {"paramId", GRIB_TYPE_LONG, 132},
+         {"origin", GRIB_TYPE_STRING, 0, "edzw"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 2},
+         {"parameterNumber", GRIB_TYPE_LONG, 3},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 118},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+
+   {
       "cloud_cover_ml",
       0,
       1e-10,
@@ -2398,6 +2422,47 @@ uerra/egrr (something like ad hoc 1 grid-point issue (similarly grid-point storm
       },
       {&point_in_time, &given_level}, /* check model levels?? */
    },
+   {
+      "cloud_cover_ml.edzw",
+      0,
+      1e-10,
+      0,
+      100.00001,
+      {
+         {"paramId", GRIB_TYPE_LONG, 260257},
+         {"origin", GRIB_TYPE_STRING, 0, "edzw"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 22},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 118},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+
+/*
+  uerra/egrr warning: oper.2010-03-13.ml.grib2, field 16 [cloud_cover_ml]: cloud_cover_ml minimum value -0.906414 is not in [0,1e-10]
+   {
+      "cloud_cover_ml.uerra.egrr",
+      -10,
+      1e-10,
+      0,
+      100.00001,
+      {
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+         {"centre", GRIB_TYPE_STRING, 1, "egrr"},
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 6},
+         {"parameterNumber", GRIB_TYPE_LONG, 22},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 105},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level},
+   },
+*/
 
    /* pressure level */
 
@@ -2476,6 +2541,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_ml",
        0,
@@ -2483,6 +2549,8 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
        0,
        0.01,
       {
+         {"paramId", GRIB_TYPE_LONG, 247},
+
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 1},
          {"parameterNumber", GRIB_TYPE_LONG, 84},
@@ -2493,12 +2561,34 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
       {&point_in_time, &given_level}, /* check model levels?? */
    },
    {
+      "specific_cloud_ice_water_content_ml.edzw",
+       0,
+       0.001,
+       0,
+       0.01,
+      {
+         {"paramId", GRIB_TYPE_LONG, 247},
+         {"origin", GRIB_TYPE_STRING, 0, "edzw"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 84},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 118},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+
+   {
       "specific_cloud_liquid_water_content_ml",
        0,
        1e+5,
        0,
        1e+6,
       {
+         {"paramId", GRIB_TYPE_LONG, 246},
+
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 1},
          {"parameterNumber", GRIB_TYPE_LONG, 83},
@@ -2509,13 +2599,39 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
       {&point_in_time, &given_level}, /* check model levels?? */
    },
    {
-      "relative_humidity_pl",
+      "specific_cloud_liquid_water_content_ml.edzw",
+       0,
+       1e+5,
+       0,
+       1e+6,
+      {
+         {"paramId", GRIB_TYPE_LONG, 246},
+         {"origin", GRIB_TYPE_STRING, 0, "edzw"},
+
+         {"discipline", GRIB_TYPE_LONG, 0},
+         {"parameterCategory", GRIB_TYPE_LONG, 1},
+         {"parameterNumber", GRIB_TYPE_LONG, 83},
+         {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 118},
+         {"scaleFactorOfFirstFixedSurface", GRIB_TYPE_LONG, 0},
+         {NULL, },
+      },
+      {&point_in_time, &given_level}, /* check model levels?? */
+   },
+
+/*
+  uerra/eggr  warning: oper.2010-03-13.pl.grib2, field 69 [relative_humidity_pl]: relative_humidity_pl maximum value 169 is not in [0,160]
+
+*/
+   {
+      "relative_humidity_pl.ur",
        0,
        30,
        0,
-       160,
+       180,
       {
          {"paramId", GRIB_TYPE_LONG, 157},
+         {"class", GRIB_TYPE_STRING, 0, "ur"},
+
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 1},
          {"parameterNumber", GRIB_TYPE_LONG, 1},
@@ -2595,7 +2711,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
    {
       "relative_humidity_hl",
       0,
-      20,
+      40,
       1,
       160,
       {
@@ -2688,7 +2804,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
       0,
       25,
       90,
-      130,
+      160,
       {
          {"paramId", GRIB_TYPE_LONG, 260242},
          {"discipline", GRIB_TYPE_LONG, 0},
@@ -2718,7 +2834,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
          {"typeOfStatisticalProcessing", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&from_start, &predefined_level},
+      {&from_start, &predefined_level, &has_bitmap},
    },
 
 /*
@@ -2738,7 +2854,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&point_in_time, &predefined_level},
+      {&point_in_time, &predefined_level, &has_bitmap},
    },
 /*
   uerra, egrr:  The albedo is 0 at night because it is dependent on solar radiation
@@ -2759,7 +2875,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
          {"typeOfFirstFixedSurface", GRIB_TYPE_LONG, 1},
          {NULL, },
       },
-      {&point_in_time, &predefined_level},
+      {&point_in_time, &predefined_level, &has_bitmap},
    },
    {
       "time_integrated_surface_clear-sky_solar_radiation_downwards",
@@ -3164,6 +3280,7 @@ uerra:edzw-an warning: /tmp/marm/uerra/cosmo/sample2/grib2/fc.200812021200+27.pl
       0,
       100,
       {
+         {"paramId", GRIB_TYPE_LONG, 260257},
          {"class", GRIB_TYPE_STRING, 0, "ur"},
          {"discipline", GRIB_TYPE_LONG, 0},
          {"parameterCategory", GRIB_TYPE_LONG, 6},
@@ -3243,7 +3360,6 @@ uerra, eswi-enfo:total_cloud_cover_sfc maximum value 96.4844 is not in [100,100]
       },
       {&point_in_time, &predefined_thickness},
    },
-
    {
       "soil_depth",
       0.005,
@@ -3264,10 +3380,10 @@ uerra, eswi-enfo:total_cloud_cover_sfc maximum value 96.4844 is not in [100,100]
 
    {
       "volumetric_field_capacity",
-      -1e-6,
-      1e-6,
-      -1e-6,
-      1e-6,
+      -1e+8,
+       1e+8,
+      -1e+8,
+       1e+8,
       {
          {"paramId", GRIB_TYPE_LONG, 260211},
          {"discipline", GRIB_TYPE_LONG, 2},
@@ -3280,10 +3396,10 @@ uerra, eswi-enfo:total_cloud_cover_sfc maximum value 96.4844 is not in [100,100]
 
    {
       "volumetric_wilting_point",
-      -1e-6,
-      1e-6,
-      -1e-6,
-      1e-6,
+      -1e+8,
+       1e+8,
+      -1e+8,
+       1e+8,
       {
          {"paramId", GRIB_TYPE_LONG, 260200},
          {"discipline", GRIB_TYPE_LONG, 2},
diff --git a/tools/bufr_compare.c b/tools/bufr_compare.c
index ba21690..0a06c36 100644
--- a/tools/bufr_compare.c
+++ b/tools/bufr_compare.c
@@ -1169,12 +1169,14 @@ static int compare_handles(grib_handle* handle1, grib_handle* handle2, grib_runt
 
     /* mask only if no -c option or headerMode (-H)*/
     if (blacklist && ( !listFromCommandLine || headerMode )) {
+        /* See ECC-245, GRIB-573, GRIB-915: Do not change handles in memory */
+        /*
         grib_string_list* nextb=blacklist;
         while (nextb) {
             grib_clear(handle1,nextb->value);
             grib_clear(handle2,nextb->value);
             nextb=nextb->next;
-        }
+        }*/
     }
 
     if ( listFromCommandLine && onlyListed ) {
diff --git a/version.sh b/version.sh
index ef984d4..a1632d6 100644
--- a/version.sh
+++ b/version.sh
@@ -14,7 +14,7 @@ PACKAGE_NAME='eccodes'
 
 # Package version
 ECCODES_MAJOR_VERSION=2
-ECCODES_MINOR_VERSION=2
+ECCODES_MINOR_VERSION=3
 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