diff --git a/MemberNodes.py b/MemberNodes.py
index 075604174100ef3f2e8617ef20362c9a3e1ac0ec..cd982e71ff8ebe98b1aa7a3df9df0b690f6f196a 100644
--- a/MemberNodes.py
+++ b/MemberNodes.py
@@ -222,6 +222,10 @@ class MethodNode(ASTNode):
         self.label = "M_" + self.typeName + "_" + self.name + "_" + self.paramTypes
         self.code = pLabel(self.typeName + "_" + self.name + "_" + self.paramTypes, "method")
 
+        # params
+        for i, param in enumerate(self.params):
+            param.offset = i * 4 + 8
+
         if self.body:
 
             bodyCode = ""
diff --git a/NameNode.py b/NameNode.py
index 55033f041430270356258dcbe7554d41c1b985d1..82b0fe0d6b0f6e51e77c27da63894d726fdf1572 100644
--- a/NameNode.py
+++ b/NameNode.py
@@ -257,7 +257,9 @@ class NameNode(ASTNode):
     def codeGen(self):
         self.code = ""
         if self.prefixLink.__class__.__name__ == "VarDclNode":
-            self.code = p("mov", "eax", "[ebp - " + str(self.prefixLink.offset) + "]", "access local var" + self.name)
+            self.code = p("mov", "eax", "[ebp - " + str(self.prefixLink.offset) + "]", "access local var " + self.name)
+        if self.prefixLink.__class__.__name__ == "ParamNode":
+            self.code = p("mov", "eax", "[ebp + " + str(self.prefixLink.offset) + "]", "access param " + self.name)
 
 # helper
 def checkProtected(dcl, usage):
diff --git a/UnitNodes.py b/UnitNodes.py
index a5016def72874d66d3e2d1379b7f8105ebe79f05..606114766223e0f486d3e7238a877ad841611c2f 100644
--- a/UnitNodes.py
+++ b/UnitNodes.py
@@ -100,6 +100,7 @@ class ParamNode(ASTNode):
         self.env = None
         self.children = [self.paramType]
         self.typeName = typeName
+        self.offset = 0 # offset on the stack
 
     def checkType(self):
         self.myType = self.paramType.myType