diff --git a/src/auto/configure b/src/auto/configure
index 5659d38..5a55df9 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -3818,6 +3818,7 @@
     fi
   fi
 
+  SCHEME_INC=
   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
     echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include" >&5
 echo $ECHO_N "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include... $ECHO_C" >&6
@@ -3827,7 +3828,17 @@
     else
       echo "$as_me:$LINENO: result: \"no\"" >&5
 echo "${ECHO_T}\"no\"" >&6
-      vi_cv_path_mzscheme_pfx=
+      echo "$as_me:$LINENO: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include" >&5
+echo $ECHO_N "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/plt/include... $ECHO_C" >&6
+      if test -f $vi_cv_path_mzscheme_pfx/include/plt/scheme.h; then
+	echo "$as_me:$LINENO: result: \"yes\"" >&5
+echo "${ECHO_T}\"yes\"" >&6
+	SCHEME_INC=/plt
+      else
+	echo "$as_me:$LINENO: result: \"no\"" >&5
+echo "${ECHO_T}\"no\"" >&6
+	vi_cv_path_mzscheme_pfx=
+      fi
     fi
   fi
 
@@ -3843,8 +3854,11 @@
 	MZSCHEME_LIBS="$MZSCHEME_LIBS -R ${vi_cv_path_mzscheme_pfx}/lib"
       fi
     fi
-    MZSCHEME_CFLAGS="-I${vi_cv_path_mzscheme_pfx}/include   \
-      -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/collects\"'"
+    if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
+      SCHEME_COLLECTS=lib/plt/
+    fi
+    MZSCHEME_CFLAGS="-I${vi_cv_path_mzscheme_pfx}/include${SCHEME_INC}   \
+      -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'"
     MZSCHEME_SRC="if_mzsch.c"
     MZSCHEME_OBJ="objects/if_mzsch.o"
     MZSCHEME_PRO="if_mzsch.pro"
@@ -4014,7 +4028,7 @@
       LDFLAGS=$ldflags_save
       if test $perl_ok = yes; then
 	if test "X$perlcppflags" != "X"; then
-	  	  PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
+	  	  PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[^ ]*//'`
 	fi
 	if test "X$perlldflags" != "X"; then
 	  LDFLAGS="$perlldflags $LDFLAGS"
diff --git a/src/proto/eval.pro b/src/proto/eval.pro
index 292e563..c6097c4 100644
--- a/src/proto/eval.pro
+++ b/src/proto/eval.pro
@@ -1,99 +1,99 @@
 /* eval.c */
-extern void eval_init __ARGS((void));
-extern void eval_clear __ARGS((void));
-extern char_u *func_name __ARGS((void *cookie));
-extern linenr_T *func_breakpoint __ARGS((void *cookie));
-extern int *func_dbg_tick __ARGS((void *cookie));
-extern int func_level __ARGS((void *cookie));
-extern int current_func_returned __ARGS((void));
-extern void set_internal_string_var __ARGS((char_u *name, char_u *value));
-extern int var_redir_start __ARGS((char_u *name, int append));
-extern void var_redir_str __ARGS((char_u *value, int len));
-extern void var_redir_stop __ARGS((void));
-extern int eval_charconvert __ARGS((char_u *enc_from, char_u *enc_to, char_u *fname_from, char_u *fname_to));
-extern int eval_printexpr __ARGS((char_u *fname, char_u *args));
-extern void eval_diff __ARGS((char_u *origfile, char_u *newfile, char_u *outfile));
-extern void eval_patch __ARGS((char_u *origfile, char_u *difffile, char_u *outfile));
-extern int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
-extern char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
-extern int skip_expr __ARGS((char_u **pp));
-extern char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist));
-extern char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
-extern int eval_to_number __ARGS((char_u *expr));
-extern list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
-extern int get_spellword __ARGS((list_T *list, char_u **pp));
-extern typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
-extern void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
-extern long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
-extern void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
-extern void *save_funccal __ARGS((void));
-extern void restore_funccal __ARGS((void *vfc));
-extern void prof_child_enter __ARGS((proftime_T *tm));
-extern void prof_child_exit __ARGS((proftime_T *tm));
-extern int eval_foldexpr __ARGS((char_u *arg, int *cp));
-extern void ex_let __ARGS((exarg_T *eap));
-extern void *eval_for_line __ARGS((char_u *arg, int *errp, char_u **nextcmdp, int skip));
-extern int next_for_item __ARGS((void *fi_void, char_u *arg));
-extern void free_for_info __ARGS((void *fi_void));
-extern void set_context_for_expression __ARGS((expand_T *xp, char_u *arg, cmdidx_T cmdidx));
-extern void ex_call __ARGS((exarg_T *eap));
-extern void ex_unlet __ARGS((exarg_T *eap));
-extern void ex_lockvar __ARGS((exarg_T *eap));
-extern int do_unlet __ARGS((char_u *name, int forceit));
-extern void del_menutrans_vars __ARGS((void));
-extern char_u *get_user_var_name __ARGS((expand_T *xp, int idx));
-extern list_T *list_alloc __ARGS((void));
-extern void list_unref __ARGS((list_T *l));
-extern void list_free __ARGS((list_T *l, int recurse));
-extern dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
-extern int list_append_dict __ARGS((list_T *list, dict_T *dict));
-extern int garbage_collect __ARGS((void));
-extern dict_T *dict_alloc __ARGS((void));
-extern int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
-extern char_u *get_dict_string __ARGS((dict_T *d, char_u *key, int save));
-extern long get_dict_number __ARGS((dict_T *d, char_u *key));
-extern char_u *get_function_name __ARGS((expand_T *xp, int idx));
-extern char_u *get_expr_name __ARGS((expand_T *xp, int idx));
-extern long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop));
-extern void set_vim_var_nr __ARGS((int idx, long val));
-extern long get_vim_var_nr __ARGS((int idx));
-extern char_u *get_vim_var_str __ARGS((int idx));
-extern void set_vcount __ARGS((long count, long count1));
-extern void set_vim_var_string __ARGS((int idx, char_u *val, int len));
-extern void set_reg_var __ARGS((int c));
-extern char_u *v_exception __ARGS((char_u *oldval));
-extern char_u *v_throwpoint __ARGS((char_u *oldval));
-extern char_u *set_cmdarg __ARGS((exarg_T *eap, char_u *oldarg));
-extern void free_tv __ARGS((typval_T *varp));
-extern void clear_tv __ARGS((typval_T *varp));
-extern long get_tv_number_chk __ARGS((typval_T *varp, int *denote));
-extern char_u *get_tv_string_chk __ARGS((typval_T *varp));
-extern char_u *get_var_value __ARGS((char_u *name));
-extern void new_script_vars __ARGS((scid_T id));
-extern void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
-extern void vars_clear __ARGS((hashtab_T *ht));
-extern void ex_echo __ARGS((exarg_T *eap));
-extern void ex_echohl __ARGS((exarg_T *eap));
-extern void ex_execute __ARGS((exarg_T *eap));
-extern void ex_function __ARGS((exarg_T *eap));
-extern void free_all_functions __ARGS((void));
-extern void func_dump_profile __ARGS((FILE *fd));
-extern char_u *get_user_func_name __ARGS((expand_T *xp, int idx));
-extern void ex_delfunction __ARGS((exarg_T *eap));
-extern void ex_return __ARGS((exarg_T *eap));
-extern int do_return __ARGS((exarg_T *eap, int reanimate, int is_cmd, void *rettv));
-extern void discard_pending_return __ARGS((void *rettv));
-extern char_u *get_return_cmd __ARGS((void *rettv));
-extern char_u *get_func_line __ARGS((int c, void *cookie, int indent));
-extern void func_line_start __ARGS((void *cookie));
-extern void func_line_exec __ARGS((void *cookie));
-extern void func_line_end __ARGS((void *cookie));
-extern int func_has_ended __ARGS((void *cookie));
-extern int func_has_abort __ARGS((void *cookie));
-extern int read_viminfo_varlist __ARGS((vir_T *virp, int writing));
-extern void write_viminfo_varlist __ARGS((FILE *fp));
-extern int store_session_globals __ARGS((FILE *fd));
-extern void last_set_msg __ARGS((scid_T scriptID));
-extern int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen));
-extern char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags));
+void eval_init __ARGS((void));
+void eval_clear __ARGS((void));
+char_u *func_name __ARGS((void *cookie));
+linenr_T *func_breakpoint __ARGS((void *cookie));
+int *func_dbg_tick __ARGS((void *cookie));
+int func_level __ARGS((void *cookie));
+int current_func_returned __ARGS((void));
+void set_internal_string_var __ARGS((char_u *name, char_u *value));
+int var_redir_start __ARGS((char_u *name, int append));
+void var_redir_str __ARGS((char_u *value, int value_len));
+void var_redir_stop __ARGS((void));
+int eval_charconvert __ARGS((char_u *enc_from, char_u *enc_to, char_u *fname_from, char_u *fname_to));
+int eval_printexpr __ARGS((char_u *fname, char_u *args));
+void eval_diff __ARGS((char_u *origfile, char_u *newfile, char_u *outfile));
+void eval_patch __ARGS((char_u *origfile, char_u *difffile, char_u *outfile));
+int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
+char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
+int skip_expr __ARGS((char_u **pp));
+char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist));
+char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
+int eval_to_number __ARGS((char_u *expr));
+list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+int get_spellword __ARGS((list_T *list, char_u **pp));
+typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
+void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
+void *save_funccal __ARGS((void));
+void restore_funccal __ARGS((void *vfc));
+void prof_child_enter __ARGS((proftime_T *tm));
+void prof_child_exit __ARGS((proftime_T *tm));
+int eval_foldexpr __ARGS((char_u *arg, int *cp));
+void ex_let __ARGS((exarg_T *eap));
+void *eval_for_line __ARGS((char_u *arg, int *errp, char_u **nextcmdp, int skip));
+int next_for_item __ARGS((void *fi_void, char_u *arg));
+void free_for_info __ARGS((void *fi_void));
+void set_context_for_expression __ARGS((expand_T *xp, char_u *arg, cmdidx_T cmdidx));
+void ex_call __ARGS((exarg_T *eap));
+void ex_unlet __ARGS((exarg_T *eap));
+void ex_lockvar __ARGS((exarg_T *eap));
+int do_unlet __ARGS((char_u *name, int forceit));
+void del_menutrans_vars __ARGS((void));
+char_u *get_user_var_name __ARGS((expand_T *xp, int idx));
+list_T *list_alloc __ARGS((void));
+void list_unref __ARGS((list_T *l));
+void list_free __ARGS((list_T *l, int recurse));
+dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
+int list_append_dict __ARGS((list_T *list, dict_T *dict));
+int garbage_collect __ARGS((void));
+dict_T *dict_alloc __ARGS((void));
+int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
+char_u *get_dict_string __ARGS((dict_T *d, char_u *key, int save));
+long get_dict_number __ARGS((dict_T *d, char_u *key));
+char_u *get_function_name __ARGS((expand_T *xp, int idx));
+char_u *get_expr_name __ARGS((expand_T *xp, int idx));
+long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop));
+void set_vim_var_nr __ARGS((int idx, long val));
+long get_vim_var_nr __ARGS((int idx));
+char_u *get_vim_var_str __ARGS((int idx));
+void set_vcount __ARGS((long count, long count1));
+void set_vim_var_string __ARGS((int idx, char_u *val, int len));
+void set_reg_var __ARGS((int c));
+char_u *v_exception __ARGS((char_u *oldval));
+char_u *v_throwpoint __ARGS((char_u *oldval));
+char_u *set_cmdarg __ARGS((exarg_T *eap, char_u *oldarg));
+void free_tv __ARGS((typval_T *varp));
+void clear_tv __ARGS((typval_T *varp));
+long get_tv_number_chk __ARGS((typval_T *varp, int *denote));
+char_u *get_tv_string_chk __ARGS((typval_T *varp));
+char_u *get_var_value __ARGS((char_u *name));
+void new_script_vars __ARGS((scid_T id));
+void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
+void vars_clear __ARGS((hashtab_T *ht));
+void ex_echo __ARGS((exarg_T *eap));
+void ex_echohl __ARGS((exarg_T *eap));
+void ex_execute __ARGS((exarg_T *eap));
+void ex_function __ARGS((exarg_T *eap));
+void free_all_functions __ARGS((void));
+void func_dump_profile __ARGS((FILE *fd));
+char_u *get_user_func_name __ARGS((expand_T *xp, int idx));
+void ex_delfunction __ARGS((exarg_T *eap));
+void ex_return __ARGS((exarg_T *eap));
+int do_return __ARGS((exarg_T *eap, int reanimate, int is_cmd, void *rettv));
+void discard_pending_return __ARGS((void *rettv));
+char_u *get_return_cmd __ARGS((void *rettv));
+char_u *get_func_line __ARGS((int c, void *cookie, int indent));
+void func_line_start __ARGS((void *cookie));
+void func_line_exec __ARGS((void *cookie));
+void func_line_end __ARGS((void *cookie));
+int func_has_ended __ARGS((void *cookie));
+int func_has_abort __ARGS((void *cookie));
+int read_viminfo_varlist __ARGS((vir_T *virp, int writing));
+void write_viminfo_varlist __ARGS((FILE *fp));
+int store_session_globals __ARGS((FILE *fd));
+void last_set_msg __ARGS((scid_T scriptID));
+int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen));
+char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags));
 /* vim: set ft=c : */
