diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
index cf89fbe1617aa3835e859b8ea2470b632013f61e..6aa15b39cbae57baa31b92be98c550b4c946c16b 100644
--- a/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
+++ b/MathLib/LinAlg/Eigen/EigenLinearSolver.cpp
@@ -92,6 +92,7 @@ public:
              EigenOption::getPreconName(opt.precon_type));
         _solver.setTolerance(opt.error_tolerance);
         _solver.setMaxIterations(opt.max_iterations);
+        MathLib::details::EigenIterativeLinearSolver<T_SOLVER>::setRestart(opt.restart);
 
         if (!A.isCompressed())
         {
@@ -119,8 +120,31 @@ public:
 
 private:
     T_SOLVER _solver;
+    void setRestart(int const /*restart*/) {
+    }
 };
 
+template <> 
+void EigenIterativeLinearSolver<Eigen::GMRES<EigenMatrix::RawMatrixType, Eigen::IdentityPreconditioner>>::setRestart(int const restart)
+{
+    _solver.set_restart(restart);
+    INFO("-> set restart value: {:d}", _solver.get_restart());
+}
+
+template <> 
+void EigenIterativeLinearSolver<Eigen::GMRES<EigenMatrix::RawMatrixType, Eigen::DiagonalPreconditioner<double>>>::setRestart(int const restart)
+{   
+    _solver.set_restart(restart);
+    INFO("-> set restart value: {:d}", _solver.get_restart());
+}
+
+template <>
+void EigenIterativeLinearSolver<Eigen::GMRES<EigenMatrix::RawMatrixType, Eigen::IncompleteLUT<double>>>::setRestart(int const restart)
+{
+    _solver.set_restart(restart);
+    INFO("-> set restart value: {:d}", _solver.get_restart());
+}
+
 template <template <typename, typename> class Solver, typename Precon>
 std::unique_ptr<EigenLinearSolverBase> createIterativeSolver()
 {
@@ -265,6 +289,18 @@ void EigenLinearSolver::setOption(BaseLib::ConfigTree const& option)
             "scaling is not available.");
 #endif
     }
+    if (auto restart =
+            //! \ogs_file_param{prj__linear_solvers__linear_solver__eigen__restart}
+            ptSolver->getConfigParameterOptional<int>("restart")) {
+#ifdef USE_EIGEN_UNSUPPORTED
+        _option.restart = *restart;
+#else
+        OGS_FATAL(
+            "The code is not compiled with the Eigen unsupported modules. "
+            "GMRES option restart is not available.");
+#endif
+    }
+
 }
 
 bool EigenLinearSolver::solve(EigenMatrix &A, EigenVector& b, EigenVector &x)
diff --git a/MathLib/LinAlg/Eigen/EigenLinearSolver.h b/MathLib/LinAlg/Eigen/EigenLinearSolver.h
index 6aef020f5ecf22527cae4163ec6a9c2979dd6ce4..129e73112c2ac5a7d67f5cc8845cfd8c873d1c40 100644
--- a/MathLib/LinAlg/Eigen/EigenLinearSolver.h
+++ b/MathLib/LinAlg/Eigen/EigenLinearSolver.h
@@ -59,6 +59,7 @@ public:
 protected:
     EigenOption _option;
     std::unique_ptr<EigenLinearSolverBase> _solver;
+    void setRestart();
 };
 
 }  // namespace MathLib
diff --git a/MathLib/LinAlg/Eigen/EigenOption.cpp b/MathLib/LinAlg/Eigen/EigenOption.cpp
index 2139339792b39c07d83e75e4c430b838f06441fc..ca32fb24f239ba4894c5d80d9f38d6404c65e011 100644
--- a/MathLib/LinAlg/Eigen/EigenOption.cpp
+++ b/MathLib/LinAlg/Eigen/EigenOption.cpp
@@ -22,6 +22,7 @@ EigenOption::EigenOption()
     error_tolerance = 1.e-16;
 #ifdef USE_EIGEN_UNSUPPORTED
     scaling = false;
+    restart = 30;
 #endif
 }
 
diff --git a/MathLib/LinAlg/Eigen/EigenOption.h b/MathLib/LinAlg/Eigen/EigenOption.h
index da2f910c681daaff716bbcc0d59c4328bf85ff46..c40b6e89ed9ccc33c60c78227c26b8ccd12fb360 100644
--- a/MathLib/LinAlg/Eigen/EigenOption.h
+++ b/MathLib/LinAlg/Eigen/EigenOption.h
@@ -47,6 +47,7 @@ struct EigenOption final
 #ifdef USE_EIGEN_UNSUPPORTED
     /// Scaling the coefficient matrix and the RHS bector
     bool scaling;
+    int restart;
 #endif
 
     /// Constructor