diff --git a/test/porousmediumflow/2pncmin/implicit/CMakeLists.txt b/test/porousmediumflow/2pncmin/implicit/CMakeLists.txt
index c2916b90c0efb9e4e3742cd2e2e7432fa99ec352..97acf87e36e2b0bb2fd322f7614103c65360870f 100644
--- a/test/porousmediumflow/2pncmin/implicit/CMakeLists.txt
+++ b/test/porousmediumflow/2pncmin/implicit/CMakeLists.txt
@@ -10,6 +10,18 @@ dune_add_test(NAME test_2pncmin_box
                                     ${CMAKE_CURRENT_BINARY_DIR}/saltflushbox-00044.vtu
                             --command "${CMAKE_CURRENT_BINARY_DIR}/test_2pncmin_box -ParameterFile test_2pncmin.input -Problem.Name saltflushbox")
 
+dune_add_test(NAME test_2pncmin_box_restart
+              SOURCES  test_2pncmin_fv.cc
+              COMPILE_DEFINITIONS TYPETAG=DissolutionBoxTypeTag
+              COMMAND ${CMAKE_SOURCE_DIR}/bin/testing/runtest.py
+              CMD_ARGS --script fuzzy
+                       --files ${CMAKE_SOURCE_DIR}/test/references/saltflushbox2pncmin-reference.vtu
+                               ${CMAKE_CURRENT_BINARY_DIR}/saltflushbox_restart-00005.vtu
+                       --command "${CMAKE_CURRENT_BINARY_DIR}/test_2pncmin_box test_2pncmin.input -Problem.Name saltflushbox_restart -TimeLoop.DtInitial 50000 -Restart.Time 756290 -Restart.File saltflushbox-00039.vtu")
+
+# the restart test has to run after the test that produces the corresponding vtu file
+set_tests_properties(test_2pncmin_box_restart PROPERTIES DEPENDS test_2pncmin_box)
+
 dune_add_test(NAME test_2pncmin_tpfa
               SOURCES test_2pncmin_fv.cc
               COMPILE_DEFINITIONS TYPETAG=DissolutionCCTpfaTypeTag
diff --git a/test/porousmediumflow/2pncmin/implicit/test_2pncmin.input b/test/porousmediumflow/2pncmin/implicit/test_2pncmin.input
index 0fd2372265fbdf8e1a9d062ca49c134a604bacd2..4c2792f064a50eaa4cbaea59fa44052c53467e3a 100644
--- a/test/porousmediumflow/2pncmin/implicit/test_2pncmin.input
+++ b/test/porousmediumflow/2pncmin/implicit/test_2pncmin.input
@@ -4,7 +4,7 @@
 
 [TimeLoop]
 TEnd = 1e6                         # duration of the simulation [s]
-DtInitial = 10                     # initial time step size [s]
+DtInitial = 10                   # initial time step size [s]
 MaxTimeStepSize = 50000            # maximum time step size
 
 [Grid]
diff --git a/test/porousmediumflow/2pncmin/implicit/test_2pncmin_fv.cc b/test/porousmediumflow/2pncmin/implicit/test_2pncmin_fv.cc
index 3fec54e9c6e40039975c9a36f4ceea6e6de58afc..494f6854ad060e7854b495aa80f334f6e3e0dfe4 100644
--- a/test/porousmediumflow/2pncmin/implicit/test_2pncmin_fv.cc
+++ b/test/porousmediumflow/2pncmin/implicit/test_2pncmin_fv.cc
@@ -50,6 +50,7 @@
 
 #include <dumux/io/vtkoutputmodule.hh>
 #include <dumux/io/grid/gridmanager.hh>
+#include <dumux/io/loadsolution.hh>
 
 /*!
  * \brief Provides an interface for customizing error messages associated with
@@ -111,10 +112,29 @@ int main(int argc, char** argv) try
     using Problem = typename GET_PROP_TYPE(TypeTag, Problem);
     auto problem = std::make_shared<Problem>(fvGridGeometry);
 
+    // get some time loop parameters
+    using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar);
+    const auto tEnd = getParam<Scalar>("TimeLoop.TEnd");
+    const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize");
+    auto dt = getParam<Scalar>("TimeLoop.DtInitial");
+
+    // check if we are about to restart a previously interrupted simulation
+    Scalar restartTime = getParam<Scalar>("Restart.Time", 0);
+
     // the solution vector
     using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector);
     SolutionVector x(fvGridGeometry->numDofs());
-    problem->applyInitialSolution(x);
+     if (restartTime > 0)
+    {
+        using ModelTraits = typename GET_PROP_TYPE(TypeTag, ModelTraits);
+        using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
+        using SolidSystem = typename GET_PROP_TYPE(TypeTag, SolidSystem);
+        const auto fileName = getParam<std::string>("Restart.File");
+        const auto pvName = createPVNameFunctionWithState<ModelTraits, FluidSystem, SolidSystem>();
+        loadSolution(x, fileName, pvName, *fvGridGeometry);
+    }
+    else
+        problem->applyInitialSolution(x);
     auto xOld = x;
 
     // the grid variables
@@ -122,12 +142,6 @@ int main(int argc, char** argv) try
     auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry);
     gridVariables->init(x, xOld);
 
-    // get some time loop parameters
-    using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar);
-    const auto tEnd = getParam<Scalar>("TimeLoop.TEnd");
-    const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize");
-    auto dt = getParam<Scalar>("TimeLoop.DtInitial");
-
     // initialize the vtk output module
     using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields);
     VtkOutputModule<GridVariables, SolutionVector> vtkWriter(*gridVariables, x, problem->name());
@@ -138,10 +152,10 @@ int main(int argc, char** argv) try
     vtkWriter.addField(problem->getPermeability(), "Permeability");
     // update the output fields before write
     problem->updateVtkOutput(x);
-    vtkWriter.write(0.0);
+    vtkWriter.write(restartTime);
 
     // instantiate time loop
-    auto timeLoop = std::make_shared<TimeLoop<Scalar>>(0, dt, tEnd);
+    auto timeLoop = std::make_shared<TimeLoop<Scalar>>(restartTime, dt, tEnd);
     timeLoop->setMaxTimeStepSize(maxDt);
 
     // the assembler with time loop for instationary problem