diff --git a/src/engine/execute.js b/src/engine/execute.js
index ac2ccc28a..721ef0b73 100644
--- a/src/engine/execute.js
+++ b/src/engine/execute.js
@@ -98,8 +98,24 @@ var execute = function (sequencer, thread, blockId, isInput) {
         switchedStack = true;
     };
 
+    // Generate values for arguments (inputs).
     var argValues = {};
 
+    // Add all fields on this block to the argValues.
+    var fields = runtime.blocks.getFields(blockId);
+    for (var fieldName in fields) {
+        argValues[fieldName] = fields[fieldName];
+    }
+
+    // Recursively evaluate input blocks.
+    var inputs = runtime.blocks.getInputs(blockId);
+    for (var inputName in inputs) {
+        var input = inputs[inputName];
+        var inputBlockId = input.block;
+        var result = execute(sequencer, thread, inputBlockId, true);
+        argValues[input.name] = result;
+    }
+
     // Start showing run feedback in the editor.
     runtime.glowBlock(blockId, true);