diff --git a/communication.c b/communication.c
index dcfd8dc..bd7aa65 100644
--- a/communication.c
+++ b/communication.c
@@ -441,7 +441,7 @@
 }
 
 static int
-ebt_translate_entry(struct ebt_entry *e, unsigned int *hook, int *n, int *cnt,
+ebt_translate_entry(struct ebt_entry *e, int *hook, int *n, int *cnt,
    int *totalcnt, struct ebt_u_entry **u_e, struct ebt_u_replace *u_repl,
    unsigned int valid_hooks, char *base, struct ebt_cntchanges **cc)
 {
@@ -540,7 +540,7 @@
 
 /* Initialize all chain headers */
 static int
-ebt_translate_chains(struct ebt_entry *e, unsigned int *hook,
+ebt_translate_chains(struct ebt_entry *e, int *hook,
    struct ebt_u_replace *u_repl, unsigned int valid_hooks)
 {
 	int i;
diff --git a/extensions/ebt_among.c b/extensions/ebt_among.c
index 65ce481..7e01b49 100644
--- a/extensions/ebt_among.c
+++ b/extensions/ebt_among.c
@@ -375,7 +375,7 @@
 		const struct ebt_mac_wormhash_tuple *p;
 
 		p = (const struct ebt_mac_wormhash_tuple *)(&wh->pool[i]);
-		ebt_print_mac(((const char *) &p->cmp[0]) + 2);
+		ebt_print_mac(((const unsigned char *) &p->cmp[0]) + 2);
 		if (p->ip) {
 			ip = (unsigned char *) &p->ip;
 			printf("=%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
diff --git a/extensions/ebt_arp.c b/extensions/ebt_arp.c
index 9eed645..ffe6781 100644
--- a/extensions/ebt_arp.c
+++ b/extensions/ebt_arp.c
@@ -96,8 +96,8 @@
 	char *end;
 	uint32_t *addr;
 	uint32_t *mask;
-	char *maddr;
-	char *mmask;
+	unsigned char *maddr;
+	unsigned char *mmask;
 
 	switch (c) {
 	case ARP_OPCODE:
diff --git a/extensions/ebt_log.c b/extensions/ebt_log.c
index 7429479..575d12e 100644
--- a/extensions/ebt_log.c
+++ b/extensions/ebt_log.c
@@ -118,7 +118,7 @@
 			ebt_print_error2("Prefix too long");
 		if (strchr(optarg, '\"'))
 			ebt_print_error2("Use of \\\" is not allowed in the prefix");
-		strcpy(loginfo->prefix, optarg);
+		strcpy((char *)loginfo->prefix, (char *)optarg);
 		break;
 
 	case LOG_LEVEL:
@@ -188,7 +188,7 @@
 		return 0;
 	if (loginfo1->bitmask != loginfo2->bitmask)
 		return 0;
-	return !strcmp(loginfo1->prefix, loginfo2->prefix);
+	return !strcmp((char *)loginfo1->prefix, (char *)loginfo2->prefix);
 }
 
 static struct ebt_u_watcher log_watcher =
diff --git a/extensions/ebt_stp.c b/extensions/ebt_stp.c
index 307131f..08a48fb 100644
--- a/extensions/ebt_stp.c
+++ b/extensions/ebt_stp.c
@@ -236,12 +236,14 @@
 		break;
 	case EBT_STP_ROOTADDR:
 		if (ebt_get_mac_and_mask(argv[optind-1],
-		    stpinfo->config.root_addr, stpinfo->config.root_addrmsk))
+		    (unsigned char *)stpinfo->config.root_addr,
+		    (unsigned char *)stpinfo->config.root_addrmsk))
 			ebt_print_error("Bad --stp-root-addr address");
 		break;
 	case EBT_STP_SENDERADDR:
-		if (ebt_get_mac_and_mask(argv[optind-1], stpinfo->config.sender_addr,
-		    stpinfo->config.sender_addrmsk))
+		if (ebt_get_mac_and_mask(argv[optind-1],
+		    (unsigned char *)stpinfo->config.sender_addr,
+		    (unsigned char *)stpinfo->config.sender_addrmsk))
 			ebt_print_error("Bad --stp-sender-addr address");
 		break;
 	default:
@@ -293,13 +295,15 @@
 		} else if (EBT_STP_ROOTPRIO == (1 << i))
 			print_range(c->root_priol, c->root_priou);
 		else if (EBT_STP_ROOTADDR == (1 << i))
-			ebt_print_mac_and_mask(c->root_addr, c->root_addrmsk);
+			ebt_print_mac_and_mask((unsigned char *)c->root_addr,
+			   (unsigned char*)c->root_addrmsk);
 		else if (EBT_STP_ROOTCOST == (1 << i))
 			print_range(c->root_costl, c->root_costu);
 		else if (EBT_STP_SENDERPRIO == (1 << i))
 			print_range(c->sender_priol, c->sender_priou);
 		else if (EBT_STP_SENDERADDR == (1 << i))
-			ebt_print_mac_and_mask(c->sender_addr, c->sender_addrmsk);
+			ebt_print_mac_and_mask((unsigned char *)c->sender_addr,
+			   (unsigned char *)c->sender_addrmsk);
 		else if (EBT_STP_PORT == (1 << i))
 			print_range(c->portl, c->portu);
 		else if (EBT_STP_MSGAGE == (1 << i))
diff --git a/include/ebtables_u.h b/include/ebtables_u.h
index 25f3fbb..f1f1dfd 100644
--- a/include/ebtables_u.h
+++ b/include/ebtables_u.h
@@ -292,9 +292,9 @@
 void ebt_check_option(unsigned int *flags, unsigned int mask);
 #define ebt_check_inverse(arg) _ebt_check_inverse(arg, argc, argv)
 int _ebt_check_inverse(const char option[], int argc, char **argv);
-void ebt_print_mac(const char *mac);
-void ebt_print_mac_and_mask(const char *mac, const char *mask);
-int ebt_get_mac_and_mask(char *from, char *to, char *mask);
+void ebt_print_mac(const unsigned char *mac);
+void ebt_print_mac_and_mask(const unsigned char *mac, const unsigned char *mask);
+int ebt_get_mac_and_mask(const char *from, unsigned char *to, unsigned char *mask);
 void ebt_parse_ip_address(char *address, uint32_t *addr, uint32_t *msk);
 char *ebt_mask_to_dotted(uint32_t mask);
 
diff --git a/useful_functions.c b/useful_functions.c
index 0cd3d51..131851a 100644
--- a/useful_functions.c
+++ b/useful_functions.c
@@ -44,18 +44,18 @@
  * then always has the same length */
 int ebt_printstyle_mac;
 
-void ebt_print_mac(const char *mac)
+void ebt_print_mac(const unsigned char *mac)
 {
 	if (ebt_printstyle_mac == 2) {
 		int j;
 		for (j = 0; j < ETH_ALEN; j++)
-			printf("%02x%s", (unsigned char)mac[j],
+			printf("%02x%s", mac[j],
 				(j==ETH_ALEN-1) ? "" : ":");
 	} else
 		printf("%s", ether_ntoa((struct ether_addr *) mac));
 }
 
-void ebt_print_mac_and_mask(const char *mac, const char *mask)
+void ebt_print_mac_and_mask(const unsigned char *mac, const unsigned char *mask)
 {
 	char hlpmsk[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
@@ -91,7 +91,8 @@
 }
 
 /* Put the mac address into 6 (ETH_ALEN) bytes returns 0 on success. */
-int ebt_get_mac_and_mask(char *from, char *to, char *mask)
+int ebt_get_mac_and_mask(const char *from, unsigned char *to,
+  unsigned char *mask)
 {
 	char *p;
 	int i;
