diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py
index 3ef8b01efe7909d5cba09eeb495fee9c76dbecf9..1f8988ae4cb39ba0649c1d339e4eb3aba65b05ca 100644
--- a/python/dune/perftool/pdelab/driver.py
+++ b/python/dune/perftool/pdelab/driver.py
@@ -826,7 +826,8 @@ def interpolate_vector(name, formdata):
 
 @preamble
 def interpolate_solution_expression(name):
-    define_vector(name)
+    formdata = _driver_data['formdata']
+    define_vector(name, formdata)
     element = _driver_data['form'].coefficients()[0].ufl_element()
     sol = name_solution_function(element)
     gfs = name_gfs(element)
@@ -1109,8 +1110,9 @@ def dune_solve():
     matrix_free = get_option('matrix_free')
 
     if linear and matrix_free:
-        go = name_gridoperator(_driver_data['formdata'])
-        x = name_vector()
+        formdata = _driver_data['formdata']
+        go = name_gridoperator(formdata)
+        x = name_vector(formdata)
         include_file("dune/perftool/matrixfree.hh", filetag="driver")
         return "solveMatrixFree({},{});".format(go, x)
     elif linear and not matrix_free:
@@ -1119,7 +1121,9 @@ def dune_solve():
     elif not linear and matrix_free:
         raise NotImplementedError("Nonlinear and matrix free is not yet implemented")
     elif not linear and not matrix_free:
-        snp = name_stationarynonlinearproblemsolver()
+        go_type = type_gridoperator(_driver_data['formdata'])
+        go = name_gridoperator(_driver_data['formdata'])
+        snp = name_stationarynonlinearproblemsolver(go_type, go)
         return "{}.apply();".format(snp)
     else:
         assert False
@@ -1140,7 +1144,7 @@ def name_vtkfile():
 
 @preamble
 def compare_dofs():
-    v = name_vector()
+    v = name_vector(_driver_data['formdata'])
     solution = name_vector_from_solution_expression()
     return ["",
             "// Maximum norm of difference between dof vectors of the",
@@ -1171,7 +1175,8 @@ def name_discrete_grid_function(gfs, vector_name):
 @preamble
 def compare_L2_squared():
     element = _driver_data['form'].coefficients()[0].ufl_element()
-    v = name_vector()
+    formdata = _driver_data['formdata']
+    v = name_vector(formdata)
     gfs = name_gfs(element)
     vdgf = name_discrete_grid_function(gfs, v)
     solution_function = name_solution_function(element)
@@ -1287,7 +1292,6 @@ def vtkoutput():
             "{}.write({}, Dune::VTK::ascii);".format(vtkwriter, vtkfile)]
 
 
-
 @preamble
 def define_time(name):
     return "double {} = 0.0;".format(name)