diff --git a/Makefile b/Makefile
index 6d0cc38..fc9b3c1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 11
-SUBLEVEL = 1
+SUBLEVEL = 2
 EXTRAVERSION =
 NAME = Unnamed
 
diff --git a/applets/usage_compressed b/applets/usage_compressed
index 551b4b4..05ceafd 100755
--- a/applets/usage_compressed
+++ b/applets/usage_compressed
@@ -14,14 +14,21 @@
 
 echo 'static const char packed_usage[] ALIGN1 = {'
 
-# Extra effort to avoid using "od -t x1": -t is not available
-# in non-CONFIG_DESKTOPed busybox od
+## Breaks on big-endian systems!
+## # Extra effort to avoid using "od -t x1": -t is not available
+## # in non-CONFIG_DESKTOPed busybox od
+## 
+## "$loc/usage" | bzip2 -1 | od -v -x \
+## | $SED -e 's/^[^ ]*//' \
+## | $SED -e 's/ //g' \
+## | grep -v '^$' \
+## | $SED -e 's/\(..\)\(..\)/0x\2,0x\1,/g'
 
-"$loc/usage" | bzip2 -1 | od -v -x \
+"$loc/usage" | bzip2 -1 | od -v -t x1 \
 | $SED -e 's/^[^ ]*//' \
 | $SED -e 's/ //g' \
 | grep -v '^$' \
-| $SED -e 's/\(..\)\(..\)/0x\2,0x\1,/g'
+| $SED -e 's/\(..\)/0x\1,/g'
 
 echo '};'
 echo '#define SIZEOF_usage_messages' `expr 0 + $sz`
diff --git a/coreutils/basename.c b/coreutils/basename.c
index a3085ed..8a05e92 100644
--- a/coreutils/basename.c
+++ b/coreutils/basename.c
@@ -48,5 +48,5 @@
 
 	/* puts(s) will do, but we can do without stdio this way: */
 	s[m++] = '\n';
-	return full_write(STDOUT_FILENO, s, m) == (ssize_t)m;
+	return full_write(STDOUT_FILENO, s, m) != (ssize_t)m;
 }
diff --git a/modutils/insmod.c b/modutils/insmod.c
index 3fbb02b..569adac 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -840,7 +840,8 @@
 				ElfW(RelM) *rel, ElfW(Addr) v)
 {
 #if defined(__arm__) || defined(__i386__) || defined(__mc68000__) \
- || defined(__sh__) || defined(__s390__) || defined(__x86_64__)
+ || defined(__sh__) || defined(__s390__) || defined(__x86_64__) \
+ || defined(__powerpc__) || defined(__mips__)
 	struct arch_file *ifile = (struct arch_file *) f;
 #endif
 	enum obj_reloc ret = obj_reloc_ok;
diff --git a/shell/ash.c b/shell/ash.c
index dd20fe3..45b0070 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -1569,14 +1569,14 @@
 static char *optptr;                   /* used by nextopt */
 
 /*
- * XXX - should get rid of.  have all builtins use getopt(3).  the
- * library getopt must have the BSD extension static variable "optreset"
- * otherwise it can't be used within the shell safely.
+ * XXX - should get rid of. Have all builtins use getopt(3).
+ * The library getopt must have the BSD extension static variable
+ * "optreset", otherwise it can't be used within the shell safely.
  *
- * Standard option processing (a la getopt) for builtin routines.  The
- * only argument that is passed to nextopt is the option string; the
- * other arguments are unnecessary.  It return the character, or '\0' on
- * end of input.
+ * Standard option processing (a la getopt) for builtin routines.
+ * The only argument that is passed to nextopt is the option string;
+ * the other arguments are unnecessary. It returns the character,
+ * or '\0' on end of input.
  */
 static int
 nextopt(const char *optstring)
@@ -1587,13 +1587,20 @@
 
 	p = optptr;
 	if (p == NULL || *p == '\0') {
+		/* We ate entire "-param", take next one */
 		p = *argptr;
-		if (p == NULL || *p != '-' || *++p == '\0')
+		if (p == NULL)
+			return '\0';
+		if (*p != '-')
+			return '\0';
+		if (*++p == '\0') /* just "-" ? */
 			return '\0';
 		argptr++;
-		if (LONE_DASH(p))        /* check for "--" */
+		if (LONE_DASH(p)) /* "--" ? */
 			return '\0';
+		/* p => next "-param" */
 	}
+	/* p => some option char in the middle of a "-param" */
 	c = *p++;
 	for (q = optstring; *q != c;) {
 		if (*q == '\0')
@@ -1602,8 +1609,11 @@
 			q++;
 	}
 	if (*++q == ':') {
-		if (*p == '\0' && (p = *argptr++) == NULL)
-			ash_msg_and_raise_error("no arg for -%c option", c);
+		if (*p == '\0') {
+			p = *argptr++;
+			if (p == NULL)
+				ash_msg_and_raise_error("no arg for -%c option", c);
+		}
 		optionarg = p;
 		p = NULL;
 	}
@@ -7428,8 +7438,10 @@
 		else if (c != 'p')
 			abort();
 #endif
-	if (verify)
+	/* Mimic bash: just "command -v" doesn't complain, it's a nop */
+	if (verify && (*argptr != NULL)) {
 		return describe_command(*argptr, verify - VERIFY_BRIEF);
+	}
 
 	return 0;
 }
@@ -7788,16 +7800,33 @@
 static void
 evaltree(union node *n, int flags)
 {
+
+	struct jmploc *volatile savehandler = exception_handler;
+	struct jmploc jmploc;
 	int checkexit = 0;
 	void (*evalfn)(union node *, int);
-	unsigned isor;
 	int status;
+
 	if (n == NULL) {
 		TRACE(("evaltree(NULL) called\n"));
-		goto out;
+		goto out1;
 	}
 	TRACE(("pid %d, evaltree(%p: %d, %d) called\n",
 			getpid(), n, n->type, flags));
+
+	exception_handler = &jmploc;
+	{
+		int err = setjmp(jmploc.loc);
+		if (err) {
+			/* if it was a signal, check for trap handlers */
+			if (exception == EXSIG)
+				goto out;
+			/* continue on the way out */
+			exception_handler = savehandler;
+			longjmp(exception_handler->loc, err);
+		}
+	}
+
 	switch (n->type) {
 	default:
 #if DEBUG
@@ -7843,19 +7872,20 @@
 		goto calleval;
 	case NAND:
 	case NOR:
-	case NSEMI:
+	case NSEMI: {
+
 #if NAND + 1 != NOR
 #error NAND + 1 != NOR
 #endif
 #if NOR + 1 != NSEMI
 #error NOR + 1 != NSEMI
 #endif
-		isor = n->type - NAND;
+		unsigned is_or = n->type - NAND;
 		evaltree(
 			n->nbinary.ch1,
-			(flags | ((isor >> 1) - 1)) & EV_TESTED
+			(flags | ((is_or >> 1) - 1)) & EV_TESTED
 		);
-		if (!exitstatus == isor)
+		if (!exitstatus == is_or)
 			break;
 		if (!evalskip) {
 			n = n->nbinary.ch2;
@@ -7866,6 +7896,7 @@
 			break;
 		}
 		break;
+	}
 	case NIF:
 		evaltree(n->nif.test, EV_TESTED);
 		if (evalskip)
@@ -7886,8 +7917,11 @@
 		exitstatus = status;
 		break;
 	}
+
  out:
-	if ((checkexit & exitstatus))
+	exception_handler = savehandler;
+ out1:
+	if (checkexit & exitstatus)
 		evalskip |= SKIPEVAL;
 	else if (pendingsig && dotrap())
 		goto exexit;
