diff --git a/src/algebra/EigenvalueSolver.cpp b/src/algebra/EigenvalueSolver.cpp
index 6125e67e6c5fad94a122028ce78bd78ef7b12e6c..c71be58ddcb1c37498a172f30a1eb39b89f43aab 100644
--- a/src/algebra/EigenvalueSolver.cpp
+++ b/src/algebra/EigenvalueSolver.cpp
@@ -32,6 +32,7 @@ struct EigenvalueSolver::Internals
   computeAllEigenvaluesOfSymmetricMatrixInInterval(EPS& eps, const PetscReal left_bound, const PetscReal right_bound)
   {
     Assert(left_bound < right_bound);
+    EPSSetType(eps, EPSKRYLOVSCHUR);
     EPSSetWhichEigenpairs(eps, EPS_ALL);
     EPSSetInterval(eps, left_bound - 0.01 * std::abs(left_bound), right_bound + 0.01 * std::abs(right_bound));
 
@@ -40,7 +41,11 @@ struct EigenvalueSolver::Internals
     STSetType(st, STSINVERT);
 
     KSP ksp;
+#if (SLEPC_VERSION_MAJOR >= 3) && (SLEPC_VERSION_MINOR >= 15)
+    EPSKrylovSchurGetKSP(eps, &ksp);
+#else
     STGetKSP(st, &ksp);
+#endif
     KSPSetType(ksp, KSPPREONLY);
 
     PC pc;