diff --git a/Makefile.am b/Makefile.am
index 76d8a83b75c6f5b30bced68b2dd68fd5b3ebe2c7..c24036aafca9b7048f665542016aa20e67ba0f34 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,4 +4,6 @@ SUBDIRS = src app examples tests
 #
 EXTRA_DIST=config/default doc/cdi_cman.pdf doc/cdi_fman.pdf src/cfortran.doc
 #
+ACLOCAL_AMFLAGS = -I m4
+#
 CLEANFILES  = `ls *~`
diff --git a/Makefile.in b/Makefile.in
index ad64f750605a8f7d3c952647c28685e82a00b620..631de7b6aec4e7b82d0bb1d3b5deb660c2468c1e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -39,8 +39,8 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
 	config/depcomp config/install-sh config/missing \
 	config/mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
@@ -96,6 +96,8 @@ EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCMODEXT = @FCMODEXT@
 FFLAGS = @FFLAGS@
 GREP = @GREP@
 INSTALL = @INSTALL@
@@ -128,6 +130,7 @@ abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -182,6 +185,8 @@ SUBDIRS = src app examples tests
 #
 EXTRA_DIST = config/default doc/cdi_cman.pdf doc/cdi_fman.pdf src/cfortran.doc
 #
+ACLOCAL_AMFLAGS = -I m4
+#
 CLEANFILES = `ls *~`
 all: all-recursive
 
diff --git a/aclocal.m4 b/aclocal.m4
index fcc414d3d828424e03972efe85a113e5dff0313c..2ce3c87fbc6c4f14380ca4a09f502c7419cd2cf3 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -872,4 +872,5 @@ AC_SUBST([am__tar])
 AC_SUBST([am__untar])
 ]) # _AM_PROG_TAR
 
+m4_include([m4/acx_sl_mod_suffix.m4])
 m4_include([acinclude.m4])
diff --git a/app/Makefile.in b/app/Makefile.in
index afdaa91d9de3c17d56df0456c25e34a425672ce1..51cee9165df62b831a7e8a43f3d65aea2a19abfb 100644
--- a/app/Makefile.in
+++ b/app/Makefile.in
@@ -38,8 +38,8 @@ noinst_PROGRAMS = createtable$(EXEEXT)
 subdir = app
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
@@ -90,6 +90,8 @@ EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCMODEXT = @FCMODEXT@
 FFLAGS = @FFLAGS@
 GREP = @GREP@
 INSTALL = @INSTALL@
@@ -122,6 +124,7 @@ abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
diff --git a/configure b/configure
index e9b8df1513bda7f7dcbe555bcf6addd31e5546a7..61e39905d07188a312a655c0c5ead56ef68b9bdf 100755
--- a/configure
+++ b/configure
@@ -710,7 +710,12 @@ RANLIB
 CPP
 GREP
 EGREP
+CREATE_ISOC_TRUE
+CREATE_ISOC_FALSE
 FC
+FCFLAGS
+ac_ct_FC
+FCMODEXT
 LIBOBJS
 LTLIBOBJS'
 ac_subst_files=''
@@ -726,7 +731,10 @@ LIBS
 CPPFLAGS
 F77
 FFLAGS
-CPP'
+CPP
+FC
+FCFLAGS
+FCMODEXT'
 
 
 # Initialize some variables set by options.
@@ -1311,6 +1319,10 @@ Optional Features:
   --enable-dependency-tracking   do not reject slow dependency extractors
   --disable-largefile     omit support for large files
   --enable-grib           GRIB support [default=yes]
+  --enable-iso-c-interface
+                          Create Fortran Interface via iso_c_bindings facility
+                          of F2003 [default=no].
+
   --enable-dap            Build OPeNDAP/DODS-enabled clients if possible
                           [default=no]
 
@@ -1355,6 +1367,9 @@ Some influential environment variables:
   F77         Fortran 77 compiler command
   FFLAGS      Fortran 77 compiler flags
   CPP         C preprocessor
+  FC          Fortran compiler command
+  FCFLAGS     Fortran compiler flags
+  FCMODEXT    file extension of compiled Fortran module files
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -6316,6 +6331,386 @@ echo $ECHO_N "checking for SERVICE support... $ECHO_C" >&6; }
 { echo "$as_me:$LINENO: result: $with_service" >&5
 echo "${ECHO_T}$with_service" >&6; }
 
+#  ----------------------------------------------------------------------
+#  Create the Fortran Interface via iso_c_binding module (Fortran 2003 Standard)
+#
+# Check whether --enable-iso-c-interface was given.
+if test "${enable_iso_c_interface+set}" = set; then
+  enableval=$enable_iso_c_interface; enable_isoc=${enableval}
+else
+  enable_isoc=no
+fi
+
+ if test $enable_isoc = 'yes'; then
+  CREATE_ISOC_TRUE=
+  CREATE_ISOC_FALSE='#'
+else
+  CREATE_ISOC_TRUE='#'
+  CREATE_ISOC_FALSE=
+fi
+
+if test "${enable_isoc}" = "yes"; then
+  ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_FC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$FC"; then
+  ac_cv_prog_FC="$FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+FC=$ac_cv_prog_FC
+if test -n "$FC"; then
+  { echo "$as_me:$LINENO: result: $FC" >&5
+echo "${ECHO_T}$FC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$FC" && break
+  done
+fi
+if test -z "$FC"; then
+  ac_ct_FC=$FC
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_FC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_FC"; then
+  ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_FC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FC=$ac_cv_prog_ac_ct_FC
+if test -n "$ac_ct_FC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_FC" >&5
+echo "${ECHO_T}$ac_ct_FC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_FC" && break
+done
+
+  if test "x$ac_ct_FC" = x; then
+    FC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf@gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    FC=$ac_ct_FC
+  fi
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for Fortran compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran compiler... $ECHO_C" >&6; }
+if test "${ac_cv_fc_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_fc_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_fc_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_fc_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FCFLAGS+set}
+ac_save_FFLAGS=$FCFLAGS
+FCFLAGS=
+{ echo "$as_me:$LINENO: checking whether $FC accepts -g" >&5
+echo $ECHO_N "checking whether $FC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_fc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  FCFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_fc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_prog_fc_g=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_fc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_fc_g" >&6; }
+if test "$ac_test_FFLAGS" = set; then
+  FCFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_fc_g = yes; then
+  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+    FCFLAGS="-g -O2"
+  else
+    FCFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+    FCFLAGS="-O2"
+  else
+    FCFLAGS=
+  fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+else
+  FC=$F77
+
+fi
+#  Check the module extension of the fortran compiler
+
+{ echo "$as_me:$LINENO: checking for suffix of module files" >&5
+echo $ECHO_N "checking for suffix of module files... $ECHO_C" >&6; }
+
+   ac_fc_mod_uppercase=no
+   ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+   cat >conftest.$ac_ext <<_ACEOF
+
+      module conftest
+       implicit none
+       integer :: i
+      end module conftest
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   while :; do
+     acx_fc_mod_name=
+        if test -n "conftest.$FCMODEXT" -a -f "conftest.$FCMODEXT"; then
+          acx_fc_mod_name="conftest.$FCMODEXT" ; break
+fi
+
+          if test -n "conftest.mod" -a -f "conftest.mod"; then
+          acx_fc_mod_name="conftest.mod" ; break
+fi
+
+          if test -n "conftest.MOD" -a -f "conftest.MOD"; then
+          acx_fc_mod_name="conftest.MOD" ; break
+fi
+
+          if test -n "conftest.M" -a -f "conftest.M"; then
+          acx_fc_mod_name="conftest.M" ; break
+fi
+
+          if test -n "CONFTEST.MOD" -a -f "CONFTEST.MOD"; then
+          acx_fc_mod_name="CONFTEST.MOD" ; break
+fi
+
+
+     break
+   done
+   rm -f conftest*
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   case "$acx_fc_mod_name" in
+       conftest.$FCMODEXT) : ;;
+  CONFTEST.$FCMODEXT) ac_fc_mod_uppercase=yes ;;
+  conftest.mod) FCMODEXT=mod ;;
+  conftest.MOD) FCMODEXT=MOD ;;
+  conftest.M) FCMODEXT=M ;;
+  CONFTEST.MOD) FCMODEXT=MOD
+        ac_fc_mod_uppercase=yes ;;
+esac
+
+   { echo "$as_me:$LINENO: result: ${FCMODEXT-not found}" >&5
+echo "${ECHO_T}${FCMODEXT-not found}" >&6; }
+   test "${FCMODEXT+set}" = set
+   if test $ac_fc_mod_uppercase = yes; then
+  { echo "$as_me:$LINENO: Fortran module filenames are uppercase." >&5
+echo "$as_me: Fortran module filenames are uppercase." >&6;}
+fi
+
+
+
+
 #  ----------------------------------------------------------------------
 #  Compile interface with internal EXTRA library
 #
@@ -7072,8 +7467,6 @@ fi
 
 
 
-FC=$F77
-
 
 
 
@@ -7190,6 +7583,13 @@ echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." >&2;}
    { (exit 1); exit 1; }; }
 fi
+if test -z "${CREATE_ISOC_TRUE}" && test -z "${CREATE_ISOC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"CREATE_ISOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"CREATE_ISOC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
 
 : ${CONFIG_STATUS=./config.status}
 ac_clean_files_save=$ac_clean_files
@@ -7822,7 +8222,7 @@ RANLIB!$RANLIB$ac_delim
 CPP!$CPP$ac_delim
 GREP!$GREP$ac_delim
 EGREP!$EGREP$ac_delim
-FC!$FC$ac_delim
+CREATE_ISOC_TRUE!$CREATE_ISOC_TRUE$ac_delim
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -7864,11 +8264,16 @@ _ACEOF
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
+CREATE_ISOC_FALSE!$CREATE_ISOC_FALSE$ac_delim
+FC!$FC$ac_delim
+FCFLAGS!$FCFLAGS$ac_delim
+ac_ct_FC!$ac_ct_FC$ac_delim
+FCMODEXT!$FCMODEXT$ac_delim
 LIBOBJS!$LIBOBJS$ac_delim
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 2; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 7; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
diff --git a/configure.ac b/configure.ac
index e3e5d6eb1476a2de53df9703e1bf1966f6aa28dd..f5b9ac4daede60f993af5de3467d3bb0dd0036fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -188,6 +188,22 @@ fi
 AC_MSG_CHECKING([for SERVICE support])
 AC_MSG_RESULT($with_service)
 
+#  ----------------------------------------------------------------------
+#  Create the Fortran Interface via iso_c_binding module (Fortran 2003 Standard)
+#
+AC_ARG_ENABLE(iso-c-interface,
+              AS_HELP_STRING([--enable-iso-c-interface],
+                             [Create Fortran Interface via iso_c_bindings facility of F2003 [[default=no]]]).
+              ,enable_isoc=${enableval},enable_isoc=no)
+AM_CONDITIONAL([CREATE_ISOC],[test $enable_isoc = 'yes'])
+if test "${enable_isoc}" = "yes"; then
+  AC_PROG_FC
+else
+  AC_SUBST([FC],$F77)
+fi
+#  Check the module extension of the fortran compiler
+ACX_SL_FC_MOD_SUFFIX(,[FCMODEXT=mod])
+
 #  ----------------------------------------------------------------------
 #  Compile interface with internal EXTRA library
 #
@@ -327,7 +343,6 @@ esac
 #  Check C / Fortran interface
 UD_CHECK_CFINT([$srcdir/src/cfortran.h])
 
-AC_SUBST([FC],$F77)
 AC_SUBST([CFINT])
 AC_SUBST([CPPFLAGS])
 AC_SUBST([AR])
diff --git a/doc/tex/bib.tex b/doc/tex/bib.tex
index ba9b305a77327282e21113c3a536fa9a80c56b48..293e1e3fbe53755c291ab4920309645cfad0330c 100644
--- a/doc/tex/bib.tex
+++ b/doc/tex/bib.tex
@@ -1,6 +1,5 @@
 \begin{thebibliography}{xx}
 
-\label{ECHAM}
 \bibitem[ECHAM]{ECHAM} \ \\
   \href{http://www.mpimet.mpg.de/wissenschaft/publikationen/reports.html}
        {The atmospheric general circulation model ECHAM5},
@@ -8,29 +7,24 @@
   \href{http://www.mpimet.mpg.de}
        {Max Planck Institute for Meteorologie}
 
-\label{GRIB}
 \bibitem[GRIB]{GRIB} \ \\
   \href{http://www.wmo.ch/web/www/WMOCodes/Guides/GRIB/GRIB1-Contents.html}
        {GRIB version 1},
   from the World Meteorological Organisation
   (\href{http://www.wmo.ch}{WMO})
 
-\label{NetCDF}
 \bibitem[NetCDF]{NetCDF} \ \\
   \href{http://www.unidata.ucar.edu/packages/netcdf/index.html}{NetCDF Software Package},
   from the
   \href{http://www.unidata.ucar.edu}{UNIDATA}
   Program Center of the University Corporation for Atmospheric Research
 
-\label{MPIOM}
 \bibitem[MPIOM]{MPIOM} \ \\
   The ocean model MPIOM,
   from the
   \href{http://www.mpimet.mpg.de}
        {Max Planck Institute for Meteorologie}
 
-
-\label{REMO}
 \bibitem[REMO]{REMO} \ \\
   The regional climate model REMO,
   from the
diff --git a/doc/tex/c_ref.tex b/doc/tex/c_ref.tex
index 3f6bae1e6f62ecb2a65c245d97b3fe8e4ccfe011..dc510e7dc8f047e722723982c129c07b5240564f 100644
--- a/doc/tex/c_ref.tex
+++ b/doc/tex/c_ref.tex
@@ -1,939 +1,1412 @@
 
 
-\section*{\tt \htmlref{gridCreate}{gridCreate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridCreate]{gridCreate}
+\else
+gridCreate
+\fi
+}
 \begin{verbatim}
     int gridCreate(int gridtype, int size);
 \end{verbatim}
 
 Create a horizontal Grid
+\ifpdfoutput{}{(\ref{gridCreate})}
 
 
-\section*{\tt \htmlref{gridDefXbounds}{gridDefXbounds}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXbounds]{gridDefXbounds}
+\else
+gridDefXbounds
+\fi
+}
 \begin{verbatim}
     void gridDefXbounds(int gridID, const double *xbounds);
 \end{verbatim}
 
 Define the bounds of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXbounds})}
 
 
-\section*{\tt \htmlref{gridDefXlongname}{gridDefXlongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXlongname]{gridDefXlongname}
+\else
+gridDefXlongname
+\fi
+}
 \begin{verbatim}
     void gridDefXlongname(int gridID, const char *longname);
 \end{verbatim}
 
 Define the longname of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXlongname})}
 
 
-\section*{\tt \htmlref{gridDefXname}{gridDefXname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXname]{gridDefXname}
+\else
+gridDefXname
+\fi
+}
 \begin{verbatim}
     void gridDefXname(int gridID, const char *name);
 \end{verbatim}
 
 Define the name of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXname})}
 
 
-\section*{\tt \htmlref{gridDefXsize}{gridDefXsize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXsize]{gridDefXsize}
+\else
+gridDefXsize
+\fi
+}
 \begin{verbatim}
     void gridDefXsize(int gridID, int xsize);
 \end{verbatim}
 
 Define the number of values of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXsize})}
 
 
-\section*{\tt \htmlref{gridDefXunits}{gridDefXunits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXunits]{gridDefXunits}
+\else
+gridDefXunits
+\fi
+}
 \begin{verbatim}
     void gridDefXunits(int gridID, const char *units);
 \end{verbatim}
 
 Define the units of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXunits})}
 
 
-\section*{\tt \htmlref{gridDefXvals}{gridDefXvals}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXvals]{gridDefXvals}
+\else
+gridDefXvals
+\fi
+}
 \begin{verbatim}
     void gridDefXvals(int gridID, const double *xvals);
 \end{verbatim}
 
 Define the values of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXvals})}
 
 
-\section*{\tt \htmlref{gridDefYbounds}{gridDefYbounds}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYbounds]{gridDefYbounds}
+\else
+gridDefYbounds
+\fi
+}
 \begin{verbatim}
     void gridDefYbounds(int gridID, const double *ybounds);
 \end{verbatim}
 
 Define the bounds of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYbounds})}
 
 
-\section*{\tt \htmlref{gridDefYlongname}{gridDefYlongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYlongname]{gridDefYlongname}
+\else
+gridDefYlongname
+\fi
+}
 \begin{verbatim}
     void gridDefYlongname(int gridID, const char *longname);
 \end{verbatim}
 
 Define the longname of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYlongname})}
 
 
-\section*{\tt \htmlref{gridDefYname}{gridDefYname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYname]{gridDefYname}
+\else
+gridDefYname
+\fi
+}
 \begin{verbatim}
     void gridDefYname(int gridID, const char *name);
 \end{verbatim}
 
 Define the name of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYname})}
 
 
-\section*{\tt \htmlref{gridDefYsize}{gridDefYsize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYsize]{gridDefYsize}
+\else
+gridDefYsize
+\fi
+}
 \begin{verbatim}
     void gridDefYsize(int gridID, int ysize);
 \end{verbatim}
 
 Define the number of values of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYsize})}
 
 
-\section*{\tt \htmlref{gridDefYunits}{gridDefYunits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYunits]{gridDefYunits}
+\else
+gridDefYunits
+\fi
+}
 \begin{verbatim}
     void gridDefYunits(int gridID, const char *units);
 \end{verbatim}
 
 Define the units of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYunits})}
 
 
-\section*{\tt \htmlref{gridDefYvals}{gridDefYvals}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYvals]{gridDefYvals}
+\else
+gridDefYvals
+\fi
+}
 \begin{verbatim}
     void gridDefYvals(int gridID, const double *yvals);
 \end{verbatim}
 
 Define the values of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYvals})}
 
 
-\section*{\tt \htmlref{gridDestroy}{gridDestroy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDestroy]{gridDestroy}
+\else
+gridDestroy
+\fi
+}
 \begin{verbatim}
     void gridDestroy(int gridID);
 \end{verbatim}
 
 Destroy a horizontal Grid
+\ifpdfoutput{}{(\ref{gridDestroy})}
 
 
-\section*{\tt \htmlref{gridDuplicate}{gridDuplicate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDuplicate]{gridDuplicate}
+\else
+gridDuplicate
+\fi
+}
 \begin{verbatim}
     int gridDuplicate(int gridID);
 \end{verbatim}
 
 Duplicate a horizontal Grid
+\ifpdfoutput{}{(\ref{gridDuplicate})}
 
 
-\section*{\tt \htmlref{gridInqSize}{gridInqSize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqSize]{gridInqSize}
+\else
+gridInqSize
+\fi
+}
 \begin{verbatim}
     int gridInqSize(int gridID);
 \end{verbatim}
 
 Get the size of a Grid
+\ifpdfoutput{}{(\ref{gridInqSize})}
 
 
-\section*{\tt \htmlref{gridInqType}{gridInqType}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqType]{gridInqType}
+\else
+gridInqType
+\fi
+}
 \begin{verbatim}
     int gridInqType(int gridID);
 \end{verbatim}
 
 Get the type of a Grid
+\ifpdfoutput{}{(\ref{gridInqType})}
 
 
-\section*{\tt \htmlref{gridInqXbounds}{gridInqXbounds}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXbounds]{gridInqXbounds}
+\else
+gridInqXbounds
+\fi
+}
 \begin{verbatim}
     int gridInqXbounds(int gridID, double *xbounds);
 \end{verbatim}
 
 Get the bounds of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXbounds})}
 
 
-\section*{\tt \htmlref{gridInqXlongname}{gridInqXlongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXlongname]{gridInqXlongname}
+\else
+gridInqXlongname
+\fi
+}
 \begin{verbatim}
     void gridInqXlongname(int gridID, const char *longname);
 \end{verbatim}
 
 Get the longname of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXlongname})}
 
 
-\section*{\tt \htmlref{gridInqXname}{gridInqXname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXname]{gridInqXname}
+\else
+gridInqXname
+\fi
+}
 \begin{verbatim}
     void gridInqXname(int gridID, const char *name);
 \end{verbatim}
 
 Get the name of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXname})}
 
 
-\section*{\tt \htmlref{gridInqXsize}{gridInqXsize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXsize]{gridInqXsize}
+\else
+gridInqXsize
+\fi
+}
 \begin{verbatim}
     void gridInqXsize(int gridID);
 \end{verbatim}
 
 Get the number of values of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXsize})}
 
 
-\section*{\tt \htmlref{gridInqXunits}{gridInqXunits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXunits]{gridInqXunits}
+\else
+gridInqXunits
+\fi
+}
 \begin{verbatim}
     void gridInqXunits(int gridID, const char *units);
 \end{verbatim}
 
 Get the units of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXunits})}
 
 
-\section*{\tt \htmlref{gridInqXvals}{gridInqXvals}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXvals]{gridInqXvals}
+\else
+gridInqXvals
+\fi
+}
 \begin{verbatim}
     int gridInqXvals(int gridID, double *xvals);
 \end{verbatim}
 
 Get all values of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXvals})}
 
 
-\section*{\tt \htmlref{gridInqYbounds}{gridInqYbounds}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYbounds]{gridInqYbounds}
+\else
+gridInqYbounds
+\fi
+}
 \begin{verbatim}
     int gridInqYbounds(int gridID, double *ybounds);
 \end{verbatim}
 
 Get the bounds of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYbounds})}
 
 
-\section*{\tt \htmlref{gridInqYlongname}{gridInqYlongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYlongname]{gridInqYlongname}
+\else
+gridInqYlongname
+\fi
+}
 \begin{verbatim}
     void gridInqXlongname(int gridID, const char *longname);
 \end{verbatim}
 
 Get the longname of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYlongname})}
 
 
-\section*{\tt \htmlref{gridInqYname}{gridInqYname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYname]{gridInqYname}
+\else
+gridInqYname
+\fi
+}
 \begin{verbatim}
     void gridInqYname(int gridID, const char *name);
 \end{verbatim}
 
 Get the name of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYname})}
 
 
-\section*{\tt \htmlref{gridInqYsize}{gridInqYsize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYsize]{gridInqYsize}
+\else
+gridInqYsize
+\fi
+}
 \begin{verbatim}
     void gridInqYsize(int gridID);
 \end{verbatim}
 
 Get the number of values of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYsize})}
 
 
-\section*{\tt \htmlref{gridInqYunits}{gridInqYunits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYunits]{gridInqYunits}
+\else
+gridInqYunits
+\fi
+}
 \begin{verbatim}
     void gridInqYunits(int gridID, const char *units);
 \end{verbatim}
 
 Get the units of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYunits})}
 
 
-\section*{\tt \htmlref{gridInqYvals}{gridInqYvals}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYvals]{gridInqYvals}
+\else
+gridInqYvals
+\fi
+}
 \begin{verbatim}
     int gridInqYvals(int gridID, double *yvals);
 \end{verbatim}
 
 Get all values of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYvals})}
 
 
-\section*{\tt \htmlref{streamClose}{streamClose}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamClose]{streamClose}
+\else
+streamClose
+\fi
+}
 \begin{verbatim}
     void streamClose(int streamID);
 \end{verbatim}
 
 Close an open dataset
+\ifpdfoutput{}{(\ref{streamClose})}
 
 
-\section*{\tt \htmlref{streamDefByteorder}{streamDefByteorder}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamDefByteorder]{streamDefByteorder}
+\else
+streamDefByteorder
+\fi
+}
 \begin{verbatim}
     void streamDefByteorder(int streamID, int byteorder);
 \end{verbatim}
 
 Define the byte order
+\ifpdfoutput{}{(\ref{streamDefByteorder})}
 
 
-\section*{\tt \htmlref{streamDefTimestep}{streamDefTimestep}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamDefTimestep]{streamDefTimestep}
+\else
+streamDefTimestep
+\fi
+}
 \begin{verbatim}
     int streamDefTimestep(int streamID, int tsID);
 \end{verbatim}
 
 Define time step
+\ifpdfoutput{}{(\ref{streamDefTimestep})}
 
 
-\section*{\tt \htmlref{streamDefVlist}{streamDefVlist}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamDefVlist]{streamDefVlist}
+\else
+streamDefVlist
+\fi
+}
 \begin{verbatim}
     void streamDefVlist(int streamID, int vlistID);
 \end{verbatim}
 
 Define the variable list
+\ifpdfoutput{}{(\ref{streamDefVlist})}
 
 
-\section*{\tt \htmlref{streamInqByteorder}{streamInqByteorder}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamInqByteorder]{streamInqByteorder}
+\else
+streamInqByteorder
+\fi
+}
 \begin{verbatim}
     int streamInqByteorder(int streamID);
 \end{verbatim}
 
 Get the byte order
+\ifpdfoutput{}{(\ref{streamInqByteorder})}
 
 
-\section*{\tt \htmlref{streamInqFiletype}{streamInqFiletype}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamInqFiletype]{streamInqFiletype}
+\else
+streamInqFiletype
+\fi
+}
 \begin{verbatim}
     int streamInqFiletype(int streamID);
 \end{verbatim}
 
 Get the filetype
+\ifpdfoutput{}{(\ref{streamInqFiletype})}
 
 
-\section*{\tt \htmlref{streamInqTimestep}{streamInqTimestep}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamInqTimestep]{streamInqTimestep}
+\else
+streamInqTimestep
+\fi
+}
 \begin{verbatim}
     int streamInqTimestep(int streamID, int tsID);
 \end{verbatim}
 
 Get time step
+\ifpdfoutput{}{(\ref{streamInqTimestep})}
 
 
-\section*{\tt \htmlref{streamInqVlist}{streamInqVlist}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamInqVlist]{streamInqVlist}
+\else
+streamInqVlist
+\fi
+}
 \begin{verbatim}
     int streamInqVlist(int streamID);
 \end{verbatim}
 
 Get the variable list
+\ifpdfoutput{}{(\ref{streamInqVlist})}
 
 
-\section*{\tt \htmlref{streamOpenRead}{streamOpenRead}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamOpenRead]{streamOpenRead}
+\else
+streamOpenRead
+\fi
+}
 \begin{verbatim}
     int streamOpenRead(const char *path);
 \end{verbatim}
 
 Open a dataset for reading
+\ifpdfoutput{}{(\ref{streamOpenRead})}
 
 
-\section*{\tt \htmlref{streamOpenWrite}{streamOpenWrite}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamOpenWrite]{streamOpenWrite}
+\else
+streamOpenWrite
+\fi
+}
 \begin{verbatim}
     int streamOpenWrite(const char *path, int filetype);
 \end{verbatim}
 
 Create a new dataset
+\ifpdfoutput{}{(\ref{streamOpenWrite})}
 
 
-\section*{\tt \htmlref{streamReadVar}{streamReadVar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamReadVar]{streamReadVar}
+\else
+streamReadVar
+\fi
+}
 \begin{verbatim}
     void streamReadVar(int streamID, int varID, double *data, int *nmiss);
 \end{verbatim}
 
 Read a variable
+\ifpdfoutput{}{(\ref{streamReadVar})}
 
 
-\section*{\tt \htmlref{streamReadVarSlice}{streamReadVarSlice}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamReadVarSlice]{streamReadVarSlice}
+\else
+streamReadVarSlice
+\fi
+}
 \begin{verbatim}
     void streamReadVarSlice(int streamID, int varID, int levelID, double *data, 
                             int *nmiss);
 \end{verbatim}
 
 Read a horizontal slice of a variable
+\ifpdfoutput{}{(\ref{streamReadVarSlice})}
 
 
-\section*{\tt \htmlref{streamWriteVar}{streamWriteVar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamWriteVar]{streamWriteVar}
+\else
+streamWriteVar
+\fi
+}
 \begin{verbatim}
     void streamWriteVar(int streamID, int varID, const double *data, int nmiss);
 \end{verbatim}
 
 Write a variable
+\ifpdfoutput{}{(\ref{streamWriteVar})}
 
 
-\section*{\tt \htmlref{streamWriteVarSlice}{streamWriteVarSlice}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamWriteVarSlice]{streamWriteVarSlice}
+\else
+streamWriteVarSlice
+\fi
+}
 \begin{verbatim}
     void streamWriteVarSlice(int streamID, int varID, int levelID, const double *data, 
                              int nmiss);
 \end{verbatim}
 
 Write a horizontal slice of a variable
+\ifpdfoutput{}{(\ref{streamWriteVarSlice})}
 
 
-\section*{\tt \htmlref{taxisCreate}{taxisCreate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisCreate]{taxisCreate}
+\else
+taxisCreate
+\fi
+}
 \begin{verbatim}
     int taxisCreate(int taxistype);
 \end{verbatim}
 
 Create a Time axis
+\ifpdfoutput{}{(\ref{taxisCreate})}
 
 
-\section*{\tt \htmlref{taxisDefCalendar}{taxisDefCalendar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefCalendar]{taxisDefCalendar}
+\else
+taxisDefCalendar
+\fi
+}
 \begin{verbatim}
     void taxisDefCalendar(int taxisID, int calendar);
 \end{verbatim}
 
 Define the calendar
+\ifpdfoutput{}{(\ref{taxisDefCalendar})}
 
 
-\section*{\tt \htmlref{taxisDefRdate}{taxisDefRdate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefRdate]{taxisDefRdate}
+\else
+taxisDefRdate
+\fi
+}
 \begin{verbatim}
     void taxisDefRdate(int taxisID, int rdate);
 \end{verbatim}
 
 Define the reference date
+\ifpdfoutput{}{(\ref{taxisDefRdate})}
 
 
-\section*{\tt \htmlref{taxisDefRtime}{taxisDefRtime}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefRtime]{taxisDefRtime}
+\else
+taxisDefRtime
+\fi
+}
 \begin{verbatim}
     void taxisDefRtime(int taxisID, int rtime);
 \end{verbatim}
 
 Define the reference time
+\ifpdfoutput{}{(\ref{taxisDefRtime})}
 
 
-\section*{\tt \htmlref{taxisDefVdate}{taxisDefVdate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefVdate]{taxisDefVdate}
+\else
+taxisDefVdate
+\fi
+}
 \begin{verbatim}
     void taxisDefVdate(int taxisID, int vdate);
 \end{verbatim}
 
 Define the verification date
+\ifpdfoutput{}{(\ref{taxisDefVdate})}
 
 
-\section*{\tt \htmlref{taxisDefVtime}{taxisDefVtime}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefVtime]{taxisDefVtime}
+\else
+taxisDefVtime
+\fi
+}
 \begin{verbatim}
     void taxisDefVtime(int taxisID, int vtime);
 \end{verbatim}
 
 Define the verification time
+\ifpdfoutput{}{(\ref{taxisDefVtime})}
 
 
-\section*{\tt \htmlref{taxisDestroy}{taxisDestroy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDestroy]{taxisDestroy}
+\else
+taxisDestroy
+\fi
+}
 \begin{verbatim}
     void taxisDestroy(int taxisID);
 \end{verbatim}
 
 Destroy a Time axis
+\ifpdfoutput{}{(\ref{taxisDestroy})}
 
 
-\section*{\tt \htmlref{taxisInqCalendar}{taxisInqCalendar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqCalendar]{taxisInqCalendar}
+\else
+taxisInqCalendar
+\fi
+}
 \begin{verbatim}
     int taxisInqCalendar(int taxisID);
 \end{verbatim}
 
 Get the calendar
+\ifpdfoutput{}{(\ref{taxisInqCalendar})}
 
 
-\section*{\tt \htmlref{taxisInqRdate}{taxisInqRdate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqRdate]{taxisInqRdate}
+\else
+taxisInqRdate
+\fi
+}
 \begin{verbatim}
     int taxisInqRdate(int taxisID);
 \end{verbatim}
 
 Get the reference date
+\ifpdfoutput{}{(\ref{taxisInqRdate})}
 
 
-\section*{\tt \htmlref{taxisInqRtime}{taxisInqRtime}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqRtime]{taxisInqRtime}
+\else
+taxisInqRtime
+\fi
+}
 \begin{verbatim}
     int taxisInqRtime(int taxisID);
 \end{verbatim}
 
 Get the reference time
+\ifpdfoutput{}{(\ref{taxisInqRtime})}
 
 
-\section*{\tt \htmlref{taxisInqVdate}{taxisInqVdate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqVdate]{taxisInqVdate}
+\else
+taxisInqVdate
+\fi
+}
 \begin{verbatim}
     int taxisInqVdate(int taxisID);
 \end{verbatim}
 
 Get the verification date
+\ifpdfoutput{}{(\ref{taxisInqVdate})}
 
 
-\section*{\tt \htmlref{taxisInqVtime}{taxisInqVtime}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqVtime]{taxisInqVtime}
+\else
+taxisInqVtime
+\fi
+}
 \begin{verbatim}
     int taxisInqVtime(int taxisID);
 \end{verbatim}
 
 Get the verification time
+\ifpdfoutput{}{(\ref{taxisInqVtime})}
 
 
-\section*{\tt \htmlref{vlistCat}{vlistCat}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistCat]{vlistCat}
+\else
+vlistCat
+\fi
+}
 \begin{verbatim}
     void vlistCat(int vlistID2, int vlistID1);
 \end{verbatim}
 
 Concatenate two variable lists
+\ifpdfoutput{}{(\ref{vlistCat})}
 
 
-\section*{\tt \htmlref{vlistCopy}{vlistCopy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistCopy]{vlistCopy}
+\else
+vlistCopy
+\fi
+}
 \begin{verbatim}
     void vlistCopy(int vlistID2, int vlistID1);
 \end{verbatim}
 
 Copy a variable list
+\ifpdfoutput{}{(\ref{vlistCopy})}
 
 
-\section*{\tt \htmlref{vlistCopyFlag}{vlistCopyFlag}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistCopyFlag]{vlistCopyFlag}
+\else
+vlistCopyFlag
+\fi
+}
 \begin{verbatim}
     void vlistCopyFlag(int vlistID2, int vlistID1);
 \end{verbatim}
 
 Copy some entries of a variable list
+\ifpdfoutput{}{(\ref{vlistCopyFlag})}
 
 
-\section*{\tt \htmlref{vlistCreate}{vlistCreate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistCreate]{vlistCreate}
+\else
+vlistCreate
+\fi
+}
 \begin{verbatim}
     int vlistCreate(void);
 \end{verbatim}
 
 Create a variable list
+\ifpdfoutput{}{(\ref{vlistCreate})}
 
 
-\section*{\tt \htmlref{vlistDefAttFlt}{vlistDefAttFlt}}
-
-\begin{verbatim}
-    int vlistDefAttFlt(int vlistID, int varID, const char *name, int len, 
-                       const double *dp);
-\end{verbatim}
-
-Define a floating point attribute
-
-
-\section*{\tt \htmlref{vlistDefAttInt}{vlistDefAttInt}}
-
-\begin{verbatim}
-    int vlistDefAttInt(int vlistID, int varID, const char *name, int len, const int *ip);
-\end{verbatim}
-
-Define an integer attribute
-
-
-\section*{\tt \htmlref{vlistDefAttTxt}{vlistDefAttTxt}}
-
-\begin{verbatim}
-    int vlistDefAttTxt(int vlistID, int varID, const char *name, int len, const char *tp);
-\end{verbatim}
-
-Define a text attribute
-
-
-\section*{\tt \htmlref{vlistDefTaxis}{vlistDefTaxis}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefTaxis]{vlistDefTaxis}
+\else
+vlistDefTaxis
+\fi
+}
 \begin{verbatim}
     void vlistDefTaxis(int vlistID, int taxisID);
 \end{verbatim}
 
 Define the time axis
+\ifpdfoutput{}{(\ref{vlistDefTaxis})}
 
 
-\section*{\tt \htmlref{vlistDefVar}{vlistDefVar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVar]{vlistDefVar}
+\else
+vlistDefVar
+\fi
+}
 \begin{verbatim}
     int vlistDefVar(int vlistID, int gridID, int zaxisID, int timeID);
 \end{verbatim}
 
 Define a Variable
+\ifpdfoutput{}{(\ref{vlistDefVar})}
 
 
-\section*{\tt \htmlref{vlistDefVarCode}{vlistDefVarCode}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarCode]{vlistDefVarCode}
+\else
+vlistDefVarCode
+\fi
+}
 \begin{verbatim}
     void vlistDefVarCode(int vlistID, int varID, int code);
 \end{verbatim}
 
 Define the code number of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarCode})}
 
 
-\section*{\tt \htmlref{vlistDefVarDatatype}{vlistDefVarDatatype}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarDatatype]{vlistDefVarDatatype}
+\else
+vlistDefVarDatatype
+\fi
+}
 \begin{verbatim}
     void vlistDefVarDatatype(int vlistID, int varID, int datatype);
 \end{verbatim}
 
 Define the data type of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarDatatype})}
 
 
-\section*{\tt \htmlref{vlistDefVarLongname}{vlistDefVarLongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarLongname]{vlistDefVarLongname}
+\else
+vlistDefVarLongname
+\fi
+}
 \begin{verbatim}
     void vlistDefVarLongname(int vlistID, int varID, const char *longname);
 \end{verbatim}
 
 Define the long name of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarLongname})}
 
 
-\section*{\tt \htmlref{vlistDefVarMissval}{vlistDefVarMissval}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarMissval]{vlistDefVarMissval}
+\else
+vlistDefVarMissval
+\fi
+}
 \begin{verbatim}
     void vlistDefVarMissval(int vlistID, int varID, double missval);
 \end{verbatim}
 
 Define the missing value of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarMissval})}
 
 
-\section*{\tt \htmlref{vlistDefVarName}{vlistDefVarName}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarName]{vlistDefVarName}
+\else
+vlistDefVarName
+\fi
+}
 \begin{verbatim}
     void vlistDefVarName(int vlistID, int varID, const char *name);
 \end{verbatim}
 
 Define the name of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarName})}
 
 
-\section*{\tt \htmlref{vlistDefVarStdname}{vlistDefVarStdname}}
-
-\begin{verbatim}
-    void vlistDefVarStdname(int vlistID, int varID, const char *stdname);
-\end{verbatim}
-
-Define the standard name of a Variable
-
-
-\section*{\tt \htmlref{vlistDefVarUnits}{vlistDefVarUnits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarUnits]{vlistDefVarUnits}
+\else
+vlistDefVarUnits
+\fi
+}
 \begin{verbatim}
     void vlistDefVarUnits(int vlistID, int varID, const char *units);
 \end{verbatim}
 
 Define the units of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarUnits})}
 
 
-\section*{\tt \htmlref{vlistDestroy}{vlistDestroy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDestroy]{vlistDestroy}
+\else
+vlistDestroy
+\fi
+}
 \begin{verbatim}
     void vlistDestroy(int vlistID);
 \end{verbatim}
 
 Destroy a variable list
+\ifpdfoutput{}{(\ref{vlistDestroy})}
 
 
-\section*{\tt \htmlref{vlistDuplicate}{vlistDuplicate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDuplicate]{vlistDuplicate}
+\else
+vlistDuplicate
+\fi
+}
 \begin{verbatim}
     int vlistDuplicate(int vlistID);
 \end{verbatim}
 
 Duplicate a variable list
+\ifpdfoutput{}{(\ref{vlistDuplicate})}
 
 
-\section*{\tt \htmlref{vlistInqAtt}{vlistInqAtt}}
-
-\begin{verbatim}
-    int vlistInqAtt(int vlistID, int varID, int attnum, char *name, int *typep, int *lenp);
-\end{verbatim}
-
-Get information about an attribute
-
-
-\section*{\tt \htmlref{vlistInqAttFlt}{vlistInqAttFlt}}
-
-\begin{verbatim}
-    int vlistInqAttFlt(int vlistID, int varID, const char *name, int mlen, int *dp);
-\end{verbatim}
-
-Get the value(s) of a floating point attribute
-
-
-\section*{\tt \htmlref{vlistInqAttInt}{vlistInqAttInt}}
-
-\begin{verbatim}
-    int vlistInqAttInt(int vlistID, int varID, const char *name, int mlen, int *ip);
-\end{verbatim}
-
-Get the value(s) of an integer attribute
-
-
-\section*{\tt \htmlref{vlistInqAttTxt}{vlistInqAttTxt}}
-
-\begin{verbatim}
-    int vlistInqAttTxt(int vlistID, int varID, const char *name, int mlen, int *tp);
-\end{verbatim}
-
-Get the value(s) of a text attribute
-
-
-\section*{\tt \htmlref{vlistInqNatts}{vlistInqNatts}}
-
-\begin{verbatim}
-    int vlistInqNatts(int vlistID, int varID, int *nattsp);
-\end{verbatim}
-
-Get number of variable attributes
-
-
-\section*{\tt \htmlref{vlistInqTaxis}{vlistInqTaxis}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqTaxis]{vlistInqTaxis}
+\else
+vlistInqTaxis
+\fi
+}
 \begin{verbatim}
     int vlistInqTaxis(int vlistID);
 \end{verbatim}
 
 Get the time axis
+\ifpdfoutput{}{(\ref{vlistInqTaxis})}
 
 
-\section*{\tt \htmlref{vlistInqVarCode}{vlistInqVarCode}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarCode]{vlistInqVarCode}
+\else
+vlistInqVarCode
+\fi
+}
 \begin{verbatim}
     int vlistInqVarCode(int vlistID, int varID);
 \end{verbatim}
 
 Get the Code number of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarCode})}
 
 
-\section*{\tt \htmlref{vlistInqVarDatatype}{vlistInqVarDatatype}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarDatatype]{vlistInqVarDatatype}
+\else
+vlistInqVarDatatype
+\fi
+}
 \begin{verbatim}
     int vlistInqVarDatatype(int vlistID, int varID);
 \end{verbatim}
 
 Get the data type of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarDatatype})}
 
 
-\section*{\tt \htmlref{vlistInqVarGrid}{vlistInqVarGrid}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarGrid]{vlistInqVarGrid}
+\else
+vlistInqVarGrid
+\fi
+}
 \begin{verbatim}
     int vlistInqVarGrid(int vlistID, int varID);
 \end{verbatim}
 
 Get the Grid ID of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarGrid})}
 
 
-\section*{\tt \htmlref{vlistInqVarLongname}{vlistInqVarLongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarLongname]{vlistInqVarLongname}
+\else
+vlistInqVarLongname
+\fi
+}
 \begin{verbatim}
     void vlistInqVarLongname(int vlistID, int varID, char *longname);
 \end{verbatim}
 
 Get the longname of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarLongname})}
 
 
-\section*{\tt \htmlref{vlistInqVarMissval}{vlistInqVarMissval}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarMissval]{vlistInqVarMissval}
+\else
+vlistInqVarMissval
+\fi
+}
 \begin{verbatim}
     double vlistInqVarMissval(int vlistID, int varID);
 \end{verbatim}
 
 Get the missing value of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarMissval})}
 
 
-\section*{\tt \htmlref{vlistInqVarName}{vlistInqVarName}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarName]{vlistInqVarName}
+\else
+vlistInqVarName
+\fi
+}
 \begin{verbatim}
     void vlistInqVarName(int vlistID, int varID, char *name);
 \end{verbatim}
 
 Get the name of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarName})}
 
 
-\section*{\tt \htmlref{vlistInqVarStdname}{vlistInqVarStdname}}
-
-\begin{verbatim}
-    void vlistInqVarStdname(int vlistID, int varID, char *stdname);
-\end{verbatim}
-
-Get the standard name of a Variable
-
-
-\section*{\tt \htmlref{vlistInqVarUnits}{vlistInqVarUnits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarUnits]{vlistInqVarUnits}
+\else
+vlistInqVarUnits
+\fi
+}
 \begin{verbatim}
     void vlistInqVarUnits(int vlistID, int varID, char *units);
 \end{verbatim}
 
 Get the units of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarUnits})}
 
 
-\section*{\tt \htmlref{vlistInqVarZaxis}{vlistInqVarZaxis}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarZaxis]{vlistInqVarZaxis}
+\else
+vlistInqVarZaxis
+\fi
+}
 \begin{verbatim}
     int vlistInqVarZaxis(int vlistID, int varID);
 \end{verbatim}
 
 Get the Zaxis ID of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarZaxis})}
 
 
-\section*{\tt \htmlref{vlistNgrids}{vlistNgrids}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistNgrids]{vlistNgrids}
+\else
+vlistNgrids
+\fi
+}
 \begin{verbatim}
     int vlistNgrids(int vlistID);
 \end{verbatim}
 
 Number of grids in a variable list
+\ifpdfoutput{}{(\ref{vlistNgrids})}
 
 
-\section*{\tt \htmlref{vlistNvars}{vlistNvars}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistNvars]{vlistNvars}
+\else
+vlistNvars
+\fi
+}
 \begin{verbatim}
     int vlistNvars(int vlistID);
 \end{verbatim}
 
 Number of variables in a variable list
+\ifpdfoutput{}{(\ref{vlistNvars})}
 
 
-\section*{\tt \htmlref{vlistNzaxis}{vlistNzaxis}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistNzaxis]{vlistNzaxis}
+\else
+vlistNzaxis
+\fi
+}
 \begin{verbatim}
     int vlistNzaxis(int vlistID);
 \end{verbatim}
 
 Number of zaxis in a variable list
+\ifpdfoutput{}{(\ref{vlistNzaxis})}
 
 
-\section*{\tt \htmlref{zaxisCreate}{zaxisCreate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisCreate]{zaxisCreate}
+\else
+zaxisCreate
+\fi
+}
 \begin{verbatim}
     int zaxisCreate(int zaxistype, int size);
 \end{verbatim}
 
 Create a vertical Z-axis
+\ifpdfoutput{}{(\ref{zaxisCreate})}
 
 
-\section*{\tt \htmlref{zaxisDefLevels}{zaxisDefLevels}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDefLevels]{zaxisDefLevels}
+\else
+zaxisDefLevels
+\fi
+}
 \begin{verbatim}
     void zaxisDefLevels(int zaxisID, const double *levels);
 \end{verbatim}
 
 Define the levels of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisDefLevels})}
 
 
-\section*{\tt \htmlref{zaxisDefLongname}{zaxisDefLongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDefLongname]{zaxisDefLongname}
+\else
+zaxisDefLongname
+\fi
+}
 \begin{verbatim}
     void zaxisDefLongname(int zaxisID, const char *longname);
 \end{verbatim}
 
 Define the longname of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisDefLongname})}
 
 
-\section*{\tt \htmlref{zaxisDefName}{zaxisDefName}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDefName]{zaxisDefName}
+\else
+zaxisDefName
+\fi
+}
 \begin{verbatim}
     void zaxisDefName(int zaxisID, const char *name);
 \end{verbatim}
 
 Define the name of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisDefName})}
 
 
-\section*{\tt \htmlref{zaxisDefUnits}{zaxisDefUnits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDefUnits]{zaxisDefUnits}
+\else
+zaxisDefUnits
+\fi
+}
 \begin{verbatim}
     void zaxisDefUnits(int zaxisID, const char *units);
 \end{verbatim}
 
 Define the units of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisDefUnits})}
 
 
-\section*{\tt \htmlref{zaxisDestroy}{zaxisDestroy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDestroy]{zaxisDestroy}
+\else
+zaxisDestroy
+\fi
+}
 \begin{verbatim}
     void zaxisDestroy(int zaxisID);
 \end{verbatim}
 
 Destroy a vertical Z-axis
+\ifpdfoutput{}{(\ref{zaxisDestroy})}
 
 
-\section*{\tt \htmlref{zaxisInqLevel}{zaxisInqLevel}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqLevel]{zaxisInqLevel}
+\else
+zaxisInqLevel
+\fi
+}
 \begin{verbatim}
     double zaxisInqLevel(int zaxisID, int levelID);
 \end{verbatim}
 
 Get one level of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqLevel})}
 
 
-\section*{\tt \htmlref{zaxisInqLevels}{zaxisInqLevels}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqLevels]{zaxisInqLevels}
+\else
+zaxisInqLevels
+\fi
+}
 \begin{verbatim}
     void zaxisInqLevels(int zaxisID, double *levels);
 \end{verbatim}
 
 Get all levels of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqLevels})}
 
 
-\section*{\tt \htmlref{zaxisInqLongname}{zaxisInqLongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqLongname]{zaxisInqLongname}
+\else
+zaxisInqLongname
+\fi
+}
 \begin{verbatim}
     void zaxisInqLongname(int zaxisID, char *longname);
 \end{verbatim}
 
 Get the longname of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqLongname})}
 
 
-\section*{\tt \htmlref{zaxisInqName}{zaxisInqName}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqName]{zaxisInqName}
+\else
+zaxisInqName
+\fi
+}
 \begin{verbatim}
     void zaxisInqName(int zaxisID, char *name);
 \end{verbatim}
 
 Get the name of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqName})}
 
 
-\section*{\tt \htmlref{zaxisInqSize}{zaxisInqSize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqSize]{zaxisInqSize}
+\else
+zaxisInqSize
+\fi
+}
 \begin{verbatim}
     int zaxisInqSize(int zaxisID);
 \end{verbatim}
 
 Get the size of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqSize})}
 
 
-\section*{\tt \htmlref{zaxisInqType}{zaxisInqType}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqType]{zaxisInqType}
+\else
+zaxisInqType
+\fi
+}
 \begin{verbatim}
     int zaxisInqType(int zaxisID);
 \end{verbatim}
 
 Get the type of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqType})}
 
 
-\section*{\tt \htmlref{zaxisInqUnits}{zaxisInqUnits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqUnits]{zaxisInqUnits}
+\else
+zaxisInqUnits
+\fi
+}
 \begin{verbatim}
     void zaxisInqUnits(int zaxisID, char *units);
 \end{verbatim}
 
 Get the units of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqUnits})}
diff --git a/doc/tex/cdi_cman.tex b/doc/tex/cdi_cman.tex
index 23e24facde5815dc1855bc325cfb6607a6e185e1..33e610abe2833171f47bdd15ce42ab5168495e4c 100644
--- a/doc/tex/cdi_cman.tex
+++ b/doc/tex/cdi_cman.tex
@@ -1,6 +1,27 @@
 \documentclass[DIV16,BCOR1cm,11pt,a4paper,fleqn,twoside]{scrreprt}         % for pdf output
 %\documentclass[DIV16,BCOR1cm,11pt,a4paper,fleqn]{report}         % for pdf output
 
+% To allow automatic selection of the right graphics type ...
+% preset \pdfoutput for older latex installation, it is allways definted for
+% news ones
+\ifx\pdfoutput\undefined
+\gdef\pdfoutput{0}
+\fi
+
+\newif\ifpdf
+\ifnum\pdfoutput=0
+% latex is called for dvi output
+   \pdffalse
+   \usepackage{graphics}
+   \usepackage{hyperref}
+\else
+% pdflatex is called for pdf output
+   \pdftrue
+   \usepackage[pdftex]{graphicx}
+   \usepackage[pdftex]{hyperref}
+\fi
+
+\setlength{\parindent}{0pt}
 \usepackage{graphics}
 
 \newcommand{\CDI}{\bfseries\sffamily CDI}
@@ -50,16 +71,6 @@
 %dvipdf
 %pdflatex
 
-% To allow automatic selection of the right graphics type ...
-
-\newif\ifpdf
-\ifx\pdfoutput\undefined
-   \pdffalse                    % LaTeX
-\else
-   \pdfoutput=1                 % PDFLaTeX
-   \pdftrue
-\fi
-
 \usepackage{thumbpdf}
 
 %\usepackage{html}
diff --git a/doc/tex/cdi_fman.tex b/doc/tex/cdi_fman.tex
index 9e54f87926b1b4db29785874e0d6ebfb0bf83142..6699f1eeec9c234d79dd73f7ee0ccc61f00454e7 100644
--- a/doc/tex/cdi_fman.tex
+++ b/doc/tex/cdi_fman.tex
@@ -1,8 +1,27 @@
 \documentclass[DIV16,BCOR1cm,11pt,a4paper,fleqn,twoside]{scrreprt}         % for pdf output
 %\documentclass[DIV16,BCOR1cm,11pt,a4paper,fleqn]{report}         % for pdf output
 
-\usepackage{graphics}
+% To allow automatic selection of the right graphics type ...
+% preset \pdfoutput for older latex installation, it is allways definted for
+% news ones
+\ifx\pdfoutput\undefined
+\gdef\pdfoutput{0}
+\fi
 
+\newif\ifpdf
+\ifnum\pdfoutput=0
+% latex is called for dvi output
+   \pdffalse
+   \usepackage{graphics}
+   \usepackage{hyperref}
+\else
+% pdflatex is called for pdf output
+   \pdftrue
+   \usepackage[pdftex]{graphicx}
+   \usepackage[pdftex]{hyperref}
+\fi
+
+\setlength{\parindent}{0pt}
 \newcommand{\CDI}{\bfseries\sffamily CDI}
 
 % To define headers and footers
@@ -49,16 +68,6 @@
 %dvipdf
 %pdflatex
 
-% To allow automatic selection of the right graphics type ...
-
-\newif\ifpdf
-\ifx\pdfoutput\undefined
-   \pdffalse                    % LaTeX
-\else
-   \pdfoutput=1                 % PDFLaTeX
-   \pdftrue
-\fi
-
 \usepackage{thumbpdf}
 
 %\usepackage{html}
@@ -226,9 +235,9 @@ CDI library routines:
 \clearpage
 \ifpdf
 \phantomsection
+\printindex
 \fi
 \addcontentsline{toc}{chapter}{\indexname}
 
-\printindex
 
 \end{document}
diff --git a/doc/tex/f_examples.tex b/doc/tex/f_examples.tex
index 1b1f0fa5b56bea77f2f7049906cf27c750ba4770..2f08108d02db63f0d857f2401f3c7e6d1becad4e 100644
--- a/doc/tex/f_examples.tex
+++ b/doc/tex/f_examples.tex
@@ -55,9 +55,9 @@ data:
 \end{lstlisting}
 
 
-\section{Read a dataset}
+\section{\label{example_read}Read a dataset}
 
-This example reads the netCDF file {\tt example.nc} from \htmlref{Appendix B.1}{example_write}.
+This example reads the netCDF file {\tt example.nc} from \htmlref{Appendix \ref{example_write}}{example_write}.
 
 \lstinputlisting[language=Fortran, frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
 {../../examples/cdi_read_f.f}
@@ -71,3 +71,21 @@ to {\tt FILETYPE\_GRB}.
 
 \lstinputlisting[language=Fortran, frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
 {../../examples/cdi_copy_f.f}
+
+\section{\label{examples_f2003}Fortran 2003: mo\_cdi and iso\_c\_binding}
+
+This is the Fortran 2003 version of the reading and writing examples above.
+The main differenc to {\tt cfortran.h} is the
+character handling. Here {\tt CHARACTER(type=c\_char)} is used instead of
+{\tt CHARACTER}. Additionally plain fortran charcters and character variables
+have to be convertet to C charcters by
+\begin{itemize}
+\item appending {\tt '\textbackslash 0'} with {\tt //C\_NULL\_CHAR} 
+\item prepending {\tt C\_CHAR\_} to plain charcters
+\item take {\tt ctrim} from {\tt mo\_cdi} for {\tt CHARACTER(type=c\_char)} variables
+\end{itemize}
+
+\lstinputlisting[language=Fortran, frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
+{../../examples/cdi_read_f2003.f90}
+\lstinputlisting[language=Fortran, frame=single, backgroundcolor=\color{zebg}, basicstyle=\footnotesize]
+{../../examples/cdi_write_f2003.f90}
diff --git a/doc/tex/f_link.tex b/doc/tex/f_link.tex
index 69cc88a96557d356a66ffa79481bac7a8a43a87c..78ce63835977aea7ee1ef9dfd7650f3cdd502440 100644
--- a/doc/tex/f_link.tex
+++ b/doc/tex/f_link.tex
@@ -1,3 +1,7 @@
+There are two different interfaces for using {\CDI} functions in Fortran:
+{\tt cfortran.h} and the instrinsic {\tt iso\_c\_binding} module from Fortran
+2003 standard. At  first, the preparations for compilers without F2003
+capabilities are described.\\\\
 Every FORTRAN file that references {\CDI} functions or constants must contain
 an appropriate {\tt INCLUDE} statement before the first such reference:
 
@@ -39,3 +43,28 @@ For example with the netCDF library:
    f77 -o myprogram myprogram.o -L/usr/local/cdi/lib -lcdi \
                                 -L/usr/local/netcdf/lib -lnetcdf
 \end{verbatim}
+
+For using the {\tt iso\_c\_bindings} two things are necessary in a program or module
+
+\begin{verbatim}
+   USE ISO_C_BINDING
+   USE mo_cdi
+\end{verbatim}
+
+The {\tt iso\_c\_binding} module is included in {\tt mo\_cdi}, but without
+{\tt cfortran.h} characters and character variables have to be handled separately.
+Examples are available in section \ref{examples_f2003}.
+
+After installation {\tt mo\_cdi.o} and {\tt mo\_cdi.mod} are located in the
+library and header directory respectively. {\tt cdilib.o} has to be
+mentioned directly on the command line. It can be found in the
+library directory, too. Depending on the {\CDI} configuration, a compile command
+should look like this:
+
+\begin{verbatim}
+nagf95 -f2003 -g cdi_read_f2003.f90 -L/usr/lib -lnetcdf -o cdi_read_example 
+                                    -I/usr/local/include 
+                                    /usr/local/lib/cdilib.o /usr/local/lib/mo_cdi.o
+\end{verbatim}
+
+
diff --git a/doc/tex/f_ref.tex b/doc/tex/f_ref.tex
index 0b8a665a5b08b8a4af088de1e03718ab4988a05b..cb892bbbb0b43ba0ec116515c51f0c4827d56856 100644
--- a/doc/tex/f_ref.tex
+++ b/doc/tex/f_ref.tex
@@ -1,954 +1,1417 @@
 
 
-\section*{\tt \htmlref{gridCreate}{gridCreate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridCreate]{gridCreate}
+\else
+gridCreate
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION gridCreate(INTEGER gridtype, INTEGER size)
 \end{verbatim}
 
 Create a horizontal Grid
+\ifpdfoutput{}{(\ref{gridCreate})}
 
 
-\section*{\tt \htmlref{gridDefXbounds}{gridDefXbounds}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXbounds]{gridDefXbounds}
+\else
+gridDefXbounds
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefXbounds(INTEGER gridID, const REAL*8 xbounds)
 \end{verbatim}
 
 Define the bounds of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXbounds})}
 
 
-\section*{\tt \htmlref{gridDefXlongname}{gridDefXlongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXlongname]{gridDefXlongname}
+\else
+gridDefXlongname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefXlongname(INTEGER gridID, CHARACTER*(*) longname)
 \end{verbatim}
 
 Define the longname of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXlongname})}
 
 
-\section*{\tt \htmlref{gridDefXname}{gridDefXname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXname]{gridDefXname}
+\else
+gridDefXname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefXname(INTEGER gridID, CHARACTER*(*) name)
 \end{verbatim}
 
 Define the name of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXname})}
 
 
-\section*{\tt \htmlref{gridDefXsize}{gridDefXsize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXsize]{gridDefXsize}
+\else
+gridDefXsize
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefXsize(INTEGER gridID, INTEGER xsize)
 \end{verbatim}
 
 Define the number of values of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXsize})}
 
 
-\section*{\tt \htmlref{gridDefXunits}{gridDefXunits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXunits]{gridDefXunits}
+\else
+gridDefXunits
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefXunits(INTEGER gridID, CHARACTER*(*) units)
 \end{verbatim}
 
 Define the units of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXunits})}
 
 
-\section*{\tt \htmlref{gridDefXvals}{gridDefXvals}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefXvals]{gridDefXvals}
+\else
+gridDefXvals
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefXvals(INTEGER gridID, const REAL*8 xvals)
 \end{verbatim}
 
 Define the values of a X-axis
+\ifpdfoutput{}{(\ref{gridDefXvals})}
 
 
-\section*{\tt \htmlref{gridDefYbounds}{gridDefYbounds}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYbounds]{gridDefYbounds}
+\else
+gridDefYbounds
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefYbounds(INTEGER gridID, const REAL*8 ybounds)
 \end{verbatim}
 
 Define the bounds of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYbounds})}
 
 
-\section*{\tt \htmlref{gridDefYlongname}{gridDefYlongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYlongname]{gridDefYlongname}
+\else
+gridDefYlongname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefYlongname(INTEGER gridID, CHARACTER*(*) longname)
 \end{verbatim}
 
 Define the longname of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYlongname})}
 
 
-\section*{\tt \htmlref{gridDefYname}{gridDefYname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYname]{gridDefYname}
+\else
+gridDefYname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefYname(INTEGER gridID, CHARACTER*(*) name)
 \end{verbatim}
 
 Define the name of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYname})}
 
 
-\section*{\tt \htmlref{gridDefYsize}{gridDefYsize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYsize]{gridDefYsize}
+\else
+gridDefYsize
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefYsize(INTEGER gridID, INTEGER ysize)
 \end{verbatim}
 
 Define the number of values of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYsize})}
 
 
-\section*{\tt \htmlref{gridDefYunits}{gridDefYunits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYunits]{gridDefYunits}
+\else
+gridDefYunits
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefYunits(INTEGER gridID, CHARACTER*(*) units)
 \end{verbatim}
 
 Define the units of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYunits})}
 
 
-\section*{\tt \htmlref{gridDefYvals}{gridDefYvals}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDefYvals]{gridDefYvals}
+\else
+gridDefYvals
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDefYvals(INTEGER gridID, const REAL*8 yvals)
 \end{verbatim}
 
 Define the values of a Y-axis
+\ifpdfoutput{}{(\ref{gridDefYvals})}
 
 
-\section*{\tt \htmlref{gridDestroy}{gridDestroy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDestroy]{gridDestroy}
+\else
+gridDestroy
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridDestroy(INTEGER gridID)
 \end{verbatim}
 
 Destroy a horizontal Grid
+\ifpdfoutput{}{(\ref{gridDestroy})}
 
 
-\section*{\tt \htmlref{gridDuplicate}{gridDuplicate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridDuplicate]{gridDuplicate}
+\else
+gridDuplicate
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION gridDuplicate(INTEGER gridID)
 \end{verbatim}
 
 Duplicate a horizontal Grid
+\ifpdfoutput{}{(\ref{gridDuplicate})}
 
 
-\section*{\tt \htmlref{gridInqSize}{gridInqSize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqSize]{gridInqSize}
+\else
+gridInqSize
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION gridInqSize(INTEGER gridID)
 \end{verbatim}
 
 Get the size of a Grid
+\ifpdfoutput{}{(\ref{gridInqSize})}
 
 
-\section*{\tt \htmlref{gridInqType}{gridInqType}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqType]{gridInqType}
+\else
+gridInqType
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION gridInqType(INTEGER gridID)
 \end{verbatim}
 
 Get the type of a Grid
+\ifpdfoutput{}{(\ref{gridInqType})}
 
 
-\section*{\tt \htmlref{gridInqXbounds}{gridInqXbounds}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXbounds]{gridInqXbounds}
+\else
+gridInqXbounds
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION gridInqXbounds(INTEGER gridID, REAL*8 xbounds)
 \end{verbatim}
 
 Get the bounds of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXbounds})}
 
 
-\section*{\tt \htmlref{gridInqXlongname}{gridInqXlongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXlongname]{gridInqXlongname}
+\else
+gridInqXlongname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridInqXlongname(INTEGER gridID, CHARACTER*(*) longname)
 \end{verbatim}
 
 Get the longname of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXlongname})}
 
 
-\section*{\tt \htmlref{gridInqXname}{gridInqXname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXname]{gridInqXname}
+\else
+gridInqXname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridInqXname(INTEGER gridID, CHARACTER*(*) name)
 \end{verbatim}
 
 Get the name of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXname})}
 
 
-\section*{\tt \htmlref{gridInqXsize}{gridInqXsize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXsize]{gridInqXsize}
+\else
+gridInqXsize
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridInqXsize(INTEGER gridID)
 \end{verbatim}
 
 Get the number of values of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXsize})}
 
 
-\section*{\tt \htmlref{gridInqXunits}{gridInqXunits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXunits]{gridInqXunits}
+\else
+gridInqXunits
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridInqXunits(INTEGER gridID, CHARACTER*(*) units)
 \end{verbatim}
 
 Get the units of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXunits})}
 
 
-\section*{\tt \htmlref{gridInqXvals}{gridInqXvals}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqXvals]{gridInqXvals}
+\else
+gridInqXvals
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION gridInqXvals(INTEGER gridID, REAL*8 xvals)
 \end{verbatim}
 
 Get all values of a X-axis
+\ifpdfoutput{}{(\ref{gridInqXvals})}
 
 
-\section*{\tt \htmlref{gridInqYbounds}{gridInqYbounds}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYbounds]{gridInqYbounds}
+\else
+gridInqYbounds
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION gridInqYbounds(INTEGER gridID, REAL*8 ybounds)
 \end{verbatim}
 
 Get the bounds of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYbounds})}
 
 
-\section*{\tt \htmlref{gridInqYlongname}{gridInqYlongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYlongname]{gridInqYlongname}
+\else
+gridInqYlongname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridInqXlongname(INTEGER gridID, CHARACTER*(*) longname)
 \end{verbatim}
 
 Get the longname of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYlongname})}
 
 
-\section*{\tt \htmlref{gridInqYname}{gridInqYname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYname]{gridInqYname}
+\else
+gridInqYname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridInqYname(INTEGER gridID, CHARACTER*(*) name)
 \end{verbatim}
 
 Get the name of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYname})}
 
 
-\section*{\tt \htmlref{gridInqYsize}{gridInqYsize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYsize]{gridInqYsize}
+\else
+gridInqYsize
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridInqYsize(INTEGER gridID)
 \end{verbatim}
 
 Get the number of values of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYsize})}
 
 
-\section*{\tt \htmlref{gridInqYunits}{gridInqYunits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYunits]{gridInqYunits}
+\else
+gridInqYunits
+\fi
+}
 \begin{verbatim}
     SUBROUTINE gridInqYunits(INTEGER gridID, CHARACTER*(*) units)
 \end{verbatim}
 
 Get the units of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYunits})}
 
 
-\section*{\tt \htmlref{gridInqYvals}{gridInqYvals}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[gridInqYvals]{gridInqYvals}
+\else
+gridInqYvals
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION gridInqYvals(INTEGER gridID, REAL*8 yvals)
 \end{verbatim}
 
 Get all values of a Y-axis
+\ifpdfoutput{}{(\ref{gridInqYvals})}
 
 
-\section*{\tt \htmlref{streamClose}{streamClose}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamClose]{streamClose}
+\else
+streamClose
+\fi
+}
 \begin{verbatim}
     SUBROUTINE streamClose(INTEGER streamID)
 \end{verbatim}
 
 Close an open dataset
+\ifpdfoutput{}{(\ref{streamClose})}
 
 
-\section*{\tt \htmlref{streamDefByteorder}{streamDefByteorder}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamDefByteorder]{streamDefByteorder}
+\else
+streamDefByteorder
+\fi
+}
 \begin{verbatim}
     SUBROUTINE streamDefByteorder(INTEGER streamID, INTEGER byteorder)
 \end{verbatim}
 
 Define the byte order
+\ifpdfoutput{}{(\ref{streamDefByteorder})}
 
 
-\section*{\tt \htmlref{streamDefTimestep}{streamDefTimestep}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamDefTimestep]{streamDefTimestep}
+\else
+streamDefTimestep
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION streamDefTimestep(INTEGER streamID, INTEGER tsID)
 \end{verbatim}
 
 Define time step
+\ifpdfoutput{}{(\ref{streamDefTimestep})}
 
 
-\section*{\tt \htmlref{streamDefVlist}{streamDefVlist}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamDefVlist]{streamDefVlist}
+\else
+streamDefVlist
+\fi
+}
 \begin{verbatim}
     SUBROUTINE streamDefVlist(INTEGER streamID, INTEGER vlistID)
 \end{verbatim}
 
 Define the variable list
+\ifpdfoutput{}{(\ref{streamDefVlist})}
 
 
-\section*{\tt \htmlref{streamInqByteorder}{streamInqByteorder}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamInqByteorder]{streamInqByteorder}
+\else
+streamInqByteorder
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION streamInqByteorder(INTEGER streamID)
 \end{verbatim}
 
 Get the byte order
+\ifpdfoutput{}{(\ref{streamInqByteorder})}
 
 
-\section*{\tt \htmlref{streamInqFiletype}{streamInqFiletype}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamInqFiletype]{streamInqFiletype}
+\else
+streamInqFiletype
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION streamInqFiletype(INTEGER streamID)
 \end{verbatim}
 
 Get the filetype
+\ifpdfoutput{}{(\ref{streamInqFiletype})}
 
 
-\section*{\tt \htmlref{streamInqTimestep}{streamInqTimestep}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamInqTimestep]{streamInqTimestep}
+\else
+streamInqTimestep
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION streamInqTimestep(INTEGER streamID, INTEGER tsID)
 \end{verbatim}
 
 Get time step
+\ifpdfoutput{}{(\ref{streamInqTimestep})}
 
 
-\section*{\tt \htmlref{streamInqVlist}{streamInqVlist}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamInqVlist]{streamInqVlist}
+\else
+streamInqVlist
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION streamInqVlist(INTEGER streamID)
 \end{verbatim}
 
 Get the variable list
+\ifpdfoutput{}{(\ref{streamInqVlist})}
 
 
-\section*{\tt \htmlref{streamOpenRead}{streamOpenRead}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamOpenRead]{streamOpenRead}
+\else
+streamOpenRead
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION streamOpenRead(CHARACTER*(*) path)
 \end{verbatim}
 
 Open a dataset for reading
+\ifpdfoutput{}{(\ref{streamOpenRead})}
 
 
-\section*{\tt \htmlref{streamOpenWrite}{streamOpenWrite}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamOpenWrite]{streamOpenWrite}
+\else
+streamOpenWrite
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION streamOpenWrite(CHARACTER*(*) path, INTEGER filetype)
 \end{verbatim}
 
 Create a new dataset
+\ifpdfoutput{}{(\ref{streamOpenWrite})}
 
 
-\section*{\tt \htmlref{streamReadVar}{streamReadVar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamReadVar]{streamReadVar}
+\else
+streamReadVar
+\fi
+}
 \begin{verbatim}
     SUBROUTINE streamReadVar(INTEGER streamID, INTEGER varID, REAL*8 data, 
                              INTEGER nmiss)
 \end{verbatim}
 
 Read a variable
+\ifpdfoutput{}{(\ref{streamReadVar})}
 
 
-\section*{\tt \htmlref{streamReadVarSlice}{streamReadVarSlice}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamReadVarSlice]{streamReadVarSlice}
+\else
+streamReadVarSlice
+\fi
+}
 \begin{verbatim}
     SUBROUTINE streamReadVarSlice(INTEGER streamID, INTEGER varID, INTEGER levelID, 
                                   REAL*8 data, INTEGER nmiss)
 \end{verbatim}
 
 Read a horizontal slice of a variable
+\ifpdfoutput{}{(\ref{streamReadVarSlice})}
 
 
-\section*{\tt \htmlref{streamWriteVar}{streamWriteVar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamWriteVar]{streamWriteVar}
+\else
+streamWriteVar
+\fi
+}
 \begin{verbatim}
     SUBROUTINE streamWriteVar(INTEGER streamID, INTEGER varID, const REAL*8 data, 
                               INTEGER nmiss)
 \end{verbatim}
 
 Write a variable
+\ifpdfoutput{}{(\ref{streamWriteVar})}
 
 
-\section*{\tt \htmlref{streamWriteVarSlice}{streamWriteVarSlice}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[streamWriteVarSlice]{streamWriteVarSlice}
+\else
+streamWriteVarSlice
+\fi
+}
 \begin{verbatim}
     SUBROUTINE streamWriteVarSlice(INTEGER streamID, INTEGER varID, INTEGER levelID, 
                                    const REAL*8 data, INTEGER nmiss)
 \end{verbatim}
 
 Write a horizontal slice of a variable
+\ifpdfoutput{}{(\ref{streamWriteVarSlice})}
 
 
-\section*{\tt \htmlref{taxisCreate}{taxisCreate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisCreate]{taxisCreate}
+\else
+taxisCreate
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION taxisCreate(INTEGER taxistype)
 \end{verbatim}
 
 Create a Time axis
+\ifpdfoutput{}{(\ref{taxisCreate})}
 
 
-\section*{\tt \htmlref{taxisDefCalendar}{taxisDefCalendar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefCalendar]{taxisDefCalendar}
+\else
+taxisDefCalendar
+\fi
+}
 \begin{verbatim}
     SUBROUTINE taxisDefCalendar(INTEGER taxisID, INTEGER calendar)
 \end{verbatim}
 
 Define the calendar
+\ifpdfoutput{}{(\ref{taxisDefCalendar})}
 
 
-\section*{\tt \htmlref{taxisDefRdate}{taxisDefRdate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefRdate]{taxisDefRdate}
+\else
+taxisDefRdate
+\fi
+}
 \begin{verbatim}
     SUBROUTINE taxisDefRdate(INTEGER taxisID, INTEGER rdate)
 \end{verbatim}
 
 Define the reference date
+\ifpdfoutput{}{(\ref{taxisDefRdate})}
 
 
-\section*{\tt \htmlref{taxisDefRtime}{taxisDefRtime}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefRtime]{taxisDefRtime}
+\else
+taxisDefRtime
+\fi
+}
 \begin{verbatim}
     SUBROUTINE taxisDefRtime(INTEGER taxisID, INTEGER rtime)
 \end{verbatim}
 
 Define the reference time
+\ifpdfoutput{}{(\ref{taxisDefRtime})}
 
 
-\section*{\tt \htmlref{taxisDefVdate}{taxisDefVdate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefVdate]{taxisDefVdate}
+\else
+taxisDefVdate
+\fi
+}
 \begin{verbatim}
     SUBROUTINE taxisDefVdate(INTEGER taxisID, INTEGER vdate)
 \end{verbatim}
 
 Define the verification date
+\ifpdfoutput{}{(\ref{taxisDefVdate})}
 
 
-\section*{\tt \htmlref{taxisDefVtime}{taxisDefVtime}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDefVtime]{taxisDefVtime}
+\else
+taxisDefVtime
+\fi
+}
 \begin{verbatim}
     SUBROUTINE taxisDefVtime(INTEGER taxisID, INTEGER vtime)
 \end{verbatim}
 
 Define the verification time
+\ifpdfoutput{}{(\ref{taxisDefVtime})}
 
 
-\section*{\tt \htmlref{taxisDestroy}{taxisDestroy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisDestroy]{taxisDestroy}
+\else
+taxisDestroy
+\fi
+}
 \begin{verbatim}
     SUBROUTINE taxisDestroy(INTEGER taxisID)
 \end{verbatim}
 
 Destroy a Time axis
+\ifpdfoutput{}{(\ref{taxisDestroy})}
 
 
-\section*{\tt \htmlref{taxisInqCalendar}{taxisInqCalendar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqCalendar]{taxisInqCalendar}
+\else
+taxisInqCalendar
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION taxisInqCalendar(INTEGER taxisID)
 \end{verbatim}
 
 Get the calendar
+\ifpdfoutput{}{(\ref{taxisInqCalendar})}
 
 
-\section*{\tt \htmlref{taxisInqRdate}{taxisInqRdate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqRdate]{taxisInqRdate}
+\else
+taxisInqRdate
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION taxisInqRdate(INTEGER taxisID)
 \end{verbatim}
 
 Get the reference date
+\ifpdfoutput{}{(\ref{taxisInqRdate})}
 
 
-\section*{\tt \htmlref{taxisInqRtime}{taxisInqRtime}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqRtime]{taxisInqRtime}
+\else
+taxisInqRtime
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION taxisInqRtime(INTEGER taxisID)
 \end{verbatim}
 
 Get the reference time
+\ifpdfoutput{}{(\ref{taxisInqRtime})}
 
 
-\section*{\tt \htmlref{taxisInqVdate}{taxisInqVdate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqVdate]{taxisInqVdate}
+\else
+taxisInqVdate
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION taxisInqVdate(INTEGER taxisID)
 \end{verbatim}
 
 Get the verification date
+\ifpdfoutput{}{(\ref{taxisInqVdate})}
 
 
-\section*{\tt \htmlref{taxisInqVtime}{taxisInqVtime}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[taxisInqVtime]{taxisInqVtime}
+\else
+taxisInqVtime
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION taxisInqVtime(INTEGER taxisID)
 \end{verbatim}
 
 Get the verification time
+\ifpdfoutput{}{(\ref{taxisInqVtime})}
 
 
-\section*{\tt \htmlref{vlistCat}{vlistCat}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistCat]{vlistCat}
+\else
+vlistCat
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistCat(INTEGER vlistID2, INTEGER vlistID1)
 \end{verbatim}
 
 Concatenate two variable lists
+\ifpdfoutput{}{(\ref{vlistCat})}
 
 
-\section*{\tt \htmlref{vlistCopy}{vlistCopy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistCopy]{vlistCopy}
+\else
+vlistCopy
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistCopy(INTEGER vlistID2, INTEGER vlistID1)
 \end{verbatim}
 
 Copy a variable list
+\ifpdfoutput{}{(\ref{vlistCopy})}
 
 
-\section*{\tt \htmlref{vlistCopyFlag}{vlistCopyFlag}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistCopyFlag]{vlistCopyFlag}
+\else
+vlistCopyFlag
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistCopyFlag(INTEGER vlistID2, INTEGER vlistID1)
 \end{verbatim}
 
 Copy some entries of a variable list
+\ifpdfoutput{}{(\ref{vlistCopyFlag})}
 
 
-\section*{\tt \htmlref{vlistCreate}{vlistCreate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistCreate]{vlistCreate}
+\else
+vlistCreate
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistCreate()
 \end{verbatim}
 
 Create a variable list
+\ifpdfoutput{}{(\ref{vlistCreate})}
 
 
-\section*{\tt \htmlref{vlistDefAttFlt}{vlistDefAttFlt}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistDefAttFlt(INTEGER vlistID, INTEGER varID, 
-                                    CHARACTER*(*) name, INTEGER len, const REAL*8 dp)
-\end{verbatim}
-
-Define a floating point attribute
-
-
-\section*{\tt \htmlref{vlistDefAttInt}{vlistDefAttInt}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistDefAttInt(INTEGER vlistID, INTEGER varID, 
-                                    CHARACTER*(*) name, INTEGER len, 
-                                    const INTEGER ip)
-\end{verbatim}
-
-Define an integer attribute
-
-
-\section*{\tt \htmlref{vlistDefAttTxt}{vlistDefAttTxt}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistDefAttTxt(INTEGER vlistID, INTEGER varID, 
-                                    CHARACTER*(*) name, INTEGER len, 
-                                    CHARACTER*(*) tp)
-\end{verbatim}
-
-Define a text attribute
-
-
-\section*{\tt \htmlref{vlistDefTaxis}{vlistDefTaxis}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefTaxis]{vlistDefTaxis}
+\else
+vlistDefTaxis
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistDefTaxis(INTEGER vlistID, INTEGER taxisID)
 \end{verbatim}
 
 Define the time axis
+\ifpdfoutput{}{(\ref{vlistDefTaxis})}
 
 
-\section*{\tt \htmlref{vlistDefVar}{vlistDefVar}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVar]{vlistDefVar}
+\else
+vlistDefVar
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistDefVar(INTEGER vlistID, INTEGER gridID, INTEGER zaxisID, 
                                  INTEGER timeID)
 \end{verbatim}
 
 Define a Variable
+\ifpdfoutput{}{(\ref{vlistDefVar})}
 
 
-\section*{\tt \htmlref{vlistDefVarCode}{vlistDefVarCode}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarCode]{vlistDefVarCode}
+\else
+vlistDefVarCode
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistDefVarCode(INTEGER vlistID, INTEGER varID, INTEGER code)
 \end{verbatim}
 
 Define the code number of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarCode})}
 
 
-\section*{\tt \htmlref{vlistDefVarDatatype}{vlistDefVarDatatype}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarDatatype]{vlistDefVarDatatype}
+\else
+vlistDefVarDatatype
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistDefVarDatatype(INTEGER vlistID, INTEGER varID, INTEGER datatype)
 \end{verbatim}
 
 Define the data type of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarDatatype})}
 
 
-\section*{\tt \htmlref{vlistDefVarLongname}{vlistDefVarLongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarLongname]{vlistDefVarLongname}
+\else
+vlistDefVarLongname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistDefVarLongname(INTEGER vlistID, INTEGER varID, 
                                    CHARACTER*(*) longname)
 \end{verbatim}
 
 Define the long name of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarLongname})}
 
 
-\section*{\tt \htmlref{vlistDefVarMissval}{vlistDefVarMissval}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarMissval]{vlistDefVarMissval}
+\else
+vlistDefVarMissval
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistDefVarMissval(INTEGER vlistID, INTEGER varID, REAL*8 missval)
 \end{verbatim}
 
 Define the missing value of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarMissval})}
 
 
-\section*{\tt \htmlref{vlistDefVarName}{vlistDefVarName}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarName]{vlistDefVarName}
+\else
+vlistDefVarName
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistDefVarName(INTEGER vlistID, INTEGER varID, CHARACTER*(*) name)
 \end{verbatim}
 
 Define the name of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarName})}
 
 
-\section*{\tt \htmlref{vlistDefVarStdname}{vlistDefVarStdname}}
-
-\begin{verbatim}
-    SUBROUTINE vlistDefVarStdname(INTEGER vlistID, INTEGER varID, 
-                                  CHARACTER*(*) stdname)
-\end{verbatim}
-
-Define the standard name of a Variable
-
-
-\section*{\tt \htmlref{vlistDefVarUnits}{vlistDefVarUnits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDefVarUnits]{vlistDefVarUnits}
+\else
+vlistDefVarUnits
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistDefVarUnits(INTEGER vlistID, INTEGER varID, CHARACTER*(*) units)
 \end{verbatim}
 
 Define the units of a Variable
+\ifpdfoutput{}{(\ref{vlistDefVarUnits})}
 
 
-\section*{\tt \htmlref{vlistDestroy}{vlistDestroy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDestroy]{vlistDestroy}
+\else
+vlistDestroy
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistDestroy(INTEGER vlistID)
 \end{verbatim}
 
 Destroy a variable list
+\ifpdfoutput{}{(\ref{vlistDestroy})}
 
 
-\section*{\tt \htmlref{vlistDuplicate}{vlistDuplicate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistDuplicate]{vlistDuplicate}
+\else
+vlistDuplicate
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistDuplicate(INTEGER vlistID)
 \end{verbatim}
 
 Duplicate a variable list
+\ifpdfoutput{}{(\ref{vlistDuplicate})}
 
 
-\section*{\tt \htmlref{vlistInqAtt}{vlistInqAtt}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistInqAtt(INTEGER vlistID, INTEGER varID, INTEGER attnum, 
-                                 CHARACTER*(*) name, INTEGER typep, INTEGER lenp)
-\end{verbatim}
-
-Get information about an attribute
-
-
-\section*{\tt \htmlref{vlistInqAttFlt}{vlistInqAttFlt}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistInqAttFlt(INTEGER vlistID, INTEGER varID, 
-                                    CHARACTER*(*) name, INTEGER mlen, INTEGER dp)
-\end{verbatim}
-
-Get the value(s) of a floating point attribute
-
-
-\section*{\tt \htmlref{vlistInqAttInt}{vlistInqAttInt}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistInqAttInt(INTEGER vlistID, INTEGER varID, 
-                                    CHARACTER*(*) name, INTEGER mlen, INTEGER ip)
-\end{verbatim}
-
-Get the value(s) of an integer attribute
-
-
-\section*{\tt \htmlref{vlistInqAttTxt}{vlistInqAttTxt}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistInqAttTxt(INTEGER vlistID, INTEGER varID, 
-                                    CHARACTER*(*) name, INTEGER mlen, INTEGER tp)
-\end{verbatim}
-
-Get the value(s) of a text attribute
-
-
-\section*{\tt \htmlref{vlistInqNatts}{vlistInqNatts}}
-
-\begin{verbatim}
-    INTEGER FUNCTION vlistInqNatts(INTEGER vlistID, INTEGER varID, INTEGER nattsp)
-\end{verbatim}
-
-Get number of variable attributes
-
-
-\section*{\tt \htmlref{vlistInqTaxis}{vlistInqTaxis}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqTaxis]{vlistInqTaxis}
+\else
+vlistInqTaxis
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistInqTaxis(INTEGER vlistID)
 \end{verbatim}
 
 Get the time axis
+\ifpdfoutput{}{(\ref{vlistInqTaxis})}
 
 
-\section*{\tt \htmlref{vlistInqVarCode}{vlistInqVarCode}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarCode]{vlistInqVarCode}
+\else
+vlistInqVarCode
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistInqVarCode(INTEGER vlistID, INTEGER varID)
 \end{verbatim}
 
 Get the Code number of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarCode})}
 
 
-\section*{\tt \htmlref{vlistInqVarDatatype}{vlistInqVarDatatype}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarDatatype]{vlistInqVarDatatype}
+\else
+vlistInqVarDatatype
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistInqVarDatatype(INTEGER vlistID, INTEGER varID)
 \end{verbatim}
 
 Get the data type of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarDatatype})}
 
 
-\section*{\tt \htmlref{vlistInqVarGrid}{vlistInqVarGrid}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarGrid]{vlistInqVarGrid}
+\else
+vlistInqVarGrid
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistInqVarGrid(INTEGER vlistID, INTEGER varID)
 \end{verbatim}
 
 Get the Grid ID of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarGrid})}
 
 
-\section*{\tt \htmlref{vlistInqVarLongname}{vlistInqVarLongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarLongname]{vlistInqVarLongname}
+\else
+vlistInqVarLongname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistInqVarLongname(INTEGER vlistID, INTEGER varID, 
                                    CHARACTER*(*) longname)
 \end{verbatim}
 
 Get the longname of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarLongname})}
 
 
-\section*{\tt \htmlref{vlistInqVarMissval}{vlistInqVarMissval}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarMissval]{vlistInqVarMissval}
+\else
+vlistInqVarMissval
+\fi
+}
 \begin{verbatim}
     REAL*8 FUNCTION vlistInqVarMissval(INTEGER vlistID, INTEGER varID)
 \end{verbatim}
 
 Get the missing value of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarMissval})}
 
 
-\section*{\tt \htmlref{vlistInqVarName}{vlistInqVarName}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarName]{vlistInqVarName}
+\else
+vlistInqVarName
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistInqVarName(INTEGER vlistID, INTEGER varID, CHARACTER*(*) name)
 \end{verbatim}
 
 Get the name of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarName})}
 
 
-\section*{\tt \htmlref{vlistInqVarStdname}{vlistInqVarStdname}}
-
-\begin{verbatim}
-    SUBROUTINE vlistInqVarStdname(INTEGER vlistID, INTEGER varID, 
-                                  CHARACTER*(*) stdname)
-\end{verbatim}
-
-Get the standard name of a Variable
-
-
-\section*{\tt \htmlref{vlistInqVarUnits}{vlistInqVarUnits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarUnits]{vlistInqVarUnits}
+\else
+vlistInqVarUnits
+\fi
+}
 \begin{verbatim}
     SUBROUTINE vlistInqVarUnits(INTEGER vlistID, INTEGER varID, CHARACTER*(*) units)
 \end{verbatim}
 
 Get the units of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarUnits})}
 
 
-\section*{\tt \htmlref{vlistInqVarZaxis}{vlistInqVarZaxis}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistInqVarZaxis]{vlistInqVarZaxis}
+\else
+vlistInqVarZaxis
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistInqVarZaxis(INTEGER vlistID, INTEGER varID)
 \end{verbatim}
 
 Get the Zaxis ID of a Variable
+\ifpdfoutput{}{(\ref{vlistInqVarZaxis})}
 
 
-\section*{\tt \htmlref{vlistNgrids}{vlistNgrids}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistNgrids]{vlistNgrids}
+\else
+vlistNgrids
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistNgrids(INTEGER vlistID)
 \end{verbatim}
 
 Number of grids in a variable list
+\ifpdfoutput{}{(\ref{vlistNgrids})}
 
 
-\section*{\tt \htmlref{vlistNvars}{vlistNvars}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistNvars]{vlistNvars}
+\else
+vlistNvars
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistNvars(INTEGER vlistID)
 \end{verbatim}
 
 Number of variables in a variable list
+\ifpdfoutput{}{(\ref{vlistNvars})}
 
 
-\section*{\tt \htmlref{vlistNzaxis}{vlistNzaxis}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[vlistNzaxis]{vlistNzaxis}
+\else
+vlistNzaxis
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION vlistNzaxis(INTEGER vlistID)
 \end{verbatim}
 
 Number of zaxis in a variable list
+\ifpdfoutput{}{(\ref{vlistNzaxis})}
 
 
-\section*{\tt \htmlref{zaxisCreate}{zaxisCreate}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisCreate]{zaxisCreate}
+\else
+zaxisCreate
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION zaxisCreate(INTEGER zaxistype, INTEGER size)
 \end{verbatim}
 
 Create a vertical Z-axis
+\ifpdfoutput{}{(\ref{zaxisCreate})}
 
 
-\section*{\tt \htmlref{zaxisDefLevels}{zaxisDefLevels}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDefLevels]{zaxisDefLevels}
+\else
+zaxisDefLevels
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisDefLevels(INTEGER zaxisID, const REAL*8 levels)
 \end{verbatim}
 
 Define the levels of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisDefLevels})}
 
 
-\section*{\tt \htmlref{zaxisDefLongname}{zaxisDefLongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDefLongname]{zaxisDefLongname}
+\else
+zaxisDefLongname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisDefLongname(INTEGER zaxisID, CHARACTER*(*) longname)
 \end{verbatim}
 
 Define the longname of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisDefLongname})}
 
 
-\section*{\tt \htmlref{zaxisDefName}{zaxisDefName}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDefName]{zaxisDefName}
+\else
+zaxisDefName
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisDefName(INTEGER zaxisID, CHARACTER*(*) name)
 \end{verbatim}
 
 Define the name of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisDefName})}
 
 
-\section*{\tt \htmlref{zaxisDefUnits}{zaxisDefUnits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDefUnits]{zaxisDefUnits}
+\else
+zaxisDefUnits
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisDefUnits(INTEGER zaxisID, CHARACTER*(*) units)
 \end{verbatim}
 
 Define the units of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisDefUnits})}
 
 
-\section*{\tt \htmlref{zaxisDestroy}{zaxisDestroy}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisDestroy]{zaxisDestroy}
+\else
+zaxisDestroy
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisDestroy(INTEGER zaxisID)
 \end{verbatim}
 
 Destroy a vertical Z-axis
+\ifpdfoutput{}{(\ref{zaxisDestroy})}
 
 
-\section*{\tt \htmlref{zaxisInqLevel}{zaxisInqLevel}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqLevel]{zaxisInqLevel}
+\else
+zaxisInqLevel
+\fi
+}
 \begin{verbatim}
     REAL*8 FUNCTION zaxisInqLevel(INTEGER zaxisID, INTEGER levelID)
 \end{verbatim}
 
 Get one level of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqLevel})}
 
 
-\section*{\tt \htmlref{zaxisInqLevels}{zaxisInqLevels}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqLevels]{zaxisInqLevels}
+\else
+zaxisInqLevels
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisInqLevels(INTEGER zaxisID, REAL*8 levels)
 \end{verbatim}
 
 Get all levels of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqLevels})}
 
 
-\section*{\tt \htmlref{zaxisInqLongname}{zaxisInqLongname}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqLongname]{zaxisInqLongname}
+\else
+zaxisInqLongname
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisInqLongname(INTEGER zaxisID, CHARACTER*(*) longname)
 \end{verbatim}
 
 Get the longname of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqLongname})}
 
 
-\section*{\tt \htmlref{zaxisInqName}{zaxisInqName}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqName]{zaxisInqName}
+\else
+zaxisInqName
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisInqName(INTEGER zaxisID, CHARACTER*(*) name)
 \end{verbatim}
 
 Get the name of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqName})}
 
 
-\section*{\tt \htmlref{zaxisInqSize}{zaxisInqSize}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqSize]{zaxisInqSize}
+\else
+zaxisInqSize
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION zaxisInqSize(INTEGER zaxisID)
 \end{verbatim}
 
 Get the size of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqSize})}
 
 
-\section*{\tt \htmlref{zaxisInqType}{zaxisInqType}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqType]{zaxisInqType}
+\else
+zaxisInqType
+\fi
+}
 \begin{verbatim}
     INTEGER FUNCTION zaxisInqType(INTEGER zaxisID)
 \end{verbatim}
 
 Get the type of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqType})}
 
 
-\section*{\tt \htmlref{zaxisInqUnits}{zaxisInqUnits}}
-
+\section*{\tt 
+\ifpdf
+\hyperref[zaxisInqUnits]{zaxisInqUnits}
+\else
+zaxisInqUnits
+\fi
+}
 \begin{verbatim}
     SUBROUTINE zaxisInqUnits(INTEGER zaxisID, CHARACTER*(*) units)
 \end{verbatim}
 
 Get the units of a Z-axis
+\ifpdfoutput{}{(\ref{zaxisInqUnits})}
diff --git a/doc/tex/formats.tex b/doc/tex/formats.tex
index c74298d21cf10a7a7afae36438eff88eb8863f90..255af5b4135a58dd8495ae9db4d7ac0f8fbad63d 100644
--- a/doc/tex/formats.tex
+++ b/doc/tex/formats.tex
@@ -3,7 +3,7 @@
 
 \section{GRIB edition 1}
 
-\htmlref{GRIB}{GRIB} (GRIdded Binary) is a standard format designed by the
+GRIB \cite{GRIB} (GRIdded Binary) is a standard format designed by the
 World Meteorological Organization (WMO) to support the efficient 
 transmission and storage of gridded meteorological data.
 
@@ -76,7 +76,7 @@ data representation and level types are implemented: \\
 
 \section{NetCDF}
 
-\htmlref{NetCDF}{NetCDF} (Network Common Data Form) is an interface for array-oriented data
+NetCDF \cite{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 
@@ -95,7 +95,7 @@ of the {\CDI} library (see \htmlref{Build}{build}).
 \section{SERVICE}
 
 SERVICE is the binary exchange format of the atmospheric general
-circulation model \htmlref{ECHAM}{ECHAM}.
+circulation model ECHAM \cite{ECHAM}.
 It has a header section with 8 integer values followed by the data section.
 The header and the data section have the standard Fortran blocking
 for binary data records.
@@ -132,12 +132,11 @@ The meaning of the variables are:
 
 \section{EXTRA}
 
-EXTRA is the standard binary output format of the ocean model \htmlref{MPIOM}{MPIOM}.
-It has a header section with 4 integer values followed by the data section.
-The header and the data section have the standard Fortran blocking
-for binary data records.
-An EXTRA record can have an accuracy of 4 or 8 bytes and 
-the byteorder can be little or big endian.
+EXTRA is the standard binary output format of the ocean model MPIOM
+\cite{MPIOM}. It has a header section with 4 integer values followed by the
+data section. The header and the data section have the standard Fortran
+blocking for binary data records. An EXTRA record can have an accuracy of 4 or
+8 bytes and the byteorder can be little or big endian.
 The following Fortran code example can be used to read an
 EXTRA record with an accuracy of 4 bytes:
 
@@ -165,7 +164,7 @@ The meaning of the variables are:
 
 \section{IEG}
 
-IEG is the standard binary output format of the regional model \htmlref{REMO}{REMO}.
+IEG is the standard binary output format of the regional model REMO \cite{REMO}.
 It is simple an unpacked GRIB edition 1 format. The product and grid
 description section are coded with 4 byte integer values and the
 data section can have 4 or 8 byte IEEE floating point values.
diff --git a/doc/tex/makedoc b/doc/tex/makedoc
index af1303181b0020cb472dbb0a19b82b2c9b0a5bda..eb1025985f9182c258c6c40f8d6b180351722440 100755
--- a/doc/tex/makedoc
+++ b/doc/tex/makedoc
@@ -274,11 +274,18 @@ foreach $key (@sorted_func)  {
   $cproto = $hrefproto{$key};
   $title  = $hreftitle{$key};
 
-  printcfdoc ("\n\n\\section*{\\tt \\htmlref{$key}{$key}}\n\n");
+  printcfdoc ("\n\n\\section*{\\tt ");
+  printcfdoc ("\\ifpdf\n");
+  printcfdoc ("\\hyperref[$key]{$key}\n");
+  printcfdoc ("\\else\n");
+  printcfdoc ("$key\n");
+  printcfdoc ("\\fi\n");
+  printcfdoc ("}\n");
   printcfdoc ("\\begin{verbatim}\n");
   printproto ($cproto);
   printcfdoc ("\\end{verbatim}\n");
   printcfdoc ("\n$title\n");
+  printcfdoc ("\\ifpdfoutput{}{(\\ref{$key})}\n");
 }
 
 sub printproto {
diff --git a/doc/tex/makehtml b/doc/tex/makehtml
index f47b5469c1c4fcc0539d0c01876346dcb35970ce..5257c52ad474bcc95729b769d2f27280e00f2b56 100755
--- a/doc/tex/makehtml
+++ b/doc/tex/makehtml
@@ -1,9 +1,4 @@
-#cat > cdi.ist << 'EOF'
-#delim_0        "{\\idxdotfill} "
-#headings_flag  1
-#heading_prefix "{\\centerline {\\Large \\bf "
-#%heading_prefix "{\\centerline {\\bfseries "
-#heading_suffix "}}"
-#EOF
-#makeindex -s cdi.ist cdi.idx
-latex2html -local_icons -split 4 -toc_depth 3 -white cdi.tex
+#!/bin/sh
+if [ ! -d ../html ];then mkdir ../html ;fi
+htlatex cdi_fman.tex "html" "" -d../html/ 
+htlatex cdi_cman.tex "html" "" -d../html/ 
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 8c9a9e9345a4e09187d4295d49f20621584a0050..c9aa5aaa0e0753d6593395ce008c4892e423a5e1 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,6 +1,9 @@
 ## Process this file with automake to produce Makefile.in
 #
-noinst_PROGRAMS = cdi_write cdi_read cdi_copy
+  noinst_PROGRAMS = cdi_write cdi_read cdi_copy
+if CREATE_ISOC
+  noinst_PROGRAMS += cdi_read_f2003 cdi_write_f2003
+endif
 #
 cdi_write_SOURCES = cdi_write.c
 cdi_write_LDADD = ../src/libcdi.a $(LDFLAGS)
@@ -13,4 +16,10 @@ cdi_copy_LDADD = ../src/libcdi.a $(LDFLAGS)
 #
 AM_CPPFLAGS = -I$(top_srcdir)/src
 #
+cdi_read_f2003: cdi_read_f2003.f90
+	$(FC) $(AM_FCFLAGS) $(FCFLAGS) $(FCFLAGS_f90) $@.f90 ../src/cdilib.o ../src/mo_cdi.o -I../src $(LDFLAGS) $(LIBS) -o $@
+#
+cdi_write_f2003: cdi_write_f2003.f90
+	$(FC) $(AM_FCFLAGS) $(FCFLAGS) $(FCFLAGS_f90) $@.f90 ../src/cdilib.o ../src/mo_cdi.o -I../src $(LDFLAGS) $(LIBS) -o $@
+#
 CLEANFILES  = `ls *~`
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 607d16c6ad98aeb102d0b9a070ee7848d61507af..ac1f955d284fd48d8a987ee18dc7954513070743 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -34,17 +34,20 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 noinst_PROGRAMS = cdi_write$(EXEEXT) cdi_read$(EXEEXT) \
-	cdi_copy$(EXEEXT)
+	cdi_copy$(EXEEXT) $(am__EXEEXT_1)
+@CREATE_ISOC_TRUE@am__append_1 = cdi_read_f2003 cdi_write_f2003
 subdir = examples
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/config.h
 CONFIG_CLEAN_FILES =
+@CREATE_ISOC_TRUE@am__EXEEXT_1 = cdi_read_f2003$(EXEEXT) \
+@CREATE_ISOC_TRUE@	cdi_write_f2003$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 am_cdi_copy_OBJECTS = cdi_copy.$(OBJEXT)
 cdi_copy_OBJECTS = $(am_cdi_copy_OBJECTS)
@@ -53,9 +56,15 @@ cdi_copy_DEPENDENCIES = ../src/libcdi.a $(am__DEPENDENCIES_1)
 am_cdi_read_OBJECTS = cdi_read.$(OBJEXT)
 cdi_read_OBJECTS = $(am_cdi_read_OBJECTS)
 cdi_read_DEPENDENCIES = ../src/libcdi.a $(am__DEPENDENCIES_1)
+cdi_read_f2003_SOURCES = cdi_read_f2003.c
+cdi_read_f2003_OBJECTS = cdi_read_f2003.$(OBJEXT)
+cdi_read_f2003_LDADD = $(LDADD)
 am_cdi_write_OBJECTS = cdi_write.$(OBJEXT)
 cdi_write_OBJECTS = $(am_cdi_write_OBJECTS)
 cdi_write_DEPENDENCIES = ../src/libcdi.a $(am__DEPENDENCIES_1)
+cdi_write_f2003_SOURCES = cdi_write_f2003.c
+cdi_write_f2003_OBJECTS = cdi_write_f2003.$(OBJEXT)
+cdi_write_f2003_LDADD = $(LDADD)
 DEFAULT_INCLUDES = -I. -I$(top_builddir)/src@am__isrc@
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 am__depfiles_maybe = depfiles
@@ -63,9 +72,10 @@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(cdi_copy_SOURCES) $(cdi_read_SOURCES) $(cdi_write_SOURCES)
+SOURCES = $(cdi_copy_SOURCES) $(cdi_read_SOURCES) cdi_read_f2003.c \
+	$(cdi_write_SOURCES) cdi_write_f2003.c
 DIST_SOURCES = $(cdi_copy_SOURCES) $(cdi_read_SOURCES) \
-	$(cdi_write_SOURCES)
+	cdi_read_f2003.c $(cdi_write_SOURCES) cdi_write_f2003.c
 ETAGS = etags
 CTAGS = ctags
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
@@ -92,6 +102,8 @@ EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCMODEXT = @FCMODEXT@
 FFLAGS = @FFLAGS@
 GREP = @GREP@
 INSTALL = @INSTALL@
@@ -124,6 +136,7 @@ abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -239,7 +252,9 @@ distclean-compile:
 
 @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_read_f2003.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_write.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdi_write_f2003.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -430,6 +445,12 @@ uninstall-am:
 	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
 	uninstall-am
 
+#
+cdi_read_f2003: cdi_read_f2003.f90
+	$(FC) $(AM_FCFLAGS) $(FCFLAGS) $(FCFLAGS_f90) $@.f90 ../src/cdilib.o ../src/mo_cdi.o -I../src $(LDFLAGS) $(LIBS) -o $@
+#
+cdi_write_f2003: cdi_write_f2003.f90
+	$(FC) $(AM_FCFLAGS) $(FCFLAGS) $(FCFLAGS_f90) $@.f90 ../src/cdilib.o ../src/mo_cdi.o -I../src $(LDFLAGS) $(LIBS) -o $@
 # 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/src/Makefile.am b/src/Makefile.am
index dd80a398a44d004197af631920cc72fa2d9ff8f3..d56c35b08c05989118d71e1c4c681fbe9701464c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,9 +1,15 @@
 ## Process this file with automake to produce Makefile.in
 #
+BUILT_SOURCES = cdilib.c
+#
 lib_LIBRARIES = libcdi.a
 #
 include_HEADERS = cdi.h cdi.inc
 #
+if CREATE_ISOC
+include_HEADERS += mo_cdi.$(FCMODEXT)
+endif
+#
 libcdi_a_SOURCES = 	 \
         cdiFortran.c   	 \
 	cdi_error.c      \
@@ -87,6 +93,32 @@ cdiFortran.o: cdiFortran.c
 	source='$<' object='$@' libtool=no \
 	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \
 	$(CCDEPMODE) $(depcomp) \
-	$(COMPILE) $(CFINT) -c `test -f '$<' || echo '$(srcdir)/'`$<
+	$(COMPILE) $(CFINT) $(REAL4) -c `test -f '$<' || echo '$(srcdir)/'`$<
+#
+cdilib.c:
+	./make_cdilib
+#
+cdilib.o: cdilib.c
+	$(COMPILE) $(CFINT) $(REAL4) -c $<
+#
+all-local: $(LOCALTARGETS) 
+
+LOCALTARGETS = 
+
+if CREATE_ISOC
+LOCALTARGETS += mo_cdi.o cdilib.o
+endif
+#
+install-data-local: $(LOCALTARGETS)
+	 @for f in $(LOCALTARGETS) ; do \
+	   echo " $(INSTALL_DATA) $$f \"$(DESTDIR)$(libdir)/$$f\""; \
+	   $(INSTALL_DATA) $$f "$(DESTDIR)$(libdir)/$$f" ; \
+	 done
+#
+mo_cdi.o: mo_cdi.f90
+	$(FC) $(FCFLAGS) -c $(FCFLAGS_f90) mo_cdi.f90
+#
+mo_cdi.$(FCMODEXT): mo_cdi.f90
+	$(FC) $(FCFLAGS) -c $(FCFLAGS_f90) mo_cdi.f90
 #
-CLEANFILES  = `ls *~`
+CLEANFILES  = `ls *~` mo_cdi.$(FCMODEXT)
diff --git a/src/Makefile.in b/src/Makefile.in
index e2b34c0cb88d3555e0ac54f27730dca566b812eb..8bfff116fba5dcdfd5124ce2264f854153504581 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -34,12 +34,15 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
+#
+@CREATE_ISOC_TRUE@am__append_1 = mo_cdi.$(FCMODEXT)
+@CREATE_ISOC_TRUE@am__append_2 = mo_cdi.o cdilib.o
 subdir = src
-DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
+DIST_COMMON = $(am__include_HEADERS_DIST) $(srcdir)/Makefile.am \
 	$(srcdir)/Makefile.in $(srcdir)/config.h.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
@@ -82,6 +85,7 @@ CCLD = $(CC)
 LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 SOURCES = $(libcdi_a_SOURCES)
 DIST_SOURCES = $(libcdi_a_SOURCES)
+am__include_HEADERS_DIST = cdi.h cdi.inc mo_cdi.$(FCMODEXT)
 includeHEADERS_INSTALL = $(INSTALL_HEADER)
 HEADERS = $(include_HEADERS)
 ETAGS = etags
@@ -110,6 +114,8 @@ EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCMODEXT = @FCMODEXT@
 FFLAGS = @FFLAGS@
 GREP = @GREP@
 INSTALL = @INSTALL@
@@ -142,6 +148,7 @@ abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@
@@ -191,10 +198,12 @@ target_vendor = @target_vendor@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 
+#
+BUILT_SOURCES = cdilib.c
 #
 lib_LIBRARIES = libcdi.a
 #
-include_HEADERS = cdi.h cdi.inc
+include_HEADERS = cdi.h cdi.inc $(am__append_1)
 #
 libcdi_a_SOURCES = \
         cdiFortran.c   	 \
@@ -275,9 +284,10 @@ libcdi_a_SOURCES = \
 	util.h	 	 \
 	varscan.h
 
+LOCALTARGETS = $(am__append_2)
 #
-CLEANFILES = `ls *~`
-all: config.h
+CLEANFILES = `ls *~` mo_cdi.$(FCMODEXT)
+all: $(BUILT_SOURCES) config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
@@ -517,13 +527,15 @@ distdir: $(DISTFILES)
 	  fi; \
 	done
 check-am: all-am
-check: check-am
-all-am: Makefile $(LIBRARIES) $(HEADERS) config.h
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LIBRARIES) $(HEADERS) config.h all-local
 installdirs:
 	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
-install: install-am
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
 install-exec: install-exec-am
 install-data: install-data-am
 uninstall: uninstall-am
@@ -548,6 +560,7 @@ 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."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
 clean: clean-am
 
 clean-am: clean-generic clean-libLIBRARIES mostlyclean-am
@@ -568,7 +581,7 @@ info: info-am
 
 info-am:
 
-install-data-am: install-includeHEADERS
+install-data-am: install-data-local install-includeHEADERS
 
 install-dvi: install-dvi-am
 
@@ -607,12 +620,13 @@ uninstall-am: uninstall-includeHEADERS uninstall-libLIBRARIES
 
 .MAKE: install-am install-strip
 
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-	clean-libLIBRARIES ctags distclean distclean-compile \
-	distclean-generic distclean-hdr distclean-tags distdir dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-dvi install-dvi-am \
-	install-exec install-exec-am install-html install-html-am \
+.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \
+	clean-generic clean-libLIBRARIES ctags distclean \
+	distclean-compile distclean-generic distclean-hdr \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am \
+	install-data-local install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am \
 	install-includeHEADERS install-info install-info-am \
 	install-libLIBRARIES install-man install-pdf install-pdf-am \
 	install-ps install-ps-am install-strip installcheck \
@@ -626,7 +640,27 @@ cdiFortran.o: cdiFortran.c
 	source='$<' object='$@' libtool=no \
 	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' \
 	$(CCDEPMODE) $(depcomp) \
-	$(COMPILE) $(CFINT) -c `test -f '$<' || echo '$(srcdir)/'`$<
+	$(COMPILE) $(CFINT) $(REAL4) -c `test -f '$<' || echo '$(srcdir)/'`$<
+#
+cdilib.c:
+	./make_cdilib
+#
+cdilib.o: cdilib.c
+	$(COMPILE) $(CFINT) $(REAL4) -c $<
+#
+all-local: $(LOCALTARGETS) 
+#
+install-data-local: $(LOCALTARGETS)
+	 @for f in $(LOCALTARGETS) ; do \
+	   echo " $(INSTALL_DATA) $$f \"$(DESTDIR)$(libdir)/$$f\""; \
+	   $(INSTALL_DATA) $$f "$(DESTDIR)$(libdir)/$$f" ; \
+	 done
+#
+mo_cdi.o: mo_cdi.f90
+	$(FC) $(FCFLAGS) -c $(FCFLAGS_f90) mo_cdi.f90
+#
+mo_cdi.$(FCMODEXT): mo_cdi.f90
+	$(FC) $(FCFLAGS) -c $(FCFLAGS_f90) mo_cdi.f90
 # 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/tests/Makefile.in b/tests/Makefile.in
index 077ebd8deddde7d27d12d15606c0152f17dbae2f..74a05d4c28f1750b36b5a799dcb049240086e013 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -36,8 +36,8 @@ check_PROGRAMS = test_grib$(EXEEXT)
 subdir = tests
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
-	$(top_srcdir)/configure.ac
+am__aclocal_m4_deps = $(top_srcdir)/m4/acx_sl_mod_suffix.m4 \
+	$(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
@@ -82,6 +82,8 @@ EGREP = @EGREP@
 EXEEXT = @EXEEXT@
 F77 = @F77@
 FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCMODEXT = @FCMODEXT@
 FFLAGS = @FFLAGS@
 GREP = @GREP@
 INSTALL = @INSTALL@
@@ -114,6 +116,7 @@ abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 ac_ct_CC = @ac_ct_CC@
 ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
 am__include = @am__include@
 am__leading_dot = @am__leading_dot@
 am__quote = @am__quote@