diff --git a/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/encoders/AbstractGSATEncoder_TrackerGRI.java b/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/encoders/AbstractGSATEncoder_TrackerGRI.java
index 398759c4ef635df73792a983611fb5b7905b9634..ce8e5273ab76172c8247950ab6bf8048abf9f81b 100644
--- a/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/encoders/AbstractGSATEncoder_TrackerGRI.java
+++ b/integraal/integraal-explanation/src/main/java/fr/boreal/explanation/tracker_gri/encoders/AbstractGSATEncoder_TrackerGRI.java
@@ -79,7 +79,7 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI<
             Atom query,
             java.util.function.Predicate<Atom> belongsToInitialFactbase) {
         assignDefaultGroupNumberAndCreateClauseForStartQuery(query);
-        addClauseIfQueryBelongsToTheInitialFactbase(query,belongsToInitialFactbase);
+        addClauseIfQueryBelongsToTheInitialFactbase(query, belongsToInitialFactbase);
         assignGroupNumbersAndComputeClausesForRELEdges(gri, query, belongsToInitialFactbase);
 
         // Check that there is no redundancy
@@ -104,7 +104,7 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI<
 
 
     private void addClauseIfQueryBelongsToTheInitialFactbase(Atom query, java.util.function.Predicate<Atom> belongsToInitialFactbase) {
-        if(belongsToInitialFactbase.test(query)) {
+        if (belongsToInitialFactbase.test(query)) {
             clauses.add(List.of(reservedQueryGroup, reservedQueryPropVariable));
         }
     }
@@ -136,7 +136,7 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI<
                 for (Rule rule : ruleInstances.keySet()) {
                     for (Substitution substitution : ruleInstances.get(rule).keySet()) {
                         Set<Atom> tempAnc = ruleInstances.get(rule).get(substitution);
-                        if(tempAnc.contains(query)) {
+                        if (tempAnc.contains(query)) {
                             //skip as the rule is redundant
                             continue;
                         }
@@ -144,7 +144,8 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI<
 
                         // track visited
                         for (Atom ancestorAtom : tempAnc) {
-                            if (!visited.contains(ancestorAtom) && !query.equals(ancestorAtom)) {
+                            if (!visited.contains(ancestorAtom) && !toVisit.contains(ancestorAtom) && !query.equals(ancestorAtom)) {
+                                System.out.println("Adding " + ancestorAtom + " to " + toVisit);
                                 // we add the second condition because the query atom may be a different object than the data atom
                                 // and we do not need to visit it twice
                                 toVisit.add(ancestorAtom);
@@ -227,10 +228,14 @@ public abstract class AbstractGSATEncoder_TrackerGRI implements GSATEncoder_GRI<
         ruleInstanceGroupClause.add(propVarIDForHeadAtom);
 
         // The clause is ready
-
-        if (!clauses.contains(ruleInstanceGroupClause)) {
-            clauses.add(ruleInstanceGroupClause);
-        }
+        clauses.add(ruleInstanceGroupClause);
+
+        //if (!clauses.contains(ruleInstanceGroupClause)) {
+        //    clauses.add(ruleInstanceGroupClause);
+        //} else {
+        //    System.out.println("Already seen group clause: " + ruleInstanceGroupClause);
+        //    throw new RuntimeException("Already seen group clause: " + ruleInstanceGroupClause);
+        //}
 
         for (List<Integer> clause : tmpclauses) {
             if (!clauses.contains(clause)) {