diff --git a/src/Makefile.in b/src/Makefile.in
index 250e7c9bbc1ab3e655a1dd0efbd2a0d204f3747c..14b01a035ebab656a8bcf64f71c03d582eb44026 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,5 +1,5 @@
 #
-# $Id: Makefile.in,v 1.215 2000/10/30 19:01:22 grubba Exp $
+# $Id: Makefile.in,v 1.216 2000/11/25 16:32:31 grubba Exp $
 #
 
 # This line is needed on some machines.
@@ -533,6 +533,20 @@ las.o: $(SRCDIR)/treeopt.h
 
 las_t.o: las.c
 
+# This dependency is here to make sure that lexer[012].h are generated.
+# The reason for the split is that some compilers (read lc) generate
+# better code then. Strange, but true.
+lex.o: lexer0.h lexer1.h lexer2.h
+
+lexer0.h: lexer.h
+	cp "$<" "$@"
+
+lexer1.h: lexer.h
+	cp "$<" "$@"
+
+lexer2.h: lexer.h
+	cp "$<" "$@"
+
 # All the $(POBJ) dependencies, except tpike. See blurb at pike target.
 stamp-tpike-predep: $(SRCDIR)/peep.in $(TMP_BINDIR)/mkpeep.pike peep.c $(SRCDIR)/UnicodeData.txt $(TMP_BINDIR)/make_ci.pike builtin_functions.c $(SRCDIR)/treeopt.in $(TMP_BINDIR)/mktreeopt.pike las.c
 	@echo foo > stamp-tpike-predep
diff --git a/src/lex.c b/src/lex.c
index 298c66a4b12dd1a8478a3ca0af1ea46baf950263..87d7020beb2366cd3710c6b8246536ebd858fe21 100644
--- a/src/lex.c
+++ b/src/lex.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: lex.c,v 1.82 2000/10/30 19:01:21 grubba Exp $");
+RCSID("$Id: lex.c,v 1.83 2000/11/25 16:32:31 grubba Exp $");
 #include "language.h"
 #include "array.h"
 #include "lex.h"
@@ -294,13 +294,13 @@ struct lex lex;
 /* Make lexers for shifts 0, 1 and 2. */
 
 #define SHIFT	0
-#include "lexer.h"
+#include "lexer0.h"
 #undef SHIFT
 #define SHIFT	1
-#include "lexer.h"
+#include "lexer1.h"
 #undef SHIFT
 #define SHIFT	2
-#include "lexer.h"
+#include "lexer2.h"
 #undef SHIFT
 
 int yylex(YYSTYPE *yylval)