diff --git a/gcc/cobol/genapi.cc b/gcc/cobol/genapi.cc
index 4b2e3ad75a2d48ed1c751088a8f76a52181bbfbb..ca520cf062d0480f177fcdbe4122f143b92e9986 100644
--- a/gcc/cobol/genapi.cc
+++ b/gcc/cobol/genapi.cc
@@ -5469,6 +5469,21 @@ parser_division(cbl_division_t division,
 
         // It makes more sense if you don't think about it too hard.
 
+
+        // We need to be able to restore prior arguments when doing recursive
+        // calls:
+        IF( member(args[i].refer.field->var_decl_node, "data"),
+            ne_op,
+            gg_cast(UCHAR_P, null_pointer_node) )
+          {
+          gg_call(VOID,
+                  "__gg__push_local_variable",
+                  1,
+                  gg_get_address_of(args[i].refer.field->var_decl_node));
+          }
+        ELSE
+          ENDIF
+
         tree base = gg_define_variable(UCHAR_P);
         gg_assign(rt_i, build_int_cst_type(INT, i));
         IF( rt_i, lt_op , var_decl_call_parameter_count )