diff --git a/.gitattributes b/.gitattributes
index 2ba40eee28cf5339b1710d6c13f1be1e24c3a83c..c60516eb7c967e583282541c291b2a38cd573a51 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -20,6 +20,7 @@ config/mkinstalldirs -text
 /configure.ac -text
 doc/tex/FUNCTIONS -text
 doc/tex/Modules -text
+doc/tex/c_examples.tex -text
 doc/tex/c_grid.tex -text
 doc/tex/c_link.tex -text
 doc/tex/c_quick_ref.tex -text
@@ -51,6 +52,11 @@ doc/tex/makeps_c -text
 doc/tex/makeps_f -text
 doc/tex/test.tex -text
 doc/tex/usage.tex -text
+examples/Makefile.am -text
+examples/Makefile.in -text
+examples/cdi_copy.c -text
+examples/cdi_read.c -text
+examples/cdi_write.c -text
 prog/Makefile.am -text
 prog/Makefile.in -text
 prog/cdi.c -text
diff --git a/ChangeLog b/ChangeLog
index 132a78b6e9901e2b303327cda8252c678bd6118b..a026c9f2182ad9b0648598b971979692e17ee540 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
 
 	* using GRIB library version 1.0.0
 	* rename *New functions to *Create
+        * add dummy functions gridDestroy, zaxisDestroy, taxisDestroy
 	* Version 1.0.0 released
 
 2006-05-04  Uwe Schulzweida  <schulzweida@dkrz.de>
diff --git a/Makefile.am b/Makefile.am
index a0a7620416dbe7ed6513a11b624465ffcb455375..d8be992feba6b9a17e1b7bfe6c1854bd7b69ca15 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
 ## Process this file with automake to produce Makefile.in
 #
-SUBDIRS = src prog tests
+SUBDIRS = src prog examples tests
 #
 EXTRA_DIST=config/default
 #
diff --git a/Makefile.in b/Makefile.in
index 6b28c90f3a1ac11d4d3f3a0e82e01613b2cf1ab9..267b2fea05613862da85d58f53fe8cc04024aba4 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -82,7 +82,7 @@ am__quote = @am__quote@
 install_sh = @install_sh@
 
 #
-SUBDIRS = src prog tests
+SUBDIRS = src prog examples tests
 #
 EXTRA_DIST = config/default
 #
diff --git a/configure b/configure
index 2877afe84ccd7c81c62842098f4a745cb71f9d8c..245ab16fe10548c54eba1c0a37a8a1e5c4ebd632 100755
--- a/configure
+++ b/configure
@@ -6030,7 +6030,7 @@ FC=$F77
 
 
 
-                                        ac_config_files="$ac_config_files Makefile src/Makefile prog/Makefile tests/Makefile"
+                                                  ac_config_files="$ac_config_files Makefile src/Makefile prog/Makefile tests/Makefile examples/Makefile"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
 # tests run on this system so they can be shared between configure
@@ -6577,6 +6577,7 @@ do
   "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
   "prog/Makefile" ) CONFIG_FILES="$CONFIG_FILES prog/Makefile" ;;
   "tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
   "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
   "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;;
   *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
diff --git a/configure.ac b/configure.ac
index 5ec06318954ff91dbfb72e4c53a5c86632da63bb..13a42a2abc3ede3e3d7ed9c11c1f8c81c027ff0f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -292,4 +292,4 @@ AC_SUBST([FC],$F77)
 AC_SUBST([CFINT])
 AC_SUBST([AR])
 
-AC_OUTPUT(Makefile src/Makefile prog/Makefile tests/Makefile)
+AC_OUTPUT(Makefile src/Makefile prog/Makefile tests/Makefile examples/Makefile)
diff --git a/doc/tex/FUNCTIONS b/doc/tex/FUNCTIONS
index 5edaf267b98392cfb005dcc02a80265218e8c843..f2a9b68f8aed50d5e5d5e9adc494d7f318931aa8 100644
--- a/doc/tex/FUNCTIONS
+++ b/doc/tex/FUNCTIONS
@@ -13,8 +13,8 @@ Function catalog:
    streamInqFiletype    Get the filetype
    streamDefVlist       Define the variable list
    streamInqVlist       Get the variable list
-   streamDefTimestep    Define timestep
-   streamInqTimestep    Get timestep
+   streamDefTimestep    Define time step
+   streamInqTimestep    Get time step
    streamWriteVar       Write a variable
    streamReadVar        Read a variable
    streamWriteVarSlice  Write a horizontal slice of a variable
@@ -22,8 +22,8 @@ Function catalog:
 -------------------------------------------------------------
    vlist
 -------------------------------------------------------------
-   vlistNew             Create a variable list
-   vlistFree            Delete a variable list
+   vlistCreate          Create a variable list
+   vlistDestroy         Destroy a variable list
    vlistCopy            Copy a variable list
    vlistDuplicate       Duplicate a variable list
    vlistCat             Concatenate two variable lists
@@ -50,8 +50,9 @@ Function catalog:
 -------------------------------------------------------------
    grid
 -------------------------------------------------------------
-   gridNew              Create a new Grid
-   gridDuplicate        Duplicate a grid
+   gridCreate           Create a horizontal Grid
+   gridDestroy          Destroy a horizontal Grid
+   gridDuplicate        Duplicate a horizontal Grid
    gridInqType          Get the type of a Grid
    gridInqSize          Get the size of a Grid
    gridDefXsize         Define the number of values of a X-axis
@@ -81,7 +82,8 @@ Function catalog:
 -------------------------------------------------------------
    zaxis
 -------------------------------------------------------------
-   zaxisNew             Create a new Z-axis
+   zaxisCreate          Create a vertical Z-axis
+   zaxisDestroy         Destroy a vertical Z-axis
    zaxisInqType         Get the type of a Z-axis
    zaxisInqSize         Get the size of a Z-axis
    zaxisDefLevels       Define the levels of a Z-axis
@@ -96,7 +98,8 @@ Function catalog:
 -------------------------------------------------------------
    taxis
 -------------------------------------------------------------
-   taxisNew             Create a new T-axis
+   taxisCreate          Create a Time axis
+   taxisDestroy         Destroy a Time axis
    taxisDefRdate        Define the reference date
    taxisInqRdate        Get the reference date
    taxisDefRtime        Define the reference time
diff --git a/doc/tex/Modules b/doc/tex/Modules
index 899d1fe70071b30739c489a2bf55d46020dd9958..f78e9aac647939690cd18ea5eea01893c4619925 100644
--- a/doc/tex/Modules
+++ b/doc/tex/Modules
@@ -10,8 +10,8 @@ streamWriteVar      stream
 streamReadVar       stream
 streamWriteVarSlice stream
 streamReadVarSlice  stream
-vlistNew            vlist
-vlistFree           vlist
+vlistCreate         vlist
+vlistDestroy        vlist
 vlistCopy           vlist
 vlistDuplicate      vlist
 vlistCat            vlist
@@ -37,7 +37,8 @@ vlistDefVarDatatype vlist_var
 vlistInqVarDatatype vlist_var
 vlistDefVarMissval  vlist_var
 vlistInqVarMissval  vlist_var
-gridNew             grid
+gridCreate          grid
+gridDestroy         grid
 gridDuplicate       grid
 gridInqType         grid
 gridInqSize         grid
@@ -65,7 +66,8 @@ gridDefYlongname    grid
 gridInqYlongname    grid
 gridDefYunits       grid
 gridInqYunits       grid
-zaxisNew            zaxis
+zaxisCreate         zaxis
+zaxisDestroy        zaxis
 zaxisInqType        zaxis
 zaxisInqSize        zaxis
 zaxisDefLevels      zaxis
@@ -77,7 +79,8 @@ zaxisDefLongname    zaxis
 zaxisInqLongname    zaxis
 zaxisDefUnits       zaxis
 zaxisInqUnits       zaxis
-taxisNew            taxis
+taxisCreate         taxis
+taxisDestroy        taxis
 taxisDefRdate       taxis
 taxisInqRdate       taxis
 taxisDefRtime       taxis
diff --git a/doc/tex/c_examples.tex b/doc/tex/c_examples.tex
new file mode 100644
index 0000000000000000000000000000000000000000..c0da7de160f6110e729fb41ee21656aa7a6a6ab0
--- /dev/null
+++ b/doc/tex/c_examples.tex
@@ -0,0 +1,148 @@
+\appendix
+
+\chapter{\label{appendixa}Examples}
+
+\section{Write variables to a dataset}
+
+\begin{lstlisting}[frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
+#include "cdi.h"
+
+#define NLON  12 /* Number of longitudes */
+#define NLAT   6 /* Number of latitudes  */
+#define NLEV   5 /* Number of levels     */
+#define NTIME  3 /* Number of time steps */
+
+int main(void)
+{
+  int gridID, zaxisID1, zaxisID2, taxisID;
+  int vlistID, varID1, varID2, streamID;
+  int tsID;
+  int i, nmiss = 0;
+  double lons[NLON] = {0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330};
+  double lats[NLAT] = {-75, -45, -15, 15, 45, 75};
+  double levs[NLEV] = {101300, 92500, 85000, 50000, 20000};
+  double var1[NLON*NLAT];
+  double var2[NLON*NLAT*NLEV];
+
+  /* Create a LONLAT grid */
+  gridID  = gridCreate(GRID_LONLAT, NLON*NLAT);
+  gridDefXsize(gridID, NLON);
+  gridDefYsize(gridID, NLAT);
+  gridDefXvals(gridID, lons);
+  gridDefYvals(gridID, lats);
+
+  /* Create a surface Z-axis */
+  zaxisID1 = zaxisCreate(ZAXIS_SURFACE, 1);
+
+  /* Create a pressure level Z-axis */
+  zaxisID2 = zaxisCreate(ZAXIS_PRESSURE, NLEV);
+  zaxisDefLevels(zaxisID2, levs);
+ 
+  /* Create a variable list */
+  vlistID = vlistCreate();
+
+  /* Define the variables */
+  varID1  = vlistDefVar(vlistID, gridID, zaxisID1, TIME_VARIABLE);
+  varID2  = vlistDefVar(vlistID, gridID, zaxisID2, TIME_VARIABLE);
+
+  /* Define variable name */
+  vlistDefVarName(vlistID, varID1, "varname1");
+  vlistDefVarName(vlistID, varID2, "varname2");
+
+  /* Create a Time axis */
+  taxisID = taxisCreate(TAXIS_ABSOLUTE);
+
+  /* Assign the Time axis to the variable list */
+  vlistDefTaxis(vlistID, taxisID);
+
+  /* Create a dataset */
+  streamID  = streamOpenWrite("example.nc", FILETYPE_NC);
+
+  /* Assign the variable list to the dataset */
+  streamDefVlist(streamID, vlistID);
+
+  /* Loop over the number of time steps */
+  for ( tsID = 0; tsID < NTIME; tsID++ )
+    {
+      /* Set the verification date to 1985-01-01 + tsID */
+      taxisDefVdate(taxisID, 19850101+tsID);
+      /* Set the verification time to 12:00 */
+      taxisDefVtime(taxisID, 1200);
+      /* Define the time step */
+      streamDefTimestep(streamID, tsID);
+
+      /* Write var1 */
+      for ( i = 0; i < NLON*NLAT; i++ ) var1[i] = 1;
+      streamWriteVar(streamID, varID1, var1, nmiss);
+      /* Write var2 */
+      for ( i = 0; i < NLON*NLAT*NLEV; i++ ) var2[i] = 2;
+      streamWriteVar(streamID, varID2, var2, nmiss);
+    }
+
+  /* Close the output stream */
+  streamClose(streamID);
+
+  /* Destroy the created objects */
+  vlistDestroy(vlistID);
+  taxisDestroy(taxisID);
+  zaxisDestroy(zaxisID1);
+  zaxisDestroy(zaxisID2);
+  gridDestroy(gridID);
+
+  return 0;
+}
+\end{lstlisting}
+
+\subsection{Result}
+\begin{lstlisting}[frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
+netcdf example {
+dimensions:
+        lon = 12 ;
+        lat = 6 ;
+        lev = 5 ;
+        time = UNLIMITED ; // (3 currently)
+variables:
+        double lon(lon) ;
+                lon:long_name = "longitude" ;
+                lon:units = "degrees_east" ;
+                lon:standard_name = "longitude" ;
+        double lat(lat) ;
+                lat:long_name = "latitude" ;
+                lat:units = "degrees_north" ;
+                lat:standard_name = "latitude" ;
+        double lev(lev) ;
+                lev:long_name = "pressure" ;
+                lev:units = "Pa" ;
+        double time(time) ;
+                time:units = "day as %Y%m%d.%f" ;
+        float varname1(time, lat, lon) ;
+        float varname2(time, lev, lat, lon) ;
+
+// global attributes:
+                :CDI = "Climate Data Interface version 1.0.0" ;
+                :Conventions = "CF-1.0" ;
+data:
+
+ lon = 0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330 ;
+
+ lat = -75, -45, -15, 15, 45, 75 ;
+
+ lev = 101300, 92500, 85000, 50000, 20000 ;
+
+ time = 19850101.5, 19850102.5, 19850103.5 ;
+}
+\end{lstlisting}
+
+
+\section{Read a dataset}
+
+\begin{lstlisting}[frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
+\end{lstlisting}
+
+
+\section{Write variables to a dataset}
+
+\begin{lstlisting}[frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
+\end{lstlisting}
+
+\section{Copy a dataset}
diff --git a/doc/tex/c_grid.tex b/doc/tex/c_grid.tex
index 7a8ee75d7140c3be62aa7eae201604dabf14d364..b84a3aa7125f09c88bc1b7151a544c9f7b545b73 100644
--- a/doc/tex/c_grid.tex
+++ b/doc/tex/c_grid.tex
@@ -1,15 +1,15 @@
 
 
-\section{Create a new Grid: {\tt gridNew}}
-\index{gridNew}
-\label{gridNew}
+\section{Create a horizontal Grid: {\tt gridCreate}}
+\index{gridCreate}
+\label{gridCreate}
 
-The function {\tt gridNew} creates a new Grid.
+The function {\tt gridCreate} creates a horizontal Grid.
 
 \subsection*{Usage}
 
 \begin{verbatim}
-    int gridNew(int gridtype, int size);
+    int gridCreate(int gridtype, int size);
 \end{verbatim}
 
 \hspace*{4mm}\begin{minipage}[]{15cm}
@@ -26,12 +26,14 @@ Number of gridpoints.
 
 \subsection*{Result}
 
-{\tt gridNew} returns an identifier to the new Grid.
+{\tt gridCreate} returns an identifier to the Grid.
 
 
 \subsection*{Example}
 
-Here is an example using {\tt gridNew} to create a new {\tt LONLAT} Grid:\begin{verbatim}
+Here is an example using {\tt gridCreate} to create a {\tt LONLAT} Grid:
+
+\begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
     #include <cdi.h>
        ...
     int gridID;
@@ -40,20 +42,38 @@ Here is an example using {\tt gridNew} to create a new {\tt LONLAT} Grid:\begin{
     double lons[nlon] = {0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330};
     double lats[nlat] = {-75, -45, -15, 15, 45, 75};
        ...
-    gridID = gridNew(GRID_LONLAT, nlon*nlat);
+    gridID = gridCreate(GRID_LONLAT, nlon*nlat);
     gridDefXsize(gridID, nlon);
     gridDefYsize(gridID, nlat);
     gridDefXvals(gridID, lons);
     gridDefYvals(gridID, lats);
        ...
+\end{lstlisting}
+
+
+\section{Destroy a horizontal Grid: {\tt gridDestroy}}
+\index{gridDestroy}
+\label{gridDestroy}
+\subsection*{Usage}
+
+\begin{verbatim}
+    void gridDestroy(int gridID);
 \end{verbatim}
 
+\hspace*{4mm}\begin{minipage}[]{15cm}
+\begin{deflist}{\tt gridID\ }
+\item[{\tt gridID}]
+Identifier, from a previous call to {\tt gridCreate}
+
+\end{deflist}
+\end{minipage}
+
 
-\section{Duplicate a grid: {\tt gridDuplicate}}
+\section{Duplicate a horizontal Grid: {\tt gridDuplicate}}
 \index{gridDuplicate}
 \label{gridDuplicate}
 
-The function {\tt gridDuplicate} duplicates a grid.
+The function {\tt gridDuplicate} duplicates a horizontal Grid.
 
 \subsection*{Usage}
 
@@ -64,7 +84,7 @@ The function {\tt gridDuplicate} duplicates a grid.
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt gridID\ }
 \item[{\tt gridID}]
-Identifier, from a previous call to {\tt gridNew},
+Identifier, from a previous call to {\tt gridCreate},
                    {\tt gridDuplicate} or {\tt vlistInqVarGrid}.
 
 \end{deflist}
@@ -72,7 +92,7 @@ Identifier, from a previous call to {\tt gridNew},
 
 \subsection*{Result}
 
-{\tt gridDuplicate} returns an identifier to the duplicated grid.
+{\tt gridDuplicate} returns an identifier to the duplicated Grid.
 
 
 
diff --git a/doc/tex/c_ref.tex b/doc/tex/c_ref.tex
index b543306c915e4c7e7456d7bd1e4f954187a1b1cd..f5b300d1b84aae2dc6f30b1192b1187344124a3f 100644
--- a/doc/tex/c_ref.tex
+++ b/doc/tex/c_ref.tex
@@ -1,5 +1,14 @@
 
 
+\section*{\tt \htmlref{gridCreate}{gridCreate}}
+
+\begin{verbatim}
+    int gridCreate(int gridtype, int size);
+\end{verbatim}
+
+Create a horizontal Grid
+
+
 \section*{\tt \htmlref{gridDefXbounds}{gridDefXbounds}}
 
 \begin{verbatim}
@@ -108,13 +117,22 @@ Define the units of a Y-axis
 Define the values of a Y-axis
 
 
+\section*{\tt \htmlref{gridDestroy}{gridDestroy}}
+
+\begin{verbatim}
+    void gridDestroy(int gridID);
+\end{verbatim}
+
+Destroy a horizontal Grid
+
+
 \section*{\tt \htmlref{gridDuplicate}{gridDuplicate}}
 
 \begin{verbatim}
     int gridDuplicate(int gridID);
 \end{verbatim}
 
-Duplicate a grid
+Duplicate a horizontal Grid
 
 
 \section*{\tt \htmlref{gridInqSize}{gridInqSize}}
@@ -243,15 +261,6 @@ Get the units of a Y-axis
 Get all values of a Y-axis
 
 
-\section*{\tt \htmlref{gridNew}{gridNew}}
-
-\begin{verbatim}
-    int gridNew(int gridtype, int size);
-\end{verbatim}
-
-Create a new Grid
-
-
 \section*{\tt \htmlref{streamClose}{streamClose}}
 
 \begin{verbatim}
@@ -267,7 +276,7 @@ Close an open dataset
     int streamDefTimestep(int streamID, int tsID);
 \end{verbatim}
 
-Define timestep
+Define time step
 
 
 \section*{\tt \htmlref{streamDefVlist}{streamDefVlist}}
@@ -294,7 +303,7 @@ Get the filetype
     int streamInqTimestep(int streamID, int tsID);
 \end{verbatim}
 
-Get timestep
+Get time step
 
 
 \section*{\tt \htmlref{streamInqVlist}{streamInqVlist}}
@@ -362,6 +371,15 @@ Write a variable
 Write a horizontal slice of a variable
 
 
+\section*{\tt \htmlref{taxisCreate}{taxisCreate}}
+
+\begin{verbatim}
+    int taxisCreate(int taxistype);
+\end{verbatim}
+
+Create a Time axis
+
+
 \section*{\tt \htmlref{taxisDefCalendar}{taxisDefCalendar}}
 
 \begin{verbatim}
@@ -407,6 +425,15 @@ Define the verification date
 Define the verification time
 
 
+\section*{\tt \htmlref{taxisDestroy}{taxisDestroy}}
+
+\begin{verbatim}
+    void taxisDestroy(int taxisID);
+\end{verbatim}
+
+Destroy a Time axis
+
+
 \section*{\tt \htmlref{taxisInqCalendar}{taxisInqCalendar}}
 
 \begin{verbatim}
@@ -452,15 +479,6 @@ Get the verification date
 Get the verification time
 
 
-\section*{\tt \htmlref{taxisNew}{taxisNew}}
-
-\begin{verbatim}
-    int taxisNew(int taxistype);
-\end{verbatim}
-
-Create a new T-axis
-
-
 \section*{\tt \htmlref{vlistCat}{vlistCat}}
 
 \begin{verbatim}
@@ -488,6 +506,15 @@ Copy a variable list
 Copy some entries of a variable list
 
 
+\section*{\tt \htmlref{vlistCreate}{vlistCreate}}
+
+\begin{verbatim}
+    int vlistCreate(void);
+\end{verbatim}
+
+Create a variable list
+
+
 \section*{\tt \htmlref{vlistDefVar}{vlistDefVar}}
 
 \begin{verbatim}
@@ -551,22 +578,22 @@ Define the name of a Variable
 Define the units of a Variable
 
 
-\section*{\tt \htmlref{vlistDuplicate}{vlistDuplicate}}
+\section*{\tt \htmlref{vlistDestroy}{vlistDestroy}}
 
 \begin{verbatim}
-    int vlistDuplicate(int vlistID);
+    void vlistDestroy(int vlistID);
 \end{verbatim}
 
-Duplicate a variable list
+Destroy a variable list
 
 
-\section*{\tt \htmlref{vlistFree}{vlistFree}}
+\section*{\tt \htmlref{vlistDuplicate}{vlistDuplicate}}
 
 \begin{verbatim}
-    void vlistFree(int vlistID);
+    int vlistDuplicate(int vlistID);
 \end{verbatim}
 
-Delete a variable list
+Duplicate a variable list
 
 
 \section*{\tt \htmlref{vlistInqVarCode}{vlistInqVarCode}}
@@ -623,15 +650,6 @@ Get the name of a Variable
 Get the units of a Variable
 
 
-\section*{\tt \htmlref{vlistNew}{vlistNew}}
-
-\begin{verbatim}
-    int vlistNew(void);
-\end{verbatim}
-
-Create a variable list
-
-
 \section*{\tt \htmlref{vlistNgrids}{vlistNgrids}}
 
 \begin{verbatim}
@@ -659,6 +677,15 @@ Number of variables in a variable list
 Number of zaxis in a variable list
 
 
+\section*{\tt \htmlref{zaxisCreate}{zaxisCreate}}
+
+\begin{verbatim}
+    int zaxisCreate(int zaxistype, int size);
+\end{verbatim}
+
+Create a vertical Z-axis
+
+
 \section*{\tt \htmlref{zaxisDefLevels}{zaxisDefLevels}}
 
 \begin{verbatim}
@@ -695,6 +722,15 @@ Define the name of a Z-axis
 Define the units of a Z-axis
 
 
+\section*{\tt \htmlref{zaxisDestroy}{zaxisDestroy}}
+
+\begin{verbatim}
+    void zaxisDestroy(int zaxisID);
+\end{verbatim}
+
+Destroy a vertical Z-axis
+
+
 \section*{\tt \htmlref{zaxisInqLevel}{zaxisInqLevel}}
 
 \begin{verbatim}
@@ -756,12 +792,3 @@ Get the type of a Z-axis
 \end{verbatim}
 
 Get the units of a Z-axis
-
-
-\section*{\tt \htmlref{zaxisNew}{zaxisNew}}
-
-\begin{verbatim}
-    int zaxisNew(int zaxistype, int size);
-\end{verbatim}
-
-Create a new Z-axis
diff --git a/doc/tex/c_stream.tex b/doc/tex/c_stream.tex
index 77f49f26c6feed37eb250ae7110998779eb19bd2..a8266109becfb410a949c7629b24dbfcfc0b8327 100644
--- a/doc/tex/c_stream.tex
+++ b/doc/tex/c_stream.tex
@@ -18,7 +18,7 @@ The name of the new dataset
 \item[{\tt filetype}]
 The type of the file format, one of the set of predefined CDI file format types.
                      The valid CDI file format types are {\tt FILETYPE\_GRB}, {\tt FILETYPE\_NC},
-                     {\tt FILETYPE\_NC2}, {\tt FILETYPE\_SRV}, and {\tt FILETYPE\_EXT}.
+                     {\tt FILETYPE\_NC2}, {\tt FILETYPE\_SRV}, {\tt FILETYPE\_EXT} and {\tt FILETYPE\_IEG}.
 
 \end{deflist}
 \end{minipage}
@@ -48,7 +48,10 @@ Library not available
 
 \subsection*{Example}
 
-Here is an example using {\tt streamOpenWrite} to create a new netCDF file named {\tt foo.nc} for writing:\begin{verbatim}
+Here is an example using {\tt streamOpenWrite} to create a new netCDF file 
+named {\tt foo.nc} for writing:
+
+\begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
     #include <cdi.h>
        ...
     int streamID;
@@ -56,7 +59,7 @@ Here is an example using {\tt streamOpenWrite} to create a new netCDF file named
     streamID = streamOpenWrite("foo.nc", FILETYPE_NC);
     if ( streamID < 0 ) handle_error(streamID);
        ...
-\end{verbatim}
+\end{lstlisting}
 
 
 \section{Open a dataset for reading: {\tt streamOpenRead}}
@@ -104,7 +107,10 @@ Library not available
 
 \subsection*{Example}
 
-Here is an example using {\tt streamOpenRead} to open an existing netCDFfile named {\tt foo.nc} for reading:\begin{verbatim}
+Here is an example using {\tt streamOpenRead} to open an existing netCDF
+file named {\tt foo.nc} for reading:
+
+\begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
     #include <cdi.h>
        ...
     int streamID;
@@ -112,7 +118,7 @@ Here is an example using {\tt streamOpenRead} to open an existing netCDFfile nam
     streamID = streamOpenRead("foo.nc");
     if ( streamID < 0 ) handle_error(streamID);
        ...
-\end{verbatim}
+\end{lstlisting}
 
 
 \section{Close an open dataset: {\tt streamClose}}
@@ -162,7 +168,7 @@ Stream identifier
 {\tt streamInqFiletype} returns the type of the file format,
 one of the set of predefined CDI file format types.
 The valid CDI file format types are {\tt FILETYPE\_GRB}, {\tt FILETYPE\_NC},
-{\tt FILETYPE\_NC2}, {\tt FILETYPE\_SRV}, and {\tt FILETYPE\_EXT}.
+{\tt FILETYPE\_NC2}, {\tt FILETYPE\_SRV}, {\tt FILETYPE\_EXT} and {\tt FILETYPE\_IEG}.
 
 
 
@@ -215,11 +221,11 @@ Stream identifier
 
 
 
-\section{Define timestep: {\tt streamDefTimestep}}
+\section{Define time step: {\tt streamDefTimestep}}
 \index{streamDefTimestep}
 \label{streamDefTimestep}
 
-The function {\tt streamDefTimestep} defines the timestep of a stream.
+The function {\tt streamDefTimestep} defines the time step of a stream.
 
 \subsection*{Usage}
 
@@ -239,15 +245,15 @@ Timestep identifier
 
 \subsection*{Result}
 
-{\tt streamDefTimestep} returns the number of records of the timestep.
+{\tt streamDefTimestep} returns the number of records of the time step.
 
 
 
-\section{Get timestep: {\tt streamInqTimestep}}
+\section{Get time step: {\tt streamInqTimestep}}
 \index{streamInqTimestep}
 \label{streamInqTimestep}
 
-The function {\tt streamInqTimestep} returns the timestep of a stream.
+The function {\tt streamInqTimestep} returns the time step of a stream.
 
 \subsection*{Usage}
 
@@ -267,13 +273,16 @@ Timestep identifier
 
 \subsection*{Result}
 
-{\tt streamInqTimestep} returns the number of records of the timestep.
+{\tt streamInqTimestep} returns the number of records of the time step.
 
 
 
 \section{Write a variable: {\tt streamWriteVar}}
 \index{streamWriteVar}
 \label{streamWriteVar}
+
+The function streamWriteVar writes the values of one time step of a variable 
+to an open dataset.
 \subsection*{Usage}
 
 \begin{verbatim}
@@ -283,11 +292,11 @@ Timestep identifier
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt streamID\ }
 \item[{\tt streamID}]
-Stream identifier
+Stream identifier, from a previous call to streamOpenWrite
 \item[{\tt varID}]
 Variable identifier
 \item[{\tt data}]
-Data
+Pointer to a block of data values to be written
 \item[{\tt nmiss}]
 Number of missing values
 
@@ -298,6 +307,9 @@ Number of missing values
 \section{Read a variable: {\tt streamReadVar}}
 \index{streamReadVar}
 \label{streamReadVar}
+
+The function streamReadVar reads all the values of one time step of a variable
+from an open dataset.
 \subsection*{Usage}
 
 \begin{verbatim}
@@ -307,11 +319,11 @@ Number of missing values
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt streamID\ }
 \item[{\tt streamID}]
-Stream identifier
+Stream identifier, from a previous call to streamOpenRead
 \item[{\tt varID}]
 Variable identifier
 \item[{\tt data}]
-Data
+Pointer to the location into which the data value is read
 \item[{\tt nmiss}]
 Number of missing values
 
@@ -322,6 +334,9 @@ Number of missing values
 \section{Write a horizontal slice of a variable: {\tt streamWriteVarSlice}}
 \index{streamWriteVarSlice}
 \label{streamWriteVarSlice}
+
+The function streamWriteVarSlice writes the values of a horizontal slice of a 
+variable to an open dataset.
 \subsection*{Usage}
 
 \begin{verbatim}
@@ -332,13 +347,13 @@ Number of missing values
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt streamID\ }
 \item[{\tt streamID}]
-Stream identifier
+Stream identifier, from a previous call to streamOpenWrite
 \item[{\tt varID}]
 Variable identifier
 \item[{\tt levelID}]
 Level identifier
 \item[{\tt data}]
-Data
+Pointer to a block of data values to be written
 \item[{\tt nmiss}]
 Number of missing values
 
@@ -349,6 +364,9 @@ Number of missing values
 \section{Read a horizontal slice of a variable: {\tt streamReadVarSlice}}
 \index{streamReadVarSlice}
 \label{streamReadVarSlice}
+
+The function streamReadVar reads all the values of a horizontal slice of a variable
+from an open dataset.
 \subsection*{Usage}
 
 \begin{verbatim}
@@ -359,13 +377,13 @@ Number of missing values
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt streamID\ }
 \item[{\tt streamID}]
-Stream identifier
+Stream identifier, from a previous call to streamOpenRead
 \item[{\tt varID}]
 Variable identifier
 \item[{\tt levelID}]
 Level identifier
 \item[{\tt data}]
-Data
+Pointer to the location into which the data value is read
 \item[{\tt nmiss}]
 Number of missing values
 
diff --git a/doc/tex/c_taxis.tex b/doc/tex/c_taxis.tex
index 872691eae20e6c50bc1320c12c1863bd7749a84a..2822f806a43bb7a6f38f17e3e74c4336b41cb5f4 100644
--- a/doc/tex/c_taxis.tex
+++ b/doc/tex/c_taxis.tex
@@ -1,15 +1,15 @@
 
 
-\section{Create a new T-axis: {\tt taxisNew}}
-\index{taxisNew}
-\label{taxisNew}
+\section{Create a Time axis: {\tt taxisCreate}}
+\index{taxisCreate}
+\label{taxisCreate}
 
-The function {\tt taxisNew} creates a new Time axis.
+The function {\tt taxisCreate} creates a Time axis.
 
 \subsection*{Usage}
 
 \begin{verbatim}
-    int taxisNew(int taxistype);
+    int taxisCreate(int taxistype);
 \end{verbatim}
 
 \hspace*{4mm}\begin{minipage}[]{15cm}
@@ -23,10 +23,28 @@ The type of the time axis, one of the set of predefined CDI time types.
 
 \subsection*{Result}
 
-{\tt taxisNew} returns an identifier to the new T-axis.
+{\tt taxisCreate} returns an identifier to the Time axis.
 
 
 
+\section{Destroy a Time axis: {\tt taxisDestroy}}
+\index{taxisDestroy}
+\label{taxisDestroy}
+\subsection*{Usage}
+
+\begin{verbatim}
+    void taxisDestroy(int taxisID);
+\end{verbatim}
+
+\hspace*{4mm}\begin{minipage}[]{15cm}
+\begin{deflist}{\tt taxisID\ }
+\item[{\tt taxisID}]
+Identifier, from a previous call to {\tt taxisCreate}
+
+\end{deflist}
+\end{minipage}
+
+
 \section{Define the reference date: {\tt taxisDefRdate}}
 \index{taxisDefRdate}
 \label{taxisDefRdate}
diff --git a/doc/tex/c_vlist.tex b/doc/tex/c_vlist.tex
index 47433839237c1615a48647ab0596e7718ce8cb1e..4b6492cc0ea24cb0ed3f6f4045154a8342dca810 100644
--- a/doc/tex/c_vlist.tex
+++ b/doc/tex/c_vlist.tex
@@ -1,28 +1,28 @@
 
 
-\section{Create a variable list: {\tt vlistNew}}
-\index{vlistNew}
-\label{vlistNew}
+\section{Create a variable list: {\tt vlistCreate}}
+\index{vlistCreate}
+\label{vlistCreate}
 \subsection*{Usage}
 
 \begin{verbatim}
-    int vlistNew(void);
+    int vlistCreate(void);
 \end{verbatim}
 
 
-\section{Delete a variable list: {\tt vlistFree}}
-\index{vlistFree}
-\label{vlistFree}
+\section{Destroy a variable list: {\tt vlistDestroy}}
+\index{vlistDestroy}
+\label{vlistDestroy}
 \subsection*{Usage}
 
 \begin{verbatim}
-    void vlistFree(int vlistID);
+    void vlistDestroy(int vlistID);
 \end{verbatim}
 
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt vlistID\ }
 \item[{\tt vlistID}]
-Identifier, from a previous call to {\tt vlistNew}
+Identifier, from a previous call to {\tt vlistCreate}
 
 \end{deflist}
 \end{minipage}
diff --git a/doc/tex/c_vlist_var.tex b/doc/tex/c_vlist_var.tex
index b06571975275ac8a74de2f5645644641ed9aaaf7..289b5f5eb4bf8cabb8c164c25817510a602c93a7 100644
--- a/doc/tex/c_vlist_var.tex
+++ b/doc/tex/c_vlist_var.tex
@@ -15,11 +15,11 @@ The function {\tt vlistDefVar} adds a new variable to vlistID.
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt vlistID\ }
 \item[{\tt vlistID}]
-Variable list ID, from a previous call to vlistNew or vlistCopy
+Variable list ID, from a previous call to vlistCreate or vlistCopy
 \item[{\tt gridID}]
-Grid ID, from a previous call to gridNew
+Grid ID, from a previous call to gridCreate
 \item[{\tt zaxisID}]
-Z-axis ID, from a previous call to zaxisNew
+Z-axis ID, from a previous call to zaxisCreate
 \item[{\tt timeID}]
 One of the set of predefined CDI time identifiers.
                      The valid CDI time identifiers are TIME\_CONSTANT and TIME\_VARIABLE.
diff --git a/doc/tex/c_zaxis.tex b/doc/tex/c_zaxis.tex
index 2269cdea06ac1bf4d31157047628d67b77cc0d81..b0091e310339ff7aaa9b7d26456fa1418b4046a2 100644
--- a/doc/tex/c_zaxis.tex
+++ b/doc/tex/c_zaxis.tex
@@ -1,15 +1,15 @@
 
 
-\section{Create a new Z-axis: {\tt zaxisNew}}
-\index{zaxisNew}
-\label{zaxisNew}
+\section{Create a vertical Z-axis: {\tt zaxisCreate}}
+\index{zaxisCreate}
+\label{zaxisCreate}
 
-The function {\tt zaxisNew} creates a new Z-axis.
+The function {\tt zaxisCreate} creates a vertical Z-axis.
 
 \subsection*{Usage}
 
 \begin{verbatim}
-    int zaxisNew(int zaxistype, int size);
+    int zaxisCreate(int zaxistype, int size);
 \end{verbatim}
 
 \hspace*{4mm}\begin{minipage}[]{15cm}
@@ -27,10 +27,28 @@ Number of levels
 
 \subsection*{Result}
 
-{\tt zaxisNew} returns an identifier to the new Z-axis.
+{\tt zaxisCreate} returns an identifier to the vertical Z-axis.
 
 
 
+\section{Destroy a vertical Z-axis: {\tt zaxisDestroy}}
+\index{zaxisDestroy}
+\label{zaxisDestroy}
+\subsection*{Usage}
+
+\begin{verbatim}
+    void zaxisDestroy(int zaxisID);
+\end{verbatim}
+
+\hspace*{4mm}\begin{minipage}[]{15cm}
+\begin{deflist}{\tt zaxisID\ }
+\item[{\tt zaxisID}]
+Identifier, from a previous call to {\tt zaxisCreate}
+
+\end{deflist}
+\end{minipage}
+
+
 \section{Get the type of a Z-axis: {\tt zaxisInqType}}
 \index{zaxisInqType}
 \label{zaxisInqType}
diff --git a/doc/tex/cdi_cman.tex b/doc/tex/cdi_cman.tex
index 84db85b2f893437dd9aa76489a78f488ed478651..a7d2cc38bafdda685da4e178c0bcdaac795c0ecc 100644
--- a/doc/tex/cdi_cman.tex
+++ b/doc/tex/cdi_cman.tex
@@ -193,6 +193,9 @@
 \input{bib}
 
 
+\input{c_examples}
+
+
 \chapter*{Quick Reference\markboth{Quick Reference}{}}
 \addcontentsline{toc}{chapter}{Quick Reference}
 
diff --git a/doc/tex/f_grid.tex b/doc/tex/f_grid.tex
index 2478f233528c7feccb28654a74c2a37046e11055..1c0be1f9593c037029189bd957c5b338afaa7054 100644
--- a/doc/tex/f_grid.tex
+++ b/doc/tex/f_grid.tex
@@ -1,15 +1,15 @@
 
 
-\section{Create a new Grid: {\tt gridNew}}
-\index{gridNew}
-\label{gridNew}
+\section{Create a horizontal Grid: {\tt gridCreate}}
+\index{gridCreate}
+\label{gridCreate}
 
-The function {\tt gridNew} creates a new Grid.
+The function {\tt gridCreate} creates a horizontal Grid.
 
 \subsection*{Usage}
 
 \begin{verbatim}
-    INTEGER FUNCTION gridNew(INTEGER gridtype, INTEGER size)
+    INTEGER FUNCTION gridCreate(INTEGER gridtype, INTEGER size)
 \end{verbatim}
 
 \hspace*{4mm}\begin{minipage}[]{15cm}
@@ -26,12 +26,14 @@ Number of gridpoints.
 
 \subsection*{Result}
 
-{\tt gridNew} returns an identifier to the new Grid.
+{\tt gridCreate} returns an identifier to the Grid.
 
 
 \subsection*{Example}
 
-Here is an example using {\tt gridNew} to create a new {\tt LONLAT} Grid:\begin{verbatim}
+Here is an example using {\tt gridCreate} to create a {\tt LONLAT} Grid:
+
+\begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
     INCLUDE 'cdi.h'
        ...
     INTEGER gridID
@@ -40,20 +42,38 @@ Here is an example using {\tt gridNew} to create a new {\tt LONLAT} Grid:\begin{
     REAL*8 lons(nlon) = (/0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330/)
     REAL*8 lats(nlat) = (/-75, -45, -15, 15, 45, 75/)
        ...
-    gridID = gridNew(GRID_LONLAT, nlon*nlat)
+    gridID = gridCreate(GRID_LONLAT, nlon*nlat)
     CALL gridDefXsize(gridID, nlon)
     CALL gridDefYsize(gridID, nlat)
     CALL gridDefXvals(gridID, lons)
     CALL gridDefYvals(gridID, lats)
        ...
+\end{lstlisting}
+
+
+\section{Destroy a horizontal Grid: {\tt gridDestroy}}
+\index{gridDestroy}
+\label{gridDestroy}
+\subsection*{Usage}
+
+\begin{verbatim}
+    SUBROUTINE gridDestroy(INTEGER gridID)
 \end{verbatim}
 
+\hspace*{4mm}\begin{minipage}[]{15cm}
+\begin{deflist}{\tt gridID\ }
+\item[{\tt gridID}]
+Identifier, from a previous call to {\tt gridCreate}
+
+\end{deflist}
+\end{minipage}
+
 
-\section{Duplicate a grid: {\tt gridDuplicate}}
+\section{Duplicate a horizontal Grid: {\tt gridDuplicate}}
 \index{gridDuplicate}
 \label{gridDuplicate}
 
-The function {\tt gridDuplicate} duplicates a grid.
+The function {\tt gridDuplicate} duplicates a horizontal Grid.
 
 \subsection*{Usage}
 
@@ -64,7 +84,7 @@ The function {\tt gridDuplicate} duplicates a grid.
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt gridID\ }
 \item[{\tt gridID}]
-Identifier, from a previous call to {\tt gridNew},
+Identifier, from a previous call to {\tt gridCreate},
                    {\tt gridDuplicate} or {\tt vlistInqVarGrid}.
 
 \end{deflist}
@@ -72,7 +92,7 @@ Identifier, from a previous call to {\tt gridNew},
 
 \subsection*{Result}
 
-{\tt gridDuplicate} returns an identifier to the duplicated grid.
+{\tt gridDuplicate} returns an identifier to the duplicated Grid.
 
 
 
diff --git a/doc/tex/f_ref.tex b/doc/tex/f_ref.tex
index 1a997eacd6788c0eca22a43f7dcd57551d0bda36..01af3d217f98f863e6ec972d7ea8ceef366ed399 100644
--- a/doc/tex/f_ref.tex
+++ b/doc/tex/f_ref.tex
@@ -1,5 +1,14 @@
 
 
+\section*{\tt \htmlref{gridCreate}{gridCreate}}
+
+\begin{verbatim}
+    INTEGER FUNCTION gridCreate(INTEGER gridtype, INTEGER size)
+\end{verbatim}
+
+Create a horizontal Grid
+
+
 \section*{\tt \htmlref{gridDefXbounds}{gridDefXbounds}}
 
 \begin{verbatim}
@@ -108,13 +117,22 @@ Define the units of a Y-axis
 Define the values of a Y-axis
 
 
+\section*{\tt \htmlref{gridDestroy}{gridDestroy}}
+
+\begin{verbatim}
+    SUBROUTINE gridDestroy(INTEGER gridID)
+\end{verbatim}
+
+Destroy a horizontal Grid
+
+
 \section*{\tt \htmlref{gridDuplicate}{gridDuplicate}}
 
 \begin{verbatim}
     INTEGER FUNCTION gridDuplicate(INTEGER gridID)
 \end{verbatim}
 
-Duplicate a grid
+Duplicate a horizontal Grid
 
 
 \section*{\tt \htmlref{gridInqSize}{gridInqSize}}
@@ -243,15 +261,6 @@ Get the units of a Y-axis
 Get all values of a Y-axis
 
 
-\section*{\tt \htmlref{gridNew}{gridNew}}
-
-\begin{verbatim}
-    INTEGER FUNCTION gridNew(INTEGER gridtype, INTEGER size)
-\end{verbatim}
-
-Create a new Grid
-
-
 \section*{\tt \htmlref{streamClose}{streamClose}}
 
 \begin{verbatim}
@@ -267,7 +276,7 @@ Close an open dataset
     INTEGER FUNCTION streamDefTimestep(INTEGER streamID, INTEGER tsID)
 \end{verbatim}
 
-Define timestep
+Define time step
 
 
 \section*{\tt \htmlref{streamDefVlist}{streamDefVlist}}
@@ -294,7 +303,7 @@ Get the filetype
     INTEGER FUNCTION streamInqTimestep(INTEGER streamID, INTEGER tsID)
 \end{verbatim}
 
-Get timestep
+Get time step
 
 
 \section*{\tt \htmlref{streamInqVlist}{streamInqVlist}}
@@ -364,6 +373,15 @@ Write a variable
 Write a horizontal slice of a variable
 
 
+\section*{\tt \htmlref{taxisCreate}{taxisCreate}}
+
+\begin{verbatim}
+    INTEGER FUNCTION taxisCreate(INTEGER taxistype)
+\end{verbatim}
+
+Create a Time axis
+
+
 \section*{\tt \htmlref{taxisDefCalendar}{taxisDefCalendar}}
 
 \begin{verbatim}
@@ -409,6 +427,15 @@ Define the verification date
 Define the verification time
 
 
+\section*{\tt \htmlref{taxisDestroy}{taxisDestroy}}
+
+\begin{verbatim}
+    SUBROUTINE taxisDestroy(INTEGER taxisID)
+\end{verbatim}
+
+Destroy a Time axis
+
+
 \section*{\tt \htmlref{taxisInqCalendar}{taxisInqCalendar}}
 
 \begin{verbatim}
@@ -454,15 +481,6 @@ Get the verification date
 Get the verification time
 
 
-\section*{\tt \htmlref{taxisNew}{taxisNew}}
-
-\begin{verbatim}
-    INTEGER FUNCTION taxisNew(INTEGER taxistype)
-\end{verbatim}
-
-Create a new T-axis
-
-
 \section*{\tt \htmlref{vlistCat}{vlistCat}}
 
 \begin{verbatim}
@@ -490,6 +508,15 @@ Copy a variable list
 Copy some entries of a variable list
 
 
+\section*{\tt \htmlref{vlistCreate}{vlistCreate}}
+
+\begin{verbatim}
+    INTEGER FUNCTION vlistCreate()
+\end{verbatim}
+
+Create a variable list
+
+
 \section*{\tt \htmlref{vlistDefVar}{vlistDefVar}}
 
 \begin{verbatim}
@@ -555,22 +582,22 @@ Define the name of a Variable
 Define the units of a Variable
 
 
-\section*{\tt \htmlref{vlistDuplicate}{vlistDuplicate}}
+\section*{\tt \htmlref{vlistDestroy}{vlistDestroy}}
 
 \begin{verbatim}
-    INTEGER FUNCTION vlistDuplicate(INTEGER vlistID)
+    SUBROUTINE vlistDestroy(INTEGER vlistID)
 \end{verbatim}
 
-Duplicate a variable list
+Destroy a variable list
 
 
-\section*{\tt \htmlref{vlistFree}{vlistFree}}
+\section*{\tt \htmlref{vlistDuplicate}{vlistDuplicate}}
 
 \begin{verbatim}
-    SUBROUTINE vlistFree(INTEGER vlistID)
+    INTEGER FUNCTION vlistDuplicate(INTEGER vlistID)
 \end{verbatim}
 
-Delete a variable list
+Duplicate a variable list
 
 
 \section*{\tt \htmlref{vlistInqVarCode}{vlistInqVarCode}}
@@ -628,15 +655,6 @@ Get the name of a Variable
 Get the units of a Variable
 
 
-\section*{\tt \htmlref{vlistNew}{vlistNew}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistNew()
-\end{verbatim}
-
-Create a variable list
-
-
 \section*{\tt \htmlref{vlistNgrids}{vlistNgrids}}
 
 \begin{verbatim}
@@ -664,6 +682,15 @@ Number of variables in a variable list
 Number of zaxis in a variable list
 
 
+\section*{\tt \htmlref{zaxisCreate}{zaxisCreate}}
+
+\begin{verbatim}
+    INTEGER FUNCTION zaxisCreate(INTEGER zaxistype, INTEGER size)
+\end{verbatim}
+
+Create a vertical Z-axis
+
+
 \section*{\tt \htmlref{zaxisDefLevels}{zaxisDefLevels}}
 
 \begin{verbatim}
@@ -700,6 +727,15 @@ Define the name of a Z-axis
 Define the units of a Z-axis
 
 
+\section*{\tt \htmlref{zaxisDestroy}{zaxisDestroy}}
+
+\begin{verbatim}
+    SUBROUTINE zaxisDestroy(INTEGER zaxisID)
+\end{verbatim}
+
+Destroy a vertical Z-axis
+
+
 \section*{\tt \htmlref{zaxisInqLevel}{zaxisInqLevel}}
 
 \begin{verbatim}
@@ -761,12 +797,3 @@ Get the type of a Z-axis
 \end{verbatim}
 
 Get the units of a Z-axis
-
-
-\section*{\tt \htmlref{zaxisNew}{zaxisNew}}
-
-\begin{verbatim}
-    INTEGER FUNCTION zaxisNew(INTEGER zaxistype, INTEGER size)
-\end{verbatim}
-
-Create a new Z-axis
diff --git a/doc/tex/f_stream.tex b/doc/tex/f_stream.tex
index 24efa65a02bed9cf6f7971fc9918c2c0bffcf181..b9141239acd1e10a2a45e15bc31cb62db0b1728c 100644
--- a/doc/tex/f_stream.tex
+++ b/doc/tex/f_stream.tex
@@ -18,7 +18,7 @@ The name of the new dataset
 \item[{\tt filetype}]
 The type of the file format, one of the set of predefined CDI file format types.
                      The valid CDI file format types are {\tt FILETYPE\_GRB}, {\tt FILETYPE\_NC},
-                     {\tt FILETYPE\_NC2}, {\tt FILETYPE\_SRV}, and {\tt FILETYPE\_EXT}.
+                     {\tt FILETYPE\_NC2}, {\tt FILETYPE\_SRV}, {\tt FILETYPE\_EXT} and {\tt FILETYPE\_IEG}.
 
 \end{deflist}
 \end{minipage}
@@ -48,7 +48,10 @@ Library not available
 
 \subsection*{Example}
 
-Here is an example using {\tt streamOpenWrite} to create a new netCDF file named {\tt foo.nc} for writing:\begin{verbatim}
+Here is an example using {\tt streamOpenWrite} to create a new netCDF file 
+named {\tt foo.nc} for writing:
+
+\begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
     INCLUDE 'cdi.h'
        ...
     INTEGER streamID
@@ -56,7 +59,7 @@ Here is an example using {\tt streamOpenWrite} to create a new netCDF file named
     streamID = streamOpenWrite("foo.nc", FILETYPE_NC)
     IF ( streamID .LT. 0 ) CALL handle_error(streamID)
        ...
-\end{verbatim}
+\end{lstlisting}
 
 
 \section{Open a dataset for reading: {\tt streamOpenRead}}
@@ -104,7 +107,10 @@ Library not available
 
 \subsection*{Example}
 
-Here is an example using {\tt streamOpenRead} to open an existing netCDFfile named {\tt foo.nc} for reading:\begin{verbatim}
+Here is an example using {\tt streamOpenRead} to open an existing netCDF
+file named {\tt foo.nc} for reading:
+
+\begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
     INCLUDE 'cdi.h'
        ...
     INTEGER streamID
@@ -112,7 +118,7 @@ Here is an example using {\tt streamOpenRead} to open an existing netCDFfile nam
     streamID = streamOpenRead("foo.nc")
     IF ( streamID .LT. 0 ) CALL handle_error(streamID)
        ...
-\end{verbatim}
+\end{lstlisting}
 
 
 \section{Close an open dataset: {\tt streamClose}}
@@ -162,7 +168,7 @@ Stream identifier
 {\tt streamInqFiletype} returns the type of the file format,
 one of the set of predefined CDI file format types.
 The valid CDI file format types are {\tt FILETYPE\_GRB}, {\tt FILETYPE\_NC},
-{\tt FILETYPE\_NC2}, {\tt FILETYPE\_SRV}, and {\tt FILETYPE\_EXT}.
+{\tt FILETYPE\_NC2}, {\tt FILETYPE\_SRV}, {\tt FILETYPE\_EXT} and {\tt FILETYPE\_IEG}.
 
 
 
@@ -215,11 +221,11 @@ Stream identifier
 
 
 
-\section{Define timestep: {\tt streamDefTimestep}}
+\section{Define time step: {\tt streamDefTimestep}}
 \index{streamDefTimestep}
 \label{streamDefTimestep}
 
-The function {\tt streamDefTimestep} defines the timestep of a stream.
+The function {\tt streamDefTimestep} defines the time step of a stream.
 
 \subsection*{Usage}
 
@@ -239,15 +245,15 @@ Timestep identifier
 
 \subsection*{Result}
 
-{\tt streamDefTimestep} returns the number of records of the timestep.
+{\tt streamDefTimestep} returns the number of records of the time step.
 
 
 
-\section{Get timestep: {\tt streamInqTimestep}}
+\section{Get time step: {\tt streamInqTimestep}}
 \index{streamInqTimestep}
 \label{streamInqTimestep}
 
-The function {\tt streamInqTimestep} returns the timestep of a stream.
+The function {\tt streamInqTimestep} returns the time step of a stream.
 
 \subsection*{Usage}
 
@@ -267,13 +273,16 @@ Timestep identifier
 
 \subsection*{Result}
 
-{\tt streamInqTimestep} returns the number of records of the timestep.
+{\tt streamInqTimestep} returns the number of records of the time step.
 
 
 
 \section{Write a variable: {\tt streamWriteVar}}
 \index{streamWriteVar}
 \label{streamWriteVar}
+
+The function streamWriteVar writes the values of one time step of a variable 
+to an open dataset.
 \subsection*{Usage}
 
 \begin{verbatim}
@@ -284,11 +293,11 @@ Timestep identifier
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt streamID\ }
 \item[{\tt streamID}]
-Stream identifier
+Stream identifier, from a previous call to streamOpenWrite
 \item[{\tt varID}]
 Variable identifier
 \item[{\tt data}]
-Data
+Pointer to a block of data values to be written
 \item[{\tt nmiss}]
 Number of missing values
 
@@ -299,6 +308,9 @@ Number of missing values
 \section{Read a variable: {\tt streamReadVar}}
 \index{streamReadVar}
 \label{streamReadVar}
+
+The function streamReadVar reads all the values of one time step of a variable
+from an open dataset.
 \subsection*{Usage}
 
 \begin{verbatim}
@@ -309,11 +321,11 @@ Number of missing values
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt streamID\ }
 \item[{\tt streamID}]
-Stream identifier
+Stream identifier, from a previous call to streamOpenRead
 \item[{\tt varID}]
 Variable identifier
 \item[{\tt data}]
-Data
+Pointer to the location into which the data value is read
 \item[{\tt nmiss}]
 Number of missing values
 
@@ -324,6 +336,9 @@ Number of missing values
 \section{Write a horizontal slice of a variable: {\tt streamWriteVarSlice}}
 \index{streamWriteVarSlice}
 \label{streamWriteVarSlice}
+
+The function streamWriteVarSlice writes the values of a horizontal slice of a 
+variable to an open dataset.
 \subsection*{Usage}
 
 \begin{verbatim}
@@ -334,13 +349,13 @@ Number of missing values
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt streamID\ }
 \item[{\tt streamID}]
-Stream identifier
+Stream identifier, from a previous call to streamOpenWrite
 \item[{\tt varID}]
 Variable identifier
 \item[{\tt levelID}]
 Level identifier
 \item[{\tt data}]
-Data
+Pointer to a block of data values to be written
 \item[{\tt nmiss}]
 Number of missing values
 
@@ -351,6 +366,9 @@ Number of missing values
 \section{Read a horizontal slice of a variable: {\tt streamReadVarSlice}}
 \index{streamReadVarSlice}
 \label{streamReadVarSlice}
+
+The function streamReadVar reads all the values of a horizontal slice of a variable
+from an open dataset.
 \subsection*{Usage}
 
 \begin{verbatim}
@@ -361,13 +379,13 @@ Number of missing values
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt streamID\ }
 \item[{\tt streamID}]
-Stream identifier
+Stream identifier, from a previous call to streamOpenRead
 \item[{\tt varID}]
 Variable identifier
 \item[{\tt levelID}]
 Level identifier
 \item[{\tt data}]
-Data
+Pointer to the location into which the data value is read
 \item[{\tt nmiss}]
 Number of missing values
 
diff --git a/doc/tex/f_taxis.tex b/doc/tex/f_taxis.tex
index 5f2ff32920517cc9095d727f1d71b31fb5da6d69..a5e11bce802fec28c1c0961478676ea49970b074 100644
--- a/doc/tex/f_taxis.tex
+++ b/doc/tex/f_taxis.tex
@@ -1,15 +1,15 @@
 
 
-\section{Create a new T-axis: {\tt taxisNew}}
-\index{taxisNew}
-\label{taxisNew}
+\section{Create a Time axis: {\tt taxisCreate}}
+\index{taxisCreate}
+\label{taxisCreate}
 
-The function {\tt taxisNew} creates a new Time axis.
+The function {\tt taxisCreate} creates a Time axis.
 
 \subsection*{Usage}
 
 \begin{verbatim}
-    INTEGER FUNCTION taxisNew(INTEGER taxistype)
+    INTEGER FUNCTION taxisCreate(INTEGER taxistype)
 \end{verbatim}
 
 \hspace*{4mm}\begin{minipage}[]{15cm}
@@ -23,10 +23,28 @@ The type of the time axis, one of the set of predefined CDI time types.
 
 \subsection*{Result}
 
-{\tt taxisNew} returns an identifier to the new T-axis.
+{\tt taxisCreate} returns an identifier to the Time axis.
 
 
 
+\section{Destroy a Time axis: {\tt taxisDestroy}}
+\index{taxisDestroy}
+\label{taxisDestroy}
+\subsection*{Usage}
+
+\begin{verbatim}
+    SUBROUTINE taxisDestroy(INTEGER taxisID)
+\end{verbatim}
+
+\hspace*{4mm}\begin{minipage}[]{15cm}
+\begin{deflist}{\tt taxisID\ }
+\item[{\tt taxisID}]
+Identifier, from a previous call to {\tt taxisCreate}
+
+\end{deflist}
+\end{minipage}
+
+
 \section{Define the reference date: {\tt taxisDefRdate}}
 \index{taxisDefRdate}
 \label{taxisDefRdate}
diff --git a/doc/tex/f_vlist.tex b/doc/tex/f_vlist.tex
index 158f6adafe8526c02757b71ad5d7fc8368f2344b..4fcf085ca2fc7ba07e13048cd79a6c944ec22f5c 100644
--- a/doc/tex/f_vlist.tex
+++ b/doc/tex/f_vlist.tex
@@ -1,28 +1,28 @@
 
 
-\section{Create a variable list: {\tt vlistNew}}
-\index{vlistNew}
-\label{vlistNew}
+\section{Create a variable list: {\tt vlistCreate}}
+\index{vlistCreate}
+\label{vlistCreate}
 \subsection*{Usage}
 
 \begin{verbatim}
-    INTEGER FUNCTION vlistNew()
+    INTEGER FUNCTION vlistCreate()
 \end{verbatim}
 
 
-\section{Delete a variable list: {\tt vlistFree}}
-\index{vlistFree}
-\label{vlistFree}
+\section{Destroy a variable list: {\tt vlistDestroy}}
+\index{vlistDestroy}
+\label{vlistDestroy}
 \subsection*{Usage}
 
 \begin{verbatim}
-    SUBROUTINE vlistFree(INTEGER vlistID)
+    SUBROUTINE vlistDestroy(INTEGER vlistID)
 \end{verbatim}
 
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt vlistID\ }
 \item[{\tt vlistID}]
-Identifier, from a previous call to {\tt vlistNew}
+Identifier, from a previous call to {\tt vlistCreate}
 
 \end{deflist}
 \end{minipage}
diff --git a/doc/tex/f_vlist_var.tex b/doc/tex/f_vlist_var.tex
index 4f82b56d5f3ad682d553b22f5b0ab2d5c42a61cf..5f228b7ac3f1c972fc64addf19d332fb073ba3a5 100644
--- a/doc/tex/f_vlist_var.tex
+++ b/doc/tex/f_vlist_var.tex
@@ -16,11 +16,11 @@ The function {\tt vlistDefVar} adds a new variable to vlistID.
 \hspace*{4mm}\begin{minipage}[]{15cm}
 \begin{deflist}{\tt vlistID\ }
 \item[{\tt vlistID}]
-Variable list ID, from a previous call to vlistNew or vlistCopy
+Variable list ID, from a previous call to vlistCreate or vlistCopy
 \item[{\tt gridID}]
-Grid ID, from a previous call to gridNew
+Grid ID, from a previous call to gridCreate
 \item[{\tt zaxisID}]
-Z-axis ID, from a previous call to zaxisNew
+Z-axis ID, from a previous call to zaxisCreate
 \item[{\tt timeID}]
 One of the set of predefined CDI time identifiers.
                      The valid CDI time identifiers are TIME\_CONSTANT and TIME\_VARIABLE.
diff --git a/doc/tex/f_zaxis.tex b/doc/tex/f_zaxis.tex
index 52f554c257e9c9676c5d8035f25625389c52749d..71b10f5b7f04d128955bb7e97a2a30980e14440e 100644
--- a/doc/tex/f_zaxis.tex
+++ b/doc/tex/f_zaxis.tex
@@ -1,15 +1,15 @@
 
 
-\section{Create a new Z-axis: {\tt zaxisNew}}
-\index{zaxisNew}
-\label{zaxisNew}
+\section{Create a vertical Z-axis: {\tt zaxisCreate}}
+\index{zaxisCreate}
+\label{zaxisCreate}
 
-The function {\tt zaxisNew} creates a new Z-axis.
+The function {\tt zaxisCreate} creates a vertical Z-axis.
 
 \subsection*{Usage}
 
 \begin{verbatim}
-    INTEGER FUNCTION zaxisNew(INTEGER zaxistype, INTEGER size)
+    INTEGER FUNCTION zaxisCreate(INTEGER zaxistype, INTEGER size)
 \end{verbatim}
 
 \hspace*{4mm}\begin{minipage}[]{15cm}
@@ -27,10 +27,28 @@ Number of levels
 
 \subsection*{Result}
 
-{\tt zaxisNew} returns an identifier to the new Z-axis.
+{\tt zaxisCreate} returns an identifier to the vertical Z-axis.
 
 
 
+\section{Destroy a vertical Z-axis: {\tt zaxisDestroy}}
+\index{zaxisDestroy}
+\label{zaxisDestroy}
+\subsection*{Usage}
+
+\begin{verbatim}
+    SUBROUTINE zaxisDestroy(INTEGER zaxisID)
+\end{verbatim}
+
+\hspace*{4mm}\begin{minipage}[]{15cm}
+\begin{deflist}{\tt zaxisID\ }
+\item[{\tt zaxisID}]
+Identifier, from a previous call to {\tt zaxisCreate}
+
+\end{deflist}
+\end{minipage}
+
+
 \section{Get the type of a Z-axis: {\tt zaxisInqType}}
 \index{zaxisInqType}
 \label{zaxisInqType}
diff --git a/doc/tex/formats.tex b/doc/tex/formats.tex
index 3b2790e453ca7b5a49d2c8948f4d52fce7a08da6..0ee69da1e43a2d531793694db2845cecc5fc8dba 100644
--- a/doc/tex/formats.tex
+++ b/doc/tex/formats.tex
@@ -6,16 +6,20 @@ over an unlimited number of time steps.
 
 \section{netCDF}
 
-NetCDF (network Common Data Form) is an interface for array-oriented data
+\htmlref{NetCDF}{NetCDF} (network Common Data Form) is an interface for array-oriented data
 access and a library that provides an implementation of the interface.
 The netCDF library also defines a machine-independent format for 
 representing scientific data. Together, the interface, library, and 
 format support the creation, access, and sharing of scientific data.
+
 CDI supports only 2D, 3D and 4D arrays and the attributes must follow the
 \href{http://ftp.unidata.ucar.edu/software/netcdf/docs/conventions.html}
      {GDT, COARDS or CF Conventions}.
+NetCDF is an external library and not part of CDI. To use netCDF with
+CDI the netCDF library must be installed before the configuration
+of the CDI library (see \htmlref{Build}{Build}).
 
-%ncdap
+\subsection{ncdap}
 
 
 \section{SERVICE}
@@ -31,10 +35,10 @@ The following Fortran code example can be used to read a
 SERVICE record with an accuarcy of 4 bytes:
 
 \begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
-   INTEGER*4 icode, ilevel, idate, itime, nlon, nlat, idispo1, idispo2
+   INTEGER*4 icode,ilevel,idate,itime,nlon,nlat,idispo1,idispo2
    REAL*4 field(mlon,mlat)
-
-   READ(unit) icode, ilevel, idate, itime, nlon, nlat, idispo1, idispo2
+      ...
+   READ(unit) icode,ilevel,idate,itime,nlon,nlat,idispo1,idispo2
    READ(unit) ((field(ilon,ilat), ilon=1,nlon), ilat=1,nlat)
 \end{lstlisting}
 
@@ -68,10 +72,10 @@ The following Fortran code example can be used to read an
 EXTRA record with an accuarcy of 4 bytes:
 
 \begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
-   INTEGER*4 idate, icode, ilevel, nsize
+   INTEGER*4 idate,icode,ilevel,nsize
    REAL*4 field(msize)
-
-   READ(unit) idate, icode, ilevel, nsize
+      ...
+   READ(unit) idate,icode,ilevel,nsize
    READ(unit) (field(isize),isize=1,nsize)
 \end{lstlisting}
 
@@ -91,10 +95,10 @@ The meaning of the variables are:
 
 \section{IEG}
 
-IEG is the standard output format of the regional model \htmlref{REMO}{REMO}.
+IEG is the standard binary output format of the regional model \htmlref{REMO}{REMO}.
 It is simple an unpacked GRIB format. The product and grid
-description section are coded with 32 bit integer values and the
-data section can have 32 or 64 bit IEEE floating point values.
+description section are coded with 4 byte integer values and the
+data section can have 4 or 8 byte IEEE floating point values.
 The header and the data section have the standard Fortran blocking
 for binary data records.
 CDI supports only data on an rotated grid for the IEG format.
diff --git a/doc/tex/makedoc b/doc/tex/makedoc
index 90638dc7c30054c93bfff327aae4746b151a1aac..49458ae5ac23a99c0b43ab38ef6115725bf781e4 100755
--- a/doc/tex/makedoc
+++ b/doc/tex/makedoc
@@ -236,12 +236,14 @@ while (<MOFILE>) {
 	($kword) = split(" ", $tag, 1);
 	$kword = uc($kword);
 	if ( "$kword" eq "\@SOURCE" ) {
-	  printcfdoc ("\\begin{verbatim}\n");
+#	  printcfdoc ("\\begin{verbatim}\n");
+	  printcfdoc ("\\begin{lstlisting}[backgroundcolor=\\color{zebg}, basicstyle=\\footnotesize]\n");
 	  $source = 1;
 	  next;
 	}
 	if ( "$kword" eq "\@ENDSOURCE" ) {
-	  printcfdoc ("\\end{verbatim}\n");
+#	  printcfdoc ("\\end{verbatim}\n");
+	  printcfdoc ("\\end{lstlisting}\n");
 	  $source = 0;
 	  next;
 	}
@@ -399,9 +401,10 @@ sub printcfdoc {
   @list = @_;
   if ( $#list >= 0 ) {
     foreach $tag (@list) {
+      chomp $tag;
       $tag =~ s/_/\\_/og;
-      print CDOCFILE "$tag";
-      print FDOCFILE "$tag";
+      print CDOCFILE "$tag\n";
+      print FDOCFILE "$tag\n";
     }
   }
 }
diff --git a/doc/tex/usage.tex b/doc/tex/usage.tex
index b88934998f66557d4de566c1306f563210bbb927..f6fdcc3fc30b8d2c531db58c03ed7c2aab1a68ce 100644
--- a/doc/tex/usage.tex
+++ b/doc/tex/usage.tex
@@ -2,16 +2,16 @@
 
 Here is a typical sequence of CDI calls used to create a new dataset:
 
-\begin{verbatim}
-    gridNew              ! define a grid: from type and size
+\begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
+    gridCreate           ! create a horizontal Grid: from type and size
        ...
-    zaxisNew             ! define a Z-axis: from type and size
+    zaxisCreate          ! create a vertical Z-axis: from type and size
        ...
-    taxisNew             ! define a T-axis: from type
+    taxisCreate          ! create a Time axis: from type
        ...
-    vlistNew             ! create a variable list
+    vlistCreate          ! create a variable list
           ...
-       vlistDefVar       ! define variables: from grid and Z-axis
+       vlistDefVar       ! define variables: from Grid and Z-axis
           ...
     streamOpenWrite      ! create a dataset: from name and file type
        ...
@@ -22,28 +22,36 @@ Here is a typical sequence of CDI calls used to create a new dataset:
        streamWriteVar    ! write variable
           ...
     streamClose          ! close the dataset
-\end{verbatim}
+       ...
+    vlistDestroy         ! destroy the variable list
+       ...
+    taxisDestroy         ! destroy the Time axis
+       ...
+    zaxisDestroy         ! destroy the Z-axis
+       ...
+    gridDestroy          ! destroy the Grid
+\end{lstlisting}
 
 
 \section{Reading a dataset}
 
-\begin{verbatim}
+\begin{lstlisting}[backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
     streamOpenRead       ! open existing dataset
        ...
     streamInqVlist       ! find out what is in it
           ...
-       vlistInqVarGrid   ! get grid
+       vlistInqVarGrid   ! get an identifier to the Grid
           ...
-       vlistInqVarZaxis  ! get Z-axis
+       vlistInqVarZaxis  ! get an identifier to the Z-axis
           ...
-       vlistInqTaxis     ! get T-axis
+       vlistInqTaxis     ! get an identifier to the T-axis
           ...
     streamInqTimestep    ! get time step
           ...
        streamReadVar     ! read varible
           ...
     streamClose          ! close the dataset
-\end{verbatim}
+\end{lstlisting}
 
 
 \section{Compiling and Linking with the CDI library}
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..725767ab9cacc62149b75960c69404037d2863c2
--- /dev/null
+++ b/examples/Makefile.am
@@ -0,0 +1,16 @@
+## Process this file with automake to produce Makefile.in
+#
+bin_PROGRAMS = cdi_write cdi_read cdi_copy
+#
+cdi_write_SOURCES = cdi_write.c
+cdi_write_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
+#
+cdi_read_SOURCES = cdi_read.c
+cdi_read_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
+#
+cdi_copy_SOURCES = cdi_copy.c
+cdi_copy_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
+#
+CPPFLAGS = -I$(top_srcdir)/src
+#
+CLEANFILES  = `ls *~`
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644
index 0000000000000000000000000000000000000000..1690b78ff4212022b5ae8b1accc0df7f1f783429
--- /dev/null
+++ b/examples/Makefile.in
@@ -0,0 +1,349 @@
+# Makefile.in generated by automake 1.6.3 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = @program_transform_name@
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+
+EXEEXT = @EXEEXT@
+OBJEXT = @OBJEXT@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+AMTAR = @AMTAR@
+AR = @AR@
+AWK = @AWK@
+CC = @CC@
+CFINT = @CFINT@
+#
+CPPFLAGS = -I$(top_srcdir)/src
+DEPDIR = @DEPDIR@
+F77 = @F77@
+FC = @FC@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+VERSION = @VERSION@
+am__include = @am__include@
+am__quote = @am__quote@
+install_sh = @install_sh@
+
+#
+bin_PROGRAMS = cdi_write cdi_read cdi_copy
+#
+cdi_write_SOURCES = cdi_write.c
+cdi_write_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
+#
+cdi_read_SOURCES = cdi_read.c
+cdi_read_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
+#
+cdi_copy_SOURCES = cdi_copy.c
+cdi_copy_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
+#
+CLEANFILES = `ls *~`
+subdir = examples
+mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+bin_PROGRAMS = cdi_write$(EXEEXT) cdi_read$(EXEEXT) cdi_copy$(EXEEXT)
+PROGRAMS = $(bin_PROGRAMS)
+
+am_cdi_copy_OBJECTS = cdi_copy.$(OBJEXT)
+cdi_copy_OBJECTS = $(am_cdi_copy_OBJECTS)
+cdi_copy_DEPENDENCIES = $(top_srcdir)/src/libcdi.a
+cdi_copy_LDFLAGS =
+am_cdi_read_OBJECTS = cdi_read.$(OBJEXT)
+cdi_read_OBJECTS = $(am_cdi_read_OBJECTS)
+cdi_read_DEPENDENCIES = $(top_srcdir)/src/libcdi.a
+cdi_read_LDFLAGS =
+am_cdi_write_OBJECTS = cdi_write.$(OBJEXT)
+cdi_write_OBJECTS = $(am_cdi_write_OBJECTS)
+cdi_write_DEPENDENCIES = $(top_srcdir)/src/libcdi.a
+cdi_write_LDFLAGS =
+
+DEFS = @DEFS@
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)/src
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+depcomp = $(SHELL) $(top_srcdir)/config/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/cdi_copy.Po ./$(DEPDIR)/cdi_read.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/cdi_write.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CFLAGS = @CFLAGS@
+DIST_SOURCES = $(cdi_copy_SOURCES) $(cdi_read_SOURCES) \
+	$(cdi_write_SOURCES)
+DIST_COMMON = Makefile.am Makefile.in
+SOURCES = $(cdi_copy_SOURCES) $(cdi_read_SOURCES) $(cdi_write_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  examples/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
+	  rm -f $(DESTDIR)$(bindir)/$$f; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+cdi_copy$(EXEEXT): $(cdi_copy_OBJECTS) $(cdi_copy_DEPENDENCIES) 
+	@rm -f cdi_copy$(EXEEXT)
+	$(LINK) $(cdi_copy_LDFLAGS) $(cdi_copy_OBJECTS) $(cdi_copy_LDADD) $(LIBS)
+cdi_read$(EXEEXT): $(cdi_read_OBJECTS) $(cdi_read_DEPENDENCIES) 
+	@rm -f cdi_read$(EXEEXT)
+	$(LINK) $(cdi_read_LDFLAGS) $(cdi_read_OBJECTS) $(cdi_read_LDADD) $(LIBS)
+cdi_write$(EXEEXT): $(cdi_write_OBJECTS) $(cdi_write_DEPENDENCIES) 
+	@rm -f cdi_write$(EXEEXT)
+	$(LINK) $(cdi_write_LDFLAGS) $(cdi_write_OBJECTS) $(cdi_write_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+distclean-compile:
+	-rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_copy.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_read.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_write.Po@am__quote@
+
+distclean-depend:
+	-rm -rf ./$(DEPDIR)
+
+.c.o:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+@AMDEP_TRUE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+	$(COMPILE) -c `cygpath -w $<`
+CCDEPMODE = @CCDEPMODE@
+uninstall-info-am:
+
+ETAGS = etags
+ETAGSFLAGS =
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@list='$(DISTFILES)'; for file in $$list; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+
+installdirs:
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-rm -f Makefile $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+
+distclean-am: clean-am distclean-compile distclean-depend \
+	distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am
+
+.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic distclean distclean-compile distclean-depend \
+	distclean-generic distclean-tags distdir dvi dvi-am info \
+	info-am install install-am install-binPROGRAMS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-info-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/cdi_copy.c b/examples/cdi_copy.c
new file mode 100644
index 0000000000000000000000000000000000000000..a797aa1e4417c9cff64e5d9f209b85a0b76660f0
--- /dev/null
+++ b/examples/cdi_copy.c
@@ -0,0 +1,86 @@
+#include "cdi.h"
+
+#define NLON  12 /* Number of longitudes */
+#define NLAT   6 /* Number of latitudes  */
+#define NLEV   5 /* Number of levels     */
+#define NTIME  3 /* Number of time steps */
+
+int main(void)
+{
+  int gridID, zaxisID1, zaxisID2, taxisID;
+  int vlistID, varID1, varID2, streamID;
+  int tsID;
+  int i, nmiss = 0;
+  double lons[NLON] = {0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330};
+  double lats[NLAT] = {-75, -45, -15, 15, 45, 75};
+  double levs[NLEV] = {101300, 92500, 85000, 50000, 20000};
+  double var1[NLON*NLAT];
+  double var2[NLON*NLAT*NLEV];
+
+  /* Create a LONLAT grid */
+  gridID  = gridCreate(GRID_LONLAT, NLON*NLAT);
+  gridDefXsize(gridID, NLON);
+  gridDefYsize(gridID, NLAT);
+  gridDefXvals(gridID, lons);
+  gridDefYvals(gridID, lats);
+
+  /* Create a surface Z-axis */
+  zaxisID1 = zaxisCreate(ZAXIS_SURFACE, 1);
+
+  /* Create a pressure level Z-axis */
+  zaxisID2 = zaxisCreate(ZAXIS_PRESSURE, NLEV);
+  zaxisDefLevels(zaxisID2, levs);
+ 
+  /* Create a variable list */
+  vlistID = vlistCreate();
+
+  /* Define the variables */
+  varID1  = vlistDefVar(vlistID, gridID, zaxisID1, TIME_VARIABLE);
+  varID2  = vlistDefVar(vlistID, gridID, zaxisID2, TIME_VARIABLE);
+
+  /* Define variable name */
+  vlistDefVarName(vlistID, varID1, "varname1");
+  vlistDefVarName(vlistID, varID2, "varname2");
+
+  /* Create a Time axis */
+  taxisID = taxisCreate(TAXIS_ABSOLUTE);
+
+  /* Assign the Time axis to the variable list */
+  vlistDefTaxis(vlistID, taxisID);
+
+  /* Create a dataset */
+  streamID  = streamOpenWrite("example.nc", FILETYPE_NC);
+
+  /* Assign the variable list to the dataset */
+  streamDefVlist(streamID, vlistID);
+
+  /* Loop over the number of time steps */
+  for ( tsID = 0; tsID < NTIME; tsID++ )
+    {
+      /* Set the verification date to 1985-01-01 + tsID */
+      taxisDefVdate(taxisID, 19850101+tsID);
+      /* Set the verification time to 12:00 */
+      taxisDefVtime(taxisID, 1200);
+      /* Define the time step */
+      streamDefTimestep(streamID, tsID);
+
+      /* Write var1 */
+      for ( i = 0; i < NLON*NLAT; i++ ) var1[i] = 1;
+      streamWriteVar(streamID, varID1, var1, nmiss);
+      /* Write var2 */
+      for ( i = 0; i < NLON*NLAT*NLEV; i++ ) var2[i] = 2;
+      streamWriteVar(streamID, varID2, var2, nmiss);
+    }
+
+  /* Close the output stream */
+  streamClose(streamID);
+
+  /* Destroy the created objects */
+  vlistDestroy(vlistID);
+  taxisDestroy(taxisID);
+  zaxisDestroy(zaxisID1);
+  zaxisDestroy(zaxisID2);
+  gridDestroy(gridID);
+
+  return 0;
+}
diff --git a/examples/cdi_read.c b/examples/cdi_read.c
new file mode 100644
index 0000000000000000000000000000000000000000..a797aa1e4417c9cff64e5d9f209b85a0b76660f0
--- /dev/null
+++ b/examples/cdi_read.c
@@ -0,0 +1,86 @@
+#include "cdi.h"
+
+#define NLON  12 /* Number of longitudes */
+#define NLAT   6 /* Number of latitudes  */
+#define NLEV   5 /* Number of levels     */
+#define NTIME  3 /* Number of time steps */
+
+int main(void)
+{
+  int gridID, zaxisID1, zaxisID2, taxisID;
+  int vlistID, varID1, varID2, streamID;
+  int tsID;
+  int i, nmiss = 0;
+  double lons[NLON] = {0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330};
+  double lats[NLAT] = {-75, -45, -15, 15, 45, 75};
+  double levs[NLEV] = {101300, 92500, 85000, 50000, 20000};
+  double var1[NLON*NLAT];
+  double var2[NLON*NLAT*NLEV];
+
+  /* Create a LONLAT grid */
+  gridID  = gridCreate(GRID_LONLAT, NLON*NLAT);
+  gridDefXsize(gridID, NLON);
+  gridDefYsize(gridID, NLAT);
+  gridDefXvals(gridID, lons);
+  gridDefYvals(gridID, lats);
+
+  /* Create a surface Z-axis */
+  zaxisID1 = zaxisCreate(ZAXIS_SURFACE, 1);
+
+  /* Create a pressure level Z-axis */
+  zaxisID2 = zaxisCreate(ZAXIS_PRESSURE, NLEV);
+  zaxisDefLevels(zaxisID2, levs);
+ 
+  /* Create a variable list */
+  vlistID = vlistCreate();
+
+  /* Define the variables */
+  varID1  = vlistDefVar(vlistID, gridID, zaxisID1, TIME_VARIABLE);
+  varID2  = vlistDefVar(vlistID, gridID, zaxisID2, TIME_VARIABLE);
+
+  /* Define variable name */
+  vlistDefVarName(vlistID, varID1, "varname1");
+  vlistDefVarName(vlistID, varID2, "varname2");
+
+  /* Create a Time axis */
+  taxisID = taxisCreate(TAXIS_ABSOLUTE);
+
+  /* Assign the Time axis to the variable list */
+  vlistDefTaxis(vlistID, taxisID);
+
+  /* Create a dataset */
+  streamID  = streamOpenWrite("example.nc", FILETYPE_NC);
+
+  /* Assign the variable list to the dataset */
+  streamDefVlist(streamID, vlistID);
+
+  /* Loop over the number of time steps */
+  for ( tsID = 0; tsID < NTIME; tsID++ )
+    {
+      /* Set the verification date to 1985-01-01 + tsID */
+      taxisDefVdate(taxisID, 19850101+tsID);
+      /* Set the verification time to 12:00 */
+      taxisDefVtime(taxisID, 1200);
+      /* Define the time step */
+      streamDefTimestep(streamID, tsID);
+
+      /* Write var1 */
+      for ( i = 0; i < NLON*NLAT; i++ ) var1[i] = 1;
+      streamWriteVar(streamID, varID1, var1, nmiss);
+      /* Write var2 */
+      for ( i = 0; i < NLON*NLAT*NLEV; i++ ) var2[i] = 2;
+      streamWriteVar(streamID, varID2, var2, nmiss);
+    }
+
+  /* Close the output stream */
+  streamClose(streamID);
+
+  /* Destroy the created objects */
+  vlistDestroy(vlistID);
+  taxisDestroy(taxisID);
+  zaxisDestroy(zaxisID1);
+  zaxisDestroy(zaxisID2);
+  gridDestroy(gridID);
+
+  return 0;
+}
diff --git a/examples/cdi_write.c b/examples/cdi_write.c
new file mode 100644
index 0000000000000000000000000000000000000000..a797aa1e4417c9cff64e5d9f209b85a0b76660f0
--- /dev/null
+++ b/examples/cdi_write.c
@@ -0,0 +1,86 @@
+#include "cdi.h"
+
+#define NLON  12 /* Number of longitudes */
+#define NLAT   6 /* Number of latitudes  */
+#define NLEV   5 /* Number of levels     */
+#define NTIME  3 /* Number of time steps */
+
+int main(void)
+{
+  int gridID, zaxisID1, zaxisID2, taxisID;
+  int vlistID, varID1, varID2, streamID;
+  int tsID;
+  int i, nmiss = 0;
+  double lons[NLON] = {0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330};
+  double lats[NLAT] = {-75, -45, -15, 15, 45, 75};
+  double levs[NLEV] = {101300, 92500, 85000, 50000, 20000};
+  double var1[NLON*NLAT];
+  double var2[NLON*NLAT*NLEV];
+
+  /* Create a LONLAT grid */
+  gridID  = gridCreate(GRID_LONLAT, NLON*NLAT);
+  gridDefXsize(gridID, NLON);
+  gridDefYsize(gridID, NLAT);
+  gridDefXvals(gridID, lons);
+  gridDefYvals(gridID, lats);
+
+  /* Create a surface Z-axis */
+  zaxisID1 = zaxisCreate(ZAXIS_SURFACE, 1);
+
+  /* Create a pressure level Z-axis */
+  zaxisID2 = zaxisCreate(ZAXIS_PRESSURE, NLEV);
+  zaxisDefLevels(zaxisID2, levs);
+ 
+  /* Create a variable list */
+  vlistID = vlistCreate();
+
+  /* Define the variables */
+  varID1  = vlistDefVar(vlistID, gridID, zaxisID1, TIME_VARIABLE);
+  varID2  = vlistDefVar(vlistID, gridID, zaxisID2, TIME_VARIABLE);
+
+  /* Define variable name */
+  vlistDefVarName(vlistID, varID1, "varname1");
+  vlistDefVarName(vlistID, varID2, "varname2");
+
+  /* Create a Time axis */
+  taxisID = taxisCreate(TAXIS_ABSOLUTE);
+
+  /* Assign the Time axis to the variable list */
+  vlistDefTaxis(vlistID, taxisID);
+
+  /* Create a dataset */
+  streamID  = streamOpenWrite("example.nc", FILETYPE_NC);
+
+  /* Assign the variable list to the dataset */
+  streamDefVlist(streamID, vlistID);
+
+  /* Loop over the number of time steps */
+  for ( tsID = 0; tsID < NTIME; tsID++ )
+    {
+      /* Set the verification date to 1985-01-01 + tsID */
+      taxisDefVdate(taxisID, 19850101+tsID);
+      /* Set the verification time to 12:00 */
+      taxisDefVtime(taxisID, 1200);
+      /* Define the time step */
+      streamDefTimestep(streamID, tsID);
+
+      /* Write var1 */
+      for ( i = 0; i < NLON*NLAT; i++ ) var1[i] = 1;
+      streamWriteVar(streamID, varID1, var1, nmiss);
+      /* Write var2 */
+      for ( i = 0; i < NLON*NLAT*NLEV; i++ ) var2[i] = 2;
+      streamWriteVar(streamID, varID2, var2, nmiss);
+    }
+
+  /* Close the output stream */
+  streamClose(streamID);
+
+  /* Destroy the created objects */
+  vlistDestroy(vlistID);
+  taxisDestroy(taxisID);
+  zaxisDestroy(zaxisID1);
+  zaxisDestroy(zaxisID2);
+  gridDestroy(gridID);
+
+  return 0;
+}
diff --git a/prog/Makefile.am b/prog/Makefile.am
index 66c48ef68885ced058af5214ef3843ae62d8fa6d..1774a8d9d216e5b3b6bf797ce552fac874409a55 100644
--- a/prog/Makefile.am
+++ b/prog/Makefile.am
@@ -4,11 +4,11 @@ bin_PROGRAMS = cdi createtable
 #
 cdi_SOURCES = cdi.c
 #
-cdi_LDADD = ../src/libcdi.a $(LDFLAGS) -lm
+cdi_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
 #
 createtable_SOURCES = createtable.c
 #
-createtable_LDADD = ../src/libcdi.a $(LDFLAGS) -lm
+createtable_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
 #
 CPPFLAGS = -I$(top_srcdir)/src
 #
diff --git a/prog/Makefile.in b/prog/Makefile.in
index d86db015578b46ca125856b14815eec66f524251..494c041554aa7f8ef22b3865eb0421394ff1ca7b 100644
--- a/prog/Makefile.in
+++ b/prog/Makefile.in
@@ -87,11 +87,11 @@ bin_PROGRAMS = cdi createtable
 #
 cdi_SOURCES = cdi.c
 #
-cdi_LDADD = ../src/libcdi.a $(LDFLAGS) -lm
+cdi_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
 #
 createtable_SOURCES = createtable.c
 #
-createtable_LDADD = ../src/libcdi.a $(LDFLAGS) -lm
+createtable_LDADD = $(top_srcdir)/src/libcdi.a $(LDFLAGS) -lm
 #
 CLEANFILES = `ls *~`
 subdir = prog
@@ -103,11 +103,11 @@ PROGRAMS = $(bin_PROGRAMS)
 
 am_cdi_OBJECTS = cdi.$(OBJEXT)
 cdi_OBJECTS = $(am_cdi_OBJECTS)
-cdi_DEPENDENCIES = ../src/libcdi.a
+cdi_DEPENDENCIES = $(top_srcdir)/src/libcdi.a
 cdi_LDFLAGS =
 am_createtable_OBJECTS = createtable.$(OBJEXT)
 createtable_OBJECTS = $(am_createtable_OBJECTS)
-createtable_DEPENDENCIES = ../src/libcdi.a
+createtable_DEPENDENCIES = $(top_srcdir)/src/libcdi.a
 createtable_LDFLAGS =
 
 DEFS = @DEFS@
diff --git a/src/cdi.h b/src/cdi.h
index acdc4d3aacfc415979641f55ea8126c987994e43..a14f2cb98743d75b0f7bcb3e33e4af3feb476f8d 100644
--- a/src/cdi.h
+++ b/src/cdi.h
@@ -127,11 +127,16 @@ void    streamDefVlist(int streamID, int vlistID);
 /*      streamInqVlist: Get the Vlist of a stream */
 int     streamInqVlist(int streamID);
 
+/*      streamInqFiletype: Get the filetype */
 int     streamInqFiletype(int streamID);
+
 void    streamDefByteorder(int streamID, int byteorder);
 int     streamInqByteorder(int streamID);
 
+/*      streamDefTimestep: Define time step */
 int     streamDefTimestep(int streamID, int tsID);
+
+/*      streamInqTimestep: Get time step */
 int     streamInqTimestep(int streamID, int tsID);
 
 char   *streamFilename(int streamID);
@@ -169,7 +174,7 @@ void    streamInqGinfo(int streamID, int *intnum, float *fltnum);
 /*      vlistCreate: Create a variable list */
 int     vlistCreate(void);
 
-/*      vlistDestroy: Delete a variable list */
+/*      vlistDestroy: Destroy a variable list */
 void    vlistDestroy(int vlistID);
 
 /*      vlistDuplicate: Duplicate a variable list */
@@ -308,9 +313,12 @@ int     gridInqMask(int gridID, int *mask);
 void    gridPrint(int gridID);
 int     gridSize(void);
 
-/*      gridCreate: Create a new Grid */
+/*      gridCreate: Create a horizontal Grid */
 int     gridCreate(int gridtype, int size);
 
+/*      gridDestroy: Destroy a horizontal Grid */
+void    gridDestroy(int gridID);
+
 /*      gridDuplicate: Duplicate a Grid */
 int     gridDuplicate(int gridID);
 
@@ -453,9 +461,12 @@ int     gridToCurvilinear(int gridID);
 
 void    zaxisName(int zaxistype, char *gridname);
 
-/*      zaxisCreate: Create a new Z-axis */
+/*      zaxisCreate: Create a vertical Z-axis */
 int     zaxisCreate(int leveltype, int size);
 
+/*      zaxisDestroy: Destroy a vertical Z-axis */
+void    zaxisDestroy(int zaxisID);
+
 /*      zaxisInqType: Get the type of a Z-axis */
 int     zaxisInqType(int zaxisID);
 
@@ -519,9 +530,12 @@ void    zaxisChangeType(int zaxisID, int leveltype);
 
 /* TAXIS routines */
 
-/*      taxisCreate: Create a new T-axis */
+/*      taxisCreate: Create a Time axis */
 int     taxisCreate(int timetype);
 
+/*      taxisDestroy: Destroy a Time axis */
+void    taxisDestroy(int taxisID);
+
 int     taxisDuplicate(int taxisID);
 
 void    taxisCopyTimestep(int taxisIDdes, int taxisIDsrc);
diff --git a/src/grid.c b/src/grid.c
index 5fe188cb583b266cd88b39a3c8be4ad8f42d4150..716e8eb85378ebfb9b3cefe42dd73f7e9684a2dd 100644
--- a/src/grid.c
+++ b/src/grid.c
@@ -557,7 +557,7 @@ static void defineYvals(int gridID)
 
 /*
 @Function  gridCreate
-@Title     Create a new Grid
+@Title     Create a horizontal Grid
 
 @Prototype int gridCreate(int gridtype, int size)
 @Parameter
@@ -567,13 +567,13 @@ static void defineYvals(int gridID)
     @Item  size      Number of gridpoints.
 
 @Description
-The function {\tt gridCreate} creates a new Grid.
+The function {\tt gridCreate} creates a horizontal Grid.
 
 @Result
-{\tt gridCreate} returns an identifier to the new Grid.
+{\tt gridCreate} returns an identifier to the Grid.
 
 @Example
-Here is an example using {\tt gridCreate} to create a new {\tt LONLAT} Grid:
+Here is an example using {\tt gridCreate} to create a {\tt LONLAT} Grid:
 
 @Source
 #include <cdi.h>
@@ -669,6 +669,21 @@ int gridCreate(int gridtype, int size)
 }
 
 
+/*
+@Function  gridDestroy
+@Title     Destroy a horizontal Grid
+
+@Prototype void gridDestroy(int gridID)
+@Parameter
+    @Item  gridID Identifier, from a previous call to {\tt gridCreate}
+
+@EndFunction
+*/
+void gridDestroy(int gridID)
+{
+}
+
+
 char *gridNamePtr(int gridtype)
 {
   char *name;
@@ -2313,7 +2328,7 @@ int gridGenerate(GRID grid)
 
 /*
 @Function  gridDuplicate
-@Title     Duplicate a grid
+@Title     Duplicate a horizontal Grid
 
 @Prototype int gridDuplicate(int gridID)
 @Parameter
@@ -2321,10 +2336,10 @@ int gridGenerate(GRID grid)
                    {\tt gridDuplicate} or {\tt vlistInqVarGrid}.
 
 @Description
-The function {\tt gridDuplicate} duplicates a grid.
+The function {\tt gridDuplicate} duplicates a horizontal Grid.
 
 @Result
-{\tt gridDuplicate} returns an identifier to the duplicated grid.
+{\tt gridDuplicate} returns an identifier to the duplicated Grid.
 
 @EndFunction
 */
diff --git a/src/stream.c b/src/stream.c
index 691baf5571973b460f2c55f5627c8770d8408a7d..c0d4ce3c22bd812a8e486498a2408fb5ee5257d0 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -195,7 +195,7 @@ The function {\tt streamInqFiletype} returns the filetype of a stream.
 {\tt streamInqFiletype} returns the type of the file format,
 one of the set of predefined CDI file format types.
 The valid CDI file format types are {\tt FILETYPE_GRB}, {\tt FILETYPE_NC},
-{\tt FILETYPE_NC2}, {\tt FILETYPE_SRV}, and {\tt FILETYPE_EXT}.
+{\tt FILETYPE_NC2}, {\tt FILETYPE_SRV}, {\tt FILETYPE_EXT} and {\tt FILETYPE_IEG}.
 
 @EndFunction
 */
@@ -817,7 +817,7 @@ int streamOpenAppend(const char *filename)
     @Item  path      The name of the new dataset
     @Item  filetype  The type of the file format, one of the set of predefined CDI file format types.
                      The valid CDI file format types are {\tt FILETYPE_GRB}, {\tt FILETYPE_NC},
-                     {\tt FILETYPE_NC2}, {\tt FILETYPE_SRV}, and {\tt FILETYPE_EXT}.
+                     {\tt FILETYPE_NC2}, {\tt FILETYPE_SRV}, {\tt FILETYPE_EXT} and {\tt FILETYPE_IEG}.
 
 @Description
 The function {\tt streamOpenWrite} creates a new datset.
@@ -984,7 +984,7 @@ void streamClose(int streamID)
 
 /*
 @Function  streamDefTimestep
-@Title     Define timestep
+@Title     Define time step
 
 @Prototype int streamDefTimestep(int streamID, int tsID)
 @Parameter
@@ -992,10 +992,10 @@ void streamClose(int streamID)
     @Item  tsID      Timestep identifier
 
 @Description
-The function {\tt streamDefTimestep} defines the timestep of a stream.
+The function {\tt streamDefTimestep} defines the time step of a stream.
 
 @Result
-{\tt streamDefTimestep} returns the number of records of the timestep.
+{\tt streamDefTimestep} returns the number of records of the time step.
 
 @EndFunction
 */
@@ -1046,7 +1046,7 @@ int streamDefTimestep(int streamID, int tsID)
 
 /*
 @Function  streamInqTimestep
-@Title     Get timestep
+@Title     Get time step
 
 @Prototype int streamInqTimestep(int streamID, int tsID)
 @Parameter
@@ -1054,10 +1054,10 @@ int streamDefTimestep(int streamID, int tsID)
     @Item  tsID      Timestep identifier
 
 @Description
-The function {\tt streamInqTimestep} returns the timestep of a stream.
+The function {\tt streamInqTimestep} returns the time step of a stream.
 
 @Result
-{\tt streamInqTimestep} returns the number of records of the timestep.
+{\tt streamInqTimestep} returns the number of records of the time step.
 
 @EndFunction
 */
@@ -1157,11 +1157,14 @@ int streamInqTimestep(int streamID, int tsID)
 
 @Prototype void streamReadVar(int streamID, int varID, double *data, int *nmiss)
 @Parameter
-    @Item  streamID  Stream identifier
+    @Item  streamID  Stream identifier, from a previous call to streamOpenRead
     @Item  varID     Variable identifier
-    @Item  data      Data
+    @Item  data      Pointer to the location into which the data value is read
     @Item  nmiss     Number of missing values
 
+@Description
+The function streamReadVar reads all the values of one time step of a variable
+from an open dataset.
 @EndFunction
 */
 void streamReadVar(int streamID, int varID, double *data, int *nmiss)
@@ -1231,11 +1234,14 @@ void streamReadVar(int streamID, int varID, double *data, int *nmiss)
 
 @Prototype void streamWriteVar(int streamID, int varID, double *data, int nmiss)
 @Parameter
-    @Item  streamID  Stream identifier
+    @Item  streamID  Stream identifier, from a previous call to streamOpenWrite
     @Item  varID     Variable identifier
-    @Item  data      Data
+    @Item  data      Pointer to a block of data values to be written
     @Item  nmiss     Number of missing values
 
+@Description
+The function streamWriteVar writes the values of one time step of a variable 
+to an open dataset.
 @EndFunction
 */
 void streamWriteVar(int streamID, int varID, double *data, int nmiss)
@@ -1306,12 +1312,15 @@ void streamWriteVar(int streamID, int varID, double *data, int nmiss)
 
 @Prototype void streamReadVarSlice(int streamID, int varID, int levelID, double *data, int *nmiss)
 @Parameter
-    @Item  streamID  Stream identifier
+    @Item  streamID  Stream identifier, from a previous call to streamOpenRead
     @Item  varID     Variable identifier
     @Item  levelID   Level identifier
-    @Item  data      Data
+    @Item  data      Pointer to the location into which the data value is read
     @Item  nmiss     Number of missing values
 
+@Description
+The function streamReadVar reads all the values of a horizontal slice of a variable
+from an open dataset.
 @EndFunction
 */
 void streamReadVarSlice(int streamID, int varID, int levelID, double *data, int *nmiss)
@@ -1379,12 +1388,15 @@ void streamReadVarSlice(int streamID, int varID, int levelID, double *data, int
 
 @Prototype void streamWriteVarSlice(int streamID, int varID, int levelID, double *data, int nmiss)
 @Parameter
-    @Item  streamID  Stream identifier
+    @Item  streamID  Stream identifier, from a previous call to streamOpenWrite
     @Item  varID     Variable identifier
     @Item  levelID   Level identifier
-    @Item  data      Data
+    @Item  data      Pointer to a block of data values to be written
     @Item  nmiss     Number of missing values
 
+@Description
+The function streamWriteVarSlice writes the values of a horizontal slice of a 
+variable to an open dataset.
 @EndFunction
 */
 void streamWriteVarSlice(int streamID, int varID, int levelID, double *data, int nmiss)
diff --git a/src/taxis.c b/src/taxis.c
index 91e4029bbe176cbd8ac753418f25e7699717a267..f9f216f64e5445e3950937950e5198831e0d0c77 100644
--- a/src/taxis.c
+++ b/src/taxis.c
@@ -179,7 +179,7 @@ static void taxisCheckID(const char *func, int taxisID)
 
 /*
 @Function  taxisCreate
-@Title     Create a new T-axis
+@Title     Create a Time axis
 
 @Prototype int taxisCreate(int taxistype)
 @Parameter
@@ -187,10 +187,10 @@ static void taxisCheckID(const char *func, int taxisID)
                       The valid CDI time types are {\tt TAXIS_ABSOLUTE} and {\tt TAXIS_RELATIVE}.
 
 @Description
-The function {\tt taxisCreate} creates a new Time axis.
+The function {\tt taxisCreate} creates a Time axis.
 
 @Result
-{\tt taxisCreate} returns an identifier to the new T-axis.
+{\tt taxisCreate} returns an identifier to the Time axis.
 
 @EndFunction
 */
@@ -212,6 +212,21 @@ int taxisCreate(int taxistype)
 }
 
 
+/*
+@Function  taxisDestroy
+@Title     Destroy a Time axis
+
+@Prototype void taxisDestroy(int taxisID)
+@Parameter
+    @Item  taxisID Identifier, from a previous call to {\tt taxisCreate}
+
+@EndFunction
+*/
+void taxisDestroy(int taxisID)
+{
+}
+
+
 int taxisDuplicate(int taxisID1)
 {
   static char func[] = "taxisDuplicate";
diff --git a/src/vlist.c b/src/vlist.c
index d0b820fb30a839469f672a50c2bc1159441df414..c94f4a7674f37d72831fc4e27b1d537027125cc0 100644
--- a/src/vlist.c
+++ b/src/vlist.c
@@ -260,7 +260,7 @@ int vlistCreate(void)
 
 /*
 @Function  vlistDestroy
-@Title     Delete a variable list
+@Title     Destroy a variable list
 
 @Prototype void vlistDestroy(int vlistID)
 @Parameter
diff --git a/src/zaxis.c b/src/zaxis.c
index bbeac3d5be7c427db27db6dcbc5707555b655bf4..4a707569caf7c7b4c92ccc58c635b07ea5554f3b 100644
--- a/src/zaxis.c
+++ b/src/zaxis.c
@@ -148,7 +148,7 @@ void zaxisCheckID(const char *func, int zaxisID)
 
 /*
 @Function  zaxisCreate
-@Title     Create a new Z-axis
+@Title     Create a vertical Z-axis
 
 @Prototype int zaxisCreate(int zaxistype, int size)
 @Parameter
@@ -159,10 +159,10 @@ void zaxisCheckID(const char *func, int zaxisID)
     @Item  size       Number of levels
 
 @Description
-The function {\tt zaxisCreate} creates a new Z-axis.
+The function {\tt zaxisCreate} creates a vertical Z-axis.
 
 @Result
-{\tt zaxisCreate} returns an identifier to the new Z-axis.
+{\tt zaxisCreate} returns an identifier to the vertical Z-axis.
 
 @EndFunction
 */
@@ -199,6 +199,21 @@ int zaxisCreate(int zaxistype, int size)
 }
 
 
+/*
+@Function  zaxisDestroy
+@Title     Destroy a vertical Z-axis
+
+@Prototype void zaxisDestroy(int zaxisID)
+@Parameter
+    @Item  zaxisID Identifier, from a previous call to {\tt zaxisCreate}
+
+@EndFunction
+*/
+void zaxisDestroy(int zaxisID)
+{
+}
+
+
 char *zaxisNamePtr(int leveltype)
 {
   char *name;