diff --git a/shell/hush.c b/shell/hush.c
index 32b9087..0f0151a 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -5767,7 +5767,9 @@
 	}
 
 	{
-#if !BB_MMU
+#if BB_MMU
+# define as_string NULL
+#else
 		char *as_string = NULL;
 #endif
 		pipe_list = parse_stream(&as_string, input, endch);
@@ -5778,9 +5780,8 @@
 		/* empty ()/{} or parse error? */
 		if (!pipe_list || pipe_list == ERR_PTR) {
 			/* parse_stream already emitted error msg */
-#if !BB_MMU
-			free(as_string);
-#endif
+			if (!BB_MMU)
+				free(as_string);
 			debug_printf_parse("parse_group return 1: "
 				"parse_stream returned %p\n", pipe_list);
 			return 1;
@@ -5792,6 +5793,7 @@
 		debug_printf_parse("end of group, remembering as:'%s'\n",
 				command->group_as_string);
 #endif
+#undef as_string
 	}
 	debug_printf_parse("parse_group return 0\n");
 	return 0;
@@ -5893,7 +5895,7 @@
  * can contain arbitrary constructs, just like $(cmd).
  */
 #define DOUBLE_CLOSE_CHAR_FLAG 0x80
-static void add_till_closing_paren(o_string *dest, struct in_str *input, char end_ch)
+static void add_till_closing_bracket(o_string *dest, struct in_str *input, char end_ch)
 {
 	char dbl = end_ch & DOUBLE_CLOSE_CHAR_FLAG;
 	end_ch &= (DOUBLE_CLOSE_CHAR_FLAG-1);
@@ -5915,7 +5917,7 @@
 		o_addchr(dest, ch);
 		if (ch == '(' || ch == '{') {
 			ch = (ch == '(' ? ')' : '}');
-			add_till_closing_paren(dest, input, ch);
+			add_till_closing_bracket(dest, input, ch);
 			o_addchr(dest, ch);
 			continue;
 		}
@@ -5952,6 +5954,7 @@
 #if BB_MMU
 #define handle_dollar(as_string, dest, input) \
 	handle_dollar(dest, input)
+#define as_string NULL
 #endif
 static int handle_dollar(o_string *as_string,
 		o_string *dest,
@@ -6013,12 +6016,14 @@
 		}
 		ch |= quote_mask;
 
-		/* It's possible to just call add_till_closing_paren() at this point.
+		/* It's possible to just call add_till_closing_bracket() at this point.
 		 * However, this regresses some of our testsuite cases
 		 * which check invalid constructs like ${%}.
 		 * Oh well... let's check that the var name part is fine... */
 
 		while (1) {
+			unsigned pos;
+
 			o_addchr(dest, ch);
 			debug_printf_parse(": '%c'\n", ch);
 
@@ -6035,8 +6040,15 @@
 					goto bad_dollar_syntax;
 				/* Eat everything until closing '}' */
 				o_addchr(dest, ch);
-//TODO: add nommu_addchr hack here
-				add_till_closing_paren(dest, input, '}');
+				if (!BB_MMU)
+					pos = dest->length;
+				add_till_closing_bracket(dest, input, '}');
+#if !BB_MMU
+				if (as_string) {
+					o_addstr(as_string, dest->data + pos);
+					o_addchr(as_string, '}');
+				}
+#endif
 				break;
 			}
 		}
@@ -6045,9 +6057,8 @@
 	}
 #if ENABLE_SH_MATH_SUPPORT || ENABLE_HUSH_TICK
 	case '(': {
-# if !BB_MMU
-		int pos;
-# endif
+		unsigned pos;
+
 		ch = i_getch(input);
 		nommu_addchr(as_string, ch);
 # if ENABLE_SH_MATH_SUPPORT
@@ -6056,17 +6067,16 @@
 			nommu_addchr(as_string, ch);
 			o_addchr(dest, SPECIAL_VAR_SYMBOL);
 			o_addchr(dest, /*quote_mask |*/ '+');
-#  if !BB_MMU
-			pos = dest->length;
-#  endif
-			add_till_closing_paren(dest, input, ')' | DOUBLE_CLOSE_CHAR_FLAG);
-#  if !BB_MMU
+			if (!BB_MMU)
+				pos = dest->length;
+			add_till_closing_bracket(dest, input, ')' | DOUBLE_CLOSE_CHAR_FLAG);
+#if !BB_MMU
 			if (as_string) {
 				o_addstr(as_string, dest->data + pos);
 				o_addchr(as_string, ')');
 				o_addchr(as_string, ')');
 			}
-#  endif
+#endif
 			o_addchr(dest, SPECIAL_VAR_SYMBOL);
 			break;
 		}
@@ -6074,16 +6084,15 @@
 # if ENABLE_HUSH_TICK
 		o_addchr(dest, SPECIAL_VAR_SYMBOL);
 		o_addchr(dest, quote_mask | '`');
-#  if !BB_MMU
-		pos = dest->length;
-#  endif
-		add_till_closing_paren(dest, input, ')');
-#  if !BB_MMU
+		if (!BB_MMU)
+			pos = dest->length;
+		add_till_closing_bracket(dest, input, ')');
+#if !BB_MMU
 		if (as_string) {
 			o_addstr(as_string, dest->data + pos);
 			o_addchr(as_string, ')');
 		}
-#  endif
+#endif
 		o_addchr(dest, SPECIAL_VAR_SYMBOL);
 # endif
 		break;
@@ -6108,11 +6117,13 @@
 	}
 	debug_printf_parse("handle_dollar return 0\n");
 	return 0;
+#undef as_string
 }
 
 #if BB_MMU
 #define parse_stream_dquoted(as_string, dest, input, dquote_end) \
 	parse_stream_dquoted(dest, input, dquote_end)
+#define as_string NULL
 #endif
 static int parse_stream_dquoted(o_string *as_string,
 		o_string *dest,
@@ -6176,7 +6187,7 @@
 	}
 #if ENABLE_HUSH_TICK
 	if (ch == '`') {
-		//int pos = dest->length;
+		//unsigned pos = dest->length;
 		o_addchr(dest, SPECIAL_VAR_SYMBOL);
 		o_addchr(dest, 0x80 | '`');
 		add_till_backquote(dest, input);
@@ -6194,6 +6205,7 @@
 		dest->o_assignment = DEFINITELY_ASSIGNMENT;
 	}
 	goto again;
+#undef as_string
 }
 
 /*
