diff --git a/applets/applet_tables.c b/applets/applet_tables.c
index b5df740..9f42ebf 100644
--- a/applets/applet_tables.c
+++ b/applets/applet_tables.c
@@ -50,45 +50,66 @@
 
 	qsort(applets, NUM_APPLETS, sizeof(applets[0]), cmp_name);
 
-	/* Keep in sync with include/busybox.h! */
-
-	puts("const char applet_names[] ALIGN1 =");
 	ofs = 0;
-	i = 0;
 	for (i = 0; i < NUM_APPLETS; i++) {
 		offset[i] = ofs;
 		ofs += strlen(applets[i].name) + 1;
+	}
+	/* We reuse 4 high-order bits of offset array for other purposes,
+	 * so if they are indeed needed, refuse to proceed */
+	if (ofs > 0xfff)
+		return 1;
+	if (!argv[1])
+		return 1;
+
+	i = open(argv[1], O_WRONLY | O_TRUNC | O_CREAT, 0666);
+	if (i < 0)
+		return 1;
+	dup2(i, 1);		
+
+	/* Keep in sync with include/busybox.h! */
+
+	puts("/* This is a generated file, don't edit */");
+
+	puts("const char applet_names[] ALIGN1 =");
+	for (i = 0; i < NUM_APPLETS; i++) {
 		printf("\"%s\" \"\\0\"\n", applets[i].name);
 	}
 	puts(";");
 
-	puts("int (*const applet_mains[])(int argc, char **argv) = {");
+	puts("int (*const applet_main[])(int argc, char **argv) = {");
 	for (i = 0; i < NUM_APPLETS; i++) {
 		printf("%s_main,\n", applets[i].main);
 	}
 	puts("};");
 
-#if ENABLE_FEATURE_INSTALLER || ENABLE_FEATURE_PREFER_APPLETS
-	puts("const uint32_t applet_nameofs[] = {");
-#else
 	puts("const uint16_t applet_nameofs[] ALIGN2 = {");
-#endif
 	for (i = 0; i < NUM_APPLETS; i++) {
-		printf("0x%08x,\n",
+		printf("0x%04x,\n",
 			offset[i]
+#if ENABLE_FEATURE_PREFER_APPLETS
+			+ (applets[i].nofork << 12)
+			+ (applets[i].noexec << 13)
+#endif
 #if ENABLE_FEATURE_SUID
 			+ (applets[i].need_suid   << 14) /* 2 bits */
 #endif
-#if ENABLE_FEATURE_INSTALLER
-			+ (applets[i].install_loc << 16) /* 3 bits */
-#endif
-#if ENABLE_FEATURE_PREFER_APPLETS
-			+ (applets[i].nofork << 19)
-			+ (applets[i].noexec << 20)
-#endif
 		);
 	}
 	puts("};");
 
+#if ENABLE_FEATURE_INSTALLER
+	puts("const uint8_t applet_install_loc[] ALIGN1 = {");
+	i = 0;
+	while (i < NUM_APPLETS) {
+		int v = applets[i].install_loc; /* 3 bits */
+		if (++i < NUM_APPLETS)
+			v |= applets[i].install_loc << 4; /* 3 bits */
+		printf("0x%02x,\n", v);
+		i++;
+	}
+	puts("};");
+#endif
+
 	return 0;
 }
