Index: /trunk/src/kmk/kmkbuiltin/install.c
===================================================================
--- /trunk/src/kmk/kmkbuiltin/install.c	(revision 2479)
+++ /trunk/src/kmk/kmkbuiltin/install.c	(revision 2480)
@@ -346,5 +346,6 @@
                     to_sb.st_dev != 0 &&
 		    to_sb.st_ino == from_sb.st_ino &&
-		    to_sb.st_ino != 0)
+		    to_sb.st_ino != 0 &&
+		    !hard_link_files_when_possible)
 			return errx(EX_USAGE,
 			            "%s and %s are the same file", *argv, to_name);
@@ -448,5 +449,6 @@
 		} else if (safecopy) {
 			why_not = "safe copy (-S)";
-		} else if (mode_given && mode != (from_sb.st_mode & ALLPERMS)) {
+		} else if (mode != (from_sb.st_mode & ALLPERMS)) {
+			printf("mode=%04o st_mode=%04o (%s)\n", mode, (from_sb.st_mode & ALLPERMS), from_name);
 			why_not = "mode mismatch";
 		} else if (uid != (uid_t)-1 && gid != from_sb.st_uid) {
Index: /trunk/src/kmk/variable.c
===================================================================
--- /trunk/src/kmk/variable.c	(revision 2479)
+++ /trunk/src/kmk/variable.c	(revision 2480)
@@ -1299,5 +1299,5 @@
   && defined (KMK_HELPERS)
   (void) define_variable ("KMK_FEATURES", 12,
-                          "append-dash-n abspath includedep-queue"
+                          "append-dash-n abspath includedep-queue install-hard-linking"
                           " rsort"
                           " abspathex"
@@ -1327,5 +1327,5 @@
 # else /* MSC can't deal with strings mixed with #if/#endif, thus the slow way. */
 #  error "All features should be enabled by default!"
-  strcpy (buf, "append-dash-n abspath includedep-queue");
+  strcpy (buf, "append-dash-n abspath includedep-queue install-hard-linking");
 #  if defined (CONFIG_WITH_RSORT)
   strcat (buf, " rsort");
