diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java
index 43acc8fe92ba7d6387496eae4255af03fc90b016..f70984c2016d6cd135b78b5e56c53a1329a1ff9b 100644
--- a/src/main/java/chocopy/pa3/CodeGenImpl.java
+++ b/src/main/java/chocopy/pa3/CodeGenImpl.java
@@ -352,8 +352,9 @@ public class CodeGenImpl extends CodeGenBase {
             stmt.dispatch(stmtAnalyzer);
         }
 
-        backend.emitMV(A0, ZERO, "Returning None implicitly");
         betterBackend.emitFunctionEnd(funcInfo.getFuncName(), stmtAnalyzer.regMgr, "BEGIN FUNCTION");
+        // the following instructions are ignored.
+        // backend.emitMV(A0, ZERO, "Returning None implicitly");
         backend.emitLocalLabel(stmtAnalyzer.epilogue, "Epilogue");
 
         // FIXME: {... reset fp etc. ...}
@@ -424,8 +425,12 @@ public class CodeGenImpl extends CodeGenBase {
             // this is wrong, and you'll have to fix it.
             // This is here just to demonstrate how to emit a
             // RISC-V instruction.
-            backend.emitMV(ZERO, ZERO, "No-op");
-            return null;
+            RiscVBackend.Register returnValReg = node.value.dispatch(this);
+            if(returnValReg == null)
+                return null;
+            backend.emitMV(A0, returnValReg, "put return value!");
+            regMgr.returnOne(returnValReg);
+            return null; // Statement always return null.
         }
 
         // FIXME: More, of course.