diff -Naur busybox.orig/include/applets.h busybox/include/applets.h
--- busybox.orig/include/applets.h	2008-09-28 18:15:29 +0000
+++ busybox/include/applets.h	2008-10-11 13:10:07 +0000
@@ -69,6 +69,7 @@
 
 USE_TEST(APPLET_NOFORK([,  test, _BB_DIR_USR_BIN, _BB_SUID_NEVER, test))
 USE_TEST(APPLET_NOFORK([[, test, _BB_DIR_USR_BIN, _BB_SUID_NEVER, test))
+USE_ACPID(APPLET(acpid, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_ADDGROUP(APPLET(addgroup, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_ADDUSER(APPLET(adduser, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_ADJTIMEX(APPLET(adjtimex, _BB_DIR_SBIN, _BB_SUID_NEVER))
diff -Naur busybox.orig/include/usage.h busybox/include/usage.h
--- busybox.orig/include/usage.h	2008-10-09 19:52:50 +0000
+++ busybox/include/usage.h	2008-10-11 15:25:05 +0000
@@ -17,6 +17,17 @@
 #define NOUSAGE_STR "\b"
 
 
+#define acpid_trivial_usage \
+       "[OPTIONS]"
+#define acpid_full_usage "\n\n" \
+       "Listen to ACPI events and spawn specific application\n" \
+     "\nOptions:" \
+     "\n	-c dir		Config directory. Default is /etc/acpi" \
+     "\n	-e file		Event file. Default is /proc/acpi/event" \
+     USE_FEATURE_ACPID_RUNPARTS( \
+     "\n	-r		Use run-parts for action helpers." \
+     ) \
+
 #define addgroup_trivial_usage \
        "[-g GID] " USE_FEATURE_ADDUSER_TO_GROUP("[user_name] ") "group_name"
 #define addgroup_full_usage "\n\n" \
diff -Naur busybox.orig/util-linux/Config.in busybox/util-linux/Config.in
--- busybox.orig/util-linux/Config.in	2008-09-04 19:44:23 +0000
+++ busybox/util-linux/Config.in	2008-10-11 15:05:10 +0000
@@ -5,6 +5,21 @@
 
 menu "Linux System Utilities"
 
+config ACPID
+	bool "acpid"
+	default n
+	help
+	  acpid listens to ACPI events from /proc/acpi/event and spawns
+	  corresponding applications.
+
+config FEATURE_ACPID_RUNPARTS
+	bool "Use run-parts"
+	default y
+	depends on ACPID
+	select RUN_PARTS
+	help
+	  Use run-parts to fire event actions instead of spawning a single script.
+
 config DMESG
 	bool "dmesg"
 	default n
diff -Naur busybox.orig/util-linux/Kbuild busybox/util-linux/Kbuild
--- busybox.orig/util-linux/Kbuild	2008-09-04 19:44:23 +0000
+++ busybox/util-linux/Kbuild	2008-10-11 13:07:15 +0000
@@ -5,6 +5,7 @@
 # Licensed under the GPL v2, see the file LICENSE in this tarball.
 
 lib-y:=
+lib-$(CONFIG_ACPID)             += acpid.o
 lib-$(CONFIG_DMESG)             += dmesg.o
 lib-$(CONFIG_FBSET)             += fbset.o
 lib-$(CONFIG_FDFLUSH)           += freeramdisk.o
diff -Naur busybox.orig/util-linux/acpid.c busybox/util-linux/acpid.c
--- busybox.orig/util-linux/acpid.c	1970-01-01 00:00:00 +0000
+++ busybox/util-linux/acpid.c	2008-10-11 18:22:35 +0000
@@ -0,0 +1,63 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * acpid listens to ACPI events and spawns specific applications
+ *
+ * Copyright (C) 2008 by Vladimir Dronnikov <dronnikov@gmail.com>
+ *
+ * Licensed under GPLv2, see file LICENSE in this tarball for details.
+ */
+#include "libbb.h"
+
+/*
+	acpid [-c conf_dir] [-e event_file] [-r]
+*/
+
+#define ACPID_COMPAT 0
+
+int acpid_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int acpid_main(int argc UNUSED_PARAM, char **argv)
+{
+	unsigned opts;
+	const char *opt_conf = "/etc/acpi";
+	const char *opt_input = "/proc/acpi/event";
+	parser_t *parser;
+	char *token[4];
+
+	enum {
+		OPT_d = 1 << 0,	// debug
+		OPT_r = 1 << 3,	// use run-parts
+	};
+
+	//opt_complementary = "";
+	opts = getopt32(argv,
+		"dc:e:" USE_FEATURE_ACPID_RUNPARTS("r")
+#if ACPID_COMPAT
+		"g:l:m:s:S:v"
+#endif
+		, &opt_conf, &opt_input
+#if ACPID_COMPAT
+		, NULL, NULL, NULL, NULL, NULL, NULL
+#endif
+	);
+	argv += optind;
+
+	// /proc/acpi/event is the "config" :)
+	parser = config_open(opt_input);
+	// fetch lines
+	while (config_read(parser, token, 4, 4, "\0 ", PARSE_NORMAL)) {
+		char *filename = xasprintf("%s/%s/%s", opt_conf, token[1], token[2]);
+		// N.B. run-parts would require scripts be started with #!/bin/sh
+		// So will we do if we chose not to use run-parts
+		const char *args[] = { USE_FEATURE_ACPID_RUNPARTS("run-parts",) filename, NULL };
+		if (opts & OPT_d)
+			bb_info_msg("A[%s] B[%s] C[%s] D[%s]", token[0], token[1], token[2], token[3]);
+		xspawn((char **)args USE_FEATURE_ACPID_RUNPARTS(+(1-((opts & OPT_r)!=0))));
+		free(filename);
+	}
+	if (ENABLE_FEATURE_CLEAN_UP)
+		config_close(parser);
+
+	return EXIT_SUCCESS;
+}
+
+#undef ACPID_COMPAT
