diff --git a/bin/install.pike b/bin/install.pike
index 2480860f62cc021198c40900c08678a4e8c9296d..ac372ab6a0da9c3eb0242d28682c6f87ac0fa04e 100644
--- a/bin/install.pike
+++ b/bin/install.pike
@@ -1,6 +1,7 @@
 #!/usr/local/bin/pike
 
 int last_len;
+int redump_all;
 string pike;
 array(string) to_dump=({});
 
@@ -57,17 +58,16 @@ int compare_files(string a,string b)
   return 0;
 }
 
-void install_file(string from,
-		 string to,
-		 void|int mode,
-		 void|int dump)
+int low_install_file(string from,
+		     string to,
+		     void|int mode)
 {
   status("installing",to);
 
   if(compare_files(from,to))
   {
     status("installing",to,"Already installed");
-    return;
+    return 0;
   }
   mkdirhier(dirname(to));
   switch(query_num_arg())
@@ -94,7 +94,16 @@ void install_file(string from,
   if(!mv(tmpfile,to))
     fail("mv(%s,%s)",tmpfile,to);
 
-  if(dump)
+  return 1;
+}
+
+int install_file(string from,
+		     string to,
+		     void|int mode,
+		     void|int dump)
+{
+  int ret=install_file(from,to,mode);
+  if((ret || redump_all) && dump)
   {
     switch(reverse(to)[..4])
     {
@@ -104,6 +113,7 @@ void install_file(string from,
 	to_dump+=({to});
     }
   }
+  return ret;
 }
 
 string stripslash(string s)
@@ -181,7 +191,10 @@ int main(int argc, string *argv)
   mixed err=catch {
     pike=combine_path(getenv("exec_prefix"),"pike");
     write("\nInstalling Pike... in %s\n\n",getenv("prefix"));
-    install_file("pike",pike);
+    if(install_file("pike",pike))
+    {
+      redump_all=1;
+    }
     install_file("hilfe",combine_path(getenv("exec_prefix"),"hilfe"));
     install_dir(getenv("TMP_LIBDIR"),getenv("lib_prefix"),1);
     install_dir(getenv("LIBDIR_SRC"),getenv("lib_prefix"),1);
@@ -216,7 +229,7 @@ int main(int argc, string *argv)
   string master=combine_path(getenv("lib_prefix"),"master.pike");
   mixed s1=file_stat(master);
   mixed s2=file_stat(master+".o");
-  if(!s1 || !s2 || s1[3]>=s2[3])
+  if(!s1 || !s2 || s1[3]>=s2[3] || redump_all)
   {
     Process.create_process( ({pike,"-m",combine_path(getenv("SRCDIR"),"dumpmaster.pike"),master}))->wait();
   }
diff --git a/src/dumpmodule.pike b/src/dumpmodule.pike
index d15ccf51d5e14799f1472e9fe3cffef762c32584..571cc00a4c3e96d07af40762451972620d323e48 100755
--- a/src/dumpmodule.pike
+++ b/src/dumpmodule.pike
@@ -92,6 +92,7 @@ int main(int argc, string *argv)
     {
       werror(file +": ");
       mixed err=catch {
+	rm(file+".o"); // Make sure no old files are left
 	if(mixed s=file_stat(file))
 	{
 	  if(s[1]<=0)