diff --git a/noxfile.py b/noxfile.py
index 1b882478ac18bfc634e117926c8a0c6b9b94fbc8..11b3731ec8100cc4fb6c20d1e45ad6f115d35ffa 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -86,8 +86,8 @@ def typecheck(session: nox.Session):
     session.run("mypy", "src/pystencils")
 
 
+@nox.session(python=["3.10", "3.12", "3.13"], tags=["test"])
 @nox.parametrize("cupy_version", [None, "12", "13"], ids=["cpu", "cupy12", "cupy13"])
-@nox.session(python="3.10", tags=["test"])
 def testsuite(session: nox.Session, cupy_version: str | None):
     if cupy_version is not None:
         install_cupy(session, cupy_version, skip_if_no_cuda=True)
diff --git a/src/pystencils/codegen/config.py b/src/pystencils/codegen/config.py
index cbb3f4f32ef82662c51facb4c2ddae0d6dba349a..d56fe66424fedc9983b227450c985ea5d931646a 100644
--- a/src/pystencils/codegen/config.py
+++ b/src/pystencils/codegen/config.py
@@ -196,12 +196,16 @@ class Category(Generic[Category_T]):
 
     def __get__(self, obj: ConfigBase, objtype: type[ConfigBase] | None = None) -> Category_T:
         if obj is None:
-            return self._default
+            return None
 
-        return cast(Category_T, getattr(obj, self._lookup, None))
+        cat = getattr(obj, self._lookup, None)
+        if cat is None:
+            cat = self._default.copy()
+            setattr(obj, self._lookup, cat)
+        return cast(Category_T, cat)
 
-    def __set__(self, obj: ConfigBase, cat: Category_T):
-        setattr(obj, self._lookup, cat.copy())
+    def __set__(self, obj: ConfigBase, cat: Category_T | None):
+        setattr(obj, self._lookup, cat.copy() if cat is not None else None)
 
 
 class _AUTO_TYPE: ...  # noqa: E701