diff --git a/src/cmd/mk/arc.c b/src/cmd/mk/arc.c
index 521ef7a..5e0267f 100644
--- a/src/cmd/mk/arc.c
+++ b/src/cmd/mk/arc.c
@@ -41,7 +41,7 @@
 
 	sym = symlook("NREP", S_VAR, 0);
 	if(sym){
-		w = (Word *) sym->value;
+		w = sym->u.ptr;
 		if (w && w->s && *w->s)
 			nreps = atoi(w->s);
 	}
diff --git a/src/cmd/mk/archive.c b/src/cmd/mk/archive.c
index 9955b3f..0128890 100644
--- a/src/cmd/mk/archive.c
+++ b/src/cmd/mk/archive.c
@@ -55,15 +55,15 @@
 	t = mtime(archive);
 	sym = symlook(archive, S_AGG, 0);
 	if(sym){
-		if(force || (t > (long)sym->value)){
+		if(force || (t > sym->u.value)){
 			atimes(archive);
-			sym->value = (void *)t;
+			sym->u.value = t;
 		}
 	}
 	else{
 		atimes(archive);
 		/* mark the aggegate as having been done */
-		symlook(strdup(archive), S_AGG, "")->value = (void *)t;
+		symlook(strdup(archive), S_AGG, "")->u.value = t;
 	}
 		/* truncate long member name to sizeof of name field in archive header */
 	if(dolong)
@@ -72,7 +72,7 @@
 		snprint(buf, sizeof(buf), "%s(%.*s)", archive, SARNAME, member);
 	sym = symlook(buf, S_TIME, 0);
 	if (sym)
-		return (long)sym->value;	/* uggh */
+		return sym->u.value;
 	return 0;
 }
 
@@ -196,7 +196,7 @@
 		}
 		snprint(buf, sizeof buf, "%s(%s)", ar, name);
 		sym = symlook(strdup(buf), S_TIME, (void *)t);
-		sym->value = (void *)t;
+		sym->u.value = t;
 	skip:
 		t = atol(h.size);
 		if(t&01) t++;
diff --git a/src/cmd/mk/env.c b/src/cmd/mk/env.c
index ffb2762..11df34e 100644
--- a/src/cmd/mk/env.c
+++ b/src/cmd/mk/env.c
@@ -79,7 +79,7 @@
 	for(p = myenv; *p; p++)
 		if(strcmp(*p, s->name) == 0)
 			return;
-	envinsert(s->name, (Word *) s->value);
+	envinsert(s->name, s->u.ptr);
 }
 
 void
diff --git a/src/cmd/mk/file.c b/src/cmd/mk/file.c
index 2533343..d9409ba 100644
--- a/src/cmd/mk/file.c
+++ b/src/cmd/mk/file.c
@@ -23,7 +23,7 @@
 
 	sym = symlook(name, S_TIME, 0);
 	if (sym)
-		return (long) sym->value;		/* uggh */
+		return sym->u.value;
 
 	t = mtime(name);
 	if(t == 0)
@@ -77,7 +77,7 @@
 		} while(*s);
 		c = *s;
 		*s = 0;
-		symlook(strdup(cp), S_TIME, (void *)t)->value = (void *)t;
+		symlook(strdup(cp), S_TIME, (void *)t)->u.value = t;
 		if (c)
 			*s++ = c;
 		while(*s){
diff --git a/src/cmd/mk/graph.c b/src/cmd/mk/graph.c
index da346c0..4c46f7b 100644
--- a/src/cmd/mk/graph.c
+++ b/src/cmd/mk/graph.c
@@ -40,14 +40,14 @@
 /*	print("applyrules(%lux='%s')\n", target, target); */
 	sym = symlook(target, S_NODE, 0);
 	if(sym)
-		return (Node *)(sym->value);
+		return sym->u.ptr;
 	target = strdup(target);
 	node = newnode(target);
 	head.n = 0;
 	head.next = 0;
 	sym = symlook(target, S_TARGET, 0);
 	memset((char*)rmatch, 0, sizeof(rmatch));
-	for(r = sym? (Rule *)(sym->value):0; r; r = r->chain){
+	for(r = sym? sym->u.ptr:0; r; r = r->chain){
 		if(r->attr&META) continue;
 		if(strcmp(target, r->target)) continue;
 		if((!r->recipe || !*r->recipe) && (!r->tail || !r->tail->s || !*r->tail->s)) continue;	/* no effect; ignore */
diff --git a/src/cmd/mk/mk.c b/src/cmd/mk/mk.c
index 5ae4fc2..654d063 100644
--- a/src/cmd/mk/mk.c
+++ b/src/cmd/mk/mk.c
@@ -221,11 +221,11 @@
 				str = strdup(buf);
 			ret = pcmp(arc->prog, node->name, arc->n->name, arc->r->shellt, arc->r->shellcmd);
 			if(sym)
-				sym->value = (void *)ret;
+				sym->u.value = ret;
 			else
 				symlook(str, S_OUTOFDATE, (void *)ret);
 		} else
-			ret = (int)sym->value;
+			ret = sym->u.value;
 		return(ret-1);
 	} else if(strchr(arc->n->name, '(') && arc->n->time == 0)  /* missing archive member */
 		return 1;
diff --git a/src/cmd/mk/mk.h b/src/cmd/mk/mk.h
index 81f9d70..a40e9de 100644
--- a/src/cmd/mk/mk.h
+++ b/src/cmd/mk/mk.h
@@ -129,7 +129,10 @@
 {
 	short		space;
 	char		*name;
-	void		*value;
+	union {
+		void	*ptr;
+		uintptr	value;
+	} u;
 	struct Symtab	*next;
 } Symtab;
 
diff --git a/src/cmd/mk/recipe.c b/src/cmd/mk/recipe.c
index bf7f8ab..7993e09 100644
--- a/src/cmd/mk/recipe.c
+++ b/src/cmd/mk/recipe.c
@@ -59,7 +59,7 @@
 			aw = aw->next;
 			if((s = symlook(buf, S_NODE, 0)) == 0)
 				continue;	/* not a node we are interested in */
-			n = (Node *)s->value;
+			n = s->u.ptr;
 			if(aflag == 0 && n->time) {
 				for(a = n->prereqs; a; a = a->next)
 					if(a->n && outofdate(n, a, 0))
diff --git a/src/cmd/mk/rule.c b/src/cmd/mk/rule.c
index d73595d..439d611 100644
--- a/src/cmd/mk/rule.c
+++ b/src/cmd/mk/rule.c
@@ -15,7 +15,7 @@
 	r = 0;
 	reuse = 0;
 	if(sym = symlook(head, S_TARGET, 0)){
-		for(r = (Rule *)sym->value; r; r = r->chain)
+		for(r = sym->u.ptr; r; r = r->chain)
 			if(rcmp(r, head, tail) == 0){
 				reuse = 1;
 				break;
@@ -35,7 +35,7 @@
 	r->prog = prog;
 	r->rule = nrules++;
 	if(!reuse){
-		rr = (Rule *)symlook(head, S_TARGET, (void *)r)->value;
+		rr = symlook(head, S_TARGET, (void *)r)->u.ptr;
 		if(rr != r){
 			r->chain = rr->chain;
 			rr->chain = r;
diff --git a/src/cmd/mk/run.c b/src/cmd/mk/run.c
index 439cc0a..dd225c0 100644
--- a/src/cmd/mk/run.c
+++ b/src/cmd/mk/run.c
@@ -168,7 +168,7 @@
 	for(w = j->t; w; w = w->next){
 		if((s = symlook(w->s, S_NODE, 0)) == 0)
 			continue;	/* not interested in this node */
-		update(uarg, (Node *)s->value);
+		update(uarg, s->u.ptr);
 	}
 	if(nrunning < nproclimit)
 		sched();
@@ -182,7 +182,7 @@
 	Word *w;
 
 	if(sym = symlook("NPROC", S_VAR, 0)) {
-		w = (Word *) sym->value;
+		w = sym->u.ptr;
 		if (w && w->s && w->s[0])
 			nproclimit = atoi(w->s);
 	}
diff --git a/src/cmd/mk/symtab.c b/src/cmd/mk/symtab.c
index 06a4d14..17674c4 100644
--- a/src/cmd/mk/symtab.c
+++ b/src/cmd/mk/symtab.c
@@ -38,7 +38,7 @@
 	s = (Symtab *)Malloc(sizeof(Symtab));
 	s->space = space;
 	s->name = sym;
-	s->value = install;
+	s->u.ptr = install;
 	s->next = hash[h];
 	hash[h] = s;
 	return(s);
diff --git a/src/cmd/mk/unix.c b/src/cmd/mk/unix.c
index 7ecce69..c63d3ce 100644
--- a/src/cmd/mk/unix.c
+++ b/src/cmd/mk/unix.c
@@ -41,7 +41,7 @@
 			continue;
 		s = strdup(*p);
 		setvar(s, (void *)w);
-		symlook(s, S_EXPORTED, (void*)"")->value = (void*)"";
+		symlook(s, S_EXPORTED, (void*)"")->u.ptr = "";
 	}
 }
 
diff --git a/src/cmd/mk/var.c b/src/cmd/mk/var.c
index 8429918..3efe382 100644
--- a/src/cmd/mk/var.c
+++ b/src/cmd/mk/var.c
@@ -1,9 +1,9 @@
 #include	"mk.h"
 
 void
-setvar(char *name, void *value)
+setvar(char *name, void *ptr)
 {
-	symlook(name, S_VAR, value)->value = value;
+	symlook(name, S_VAR, ptr)->u.ptr = ptr;
 	symlook(name, S_MAKEVAR, (void*)"");
 }
 
@@ -13,7 +13,7 @@
 	Word *w;
 
 	Bprint(&bout, "\t%s=", s->name);
-	for (w = (Word *) s->value; w; w = w->next)
+	for (w = s->u.ptr; w; w = w->next)
 		Bprint(&bout, "'%s'", w->s);
 	Bprint(&bout, "\n");
 }
diff --git a/src/cmd/mk/varsub.c b/src/cmd/mk/varsub.c
index 5b7c984..223ba78 100644
--- a/src/cmd/mk/varsub.c
+++ b/src/cmd/mk/varsub.c
@@ -66,7 +66,7 @@
 	sym = symlook(name, S_VAR, 0);
 	if(sym){
 			/* check for at least one non-NULL value */
-		for (w = (Word*)sym->value; w; w = w->next)
+		for (w = sym->u.ptr; w; w = w->next)
 			if(w->s && *w->s)
 				return wdup(w);
 	}
@@ -113,10 +113,10 @@
 	*s = end+1;
 	
 	sym = symlook(buf->start, S_VAR, 0);
-	if(sym == 0 || sym->value == 0)
+	if(sym == 0 || sym->u.ptr == 0)
 		w = newword(buf->start);
 	else
-		w = subsub((Word*) sym->value, cp, end);
+		w = subsub(sym->u.ptr, cp, end);
 	freebuf(buf);
 	return w;
 }
