diff --git a/dune/perftool/localbasiscache.hh b/dune/perftool/localbasiscache.hh
index 74896ec9dbbf17390ecb57200f8a73a1658c981d..f9370436eb2176a4a4750072216bf026a5873160 100644
--- a/dune/perftool/localbasiscache.hh
+++ b/dune/perftool/localbasiscache.hh
@@ -31,11 +31,10 @@ class CacheReturnProxy
   const std::vector<T>* v;
 };
 
-
-template<typename FS>
+//TODO FS hier entfernen und nur LocalBasisType benutzen
+template<typename LocalBasisType >
 class LocalBasisCacheWithoutReferences
 {
-  using LocalBasisType = typename FS::Traits::FiniteElementMap::Traits::FiniteElementType::Traits::LocalBasisType;
   using Cache = typename Dune::PDELab::LocalBasisCache<LocalBasisType>;
   using DomainFieldType = typename LocalBasisType::Traits::DomainFieldType;
   using DomainType = typename LocalBasisType::Traits::DomainType;
diff --git a/python/dune/perftool/pdelab/basis.py b/python/dune/perftool/pdelab/basis.py
index 92113832c66b0176188f99818050eee1c2a91446..2195e21f70338be438b71c5ff913e1760bfd388b 100644
--- a/python/dune/perftool/pdelab/basis.py
+++ b/python/dune/perftool/pdelab/basis.py
@@ -23,13 +23,31 @@ from dune.perftool.tools import (get_pymbolic_basename,
                                  )
 from dune.perftool.pdelab.driver import FEM_name_mangling
 from dune.perftool.pdelab.restriction import restricted_name
+from dune.perftool.pdelab.driver import (type_domainfield,
+                                         basetype_range,
+                                         isPk,
+                                         isQk,)
 from pymbolic.primitives import Product, Subscript, Variable
 import pymbolic.primitives as prim
 from loopy import Reduction
 
 
+def type_localbasis(element):
+    df = "typename {}::Traits::GridView::ctype".format(type_gfs(element))
+    r = basetype_range()
+    dim = world_dimension()
+    # if isPk(element):
+    #     include_file("dune/localfunctions/lagrange/pk/pklocalbasis.hh", filetag="operatorfile")
+    #     return "Dune::PkLocalBasis<{}, {}, {}, {}>".format(df, r, dim, element._degree)
+    if isQk(element):
+        include_file("dune/localfunctions/lagrange/qk/qklocalbasis.hh", filetag="operatorfile")
+        return "Dune::QkLocalBasis<{}, {}, {}, {}>".format(df, r, dim, element._degree)
+    #TODO add dg support
+    raise NotImplementedError("Element type not known in code generation")
+
+
 def type_localbasis_cache(element):
-    return "LocalBasisCacheWithoutReferences<{}>".format(type_gfs(element))
+    return "LocalBasisCacheWithoutReferences<{}>".format(type_localbasis(element))
 
 
 @class_member(classtag="operator")
diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py
index ecc6d013ec74ddbbca6ed0fc832db31f07cae5a7..5c8ceed0f2b35a81176c511ffa721056d9a1718a 100644
--- a/python/dune/perftool/pdelab/driver.py
+++ b/python/dune/perftool/pdelab/driver.py
@@ -285,13 +285,17 @@ def type_domainfield():
     return "DF"
 
 
-@preamble
-def typedef_range(name):
+def basetype_range():
     if get_option('opcounter'):
         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():