Index: flexoentity/flexo_entity.py
===================================================================
--- flexoentity/flexo_entity.py	(revision 52ccac6edb8c3ce7f8efacf668054f13855c8011)
+++ flexoentity/flexo_entity.py	(revision ca3927462b83d9ae55fd59d487c07e1a3f0f994c)
@@ -7,5 +7,4 @@
 from enum import Enum, auto
 from dataclasses import dataclass, field
-from datetime import datetime
 from typing import Optional
 from abc import ABC, abstractmethod
@@ -29,5 +28,5 @@
     CERTIFICATE = auto()
     DOMAIN = auto()
-    
+
     def short(self) -> str:
         mapping = {
@@ -97,12 +96,9 @@
     fingerprint: str = field(default_factory=str)
     origin: Optional[str] = field(default=None)
-    
+
     OID_PATTERN = re.compile(
         r"^(?P<domain>[A-Z0-9]+)-(?P<etype>[A-Z]+)"
         r"(?P<date>\d{6,8})-(?P<hash>[0-9A-F]+)@(?P<version>\d{3})(?P<state>[A-Z])$"
     )
-
-    def __str__(self) -> str:
-        return f"{self.domain_code()}-{self.etype}{self.date}-{self.unique_hash}@{self.version:03d}{self.state}"
 
     @classmethod
@@ -145,5 +141,5 @@
         class itself to avoid circular initialization.
         """
-       
+
         self.flexo_id = FlexOID.safe_generate(self.domain_code(),
                                          self.etype.short(),
@@ -159,4 +155,5 @@
             f"fingerprint={self.fingerprint}..., v{self.version})"
         )
+
     def to_dict(self):
         return {
@@ -168,5 +165,5 @@
             "origin": self.origin,
         }
-    
+
     @classmethod
     def from_dict(cls, data):
@@ -175,5 +172,5 @@
         abbrev, fullname = (lambda p: (p[0], p[1] if len(p) > 1 else ""))(domain.split("_", 1))
         domain_obj = Domain(
-            abbrev,
+            domain=abbrev,
             etype=EntityType.DOMAIN,
             state=EntityState.DRAFT,  # default when reconstructing context
@@ -365,4 +362,6 @@
             canonical_seed(entity.text_seed).encode("utf-8"), digest_size=8
         ).hexdigest().upper()
+        print(entity.fingerprint)
+        print(expected_fp)
         return expected_fp == entity.fingerprint
 
Index: flexoentity/id_factory.py
===================================================================
--- flexoentity/id_factory.py	(revision 52ccac6edb8c3ce7f8efacf668054f13855c8011)
+++ flexoentity/id_factory.py	(revision ca3927462b83d9ae55fd59d487c07e1a3f0f994c)
@@ -47,5 +47,7 @@
     WARN_THRESHOLD = 900
 
+
     # keep in-memory registry for same-session collisions (optional)
+    # NOTE: We might remove this soon
     _seen_hashes = set()
 
@@ -74,5 +76,5 @@
             raise ValueError("Cannot order FlexOIDs from different prefixes")
         return self.version < other.version
-        
+
     def __hash__(self):
         return hash(self.flexo_id)
@@ -81,5 +83,6 @@
     def _blake_hash(text: str) -> str:
         """Return a 12-hex BLAKE2s digest."""
-        return hashlib.blake2s(text.encode("utf-8"), digest_size=6).hexdigest().upper()  # 6 bytes → 12 hex
+        return hashlib.blake2s(text.encode("utf-8"),
+                               digest_size=6).hexdigest().upper()  # 6 bytes → 12 hex
 
     @staticmethod
@@ -134,5 +137,5 @@
 
         return oid
-    
+
     @staticmethod
     def generate(domain: str, etype: str, estate: str, text: str,
@@ -159,6 +162,4 @@
         return FlexOID(flexo_id_str)
 
-    # ──────────────────────────────────────────────────────────────────────────
-
     @property
     def state_code(self):
@@ -168,8 +169,4 @@
             raise ValueError(f"Invalid Flex-O ID format: {self.flexo_id}")
         return part[-1]
-
-    # ──────────────────────────────────────────────────────────────────────────
-    #  Parsed Accessors
-    # ──────────────────────────────────────────────────────────────────────────
 
     @property
@@ -250,5 +247,4 @@
             "state": self.state_code,
         }
-    # ──────────────────────────────────────────────────────────────────────────
 
     @classmethod
@@ -290,5 +286,4 @@
         return cls(new_id)
 
-    # ──────────────────────────────────────────────────────────────────────────
     @staticmethod
     def clone_new_base(domain: str, etype: str, estate: str, text: str):
Index: tests/test_id_lifecycle.py
===================================================================
--- tests/test_id_lifecycle.py	(revision 52ccac6edb8c3ce7f8efacf668054f13855c8011)
+++ tests/test_id_lifecycle.py	(revision ca3927462b83d9ae55fd59d487c07e1a3f0f994c)
@@ -99,6 +99,6 @@
     q.sign()
     q.publish()
+    q.obsolete()
     old_id = str(q.flexo_id)
-    q.obsolete()
     q.clone_new_base()
     assert q.origin == old_id
Index: tests/test_persistance_integrity.py
===================================================================
--- tests/test_persistance_integrity.py	(revision 52ccac6edb8c3ce7f8efacf668054f13855c8011)
+++ tests/test_persistance_integrity.py	(revision ca3927462b83d9ae55fd59d487c07e1a3f0f994c)
@@ -6,21 +6,19 @@
 import pytest
 
-from flexoentity import EntityState
 from builder.questions import RadioQuestion, AnswerOption
+from flexoentity import EntityState, EntityType, Domain
 
-
-# ──────────────────────────────────────────────────────────────────────────────
 @pytest.fixture
-def approved_question(domain):
+def approved_question():
     """Provide a fully approved and published RadioQuestion for persistence tests."""
     q = RadioQuestion(
-        domain=domain,
+        domain=Domain(domain="GEN", etype=EntityType.DOMAIN, state=EntityState.DRAFT),
         etype=None,  # RadioQuestion sets this internally to EntityType.QUESTION
         state=EntityState.DRAFT,
         text="What is Ohm’s law?",
         options=[
-            AnswerOption(text="U = R × I", points=1),
-            AnswerOption(text="U = I / R", points=0),
-            AnswerOption(text="R = U × I", points=0),
+            AnswerOption(id="OP1", text="U = R × I", points=1),
+            AnswerOption(id="OP2", text="U = I / R", points=0),
+            AnswerOption(id="OP3", text="R = U × I", points=0),
         ],
     )
@@ -37,6 +35,9 @@
     """
     json_str = approved_question.to_json()
+    print("JSON", json_str)
     loaded = RadioQuestion.from_json(json_str)
 
+    print("Approved", approved_question.text_seed)
+    print("Loaded", loaded.text_seed)
     # Fingerprint and state should match — integrity must pass
     assert RadioQuestion.verify_integrity(loaded)
@@ -46,7 +47,4 @@
     assert approved_question.flexo_id == loaded.flexo_id
     assert loaded.state == approved_question.state
-
-
-# ──────────────────────────────────────────────────────────────────────────────
 
 @pytest.mark.skip(reason="FlexOIDs regenerated on import; tampering detection not yet implemented")
@@ -60,7 +58,4 @@
     loaded = RadioQuestion.from_json(tampered_json)
     assert not RadioQuestion.verify_integrity(loaded)
-
-
-# ──────────────────────────────────────────────────────────────────────────────
 
 @pytest.mark.skip(reason="FlexOIDs regenerated on import; corruption detection not yet applicable")
