diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c
index b83a759..3a0fbd2 100644
--- a/debianutils/start_stop_daemon.c
+++ b/debianutils/start_stop_daemon.c
@@ -22,7 +22,7 @@
 
 static int signal_nr = 15;
 static int user_id = -1;
-static int quiet = 0;
+static int quiet;
 static char *userspec = NULL;
 static char *cmdname = NULL;
 static char *execname = NULL;
@@ -35,8 +35,7 @@
 
 static struct pid_list *found = NULL;
 
-static inline void
-push(pid_t pid)
+static inline void push(pid_t pid)
 {
 	struct pid_list *p;
 
@@ -46,8 +45,7 @@
 	found = p;
 }
 
-static int
-pid_is_exec(pid_t pid, const char *name)
+static int pid_is_exec(pid_t pid, const char *name)
 {
 	char buf[32];
 	struct stat sb, exec_stat;
@@ -61,8 +59,7 @@
 	return (sb.st_dev == exec_stat.st_dev && sb.st_ino == exec_stat.st_ino);
 }
 
-static int
-pid_is_user(int pid, int uid)
+static int pid_is_user(int pid, int uid)
 {
 	struct stat sb;
 	char buf[32];
@@ -73,8 +70,7 @@
 	return (sb.st_uid == uid);
 }
 
-static int
-pid_is_cmd(pid_t pid, const char *name)
+static int pid_is_cmd(pid_t pid, const char *name)
 {
 	char buf[32];
 	FILE *f;
@@ -98,8 +94,7 @@
 }
 
 
-static void
-check(int pid)
+static void check(int pid)
 {
 	if (execname && !pid_is_exec(pid, execname)) {
 		return;
@@ -114,8 +109,7 @@
 }
 
 
-static void
-do_pidfile(void)
+static void do_pidfile(void)
 {
 	FILE *f;
 	pid_t pid;
@@ -130,8 +124,7 @@
 
 }
 
-static void
-do_procinit(void)
+static void do_procinit(void)
 {
 	DIR *procdir;
 	struct dirent *entry;
@@ -157,17 +150,16 @@
 }
 
 
-static void
-do_stop(void)
+static int do_stop(void)
 {
-	char what[1024];
+	RESERVE_CONFIG_BUFFER(what, 1024);
 	struct pid_list *p;
 	int killed = 0;
 
 	do_procinit();
 
 	if (cmdname)
-		strcpy(what, cmdname);
+		what=cmdname;//strcpy(what, cmdname);
 	else if (execname)
 		strcpy(what, execname);
 	else if (pidfile)
@@ -180,7 +172,9 @@
 	if (!found) {
 		if (!quiet)
 			printf("no %s found; none killed.\n", what);
-		return;
+		if (ENABLE_FEATURE_CLEAN_UP)
+			RELEASE_CONFIG_BUFFER(what);
+		return -1;
 	}
 	for (p = found; p; p = p->next) {
 		if (kill(p->pid, signal_nr) == 0) {
@@ -197,21 +191,31 @@
 				printf(" %d", -p->pid);
 		printf(").\n");
 	}
+	if (ENABLE_FEATURE_CLEAN_UP)
+		RELEASE_CONFIG_BUFFER(what);
+	return killed;
 }
 
 #if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS
 static const struct option ssd_long_options[] = {
 	{ "stop",			0,		NULL,		'K' },
 	{ "start",			0,		NULL,		'S' },
-	{ "background",			0,		NULL,		'b' },
+	{ "background",		0,		NULL,		'b' },
 	{ "quiet",			0,		NULL,		'q' },
-	{ "make-pidfile",		0,		NULL,		'm' },
-	{ "startas",			1,		NULL,		'a' },
+	{ "make-pidfile",	0,		NULL,		'm' },
+#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
+	{ "oknodo",			0,		NULL,		'o' },
+	{ "verbose",		0,		NULL,		'v' },
+#endif
+	{ "startas",		1,		NULL,		'a' },
 	{ "name",			1,		NULL,		'n' },
 	{ "signal",			1,		NULL,		's' },
 	{ "user",			1,		NULL,		'u' },
 	{ "exec",			1,		NULL,		'x' },
-	{ "pidfile",			1,		NULL,		'p' },
+	{ "pidfile",		1,		NULL,		'p' },
+#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
+	{ "retry",			1,		NULL,		'R' },
+#endif
 	{ 0,				0,		0,		0 }
 };
 #endif
@@ -221,42 +225,48 @@
 #define SSD_OPT_BACKGROUND	4
 #define SSD_OPT_QUIET		8
 #define SSD_OPT_MAKEPID		16
+#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
+#define SSD_OPT_OKNODO		32
+#define SSD_OPT_VERBOSE		64
 
-int
-start_stop_daemon_main(int argc, char **argv)
+#endif
+
+int start_stop_daemon_main(int argc, char **argv)
 {
 	unsigned long opt;
 	char *signame = NULL;
 	char *startas = NULL;
-
+#if ENABLE_FEATURE_START_STOP_DAEMON_FANCY
+//	char *retry_arg = NULL;
+//	int retries = -1;
+#endif
 #if ENABLE_FEATURE_START_STOP_DAEMON_LONG_OPTIONS
 	bb_applet_long_options = ssd_long_options;
 #endif
 
 	/* Check required one context option was given */
-	bb_opt_complementally = "K:S:?:K--S:S--K";
-	opt = bb_getopt_ulflags(argc, argv, "KSbqma:n:s:u:x:p:",
-		&startas, &cmdname, &signame, &userspec, &execname, &pidfile);
+	bb_opt_complementally = "K:S:?:K--S:S--K:m?p:K?xpun:S?xa";
+	opt = bb_getopt_ulflags(argc, argv, "KSbqm"
+//		USE_FEATURE_START_STOP_DAEMON_FANCY("ovR:")
+		USE_FEATURE_START_STOP_DAEMON_FANCY("ov")
+		"a:n:s:u:x:p:"
+//		USE_FEATURE_START_STOP_DAEMON_FANCY(,&retry_arg)
+		,&startas, &cmdname, &signame, &userspec, &execname, &pidfile);
 
-
-	quiet = opt & SSD_OPT_QUIET;
+	quiet = (opt & SSD_OPT_QUIET)
+			USE_FEATURE_START_STOP_DAEMON_FANCY(&& !(opt & SSD_OPT_VERBOSE));
 
 	if (signame) {
 		signal_nr = bb_xgetlarg(signame, 10, 0, NSIG);
 	}
 
-	if (!execname && !pidfile && !userspec && !cmdname)
-		bb_error_msg_and_die ("need at least one of -x, -p, -u, or -n");
-
 	if (!startas)
 		startas = execname;
 
-	if ((opt & SSD_CTX_START) && !startas)
-		bb_error_msg_and_die ("-S needs -x or -a");
-
-	if ((opt & SSD_OPT_MAKEPID) && pidfile == NULL)
-		bb_error_msg_and_die ("-m needs -p");
-
+//	USE_FEATURE_START_STOP_DAEMON_FANCY(
+//		if (retry_arg)
+//			retries = bb_xgetlarg(retry_arg, 10, 0, INT_MAX);
+//	)
 	argc -= optind;
 	argv += optind;
 
@@ -264,8 +274,10 @@
 		user_id = bb_xgetpwnam(userspec);
 
 	if (opt & SSD_CTX_STOP) {
-		do_stop();
-		return EXIT_SUCCESS;
+		int i = do_stop();
+		return
+			USE_FEATURE_START_STOP_DAEMON_FANCY((opt & SSD_OPT_OKNODO)
+				? 0 :) !!(i<=0);
 	}
 
 	do_procinit();
@@ -273,7 +285,8 @@
 	if (found) {
 		if (!quiet)
 			printf("%s already running.\n%d\n", execname ,found->pid);
-		return EXIT_SUCCESS;
+		USE_FEATURE_START_STOP_DAEMON_FANCY(return !(opt & SSD_OPT_OKNODO);)
+		SKIP_FEATURE_START_STOP_DAEMON_FANCY(return EXIT_FAILURE;)
 	}
 	*--argv = startas;
 	if (opt & SSD_OPT_BACKGROUND) {
@@ -282,10 +295,9 @@
 	}
 	if (opt & SSD_OPT_MAKEPID) {
 		/* user wants _us_ to make the pidfile */
-		FILE *pidf = fopen(pidfile, "w");
+		FILE *pidf = bb_xfopen(pidfile, "w");
+
 		pid_t pidt = getpid();
-		if (pidf == NULL)
-			bb_perror_msg_and_die("Unable to write pidfile '%s'", pidfile);
 		fprintf(pidf, "%d\n", pidt);
 		fclose(pidf);
 	}
