Index: tests/conftest.py
===================================================================
--- tests/conftest.py	(revision c296f7606ce58fb9891ac74bd3c41851f1728f1f)
+++ tests/conftest.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
@@ -3,5 +3,5 @@
 from pathlib import Path
 from datetime import datetime
-from flexoentity import Domain, FlexoSignature, DomainManager, EntityRegistry, CompositeBackend
+from flexoentity import Domain, FlexoSignature, DomainManager, EntityRegistry, CompositeBackend, InMemoryBackend
 from flexoentity import get_signing_backend, CertificateReference
 
@@ -26,4 +26,8 @@
 
 SYSTEM = platform.system()
+
+@pytest.fixture
+def backend():
+    return InMemoryBackend(Domain)
 
 
@@ -81,5 +85,5 @@
 
 @pytest.fixture(scope="session")
-def backend(test_cert, test_key):
+def signing_backend(test_cert, test_key):
     """Return the correct backend for the current platform."""
 
Index: tests/test_composite_backend.py
===================================================================
--- tests/test_composite_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ tests/test_composite_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
@@ -0,0 +1,46 @@
+from flexoentity.in_memory_backend import InMemoryBackend
+from flexoentity.composite_backend import CompositeBackend
+from flexoentity.domain import Domain
+
+
+def test_composite_writes_to_all_backends(sample_domain):
+    primary = InMemoryBackend(Domain)
+    secondary = InMemoryBackend(Domain)
+
+    backend = CompositeBackend(Domain, primary, secondary)
+
+    backend.save(sample_domain)
+
+    fid = sample_domain.flexo_id
+
+    # both must see the entity
+    assert primary.load(fid) is not None
+    assert secondary.load(fid) is not None
+
+
+def test_composite_reads_from_primary_only(sample_domain):
+    primary = InMemoryBackend(Domain)
+    secondary = InMemoryBackend(Domain)
+
+    backend = CompositeBackend(Domain, primary, secondary)
+
+    primary.save(sample_domain)
+
+    # secondary has nothing, but composite should still load from primary
+    fid = sample_domain.flexo_id
+    loaded = backend.load(fid)
+    assert isinstance(loaded, Domain)
+
+
+def test_composite_clear_propagates(sample_domain):
+    primary = InMemoryBackend(Domain)
+    secondary = InMemoryBackend(Domain)
+
+    backend = CompositeBackend(Domain, primary, secondary)
+
+    backend.save(sample_domain)
+
+    backend.clear()
+
+    assert primary.load_all() == []
+    assert secondary.load_all() == []
Index: tests/test_in_memory_backend.py
===================================================================
--- tests/test_in_memory_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ tests/test_in_memory_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
@@ -0,0 +1,41 @@
+import pytest
+from flexoentity.in_memory_backend import InMemoryBackend
+from flexoentity.domain import Domain
+
+
+
+
+def test_save_and_load_roundtrip(backend, sample_domain):
+    backend.save(sample_domain)
+
+    loaded = backend.load(sample_domain.flexo_id)
+    assert isinstance(loaded, Domain)
+    # important: entity equality is probably identity-based, so compare dicts:
+    assert loaded.to_dict() == sample_domain.to_dict()
+
+
+def test_update_overwrites_entity(backend, sample_domain):
+    backend.save(sample_domain)
+
+    # change something
+    sample_domain.description = "UPDATED DESC"
+    backend.update(sample_domain)
+
+    loaded = backend.load(sample_domain.flexo_id)
+    assert loaded.description == "UPDATED DESC"
+
+
+def test_delete_removes_entity(backend, sample_domain):
+    backend.save(sample_domain)
+    backend.delete(sample_domain.flexo_id)
+
+    assert backend.load(sample_domain.flexo_id) is None
+    assert backend.load_all() == []
+
+
+def test_clear_removes_all(backend, sample_domain):
+    backend.save(sample_domain)
+    backend.clear()
+
+    assert backend.load(sample_domain.flexo_id) is None
+    assert backend.load_all() == []
Index: tests/test_json_file_backend.py
===================================================================
--- tests/test_json_file_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ tests/test_json_file_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
@@ -0,0 +1,34 @@
+#!/usr/bin/env python3
+
+from flexoentity.domain import Domain
+from flexoentity.json_file_backend import JsonFileBackend
+
+
+def make_domain(domain_id="PY_ARITHM"):
+    return Domain.with_domain_id(
+        subtype="Domain",
+        domain_id=domain_id,
+        fullname="PYTHON_ARITHMETIC",
+        description="ALL ABOUT ARITHMETIC IN PYTHON",
+        classification="UNCLASSIFIED",
+    )
+
+
+def test_jsonfile_roundtrip(tmp_path):
+    path = tmp_path / "domains.json"
+    backend = JsonFileBackend(Domain, path)
+
+    dom1 = make_domain("PY_ARITHM")
+    dom2 = make_domain("PY_STRINGS")
+
+    backend.save(dom1)
+    backend.save(dom2)
+    backend.flush_to_file()
+
+    # new instance simulating a reload
+    backend2 = JsonFileBackend(Domain, path)
+    backend2.load_from_file()
+
+    loaded = backend2.load_all()
+    ids = sorted(d.domain_id for d in loaded)
+    assert ids == ["PY_ARITHM", "PY_STRINGS"]
Index: tests/test_signing.py
===================================================================
--- tests/test_signing.py	(revision c296f7606ce58fb9891ac74bd3c41851f1728f1f)
+++ tests/test_signing.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
@@ -4,38 +4,38 @@
 from flexoentity import FlexOID, EntityState, EntityType, FlexoSignature, get_signing_backend
 
-def test_sign_and_verify_linux(backend):
+def test_sign_and_verify_linux(signing_backend):
     data = b"Hello Flex-O signing!"
 
-    signature = backend.sign(data)
+    signature = signing_backend.sign(data)
     assert isinstance(signature, bytes)
     assert len(signature) > 20      # sanity check
 
-    assert backend.verify(data, signature) is True
+    assert signing_backend.verify(data, signature) is True
 
-def test_sign_and_verify_macos(backend):
+def test_sign_and_verify_macos(signing_backend):
     data = b"Hello Flex-O signing!"
 
-    signature = backend.sign(data)
+    signature = signing_backend.sign(data)
     assert isinstance(signature, bytes)
     assert len(signature) > 20      # sanity check
 
-    assert backend.verify(data, signature) is True
+    assert signing_backend.verify(data, signature) is True
 
-def test_verify_fails_with_wrong_data(backend):
+def test_verify_fails_with_wrong_data(signing_backend):
     data = b"Original Data"
     wrong_data = b"Tampered Data"
 
-    signature = backend.sign(data)
+    signature = signing_backend.sign(data)
 
-    assert backend.verify(data, signature) == True
-    assert backend.verify(wrong_data, signature) == False
+    assert signing_backend.verify(data, signature) == True
+    assert signing_backend.verify(wrong_data, signature) == False
 
-def test_verify_fails_with_invalid_signature(backend):
+def test_verify_fails_with_invalid_signature(signing_backend):
     data = b"Hello world"
     invalid_sig = b"\x00\x01\x02garbagepkcs7data"
 
-    assert backend.verify(data, invalid_sig) is False
+    assert signing_backend.verify(data, invalid_sig) is False
 
-def test_signature_entity_create_and_verify(backend):
+def test_signature_entity_create_and_verify(signing_backend):
     entity_id = FlexOID.safe_generate(
         domain_id="TEST",
@@ -52,5 +52,5 @@
         entity=entity_id,
         signer_id=signer,
-        backend=backend,
+        backend=signing_backend,
     )
 
@@ -61,3 +61,3 @@
     assert sig.certificate_thumbprint != ""
 
-    assert sig.verify(data, backend) is True
+    assert sig.verify(data, signing_backend) is True
Index: tests/test_sqlite_backend.py
===================================================================
--- tests/test_sqlite_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
+++ tests/test_sqlite_backend.py	(revision 753855acf7e2fe3b419275ead16f408dff1a4514)
@@ -0,0 +1,31 @@
+import sqlite3
+from flexoentity.domain import Domain
+from flexoentity import SQLiteEntityBackend
+
+
+def make_domain(domain_id="PY_ARITHM"):
+    return Domain.with_domain_id(
+        subtype="Domain",
+        domain_id=domain_id,
+        fullname="PYTHON_ARITHMETIC",
+        description="ALL ABOUT ARITHMETIC IN PYTHON",
+        classification="UNCLASSIFIED",
+    )
+
+
+def test_sqlite_roundtrip(tmp_path):
+    db_path = tmp_path / "domains.db"
+    conn = sqlite3.connect(db_path)
+    conn.row_factory = sqlite3.Row
+
+    backend = SQLiteEntityBackend(Domain, conn, table_name="domains")
+
+    dom = make_domain()
+    backend.save(dom)
+
+    loaded = backend.load(dom.flexo_id)
+    assert loaded.to_dict() == dom.to_dict()
+
+    all_loaded = backend.load_all()
+    assert len(all_loaded) == 1
+    assert all_loaded[0].domain_id == "PY_ARITHM"
