diff --git a/python/dune/perftool/pdelab/driver/__init__.py b/python/dune/perftool/pdelab/driver/__init__.py
index e246e55e5658db25d017d6c306d3cf4c8d11c6c5..8021fa41e3b0954d17721c0a17581d01f88e2f26 100644
--- a/python/dune/perftool/pdelab/driver/__init__.py
+++ b/python/dune/perftool/pdelab/driver/__init__.py
@@ -243,6 +243,10 @@ def generate_driver(formdatas, data):
         from dune.perftool.pdelab.driver.instationary import solve_instationary
         solve_instationary()
 
+    from dune.perftool.pdelab.driver.error import compare_L2_squared
+    if get_option("compare_l2errorsquared"):
+        compare_L2_squared()
+
     # Make sure that timestream is declared before retrieving chache items
     if get_option("instrumentation_level") >= 1:
         from dune.perftool.pdelab.driver.timings import setup_timer, name_timing_stream
diff --git a/python/dune/perftool/pdelab/driver/gridfunctionspace.py b/python/dune/perftool/pdelab/driver/gridfunctionspace.py
index affa56e39b2de93e51f6e9b7affa9ddab95e3e9f..f20312744da75b37cfbed0cb40d7c84f29793af9 100644
--- a/python/dune/perftool/pdelab/driver/gridfunctionspace.py
+++ b/python/dune/perftool/pdelab/driver/gridfunctionspace.py
@@ -29,15 +29,18 @@ def type_domainfield():
     typedef_domainfield("DF")
     return "DF"
 
-
-@preamble
-def typedef_range(name):
+def basetype_range():
     if get_option('opcounter'):
         from dune.perftool.pdelab.driver.timings import setup_timer
         setup_timer()
-        return "using {} = oc::OpCounter<double>;".format(name)
+        return "oc::OpCounter<double>"
     else:
-        return "using {} = double;".format(name)
+        return "double"
+
+
+@preamble
+def typedef_range(name):
+    return "using {} = {};".format(name, basetype_range())
 
 
 def type_range():
diff --git a/python/dune/perftool/pdelab/driver/solve.py b/python/dune/perftool/pdelab/driver/solve.py
index 5e6028271a292bb7c7726f595b859ee05c03a748..0179fe68905f6c1890a517657d345c35b235a845 100644
--- a/python/dune/perftool/pdelab/driver/solve.py
+++ b/python/dune/perftool/pdelab/driver/solve.py
@@ -48,13 +48,6 @@ def dune_solve():
     print_residual()
     print_matrix()
 
-    from dune.perftool.pdelab.driver.error import compare_dofs, compare_L2_squared
-    if get_option("exact_solution_expression"):
-        if get_option("compare_dofs"):
-            compare_dofs()
-        if get_option("compare_l2errorsquared"):
-            compare_L2_squared()
-
     if get_option('instrumentation_level') >= 2:
         from dune.perftool.pdelab.driver.timings import setup_timer, name_timing_stream
         setup_timer()
diff --git a/python/dune/perftool/ufl/visitor.py b/python/dune/perftool/ufl/visitor.py
index 2027c303bf7af76cf2a94a97b7bea738ece6b80a..e7d32af11f8271d78b5cce100397bb7b6602c3f0 100644
--- a/python/dune/perftool/ufl/visitor.py
+++ b/python/dune/perftool/ufl/visitor.py
@@ -31,6 +31,7 @@ from ufl.classes import (FixedIndex,
                          )
 
 import pymbolic.primitives as prim
+import numpy as np
 
 
 class UFL2LoopyVisitor(ModifiedTerminalTracker):
@@ -289,7 +290,7 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker):
             return self._evaluate_function(abs, "abs", self.call(o.ufl_operands[0]))
 
     def exp(self, o):
-        return self._evaluate_function(exp, "exp", self.call(o.ufl_operands[0]))
+        return self._evaluate_function(np.exp, "exp", self.call(o.ufl_operands[0]))
 
     def sqrt(self, o):
         return self._evaluate_function(sqrt, "sqrt", self.call(o.ufl_operands[0]))