Index: flexoentity/composite_backend.py
===================================================================
--- flexoentity/composite_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ flexoentity/composite_backend.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
@@ -11,27 +11,33 @@
     """
 
-    def __init__(self, entity_class, *backends):
-        if not issubclass(entity_class, FlexoEntity):
+    def __init__(self, authoritative_backend, sync_backends):
+        if not issubclass(authoritative_backend.entity_class, FlexoEntity):
             raise TypeError("entity_class must be a subclass of FlexOEntity")
 
-        self.entity_class = entity_class
+        self._primary = authoritative_backend
 
+        self.read_backend = InMemoryBackend(self.primary.entity_class)
         # Default: create an in-memory backend as the primary backend
-        if not backends:
-            backends = (InMemoryBackend(entity_class),)
+
+        if sync_backends is None:
+            self.sync_backends = []
+        else:
+            self.sync_backends = sync_backends
 
         # Validate all backends
-        for b in backends:
-            if getattr(b, "entity_class", None) != entity_class:
+        for b in self.sync_backends:
+            if b.entity_class != self.primary.entity_class:
                 raise TypeError(
-                    f"Backend {b} does not match entity_class={entity_class.__name__}"
+                    f"Backend {b} does not match entity_class={self.entity_class.__name__}"
                 )
-
-        self.backends = list(backends)
 
     @property
     def primary(self):
         """The backend used for all read operations."""
-        return self.backends[0]
+        return self._primary
+
+    @primary.setter
+    def primary(self, new_primary):
+        self._primary = new_primary    
 
     def add_backend(self, backend, clear=False):
@@ -40,5 +46,5 @@
         If clear=True, backend is wiped before syncing.
         """
-        if backend.entity_class != self.entity_class:
+        if backend.entity_class != self.primary.entity_class:
             raise TypeError("Backend entity_class mismatch")
 
@@ -50,5 +56,5 @@
             backend.save(entity)
 
-        self.backends.append(backend)
+        self.sync_backends.append(backend)
 
     def remove_backend(self, backend):
@@ -58,5 +64,5 @@
         if backend is self.primary:
             raise ValueError("Cannot remove the primary backend")
-        self.backends.remove(backend)           
+        self.sync_backends.remove(backend)
     # ---------------------------------------------------------
     # Write operations propagate to *all* backends
@@ -64,13 +70,14 @@
 
     def save(self, entity):
-        for b in self.backends:
+        self.primary.save(entity)
+        for b in self.sync_backends:
             b.save(entity)
 
     def update(self, entity):
-        for b in self.backends:
+        for b in self.sync_backends:
             b.update(entity)
 
     def delete(self, flexo_id: str):
-        for b in self.backends:
+        for b in self.sync_backends:
             b.delete(flexo_id)
 
@@ -94,11 +101,11 @@
         Useful if secondary backends were empty initially.
         """
-        primary = self.backends[0]
         for entity in primary.load_all():
-            for b in self.backends[1:]:
+            for b in self.sync_backends:
                 b.save(entity)
 
     def clear(self):
-        for b in self.backends:
+        self.primary.clear()
+        for b in self.sync_backends:
             if hasattr(b, "clear"):
                 b.clear()
@@ -107,4 +114,4 @@
 
     def __repr__(self):
-        names = ", ".join(b.__class__.__name__ for b in self.backends)
+        names = ", ".join(b.__class__.__name__ for b in self.sync_backends)
         return f"<CompositeBackend [{names}]>"
Index: flexoentity/domain_manager.py
===================================================================
--- flexoentity/domain_manager.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ flexoentity/domain_manager.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
@@ -39,4 +39,7 @@
 
         self._rebuild_index()
+
+    def refresh(self):
+        self._rebuild_index
 
     # ------------------------------------------------------------
@@ -128,3 +131,2 @@
     def __repr__(self):
         return f"<DomainManager domains={self.all_domain_ids()}>"
-
Index: flexoentity/in_memory_backend.py
===================================================================
--- flexoentity/in_memory_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ flexoentity/in_memory_backend.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
@@ -17,5 +17,5 @@
             raise TypeError("entity_class must be a subclass of FlexOEntity")
 
-        self.entity_class = entity_class
+        super().__init__(entity_class = entity_class)
         self._storage = storage if storage is not None else {}
 
Index: flexoentity/persistance_backend.py
===================================================================
--- flexoentity/persistance_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ flexoentity/persistance_backend.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
@@ -6,8 +6,19 @@
     """
 
-    def save(self, entity_dict: dict) -> None:
+    def __init__(self, entity_class):
+        self._entity_class = entity_class
+
+    @property
+    def entity_class(self):
+        return self._entity_class
+
+    @entity_class.setter
+    def entity_class(self, a_class):
+        self._entity_class = a_class
+
+    def save(self, flexo_entity) -> None:
         raise NotImplementedError
 
-    def update(self, entity_dict: dict) -> None:
+    def update(self, flexo_entity) -> None:
         raise NotImplementedError
 
Index: flexoentity/sqlite_entity_backend.py
===================================================================
--- flexoentity/sqlite_entity_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ flexoentity/sqlite_entity_backend.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
@@ -10,8 +10,10 @@
 
     def __init__(self, entity_class, conn, table_name):
+        super().__init__(entity_class)
         self.entity_class = entity_class
         self.conn = conn
         self.table = table_name
         self._init_schema()
+
 
     def _init_schema(self):
Index: tests/conftest.py
===================================================================
--- tests/conftest.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ tests/conftest.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
@@ -33,6 +33,7 @@
 
 @pytest.fixture
-def sample_domain_manager():
-    return DomainManager(CompositeBackend(Domain), EntityRegistry())
+def sample_domain_manager(backend):
+    return DomainManager(CompositeBackend(authoritative_backend=backend,
+                                          sync_backends=None), EntityRegistry())
 
 # ─────────────────────────────────────────────────────────────
Index: tests/test_composite_backend.py
===================================================================
--- tests/test_composite_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ tests/test_composite_backend.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
@@ -8,5 +8,5 @@
     secondary = InMemoryBackend(Domain)
 
-    backend = CompositeBackend(Domain, primary, secondary)
+    backend = CompositeBackend(authoritative_backend=primary, sync_backends=[secondary])
 
     backend.save(sample_domain)
@@ -23,5 +23,5 @@
     secondary = InMemoryBackend(Domain)
 
-    backend = CompositeBackend(Domain, primary, secondary)
+    backend = CompositeBackend(authoritative_backend=primary, sync_backends=[secondary])
 
     primary.save(sample_domain)
@@ -37,5 +37,5 @@
     secondary = InMemoryBackend(Domain)
 
-    backend = CompositeBackend(Domain, primary, secondary)
+    backend = CompositeBackend(authoritative_backend=primary, sync_backends=[secondary])
 
     backend.save(sample_domain)
Index: tests/test_persistance_integrity.py
===================================================================
--- tests/test_persistance_integrity.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ tests/test_persistance_integrity.py	(revision ea28ca0608ed52526793cd6fea857763cf9a41ba)
@@ -49,5 +49,4 @@
     file = tmp_path / "question.json"
     json_str = approved_domain.to_json()
-    print("JSON", json_str)
     file.write_text(json_str)
 
