diff --git a/ebtables.c b/ebtables.c
index dfe4b81..58dad06 100644
--- a/ebtables.c
+++ b/ebtables.c
@@ -114,7 +114,7 @@
 	struct option *merge;
 
 	if (!newopts || !oldopts || !options_offset)
-		print_bug("merge wrong");
+		ebt_print_bug("merge wrong");
 	for (num_old = 0; oldopts[num_old].name; num_old++);
 	for (num_new = 0; newopts[num_new].name; num_new++);
 
@@ -123,7 +123,7 @@
 
 	merge = malloc(sizeof(struct option) * (num_new + num_old + 1));
 	if (!merge)
-		print_memory();
+		ebt_print_memory();
 	memcpy(merge, oldopts, num_old * sizeof(struct option));
 	for (i = 0; i < num_new; i++) {
 		merge[num_old + i] = newopts[i];
@@ -225,7 +225,8 @@
 			else {
 				struct ethertypeent *ent;
 
-				ent = getethertypebynumber(ntohs(hlp->ethproto));
+				ent = getethertypebynumber
+				      (ntohs(hlp->ethproto));
 				if (!ent)
 					printf("0x%x ", ntohs(hlp->ethproto));
 				else
@@ -275,7 +276,7 @@
 		while (m_l) {
 			m = ebt_find_match(m_l->m->u.name);
 			if (!m)
-				print_bug("Match not found");
+				ebt_print_bug("Match not found");
 			m->print(hlp, m_l->m);
 			m_l = m_l->next;
 		}
@@ -283,7 +284,7 @@
 		while (w_l) {
 			w = ebt_find_watcher(w_l->w->u.name);
 			if (!w)
-				print_bug("Watcher not found");
+				ebt_print_bug("Watcher not found");
 			w->print(hlp, w_l->w);
 			w_l = w_l->next;
 		}
@@ -293,7 +294,7 @@
 			printf("%s ", hlp->t->u.name);
 		t = ebt_find_target(hlp->t->u.name);
 		if (!t)
-			print_bug("Target not found");
+			ebt_print_bug("Target not found");
 		t->print(hlp, hlp->t);
 		if (replace.flags & LIST_C)
 			printf(", pcnt = %llu -- bcnt = %llu",
@@ -347,7 +348,6 @@
 "Environment variable:\n"
 ATOMIC_ENV_VARIABLE "          : if set <FILE> (see above) will equal its value"
 "\n\n");
-
 	m_l = new_entry->m_list;
 	while (m_l) {
 		((struct ebt_u_match *)m_l->m)->help();
@@ -442,19 +442,21 @@
 	return 0;
 }
 
-#define print_if_l_error print_error("Interface name length must be less " \
+#define print_if_l_error ebt_print_error("Interface name length must be less " \
    "than %d", IFNAMSIZ)
-#define OPT_COMMAND    0x01
-#define OPT_TABLE      0x02
-#define OPT_IN         0x04
-#define OPT_OUT        0x08
-#define OPT_JUMP       0x10
-#define OPT_PROTOCOL   0x20
-#define OPT_SOURCE     0x40
-#define OPT_DEST       0x80
-#define OPT_ZERO       0x100
-#define OPT_LOGICALIN  0x200
-#define OPT_LOGICALOUT 0x400
+#define OPT_COMMAND	0x01
+#define OPT_TABLE	0x02
+#define OPT_IN		0x04
+#define OPT_OUT		0x08
+#define OPT_JUMP	0x10
+#define OPT_PROTOCOL	0x20
+#define OPT_SOURCE	0x40
+#define OPT_DEST	0x80
+#define OPT_ZERO	0x100
+#define OPT_LOGICALIN	0x200
+#define OPT_LOGICALOUT	0x400
+#define OPT_KERNELDATA	0x800 /* if set, we already have loaded the table
+			       * in userspace */
 /* the main thing */
 int main(int argc, char *argv[])
 {
@@ -480,7 +482,14 @@
 	ebt_iterate_watchers(merge_watcher);
 	ebt_iterate_targets(merge_target);
 
-	replace.filename = getenv(ATOMIC_ENV_VARIABLE);
+	buffer = getenv(ATOMIC_ENV_VARIABLE);
+	if (buffer) {
+		replace.filename = malloc(strlen(buffer)+1);
+		if (!replace.filename)
+			ebt_print_memory();
+		memcpy(replace.filename, buffer, strlen(buffer)+1);
+		buffer = NULL;
+	}
 	/*
 	 * initialize the table name, OPT_ flags, selected hook and command
 	 */
@@ -492,7 +501,7 @@
 
 	new_entry = (struct ebt_u_entry *)malloc(sizeof(struct ebt_u_entry));
 	if (!new_entry)
-		print_memory();
+		ebt_print_memory();
 	/*
 	 * put some sane values in our new entry
 	 */
@@ -519,16 +528,26 @@
 		case 'N': /* make a user defined chain */
 		case 'E': /* rename chain */
 		case 'X': /* delete chain */
+			/* We allow -N chainname -P policy */
+			if (replace.command == 'N' && c == 'P') {
+				replace.command = c;
+				optind--;
+				goto handle_P;
+			}
 			replace.command = c;
-			if (replace.flags & OPT_COMMAND)
-				print_error("Multiple commands not allowed");
 			replace.flags |= OPT_COMMAND;
-			ebt_get_kernel_table(&replace, table);
+			if (!(replace.flags & OPT_KERNELDATA)) {
+				ebt_get_kernel_table(&replace, table, 0);
+				replace.flags |= OPT_KERNELDATA;
+			}
 			if (optarg && (optarg[0] == '-' ||
 			    !strcmp(optarg, "!")))
-				print_error("No chain name specified");
+				ebt_print_error("No chain name specified");
 			if (c == 'N') {
 				ebt_new_chain(&replace, optarg, EBT_ACCEPT);
+				/* This is needed to get -N x -P y working */
+				replace.selected_chain =
+				ebt_get_chainnr(&replace, optarg);
 				break;
 			}
 			if (c == 'X') {
@@ -549,27 +568,32 @@
 				}
 				if ((replace.selected_chain =
 				     ebt_get_chainnr(&replace, opt)) == -1)
-					print_error("Chain %s doesn't exist", optarg);
+					ebt_print_error("Chain %s doesn't "
+							"exist", optarg);
 				ebt_delete_chain(&replace);
 				break;
 			}
 
 			if ((replace.selected_chain =
 			    ebt_get_chainnr(&replace, optarg)) == -1)
-				print_error("Chain %s doesn't exist", optarg);
+				ebt_print_error("Chain %s doesn't exist",
+						optarg);
 			if (c == 'E') {
 				if (optind >= argc || argv[optind][0] == '-' ||
 				   !strcmp(argv[optind], "!"))
-					print_error("No new chain name specified");
-				if (strlen(argv[optind]) >= EBT_CHAIN_MAXNAMELEN)
-					print_error("Chain name len can't exceed %d",
-					   EBT_CHAIN_MAXNAMELEN - 1);
-				if (ebt_get_chainnr(&replace, argv[optind]) != -1)
-					print_error("Chain %s already exists",
-					   argv[optind]);
+					ebt_print_error("No new chain name "
+						    "specified");
+				if (strlen(argv[optind])>=EBT_CHAIN_MAXNAMELEN)
+					ebt_print_error("Chain name len can't "
+						    "exceed %d",
+						    EBT_CHAIN_MAXNAMELEN - 1);
+				if (ebt_get_chainnr(&replace, argv[optind]) !=
+				    -1)
+					ebt_print_error("Chain %s already "
+							"exists", argv[optind]);
 				if (ebt_find_target(argv[optind]))
-					print_error("Target with name %s exists"
-					   , argv[optind]);
+					ebt_print_error("Target with name %s "
+							"exists", argv[optind]);
 				ebt_rename_chain(&replace, argv[optind]);
 				optind++;
 				break;
@@ -577,27 +601,31 @@
 
 			if (c == 'D' && optind < argc &&
 			    (argv[optind][0] != '-' ||
-			    (argv[optind][1] >= '0' && argv[optind][1] <= '9'))) {
+			    (argv[optind][1] >= '0' &&
+			     argv[optind][1] <= '9'))) {
 				if (parse_delete_rule(argv[optind],
 				    &rule_nr, &rule_nr_end))
-					print_error("Problem with the "
+					ebt_print_error("Problem with the "
 					            "specified rule number(s)");
 				optind++;
 			}
 			if (c == 'I') {
-				if (optind >= argc || (argv[optind][0] == '-' &&
-				    (argv[optind][1] < '0' || argv[optind][1] > '9')))
-					print_error("No rulenr for -I"
+				if (optind >= argc ||
+				    (argv[optind][0] == '-' &&
+				    (argv[optind][1] < '0' ||
+				    argv[optind][1] > '9')))
+					ebt_print_error("No rulenr for -I"
 					            " specified");
 				rule_nr = strtol(argv[optind], &buffer, 10);
 				if (*buffer != '\0')
-					print_error("Problem with the "
+					ebt_print_error("Problem with the "
 					            "specified rule number");
 				optind++;
 			}
 			if (c == 'P') {
+handle_P:
 				if (optind >= argc)
-					print_error("No policy specified");
+					ebt_print_error("No policy specified");
 				policy = 0;
 				for (i = 0; i < NUM_STANDARD_TARGETS; i++)
 					if (!strcmp(argv[optind],
@@ -608,7 +636,7 @@
 						break;
 					}
 				if (policy == 0)
-					print_error("Wrong policy");
+					ebt_print_error("Wrong policy");
 				optind++;
 			}
 			break;
@@ -618,30 +646,31 @@
 		case 'Z': /* zero counters */
 			if (c == 'Z') {
 				if (replace.flags & OPT_ZERO)
-					print_error("Multiple commands"
+					ebt_print_error("Multiple commands"
 					            " not allowed");
 				if ( (replace.flags & OPT_COMMAND &&
 				   replace.command != 'L'))
-					print_error("command -Z only allowed "
-					            "together with command -L");
+					ebt_print_error("command -Z only "
+					   "allowed together with command -L");
 				replace.flags |= OPT_ZERO;
 			} else {
 				replace.command = c;
 				if (replace.flags & OPT_COMMAND)
-					print_error("Multiple commands"
+					ebt_print_error("Multiple commands"
 					            " not allowed");
 				replace.flags |= OPT_COMMAND;
 			}
-			ebt_get_kernel_table(&replace, table);
+			ebt_get_kernel_table(&replace, table, 0);
 			i = -1;
 			if (optarg) {
-				if ( (i = ebt_get_chainnr(&replace, optarg)) == -1 )
-					print_error("Bad chain");
+				if ( (i = ebt_get_chainnr(&replace, optarg)) ==
+				      -1 )
+					ebt_print_error("Bad chain");
 			} else
 				if (optind < argc && argv[optind][0] != '-') {
 					if ((i = ebt_get_chainnr(&replace,
 					    argv[optind])) == -1)
-						print_error("Bad chain");
+						ebt_print_error("Bad chain");
 					optind++;
 				}
 			if (i != -1) {
@@ -655,19 +684,22 @@
 		case 'V': /* version */
 			replace.command = 'V';
 			if (replace.flags & OPT_COMMAND)
-				print_error("Multiple commands not allowed");
+				ebt_print_error("Multiple commands not "
+						"allowed");
 			PRINT_VERSION;
 			exit(0);
 
 		case 'M': /* modprobe */
 			if (replace.command != 'h')
-				print_error("Please put the -M option earlier");
+				ebt_print_error("Please put the -M option "
+						"earlier");
 			ebt_modprobe = optarg;
 			break;
 
 		case 'h': /* help */
 			if (replace.flags & OPT_COMMAND)
-				print_error("Multiple commands not allowed");
+				ebt_print_error("Multiple commands not "
+						"allowed");
 			replace.command = 'h';
 			/*
 			 * All other arguments should be extension names
@@ -686,11 +718,11 @@
 					ebt_add_watcher(new_entry, w);
 				else {
 					if (!(t = ebt_find_target(argv[optind])))
-						print_error("Extension %s "
+						ebt_print_error("Extension %s "
 						   "not found", argv[optind]);
 					if (replace.flags & OPT_JUMP)
-						print_error("Sorry, you can "
-						 "only see help for one "
+						ebt_print_error("Sorry, you "
+						 "can only see help for one "
 						 "target extension each time");
 					replace.flags |= OPT_JUMP;
 					new_entry->t =
@@ -702,10 +734,11 @@
 
 		case 't': /* table */
 			if (replace.command != 'h')
-				print_error("Please put the -t option first");
+				ebt_print_error("Please put the -t option "
+						"first");
 			ebt_check_option(&replace.flags, OPT_TABLE);
 			if (strlen(optarg) > EBT_TABLE_MAXNAMELEN - 1)
-				print_error("Table name too long");
+				ebt_print_error("Table name too long");
 			strcpy(replace.name, optarg);
 			break;
 
@@ -718,22 +751,24 @@
 		case 's': /* source mac */
 		case 'd': /* destination mac */
 			if ((replace.flags & OPT_COMMAND) == 0)
-				print_error("No command specified");
+				ebt_print_error("No command specified");
 			if ( replace.command != 'A' &&
 			   replace.command != 'D' && replace.command != 'I')
-				print_error("Command and option do not match");
+				ebt_print_error("Command and option do not "
+						"match");
 			if (c == 'i') {
 				ebt_check_option(&replace.flags, OPT_IN);
 				if (replace.selected_chain > 2 &&
 				   replace.selected_chain < NF_BR_BROUTING)
-					print_error("Use in-interface only in "
+					ebt_print_error("Use in-interface "
+					   "only in "
 					   "INPUT, FORWARD, PREROUTING and"
 					   "BROUTING chains");
 				if (ebt_check_inverse(optarg))
 					new_entry->invflags |= EBT_IIN;
 
 				if (optind > argc)
-					print_error("No in-interface "
+					ebt_print_error("No in-interface "
 					            "specified");
 				if (strlen(argv[optind - 1]) >= IFNAMSIZ)
 					print_if_l_error;
@@ -744,15 +779,16 @@
 				ebt_check_option(&replace.flags, OPT_LOGICALIN);
 				if (replace.selected_chain > 2 &&
 				   replace.selected_chain < NF_BR_BROUTING)
-					print_error("Use logical in-interface "
+					ebt_print_error("Use logical "
+					   "in-interface "
 					   "only in INPUT, FORWARD, "
 					   "PREROUTING and BROUTING chains");
 				if (ebt_check_inverse(optarg))
 					new_entry->invflags |= EBT_ILOGICALIN;
 
 				if (optind > argc)
-					print_error("No logical in-interface "
-					            "specified");
+					ebt_print_error("No logical "
+					   "in-interface specified");
 				if (strlen(argv[optind - 1]) >= IFNAMSIZ)
 					print_if_l_error;
 				strcpy(new_entry->logical_in, argv[optind - 1]);
@@ -761,14 +797,14 @@
 			if (c == 'o') {
 				ebt_check_option(&replace.flags, OPT_OUT);
 				if (replace.selected_chain < 2)
-					print_error("Use out-interface only"
-					   " in OUTPUT, FORWARD and "
+					ebt_print_error("Use out-interface "
+					   "only in OUTPUT, FORWARD and "
 					   "POSTROUTING chains");
 				if (ebt_check_inverse(optarg))
 					new_entry->invflags |= EBT_IOUT;
 
 				if (optind > argc)
-					print_error("No out-interface "
+					ebt_print_error("No out-interface "
 					            "specified");
 
 				if (strlen(argv[optind - 1]) >= IFNAMSIZ)
@@ -777,17 +813,19 @@
 				break;
 			}
 			if (c == 3) {
-				ebt_check_option(&replace.flags, OPT_LOGICALOUT);
+				ebt_check_option(&replace.flags,
+						 OPT_LOGICALOUT);
 				if (replace.selected_chain < 2)
-					print_error("Use logical out-interface "
+					ebt_print_error("Use logical "
+					   "out-interface "
 					   "only in OUTPUT, FORWARD and "
 					   "POSTROUTING chains");
 				if (ebt_check_inverse(optarg))
 					new_entry->invflags |= EBT_ILOGICALOUT;
 
 				if (optind > argc)
-					print_error("No logical out-interface "
-					            "specified");
+					ebt_print_error("No logical "
+					   "out-interface specified");
 
 				if (strlen(argv[optind - 1]) >= IFNAMSIZ)
 					print_if_l_error;
@@ -807,15 +845,18 @@
 						break;
 					}
 				if (-i - 1 == EBT_RETURN) {
-					if (replace.selected_chain < NF_BR_NUMHOOKS)
-						print_error("Return target"
-						" only for user defined chains");
+					if (replace.selected_chain <
+					    NF_BR_NUMHOOKS)
+						ebt_print_error("Return target"
+						" only for user defined "
+						"chains");
 				}
 				if (i != NUM_STANDARD_TARGETS)
 					break;
-				if ((i = ebt_get_chainnr(&replace, optarg)) != -1) {
+				if ((i = ebt_get_chainnr(&replace, optarg)) !=
+				     -1) {
 					if (i < NF_BR_NUMHOOKS)
-						print_error("don't jump"
+						ebt_print_error("don't jump"
 						  " to a standard chain");
 					t = ebt_find_target(EBT_STANDARD_TARGET);
 					((struct ebt_standard_target *)
@@ -833,8 +874,8 @@
 					 */
 					if (!t || t ==
 					   (struct ebt_u_target *)new_entry->t)
-						print_error("Illegal target "
-						            "name");
+						ebt_print_error("Illegal "
+						   "target name");
 					new_entry->t =
 					   (struct ebt_entry_target *)t;
 				}
@@ -846,12 +887,12 @@
 					new_entry->invflags |= EBT_ISOURCE;
 
 				if (optind > argc)
-					print_error("No source mac "
+					ebt_print_error("No source mac "
 					            "specified");
 				if (ebt_get_mac_and_mask(argv[optind - 1],
 				   new_entry->sourcemac, new_entry->sourcemsk))
-					print_error("Problem with specified "
-					            "source mac");
+					ebt_print_error("Problem with "
+					   "specified source mac");
 				new_entry->bitmask |= EBT_SOURCEMAC;
 				break;
 			}
@@ -861,12 +902,12 @@
 					new_entry->invflags |= EBT_IDEST;
 
 				if (optind > argc)
-					print_error("No destination mac "
+					ebt_print_error("No destination mac "
 					            "specified");
 				if (ebt_get_mac_and_mask(argv[optind - 1],
 				   new_entry->destmac, new_entry->destmsk))
-					print_error("Problem with specified "
-					            "destination mac");
+					ebt_print_error("Problem with "
+					   "specified destination mac");
 				new_entry->bitmask |= EBT_DESTMAC;
 				break;
 			}
@@ -875,11 +916,11 @@
 				new_entry->invflags |= EBT_IPROTO;
 
 			if (optind > argc)
-				print_error("No protocol specified");
+				ebt_print_error("No protocol specified");
 			new_entry->bitmask &= ~((unsigned int)EBT_NOPROTO);
 			i = strtol(argv[optind - 1], &buffer, 16);
 			if (*buffer == '\0' && (i < 0 || i > 0xFFFF))
-				print_error("Problem with the specified "
+				ebt_print_error("Problem with the specified "
 				            "protocol");
 			new_entry->ethproto = i;
 			if (*buffer != '\0') {
@@ -891,68 +932,74 @@
 				}
 				ent = getethertypebyname(argv[optind - 1]);
 				if (!ent)
-					print_error("Problem with the specified"
-					            " protocol");
+					ebt_print_error("Problem with the "
+							"specified protocol");
 				new_entry->ethproto = ent->e_ethertype;
 			}
 			if (new_entry->ethproto < 1536 &&
 			   !(new_entry->bitmask & EBT_802_3))
-				print_error("Sorry, protocols have values above"
-				            " or equal to 0x0600");
+				ebt_print_error("Sorry, protocols have values "
+						"above or equal to 0x0600");
 			break;
 
 		case 4  : /* Lc */
 			ebt_check_option(&replace.flags, LIST_C);
 			if (replace.command != 'L')
-				print_error("Use --Lc with -L");
+				ebt_print_error("Use --Lc with -L");
 			if (replace.flags & LIST_X)
-				print_error("--Lx not compatible with --Lc");
+				ebt_print_error("--Lx not compatible with "
+						"--Lc");
 			replace.flags |= LIST_C;
 			break;
 		case 5  : /* Ln */
 			ebt_check_option(&replace.flags, LIST_N);
 			if (replace.command != 'L')
-				print_error("Use --Ln with -L");
+				ebt_print_error("Use --Ln with -L");
 			if (replace.flags & LIST_X)
-				print_error("--Lx not compatible with --Ln");
+				ebt_print_error("--Lx not compatible with "
+						"--Ln");
 			replace.flags |= LIST_N;
 			break;
 		case 6  : /* Lx */
 			ebt_check_option(&replace.flags, LIST_X);
 			if (replace.command != 'L')
-				print_error("Use --Lx with -L");
+				ebt_print_error("Use --Lx with -L");
 			if (replace.flags & LIST_C)
-				print_error("--Lx not compatible with --Lc");
+				ebt_print_error("--Lx not compatible with "
+						"--Lc");
 			if (replace.flags & LIST_N)
-				print_error("--Lx not compatible with --Ln");
+				ebt_print_error("--Lx not compatible with "
+						"--Ln");
 			replace.flags |= LIST_X;
 			break;
 		case 12 : /* Lmac2 */
 			ebt_check_option(&replace.flags, LIST_MAC2);
 			if (replace.command != 'L')
-				print_error("Use --Lmac2 with -L");
+				ebt_print_error("Use --Lmac2 with -L");
 			replace.flags |= LIST_MAC2;
 			break;
 		case 8 : /* atomic-commit */
 			replace.command = c;
 			if (replace.flags & OPT_COMMAND)
-				print_error("Multiple commands not allowed");
+				ebt_print_error("Multiple commands not "
+						"allowed");
 			replace.flags |= OPT_COMMAND;
 			if (!replace.filename)
-				print_error("No atomic file specified");
+				ebt_print_error("No atomic file specified");
 			/*
 			 * get the information from the file
 			 */
-			ebt_get_table(&replace);
+			ebt_get_table(&replace, 0);
 			/*
-			 * we don't want the kernel giving us its counters, they would
-			 * overwrite the counters extracted from the file
+			 * we don't want the kernel giving us its counters,
+			 * they would overwrite the counters extracted from
+			 * the file
 			 */
 			replace.num_counters = 0;
 			/*
 			 * make sure the table will be written to the kernel
-			 * possible memory leak here
 			 */
+			free(replace.filename);
 			replace.filename = NULL;
 			break;
 		case 7 : /* atomic-init */
@@ -960,24 +1007,28 @@
 		case 11: /* init-table */
 			replace.command = c;
 			if (replace.flags & OPT_COMMAND)
-				print_error("Multiple commands not allowed");
+				ebt_print_error("Multiple commands not "
+						"allowed");
 			if (c != 11 && !replace.filename)
-				print_error("No atomic file specified");
+				ebt_print_error("No atomic file specified");
 			replace.flags |= OPT_COMMAND;
 			{
 				char *tmp = replace.filename;
+				int init = 1;
 
+				if (c == 10)
+					init = 0;
 				tmp = replace.filename;
 				/* get the kernel table */
 				replace.filename = NULL;
-				ebt_get_kernel_table(&replace, table);
+				ebt_get_kernel_table(&replace, table, init);
 				replace.filename = tmp;
 			}
 			break;
 		case 9 : /* atomic */
 			if (replace.flags & OPT_COMMAND)
-				print_error("--atomic has to come before"
-				" the command");
+				ebt_print_error("--atomic has to come before"
+						" the command");
 			/* another possible memory leak here */
 			replace.filename = (char *)malloc(strlen(optarg) + 1);
 			strcpy(replace.filename, optarg);
@@ -986,7 +1037,7 @@
 			if (!strcmp(optarg, "!"))
 				ebt_check_inverse(optarg);
 			else
-				print_error("Bad argument : %s", optarg);
+				ebt_print_error("Bad argument : %s", optarg);
 			/*
 			 * ebt_check_inverse() did optind++
 			 */
@@ -1026,7 +1077,7 @@
 					break;
 
 			if (w == NULL)
-				print_error("Unknown argument");
+				ebt_print_error("Unknown argument");
 			if (w->used == 0) {
 				ebt_add_watcher(new_entry, w);
 				w->used = 1;
@@ -1034,17 +1085,19 @@
 check_extension:
 			if (replace.command != 'A' && replace.command != 'I' &&
 			   replace.command != 'D')
-				print_error("Extensions only for -A, -I and -D");
+				ebt_print_error("Extensions only for -A, "
+						"-I and -D");
 		}
 		ebt_invert = 0;
 	}
 
 	if ( !table && !(table = ebt_find_table(replace.name)) )
-		print_error("Bad table name");
+		ebt_print_error("Bad table name");
 
 	if ( (replace.flags & OPT_COMMAND) && replace.command != 'L' &&
 	   replace.flags & OPT_ZERO )
-		print_error("Command -Z only allowed together with command -L");
+		ebt_print_error("Command -Z only allowed together with "
+				"command -L");
 
 	/*
 	 * do this after parsing everything, so we can print specific info
@@ -1089,8 +1142,8 @@
 	if (replace.command == 'P') {
 		if (replace.selected_chain < NF_BR_NUMHOOKS &&
 		   policy == EBT_RETURN)
-			print_error("Policy RETURN only allowed for user "
-			            "defined chains");
+			ebt_print_error("Policy RETURN only allowed for user "
+					"defined chains");
 		ebt_change_policy(&replace, policy);
 	} else if (replace.command == 'L') {
 		list_rules();
