diff --git a/include/usage.h b/include/usage.h
index d38a16e90..9f7358906 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -61,12 +61,11 @@
      "\n	-v	Verbose" \
 
 #define arp_trivial_usage \
-       "\n" \
-       "[-vn]	[-H type] [-i if] -a [hostname]\n" \
-       "[-v]		  [-i if] -d hostname [pub]\n" \
-       "[-v]	[-H type] [-i if] -s hostname hw_addr [temp]\n" \
-       "[-v]	[-H type] [-i if] -s hostname hw_addr [netmask nm] pub\n" \
-       "[-v]	[-H type] [-i if] -Ds hostname ifa [netmask nm] pub\n"
+     "\n[-vn]	[-H type] [-i if] -a [hostname]" \
+     "\n[-v]		  [-i if] -d hostname [pub]" \
+     "\n[-v]	[-H type] [-i if] -s hostname hw_addr [temp]" \
+     "\n[-v]	[-H type] [-i if] -s hostname hw_addr [netmask nm] pub" \
+     "\n[-v]	[-H type] [-i if] -Ds hostname ifa [netmask nm] pub"
 #define arp_full_usage "\n\n" \
        "Manipulate ARP cache\n" \
      "\nOptions:" \
diff --git a/networking/arp.c b/networking/arp.c
index e2c5bbb7f..278f2dc9a 100644
--- a/networking/arp.c
+++ b/networking/arp.c
@@ -27,24 +27,40 @@
 #define DFLT_AF "inet"
 #define DFLT_HW "ether"
 
-#define	ARP_OPT_A (0x1)
-#define	ARP_OPT_p (0x2)
-#define	ARP_OPT_H (0x4)
-#define	ARP_OPT_t (0x8)
-#define	ARP_OPT_i (0x10)
-#define	ARP_OPT_a (0x20)
-#define	ARP_OPT_d (0x40)
-#define	ARP_OPT_n (0x80)	/* do not resolve addresses     */
-#define	ARP_OPT_D (0x100)	/* HW-address is devicename     */
-#define	ARP_OPT_s (0x200)
-#define	ARP_OPT_v (0x400 * DEBUG)	/* debugging output flag        */
+enum {
+	ARP_OPT_A = (1 << 0),
+	ARP_OPT_p = (1 << 1),
+	ARP_OPT_H = (1 << 2),
+	ARP_OPT_t = (1 << 3),
+	ARP_OPT_i = (1 << 4),
+	ARP_OPT_a = (1 << 5),
+	ARP_OPT_d = (1 << 6),
+	ARP_OPT_n = (1 << 7), /* do not resolve addresses */
+	ARP_OPT_D = (1 << 8), /* HW-address is devicename */
+	ARP_OPT_s = (1 << 9),
+	ARP_OPT_v = (1 << 10) * DEBUG, /* debugging output flag */
+};
 
+enum {
+	sockfd = 3, /* active socket descriptor */
+};
+
+struct globals {
+	const struct aftype *ap; /* current address family */
+	const struct hwtype *hw; /* current hardware type */
+	const char *device;      /* current device */
+	smallint hw_set;         /* flag if hw-type was set (-H) */
+
+};
+#define G (*(struct globals*)&bb_common_bufsiz1)
+#define ap         (G.ap        )
+#define hw         (G.hw        )
+#define device     (G.device    )
+#define hw_set     (G.hw_set    )
+#define INIT_G() do { \
+	device = ""; \
+} while (0)
 
-static const struct aftype *ap; /* current address family       */
-static const struct hwtype *hw; /* current hardware type        */
-static int sockfd;              /* active socket descriptor     */
-static smallint hw_set;         /* flag if hw-type was set (-H) */
-static const char *device = ""; /* current device               */
 
 static const char options[] ALIGN1 =
 	"pub\0"
@@ -445,27 +461,30 @@ int arp_main(int argc UNUSED_PARAM, char **argv)
 {
 	const char *hw_type = "ether";
 	const char *protocol;
+	unsigned opts;
 
-	/* Initialize variables... */
+	INIT_G();
+
+	xmove_fd(xsocket(AF_INET, SOCK_DGRAM, 0), sockfd);
 	ap = get_aftype(DFLT_AF);
 	if (!ap)
 		bb_error_msg_and_die("%s: %s not supported", DFLT_AF, "address family");
 
-	getopt32(argv, "A:p:H:t:i:adnDsv", &protocol, &protocol,
+	opts = getopt32(argv, "A:p:H:t:i:adnDsv", &protocol, &protocol,
 				 &hw_type, &hw_type, &device);
 	argv += optind;
-	if (option_mask32 & ARP_OPT_A || option_mask32 & ARP_OPT_p) {
+	if (opts & (ARP_OPT_A | ARP_OPT_p)) {
 		ap = get_aftype(protocol);
 		if (ap == NULL)
 			bb_error_msg_and_die("%s: unknown %s", protocol, "address family");
 	}
-	if (option_mask32 & ARP_OPT_A || option_mask32 & ARP_OPT_p) {
+	if (opts & (ARP_OPT_A | ARP_OPT_p)) {
 		hw = get_hwtype(hw_type);
 		if (hw == NULL)
 			bb_error_msg_and_die("%s: unknown %s", hw_type, "hardware type");
 		hw_set = 1;
 	}
-	//if (option_mask32 & ARP_OPT_i)... -i
+	//if (opts & ARP_OPT_i)... -i
 
 	if (ap->af != AF_INET) {
 		bb_error_msg_and_die("%s: kernel only supports 'inet'", ap->name);
@@ -482,16 +501,15 @@ int arp_main(int argc UNUSED_PARAM, char **argv)
 		bb_error_msg_and_die("%s: %s without ARP support",
 							 hw->name, "hardware type");
 	}
-	sockfd = xsocket(AF_INET, SOCK_DGRAM, 0);
 
 	/* Now see what we have to do here... */
-	if (option_mask32 & (ARP_OPT_d|ARP_OPT_s)) {
+	if (opts & (ARP_OPT_d | ARP_OPT_s)) {
 		if (argv[0] == NULL)
 			bb_error_msg_and_die("need host name");
-		if (option_mask32 & ARP_OPT_s)
+		if (opts & ARP_OPT_s)
 			return arp_set(argv);
 		return arp_del(argv);
 	}
-	//if (option_mask32 & ARP_OPT_a) - default
+	//if (opts & ARP_OPT_a) - default
 	return arp_show(argv[0]);
 }