diff --git a/procps/Config.in b/procps/Config.in
index d17bbcd..b4832db 100644
--- a/procps/Config.in
+++ b/procps/Config.in
@@ -37,6 +37,22 @@
 	  Pidof finds the process id's (pids) of the named programs. It prints
 	  those id's on the standard output.
 
+config CONFIG_FEATURE_PIDOF_SINGLE
+	bool "  Enable argument for single shot (-s)"
+	default n
+	depends on CONFIG_PIDOF
+	help
+	  Support argument '-s' for returning only the first pid found.
+
+config CONFIG_FEATURE_PIDOF_OMIT
+	bool "  Enable argument for omitting pids (-o)"
+	default n
+	depends on CONFIG_PIDOF
+	help
+	  Support argument '-o' for omitting the given pids in output.
+	  The special pid %PPID can be used to name the parent process
+	  of the pidof, in other words the calling shell or shell script.
+
 config CONFIG_PS
 	bool "ps"
 	default n
diff --git a/procps/pidof.c b/procps/pidof.c
index 413864a..6f959e4 100644
--- a/procps/pidof.c
+++ b/procps/pidof.c
@@ -4,20 +4,7 @@
  *
  * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
+ * Licensed under the GPL v2, see the file LICENSE in this tarball.
  */
 
 
@@ -31,41 +18,120 @@
 #include <unistd.h>
 #include "busybox.h"
 
+#if ENABLE_FEATURE_PIDOF_SINGLE
+#define _SINGLE_COMPL(a) a
+#define SINGLE (1<<0)
+#else
+#define _SINGLE_COMPL(a)
+#define SINGLE (0)
+#endif
+
+#if ENABLE_FEATURE_PIDOF_OMIT
+#define _OMIT_COMPL(a) a
+#define _OMIT(a) ,a
+static llist_t *omits; /* list of pids to omit */
+#if ENABLE_FEATURE_PIDOF_SINGLE
+#define OMIT (1<<1)
+#else
+#define OMIT (1<<0)
+#endif
+#else
+#define _OMIT_COMPL(a) ""
+#define _OMIT(a)
+#define OMIT (0)
+#endif
 
 extern int pidof_main(int argc, char **argv)
 {
-	int opt, n = 0;
-	int single_flag = 0;
+	int n = 0;
 	int fail = 1;
+	unsigned long int opt;
+#if ENABLE_FEATURE_PIDOF_OMIT
+	bb_opt_complementally = _OMIT_COMPL("o*");
+#endif
 
-	/* do normal option parsing */
-	while ((opt = getopt(argc, argv, "s")) > 0) {
-		switch (opt) {
-			case 's':
-				single_flag = 1;
-				break;
-			default:
-				bb_show_usage();
-		}
+	/* do option parsing */
+	if ((opt = bb_getopt_ulflags(argc, argv,
+					_SINGLE_COMPL("s") _OMIT_COMPL("o:")
+					_OMIT(&omits)))
+			> 0) {
+#if ENABLE_FEATURE_PIDOF_SINGLE
+		if (!(opt & SINGLE))
+#endif
+#if ENABLE_FEATURE_PIDOF_OMIT
+		if (!(opt & OMIT))
+#endif
+		bb_show_usage();
 	}
 
-	/* Looks like everything is set to go. */
+#if ENABLE_FEATURE_PIDOF_OMIT
+	/* fill omit list.  */
+	{
+	RESERVE_CONFIG_BUFFER(getppid_str, 32);
+	llist_t * omits_p = omits;
+	while (omits_p) {
+		/* are we asked to exclude the parent's process ID?  */
+		if (omits_p->data[0] == '%') {
+			if (!strncmp(omits_p->data, "%PPID", 5)) {
+				/* yes, exclude ppid */
+				snprintf(getppid_str, sizeof(getppid_str), "%ld", getppid());
+//				omits_p->data = getppid_str;
+#if 0
+			} else {
+				bb_error_msg_and_die("illegal omit pid value (%s)!\n",
+						omits_p->data);
+#endif
+			}
+		} else {
+		/* no, not talking about ppid but deal with usual case (pid).  */
+			snprintf(getppid_str, sizeof(getppid_str), "%ld",
+					strtol(omits_p->data, NULL, 10));
+		}
+		omits_p->data = getppid_str;
+		omits_p = omits_p->link;
+	}
+	RELEASE_CONFIG_BUFFER(getppid_str);
+	}
+#endif
+	/* Looks like everything is set to go.  */
 	while(optind < argc) {
 		long *pidList;
 		long *pl;
 
-		pidList = find_pid_by_name(argv[optind]);
+		/* reverse the pidlist like GNU pidof does.  */
+		pidList = pidlist_reverse(find_pid_by_name(argv[optind]));
 		for(pl = pidList; *pl > 0; pl++) {
+#if ENABLE_FEATURE_PIDOF_OMIT
+			unsigned short omitted = 0;
+			if (opt & OMIT) {
+				llist_t *omits_p = omits;
+				while (omits_p)
+					if (strtol(omits_p->data, NULL, 10) == *pl) {
+						omitted = 1; break;
+					} else
+						omits_p = omits_p->link;
+			}
+			if (!omitted)
+#endif
 			printf("%s%ld", (n++ ? " " : ""), *pl);
+#if ENABLE_FEATURE_PIDOF_OMIT
+			fail = omitted;
+#else
 			fail = 0;
-			if (single_flag)
+#endif
+#if ENABLE_FEATURE_PIDOF_SINGLE
+			if (opt & SINGLE)
 				break;
+#endif
 		}
 		free(pidList);
 		optind++;
-
 	}
-	printf("\n");
+	putchar('\n');
 
+#if ENABLE_FEATURE_PIDOF_OMIT
+	if (ENABLE_FEATURE_CLEAN_UP)
+		llist_free(omits);
+#endif
 	return fail ? EXIT_FAILURE : EXIT_SUCCESS;
 }
