diff --git a/MemberNodes.py b/MemberNodes.py
index 138bd541a24a5016612ca0e609f6b04c300b89c4..0758e0c2332bf373554a54d4a07d3535e5d71391 100644
--- a/MemberNodes.py
+++ b/MemberNodes.py
@@ -285,7 +285,7 @@ class MethodNode(ASTNode):
             if not 'static' in f.mods and f.variableDcl.variableInit:
                 f.variableDcl.variableInit.codeGen()
                 bodyCode += f.variableDcl.variableInit.code
-                bodyCode += p("mov", "ebx", "[ebp - " + str(thisLoc) + "]") # THIS
+                bodyCode += p("mov", "ebx", "[ebp + " + str(thisLoc) + "]") # THIS
                 bodyCode += p("mov", "[ebx + " + str(f.offset) + " ]", "eax")
 
         # body code
diff --git a/NameNode.py b/NameNode.py
index 64fcf1bd39ba8ec5b95cb72b7a24a99884635872..68ee3bd75ae648b95be7d89e1939007edd27deca 100644
--- a/NameNode.py
+++ b/NameNode.py
@@ -109,13 +109,11 @@ class NameNode(ASTNode):
             self.prefixLink = "contain"
             self.addToPrefix("contain")
 
+            # evaluate THIS first, fieldnode will be added to prefixNodes in checkType()
             cNameNode = genNameNode(self.typeName)
             cNameNode.isThis = True
             self.prefixNodes.append(cNameNode)
-            cNameNode = genNameNode(self.typeName)
-            if self.env.findNode(ID, "fieldDcl"): # only resolve up to the object for methods
-                cNameNode.nodeLink = self.env.getNode(ID, "fieldDcl")
-            self.prefixNodes.append(cNameNode)
+
             return True
         return False
 
diff --git a/codeGenNodes.py b/codeGenNodes.py
index 5db74b6f06dc3ce77a2f87dc6b819dc2d5d7fea2..f4a300811f4e033bd7c5d4f292619540fd5a5ce6 100644
--- a/codeGenNodes.py
+++ b/codeGenNodes.py
@@ -12,15 +12,15 @@ class genNameNode():
     # returns code
     def codeGen(self):
         if self.isThis:
-            self.code = p("mov", "eax", "[ebp - 8]")
+            self.code = p("mov", "eax", "[ebp + 8]")
         elif self.nodeLink.__class__.__name__ == "VarDclNode":
             self.code = p("mov", "eax", "[ebp - " + str(self.nodeLink.offset) + "]")
         elif self.nodeLink.__class__.__name__ == "ParamNode":
             self.code = p("mov", "eax", "[ebp + " + str(self.nodeLink.offset) + "]")
         elif self.nodeLink.__class__.__name__ == "FieldNode":
             if self.isStatic:
-                label = nodeLink.typeName + "_" + nodeLink.name
-                self.code += importHelper(fieldNode.typeName, self.typeName, "S_"+label) + \
+                label = self.nodeLink.typeName + "_" + self.nodeLink.name
+                self.code += importHelper(self.nodeLink.typeName, self.typeName, "S_"+label) + \
                             p("mov", "eax", "dword S_"+label)
                 self.code += p("mov", "eax", "[eax]")
             else:
@@ -35,7 +35,7 @@ class genNameNode():
         result = ""
         if self.isThis:
             result = p("mov", "eax", "ebp")
-            result += p("sub", "eax", "8")
+            result += p("add", "eax", "8")
         elif self.nodeLink.__class__.__name__ == "VarDclNode":
             result = p("mov", "eax", "ebp")
             result += p("sub", "eax", str(self.nodeLink.offset))
@@ -44,8 +44,8 @@ class genNameNode():
             result += p("add", "eax", str(self.nodeLink.offset))
         elif self.nodeLink.__class__.__name__ == "FieldNode":
             if self.isStatic:
-                label = nodeLink.typeName + "_" + nodeLink.name
-                self.code += importHelper(fieldNode.typeName, self.typeName, "S_"+label) + \
+                label = self.nodeLink.typeName + "_" + self.nodeLink.name
+                self.code += importHelper(self.nodeLink.typeName, self.typeName, "S_"+label) + \
                             p("mov", "eax", "dword S_"+label)
             else:
                 # object will already be in eax