diff --git a/TypeNodes.py b/TypeNodes.py
index 4581b105fd6d1623e2a915d9a437dde8d6ea8a9a..43652774e74011b3a9197eeb9a1082aaa42cff15 100644
--- a/TypeNodes.py
+++ b/TypeNodes.py
@@ -44,17 +44,15 @@ class ClassInterNode(ASTNode):
 
     def getContains(self, hierarchy):
         # check if not acyclic
-        canonName = self.packageName + '.' + self.name
-        self.canonName = canonName
 
-        if canonName in hierarchy:
-            raise Exception("ERROR: The hierarchy is not acyclic '{}', saw '{}'".format(hierarchy, canonName))
+        if self.canonName in hierarchy:
+            raise Exception("ERROR: The hierarchy is not acyclic '{}', saw '{}'".format(hierarchy, self.canonName))
 
         # get contains
         contains = self.methods
 
         for inter in self.superInter:
-            superContains = inter.getContains(hierarchy + [canonName])
+            superContains = inter.getContains(hierarchy + [self.canonName])
             for con in superContains:
                 conOverwritten = False
                 for method in self.methods:
@@ -87,7 +85,7 @@ class ClassNode(ClassInterNode):
         # self.superInter = []
         # self.env = None
         # self.children = []
-        # self.canonName = ""
+        # self.canonName = self.packageName + '.' + self.name
         self.fields = []
         self.constructors = []
         self.mods = []
@@ -122,6 +120,7 @@ class ClassNode(ClassInterNode):
                 for m in methodNodes:
                     self.methods.append(MethodNode(m))
 
+        self.canonName = self.packageName + '.' + self.name
         self.children += self.fields + self.methods + self.constructors
 
     def buildEnv(self, parentEnv):
@@ -148,7 +147,7 @@ class ClassNode(ClassInterNode):
                     newSuperInter = self.env.getNode(inter, 'type')
                     self.superInter[index] = newSuperInter
                     self.super.append(newSuperInter)
-            if not self.super:
+            if not self.super and self.canonName != "java.lang.Object":
                 objectNode = self.env.getNode("java.lang.Object", 'type')
                 self.super.append(objectNode)
 
@@ -194,13 +193,11 @@ class ClassNode(ClassInterNode):
     def getContains(self, hierarchy):
         # centralized logic
         contains = super().getContains(hierarchy)
-        canonName = self.packageName + '.' + self.name
-        self.canonName = canonName
 
         # get contains from extends class
         if self.superClass:
             addToContains = []
-            superContains = self.superClass.getContains(hierarchy + [canonName])
+            superContains = self.superClass.getContains(hierarchy + [self.canonName])
             for con in superContains:
                 conOverwritten = False
                 for index, method in enumerate(contains):
@@ -245,7 +242,7 @@ class InterNode(ClassInterNode):
         # self.superInter = []
         # self.env = None
         # self.children = []
-        # self.canonName = ""
+        # self.canonName = self.packageName + '.' + self.name
 
         for node in parseTree.children:
             if node.name == 'ID':
@@ -261,6 +258,7 @@ class InterNode(ClassInterNode):
                 for n in nodes:
                     self.methods.append(MethodNode(n))
 
+        self.canonName = self.packageName + '.' + self.name
         self.children = self.methods
 
     def buildEnv(self, parentEnv):
@@ -298,14 +296,12 @@ class InterNode(ClassInterNode):
     def getContains(self, hierarchy):
         # centralized logic
         contains = super().getContains(hierarchy)
-        canonName = self.packageName + '.' + self.name
-        self.canonName = canonName
 
         # an interface without any super interfaces implicitly declares an abstract version of every public method in java.lang.Object
         if not self.superInter:
             addToContains = []
             objectInterface = self.env.getNode('java.lang.Object', 'type')
-            superContains = objectInterface.getContains(hierarchy + [canonName])
+            superContains = objectInterface.getContains(hierarchy + [self.canonName])
             for con in superContains:
                 conOverwritten = False
                 if 'public' in con.mods: