diff --git a/ChangeLog b/ChangeLog
index 21650847092b9cf1ce7e9e262038b100d438ca79..87698934265622e82f58d55d31e80af0d6aa485c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,10 @@
         * using CGRIBEX library version 1.7.6
 	* Version 1.8.0 released
 
+2016-12-20  Uwe Schulzweida
+
+	* Added support for GRIB level type 210
+
 2016-11-24  Uwe Schulzweida
 
 	* Version 1.8.0rc5 released
diff --git a/app/cdi.c b/app/cdi.c
index a9c6599764b8af667df5509837bfb68064b6a2c0..b392bb6c5fb56f71dea2f8d2fe3fd000baf93024 100644
--- a/app/cdi.c
+++ b/app/cdi.c
@@ -252,9 +252,7 @@ void printInfo(int vdate, int vtime, char *varname, double level,
   else
     {
       int nvals_r = 0, nvals_i = 0;
-      double arrsum_r, arrsum_i, arrmean_r = 0, arrmean_i = 0;
-      arrsum_r = 0;
-      arrsum_i = 0;
+      double arrsum_r = 0, arrsum_i = 0, arrmean_r = 0, arrmean_i = 0;
 
       for ( i = 0; i < datasize; i++ )
 	{
@@ -331,16 +329,8 @@ static
 void printShortinfo(int streamID, int vlistID, int vardis)
 {
   int varID;
-  int gridsize = 0;
-  int gridID, zaxisID, param;
-  int vdate, vtime;
-  int ntsteps;
-  int levelsize;
-  int tsteptype, taxisID;
   char tmpname[CDI_MAX_NAME];
   char varname[CDI_MAX_NAME];
-  const char *modelptr, *instptr;
-  int datatype;
   int year, month, day, hour, minute, second;
   char pstr[4];
   char paramstr[32];
@@ -365,28 +355,28 @@ void printShortinfo(int streamID, int vlistID, int vardis)
 
       for ( varID = 0; varID < nvars; varID++ )
 	{
-	  param   = vlistInqVarParam(vlistID, varID);
-	  gridID  = vlistInqVarGrid(vlistID, varID);
-	  zaxisID = vlistInqVarZaxis(vlistID, varID);
+	  int param   = vlistInqVarParam(vlistID, varID);
+	  int gridID  = vlistInqVarGrid(vlistID, varID);
+	  int zaxisID = vlistInqVarZaxis(vlistID, varID);
 
 	  fprintf(stdout, "%6d : ", varID + 1);
 
 	  /* institute info */
-	  instptr = institutInqNamePtr(vlistInqVarInstitut(vlistID, varID));
+	  const char *instptr = institutInqNamePtr(vlistInqVarInstitut(vlistID, varID));
 	  strcpy(tmpname, "unknown");
 	  if ( instptr ) strncpy(tmpname, instptr, CDI_MAX_NAME);
 	  limit_string_length(tmpname, CDI_MAX_NAME);
 	  fprintf(stdout, "%-8s ", tmpname);
 
 	  /* source info */
-	  modelptr = modelInqNamePtr(vlistInqVarModel(vlistID, varID));
+	  const char *modelptr = modelInqNamePtr(vlistInqVarModel(vlistID, varID));
 	  strcpy(tmpname, "unknown");
 	  if ( modelptr ) strncpy(tmpname, modelptr, CDI_MAX_NAME);
 	  limit_string_length(tmpname, CDI_MAX_NAME);
 	  fprintf(stdout, "%-8s ", tmpname);
 
 	  /* tsteptype */
-	  tsteptype = vlistInqVarTsteptype(vlistID, varID);
+	  int tsteptype = vlistInqVarTsteptype(vlistID, varID);
 	  if      ( tsteptype == TSTEP_CONSTANT ) fprintf(stdout, "%-8s ", "constant");
 	  else if ( tsteptype == TSTEP_INSTANT  ) fprintf(stdout, "%-8s ", "instant");
 	  else if ( tsteptype == TSTEP_INSTANT2 ) fprintf(stdout, "%-8s ", "instant");
@@ -408,17 +398,17 @@ void printShortinfo(int streamID, int vlistID, int vardis)
             }
 
 	  /* layer info */
-	  levelsize = zaxisInqSize(zaxisID);
+          int levelsize = zaxisInqSize(zaxisID);
 	  fprintf(stdout, "%6d ", levelsize);
 	  fprintf(stdout, "%3d ", vlistZaxisIndex(vlistID, zaxisID) + 1);
 
 	  /* grid info */
-	  gridsize = gridInqSize(gridID);
+	  int gridsize = gridInqSize(gridID);
 	  fprintf(stdout, "%9d ", gridsize);
 	  fprintf(stdout, "%3d ", vlistGridIndex(vlistID, gridID) + 1);
 
 	  /* datatype */
-	  datatype = vlistInqVarDatatype(vlistID, varID);
+          int datatype = vlistInqVarDatatype(vlistID, varID);
 	  if      ( datatype == CDI_DATATYPE_PACK   ) strcpy(pstr, "P0");
 	  else if ( datatype > 0 && datatype <= 32  ) sprintf(pstr, "P%d", datatype);
 	  else if ( datatype == CDI_DATATYPE_CPX32  ) strcpy(pstr, "C32");
@@ -445,7 +435,7 @@ void printShortinfo(int streamID, int vlistID, int vardis)
 
 	  cdiParamToString(param, paramstr, sizeof(paramstr));
 
-	  if (vardis)
+	  if ( vardis )
             {
               vlistInqVarName(vlistID, varID, varname);
               fprintf(stdout, "%-14s", varname);
@@ -474,8 +464,8 @@ void printShortinfo(int streamID, int vlistID, int vardis)
           printSubtypeInfo(vlistID);
         }
 
-      taxisID = vlistInqTaxis(vlistID);
-      ntsteps = vlistNtsteps(vlistID);
+      int taxisID = vlistInqTaxis(vlistID);
+      int ntsteps = vlistNtsteps(vlistID);
 
       if ( ntsteps != 0 )
 	{
@@ -488,10 +478,8 @@ void printShortinfo(int streamID, int vlistID, int vardis)
 	    {
 	      if ( taxisInqType(taxisID) == TAXIS_RELATIVE )
 		{
-                  int calendar, tunits;
-
-		  vdate = taxisInqRdate(taxisID);
-		  vtime = taxisInqRtime(taxisID);
+		  int vdate = taxisInqRdate(taxisID);
+		  int vtime = taxisInqRtime(taxisID);
 
 		  cdiDecodeDate(vdate, &year, &month, &day);
 		  cdiDecodeTime(vtime, &hour, &minute, &second);
@@ -499,10 +487,10 @@ void printShortinfo(int streamID, int vlistID, int vardis)
 		  fprintf(stdout, "     RefTime = %4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d",
 			  year, month, day, hour, minute, second);
 
-		  tunits = taxisInqTunit(taxisID);
+		  int tunits = taxisInqTunit(taxisID);
 		  if ( tunits != CDI_UNDEFID )  fprintf(stdout, "  Units = %s", tunit2str(tunits));
 
-		  calendar = taxisInqCalendar(taxisID);
+		  int calendar = taxisInqCalendar(taxisID);
 		  if ( calendar != CDI_UNDEFID )  fprintf(stdout, "  Calendar = %s", calendar2str(calendar));
 
 		  if ( taxisHasBounds(taxisID) )
@@ -703,7 +691,7 @@ int handle_error(int cdiErrno, const char *fmt, ...)
 
   fprintf(stderr, "%s\n", cdiStringError(cdiErrno));
 
-  return (cdiErrno);
+  return cdiErrno;
 }
 
 static
@@ -844,51 +832,34 @@ int main(int argc, char *argv[])
 
   if ( fname1 )
     {
-      double *data = NULL;
-      double missval;
-      double level;
       int nmiss;
       int number;
       int datasize = 0;
-      int streamID1 = CDI_UNDEFID;
       int streamID2 = CDI_UNDEFID;
       int filetype;
       int gridID, zaxisID;
       int param;
-      int vdate, vtime;
-      int nrecs, nvars;
+      int nrecs;
       int levelID, levelsize;
       int nts = 0;
       int gridsize = 0;
       int recID;
-      int tsID;
-      int ntsteps = 0;
-      int taxisID1, taxisID2 = CDI_UNDEFID;
-      int vlistID1, vlistID2 = CDI_UNDEFID;
+      int taxisID2 = CDI_UNDEFID;
+      int vlistID2 = CDI_UNDEFID;
 
-      streamID1 = streamOpenRead(fname1);
-      if ( streamID1 < 0 )
-	return (handle_error(streamID1, "Open failed on %s", fname1));
+      int streamID1 = streamOpenRead(fname1);
+      if ( streamID1 < 0 ) return handle_error(streamID1, "Open failed on %s", fname1);
 
-      vlistID1 = streamInqVlist(streamID1);
+      int vlistID1 = streamInqVlist(streamID1);
 
-      if ( Longinfo )
-	{
-	  int ngrids, nzaxis;
-	  vlistPrint(vlistID1);
-	  ngrids = vlistNgrids(vlistID1);
-	  nzaxis = vlistNzaxis(vlistID1);
-	  for ( gridID = 0; gridID < ngrids; gridID++ ) gridPrint(gridID, gridID, 1);
-	  for ( zaxisID = 0; zaxisID < nzaxis; zaxisID++ ) zaxisPrint(zaxisID, zaxisID);
-	}
+      if ( Longinfo ) vlistPrint(vlistID1);
 
-      nvars   = vlistNvars(vlistID1);
-      taxisID1 = vlistInqTaxis(vlistID1);
-      ntsteps = vlistNtsteps(vlistID1);
+      int nvars = vlistNvars(vlistID1);
+      int taxisID1 = vlistInqTaxis(vlistID1);
+      int ntsteps = vlistNtsteps(vlistID1);
 
-      if (Debug)
-        fprintf(stderr, "nvars   = %d\n"
-                "ntsteps = %d\n", nvars, ntsteps);
+      if ( Debug )
+        fprintf(stderr, "nvars   = %d\nntsteps = %d\n", nvars, ntsteps);
 
       if ( fname2 )
         {
@@ -919,7 +890,7 @@ int main(int argc, char *argv[])
 
 	  streamID2 = streamOpenWrite(fname2, filetype);
 	  if ( streamID2 < 0 )
-	    return (handle_error(streamID2, "Open failed on %s", fname2));
+	    return handle_error(streamID2, "Open failed on %s", fname2);
 
 	  if ( DefaultByteorder != CDI_UNDEFID )
 	    streamDefByteorder(streamID2, DefaultByteorder);
@@ -936,14 +907,13 @@ int main(int argc, char *argv[])
 	}
 
       if ( vlistNumber(vlistID1) != CDI_REAL ) datasize *= 2;
-      data = (double *) malloc((size_t)datasize * sizeof (double));
+      double *data = (double *) malloc((size_t)datasize * sizeof (double));
 
       /*
 	nts = cdiInqTimeSize(streamID1);
       */
-      if (Debug)
-	printf("nts = %d streamID1 = %d, streamID2 = %d\n",
-               nts, streamID1, streamID2);
+      if ( Debug )
+	printf("nts = %d streamID1 = %d, streamID2 = %d\n", nts, streamID1, streamID2);
 
       if ( Shortinfo )
 	{
@@ -951,7 +921,7 @@ int main(int argc, char *argv[])
 	  printShortinfo(streamID1, vlistID1, Vardis);
 	}
 
-      tsID = 0;
+      int tsID = 0;
       if ( Info || fname2 )
       while ( (nrecs = streamInqTimestep(streamID1, tsID)) > 0 )
 	{
@@ -960,8 +930,8 @@ int main(int argc, char *argv[])
               taxisCopyTimestep(taxisID2, taxisID1);
               streamDefTimestep(streamID2, tsID);
             }
-	  vdate = taxisInqVdate(taxisID1);
-	  vtime = taxisInqVtime(taxisID1);
+	  int vdate = taxisInqVdate(taxisID1);
+	  int vtime = taxisInqVtime(taxisID1);
 
 	  if ( Debug )
 	    fprintf(stdout, "tsID = %d nrecs = %d date = %d time = %d\n", tsID, nrecs, vdate, vtime);
@@ -987,8 +957,8 @@ int main(int argc, char *argv[])
 			 varID, param, gridID, zaxisID, levelID);
 		  */
 		  gridsize = gridInqSize(gridID);
-		  level    = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1;
-		  missval  = vlistInqVarMissval(vlistID1, varID);
+		  double level   = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1;
+                  double missval = vlistInqVarMissval(vlistID1, varID);
 
 		  if ( Info )
 		    printInfo(vdate, vtime, varname, level, gridsize, number, nmiss, missval, data, Vardis);
@@ -1024,12 +994,12 @@ int main(int argc, char *argv[])
 			    varID, param, gridID, zaxisID);
 
 		  gridsize = gridInqSize(gridID);
-		  missval  = vlistInqVarMissval(vlistID1, varID);
+		  double missval = vlistInqVarMissval(vlistID1, varID);
 
 		  levelsize = zaxisInqSize(zaxisID);
 		  for ( levelID = 0; levelID < levelsize; levelID++ )
 		    {
-                      level = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1;
+                      double level = zaxisInqLevels(zaxisID, NULL) ? zaxisInqLevel(zaxisID, levelID) : levelID+1;
 		      streamReadVarSlice(streamID1, varID, levelID, data, &nmiss);
 
 		      if ( Info )
@@ -1040,6 +1010,7 @@ int main(int argc, char *argv[])
 		    }
 		}
 	    }
+
 	  tsID++;
         }
 
@@ -1059,7 +1030,7 @@ int main(int argc, char *argv[])
   if ( wTable )
     tableWrite(wTable, itableID);
 
-  return (0);
+  return 0;
 }
 /*
  * Local Variables:
diff --git a/app/printinfo.h b/app/printinfo.h
index 992f25f933bcd139d3d8a181962cda1f2de4684a..f019c8ef12a8d9e2766f96d1ae7ee7f3f3d10169 100644
--- a/app/printinfo.h
+++ b/app/printinfo.h
@@ -316,7 +316,7 @@ void printGridInfoKernel(int gridID, int index, bool lproj)
         }
 
       char name[CDI_MAX_NAME]; name[0] = 0;
-      cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, name);
+      cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, name);
       if ( gridtype == GRID_PROJECTION || name[0] )
         {
           if ( name[0] == 0 ) strcpy(name, "undefined");
@@ -506,7 +506,7 @@ void printZaxisInfo(int vlistID)
       set_text_color(stdout, RESET, BLUE);
 #endif
       if ( zaxistype == ZAXIS_GENERIC && ltype != 0 )
-        fprintf(stdout, "%-12s (ltype=%3d) :", zaxisname, ltype);
+        fprintf(stdout, "%-12s (ltype=%3d)", zaxisname, ltype);
       else
         fprintf(stdout, "%-24s", zaxisname);
       my_reset_text_color(stdout);
diff --git a/configure b/configure
index b73e50e8b98457676afdfcf62c304bf0897e85cd..0b8a769ba3d2c1231ed029a4a84b7cb710983f17 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for cdi 1.8.0rc5.
+# Generated by GNU Autoconf 2.68 for cdi 1.8.0rc6.
 #
 # Report bugs to <http://mpimet.mpg.de/cdi>.
 #
@@ -570,8 +570,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='cdi'
 PACKAGE_TARNAME='cdi'
-PACKAGE_VERSION='1.8.0rc5'
-PACKAGE_STRING='cdi 1.8.0rc5'
+PACKAGE_VERSION='1.8.0rc6'
+PACKAGE_STRING='cdi 1.8.0rc6'
 PACKAGE_BUGREPORT='http://mpimet.mpg.de/cdi'
 PACKAGE_URL=''
 
@@ -1460,7 +1460,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures cdi 1.8.0rc5 to adapt to many kinds of systems.
+\`configure' configures cdi 1.8.0rc6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1530,7 +1530,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of cdi 1.8.0rc5:";;
+     short | recursive ) echo "Configuration of cdi 1.8.0rc6:";;
    esac
   cat <<\_ACEOF
 
@@ -1723,7 +1723,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-cdi configure 1.8.0rc5
+cdi configure 1.8.0rc6
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2568,7 +2568,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by cdi $as_me 1.8.0rc5, which was
+It was created by cdi $as_me 1.8.0rc6, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -3520,7 +3520,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='cdi'
- VERSION='1.8.0rc5'
+ VERSION='1.8.0rc6'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -23389,7 +23389,7 @@ Usage: $0 [OPTIONS]
 Report bugs to <bug-libtool@gnu.org>."
 
 lt_cl_version="\
-cdi config.lt 1.8.0rc5
+cdi config.lt 1.8.0rc6
 configured by $0, generated by GNU Autoconf 2.68.
 
 Copyright (C) 2011 Free Software Foundation, Inc.
@@ -27150,7 +27150,19 @@ fi
 
 
                             if test "x$NC_CONFIG" != "x"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking netcdf's nc2 support" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking netcdf's OpenDAP support" >&5
+$as_echo_n "checking netcdf's OpenDAP support... " >&6; }
+                                   if test "x$($NC_CONFIG --has-dap)" = "xyes"; then :
+
+$as_echo "#define HAVE_LIBNC_DAP 1" >>confdefs.h
+
+                                          { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+                                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking netcdf's nc2 support" >&5
 $as_echo_n "checking netcdf's nc2 support... " >&6; }
                                    if test "x$($NC_CONFIG --has-nc2)" = "xyes"; then :
 
@@ -27412,7 +27424,7 @@ for ac_lib in '' netcdf; do
     ac_res="none required"
   else
     ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    LIBS="-l$ac_lib -lhdf5 $ac_func_search_save_LIBS"
   fi
   if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_search_H5TS_mutex_lock=$ac_res
@@ -27473,7 +27485,7 @@ for ac_lib in '' netcdf; do
     ac_res="none required"
   else
     ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    LIBS="-l$ac_lib -lhdf5 $ac_func_search_save_LIBS"
   fi
   if ac_fn_c_try_link "$LINENO"; then :
   ac_cv_search_H5get_libversion=$ac_res
@@ -30522,7 +30534,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by cdi $as_me 1.8.0rc5, which was
+This file was extended by cdi $as_me 1.8.0rc6, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -30588,7 +30600,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-cdi config.status 1.8.0rc5
+cdi config.status 1.8.0rc6
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 6e9951662482c9f527fdb613954ab5630fdf82f5..b20816481758044b7431a22476cc8a488016636d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@
 #  autoconf 2.68
 #  libtool  2.4.2
 
-AC_INIT([cdi], [1.8.0rc5], [http://mpimet.mpg.de/cdi])
+AC_INIT([cdi], [1.8.0rc6], [http://mpimet.mpg.de/cdi])
 
 AC_DEFINE_UNQUOTED(CDI, ["$PACKAGE_VERSION"], [CDI version])
 
diff --git a/doc/tex/formats.tex b/doc/tex/formats.tex
index 7992f2864fbd9286703214c69a226d5548758d96..4a3b371a10c7c4b811ad9714cf34356cc6388751 100644
--- a/doc/tex/formats.tex
+++ b/doc/tex/formats.tex
@@ -57,7 +57,6 @@ GRIB1  & GRIB2 & & \\
      8  &    8 & nominalTop                 & Norminal top of atmosphere \\
      9  &    9 & seaBottom                   & Sea bottom \\
    10  &  10 & entireAtmosphere        & Entire atmosphere \\
-   99  & --  & --                                & Isobaric level in Pa \\
  100  & 100 & isobaricInhPa              & Isobaric level in hPa \\
  102  & 101 & meanSea                     & Mean sea level \\
  103  & 102 & heightAboveSea          & Altitude above mean sea level \\
@@ -76,6 +75,7 @@ GRIB1  & GRIB2 & & \\
  165  & 165 & --                               & Bottom Of Sediment Layer Penetrated By \\ 
          &        &                                    & Thermal Wave  \\
  166  & 166 & --                               & Mixing Layer  \\
+ 210  & --   & isobaricInPa                & Isobaric level in Pa \\
 \hline
 \end{tabular}
 
diff --git a/m4/acx_options.m4 b/m4/acx_options.m4
index ed3ebb4548ecac6acbc9e6fd9f9da85891bd1938..58ca0f42b6ba492c8dfb42f22b51007403e78eb1 100644
--- a/m4/acx_options.m4
+++ b/m4/acx_options.m4
@@ -80,6 +80,10 @@ AC_ARG_WITH([netcdf],
                             NETCDF_LIBS=" -lnetcdf"
                             AC_CHECK_PROG(NC_CONFIG,nc-config,nc-config)
                             AS_IF([test "x$NC_CONFIG" != "x"],
+                                  [AC_MSG_CHECKING([netcdf's OpenDAP support])
+                                   AS_IF([test "x$($NC_CONFIG --has-dap)" = "xyes"],
+                                         [AC_DEFINE([HAVE_LIBNC_DAP],[1],[Define to 1 for NetCDF OpenDAP])
+                                          AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no])])]
                                   [AC_MSG_CHECKING([netcdf's nc2 support])
                                    AS_IF([test "x$($NC_CONFIG --has-nc2)" = "xyes"],
                                          [AC_DEFINE([HAVE_NETCDF2],[1],[Define to 1 for NetCDF2 support])
@@ -137,11 +141,11 @@ AC_ARG_WITH([netcdf],
 
 AS_IF([test "x$ENABLE_NC4HDF5" = "xyes"],
       [AC_SEARCH_LIBS([H5TS_mutex_lock], [netcdf],
-               [AC_DEFINE([HAVE_NC4HDF5_THREADSAFE],[1],[Define to 1 for NetCDF4/HDF5 threadsafe support])],,)])
+               [AC_DEFINE([HAVE_NC4HDF5_THREADSAFE],[1],[Define to 1 for NetCDF4/HDF5 threadsafe support])],,[-lhdf5])])
 
 AS_IF([test "x$ENABLE_NC4HDF5" = "xyes"],
       [AC_SEARCH_LIBS([H5get_libversion], [netcdf],
-               [AC_DEFINE([HAVE_H5GET_LIBVERSION],[1],[Define to 1 for H5get_libversion support])],,)])
+               [AC_DEFINE([HAVE_H5GET_LIBVERSION],[1],[Define to 1 for H5get_libversion support])],,[-lhdf5])])
 
 AC_SUBST([ENABLE_NETCDF])
 AC_SUBST([ENABLE_NC2])
diff --git a/src/Makefile.in b/src/Makefile.in
index be115a80ebafb926b136c7920686d5963e4ee8e5..234a5d46f45d3ac46d56f25594a163057b0e4ff5 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -941,8 +941,8 @@ distclean-generic:
 maintainer-clean-generic:
 	@echo "This command is intended for maintainers to use"
 	@echo "it deletes files that may require special tools to rebuild."
-@ENABLE_CDI_LIB_FALSE@uninstall-local:
 @ENABLE_CDI_LIB_FALSE@install-exec-local:
+@ENABLE_CDI_LIB_FALSE@uninstall-local:
 clean: clean-am
 
 clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
diff --git a/src/cdf_write.c b/src/cdf_write.c
index 8e0d3b8db8fceb6d8e36f702d94e92d72e95718b..8d94bffbe36d49cdbfc0e23f455d09358176c85a 100644
--- a/src/cdf_write.c
+++ b/src/cdf_write.c
@@ -282,7 +282,7 @@ void cdf_get_gmapvarname(int gridID, char *gmapvarname)
 {
   int pgridID = gridID;
   char mapping[CDI_MAX_NAME]; mapping[0] = 0;
-  cdiGridInqKeyStr(pgridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping);
+  cdiGridInqKeyStr(pgridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping);
 
   if ( !mapping[0] )
     {
@@ -290,12 +290,12 @@ void cdf_get_gmapvarname(int gridID, char *gmapvarname)
       if ( projID != CDI_UNDEFID )
         {
           pgridID = projID;
-          cdiGridInqKeyStr(pgridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping);
+          cdiGridInqKeyStr(pgridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping);
         }
     }
 
   if ( mapping[0] )
-    cdiGridInqKeyStr(pgridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, gmapvarname);
+    cdiGridInqKeyStr(pgridID, CDI_KEY_MAPPING, CDI_MAX_NAME, gmapvarname);
 }
 
 static
@@ -534,32 +534,6 @@ int cdfDefVar(stream_t *streamptr, int varID)
         }
     }
 
-  if ( streamptr->comptype == CDI_COMPRESS_SZIP )
-    {
-      if ( lchunk && (streamptr->filetype == CDI_FILETYPE_NC4 || streamptr->filetype == CDI_FILETYPE_NC4C) )
-        {
-#if defined (NC_SZIP_NN_OPTION_MASK)
-          cdfDefVarSzip(fileID, ncvarid);
-#else
-          static bool lwarn = true;
-          if ( lwarn )
-            {
-              lwarn = false;
-              Warning("NetCDF4/SZIP compression not available!");
-            }
-#endif
-        }
-      else
-        {
-          static bool lwarn = true;
-          if ( lwarn )
-            {
-              lwarn = false;
-              Warning("SZIP compression is only available for NetCDF4!");
-            }
-        }
-    }
-
   if ( stdname && *stdname )
     cdf_put_att_text(fileID, ncvarid, "standard_name", strlen(stdname), stdname);
 
diff --git a/src/cdi.h b/src/cdi.h
index 8b97d62f4a9b7e523443ea9fd5fa1134258bd736..b736662f67699e7472e3c02c0176b4c036329717 100644
--- a/src/cdi.h
+++ b/src/cdi.h
@@ -735,7 +735,7 @@ int     gridInqMaskGME(int gridID, int mask[]);
 void    gridDefMask(int gridID, const int mask[]);
 int     gridInqMask(int gridID, int mask[]);
 
-void    gridPrint(int gridID, int index, int opt);
+void    gridPrint(int gridID, int opt);
 
 /*      gridCreate: Create a horizontal Grid */
 int     gridCreate(int gridtype, int size);
@@ -801,8 +801,8 @@ int     gridInqYvals(int gridID, double yvals[]);
 #define  CDI_KEY_YLONGNAME   913  // Y-axis longname
 #define  CDI_KEY_YUNITS      914  // Y-axis units
 #define  CDI_KEY_VDIMNAME    920  // Vertex dimension name
-#define  CDI_KEY_MAPNAME     921  // Grid mapping var name
-#define  CDI_KEY_MAPPING     922  // Grid mapping name
+#define  CDI_KEY_MAPPING     921  // Grid mapping var name
+#define  CDI_KEY_MAPNAME     922  // Grid mapping name
 
 /* CDI zaxis string key values */
 #define  CDI_KEY_NAME        941  // Z-axis name
@@ -981,7 +981,7 @@ int     zaxisInqSize(int zaxisID);
 /*      zaxisDuplicate: Duplicate a Z-axis */
 int     zaxisDuplicate(int zaxisID);
 
-void    zaxisPrint(int zaxisID, int index);
+void    zaxisPrint(int zaxisID);
 
 /*      zaxisDefLevels: Define the levels of a Z-axis */
 void    zaxisDefLevels(int zaxisID, const double levels[]);
diff --git a/src/cdi.inc b/src/cdi.inc
index 8bb57c03bdf77df1589015942f99fd9edc7c1f9d..5c469f15ee2a9296163c5c46cc6afff6f8a69808 100644
--- a/src/cdi.inc
+++ b/src/cdi.inc
@@ -4,7 +4,7 @@
 !
 ! Author:
 ! -------
-! Uwe Schulzweida, MPI-MET, Hamburg,   November 2016
+! Uwe Schulzweida, MPI-MET, Hamburg,   January 2017
 !
 
       INTEGER    CDI_MAX_NAME          
@@ -1495,7 +1495,6 @@
 
 !                     gridPrint
 !                                    (INTEGER         gridID,
-!                                     INTEGER         index,
 !                                     INTEGER         opt)
       EXTERNAL        gridPrint
 
@@ -1962,8 +1961,7 @@
       EXTERNAL        zaxisDuplicate
 
 !                     zaxisPrint
-!                                    (INTEGER         zaxisID,
-!                                     INTEGER         index)
+!                                    (INTEGER         zaxisID)
       EXTERNAL        zaxisPrint
 
 !                     zaxisDefLevels
diff --git a/src/cdiFortran.c b/src/cdiFortran.c
index a983d1598383af4d65470299f66b0c820cd0d310..840dbd4bd8d245824d85c2e24f41121c80d8f746 100644
--- a/src/cdiFortran.c
+++ b/src/cdiFortran.c
@@ -308,7 +308,7 @@ FCALLSCSUB2 (gridDefMaskGME, GRIDDEFMASKGME, griddefmaskgme, INT, INTV)
 FCALLSCFUN2 (INT, gridInqMaskGME, GRIDINQMASKGME, gridinqmaskgme, INT, INTV)
 FCALLSCSUB2 (gridDefMask, GRIDDEFMASK, griddefmask, INT, INTV)
 FCALLSCFUN2 (INT, gridInqMask, GRIDINQMASK, gridinqmask, INT, INTV)
-FCALLSCSUB3 (gridPrint, GRIDPRINT, gridprint, INT, INT, INT)
+FCALLSCSUB2 (gridPrint, GRIDPRINT, gridprint, INT, INT)
 FCALLSCFUN2 (INT, gridCreate, GRIDCREATE, gridcreate, INT, INT)
 FCALLSCSUB1 (gridDestroy, GRIDDESTROY, griddestroy, INT)
 FCALLSCFUN1 (INT, gridDuplicate, GRIDDUPLICATE, gridduplicate, INT)
@@ -409,7 +409,7 @@ FCALLSCSUB1 (zaxisDestroy, ZAXISDESTROY, zaxisdestroy, INT)
 FCALLSCFUN1 (INT, zaxisInqType, ZAXISINQTYPE, zaxisinqtype, INT)
 FCALLSCFUN1 (INT, zaxisInqSize, ZAXISINQSIZE, zaxisinqsize, INT)
 FCALLSCFUN1 (INT, zaxisDuplicate, ZAXISDUPLICATE, zaxisduplicate, INT)
-FCALLSCSUB2 (zaxisPrint, ZAXISPRINT, zaxisprint, INT, INT)
+FCALLSCSUB1 (zaxisPrint, ZAXISPRINT, zaxisprint, INT)
 FCALLSCSUB2 (zaxisDefLevels, ZAXISDEFLEVELS, zaxisdeflevels, INT, DOUBLEV)
 FCALLSCFUN2 (INT, zaxisInqLevels, ZAXISINQLEVELS, zaxisinqlevels, INT, DOUBLEV)
 FCALLSCSUB3 (zaxisDefLevel, ZAXISDEFLEVEL, zaxisdeflevel, INT, INT, DOUBLE)
diff --git a/src/cdi_int.h b/src/cdi_int.h
index d2f9c36253026fa6ffc4e556447e575dcc7553e3..8e02463b320f9c18729ef94fd0363230766a82a2 100644
--- a/src/cdi_int.h
+++ b/src/cdi_int.h
@@ -351,7 +351,6 @@ int     streamInqFileID(int streamID);
 
 void    gridDefHasDims(int gridID, int hasdims);
 int     gridInqHasDims(int gridID);
-const char *gridNamePtr(int gridtype);
 const char   *zaxisNamePtr(int leveltype);
 int     zaxisInqLevelID(int zaxisID, double level);
 
diff --git a/src/cgribex.h b/src/cgribex.h
index 4b40906d40475589a664c9ff4da07072b55a70f2..7b4d589a1aff6624ff49934beecf690eada2abe2 100644
--- a/src/cgribex.h
+++ b/src/cgribex.h
@@ -16,6 +16,7 @@
 #define  GRIB1_LTYPE_ATMOSPHERE           10
 #define  GRIB1_LTYPE_99                   99
 #define  GRIB1_LTYPE_ISOBARIC            100
+#define  GRIB1_LTYPE_ISOBARIC_PA         210
 #define  GRIB1_LTYPE_MEANSEA             102
 #define  GRIB1_LTYPE_ALTITUDE            103
 #define  GRIB1_LTYPE_HEIGHT              105
@@ -32,7 +33,6 @@
 #define  GRIB1_LTYPE_SEDIMENT_BOTTOM_TA  164  /* Bottom Of Thermally Active Sediment Layer             */
 #define  GRIB1_LTYPE_SEDIMENT_BOTTOM_TW  165  /* Bottom Of Sediment Layer Penetrated By Thermal Wave   */
 #define  GRIB1_LTYPE_MIX_LAYER           166  /* Mixing Layer                                          */
-#define  GRIB1_LTYPE_99_MARGIN          1000
 
 /* GRIB1 Data representation type (Grid Type) [Table 6] */
 #define  GRIB1_GTYPE_LATLON                0  /*  latitude/longitude                                   */
diff --git a/src/cgribexlib.c b/src/cgribexlib.c
index fba6850c0105f17fe8ceb0ddcff6064abfc99483..d7a0ad3e428cd754d13d0916162f5c20ba6c000b 100644
--- a/src/cgribexlib.c
+++ b/src/cgribexlib.c
@@ -1,5 +1,5 @@
 
-/* Automatically generated by m214003 at 2016-11-05, do not edit */
+/* Automatically generated by m214003 at 2016-12-20, do not edit */
 
 /* CGRIBEXLIB_VERSION="1.7.6" */
 
@@ -8623,19 +8623,20 @@ int decodePDS(unsigned char *pds, int *isec0, int *isec1)
   ISEC1_LevelType      = PDS_LevelType;
 
   if ( (ISEC1_LevelType !=  20) && 
-       (ISEC1_LevelType != GRIB1_LTYPE_99)        && 
-       (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC)  && 
-       (ISEC1_LevelType != GRIB1_LTYPE_ALTITUDE)  && 
-       (ISEC1_LevelType != GRIB1_LTYPE_HEIGHT)    && 
-       (ISEC1_LevelType != GRIB1_LTYPE_SIGMA)     && 
-       (ISEC1_LevelType != GRIB1_LTYPE_HYBRID)    && 
-       (ISEC1_LevelType != GRIB1_LTYPE_LANDDEPTH) && 
-       (ISEC1_LevelType != GRIB1_LTYPE_ISENTROPIC) && 
+       (ISEC1_LevelType != GRIB1_LTYPE_99)           && 
+       (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC)     && 
+       (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC_PA)  && 
+       (ISEC1_LevelType != GRIB1_LTYPE_ALTITUDE)     && 
+       (ISEC1_LevelType != GRIB1_LTYPE_HEIGHT)       && 
+       (ISEC1_LevelType != GRIB1_LTYPE_SIGMA)        && 
+       (ISEC1_LevelType != GRIB1_LTYPE_HYBRID)       && 
+       (ISEC1_LevelType != GRIB1_LTYPE_LANDDEPTH)    && 
+       (ISEC1_LevelType != GRIB1_LTYPE_ISENTROPIC)   && 
        (ISEC1_LevelType != 115) && 
        (ISEC1_LevelType != 117) && 
        (ISEC1_LevelType != 125) && 
        (ISEC1_LevelType != 127) && 
-       (ISEC1_LevelType != GRIB1_LTYPE_SEADEPTH)  && 
+       (ISEC1_LevelType != GRIB1_LTYPE_SEADEPTH)     && 
        (ISEC1_LevelType != 210) )
     {
       ISEC1_Level1 = PDS_Level1;
@@ -11304,14 +11305,15 @@ void encodePDS(GRIBPACK *lpds, long pdsLen, int *isec1)
   Put1Byte(ISEC1_Parameter);      /*  8 Parameter Code           */
   Put1Byte(ISEC1_LevelType);      /*  9 Type of level            */
   if ( (ISEC1_LevelType !=  20) &&
-       (ISEC1_LevelType != GRIB1_LTYPE_99)         &&
-       (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC)   &&
-       (ISEC1_LevelType != GRIB1_LTYPE_ALTITUDE)   &&
-       (ISEC1_LevelType != GRIB1_LTYPE_HEIGHT)     &&
-       (ISEC1_LevelType != GRIB1_LTYPE_SIGMA)      &&
-       (ISEC1_LevelType != GRIB1_LTYPE_HYBRID)     &&
-       (ISEC1_LevelType != GRIB1_LTYPE_LANDDEPTH)  &&
-       (ISEC1_LevelType != GRIB1_LTYPE_ISENTROPIC) &&
+       (ISEC1_LevelType != GRIB1_LTYPE_99)           &&
+       (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC)     &&
+       (ISEC1_LevelType != GRIB1_LTYPE_ISOBARIC_PA)  &&
+       (ISEC1_LevelType != GRIB1_LTYPE_ALTITUDE)     &&
+       (ISEC1_LevelType != GRIB1_LTYPE_HEIGHT)       &&
+       (ISEC1_LevelType != GRIB1_LTYPE_SIGMA)        &&
+       (ISEC1_LevelType != GRIB1_LTYPE_HYBRID)       &&
+       (ISEC1_LevelType != GRIB1_LTYPE_LANDDEPTH)    &&
+       (ISEC1_LevelType != GRIB1_LTYPE_ISENTROPIC)   &&
        (ISEC1_LevelType != 115) &&
        (ISEC1_LevelType != 117) &&
        (ISEC1_LevelType != 125) &&
@@ -13709,7 +13711,7 @@ void encode_dummy(void)
   (void) encode_array_unrolled_double(0, 0, 0, NULL, NULL, 0, 0, NULL);
   (void) encode_array_unrolled_float(0, 0, 0, NULL, NULL, 0, 0, NULL);
 }
-static const char grb_libvers[] = "1.7.6" " of ""Nov  5 2016"" ""11:59:02";
+static const char grb_libvers[] = "1.7.6" " of ""Dec 20 2016"" ""19:55:24";
 const char *
 cgribexLibraryVersion(void)
 {
diff --git a/src/grid.c b/src/grid.c
index 63bb9355810267e763f482fb90b3b3f062f8f254..fb64c102000192f9f5d6dedc64095aa1997e7aec 100644
--- a/src/grid.c
+++ b/src/grid.c
@@ -574,8 +574,8 @@ void *grid_key_to_ptr(grid_t *gridptr, int key)
     case CDI_KEY_XDIMNAME:   keyptr = (void*)gridptr->x.dimname; break;
     case CDI_KEY_YDIMNAME:   keyptr = (void*)gridptr->y.dimname; break;
     case CDI_KEY_VDIMNAME:   keyptr = (void*)gridptr->vdimname; break;
-    case CDI_KEY_MAPNAME:    keyptr = (void*)gridptr->mapname; break;
-    case CDI_KEY_MAPPING:    keyptr = (void*)gridptr->mapping; break;
+    case CDI_KEY_MAPPING:    keyptr = (void*)gridptr->mapname; break;
+    case CDI_KEY_MAPNAME:    keyptr = (void*)gridptr->mapping; break;
     }
 
   return keyptr;
@@ -969,7 +969,7 @@ int gridInqProjType(int gridID)
   if ( projtype == -1 )
     {
       char mapping[CDI_MAX_NAME]; mapping[0] = 0;
-      cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping);
+      cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping);
       if ( mapping[0] )
         {
           if      ( strcmp(mapping, "rotated_latitude_longitude") == 0 )   projtype = CDI_PROJ_RLL;
@@ -1782,7 +1782,7 @@ void gridInqParamRLL(int gridID, double *xpole, double *ypole, double *angle)
 
   const char *projection = "rotated_latitude_longitude";
   char mapping[CDI_MAX_NAME]; mapping[0] = 0;
-  cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping);
+  cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping);
   if ( mapping[0] && strcmp(mapping, projection) == 0 )
     {
       int atttype, attlen;
@@ -1823,10 +1823,10 @@ void gridInqParamRLL(int gridID, double *xpole, double *ypole, double *angle)
 */
 void gridDefParamRLL(int gridID, double xpole, double ypole, double angle)
 {
-  cdiGridDefKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, "rotated_pole");
+  cdiGridDefKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, "rotated_pole");
 
   const char *mapping = "rotated_latitude_longitude";
-  cdiGridDefKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping);
+  cdiGridDefKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping);
   cdiDefAttTxt(gridID, CDI_GLOBAL, "grid_mapping_name", strlen(mapping), mapping);
   cdiDefAttFlt(gridID, CDI_GLOBAL, "grid_north_pole_longitude", CDI_DATATYPE_FLT64, 1, &xpole);
   cdiDefAttFlt(gridID, CDI_GLOBAL, "grid_north_pole_latitude", CDI_DATATYPE_FLT64, 1, &ypole);
@@ -3150,7 +3150,7 @@ printBounds(FILE *fp, int dig, const char prefix[], size_t nbyte0,
 
 static void
 printMask(FILE *fp, const char prefix[], size_t nbyte0,
-          size_t n, const mask_t mask[])
+          size_t n, const int mask[])
 {
   fputs(prefix, fp);
   size_t nbyte = nbyte0;
@@ -3161,7 +3161,7 @@ printMask(FILE *fp, const char prefix[], size_t nbyte0,
           fprintf(fp, "\n%*s", (int)nbyte0, "");
           nbyte = nbyte0;
         }
-      nbyte += (size_t)fprintf(fp, "%d ", (int)mask[i]);
+      nbyte += (size_t)fprintf(fp, "%d ", mask[i]);
     }
   fputs("\n", fp);
 }
@@ -3237,19 +3237,18 @@ void gridPrintAttributes(FILE *fp, int gridID)
 }
 
 static
-void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
+void gridPrintKernel(int gridID, int opt, FILE *fp)
 {
   int xdim, ydim;
+  char attstr[CDI_MAX_NAME];
+  char attstr2[CDI_MAX_NAME];
   unsigned char uuidOfHGrid[CDI_UUID_SIZE];
-  int gridID = gridptr->self;
-  const double *area    = gridInqAreaPtr(gridID);
-  const double *xvals   = gridInqXvalsPtr(gridID);
-  const double *yvals   = gridInqYvalsPtr(gridID);
-  const double *xbounds = gridInqXboundsPtr(gridID);
-  const double *ybounds = gridInqYboundsPtr(gridID);
+  size_t nxvals = (size_t) gridInqXvals(gridID, NULL);
+  size_t nyvals = (size_t) gridInqYvals(gridID, NULL);
+  size_t nxbounds = (size_t) gridInqXbounds(gridID, NULL);
+  size_t nybounds = (size_t) gridInqYbounds(gridID, NULL);
 
   int type     = gridInqType(gridID);
-  int trunc    = gridInqTrunc(gridID);
   int gridsize = gridInqSize(gridID);
   int xsize    = gridInqXsize(gridID);
   int ysize    = gridInqYsize(gridID);
@@ -3258,14 +3257,7 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
 
   int dig = (prec == CDI_DATATYPE_FLT64) ? 15 : 7;
 
-  struct gridaxis_t *xaxis = &gridptr->x;
-  struct gridaxis_t *yaxis = &gridptr->y;
-
-  fprintf(fp, "#\n"
-          "# gridID %d\n"
-          "#\n"
-          "gridtype  = %s\n"
-          "gridsize  = %d\n", index, gridNamePtr(type), gridsize);
+  fprintf(fp, "gridtype  = %s\n" "gridsize  = %d\n", gridNamePtr(type), gridsize);
 
   if ( type != GRID_GME )
     {
@@ -3275,25 +3267,35 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
           if ( ysize > 0 ) fprintf(fp, "ysize     = %d\n", ysize);
         }
 
-      if ( xvals )
+      if ( nxvals > 0 )
         {
-          if ( xaxis->name[0]     )  fprintf(fp, "xname     = %s\n", xaxis->name);
-          if ( xaxis->longname[0] )  fprintf(fp, "xlongname = %s\n", xaxis->longname);
-          if ( xaxis->units[0]    )  fprintf(fp, "xunits    = %s\n", xaxis->units);
-          if ( xaxis->dimname[0] && strcmp(xaxis->name, xaxis->dimname) )
-            fprintf(fp, "xdimname  = %s\n", xaxis->dimname);
+          attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XNAME, CDI_MAX_NAME, attstr);
+          if ( attstr[0] )  fprintf(fp, "xname     = %s\n", attstr);
+          attstr2[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XDIMNAME, CDI_MAX_NAME, attstr2);
+          if ( attstr2[0] && strcmp(attstr, attstr2) )  fprintf(fp, "xdimname  = %s\n", attstr2);
+          attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XLONGNAME, CDI_MAX_NAME, attstr);
+          if ( attstr[0] )  fprintf(fp, "xlongname = %s\n", attstr);
+          attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_XUNITS, CDI_MAX_NAME, attstr);
+          if ( attstr[0] )  fprintf(fp, "xunits    = %s\n", attstr);
         }
-      if ( yvals )
+
+      if ( nyvals > 0 )
         {
-          if ( yaxis->name[0]     )  fprintf(fp, "yname     = %s\n", yaxis->name);
-          if ( yaxis->longname[0] )  fprintf(fp, "ylongname = %s\n", yaxis->longname);
-          if ( yaxis->units[0]    )  fprintf(fp, "yunits    = %s\n", yaxis->units);
-          if ( yaxis->dimname[0] && strcmp(yaxis->name, yaxis->dimname) )
-            fprintf(fp, "ydimname  = %s\n", yaxis->dimname);
+          attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YNAME, CDI_MAX_NAME, attstr);
+          if ( attstr[0] )  fprintf(fp, "yname     = %s\n", attstr);
+          attstr2[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YDIMNAME, CDI_MAX_NAME, attstr2);
+          if ( attstr2[0] && strcmp(attstr, attstr2) )  fprintf(fp, "ydimname  = %s\n", attstr2);
+          attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YLONGNAME, CDI_MAX_NAME, attstr);
+          if ( attstr[0] )  fprintf(fp, "ylongname = %s\n", attstr);
+          attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_YUNITS, CDI_MAX_NAME, attstr);
+          if ( attstr[0] )  fprintf(fp, "yunits    = %s\n", attstr);
         }
 
       if ( type == GRID_UNSTRUCTURED || type == GRID_CURVILINEAR )
-        if ( gridptr->vdimname[0] ) fprintf(fp, "vdimname  = %s\n", gridptr->vdimname);
+        {
+          attstr[0] = 0; cdiGridInqKeyStr(gridID, CDI_KEY_VDIMNAME, CDI_MAX_NAME, attstr);
+          if ( attstr[0] ) fprintf(fp, "vdimname  = %s\n", attstr);
+        }
       if ( type == GRID_UNSTRUCTURED && nvertex > 0 ) fprintf(fp, "nvertex   = %d\n", nvertex);
     }
 
@@ -3307,7 +3309,7 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
     case GRID_CURVILINEAR:
     case GRID_UNSTRUCTURED:
       {
-        if ( type == GRID_GAUSSIAN || type == GRID_GAUSSIAN_REDUCED ) fprintf(fp, "np        = %d\n", gridptr->np);
+        if ( type == GRID_GAUSSIAN || type == GRID_GAUSSIAN_REDUCED ) fprintf(fp, "np        = %d\n", gridInqNP(gridID));
 
 	if ( type == GRID_CURVILINEAR || type == GRID_UNSTRUCTURED )
 	  {
@@ -3350,7 +3352,7 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
               }
           }
 
-	if ( xvals )
+	if ( nxvals > 0 )
 	  {
 	    double xfirst = 0.0, xinc = 0.0;
 
@@ -3368,21 +3370,24 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
 	      }
 	    else
 	      {
+                double *xvals = (double*) Malloc(nxvals*sizeof(double));
+                gridInqXvals(gridID, xvals);
                 static const char prefix[] = "xvals     = ";
-                printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1,
-                                       (size_t)(xdim > 0 ? xdim : 0), xvals);
+                printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, nxvals, xvals);
+                Free(xvals);
 	      }
 	  }
 
-	if ( xbounds )
+	if ( nxbounds )
 	  {
+            double *xbounds = (double*) Malloc(nxbounds*sizeof(double));
+            gridInqXbounds(gridID, xbounds);
             static const char prefix[] = "xbounds   = ";
-            printBounds(fp, dig, prefix, sizeof(prefix)-1,
-                        (size_t)(xdim > 0 ? xdim : 0),
-                        (size_t)(nvertex > 0 ? nvertex : 0), xbounds);
+            printBounds(fp, dig, prefix, sizeof(prefix)-1, xdim, nvertex, xbounds);
+            Free(xbounds);
 	  }
 
-	if ( yvals )
+	if ( nyvals > 0 )
 	  {
 	    double yfirst = 0.0, yinc = 0.0;
 
@@ -3400,25 +3405,30 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
 	      }
 	    else
 	      {
+                double *yvals = (double*) Malloc(nyvals*sizeof(double));
+                gridInqYvals(gridID, yvals);
                 static const char prefix[] = "yvals     = ";
-                printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1,
-                                       (size_t)(ydim > 0 ? ydim : 0), yvals);
+                printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, nyvals, yvals);
+                Free(yvals);
 	      }
 	  }
 
-	if ( ybounds )
+	if ( nybounds )
 	  {
+            double *ybounds = (double*) Malloc(nybounds*sizeof(double));
+            gridInqYbounds(gridID, ybounds);
             static const char prefix[] = "ybounds   = ";
-            printBounds(fp, dig, prefix, sizeof(prefix)-1,
-                        (size_t)(ydim > 0 ? ydim : 0),
-                        (size_t)(nvertex > 0 ? nvertex : 0), ybounds);
+            printBounds(fp, dig, prefix, sizeof(prefix)-1, ydim, nvertex, ybounds);
+            Free(ybounds);
 	  }
 
-	if ( area )
+	if ( gridHasArea(gridID) )
 	  {
+            double *area = (double*) Malloc(gridsize*sizeof(double));
+            gridInqArea(gridID, area);
             static const char prefix[] = "area      = ";
-            printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1,
-                                   (size_t)(gridsize > 0 ? gridsize : 0), area);
+            printDblsPrefixAutoBrk(fp, dig, prefix, sizeof(prefix)-1, gridsize, area);
+            Free(area);
 	  }
 
         if ( type == GRID_GAUSSIAN_REDUCED )
@@ -3440,7 +3450,7 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
 	double originLon = 0, originLat = 0, lonParY = 0, lat1 = 0, lat2 = 0, xincm = 0, yincm = 0;
 	int projflag = 0, scanflag = 0;
 	gridInqParamLCC(gridID, &originLon, &originLat, &lonParY, &lat1, &lat2, &xincm, &yincm,
-		   &projflag, &scanflag);
+                        &projflag, &scanflag);
 
 	fprintf(fp,
                 "originLon = %.*g\n"
@@ -3459,17 +3469,19 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
     case GRID_SPECTRAL:
       {
         fprintf(fp, "truncation = %d\n"
-                "complexpacking = %d\n", trunc, gridptr->lcomplex );
+                "complexpacking = %d\n", gridInqTrunc(gridID), gridInqComplexPacking(gridID) );
         break;
       }
     case GRID_FOURIER:
       {
-	fprintf(fp, "truncation = %d\n", trunc);
+	fprintf(fp, "truncation = %d\n", gridInqTrunc(gridID));
 	break;
       }
     case GRID_GME:
       {
-        fprintf(fp, "ni        = %d\n", gridptr->gme.ni );
+        int nd, ni, ni2, ni3;
+        gridInqParamGME(gridID, &nd, &ni, &ni2, &ni3);
+        fprintf(fp, "ni        = %d\n", ni );
         break;
       }
    default:
@@ -3488,30 +3500,32 @@ void gridPrintKernel(grid_t *gridptr, int index, int opt, FILE *fp)
         fprintf(fp, "uuid      = %s\n", uuidOfHGridStr);
     }
 
-  if ( gridptr->mask )
+  if ( gridInqMask(gridID, NULL) )
     {
+      int *mask = (gridsize>0) ? (int*) Malloc((size_t)gridsize*sizeof(int)) : NULL;
+      gridInqMask(gridID, mask);
       static const char prefix[] = "mask      = ";
       printMask(fp, prefix, sizeof(prefix)-1,
-                (size_t)(gridsize > 0 ? gridsize : 0), gridptr->mask);
+                (size_t)(gridsize > 0 ? gridsize : 0), mask);
+      if ( mask ) Free(mask);
     }
 }
 
-void gridPrint ( int gridID, int index, int opt )
-{
-  grid_t *gridptr = grid_to_pointer(gridID);
 
-  gridPrintKernel ( gridptr, index, opt, stdout );
+void gridPrint(int gridID, int opt)
+{
+  gridPrintKernel(gridID, opt, stdout);
 }
 
 
-
-void gridPrintP ( void * voidptr, FILE * fp )
+void gridPrintP(void *voidptr, FILE *fp)
 {
-  grid_t * gridptr = ( grid_t * ) voidptr;
+  grid_t *gridptr = (grid_t *) voidptr;
+  int gridID = gridptr->self;
 
-  xassert ( gridptr );
+  xassert( gridptr );
 
-  gridPrintKernel ( gridptr , gridptr->self, 0, fp );
+  gridPrintKernel(gridID, 0, fp);
 
   fprintf(fp,
           "precision = %d\n"
@@ -3536,12 +3550,15 @@ void gridPrintP ( void * voidptr, FILE * fp )
                                       ? gridptr->nrowlon : 0), gridptr->rowlon);
     }
 
-  if ( gridptr->mask_gme )
+  if ( gridInqMaskGME(gridID, NULL) )
     {
+      int gridsize = gridptr->size;
+      int *mask = (gridsize>0) ? (int*) Malloc((size_t)gridsize*sizeof(int)) : NULL;
+      gridInqMaskGME(gridID, mask);
       static const char prefix[] = "mask_gme  = ";
       printMask(fp, prefix, sizeof(prefix)-1,
-                (size_t)(gridptr->size > 0 ? gridptr->size : 0),
-                gridptr->mask_gme);
+                (size_t)(gridptr->size > 0 ? gridptr->size : 0), mask);
+      if ( mask ) Free(mask);
     }
 }
 
diff --git a/src/ieg.h b/src/ieg.h
index 7b72d88cad2e85db23bffb0127fd792da9ba7274..c92aaf9f6a71d0241877409826a07e4afc2c298b 100644
--- a/src/ieg.h
+++ b/src/ieg.h
@@ -14,7 +14,6 @@
 #define  IEG_LTYPE_LANDDEPTH           111
 #define  IEG_LTYPE_LANDDEPTH_LAYER     112
 #define  IEG_LTYPE_SEADEPTH            160
-#define  IEG_LTYPE_99_MARGIN          1000
 
 /*
  *  Data representation type (Grid Type) [Table 6]
diff --git a/src/stream_cdf_i.c b/src/stream_cdf_i.c
index f838e2d2015ee27cc2648f36d16ce1ad3ea3e7ff..bfb44cdf0889f059ccc4e28f67fccb9a719eabc3 100644
--- a/src/stream_cdf_i.c
+++ b/src/stream_cdf_i.c
@@ -2456,7 +2456,7 @@ void cdf_read_mapping_atts(int ncid, int gmapvarid, int projID, const char *varn
     {
       char attstring[CDI_MAX_NAME];
       cdfGetAttText(ncid, gmapvarid, "grid_mapping_name", CDI_MAX_NAME, attstring);
-      cdiGridDefKeyStr(projID, CDI_KEY_MAPPING, (int)(strlen(attstring)+1), attstring);
+      cdiGridDefKeyStr(projID, CDI_KEY_MAPNAME, (int)(strlen(attstring)+1), attstring);
     }
   else
     {
@@ -2643,7 +2643,7 @@ void cdf_define_all_grids(ncgrid_t *ncgrid, int vlistID, ncdim_t *ncdims, int nv
               int ncid = ncvars[gmapvarid].ncid;
               const char *gmapname = ncvars[gmapvarid].name;
               cdf_read_mapping_atts(ncid, gmapvarid, projID, gmapname);
-              cdiGridDefKeyStr(projID, CDI_KEY_MAPNAME, (int)(strlen(gmapname)+1), gmapname);
+              cdiGridDefKeyStr(projID, CDI_KEY_MAPPING, (int)(strlen(gmapname)+1), gmapname);
               gridVerifyProj(projID);
             }
 
diff --git a/src/stream_cdf_o.c b/src/stream_cdf_o.c
index cf2f6ba35304862129e4cf2e08e56caa3803fd50..2b8a0908bb1b189991d40d02840695f005f410ff 100644
--- a/src/stream_cdf_o.c
+++ b/src/stream_cdf_o.c
@@ -1924,11 +1924,11 @@ static
 void cdf_def_mapping(stream_t *streamptr, int gridID)
 {
   char mapping[CDI_MAX_NAME]; mapping[0] = 0;
-  cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, mapping);
+  cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, mapping);
   if ( mapping[0] )
     {
       char gmapvarname[CDI_MAX_NAME]; gmapvarname[0] = 0;
-      cdiGridInqKeyStr(gridID, CDI_KEY_MAPNAME, CDI_MAX_NAME, gmapvarname);
+      cdiGridInqKeyStr(gridID, CDI_KEY_MAPPING, CDI_MAX_NAME, gmapvarname);
 
       int fileID = streamptr->fileID;
       cdf_redef(fileID);
diff --git a/src/stream_cgribex.c b/src/stream_cgribex.c
index 1433ed583a81b57374961315dc53a4cbb4c04e69..9263609d1a3178f16586c93795d0032555b4698d 100644
--- a/src/stream_cgribex.c
+++ b/src/stream_cgribex.c
@@ -305,10 +305,10 @@ void cgribexGetGrid(stream_t *streamptr, int *isec2, int *isec4, grid_t *grid, i
   else if ( gridtype == GRID_GME )
     {
       grid->size  = ISEC4_NumValues;
-      grid->gme.nd    = ISEC2_GME_ND;
-      grid->gme.ni    = ISEC2_GME_NI;
-      grid->gme.ni2   = ISEC2_GME_NI2;
-      grid->gme.ni3   = ISEC2_GME_NI3;
+      grid->gme.nd  = ISEC2_GME_ND;
+      grid->gme.ni  = ISEC2_GME_NI;
+      grid->gme.ni2 = ISEC2_GME_NI2;
+      grid->gme.ni3 = ISEC2_GME_NI3;
     }
   else if ( gridtype == GRID_GENERIC )
     {
@@ -325,6 +325,16 @@ void cgribexGetGrid(stream_t *streamptr, int *isec2, int *isec4, grid_t *grid, i
   grid->projtype = projtype;
 }
 
+static
+void cgribexGetLevel(int *isec1, int *leveltype, int *level1, int *level2)
+{
+  *leveltype = ISEC1_LevelType;
+  *level1 = ISEC1_Level1;
+  *level2 = ISEC1_Level2;
+  if ( *leveltype == GRIB1_LTYPE_ISOBARIC ) *level1 *= 100;
+  else if ( *leveltype == GRIB1_LTYPE_99 || *leveltype == GRIB1_LTYPE_ISOBARIC_PA ) *leveltype = GRIB1_LTYPE_ISOBARIC;
+}
+
 static
 void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, double *fsec2, double *fsec3,
 		      int *isec4, size_t recsize, off_t position, int datatype, int comptype, int lmv, int iret)
@@ -340,17 +350,17 @@ void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, d
   int tsteptype = cgribexGetTsteptype(ISEC1_TimeRange);
   int numavg    = ISEC1_AvgNum;
 
-  int level1  = ISEC1_Level1;
-  int level2  = ISEC1_Level2;
+  int leveltype, level1, level2;
+  cgribexGetLevel(isec1, &leveltype, &level1, &level2);
 
-  /* fprintf(stderr, "param %d %d %d %d\n", param, level1, level2, ISEC1_LevelType); */
+  /* fprintf(stderr, "param %d %d %d %d\n", param, level1, level2, leveltype); */
 
   record->size      = recsize;
   record->position  = position;
   record->param     = param;
   record->ilevel    = level1;
   record->ilevel2   = level2;
-  record->ltype     = ISEC1_LevelType;
+  record->ltype     = leveltype;
   record->tsteptype = (short)tsteptype;
 
   grid_t *gridptr = (grid_t*) Malloc(sizeof(*gridptr));
@@ -378,7 +388,7 @@ void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, d
   else
     Free(gridptr);
 
-  int zaxistype = grib1ltypeToZaxisType(ISEC1_LevelType);
+  int zaxistype = grib1ltypeToZaxisType(leveltype);
 
   if ( zaxistype == ZAXIS_HYBRID || zaxistype == ZAXIS_HYBRID_HALF )
     {
@@ -388,13 +398,13 @@ void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, d
       varDefVCT(vctsize, vctptr);
     }
 
-  int lbounds = cgribexGetZaxisHasBounds(ISEC1_LevelType);
+  int lbounds = cgribexGetZaxisHasBounds(leveltype);
 
   if ( datatype > 32 ) datatype = CDI_DATATYPE_PACK32;
   if ( datatype <  0 ) datatype = CDI_DATATYPE_PACK;
 
   varAddRecord(recID, param, gridID, zaxistype, lbounds, level1, level2, 0, 0,
-	       datatype, &varID, &levelID, tsteptype, numavg, ISEC1_LevelType, -1,
+	       datatype, &varID, &levelID, tsteptype, numavg, leveltype, -1,
                NULL, NULL, NULL, NULL, NULL, NULL);
 
   record->varID   = (short)varID;
@@ -555,16 +565,14 @@ cgribexScanTsConstAdjust(stream_t *streamptr, taxis_t *taxis)
       if ( taxis->vdate == 0 && taxis->vtime == 0 )
 	{
 	  streamptr->ntsteps = 0;
-	  for (int varID = 0; varID < streamptr->nvars; varID++ )
-	    {
-	      vlistDefVarTsteptype(vlistID, varID, TSTEP_CONSTANT);
-	    }
+	  for ( int varID = 0; varID < streamptr->nvars; varID++ )
+            vlistDefVarTsteptype(vlistID, varID, TSTEP_CONSTANT);
 	}
     }
 }
 
 
-int cgribexScanTimestep1(stream_t * streamptr)
+int cgribexScanTimestep1(stream_t *streamptr)
 {
   double fsec2[512], fsec3[2], *fsec4 = NULL;
   int lmv = 0, iret = 0;
@@ -573,7 +581,7 @@ int cgribexScanTimestep1(stream_t * streamptr)
   size_t buffersize = 0;
   int rstatus;
   int param = 0;
-  int level1 = 0, level2 = 0, vdate = 0, vtime = 0;
+  int leveltype = 0, level1 = 0, level2 = 0, vdate = 0, vtime = 0;
   DateTime datetime, datetime0 = { LONG_MIN, LONG_MIN };
   size_t readsize;
   unsigned nrecords, recID;
@@ -660,10 +668,7 @@ int cgribexScanTimestep1(stream_t * streamptr)
       param = cdiEncodeParam(ISEC1_Parameter, ISEC1_CodeTable, 255);
       cdiParamToString(param, paramstr, sizeof(paramstr));
 
-      if ( ISEC1_LevelType == 100 ) ISEC1_Level1 *= 100;
-      if ( ISEC1_LevelType ==  99 ) ISEC1_LevelType = 100;
-      level1 = ISEC1_Level1;
-      level2 = ISEC1_Level2;
+      cgribexGetLevel(isec1, &leveltype, &level1, &level2);
 
       gribDateTime(isec1, &vdate, &vtime);
 
@@ -685,7 +690,7 @@ int cgribexScanTimestep1(stream_t * streamptr)
 	{
 	  datetime.date = vdate;
 	  datetime.time = vtime;
-	  compvar_t compVar = cgribexVarSet(param, level1, level2, ISEC1_LevelType, ISEC1_TimeRange);
+	  compvar_t compVar = cgribexVarSet(param, level1, level2, leveltype, ISEC1_TimeRange);
 	  for ( recID = 0; recID < nrecs; recID++ )
 	    {
 	      if ( cgribexVarCompare(compVar, streamptr->tsteps[0].records[recID], 0) == 0 ) break;
@@ -792,7 +797,7 @@ int cgribexScanTimestep2(stream_t * streamptr)
   int lmv = 0, iret = 0;
   off_t recpos = 0;
   int param = 0;
-  int level1 = 0, level2 = 0, vdate = 0, vtime = 0;
+  int leveltype = 0, level1 = 0, level2 = 0, vdate = 0, vtime = 0;
   DateTime datetime, datetime0 = { LONG_MIN, LONG_MIN };
   int varID, gridID;
   size_t readsize;
@@ -882,10 +887,7 @@ int cgribexScanTimestep2(stream_t * streamptr)
       param = cdiEncodeParam(ISEC1_Parameter, ISEC1_CodeTable, 255);
       cdiParamToString(param, paramstr, sizeof(paramstr));
 
-      if ( ISEC1_LevelType == 100 ) ISEC1_Level1 *= 100;
-      if ( ISEC1_LevelType ==  99 ) ISEC1_LevelType = 100;
-      level1    = ISEC1_Level1;
-      level2    = ISEC1_Level2;
+      cgribexGetLevel(isec1, &leveltype, &level1, &level2);
 
       gribDateTime(isec1, &vdate, &vtime);
 
@@ -930,7 +932,7 @@ int cgribexScanTimestep2(stream_t * streamptr)
       datetime.date  = vdate;
       datetime.time  = vtime;
 
-      compvar_t compVar = cgribexVarSet(param, level1, level2, ISEC1_LevelType, ISEC1_TimeRange);
+      compvar_t compVar = cgribexVarSet(param, level1, level2, leveltype, ISEC1_TimeRange);
 
       for ( recID = 0; recID < nrecords; recID++ )
 	{
@@ -1040,7 +1042,7 @@ int cgribexScanTimestep(stream_t * streamptr)
   size_t buffersize = 0;
   int fileID;
   int param = 0;
-  int level1 = 0, level2 = 0, vdate = 0, vtime = 0;
+  int leveltype = 0, level1 = 0, level2 = 0, vdate = 0, vtime = 0;
   DateTime datetime, datetime0 = { LONG_MIN, LONG_MIN };
   int vrecID, recID;
   bool warn_numavg = true;
@@ -1135,10 +1137,7 @@ int cgribexScanTimestep(stream_t * streamptr)
 	  param = cdiEncodeParam(ISEC1_Parameter, ISEC1_CodeTable, 255);
           cdiParamToString(param, paramstr, sizeof(paramstr));
 
-	  if ( ISEC1_LevelType == 100 ) ISEC1_Level1 *= 100;
-	  if ( ISEC1_LevelType ==  99 ) ISEC1_LevelType = 100;
-	  level1   = ISEC1_Level1;
-	  level2   = ISEC1_Level2;
+          cgribexGetLevel(isec1, &leveltype, &level1, &level2);
 
 	  gribDateTime(isec1, &vdate, &vtime);
 
@@ -1185,7 +1184,7 @@ int cgribexScanTimestep(stream_t * streamptr)
 	  datetime.date  = vdate;
 	  datetime.time  = vtime;
 
-	  compvar_t compVar = cgribexVarSet(param, level1, level2, ISEC1_LevelType, ISEC1_TimeRange);
+	  compvar_t compVar = cgribexVarSet(param, level1, level2, leveltype, ISEC1_TimeRange);
 
 	  for ( vrecID = 0; vrecID < nrecs; vrecID++ )
 	    {
@@ -1923,7 +1922,7 @@ void cgribexDefLevel(int *isec1, int *isec2, double *fsec2, int zaxisID, int lev
 
 	double dum;
 	if ( level < 32768 && (level < 100 || modf(level/100, &dum) > 0) )
-          grib_ltype = GRIB1_LTYPE_99;
+          grib_ltype = GRIB1_LTYPE_ISOBARIC_PA;
 	else
           level = level/100;
 
diff --git a/src/stream_grb.c b/src/stream_grb.c
index ba711efbc95fceca94ad6c8ec86183a579ad0552..5d1593412d42d1073d3eaf54db7fc8d40a46969a 100644
--- a/src/stream_grb.c
+++ b/src/stream_grb.c
@@ -27,6 +27,7 @@ int grib1ltypeToZaxisType(int grib_ltype)
     case GRIB1_LTYPE_ATMOSPHERE:         zaxistype = ZAXIS_ATMOSPHERE;             break;
     case GRIB1_LTYPE_MEANSEA:            zaxistype = ZAXIS_MEANSEA;                break;
     case GRIB1_LTYPE_99:
+    case GRIB1_LTYPE_ISOBARIC_PA:
     case GRIB1_LTYPE_ISOBARIC:           zaxistype = ZAXIS_PRESSURE;               break;
     case GRIB1_LTYPE_HEIGHT:             zaxistype = ZAXIS_HEIGHT;                 break;
     case GRIB1_LTYPE_ALTITUDE:           zaxistype = ZAXIS_ALTITUDE;	           break;
diff --git a/src/stream_gribapi.c b/src/stream_gribapi.c
index c5e69b5f271d3943f0ba8560092f8b0048f770ff..759b854522cb8764b21bcf6fea1f99d9a8b3afc7 100644
--- a/src/stream_gribapi.c
+++ b/src/stream_gribapi.c
@@ -276,9 +276,9 @@ void grib1GetLevel(grib_handle *gh, int *leveltype, int *lbounds, int *level1, i
 	{
           double dlevel;
 	  GRIB_CHECK(grib_get_double(gh, "level", &dlevel), 0); //2 byte
-	  if ( *leveltype == 100 ) dlevel *= 100;
+	  if ( *leveltype == GRIB1_LTYPE_ISOBARIC ) dlevel *= 100;
 	  if ( dlevel < -2.e9 || dlevel > 2.e9 ) dlevel = 0;
-	  if ( *leveltype == GRIB1_LTYPE_99 ) *leveltype = 100;
+	  if ( *leveltype == GRIB1_LTYPE_99 || *leveltype == GRIB1_LTYPE_ISOBARIC_PA ) *leveltype = GRIB1_LTYPE_ISOBARIC;
 
 	  *level1 = (int) dlevel;
 	  *level2 = 0;
@@ -2449,7 +2449,7 @@ void gribapiDefLevel(int editionNumber, grib_handle *gh, int zaxisID, int levelI
           {
             double dum;
             if ( level < 32768 && (level < 100 || modf(level/100, &dum) > 0) )
-              grib_ltype = GRIB1_LTYPE_99;
+              grib_ltype = GRIB1_LTYPE_ISOBARIC_PA;
             else
               level /= 100;
 
diff --git a/src/util.c b/src/util.c
index 42c62a9c28747cc9ffb1a465517efd7b1e12dd70..8125f8e024eb4b48357c21dccb1d462ba6c7325a 100644
--- a/src/util.c
+++ b/src/util.c
@@ -151,7 +151,7 @@ char* cdiUnescapeSpaces(const char* string, const char** outStringEnd)
   return result;
 }
 
-#ifdef HAVE_DECL_UUID_GENERATE
+#if defined (HAVE_DECL_UUID_GENERATE) && defined (HAVE_UUID_UUID_H)
 #include <sys/time.h>
 #include <uuid/uuid.h>
 void cdiCreateUUID(unsigned char *uuid)
@@ -178,7 +178,7 @@ void cdiCreateUUID(unsigned char *uuid)
   uuid_generate(uuid);
   setstate(caller_rand_state);
 }
-#elif defined (HAVE_DECL_UUID_CREATE)
+#elif defined (HAVE_DECL_UUID_CREATE) && defined (HAVE_UUID_H)
 typedef uint8_t u_int8_t;
 typedef uint16_t u_int16_t;
 typedef uint32_t u_int32_t;
diff --git a/src/zaxis.c b/src/zaxis.c
index 9ea9c50846a67d36be7ee792e0f00571c9bf37fd..f116c0967d3a9c89454136732dc75804242f4fd2 100644
--- a/src/zaxis.c
+++ b/src/zaxis.c
@@ -1331,7 +1331,7 @@ int zaxisDuplicate(int zaxisID)
 }
 
 static
-void zaxisPrintKernel(zaxis_t *zaxisptr, int index, FILE *fp)
+void zaxisPrintKernel(zaxis_t *zaxisptr, FILE *fp)
 {
   xassert(zaxisptr);
 
@@ -1344,9 +1344,6 @@ void zaxisPrintKernel(zaxis_t *zaxisptr, int index, FILE *fp)
 
   int nbyte;
   int nbyte0 = 0;
-  fprintf(fp, "#\n");
-  fprintf(fp, "# zaxisID %d\n", index);
-  fprintf(fp, "#\n");
   fprintf(fp, "zaxistype = %s\n", zaxisNamePtr(type));
   fprintf(fp, "size      = %d\n", nlevels);
   if ( nlevels == 1 )
@@ -1457,21 +1454,21 @@ void zaxisPrintKernel(zaxis_t *zaxisptr, int index, FILE *fp)
 }
 
 
-void zaxisPrint(int zaxisID, int index)
+void zaxisPrint(int zaxisID)
 {
   zaxis_t *zaxisptr = zaxis_to_pointer(zaxisID);
-  zaxisPrintKernel(zaxisptr, index, stdout);
+  zaxisPrintKernel(zaxisptr, stdout);
 }
 
 
 static
-void zaxisPrintP ( void * voidptr, FILE * fp )
+void zaxisPrintP(void * voidptr, FILE * fp)
 {
   zaxis_t *zaxisptr = ( zaxis_t * ) voidptr;
 
   xassert ( zaxisptr );
 
-  zaxisPrintKernel(zaxisptr, zaxisptr->self, fp);
+  zaxisPrintKernel(zaxisptr, fp);
 }