diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index 82c7c63413002341e161fcea0d3c2566d68e004c..a8b69b7326f76ab51fe26635cfd7d4557750bc19 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -251,7 +251,7 @@ def determine_accumulation_space(info, number):
                              )
 
 
-def boundary_predicates(expr, measure, subdomain_id, visitor):
+def boundary_predicates(expr, measure, subdomain_id):
     predicates = frozenset([])
 
     if subdomain_id not in ['everywhere', 'otherwise']:
@@ -279,6 +279,7 @@ def boundary_predicates(expr, measure, subdomain_id, visitor):
 
         from ufl.classes import Expr
         if isinstance(subdomain_data, Expr):
+            visitor = get_visitor(measure, subdomain_id)
             cond = visitor(subdomain_data, do_predicates=True)
         else:
             # Determine the name of the parameter function
@@ -384,7 +385,7 @@ def generate_accumulation_instruction(expr, visitor):
     from dune.perftool.pdelab.argument import name_accumulation_variable
     accumvar = name_accumulation_variable(test_lfs.get_restriction() + ansatz_lfs.get_restriction())
 
-    predicates = boundary_predicates(expr, visitor.measure, visitor.subdomain_id, visitor.copy())
+    predicates = boundary_predicates(expr, visitor.measure, visitor.subdomain_id)
 
     rank = 1 if ansatz_lfs.lfs is None else 2
 
@@ -409,12 +410,7 @@ def generate_accumulation_instruction(expr, visitor):
                 )
 
 
-def visit_integral(integral):
-    integrand = integral.integrand()
-    measure = integral.integral_type()
-    subdomain_id = integral.subdomain_id()
-    subdomain_data = integral.subdomain_data()
-
+def get_visitor(measure, subdomain_id):
     # Get a transformer instance for this kernel
     if get_option('sumfact'):
         from dune.perftool.sumfact import SumFactInterface
@@ -425,10 +421,18 @@ def visit_integral(integral):
     else:
         from dune.perftool.pdelab import PDELabInterface
         interface = PDELabInterface()
+
     from dune.perftool.ufl.visitor import UFL2LoopyVisitor
-    visitor = UFL2LoopyVisitor(interface, measure, subdomain_id)
+    return UFL2LoopyVisitor(interface, measure, subdomain_id)
+
+
+def visit_integral(integral):
+    integrand = integral.integrand()
+    measure = integral.integral_type()
+    subdomain_id = integral.subdomain_id()
 
     # Start the visiting process!
+    visitor = get_visitor(measure, subdomain_id)
     visitor.accumulate(integrand)
 
 
diff --git a/python/dune/perftool/sumfact/accumulation.py b/python/dune/perftool/sumfact/accumulation.py
index a3e14a3b57c025e0016536876cebaa0534829c88..53d949c975c22cd1497e3b58c694bf62f5f168ea 100644
--- a/python/dune/perftool/sumfact/accumulation.py
+++ b/python/dune/perftool/sumfact/accumulation.py
@@ -231,7 +231,7 @@ def generate_accumulation_instruction(expr, visitor):
     predicates = boundary_predicates(expr,
                                      visitor.measure,
                                      visitor.subdomain_id,
-                                     visitor)
+                                     )
 
     insn_dep = None
 
diff --git a/python/dune/perftool/ufl/visitor.py b/python/dune/perftool/ufl/visitor.py
index 57770051a597c2df8165a73b865c13c2a2990020..9128a295ec8c9d92a46167399029ef6dd713a37b 100644
--- a/python/dune/perftool/ufl/visitor.py
+++ b/python/dune/perftool/ufl/visitor.py
@@ -470,7 +470,3 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker):
 
     def __hash__(self):
         return 0
-
-    def copy(self):
-        """ Get a copy of this visitor """
-        return type(self)(self.interface, self.measure, self.subdomain_id)