diff --git a/dune/tectonic/spatial-solving/solverfactory.cc b/dune/tectonic/spatial-solving/solverfactory.cc
index 004253dbdeb7df55991ccee628df684a924e17cb..4d759edc176695be13a8b19c1b5f84eddbb4296c 100644
--- a/dune/tectonic/spatial-solving/solverfactory.cc
+++ b/dune/tectonic/spatial-solving/solverfactory.cc
@@ -20,6 +20,16 @@ SolverFactory<Functional, BitVector>::SolverFactory(
         ignoreNodes_(ignoreNodes)
 {}
 
+template <class Functional, class BitVector>
+SolverFactory<Functional, BitVector>::SolverFactory(
+    const Dune::ParameterTree& parset,
+    std::shared_ptr<Functional> J,
+    const BitVector& ignoreNodes) :
+        parset_(parset),
+        J_(Dune::Solvers::wrap_own_share<const Functional>(J)),
+        ignoreNodes_(ignoreNodes)
+{}
+
 template <class Functional, class BitVector>
 template <class LinearSolver>
 void SolverFactory<Functional, BitVector>::build(std::shared_ptr<LinearSolver>& linearSolver) {
diff --git a/dune/tectonic/spatial-solving/solverfactory.hh b/dune/tectonic/spatial-solving/solverfactory.hh
index a93b65d882bba2949b1ec9e5304633e8b12a9d39..35ed6d279030975cff9017911223833b01e8234f 100644
--- a/dune/tectonic/spatial-solving/solverfactory.hh
+++ b/dune/tectonic/spatial-solving/solverfactory.hh
@@ -38,6 +38,10 @@ class SolverFactory {
                 Functional&,
                 const BitVector&);
 
+  SolverFactory(const Dune::ParameterTree&,
+                std::shared_ptr<Functional>,
+                const BitVector&);
+
   template <class LinearSolver>
   void build(std::shared_ptr<LinearSolver>& linearSolver);