diff --git a/python/dune/perftool/generation/backend.py b/python/dune/perftool/generation/backend.py
index 5446fabd91eef32dda25957cfd2a7d9a93e3cb02..27356c937f1c8617297736a34e74d540dd0996d2 100644
--- a/python/dune/perftool/generation/backend.py
+++ b/python/dune/perftool/generation/backend.py
@@ -12,11 +12,12 @@ class FuncProxy(Record):
 
 def register_backend(interface, name, func):
     _backend_mapping.setdefault(interface, {})
+    assert name not in _backend_mapping[interface]
     _backend_mapping[interface][name] = func
 
 
-def backend(interface=None, name=None):
-    assert interface and name
+def backend(interface=None, name='default'):
+    assert interface
 
     def _dec(func):
         if not isinstance(func, _RegisteredFunction):
diff --git a/python/test/dune/perftool/generation/test_backend.py b/python/test/dune/perftool/generation/test_backend.py
new file mode 100644
index 0000000000000000000000000000000000000000..2a1e001cd9da6dad0d0d18c46d2da47d9506da7c
--- /dev/null
+++ b/python/test/dune/perftool/generation/test_backend.py
@@ -0,0 +1,35 @@
+from dune.perftool.generation import (backend,
+                                      get_backend,
+                                      generator_factory,
+                                      )
+
+
+@backend(interface="foo", name="f1")
+@generator_factory()
+def f1():
+    return 1
+
+
+@generator_factory()
+@backend(interface="foo", name="f2")
+def f2():
+    return 2
+
+
+@backend(interface="bar", name="f3")
+@generator_factory()
+def f3():
+    return 3
+
+
+@generator_factory()
+@backend(interface="bar", name="f4")
+def f4():
+    return 4
+
+
+def test_backend():
+    assert get_backend(interface="foo", selector=lambda: "f1")() == 1
+    assert get_backend(interface="foo", selector=lambda: "f2")() == 2
+    assert get_backend(interface="bar", selector=lambda: "f3")() == 3
+    assert get_backend(interface="bar", selector=lambda: "f4")() == 4