diff --git a/src/interpret.c b/src/interpret.c
index 483a3abab668b09c6ee098311400d4870dd6231e..e505d0f06d513aa19826044c7fa33226ed2e44a9 100644
--- a/src/interpret.c
+++ b/src/interpret.c
@@ -981,6 +981,8 @@ void apply_low(struct object *o, int fun, int args)
     clear_svalues(sp, num_locals - args);
     sp += num_locals - args;
 #ifdef DEBUG
+    if(num_locals < num_args)
+      fatal("Wrong number of arguments or locals in function def.\n");
     fp->num_locals=num_locals;
     fp->num_args=num_args;
 #endif
diff --git a/src/language.y b/src/language.y
index 9d0cbc9fae7ce17071b2e1fb3d62636179a3626b..aca0a19b5b7c7f38131261126e945a84c9f91058 100644
--- a/src/language.y
+++ b/src/language.y
@@ -1137,6 +1137,7 @@ void free_all_local_names()
     local_variables->variable[e].type=0;
   }
   local_variables->current_number_of_locals = 0;
+  local_variables->max_number_of_locals = 0;
 }
 
 static void push_locals()
diff --git a/src/program.c b/src/program.c
index a46c0d3842cfddb3fa7913b393c59afca2e6df1b..a801176e4af60e6d66d308bab3042191e774e37b 100644
--- a/src/program.c
+++ b/src/program.c
@@ -116,9 +116,10 @@ void start_new_program()
   low_my_binary_strcat((char *)&name,sizeof(name),&inherit_names);
   num_parse_error=0;
 
-    local_variables=ALLOC_STRUCT(locals);
+  local_variables=ALLOC_STRUCT(locals);
   local_variables->next=0;
   local_variables->current_number_of_locals=0;
+  local_variables->max_number_of_locals=0;
   local_variables->current_type=0;
   local_variables->current_return_type=0;
 }
@@ -534,7 +535,6 @@ void set_exit_callback(void (*exit)(char *,struct object *))
 }
 
 
-
 int low_reference_inherited_identifier(int e,struct lpc_string *name)
 {
   struct reference funp;