diff --git a/spec_driven_model/models/spec_models.py b/spec_driven_model/models/spec_models.py
index 2efd91e414ba..cc0e164aed82 100644
--- a/spec_driven_model/models/spec_models.py
+++ b/spec_driven_model/models/spec_models.py
@@ -75,27 +75,29 @@ def _build_model(cls, pool, cr):
         class as long as the generated spec mixins inherit from some
         spec.mixin.<schema_name> mixin.
         """
-        parents = cls._inherit
-        parents = [parents] if isinstance(parents, str) else (parents or [])
+        if hasattr(cls, "_spec_schema"):  # when called via _register_hook
+            schema = cls._spec_schema
+            version = cls._spec_version.replace(".", "")[:2]
+        else:
+            mod = import_module(".".join(cls.__module__.split(".")[:-1]))
+            schema = mod.spec_schema
+
+        if schema and "spec.mixin" not in [
+            c._name for c in pool[f"spec.mixin.{schema}"].__bases__
+        ]:
+            spec_mixin = pool[f"spec.mixin.{schema}"]
+            spec_mixin._inherit = list(spec_mixin._inherit) + ["spec.mixin"]
+            spec_mixin._BaseModel__base_classes = (
+                pool["spec.mixin"],
+            ) + spec_mixin._BaseModel__base_classes
+            spec_mixin.__bases__ = (pool["spec.mixin"],) + spec_mixin.__bases__
+
+        parents = [
+            item[0] if isinstance(item, list) else item for item in list(cls._inherit)
+        ]
         for parent in parents:
+            # this will register that the spec mixins where injected in this class
             cls._map_concrete(cr.dbname, parent, cls._name)
-            super_parents = pool[parent]._inherit
-            if isinstance(super_parents, str):
-                super_parents = [super_parents]
-            else:
-                super_parents = super_parents or []
-            for super_parent in super_parents:
-                if not super_parent.startswith("spec.mixin.") or "spec.mixin" in [
-                    c._name for c in pool[super_parent].__bases__
-                ]:
-                    continue
-                pool[super_parent]._inherit = list(pool[super_parent]._inherit) + [
-                    "spec.mixin"
-                ]
-                pool[super_parent].__bases__ = (pool["spec.mixin"],) + pool[
-                    super_parent
-                ].__bases__
-
         return super()._build_model(pool, cr)
 
     @api.model