diff --git a/ebtables.c b/ebtables.c
index 0cffb90..491aa2e 100644
--- a/ebtables.c
+++ b/ebtables.c
@@ -28,6 +28,7 @@
 #include "include/ebtables_u.h"
 #include "include/ethernetdb.h"
 
+/* Checks whether a command has already been specified */
 #define OPT_COMMANDS (replace->flags & OPT_COMMAND || replace->flags & OPT_ZERO)
 
 #define OPT_COMMAND	0x01
@@ -102,8 +103,8 @@
 
 /* The pointers in here are special:
  * The struct ebt_target pointer is actually a struct ebt_u_target pointer.
- * instead of making yet a few other structs, we just do a cast.
  * I do not feel like using a union.
+ * We need a struct ebt_u_target pointer because we know the address of the data
  * they point to won't change. We want to allow that the struct ebt_u_target.t
  * member can change.
  * The same holds for the struct ebt_match and struct ebt_watcher pointers */
@@ -112,9 +113,8 @@
 
 static int global_option_offset;
 #define OPTION_OFFSET 256
-static struct option *
-merge_options(struct option *oldopts, const struct option *newopts,
-	    unsigned int *options_offset)
+static struct option *merge_options(struct option *oldopts,
+   const struct option *newopts, unsigned int *options_offset)
 {
 	unsigned int num_old, num_new, i;
 	struct option *merge;
@@ -194,6 +194,8 @@
 
 	if (replace->flags & LIST_MAC2)
 		ebt_printstyle_mac = 2;
+	else
+		ebt_printstyle_mac = 0;
 	hlp = entries->entries;
 	if (replace->flags & LIST_X && entries->policy != EBT_ACCEPT) {
 		printf("ebtables -t %s -P %s %s\n", replace->name,
@@ -204,10 +206,12 @@
 		   ebt_standard_targets[-entries->policy - 1]);
 	}
 
-	i = entries->nentries;
-	while (i > 9) {
-		space++;
-		i /= 10;
+	if (replace->flags & LIST_N) {
+		i = entries->nentries;
+		while (i > 9) {
+			space++;
+			i /= 10;
+		}
 	}
 
 	for (i = 0; i < entries->nentries; i++) {
@@ -316,11 +320,13 @@
 			uint64_t pcnt = hlp->cnt.pcnt;
 			uint64_t bcnt = hlp->cnt.bcnt;
 
+#ifdef EBT_DEBUG
 			while (cc->type == CNT_DEL)
 				cc = cc->next;
-			if (cc->change != 0) /* in daemon mode, only change==0 is allowed */
+			if (cc->change != 0) /* In daemon mode, only change==0 is allowed */
 				ebt_print_bug("cc->change != 0");
 			cc = cc->next;
+#endif
 			if (replace->flags & LIST_X)
 				printf("-c %llu %llu", pcnt, bcnt);
 			else
@@ -399,12 +405,17 @@
 /* Execute command L */
 static void list_rules()
 {
-	int i, j;
+	int i;
+#ifdef EBT_DEBUG
+	int j;
+#endif
 	struct ebt_cntchanges *cc = replace->counterchanges;
 
 	if (!(replace->flags & LIST_X))
 		printf("Bridge table: %s\n", table->name);
 	if (replace->selected_chain != -1) {
+#ifdef EBT_DEBUG
+
 		for (i = 0; i < replace->selected_chain; i++) {
 			if (i < NF_BR_NUMHOOKS && !(replace->hook_entry[i]))
 				continue;
@@ -415,6 +426,7 @@
 				cc = cc->next;
 			}
 		}
+#endif
 		list_em(ebt_to_chain(replace), cc);
 	} else {
 		struct ebt_u_chain_list *cl = replace->udc;
@@ -439,20 +451,26 @@
 			if (i < NF_BR_NUMHOOKS) {
 				if (replace->hook_entry[i]) {
 					list_em(replace->hook_entry[i], cc);
+#ifdef EBT_DEBUG
 					j = replace->hook_entry[i]->nentries;
+#endif
 				}
 			} else {
 				if (!cl)
 					break;
 				list_em(cl->udc, cc);
+#ifdef EBT_DEBUG
 				j = cl->udc->nentries;
+#endif
 				cl = cl->next;
 			}
+#ifdef EBT_DEBUG
 			while (j) {
 				if (cc->type != CNT_DEL)
 					j--;
 				cc = cc->next;
 			}
+#endif
 			i++;
 		}
 	}
@@ -485,7 +503,8 @@
 }
 
 /* Incrementing or decrementing rules in daemon mode is not supported as the
- * involved code overload is not worth it. */
+ * involved code overload is not worth it (too annoying to take the increased
+ * counters in the kernel into account). */
 static int parse_change_counters_rule(int argc, char **argv, int *rule_nr, int *rule_nr_end, int exec_style)
 {
 	char *buffer;
@@ -562,6 +581,7 @@
 	ebt_iterate_targets(merge_target);
 }
 
+/* We use exec_style instead of #ifdef's because ebtables.so is a shared object. */
 int do_command(int argc, char *argv[], int exec_style,
                struct ebt_u_replace *replace_)
 {
