diff --git a/src/petsc4Foam/solvers/petscSolver.C b/src/petsc4Foam/solvers/petscSolver.C
index e0803841658d18a31975849073cd32e5ca1ec77e..624c4d830c91d3bdc3bf8935be40b92b611ad053 100644
--- a/src/petsc4Foam/solvers/petscSolver.C
+++ b/src/petsc4Foam/solvers/petscSolver.C
@@ -129,6 +129,7 @@ Foam::solverPerformance Foam::petscSolver::solve
         petscDict_.getOrDefault("verbose", false)
     );
 
+    // set all petsc flags in the prefix db
     dictionary petscDictOptions = petscDict_.subOrEmptyDict("options");
     PetscUtils::setFlags
     (
@@ -290,18 +291,6 @@ void Foam::petscSolver::buildKsp
         petscDict_.getOrDefault("verbose", false)
     );
 
-    // Solver name from petsc dictionary
-    word solverName;
-    petscDict_.readIfPresent("solver", solverName);
-
-    // Preconditioner name from petsc dictionary, or from parent
-    word precondName;
-    petscDict_.readIfPresent("preconditioner", precondName);
-
-    // Sub-preconditioner name from petsc dictionary
-    word subPrecondName;
-    petscDict_.readIfPresent("sub_preconditioner", subPrecondName);
-
     // Create parallel solver context
     KSPCreate(PETSC_COMM_WORLD, &ksp);
 
@@ -315,52 +304,6 @@ void Foam::petscSolver::buildKsp
     PC pc;
     KSPGetPC(ksp, &pc);
 
-    if (!precondName.empty())
-    {
-        PCSetType(pc, precondName.c_str());
-    }
-
-    if (!subPrecondName.empty())
-    {
-        PetscUtils::setFlag
-        (
-            prefix_ + "sub_pc_type_",
-            subPrecondName,
-            verbose
-        );
-        PetscUtils::setFlags
-        (
-            prefix_ + "sub_pc_" + subPrecondName + "_",
-            petscDict_.subOrEmptyDict(subPrecondName + "Coeffs"),
-            verbose
-        );
-        PetscUtils::setFlags
-        (
-            prefix_ + "sub_pc_factor_" ,
-            petscDict_.subOrEmptyDict("factorCoeffs"),
-            verbose
-        );
-    }
-
-    PetscUtils::setFlags
-    (
-        prefix_ + "pc_" + precondName + "_",
-        petscDict_.subOrEmptyDict(precondName + "Coeffs"),
-        verbose
-    );
-
-    // Set the linear solver
-    if (!solverName.empty())
-    {
-        KSPSetType(ksp, solverName.c_str());
-    }
-    PetscUtils::setFlags
-    (
-        prefix_ + "ksp_" + solverName + "_",
-        petscDict_.subOrEmptyDict(solverName + "Coeffs"),
-        verbose
-    );
-
     // OpenFOAM relative tolerance -> tolerance_
     KSPSetTolerances
     (
@@ -371,15 +314,19 @@ void Foam::petscSolver::buildKsp
         maxIter_
     );
 
+    // ksp set options from db
+    KSPSetFromOptions(ksp);
+
+    KSPType ksptype;
+    KSPGetType(ksp, &ksptype);
+    const word solverName(ksptype);
+
     // Use solution from the previous timestep if the solver is not 'preonly'
     if (solverName != "preonly")
     {
         KSPSetInitialGuessNonzero(ksp, PETSC_TRUE);
     }
 
-    // ksp set options from db
-    KSPSetFromOptions(ksp);
-
     KSPSetUp(ksp);
 }
 
@@ -410,8 +357,6 @@ void Foam::petscSolver::computeMatAllocation
 
     // Set the prefix for the options db (e.g. -eqn_p_)
     MatSetOptionsPrefix(Amat, prefix_.c_str());
-    dictionary matDict  = petscDict_.subOrEmptyDict("matCoeffs");
-    PetscUtils::setFlags(prefix_ + "mat_", matDict);
     MatSetFromOptions(Amat);
 
     // On-processor non-zero entries, per row.