diff --git a/m4/hdf5.m4 b/m4/hdf5.m4
index b77409da5cbfcfc18a6130e065c1480854767f84..d12b1b35f4b6b82e5bd1b16d18129392d261b929 100644
--- a/m4/hdf5.m4
+++ b/m4/hdf5.m4
@@ -1,6 +1,32 @@
+## -*- autoconf -*-
 # $Id$
 # searches for HDF5-stuff
 
+# DUNE_PATH_HDF5()
+#
+# shell variables:
+#   with_hdf5
+#     no, yes, or "yes (parallel)"
+#   with_hdf5_libs
+#     empty or something apropriate for LIBS
+#   HDF5_CPPFLAGS
+#   HDF5_LDFLAGS
+#   HDF5_LIBS
+#   HDF5_PARALLEL
+#     1 or undef
+#   HAVE_HDF5
+#     0 ot 1
+#
+# substitutions:
+#   HDF5_CPPFLAGS
+#   HDF5_LDFLAGS
+#   HDF5_LIBS
+#
+# defines:
+#   HAVE_HDF5
+#
+# conditionals:
+#   HDF5
 AC_DEFUN([DUNE_PATH_HDF5],[
   AC_REQUIRE([AC_PROG_CC])
   AC_REQUIRE([AC_PATH_XTRA])
@@ -16,11 +42,9 @@ AC_DEFUN([DUNE_PATH_HDF5],[
     [AC_HELP_STRING([--with-hdf5-libs=LIBS],[additional libraries needed to link hdf5 programs. Those might be needed if your hdf5 library is static. Possible values are: -lz or -lz -lsz.])],[])
 
  # store values
- ac_save_CFLAGS="$CFLAGS"
  ac_save_CPPFLAGS="$CPPFLAGS"
  ac_save_LDFLAGS="$LDFLAGS"
  ac_save_LIBS="$LIBS"
- LIBS=""
 
  # start building variables
 
@@ -32,27 +56,40 @@ AC_DEFUN([DUNE_PATH_HDF5],[
    else
      AC_MSG_ERROR([HDF5-directory $with_hdf5 does not exist])
    fi
-   LDFLAGS="$LDFLAGS -L$with_hdf5/lib"
-   HDF5_LDFLAGS="$LDFLAGS"
-   CPPFLAGS="$CPPFLAGS -I$with_hdf5/include"
+   _dune_hdf5_libpath="-L$with_hdf5/lib"
+   _dune_hdf5_incpath="-I$with_hdf5/include"
+ else
+   _dune_hdf5_libpath=""
+   _dune_hdf5_incpath=""
  fi
 
+ CPPFLAGS="$CPPFLAGS $_dune_hdf5_incpath"
+
+ HDF5_CPPFLAGS=""
+ HDF5_LDFLAGS=""
+ HDF5_LIBS=""
+ HDF5_PARALLEL=0
  # test if we are parallel
  AC_CHECK_DECL(H5_HAVE_PARALLEL, [dnl
-	LIBS="$DUNEMPILIBS $LIBS"
-	LDFLAGS="$LDFLAGS $DUNEMPILDFLAGS"
 	CPPFLAGS="$CPPFLAGS $DUNEMPICPPFLAGS"
+	HDF5_CPPFLAGS="$HDF5_CPPFLAGS \${DUNEMPICPPFLAGS}"
+	LDFLAGS="$LDFLAGS $DUNEMPILDFLAGS"
+	HDF5_LDFLAGS="$HDF5_LDFLAGS \${DUNEMPILDFLAGS}"
+	LIBS="$DUNEMPILIBS $LIBS"
+	HDF5_LIBS="\${DUNEMPILIBS} $HDF5_LIBS"
 	HDF5_PARALLEL=1],[],[#include"H5pubconf.h"])
 
  # test for an arbitrary header
  AC_CHECK_HEADER([hdf5.h], 
-   [HAVE_HDF5=1]
-    HDF5_CPPFLAGS="$CPPFLAGS",
+   [HAVE_HDF5=1],
    [HAVE_HDF5=0])
 	
+ # Just fotr the configure check, -L has to go into LIBS in the end
+ LDFLAGS="$LDFLAGS $_dune_hdf5_libpath"
  # test for lib
  if test x$HAVE_HDF5 = x1 ; then
-   AC_CHECK_LIB(hdf5, H5open,[HDF5_LIBS="-lhdf5 $with_hdf5_libs"],
+   AC_CHECK_LIB([hdf5], [H5open],
+     [HDF5_LIBS="$_dune_hdf5_libpath -lhdf5 $with_hdf5_libs $HDF5_LIBS"],
      [HAVE_HDF5=0], ["$with_hdf5_libs"])
  fi
 
@@ -61,20 +98,33 @@ AC_DEFUN([DUNE_PATH_HDF5],[
 
  # did we succeed?
  if test x$HAVE_HDF5 = x1 ; then
-   AC_SUBST(HDF5_CPPFLAGS, $HDF5_CPPFLAGS)
-   AC_SUBST(HDF5_LDFLAGS, $HDF5_LDFLAGS)
-   AC_SUBST(HDF5_LIBS, $HDF5_LIBS)
    AC_DEFINE(HAVE_HDF5, 1, [Define to 1 if hdf5 was found])
 
    # proudly show in summary
    with_hdf5="yes"
+   if test x"$HDF5_PARALLEL" = x1; then
+     with_hdf5="$with_hdf5 (parallel)"
+   fi
+ else
+   # clear variables
+   HDF5_CPPFLAGS=
+   HDF5_LDFLAGS=
+   HDF5_LIBS=
+   HDF5_PARALLEL=0
  fi
 
+ AC_SUBST([HDF5_CPPFLAGS])
+ AC_SUBST([HDF5_LDFLAGS])
+ AC_SUBST([HDF5_LIBS])
+
  # also tell automake
  AM_CONDITIONAL(HDF5, test x$HAVE_HDF5 = x1)
 
+ # add to global list
+ DUNE_ADD_ALL_PKG([HDF5], [\${HDF5_CPPFLAGS}],
+                  [\${HDF5_LDFLAGS}], [\${HDF5_LIBS}])    
+
  # reset values					    
- CFLAGS="$ac_save_CFLAGS"
  LIBS="$ac_save_LIBS"
  LDFLAGS="$ac_save_LDFLAGS"
  CPPFLAGS="$ac_save_CPPFLAGS"