diff -urN busybox-1.16.0/init/init.c busybox-1.16.0.new/init/init.c
--- busybox-1.16.0/init/init.c	2010-01-25 01:59:38.000000000 +0100
+++ busybox-1.16.0.new/init/init.c	2012-07-03 18:56:32.097560978 +0200
@@ -672,8 +672,6 @@
 	 */
 	reset_sighandlers_and_unblock_sigs();
 
-	run_shutdown_and_kill_processes();
-
 	m = "halt";
 	rb = RB_HALT_SYSTEM;
 	if (sig == SIGTERM) {
@@ -683,6 +681,8 @@
 		m = "poweroff";
 		rb = RB_POWER_OFF;
 	}
+	setenv("POWER_ACTION", m, 1);
+	run_shutdown_and_kill_processes();
 	message(L_CONSOLE, "Requesting system %s", m);
 	pause_and_low_level_reboot(rb);
 	/* not reached */
