diff --git a/tetras_extraction/macao_12/script/src/extract.py b/tetras_extraction/macao_12/script/src/extract.py
index e092c8149e143354043f9057d6ef94a5b5f30e3d..dec958d414f1249b1fb2edfbbfb0d9697f74f88b 100644
--- a/tetras_extraction/macao_12/script/src/extract.py
+++ b/tetras_extraction/macao_12/script/src/extract.py
@@ -8,7 +8,7 @@ import extract_mosetp
 from common import *
 
 # Initialise logger
-log = get_logger(__name__)
+log = get_logger("extract")
 
 schema_ontology_uri = URIRef(
     "http://www.semanticweb.org/eliott/ontologies/2024/4/macao"
diff --git a/tetras_extraction/macao_12/script/src/extract_mosetp.py b/tetras_extraction/macao_12/script/src/extract_mosetp.py
index 31e6c6b969e5daf7093850533eae9915d9087686..de0b76e871957797aa4dbebe80dd1415e64ef9f1 100644
--- a/tetras_extraction/macao_12/script/src/extract_mosetp.py
+++ b/tetras_extraction/macao_12/script/src/extract_mosetp.py
@@ -7,7 +7,7 @@ from common import *
 from extract_page import parse_page
 
 # Initialise logger
-log = get_logger(__name__)
+log = get_logger("extract_mosetp")
 
 
 def generate_triples(
diff --git a/tetras_extraction/macao_12/script/src/extract_page.py b/tetras_extraction/macao_12/script/src/extract_page.py
index 4199ae580e6ad7ecb9733e14f88625e8ba02e84a..d778b559bfffadcb03a9dde7ba7d981097652275 100644
--- a/tetras_extraction/macao_12/script/src/extract_page.py
+++ b/tetras_extraction/macao_12/script/src/extract_page.py
@@ -13,7 +13,7 @@ from typing_extensions import override
 from common import *
 
 # Initialise logger
-log = get_logger(__name__)
+log = get_logger("extract_page")
 
 
 class Comment:
diff --git a/tetras_extraction/macao_12/script/src/transform.py b/tetras_extraction/macao_12/script/src/transform.py
index 387a59fd30614eb7413c865b100e18bbc08b13d6..30a0973048e5bfb006d1dd5068d847735838b924 100644
--- a/tetras_extraction/macao_12/script/src/transform.py
+++ b/tetras_extraction/macao_12/script/src/transform.py
@@ -2,27 +2,31 @@ from rdflib import OWL, RDF, Graph
 
 from common import *
 
+log = get_logger("transform")
+
 
 def construct(g: Graph, query: str):
     """Performs a SPARQL `CONSTRUCT` query and add the resulting triples
     to the graph, in-place.
-    """
 
+    :return: Number of *new* triples (i.e. not present in the initial graph)
+    """
     res = g.query(query)
     if res.graph is not None:
-        g += res.graph
+        new_triples = res.graph - g
+        n = len(new_triples)
+        g += new_triples
+        if n > 0:
+            log.info(f"\tConstructed {n} triples")
+        return n
+    return 0
 
 
 def construct_while(g: Graph, query: str):
     """Repeat a CONSTRUCT query, adding triples to the graph, until the query
     stops generating new triples"""
-    while True:
-        res = g.query(query)
-        if res.graph is not None and len(res.graph - g) > 0:
-            print(f"Constructed {len(res.graph - g)} triples")
-            g += res.graph
-        else:
-            break
+    while construct(g, query) > 0:
+        pass
 
 
 def main():
@@ -32,22 +36,9 @@ def main():
     graph.parse(RDF_SCHEMA_FILE)
     graph.parse(RDF_CONTENT_FILE)
 
-    construct(
-        graph,
-        """
-        CONSTRUCT {
-            ?exo a :ExerciceQC
-        } WHERE {
-            {
-                ?exo a :ExerciceQC_QCU
-            } UNION {
-                ?exo a :ExerciceQC_QCM
-            }
-        }""",
-    )
-
     # Apply property 'subClassOf' transitively, except on the "fake" class
     # hierarchy based on MacaoRoot
+    log.info("Adding transitive subclasses...")
     q_transitive_subclass = """
         CONSTRUCT {
             ?a rdfs:subClassOf ?c
@@ -60,6 +51,7 @@ def main():
     """
     construct_while(graph, q_transitive_subclass)
 
+    log.info("Adding supertypes...")
     construct_while(
         graph,
         """
@@ -71,18 +63,6 @@ def main():
         }
         """,
     )
-    # construct(
-    #     graph,
-    #     """
-    #     CONSTRUCT {
-
-    #     } WHERE {
-    #         ?subj a ?child_type .
-
-    #         ?child_type rdfs:subClassOf ?parent_type
-    #     }
-    #     """,
-    # )
 
     # ==> Save
     # Remove dependency on previous ontologies