cleanup
diff --git a/communication.c b/communication.c
index 33aa98d..f9f173b 100644
--- a/communication.c
+++ b/communication.c
@@ -297,7 +297,7 @@
 
 /* Gets executed after ebt_deliver_table. Delivers the counters to the kernel
  * and resets the counterchanges to CNT_NORM */
-void ebt_deliver_counters(struct ebt_u_replace *u_repl, int exec_style)
+void ebt_deliver_counters(struct ebt_u_replace *u_repl)
 {
 	struct ebt_counter *old, *new, *newcounters;
 	socklen_t optlen;
diff --git a/ebtables.c b/ebtables.c
index 05c30c4..855b4fc 100644
--- a/ebtables.c
+++ b/ebtables.c
@@ -1008,13 +1008,10 @@
 			replace->flags |= OPT_COMMAND;
 			{
 				char *tmp = replace->filename;
-				int init = 1;
 
-				if (c == 10)
-					init = 0;
 				/* Get the kernel table */
 				replace->filename = NULL;
-				ebt_get_kernel_table(replace, init);
+				ebt_get_kernel_table(replace, c == 10 ? 0 : 1);
 				replace->filename = tmp;
 			}
 			break;
@@ -1208,7 +1205,7 @@
 		ebt_deliver_table(replace);
 
 		if (replace->nentries)
-			ebt_deliver_counters(replace, EXEC_STYLE_PRG);
+			ebt_deliver_counters(replace);
 	}
 	return 0;
 }
diff --git a/ebtablesd.c b/ebtablesd.c
index 59bbe1c..062a2d6 100644
--- a/ebtablesd.c
+++ b/ebtablesd.c
@@ -52,7 +52,7 @@
 	char *argv[EBTD_ARGC_MAX], *args[4], name[] = "mkdir",
 	     mkdir_option[] = "-p", mkdir_dir[] = EBTD_PIPE_DIR,
 	     cmdline[EBTD_CMDLINE_MAXLN];
-	int readfd, base = 0, offset = 0, n = 0, ret = 0;
+	int readfd, base = 0, offset = 0, n = 0, ret = 0, quotemode = 0;
 
 	/* Make sure the pipe directory exists */
 	args[0] = name;
@@ -104,15 +104,16 @@
 			continue;
 		ntot += offset;
 continue_read:
-		/* Change all ' ' into '\0'. This implies that the user is not
-		 * allowed to use spaces (that don't distinguish options or
-		 * commands) in her rules. This comes down to not allowing spaces
-		 * in options like the string of --ulog-prefix (use '_' instead).
-		 */
+		/* Put '\0' between arguments. */
 		for (; offset < ntot; n++, offset++) {
-			if (cmdline[offset] == ' ')
+			if (cmdline[offset] == '\"') {
+				quotemode ^= 1;
 				cmdline[offset] = '\0';
-			if (cmdline[offset] == '\n') {
+			} else if (!quotemode && cmdline[offset] == ' ') {
+				cmdline[offset] = '\0';
+			} else if (cmdline[offset] == '\n') {
+				if (quotemode)
+					ebt_print_error("ebtablesd: wrong number of \" delimiters");
 				cmdline[offset] = '\0';
 				break;
 			}
@@ -145,6 +146,10 @@
 		n2 = 0;
 		argc = 0;
 		while (n2 < n && argc < EBTD_ARGC_MAX) {
+			if (*(cmdline + base + n2) == '\0') {
+				n2++;
+				continue;
+			}
 			argv[argc++] = cmdline + base + n2;
 			n2 += strlen(cmdline + base + n2) + 1;
 		}
@@ -303,7 +308,7 @@
 				replace[i].num_counters = 0;
 			ebt_deliver_table(&replace[i]);
 			if (ebt_errormsg[0] == '\0' && open_method[i] == OPEN_METHOD_KERNEL)
-				ebt_deliver_counters(&replace[i], EXEC_STYLE_DAEMON);
+				ebt_deliver_counters(&replace[i]);
 			goto write_msg;
 		} else if (!strcmp(argv[1], "fcommit")) {
 			if (argc != 4) {
@@ -333,7 +338,7 @@
 			strcpy(replace[i].filename, argv[3]);
 			ebt_deliver_table(&replace[i]);
 			if (ebt_errormsg[0] == '\0' && open_method[i] == OPEN_METHOD_KERNEL)
-				ebt_deliver_counters(&replace[i], EXEC_STYLE_DAEMON);
+				ebt_deliver_counters(&replace[i]);
 			free(replace[i].filename);
 			replace[i].filename = NULL;
 			goto write_msg;
diff --git a/ebtablesu.c b/ebtablesu.c
index 1fed0c1..3cee145 100644
--- a/ebtablesu.c
+++ b/ebtablesu.c
@@ -76,7 +76,8 @@
 	pos = arguments;
 	for (i = 0; i < argc; i++) {
 		strcpy(pos, argv[i]);
-		pos += strlen(argv[i]) + 1;
+		pos += strlen(argv[i]);
+		*(pos++) = ' ';
 	}
 
 	*(pos-1) = '\n';
diff --git a/include/ebtables_u.h b/include/ebtables_u.h
index e63cc45..b725625 100644
--- a/include/ebtables_u.h
+++ b/include/ebtables_u.h
@@ -276,7 +276,7 @@
 /* communication.c */
 
 int ebt_get_table(struct ebt_u_replace *repl, int init);
-void ebt_deliver_counters(struct ebt_u_replace *repl, int exec_style);
+void ebt_deliver_counters(struct ebt_u_replace *repl);
 void ebt_deliver_table(struct ebt_u_replace *repl);
 
 /* useful_functions.c */
diff --git a/libebtc.c b/libebtc.c
index 2feefe9..af95694 100644
--- a/libebtc.c
+++ b/libebtc.c
@@ -1272,8 +1272,8 @@
 		vsnprintf(ebt_errormsg, ERRORMSG_MAXLEN, format, l);
 		va_end(l);
 	} else {
-		vprintf(format, l);
-		printf(".\n");
+		vfprintf(stderr, format, l);
+		fprintf(stderr, ".\n");
 		va_end(l);
 		exit (-1);
 	}