diff --git a/Config.in b/Config.in
index d9c8231..140572e 100644
--- a/Config.in
+++ b/Config.in
@@ -128,8 +128,9 @@
 	default n
 	depends on FEATURE_INSTALLER
 	help
-	  Disable use of /usr. busybox --install will install applets
-	  only to /bin and /sbin, never to /usr/bin or /usr/sbin.
+	  Disable use of /usr. busybox --install and "make install"
+	  will install applets only to /bin and /sbin,
+	  never to /usr/bin or /usr/sbin.
 
 config LOCALE_SUPPORT
 	bool "Enable locale support (system needs locale for this to work)"
diff --git a/Makefile b/Makefile
index 1a9b676..f690ff4 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 18
-SUBLEVEL = 0
+SUBLEVEL = 1
 EXTRAVERSION =
 NAME = Unnamed
 
diff --git a/include/applets.src.h b/include/applets.src.h
index 06b4fff..f4fab53 100644
--- a/include/applets.src.h
+++ b/include/applets.src.h
@@ -56,6 +56,11 @@
 # define APPLET_NOFORK(name,main,l,s,name2)  { #name, #main, l, s, 1, 1 },
 #endif
 
+#if ENABLE_INSTALL_NO_USR
+# define _BB_DIR_USR_BIN _BB_DIR_BIN
+# define _BB_DIR_USR_SBIN _BB_DIR_SBIN
+#endif
+
 
 INSERT
 IF_TEST(APPLET_NOFORK([,  test, _BB_DIR_USR_BIN, _BB_SUID_DROP, test))
diff --git a/libbb/pw_encrypt_sha.c b/libbb/pw_encrypt_sha.c
index e46848b..8aeaaca 100644
--- a/libbb/pw_encrypt_sha.c
+++ b/libbb/pw_encrypt_sha.c
@@ -3,7 +3,7 @@
  */
 
 /* Prefix for optional rounds specification.  */
-static const char str_rounds[] = "rounds=%u$";
+static const char str_rounds[] ALIGN1 = "rounds=%u$";
 
 /* Maximum salt string length.  */
 #define SALT_LEN_MAX 16
@@ -19,8 +19,8 @@
 sha_crypt(/*const*/ char *key_data, /*const*/ char *salt_data)
 {
 	void (*sha_begin)(void *ctx) FAST_FUNC;
-	void (*sha_hash)(const void *buffer, size_t len, void *ctx) FAST_FUNC;
-	void (*sha_end)(void *resbuf, void *ctx) FAST_FUNC;
+	void (*sha_hash)(void *ctx, const void *buffer, size_t len) FAST_FUNC;
+	void (*sha_end)(void *ctx, void *resbuf) FAST_FUNC;
 	int _32or64;
 
 	char *result, *resptr;
@@ -103,40 +103,40 @@
 
 	/* Add KEY, SALT.  */
 	sha_begin(&ctx);
-	sha_hash(key_data, key_len, &ctx);
-	sha_hash(salt_data, salt_len, &ctx);
+	sha_hash(&ctx, key_data, key_len);
+	sha_hash(&ctx, salt_data, salt_len);
 
 	/* Compute alternate SHA sum with input KEY, SALT, and KEY.
 	   The final result will be added to the first context.  */
 	sha_begin(&alt_ctx);
-	sha_hash(key_data, key_len, &alt_ctx);
-	sha_hash(salt_data, salt_len, &alt_ctx);
-	sha_hash(key_data, key_len, &alt_ctx);
-	sha_end(alt_result, &alt_ctx);
+	sha_hash(&alt_ctx, key_data, key_len);
+	sha_hash(&alt_ctx, salt_data, salt_len);
+	sha_hash(&alt_ctx, key_data, key_len);
+	sha_end(&alt_ctx, alt_result);
 
 	/* Add result of this to the other context.  */
 	/* Add for any character in the key one byte of the alternate sum.  */
 	for (cnt = key_len; cnt > _32or64; cnt -= _32or64)
-		sha_hash(alt_result, _32or64, &ctx);
-	sha_hash(alt_result, cnt, &ctx);
+		sha_hash(&ctx, alt_result, _32or64);
+	sha_hash(&ctx, alt_result, cnt);
 
 	/* Take the binary representation of the length of the key and for every
 	   1 add the alternate sum, for every 0 the key.  */
 	for (cnt = key_len; cnt != 0; cnt >>= 1)
 		if ((cnt & 1) != 0)
-			sha_hash(alt_result, _32or64, &ctx);
+			sha_hash(&ctx, alt_result, _32or64);
 		else
-			sha_hash(key_data, key_len, &ctx);
+			sha_hash(&ctx, key_data, key_len);
 
 	/* Create intermediate result.  */
-	sha_end(alt_result, &ctx);
+	sha_end(&ctx, alt_result);
 
 	/* Start computation of P byte sequence.  */
 	/* For every character in the password add the entire password.  */
 	sha_begin(&alt_ctx);
 	for (cnt = 0; cnt < key_len; ++cnt)
-		sha_hash(key_data, key_len, &alt_ctx);
-	sha_end(temp_result, &alt_ctx);
+		sha_hash(&alt_ctx, key_data, key_len);
+	sha_end(&alt_ctx, temp_result);
 
 	/* NB: past this point, raw key_data is not used anymore */
 
@@ -153,8 +153,8 @@
 	/* For every character in the password add the entire password.  */
 	sha_begin(&alt_ctx);
 	for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt)
-		sha_hash(salt_data, salt_len, &alt_ctx);
-	sha_end(temp_result, &alt_ctx);
+		sha_hash(&alt_ctx, salt_data, salt_len);
+	sha_end(&alt_ctx, temp_result);
 
 	/* NB: past this point, raw salt_data is not used anymore */
 
@@ -174,22 +174,22 @@
 
 		/* Add key or last result.  */
 		if ((cnt & 1) != 0)
-			sha_hash(p_bytes, key_len, &ctx);
+			sha_hash(&ctx, p_bytes, key_len);
 		else
-			sha_hash(alt_result, _32or64, &ctx);
+			sha_hash(&ctx, alt_result, _32or64);
 		/* Add salt for numbers not divisible by 3.  */
 		if (cnt % 3 != 0)
-			sha_hash(s_bytes, salt_len, &ctx);
+			sha_hash(&ctx, s_bytes, salt_len);
 		/* Add key for numbers not divisible by 7.  */
 		if (cnt % 7 != 0)
-			sha_hash(p_bytes, key_len, &ctx);
+			sha_hash(&ctx, p_bytes, key_len);
 		/* Add key or last result.  */
 		if ((cnt & 1) != 0)
-			sha_hash(alt_result, _32or64, &ctx);
+			sha_hash(&ctx, alt_result, _32or64);
 		else
-			sha_hash(p_bytes, key_len, &ctx);
+			sha_hash(&ctx, p_bytes, key_len);
 
-		sha_end(alt_result, &ctx);
+		sha_end(&ctx, alt_result);
 	}
 
 	/* Append encrypted password to result buffer */
diff --git a/miscutils/chat.c b/miscutils/chat.c
index 8b151fd..d8370a9 100644
--- a/miscutils/chat.c
+++ b/miscutils/chat.c
@@ -175,23 +175,24 @@
 				llist_add_to_end(&aborts, arg);
 #if ENABLE_FEATURE_CHAT_CLR_ABORT
 			} else if (DIR_CLR_ABORT == key) {
+				llist_t *l;
 				// remove the string from abort conditions
 				// N.B. gotta refresh maximum length too...
-#if ENABLE_FEATURE_CHAT_VAR_ABORT_LEN
+# if ENABLE_FEATURE_CHAT_VAR_ABORT_LEN
 				max_abort_len = 0;
-#endif
-				for (llist_t *l = aborts; l; l = l->link) {
-#if ENABLE_FEATURE_CHAT_VAR_ABORT_LEN
+# endif
+				for (l = aborts; l; l = l->link) {
+# if ENABLE_FEATURE_CHAT_VAR_ABORT_LEN
 					size_t len = strlen(l->data);
-#endif
-					if (!strcmp(arg, l->data)) {
+# endif
+					if (strcmp(arg, l->data) == 0) {
 						llist_unlink(&aborts, l);
 						continue;
 					}
-#if ENABLE_FEATURE_CHAT_VAR_ABORT_LEN
+# if ENABLE_FEATURE_CHAT_VAR_ABORT_LEN
 					if (len > max_abort_len)
 						max_abort_len = len;
-#endif
+# endif
 				}
 #endif
 			} else if (DIR_TIMEOUT == key) {
diff --git a/runit/runsvdir.c b/runit/runsvdir.c
index e77eeff..1666642 100644
--- a/runit/runsvdir.c
+++ b/runit/runsvdir.c
@@ -312,8 +312,11 @@
 						last_mtime = s.st_mtime;
 						last_dev = s.st_dev;
 						last_ino = s.st_ino;
-						//if (now <= mtime)
-						//	sleep(1);
+						/* if the svdir changed this very second, wait until the
+						 * next second, because we won't be able to detect more
+						 * changes within this second */
+						while (time(NULL) == last_mtime)
+							usleep(100000);
 						need_rescan = do_rescan();
 						while (fchdir(curdir) == -1) {
 							warn2_cannot("change directory, pausing", "");
diff --git a/scripts/gen_build_files.sh b/scripts/gen_build_files.sh
index 130269b..620f495 100755
--- a/scripts/gen_build_files.sh
+++ b/scripts/gen_build_files.sh
@@ -18,14 +18,14 @@
 	local src="$1" dst="$2" header="$3" insert="$4"
 	#chk "${dst}"
 	(
-		echo "${header}"
+		printf "%s\n" "${header}"
 		if grep -qs '^INSERT$' "${src}"; then
 			sed -n '1,/^INSERT$/p' "${src}"
-			echo "${insert}"
+			printf "%s\n" "${insert}"
 			sed -n '/^INSERT$/,$p' "${src}"
 		else
 			if [ -n "${insert}" ]; then
-				echo "ERROR: INSERT line missing in: ${src}" 1>&2
+				printf "%s\n" "ERROR: INSERT line missing in: ${src}" 1>&2
 			fi
 			cat "${src}"
 		fi
diff --git a/shell/hush.c b/shell/hush.c
index 26a5074..fa7e4f5 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -6995,27 +6995,30 @@
 
 #if ENABLE_HUSH_LOOPS
 	/* Check syntax for "for" */
-	for (struct pipe *cpipe = pi; cpipe; cpipe = cpipe->next) {
-		if (cpipe->res_word != RES_FOR && cpipe->res_word != RES_IN)
-			continue;
-		/* current word is FOR or IN (BOLD in comments below) */
-		if (cpipe->next == NULL) {
-			syntax_error("malformed for");
-			debug_leave();
-			debug_printf_exec("run_list lvl %d return 1\n", G.run_list_level);
-			return 1;
-		}
-		/* "FOR v; do ..." and "for v IN a b; do..." are ok */
-		if (cpipe->next->res_word == RES_DO)
-			continue;
-		/* next word is not "do". It must be "in" then ("FOR v in ...") */
-		if (cpipe->res_word == RES_IN /* "for v IN a b; not_do..."? */
-		 || cpipe->next->res_word != RES_IN /* FOR v not_do_and_not_in..."? */
-		) {
-			syntax_error("malformed for");
-			debug_leave();
-			debug_printf_exec("run_list lvl %d return 1\n", G.run_list_level);
-			return 1;
+	{
+		struct pipe *cpipe;
+		for (cpipe = pi; cpipe; cpipe = cpipe->next) {
+			if (cpipe->res_word != RES_FOR && cpipe->res_word != RES_IN)
+				continue;
+			/* current word is FOR or IN (BOLD in comments below) */
+			if (cpipe->next == NULL) {
+				syntax_error("malformed for");
+				debug_leave();
+				debug_printf_exec("run_list lvl %d return 1\n", G.run_list_level);
+				return 1;
+			}
+			/* "FOR v; do ..." and "for v IN a b; do..." are ok */
+			if (cpipe->next->res_word == RES_DO)
+				continue;
+			/* next word is not "do". It must be "in" then ("FOR v in ...") */
+			if (cpipe->res_word == RES_IN /* "for v IN a b; not_do..."? */
+			 || cpipe->next->res_word != RES_IN /* FOR v not_do_and_not_in..."? */
+			) {
+				syntax_error("malformed for");
+				debug_leave();
+				debug_printf_exec("run_list lvl %d return 1\n", G.run_list_level);
+				return 1;
+			}
 		}
 	}
 #endif
