diff --git a/src/main/java/fr/inrialpes/exmo/linkkey/CandidateLinkkey.java b/src/main/java/fr/inrialpes/exmo/linkkey/CandidateLinkkey.java
index 9d2658ecdb50026335013ea864a9acdfd3da0136..703db8999d85f643054713e0a9a02ae3a5d013a5 100644
--- a/src/main/java/fr/inrialpes/exmo/linkkey/CandidateLinkkey.java
+++ b/src/main/java/fr/inrialpes/exmo/linkkey/CandidateLinkkey.java
@@ -529,8 +529,8 @@ public class CandidateLinkkey implements EvaluableRule {
     public boolean moreSpecificThan(CandidateLinkkey o) {
         if (o.eqPairs.isEmpty()&&o.inPairs.isEmpty()) return true;
         return this.eqPairs.containsAll(o.eqPairs) && this.inPairs.containsAll(o.inPairs) 
-               && ClassExpressions.contains(o.classes1, this.classes1) && 
-               ClassExpressions.contains(o.classes2, this.classes2);
+                && ClassExpressions.contains(o.classes1, this.classes1) && 
+                ClassExpressions.contains(o.classes2, this.classes2);
     }
 
     public boolean moreGeneralThan(CandidateLinkkey o) {
@@ -545,10 +545,10 @@ public class CandidateLinkkey implements EvaluableRule {
     
     public boolean isContained(LongSet eqPairs, LongSet inPairs, Set<IntSet> classes1, Set<IntSet> classes2) {
         if (this.eqPairs.isEmpty() && this.inPairs.isEmpty()) return true;
-        return eqPairs.containsAll(this.eqPairs) && 
-                inPairs.containsAll(this.inPairs) && 
-                ClassExpressions.contains(this.classes1, classes1) && 
-                ClassExpressions.contains(this.classes2, classes2);
+        return eqPairs.containsAll(this.eqPairs) 
+               && inPairs.containsAll(this.inPairs)
+                &&  ClassExpressions.contains(this.classes1, classes1) 
+                &&  ClassExpressions.contains(this.classes2, classes2);
     }
     
 
@@ -577,7 +577,8 @@ public class CandidateLinkkey implements EvaluableRule {
     }
     
     /* 
-        returns the generator of a given pair of sets of eq and in property pairs
+        returns a generator of a given pair of sets of eq and in property pairs
+        a generator is a most general subsumee of the given intent
         This is used by addIntent algorithm
     */
     public CandidateLinkkey getMaximal(LongSet eqPairs, LongSet inPairs, Set<IntSet> classes1, Set<IntSet> classes2) {
@@ -586,6 +587,8 @@ public class CandidateLinkkey implements EvaluableRule {
         while (parentIsMaximal) {
             parentIsMaximal = false;
             for (CandidateLinkkey p : generator.parents) {
+                // if parent is more specific or equals to the given intent
+                // then p becomes generator and continue
                 if (p.contains(eqPairs, inPairs, classes1, classes2)) {
                     generator = p;
                     parentIsMaximal = true;
diff --git a/src/main/java/fr/inrialpes/exmo/linkkey/LinkKeyRenderer.java b/src/main/java/fr/inrialpes/exmo/linkkey/LinkKeyRenderer.java
index 8e95bdf87a0884828095ae6e0c428d52c17b24b8..dde0ec69b7f39b704ddd3e60db10260ae6719ed6 100644
--- a/src/main/java/fr/inrialpes/exmo/linkkey/LinkKeyRenderer.java
+++ b/src/main/java/fr/inrialpes/exmo/linkkey/LinkKeyRenderer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014-2018 Jerome David <jerome.david@univ-grenoble-alpes.fr>
+ * Copyright (C) 2014-2020 Jerome David <jerome.david@univ-grenoble-alpes.fr>
  *
  * This file is part of Linkex.
  *
@@ -167,6 +167,7 @@ public class LinkKeyRenderer {
         LongSet inPairs = new LongOpenHashSet(c.getInPairs());
         LongSet eqPairs = new LongOpenHashSet(c.getEqPairs());
         
+        // \emptyset -> \u2205
         String resIn = "\\\u2205";
         if (!inPairs.isEmpty()) {
             inPairs.removeAll(c.getEqPairs());
diff --git a/src/main/java/fr/inrialpes/exmo/linkkey/LinkkeyDiscoveryAlgorithm.java b/src/main/java/fr/inrialpes/exmo/linkkey/LinkkeyDiscoveryAlgorithm.java
index ada93407422b3316e9e64f64fbd4e43e00c930ea..9b929354866cc8b1e6260ebcabc4fd66609801a5 100644
--- a/src/main/java/fr/inrialpes/exmo/linkkey/LinkkeyDiscoveryAlgorithm.java
+++ b/src/main/java/fr/inrialpes/exmo/linkkey/LinkkeyDiscoveryAlgorithm.java
@@ -1020,15 +1020,16 @@ public class LinkkeyDiscoveryAlgorithm {
     
     public CandidateLinkkey addIntent(LongSet eqPairs, LongSet inPairs, Set<IntSet> classes1, Set<IntSet> classes2, CandidateLinkkey generator) {
         generator = generator.getMaximal(eqPairs, inPairs, classes1, classes2);
-        if (generator.equals(eqPairs,inPairs)) { //, classes1, classes2)) {//
-            generator.classes1=ClassExpressions.union(generator.getClasses1(), classes1);
-            generator.classes2=ClassExpressions.union(generator.getClasses2(), classes2);
+        if (generator.equals(eqPairs,inPairs, classes1, classes2)) {
             return generator;
         }
         Set<CandidateLinkkey> newParents = new HashSet<>();
+        // search for the candidates to be the parent of the concept to be created
         for (CandidateLinkkey p : generator.getParents()) {
             //if (!p.isContained(eqPairs, inPairs) || p.equals(eqPairs, inPairs)) {
-            if (!p.isContained(eqPairs, inPairs, classes1, classes2) || p.equals(eqPairs, inPairs, classes1, classes2)) {
+            // if a parent the generator is not a subsumer of intent
+            // then search a subsumer within the hiearchy
+            if (!p.isContained(eqPairs, inPairs, classes1, classes2)) {// || p.equals(eqPairs, inPairs, classes1, classes2)) {
                 LongSet meetEqPairs = new LongOpenHashSet(eqPairs);
                 LongSet meetInPairs = new LongOpenHashSet(inPairs);
                 meetEqPairs.retainAll(p.getEqPairs());
@@ -1060,6 +1061,11 @@ public class LinkkeyDiscoveryAlgorithm {
             generator.removeParent(np);
             newCandidate.addParent(np);
         }
+        // union of classes to root
+        CandidateLinkkey root = newCandidate.getTop();
+        root.classes1=ClassExpressions.union(root.getClasses1(), classes1);
+        root.classes2=ClassExpressions.union(root.getClasses2(), classes2);
+        
         generator.addParent(newCandidate);
         return newCandidate;