--- savefile.org.c	2011-07-03 13:14:00.000000000 -0500
+++ savefile.c	2011-07-06 17:36:35.000000000 -0500
@@ -370,22 +370,28 @@
 bool savefile_save(const char *path)
 {
 	ang_file *file;
-
+  int count = 0;
 	char new_savefile[1024];
 	char old_savefile[1024];
 
 	/* New savefile */
-	strnfmt(new_savefile, sizeof(new_savefile), "%s.new", path);
-	strnfmt(old_savefile, sizeof(old_savefile), "%s.old", path);
-
+	strnfmt(old_savefile, sizeof(old_savefile), "%s%u.old", path,Rand_simple(1000000));
+  while (file_exists(old_savefile) && (count++ < 100)) {
+    strnfmt(old_savefile, sizeof(old_savefile), "%s%u%u.old", path,Rand_simple(1000000),count);
+  }
+  count = 0;
 	/* Make sure that the savefile doesn't already exist */
-	safe_setuid_grab();
+	/*safe_setuid_grab();
 	file_delete(new_savefile);
 	file_delete(old_savefile);
-	safe_setuid_drop();
+	safe_setuid_drop();*/
 
 	/* Open the savefile */
 	safe_setuid_grab();
+	strnfmt(new_savefile, sizeof(new_savefile), "%s%u.new", path,Rand_simple(1000000));
+  while (file_exists(new_savefile) && (count++ < 100)) {
+    strnfmt(new_savefile, sizeof(new_savefile), "%s%u%u.new", path,Rand_simple(1000000),count);
+  }
 	file = file_open(new_savefile, MODE_WRITE, FTYPE_SAVE);
 	safe_setuid_drop();
 
@@ -416,18 +422,22 @@
 				file_move(old_savefile, savefile);
 			else
 				file_delete(old_savefile);
-		}
+		} 
 
 		safe_setuid_drop();
 
 		return err ? FALSE : TRUE;
 	}
 
-	/* Delete temp file */
-	safe_setuid_grab();
-	file_delete(new_savefile);
-	safe_setuid_drop();
-
+	/* Delete temp file if the save failed */
+	if (file)
+	{
+    /* file is no longer valid, but it still points to a non zero
+     * value if the file was created above */
+	  safe_setuid_grab();
+	  file_delete(new_savefile);
+	  safe_setuid_drop();
+  }
 	return FALSE;
 }
 
