diff --git a/python/dune/perftool/generation/cache.py b/python/dune/perftool/generation/cache.py
index 80849f8cf4e504851ffc142745a544ae36bd0efa..ba5e357d91f358cda2705527610013573174d1e3 100644
--- a/python/dune/perftool/generation/cache.py
+++ b/python/dune/perftool/generation/cache.py
@@ -46,16 +46,16 @@ def _freeze(data):
     raise TypeError('Cannot freeze non-hashable object {} of type {}'.format(data, type(data)))
 
 
-class _NoCachingCounter(object):
+class _GlobalCounter(object):
     counter = 0
 
     def get(self):
-        _NoCachingCounter.counter = _NoCachingCounter.counter + 1
-        return _NoCachingCounter.counter
+        _GlobalCounter.counter = _GlobalCounter.counter + 1
+        return _GlobalCounter.counter
 
 
 def no_caching(*a, **k):
-    return _NoCachingCounter().get()
+    return _GlobalCounter().get()
 
 
 class _CacheItemMeta(type):
@@ -66,14 +66,13 @@ class _CacheItemMeta(type):
         rettype = type(name, bases, d)
         if counted:
             original_on_store = on_store
-            setattr(rettype, '_count', 0)
 
             def add_count(x):
-                rettype._count = rettype._count + 1
+                count = _GlobalCounter().get()
                 if isinstance(x, tuple):
-                    return (rettype._count, original_on_store(*x))
+                    return (count, original_on_store(*x))
                 else:
-                    return (rettype._count, original_on_store(x))
+                    return (count, original_on_store(x))
             on_store = add_count
 
         def _init(s, x):