diff --git a/python/dune/perftool/generation/cache.py b/python/dune/perftool/generation/cache.py
index c4255edf0873c67956be787c2219446c987deb94..e60324497d337e286da8e0cfbc4e15d4889ebefc 100644
--- a/python/dune/perftool/generation/cache.py
+++ b/python/dune/perftool/generation/cache.py
@@ -196,19 +196,14 @@ class _ConditionDict(dict):
             self.tags = tags
 
         def __getitem__(self, i):
-            # If we do not add these special cases the dictionary will return False
-            # when we execute the following code:
-            #
-            # eval ("True", _ConditionDict(v.tags)
-            #
-            # But in this case we want to return True! A normal dictionary would not attempt
-            # to replace "True" if "True" is not a key. The _ConditionDict obviously has no
-            # such concerns ;).
-            if i == "True":
-                return True
-            if i == "False":
-                return False
-            return i in self.tags
+            # We first evaluate the given string with eval. This is necessary
+            # to ensure that 'True' and 'False' are correctly evaluated. Only
+            # if this failed with a NameError, we check for the existence of
+            # of the given string in the tag list.
+            try:
+                return eval(i)
+            except NameError:
+                return i in self.tags
 
 
 def _filter_cache_items(condition):