diff --git a/python/dune/perftool/generation/__init__.py b/python/dune/perftool/generation/__init__.py
index 906183acd8de80ea5e48d78b3bd4631825b17c72..79480b150702849727ffe974ff0e78e49ee756aa 100644
--- a/python/dune/perftool/generation/__init__.py
+++ b/python/dune/perftool/generation/__init__.py
@@ -25,4 +25,6 @@ from dune.perftool.generation.loopy import (domain,
                                             )
 
 from dune.perftool.generation.context import (cache_context,
-                                              )
\ No newline at end of file
+                                              generic_context,
+                                              get_generic_context_value,
+                                              )
diff --git a/python/dune/perftool/generation/context.py b/python/dune/perftool/generation/context.py
index 85ea60a9dbc8bde8751a8281ed2ab9718a099e81..13099e01966bce4ac5308c90c638b4f49c8c8366 100644
--- a/python/dune/perftool/generation/context.py
+++ b/python/dune/perftool/generation/context.py
@@ -29,3 +29,27 @@ def get_context_tags():
     for items in _cache_context_stack:
         result = result + items
     return result
+
+
+_generic_context_cache = {}
+
+
+class _GenericContext(object):
+    def __init__(self, key, value):
+        self.key = key
+        self.value = value
+        assert key not in _generic_context_cache
+
+    def __enter__(self):
+        _generic_context_cache[self.key] = self.value
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        del _generic_context_cache[self.key]
+
+
+def generic_context(key, value):
+    return _GenericContext(key, value)
+
+
+def get_generic_context_value(key):
+    return _generic_context_cache[key]