diff --git a/dune.module b/dune.module
index 2ee4c409a6a9319dd337a490fbb656b0fccc75f3..df08e2c5fbb61f4694dd562dbc272898b5648068 100644
--- a/dune.module
+++ b/dune.module
@@ -3,6 +3,6 @@
 ################################
 
 Module: dune-tectonic
-Version: 2.4-1
+Version: 2.5-1
 Maintainer: elias.pipping@fu-berlin.de
 Depends: dune-common dune-fufem dune-geometry dune-grid  dune-istl dune-solvers dune-tnnmg
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 448285648e8450f3d3dda354ddfa2093268d6cc8..ef471d7d9bb70cba4ca7a51fa8ff854fe605ae07 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -35,8 +35,7 @@ foreach(_dim 2 3)
   add_dune_ug_flags(${_sw_target})
   add_dune_ug_flags(${_ugw_target})
 
-  set_property(TARGET ${_sw_target} APPEND PROPERTY INCLUDE_DIRECTORIES ${HDF5_INCLUDE_DIR})
-  target_link_libraries(${_sw_target} ${HDF5_LIBRARIES})
+  add_dune_hdf5_flags(${_sw_target})
 
   set_property(TARGET ${_sw_target} APPEND PROPERTY COMPILE_DEFINITIONS "MY_DIM=${_dim}")
   set_property(TARGET ${_ugw_target} APPEND PROPERTY COMPILE_DEFINITIONS "MY_DIM=${_dim}")
diff --git a/src/hdf5-writer.hh b/src/hdf5-writer.hh
index e4e5358e5a78ef582cf9f9ca47c29a425d3f7296..02de2b278b542448491920e1244bf4726f778155 100644
--- a/src/hdf5-writer.hh
+++ b/src/hdf5-writer.hh
@@ -3,7 +3,7 @@
 
 #include <dune/fufem/functions/basisgridfunction.hh>
 #include <dune/fufem/geometry/convexpolyhedron.hh>
-#include <dune/fufem/hdf5/hdf5file.hh>
+#include <dune/fufem/hdf5/file.hh>
 
 #include "hdf5/frictionalboundary-writer.hh"
 #include "hdf5/iteration-writer.hh"
@@ -21,7 +21,7 @@ class HDF5Writer {
   using LocalVector = typename Vector::block_type;
 
 public:
-  HDF5Writer(HDF5Grouplike &file, Vector const &vertexCoordinates,
+  HDF5Writer(HDF5::Grouplike &file, Vector const &vertexCoordinates,
              VertexBasis const &vertexBasis, Patch const &surface,
              Patch const &frictionalBoundary,
              ConvexPolyhedron<LocalVector> const &weakPatch)
@@ -58,7 +58,7 @@ class HDF5Writer {
   }
 
 private:
-  HDF5Grouplike &file_;
+  HDF5::Grouplike &file_;
 
   IterationWriter iterationWriter_;
   TimeWriter<ProgramState> timeWriter_;
diff --git a/src/hdf5/frictionalboundary-writer.cc b/src/hdf5/frictionalboundary-writer.cc
index b98290dfc103da2ded9f903c1d04a5ea1cf128d2..e78b70f3f56bae4ed46d44b1d7aed9d4bc3554ea 100644
--- a/src/hdf5/frictionalboundary-writer.cc
+++ b/src/hdf5/frictionalboundary-writer.cc
@@ -2,12 +2,14 @@
 #include "config.h"
 #endif
 
+#include <dune/fufem/hdf5/singletonwriter.hh>
+
 #include "frictionalboundary-writer.hh"
 #include "restrict.hh"
 
 template <class ProgramState, class GridView>
 FrictionalBoundaryWriter<ProgramState, GridView>::FrictionalBoundaryWriter(
-    HDF5Grouplike &file, Vector const &vertexCoordinates,
+    HDF5::Grouplike &file, Vector const &vertexCoordinates,
     Patch const &frictionalBoundary)
     : group_(file, "frictionalBoundary"),
       frictionalBoundary_(frictionalBoundary),
@@ -23,7 +25,7 @@ FrictionalBoundaryWriter<ProgramState, GridView>::FrictionalBoundaryWriter(
                                            frictionalBoundary.numVertices()) {
   auto const frictionalBoundaryCoordinates =
       restrictToSurface(vertexCoordinates, frictionalBoundary);
-  HDF5SingletonWriter<2> frictionalBoundaryCoordinateWriter(
+  HDF5::SingletonWriter<2> frictionalBoundaryCoordinateWriter(
       group_, "coordinates", frictionalBoundaryCoordinates.size(),
       Vector::block_type::dimension);
   setEntry(frictionalBoundaryCoordinateWriter, frictionalBoundaryCoordinates);
diff --git a/src/hdf5/frictionalboundary-writer.hh b/src/hdf5/frictionalboundary-writer.hh
index 772b82df1e0ea82cca3ae8a30d820480bd7c0aa6..705b7fb21baf88873032eefe793e1290df750515 100644
--- a/src/hdf5/frictionalboundary-writer.hh
+++ b/src/hdf5/frictionalboundary-writer.hh
@@ -3,8 +3,7 @@
 
 #include <dune/fufem/boundarypatch.hh>
 
-#include <dune/fufem/hdf5/hdf5-sequence-io.hh>
-#include <dune/fufem/hdf5/hdf5-singleton-writer.hh>
+#include <dune/fufem/hdf5/sequenceio.hh>
 
 template <class ProgramState, class GridView> class FrictionalBoundaryWriter {
   using ScalarVector = typename ProgramState::ScalarVector;
@@ -12,20 +11,20 @@ template <class ProgramState, class GridView> class FrictionalBoundaryWriter {
   using Patch = BoundaryPatch<GridView>;
 
 public:
-  FrictionalBoundaryWriter(HDF5Grouplike &file, Vector const &vertexCoordinates,
+  FrictionalBoundaryWriter(HDF5::Grouplike &file, Vector const &vertexCoordinates,
                            Patch const &frictionalBoundary);
 
   template <class Friction>
   void write(ProgramState const &programState, Friction &friction);
 
 private:
-  HDF5Group group_;
+  HDF5::Group group_;
 
   Patch const &frictionalBoundary_;
 
-  HDF5SequenceIO<2> frictionalBoundaryDisplacementWriter_;
-  HDF5SequenceIO<2> frictionalBoundaryVelocityWriter_;
-  HDF5SequenceIO<1> frictionalBoundaryStateWriter_;
-  HDF5SequenceIO<1> frictionalBoundaryCoefficientWriter_;
+  HDF5::SequenceIO<2> frictionalBoundaryDisplacementWriter_;
+  HDF5::SequenceIO<2> frictionalBoundaryVelocityWriter_;
+  HDF5::SequenceIO<1> frictionalBoundaryStateWriter_;
+  HDF5::SequenceIO<1> frictionalBoundaryCoefficientWriter_;
 };
 #endif
diff --git a/src/hdf5/iteration-writer.cc b/src/hdf5/iteration-writer.cc
index e48f091b970f2e4f657241d95717fca99e8e34b4..568c1cf5056e9fae81d43f594dc7b7704b4740e8 100644
--- a/src/hdf5/iteration-writer.cc
+++ b/src/hdf5/iteration-writer.cc
@@ -4,7 +4,7 @@
 
 #include "iteration-writer.hh"
 
-IterationWriter::IterationWriter(HDF5Grouplike &file)
+IterationWriter::IterationWriter(HDF5::Grouplike &file)
     : group_(file, "iterations"),
       fpiSubGroup_(group_, "fixedPoint"),
       mgSubGroup_(group_, "multiGrid"),
diff --git a/src/hdf5/iteration-writer.hh b/src/hdf5/iteration-writer.hh
index 377ae7494650c245d7c643ed5ee2c09e4f0e8bca..f3cb6e064ec3a4df7eaeb28869f39fe1bbe72f47 100644
--- a/src/hdf5/iteration-writer.hh
+++ b/src/hdf5/iteration-writer.hh
@@ -1,24 +1,24 @@
 #ifndef SRC_HDF_ITERATION_WRITER_HH
 #define SRC_HDF_ITERATION_WRITER_HH
 
-#include <dune/fufem/hdf5/hdf5-sequence-io.hh>
+#include <dune/fufem/hdf5/sequenceio.hh>
 
 #include "../time-stepping/adaptivetimestepper.hh"
 
 class IterationWriter {
 public:
-  IterationWriter(HDF5Grouplike &file);
+  IterationWriter(HDF5::Grouplike &file);
 
   void write(size_t timeStep, IterationRegister const &iterationCount);
 
 private:
-  HDF5Group group_;
-  HDF5Group fpiSubGroup_;
-  HDF5Group mgSubGroup_;
+  HDF5::Group group_;
+  HDF5::Group fpiSubGroup_;
+  HDF5::Group mgSubGroup_;
 
-  HDF5SequenceIO<0, size_t> finalMGIterationWriter_;
-  HDF5SequenceIO<0, size_t> finalFPIIterationWriter_;
-  HDF5SequenceIO<0, size_t> totalMGIterationWriter_;
-  HDF5SequenceIO<0, size_t> totalFPIIterationWriter_;
+  HDF5::SequenceIO<0, size_t> finalMGIterationWriter_;
+  HDF5::SequenceIO<0, size_t> finalFPIIterationWriter_;
+  HDF5::SequenceIO<0, size_t> totalMGIterationWriter_;
+  HDF5::SequenceIO<0, size_t> totalFPIIterationWriter_;
 };
 #endif
diff --git a/src/hdf5/patchinfo-writer.cc b/src/hdf5/patchinfo-writer.cc
index 253848c3aae2b70bd789da8c430cd1e924c8f6ed..2df15c5fdfd991d451341ab26616a16b2d3aade2 100644
--- a/src/hdf5/patchinfo-writer.cc
+++ b/src/hdf5/patchinfo-writer.cc
@@ -3,6 +3,7 @@
 #endif
 
 #include <dune/fufem/grid/hierarchic-approximation.hh>
+#include <dune/fufem/hdf5/singletonwriter.hh>
 
 #include "patchinfo-writer.hh"
 
@@ -65,7 +66,7 @@ GridEvaluator<LocalVector, GridView>::evaluate(Function const &f) const {
 
 template <class ProgramState, class VertexBasis, class GridView>
 PatchInfoWriter<ProgramState, VertexBasis, GridView>::PatchInfoWriter(
-    HDF5Grouplike &file, VertexBasis const &vertexBasis,
+    HDF5::Grouplike &file, VertexBasis const &vertexBasis,
     Patch const &frictionalBoundary,
     ConvexPolyhedron<LocalVector> const &weakPatch)
     : group_(file, "weakPatchGrid"),
@@ -74,11 +75,11 @@ PatchInfoWriter<ProgramState, VertexBasis, GridView>::PatchInfoWriter(
       weakPatchGridVelocityWriter_(
           group_, "velocity", gridEvaluator_.xCoordinates.size(),
           gridEvaluator_.zCoordinates.size(), Vector::block_type::dimension) {
-  HDF5SingletonWriter<1> weakPatchGridXCoordinateWriter(
+  HDF5::SingletonWriter<1> weakPatchGridXCoordinateWriter(
       group_, "xCoordinates", gridEvaluator_.xCoordinates.size());
   setEntry(weakPatchGridXCoordinateWriter, gridEvaluator_.xCoordinates);
 
-  HDF5SingletonWriter<1> weakPatchGridZCoordinateWriter(
+  HDF5::SingletonWriter<1> weakPatchGridZCoordinateWriter(
       group_, "zCoordinates", gridEvaluator_.zCoordinates.size());
   setEntry(weakPatchGridZCoordinateWriter, gridEvaluator_.zCoordinates);
 }
diff --git a/src/hdf5/patchinfo-writer.hh b/src/hdf5/patchinfo-writer.hh
index 23e988aa3c143b2191433559f5489a0322b512f5..82dea3646910d28bd401c2eb5d35ae7465d2e648 100644
--- a/src/hdf5/patchinfo-writer.hh
+++ b/src/hdf5/patchinfo-writer.hh
@@ -6,8 +6,7 @@
 #include <dune/fufem/boundarypatch.hh>
 #include <dune/fufem/functions/basisgridfunction.hh>
 #include <dune/fufem/geometry/convexpolyhedron.hh>
-#include <dune/fufem/hdf5/hdf5-sequence-io.hh>
-#include <dune/fufem/hdf5/hdf5-singleton-writer.hh>
+#include <dune/fufem/hdf5/sequenceio.hh>
 
 #include "../one-body-problem-data/mygeometry.hh"
 
@@ -35,18 +34,18 @@ class PatchInfoWriter {
   using Patch = BoundaryPatch<GridView>;
 
 public:
-  PatchInfoWriter(HDF5Grouplike &file, VertexBasis const &vertexBasis,
+  PatchInfoWriter(HDF5::Grouplike &file, VertexBasis const &vertexBasis,
                   Patch const &frictionalBoundary,
                   ConvexPolyhedron<LocalVector> const &weakPatch);
 
   void write(ProgramState const &programState);
 
 private:
-  HDF5Group group_;
+  HDF5::Group group_;
 
   VertexBasis const &vertexBasis_;
 
   GridEvaluator<LocalVector, GridView> const gridEvaluator_;
-  HDF5SequenceIO<3> weakPatchGridVelocityWriter_;
+  HDF5::SequenceIO<3> weakPatchGridVelocityWriter_;
 };
 #endif
diff --git a/src/hdf5/restart-io.cc b/src/hdf5/restart-io.cc
index c7fc74222443b8516a5c610297d48e41e6e61110..8fe3c59a504c41a4e0187019854c3a63c921120a 100644
--- a/src/hdf5/restart-io.cc
+++ b/src/hdf5/restart-io.cc
@@ -5,7 +5,7 @@
 #include "restart-io.hh"
 
 template <class ProgramState>
-RestartIO<ProgramState>::RestartIO(HDF5Grouplike &file, size_t vertexCount)
+RestartIO<ProgramState>::RestartIO(HDF5::Grouplike &file, size_t vertexCount)
     : group_(file, "restarts"),
       displacementWriter_(group_, "displacement", vertexCount,
                           Vector::block_type::dimension),
diff --git a/src/hdf5/restart-io.hh b/src/hdf5/restart-io.hh
index c42b102279a443aefe4ad1dfc700385c2b82e29b..94b60d67f72e858cfdda918a8a452186fcbd4394 100644
--- a/src/hdf5/restart-io.hh
+++ b/src/hdf5/restart-io.hh
@@ -1,29 +1,29 @@
 #ifndef SRC_HDF_RESTART_HDF_HH
 #define SRC_HDF_RESTART_HDF_HH
 
-#include <dune/fufem/hdf5/hdf5file.hh>
-#include <dune/fufem/hdf5/hdf5-sequence-io.hh>
+#include <dune/fufem/hdf5/file.hh>
+#include <dune/fufem/hdf5/sequenceio.hh>
 
 template <class ProgramState> class RestartIO {
   using ScalarVector = typename ProgramState::ScalarVector;
   using Vector = typename ProgramState::Vector;
 
 public:
-  RestartIO(HDF5Grouplike &file, size_t vertexCount);
+  RestartIO(HDF5::Grouplike &file, size_t vertexCount);
 
   void write(ProgramState const &programState);
 
   void read(size_t timeStep, ProgramState &programState);
 
 private:
-  HDF5Group group_;
+  HDF5::Group group_;
 
-  HDF5SequenceIO<2> displacementWriter_;
-  HDF5SequenceIO<2> velocityWriter_;
-  HDF5SequenceIO<2> accelerationWriter_;
-  HDF5SequenceIO<1> stateWriter_;
-  HDF5SequenceIO<1> weightedNormalStressWriter_;
-  HDF5SequenceIO<0> relativeTimeWriter_;
-  HDF5SequenceIO<0> relativeTimeIncrementWriter_;
+  HDF5::SequenceIO<2> displacementWriter_;
+  HDF5::SequenceIO<2> velocityWriter_;
+  HDF5::SequenceIO<2> accelerationWriter_;
+  HDF5::SequenceIO<1> stateWriter_;
+  HDF5::SequenceIO<1> weightedNormalStressWriter_;
+  HDF5::SequenceIO<0> relativeTimeWriter_;
+  HDF5::SequenceIO<0> relativeTimeIncrementWriter_;
 };
 #endif
diff --git a/src/hdf5/surface-writer.cc b/src/hdf5/surface-writer.cc
index 51b9508a98970715173b3941aa87f7630d494d19..bdab1213b181fbe18a70657b0f8cc6eb28c4a949 100644
--- a/src/hdf5/surface-writer.cc
+++ b/src/hdf5/surface-writer.cc
@@ -7,7 +7,7 @@
 
 template <class ProgramState, class GridView>
 SurfaceWriter<ProgramState, GridView>::SurfaceWriter(
-    HDF5Grouplike &file, Vector const &vertexCoordinates, Patch const &surface)
+    HDF5::Grouplike &file, Vector const &vertexCoordinates, Patch const &surface)
     : group_(file, "surface"),
       surface_(surface),
       surfaceDisplacementWriter_(group_, "displacement", surface.numVertices(),
@@ -15,7 +15,7 @@ SurfaceWriter<ProgramState, GridView>::SurfaceWriter(
       surfaceVelocityWriter_(group_, "velocity", surface.numVertices(),
                              Vector::block_type::dimension) {
   auto const surfaceCoordinates = restrictToSurface(vertexCoordinates, surface);
-  HDF5SingletonWriter<2> surfaceCoordinateWriter(group_, "coordinates",
+  HDF5::SingletonWriter<2> surfaceCoordinateWriter(group_, "coordinates",
                                                  surfaceCoordinates.size(),
                                                  Vector::block_type::dimension);
   setEntry(surfaceCoordinateWriter, surfaceCoordinates);
diff --git a/src/hdf5/surface-writer.hh b/src/hdf5/surface-writer.hh
index 7ac92a4c96cee5c7ed194a9414660c812ea4be92..e0ed4263edb289b8d91ca81d228f428ec7402957 100644
--- a/src/hdf5/surface-writer.hh
+++ b/src/hdf5/surface-writer.hh
@@ -3,25 +3,25 @@
 
 #include <dune/fufem/boundarypatch.hh>
 
-#include <dune/fufem/hdf5/hdf5-sequence-io.hh>
-#include <dune/fufem/hdf5/hdf5-singleton-writer.hh>
+#include <dune/fufem/hdf5/sequenceio.hh>
+#include <dune/fufem/hdf5/singletonwriter.hh>
 
 template <class ProgramState, class GridView> class SurfaceWriter {
   using Vector = typename ProgramState::Vector;
   using Patch = BoundaryPatch<GridView>;
 
 public:
-  SurfaceWriter(HDF5Grouplike &file, Vector const &vertexCoordinates,
+  SurfaceWriter(HDF5::Grouplike &file, Vector const &vertexCoordinates,
                 Patch const &surface);
 
   void write(ProgramState const &programState);
 
 private:
-  HDF5Group group_;
+  HDF5::Group group_;
 
   Patch const &surface_;
 
-  HDF5SequenceIO<2> surfaceDisplacementWriter_;
-  HDF5SequenceIO<2> surfaceVelocityWriter_;
+  HDF5::SequenceIO<2> surfaceDisplacementWriter_;
+  HDF5::SequenceIO<2> surfaceVelocityWriter_;
 };
 #endif
diff --git a/src/hdf5/time-writer.cc b/src/hdf5/time-writer.cc
index 1c1419461347592b48dcbdf57848abf4afcf5bcf..56e2c9325e89896454b6a60034ffddf11d449faa 100644
--- a/src/hdf5/time-writer.cc
+++ b/src/hdf5/time-writer.cc
@@ -5,7 +5,7 @@
 #include "time-writer.hh"
 
 template <class ProgramState>
-TimeWriter<ProgramState>::TimeWriter(HDF5Grouplike &file)
+TimeWriter<ProgramState>::TimeWriter(HDF5::Grouplike &file)
     : file_(file),
       relativeTimeWriter_(file_, "relativeTime"),
       relativeTimeIncrementWriter_(file_, "relativeTimeIncrement") {}
diff --git a/src/hdf5/time-writer.hh b/src/hdf5/time-writer.hh
index e8f7241790f0466487630cac1e209e2950d70de1..02c2c73bcd530bb2087bdd86d6756a3bee237cb9 100644
--- a/src/hdf5/time-writer.hh
+++ b/src/hdf5/time-writer.hh
@@ -1,17 +1,17 @@
 #ifndef SRC_HDF_TIME_WRITER_HH
 #define SRC_HDF_TIME_WRITER_HH
 
-#include <dune/fufem/hdf5/hdf5file.hh>
-#include <dune/fufem/hdf5/hdf5-sequence-io.hh>
+#include <dune/fufem/hdf5/file.hh>
+#include <dune/fufem/hdf5/sequenceio.hh>
 
 template <class ProgramState> class TimeWriter {
 public:
-  TimeWriter(HDF5Grouplike &file);
+  TimeWriter(HDF5::Grouplike &file);
   void write(ProgramState const &programState);
 
 private:
-  HDF5Grouplike &file_;
-  HDF5SequenceIO<0> relativeTimeWriter_;
-  HDF5SequenceIO<0> relativeTimeIncrementWriter_;
+  HDF5::Grouplike &file_;
+  HDF5::SequenceIO<0> relativeTimeWriter_;
+  HDF5::SequenceIO<0> relativeTimeIncrementWriter_;
 };
 #endif
diff --git a/src/one-body-problem.cc b/src/one-body-problem.cc
index e5da5529e02333b9c36d7f4d4b4e4320124ce473..2b7db539003313269c9e1b39dab5848e6349ba73 100644
--- a/src/one-body-problem.cc
+++ b/src/one-body-problem.cc
@@ -35,7 +35,7 @@
 #include <dune/tectonic/geocoordinate.hh>
 #include <dune/tectonic/myblockproblem.hh>
 #include <dune/tectonic/globalfriction.hh>
-#include <dune/fufem/hdf5/hdf5file.hh>
+#include <dune/fufem/hdf5/file.hh>
 
 #include "assemblers.hh"
 #include "diameter.hh"
@@ -174,7 +174,7 @@ int main(int argc, char *argv[]) {
     auto const restartSpacing = parset.get<size_t>("restarts.spacing");
     auto const restartTemplate = parset.get<std::string>("restarts.template");
 
-    HDF5File ioFile("output.h5");
+    HDF5::File ioFile("output.h5");
     if (firstRestart != 0)
       RestartIO<ProgramState<Vector, ScalarVector>>(ioFile, leafVertexCount)
           .read(firstRestart, programState);