diff --git a/ExprPrimaryNodes.py b/ExprPrimaryNodes.py
index 8b9239df55a69650b73da6d6f65654fc8997fb6e..6f74859265df44da6d8b094cde36a89bd8a739b9 100644
--- a/ExprPrimaryNodes.py
+++ b/ExprPrimaryNodes.py
@@ -247,13 +247,18 @@ class AssignNode(ASTNode):
         self.outMaybe = inMaybe
 
     def codeGen(self):
+        self.code = ""
+        self.code +=("; Evaluate right of assignment\n")
         self.right.codeGen()
         self.code = self.right.code
+        self.code += p("push", "eax")
+
+        self.code +=("; Evaluate left of assignment\n")
+        self.code += self.left.addr()
 
-        if self.left.__class__.__name__ == "NameNode":
-            if self.left.prefixLink.__class__.__name__ == "VarDclNode":
-                # move init result to var location
-                self.code += p("mov", "[ebp - " + str(self.left.prefixLink.offset) + "]", "eax")
+        self.code += p("pop", "ebx")
+        self.code += p("mov", "[eax]", "ebx")
+        self.code += ("; End of assignment\n")
 
 
 ##################################################################################
diff --git a/codeGenNodes.py b/codeGenNodes.py
index f4a300811f4e033bd7c5d4f292619540fd5a5ce6..e911b6d2b290d0c392c41f418ef8acc342b472bb 100644
--- a/codeGenNodes.py
+++ b/codeGenNodes.py
@@ -50,5 +50,5 @@ class genNameNode():
             else:
                 # object will already be in eax
                 result += p("call", "H__Null_Check")
-                self.code += p("add", "eax", self.nodeLink.offset)
+                result += p("add", "eax", self.nodeLink.offset)
         return result