diff --git a/AMDiS/src/parallel/PetscSolver.cc b/AMDiS/src/parallel/PetscSolver.cc
index 2847cfd84b26f8ce82714a6fa34957d073c5bdde..c6ccd17a8b9c754e505aa6e7113af98eedfae6c3 100644
--- a/AMDiS/src/parallel/PetscSolver.cc
+++ b/AMDiS/src/parallel/PetscSolver.cc
@@ -26,6 +26,7 @@
 #include "parallel/MeshDistributor.h"
 #include "parallel/MpiHelper.h"
 #include "parallel/ParallelDofMapping.h"
+#include "parallel/PetscHelper.h"
 #include "parallel/PetscSolver.h"
 #include "parallel/StdMpi.h"
 
diff --git a/AMDiS/src/parallel/PetscSolverGlobalBlockMatrix.cc b/AMDiS/src/parallel/PetscSolverGlobalBlockMatrix.cc
index dc22b136da8d0a6c14b2edaf2e244683f9cfe8dd..46c6ae869b4e03e840d3b633a22f1807421124d9 100644
--- a/AMDiS/src/parallel/PetscSolverGlobalBlockMatrix.cc
+++ b/AMDiS/src/parallel/PetscSolverGlobalBlockMatrix.cc
@@ -20,6 +20,7 @@
 
 
 #include "parallel/PetscSolverGlobalBlockMatrix.h"
+#include "parallel/PetscHelper.h"
 #include "parallel/StdMpi.h"
 #include "parallel/MpiHelper.h"
 
diff --git a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
index b62449eb47391e96d00642cbdcbc139eed65e48b..d58d07a101d6ebebe1074876b06050e31038e357 100644
--- a/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
+++ b/AMDiS/src/parallel/PetscSolverGlobalMatrix.cc
@@ -22,6 +22,7 @@
 // #include "DirichletBC.h"
 #include "DOFVector.h"
 #include "parallel/PetscSolverGlobalMatrix.h"
+#include "parallel/PetscHelper.h"
 #include "parallel/StdMpi.h"
 #include "parallel/MpiHelper.h"
 #include "solver/PetscTypes.h"
diff --git a/AMDiS/src/parallel/PetscSolverSchur.cc b/AMDiS/src/parallel/PetscSolverSchur.cc
index 94b64766bc7630444c027ffdabef958ce9e05578..9e8226089385035c9f375602270e5e7f02fb1bea 100644
--- a/AMDiS/src/parallel/PetscSolverSchur.cc
+++ b/AMDiS/src/parallel/PetscSolverSchur.cc
@@ -20,6 +20,7 @@
 
 
 #include "parallel/PetscSolverSchur.h"
+#include "parallel/PetscHelper.h"
 #include "parallel/StdMpi.h"
 #include "parallel/MpiHelper.h"
 
diff --git a/extensions/demo/cahn_hilliard/src/PetscSolverCahnHilliard_DD.cc b/extensions/demo/cahn_hilliard/src/PetscSolverCahnHilliard_DD.cc
index d2b7fc69f2c1840a62aea10c1268166851ae323d..ab4e556e20b2a4a677d724566fef5d0307f43517 100644
--- a/extensions/demo/cahn_hilliard/src/PetscSolverCahnHilliard_DD.cc
+++ b/extensions/demo/cahn_hilliard/src/PetscSolverCahnHilliard_DD.cc
@@ -68,11 +68,7 @@ namespace AMDiS { namespace Parallel {
     /// create new solver for S
     KSP kspS;
     KSPCreate(*data->mpiCommGlobal, &kspS);
-#if (PETSC_VERSION_MINOR >= 5)
-    KSPSetOperators(kspS, S, S);
-#else
-    KSPSetOperators(kspS, S, S, SAME_NONZERO_PATTERN);
-#endif
+    petsc::ksp_set_operators(kspS, S, S);
     petsc_helper::setSolver(kspS, "S_", KSPFGMRES, PCSHELL, 1e-6, 1e-8, 5);
     {
       PC pc;
@@ -118,15 +114,11 @@ namespace AMDiS { namespace Parallel {
 
     MSG("CREATE POS 1: %p\n", &ksp);
     KSPCreate(domainComm, &ksp);
-#if (PETSC_VERSION_MINOR >= 5)
-    KSPSetOperators(ksp, getMatInterior(), getMatInterior());
-#else
-    KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN);
-#endif
+    petsc::ksp_set_operators(ksp, getMatInterior(), getMatInterior());
     if (getInfo() >= 10)
-      KSPMonitorSet(ksp, KSPMonitorDefault, PETSC_NULL, PETSC_NULL);
+      petsc::ksp_monitor_set(ksp, KSPMonitorDefault);
     else if (getInfo() >= 20)
-      KSPMonitorSet(ksp, KSPMonitorTrueResidualNorm, PETSC_NULL, PETSC_NULL);
+      petsc::ksp_monitor_set(ksp, KSPMonitorTrueResidualNorm);
     petsc_helper::setSolver(ksp, "ch_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations());
 
     if (useOldInitialGuess)
diff --git a/extensions/preconditioner/PetscSolverNavierStokes2.cc b/extensions/preconditioner/PetscSolverNavierStokes2.cc
index 44ab7b20847f7f92a7ae2bc2eb1c558cb7d31f5b..5d8142f3ee8cf352a4213b3441005c38a4a9440c 100644
--- a/extensions/preconditioner/PetscSolverNavierStokes2.cc
+++ b/extensions/preconditioner/PetscSolverNavierStokes2.cc
@@ -133,15 +133,11 @@ namespace AMDiS { namespace Parallel {
   {
     // Create FGMRES based outer solver
     KSPCreate(domainComm, &ksp);
-#if (PETSC_VERSION_MINOR >= 5)
-    KSPSetOperators(ksp, getMatInterior(), getMatInterior());
-#else
-    KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN);
-#endif
+    petsc::ksp_set_operators(ksp, getMatInterior(), getMatInterior());
     if (getInfo() >= 10)
-      KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL);
+      petsc::ksp_monitor_set(ksp, KSPMonitorDefault);
     else if (getInfo() >= 20)
-      KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL);
+      petsc::ksp_monitor_set(ksp, KSPMonitorTrueResidualNorm);
     petsc_helper::setSolver(ksp, "ns_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations());
 
     // Create null space information.
diff --git a/extensions/preconditioner/PetscSolverPfc.cc b/extensions/preconditioner/PetscSolverPfc.cc
index ac7e38480dc4162a504e1988344a1ae381f93365..cd140e9fab42d97cd1dd2669570fcd6c28d63a16 100644
--- a/extensions/preconditioner/PetscSolverPfc.cc
+++ b/extensions/preconditioner/PetscSolverPfc.cc
@@ -78,15 +78,11 @@ namespace AMDiS { namespace Parallel {
   {
     // Create FGMRES based outer solver
     KSPCreate(meshDistributor->getMpiComm(0), &ksp);
-#if (PETSC_VERSION_MINOR >= 5)
-    KSPSetOperators(ksp, getMatInterior(), getMatInterior());
-#else
-    KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN);
-#endif
+    petsc::ksp_set_operators(ksp, getMatInterior(), getMatInterior());
     if (getInfo() >= 10)
-      KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL);
+      petsc::ksp_monitor_set(ksp, KSPMonitorDefault);
     else if (getInfo() >= 20)
-      KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL);
+      petsc::ksp_monitor_set(ksp, KSPMonitorTrueResidualNorm);
     petsc_helper::setSolver(ksp, "pfc_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations());
     KSPSetFromOptions(ksp);
 
diff --git a/extensions/preconditioner/PetscSolverPfc_diag.cc b/extensions/preconditioner/PetscSolverPfc_diag.cc
index 68fa80c9a7050ae0ad417df2f12eb42c763a081a..6a040a4f3de041eefbca10b3bca872df3efa1423 100644
--- a/extensions/preconditioner/PetscSolverPfc_diag.cc
+++ b/extensions/preconditioner/PetscSolverPfc_diag.cc
@@ -76,15 +76,11 @@ namespace AMDiS { namespace Parallel {
   {
     // Create FGMRES based outer solver
     KSPCreate(meshDistributor->getMpiComm(0), &ksp);
-#if (PETSC_VERSION_MINOR >= 5)
-    KSPSetOperators(ksp, getMatInterior(), getMatInterior());
-#else
-    KSPSetOperators(ksp, getMatInterior(), getMatInterior(), SAME_NONZERO_PATTERN);
-#endif
+    petsc::ksp_set_operators(ksp, getMatInterior(), getMatInterior());
     if (getInfo() >= 10)
-      KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorDefault), PETSC_NULL, PETSC_NULL);
+      petsc::ksp_monitor_set(ksp, KSPMonitorDefault);
     else if (getInfo() >= 20)
-      KSPMonitorSet(ksp, PETSC_MONITOR_CAST(KSPMonitorTrueResidualNorm), PETSC_NULL, PETSC_NULL);
+      petsc::ksp_monitor_set(ksp, KSPMonitorTrueResidualNorm);
     petsc_helper::setSolver(ksp, "pfc_", KSPFGMRES, PCNONE, getRelative(), getTolerance(), getMaxIterations());
     KSPSetFromOptions(ksp);
 
@@ -167,11 +163,7 @@ namespace AMDiS { namespace Parallel {
     VecDestroy(&x);
     MatDestroy(&DK);
 
-#if (PETSC_VERSION_MINOR >= 5)
-    KSPSetOperators(data.kspS, matS, matS);
-#else
-    KSPSetOperators(data.kspS, matS, matS, SAME_NONZERO_PATTERN);
-#endif
+    petsc::ksp_set_operators(data.kspS, matS, matS);
 
     // === Setup preconditioner data ===
     data.delta = delta;