diff --git a/ChangeLog b/ChangeLog
index c91865c7bd24f7283091f122b07c9c63f7d8a120..e98a274c7a095d28328a3ea845d8655a89f9a192 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,9 @@ CVS code -
 	- We now run check on result of lstat(), not stat(), to be
 	  safer.  New variable anyexists, we use still use realexists
 	  later in the program.
+	- OOPS, line up link/unlink/rename check if conditional with 
+	  top if conditional.  Option -l has been broken for 9 versions,
+	  no one noticed?!
 - winio.c:
   edit_add()
 	- Off by one display error (fix by Rocco Corsi).
diff --git a/files.c b/files.c
index c0299e4060544ce6db580767bb7d05c09bca3516..c825844941f661893d57466bb72e1152c1367dd1 100644
--- a/files.c
+++ b/files.c
@@ -431,7 +431,7 @@ int write_file(char *name, int tmp)
 	return -1;
     }
 
-    if (!ISSET(FOLLOW_SYMLINKS) || tmp) {
+    if ((!ISSET(FOLLOW_SYMLINKS) && S_ISLNK(st.st_mode)) || tmp) {
 	if (realexists == -1) {
 	    /* Use default umask as file permisions if file is a new file. */
 	    mask = umask(0);