Index: rttherm/viewtherm.c
===================================================================
--- rttherm/viewtherm.c	(revision 54048)
+++ rttherm/viewtherm.c	(working copy)
@@ -389,7 +389,7 @@
 	mlib_free(regp);
     }
     if (env_region.reg_mfuncs) {
-	bu_free((char *)env_region.reg_name, "env_region.reg_name");
+	bu_free((genptr_t)env_region.reg_name, "env_region.reg_name");
 	env_region.reg_name = (char *)0;
 	mlib_free(&env_region);
     }
@@ -663,7 +663,7 @@
 	    scanline[y].sl_buf = (char *)0;
 	}
     }
-    bu_free((char *)scanline, "struct scanline[height]");
+    bu_free((genptr_t)scanline, "struct scanline[height]");
     scanline = (struct scanline *)0;
 }
 
Index: libged/clone.c
===================================================================
--- libged/clone.c	(revision 54048)
+++ libged/clone.c	(working copy)
@@ -348,7 +348,7 @@
 	}
     }
     if (rp)
-	bu_free((char *)rp, "copy_solid record[]");
+	bu_free((genptr_t)rp, "copy_solid record[]");
 
     return;
 }
@@ -547,7 +547,7 @@
 	}
 
 	/* our responsibility to free the record */
-	bu_free((char *)rp, "deallocate copy_v4_comb() db_getmrec() record");
+	bu_free((genptr_t)rp, "deallocate copy_v4_comb() db_getmrec() record");
     }
 
     return dp;
@@ -770,11 +770,11 @@
 
 done_copy_tree:
     if (rp)
-	bu_free((char *)rp, "copy_tree record[]");
+	bu_free((genptr_t)rp, "copy_tree record[]");
     if (copyname)
-	bu_free((char *)copyname, "free clone_get_name() copyname");
+	bu_free((genptr_t)copyname, "free clone_get_name() copyname");
     if (nextname)
-	bu_free((char *)nextname, "free clone_get_name() copyname");
+	bu_free((genptr_t)nextname, "free clone_get_name() copyname");
 
     return copy;
 }
Index: libged/put_comb.c
===================================================================
--- libged/put_comb.c	(revision 54048)
+++ libged/put_comb.c	(working copy)
@@ -360,7 +360,7 @@
 	    if (ptr == (char *)NULL) {
 		bu_list_free(&HeadLines.l);
 		if (rt_tree_array)
-		    bu_free((char *)rt_tree_array, "red: tree list");
+		    bu_free((genptr_t)rt_tree_array, "red: tree list");
 		bu_log("no name specified\n");
 		bu_free(str, "dealloc bu_strdup str");
 		return GED_ERROR;
@@ -395,9 +395,9 @@
 		    ptr = strtok((char *)NULL, _delims);
 		    if (!ptr) {
 			bu_log("incomplete matrix for member %s - No changes made\n", name);
-			bu_free((char *)matrix, "red: matrix");
+			bu_free((genptr_t)matrix, "red: matrix");
 			if (rt_tree_array)
-			    bu_free((char *)rt_tree_array, "red: tree list");
+			    bu_free((genptr_t)rt_tree_array, "red: tree list");
 			bu_list_free(&HeadLines.l);
 			bu_free(str, "dealloc bu_strdup str");
 			return GED_ERROR;
@@ -405,7 +405,7 @@
 		    matrix[k] = atof(ptr);
 		}
 		if (bn_mat_is_identity(matrix)) {
-		    bu_free((char *)matrix, "red: matrix");
+		    bu_free((genptr_t)matrix, "red: matrix");
 		    matrix = (matp_t)NULL;
 		}
 
Index: libged/comb_std.c
===================================================================
--- libged/comb_std.c	(revision 54048)
+++ libged/comb_std.c	(working copy)
@@ -252,9 +252,9 @@
 	tp->tr_b.tb_left = prev->tp;
 	tp->tr_b.tb_right = next->tp;
 	BU_LIST_DEQUEUE(&tok->l);
-	bu_free((char *)tok, "tok");
+	bu_free((genptr_t)tok, "tok");
 	BU_LIST_DEQUEUE(&prev->l);
-	bu_free((char *)prev, "prev");
+	bu_free((genptr_t)prev, "prev");
 	next->tp = tp;
 	tok = next;
     }
@@ -290,9 +290,9 @@
 	tp->tr_b.tb_left = prev->tp;
 	tp->tr_b.tb_right = next->tp;
 	BU_LIST_DEQUEUE(&tok->l);
-	bu_free((char *)tok, "tok");
+	bu_free((genptr_t)tok, "tok");
 	BU_LIST_DEQUEUE(&prev->l);
-	bu_free((char *)prev, "prev");
+	bu_free((genptr_t)prev, "prev");
 	next->tp = tp;
 	tok = next;
     }
@@ -318,9 +318,9 @@
 
 	/* this is an eligible operand surrounded by parens */
 	BU_LIST_DEQUEUE(&next->l);
-	bu_free((char *)next, "next");
+	bu_free((genptr_t)next, "next");
 	BU_LIST_DEQUEUE(&prev->l);
-	bu_free((char *)prev, "prev");
+	bu_free((genptr_t)prev, "prev");
     }
 
     if (hp->forw == hp->back && hp->forw != hp)
@@ -349,7 +349,7 @@
     tok = BU_LIST_NEXT(tokens, hp);
     final_tree = tok->tp;
     BU_LIST_DEQUEUE(&tok->l);
-    bu_free((char *)tok, "tok");
+    bu_free((genptr_t)tok, "tok");
 
     return final_tree;
 }
Index: libged/erase.c
===================================================================
--- libged/erase.c	(revision 54048)
+++ libged/erase.c	(working copy)
@@ -162,7 +162,7 @@
 
 	max_count = BU_PTBL_LEN(tbl) + last_opt + 1;
 	bu_ptbl_free(tbl);
-	bu_free((char *)tbl, "ged_erase ptbl");
+	bu_free((genptr_t)tbl, "ged_erase ptbl");
 	new_argv = (char **)bu_calloc(max_count+1, sizeof(char *), "ged_erase new_argv");
 	new_argc = bu_argv_from_string(new_argv, max_count, bu_vls_addr(&vls));
 
Index: libged/analyze.c
===================================================================
--- libged/analyze.c	(revision 54048)
+++ libged/analyze.c	(working copy)
@@ -215,7 +215,7 @@
     bu_vls_printf(gedp->ged_result_str, "%-*.*s+-%-*.*s-+\n",
 		  indent, indent, " ",
 		  nd, nd, dashes.buf);
-    bu_free((char *)table.rows, "print_volume_table: rows");
+    bu_free((genptr_t)table.rows, "print_volume_table: rows");
 }
 
 void print_edges_table(struct ged *gedp, table_t *table)
@@ -958,8 +958,8 @@
 	    tot_vol/GALLONS_TO_MM3
 	    );
 
-    bu_free((char *)face.pts, "analyze_arb8: pts");
-    bu_free((char *)table.rows, "analyze_arb8: rows");
+    bu_free((genptr_t)face.pts, "analyze_arb8: pts");
+    bu_free((genptr_t)table.rows, "analyze_arb8: rows");
 }
 
 
@@ -1045,10 +1045,10 @@
 	    );
 
     for (i = 0; i < aip->neqn; i++) {
-	bu_free((char *)faces[i].pts, "analyze_arbn: pts");
+	bu_free((genptr_t)faces[i].pts, "analyze_arbn: pts");
     }
-    bu_free((char *)faces, "analyze_arbn: faces");
-    bu_free((char *)table.rows, "analyze_arbn: rows");
+    bu_free((genptr_t)faces, "analyze_arbn: faces");
+    bu_free((genptr_t)table.rows, "analyze_arbn: rows");
     bu_vls_free(&tmpstr);
 }
 
@@ -1122,8 +1122,8 @@
 	    tot_vol/GALLONS_TO_MM3
 	    );
 
-    bu_free((char *)face.pts, "analyze_bot: pts");
-    bu_free((char *)table.rows, "analyze_bot: rows");
+    bu_free((genptr_t)face.pts, "analyze_bot: pts");
+    bu_free((genptr_t)table.rows, "analyze_bot: rows");
 }
 
 
@@ -1219,8 +1219,8 @@
 	    tot_vol/GALLONS_TO_MM3
 	    );
 
-    bu_free((char *)face.pts, "analyze_ars: pts");
-    bu_free((char *)table.rows, "analyze_ars: rows");
+    bu_free((genptr_t)face.pts, "analyze_ars: pts");
+    bu_free((genptr_t)table.rows, "analyze_ars: rows");
     bu_vls_free(&tmpstr);
 }
 
Index: libged/concat.c
===================================================================
--- libged/concat.c	(revision 54048)
+++ libged/concat.c	(working copy)
@@ -512,7 +512,7 @@
     /* Free the Hash tables */
     ptr = Tcl_FirstHashEntry(&name_tbl, &search);
     while (ptr) {
-	bu_free((char *)Tcl_GetHashValue(ptr), "new name");
+	bu_free((genptr_t)Tcl_GetHashValue(ptr), "new name");
 	ptr = Tcl_NextHashEntry(&search);
     }
     Tcl_DeleteHashTable(&name_tbl);
Index: libged/decompose.c
===================================================================
--- libged/decompose.c	(revision 54048)
+++ libged/decompose.c	(working copy)
@@ -114,7 +114,7 @@
 
 	    /* duplicate shell */
 	    tmp_s = (struct shell *)nmg_dup_shell(s, &trans_tbl, &gedp->ged_wdbp->wdb_tol);
-	    bu_free((char *)trans_tbl, "trans_tbl");
+	    bu_free((genptr_t)trans_tbl, "trans_tbl");
 
 	    /* move duplicate to temp region */
 	    (void) nmg_mv_shell_to_region(tmp_s, tmp_r);
Index: libged/ls.c
===================================================================
--- libged/ls.c	(revision 54048)
+++ libged/ls.c	(working copy)
@@ -455,7 +455,7 @@
 	}
 
 	bu_ptbl_free(tbl);
-	bu_free((char *)tbl, "wdb_ls_cmd ptbl");
+	bu_free((genptr_t)tbl, "wdb_ls_cmd ptbl");
     } else if (argc > 0) {
 	/* Just list specified names */
 	dirp = _ged_getspace(gedp->ged_wdbp->dbip, argc);
Index: libged/importFg4Section.c
===================================================================
--- libged/importFg4Section.c	(revision 54048)
+++ libged/importFg4Section.c	(working copy)
@@ -485,11 +485,11 @@
 	      bot_ip.faces, bot_ip.thickness, bot_ip.face_mode);
 
     if (mode == PLATE_MODE) {
-	bu_free((char *)bot_ip.thickness, "BOT thickness");
-	bu_free((char *)bot_ip.face_mode, "BOT face_mode");
+	bu_free((genptr_t)bot_ip.thickness, "BOT thickness");
+	bu_free((genptr_t)bot_ip.face_mode, "BOT face_mode");
     }
-    bu_free((char *)bot_ip.vertices, "BOT vertices");
-    bu_free((char *)bot_ip.faces, "BOT faces");
+    bu_free((genptr_t)bot_ip.vertices, "BOT vertices");
+    bu_free((genptr_t)bot_ip.faces, "BOT faces");
 }
 
 
@@ -577,12 +577,12 @@
 
     make_bot_object(argv[1], gedp->ged_wdbp);
     free((void *)lines);
-    bu_free((void *)grid_pts, "importFg4Section: grid_pts");
+    bu_free((genptr_t)grid_pts, "importFg4Section: grid_pts");
 
     /* free memory associated with globals */
-    bu_free((void *)faces, "importFg4Section: faces");
-    bu_free((void *)thickness, "importFg4Section: thickness");
-    bu_free((void *)facemode, "importFg4Section: facemode");
+    bu_free((genptr_t)faces, "importFg4Section: faces");
+    bu_free((genptr_t)thickness, "importFg4Section: thickness");
+    bu_free((genptr_t)facemode, "importFg4Section: facemode");
 
     faces = NULL;
     thickness = NULL;
Index: libged/png.c
===================================================================
--- libged/png.c	(revision 54048)
+++ libged/png.c	(working copy)
@@ -358,8 +358,8 @@
     info_p = png_create_info_struct(png_p);
     if (!info_p) {
 	bu_vls_printf(gedp->ged_result_str, "Could not create PNG info structure\n");
-	bu_free((void *)image, "draw_png, image");
-	bu_free((void *)bytes, "draw_png, bytes");
+	bu_free((genptr_t)image, "draw_png, image");
+	bu_free((genptr_t)bytes, "draw_png, bytes");
 
 	return GED_ERROR;
     }
@@ -387,8 +387,8 @@
     png_write_image(png_p, image);
     png_write_end(png_p, NULL);
 
-    bu_free((void *)image, "draw_png, image");
-    bu_free((void *)bytes, "draw_png, bytes");
+    bu_free((genptr_t)image, "draw_png, image");
+    bu_free((genptr_t)bytes, "draw_png, bytes");
 
     return GED_OK;
 }
Index: libged/lt.c
===================================================================
--- libged/lt.c	(revision 54048)
+++ libged/lt.c	(working copy)
@@ -100,7 +100,7 @@
 	bu_vls_free(&vls);
 
 	if (rt_tree_array)
-	    bu_free((char *)rt_tree_array, "printnode: rt_tree_array");
+	    bu_free((genptr_t)rt_tree_array, "printnode: rt_tree_array");
     }
     rt_db_free_internal(&intern);
 
Index: libged/comb.c
===================================================================
--- libged/comb.c	(revision 54048)
+++ libged/comb.c	(working copy)
@@ -239,7 +239,7 @@
     /* and finally, write it out */
     GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, 0);
 
-    bu_free((char *)tree_list, "combadd: tree_list");
+    bu_free((genptr_t)tree_list, "combadd: tree_list");
 
     return dp;
 }
Index: libged/wdb_comb_std.c
===================================================================
--- libged/wdb_comb_std.c	(revision 54048)
+++ libged/wdb_comb_std.c	(working copy)
@@ -258,9 +258,9 @@
 	tp->tr_b.tb_left = prev->tp;
 	tp->tr_b.tb_right = next->tp;
 	BU_LIST_DEQUEUE(&tok->l);
-	bu_free((char *)tok, "tok");
+	bu_free((genptr_t)tok, "tok");
 	BU_LIST_DEQUEUE(&prev->l);
-	bu_free((char *)prev, "prev");
+	bu_free((genptr_t)prev, "prev");
 	next->tp = tp;
 	tok = next;
     }
@@ -296,9 +296,9 @@
 	tp->tr_b.tb_left = prev->tp;
 	tp->tr_b.tb_right = next->tp;
 	BU_LIST_DEQUEUE(&tok->l);
-	bu_free((char *)tok, "tok");
+	bu_free((genptr_t)tok, "tok");
 	BU_LIST_DEQUEUE(&prev->l);
-	bu_free((char *)prev, "prev");
+	bu_free((genptr_t)prev, "prev");
 	next->tp = tp;
 	tok = next;
     }
@@ -324,9 +324,9 @@
 
 	/* this is an eligible operand surrounded by parens */
 	BU_LIST_DEQUEUE(&next->l);
-	bu_free((char *)next, "next");
+	bu_free((genptr_t)next, "next");
 	BU_LIST_DEQUEUE(&prev->l);
-	bu_free((char *)prev, "prev");
+	bu_free((genptr_t)prev, "prev");
     }
 
     if (hp->forw == hp->back && hp->forw != hp)
@@ -355,7 +355,7 @@
     tok = BU_LIST_NEXT(tokens, hp);
     final_tree = tok->tp;
     BU_LIST_DEQUEUE(&tok->l);
-    bu_free((char *)tok, "tok");
+    bu_free((genptr_t)tok, "tok");
 
     return final_tree;
 }
Index: libged/tables.c
===================================================================
--- libged/tables.c	(revision 54048)
+++ libged/tables.c	(working copy)
@@ -280,7 +280,7 @@
     }
 
 out:
-    bu_free((char *)tree_list, "new_tables: tree_list");
+    bu_free((genptr_t)tree_list, "new_tables: tree_list");
     intern.idb_meth->ft_ifree(&intern);
     return;
 }
Index: libged/wdb_importFg4Section.c
===================================================================
--- libged/wdb_importFg4Section.c	(revision 54048)
+++ libged/wdb_importFg4Section.c	(working copy)
@@ -467,11 +467,11 @@
 	      bot_ip.faces, bot_ip.thickness, bot_ip.face_mode);
 
     if (mode == PLATE_MODE) {
-	bu_free((char *)bot_ip.thickness, "BOT thickness");
-	bu_free((char *)bot_ip.face_mode, "BOT face_mode");
+	bu_free((genptr_t)bot_ip.thickness, "BOT thickness");
+	bu_free((genptr_t)bot_ip.face_mode, "BOT face_mode");
     }
-    bu_free((char *)bot_ip.vertices, "BOT vertices");
-    bu_free((char *)bot_ip.faces, "BOT faces");
+    bu_free((genptr_t)bot_ip.vertices, "BOT vertices");
+    bu_free((genptr_t)bot_ip.faces, "BOT faces");
 }
 
 
@@ -548,12 +548,12 @@
 
     make_bot_object(argv[1], wdbp);
     free((void *)lines);
-    bu_free((void *)grid_pts, "importFg4Section: grid_pts");
+    bu_free((genptr_t)grid_pts, "importFg4Section: grid_pts");
 
     /* free memory associated with globals */
-    bu_free((void *)FACES, "importFg4Section: faces");
-    bu_free((void *)THICKNESS, "importFg4Section: thickness");
-    bu_free((void *)facemode, "importFg4Section: facemode");
+    bu_free((genptr_t)FACES, "importFg4Section: faces");
+    bu_free((genptr_t)THICKNESS, "importFg4Section: thickness");
+    bu_free((genptr_t)facemode, "importFg4Section: facemode");
 
     FACES = NULL;
     THICKNESS = NULL;
Index: libged/wdb_track.c
===================================================================
--- libged/wdb_track.c	(revision 54048)
+++ libged/wdb_track.c	(working copy)
@@ -508,7 +508,7 @@
     /* rebuild the tree with GIFT semantics */
     comb->tree = (union tree *)db_mkgift_tree(tree_list, node_count, &rt_uniresource);
 
-    bu_free((char *)tree_list, "track_mk_tree_gift: tree_list");
+    bu_free((genptr_t)tree_list, "track_mk_tree_gift: tree_list");
 
     return 0;	/* OK */
 }
@@ -525,8 +525,8 @@
     while (BU_LIST_WHILE(wp, wmember, headp)) {
 	WDB_CK_WMEMBER(wp);
 	BU_LIST_DEQUEUE(&wp->l);
-	bu_free((char *)wp->wm_name, "wm_name");
-	bu_free((char *)wp, "wmember");
+	bu_free((genptr_t)wp->wm_name, "wm_name");
+	bu_free((genptr_t)wp, "wmember");
     }
 }
 
Index: libged/tire.c
===================================================================
--- libged/tire.c	(revision 54048)
+++ libged/tire.c	(working copy)
@@ -1443,12 +1443,12 @@
 		 number_of_tread_patterns, pattern_type);
 
     for (i = 0; i < 5; i++)
-	bu_free((char *)matrixelltread1[i], "matrixell1 element");
-    bu_free((char *)matrixelltread1, "matrixell1");
+	bu_free((genptr_t)matrixelltread1[i], "matrixell1 element");
+    bu_free((genptr_t)matrixelltread1, "matrixell1");
 
     for (i = 0; i < 5; i++)
-	bu_free((char *)matrixelltread2[i], "matrixell2 element");
-    bu_free((char *)matrixelltread2, "matrixell2");
+	bu_free((genptr_t)matrixelltread2[i], "matrixell2 element");
+    bu_free((genptr_t)matrixelltread2, "matrixell2");
 
     bu_vls_free(&str);
 }
@@ -1559,12 +1559,12 @@
 		 number_of_tread_patterns, patterntype);
 
     for (i = 0; i < 5; i++)
-	bu_free((char *)matrixelltred1[i], "matrixell1 element");
-    bu_free((char *)matrixelltred1, "matrixell1");
+	bu_free((genptr_t)matrixelltred1[i], "matrixell1 element");
+    bu_free((genptr_t)matrixelltred1, "matrixell1");
 
     for (i = 0; i < 5; i++)
-	bu_free((char *)matrixelltred2[i], "matrixell2 element");
-    bu_free((char *)matrixelltred2, "matrixell2");
+	bu_free((genptr_t)matrixelltred2[i], "matrixell2 element");
+    bu_free((genptr_t)matrixelltred2, "matrixell2");
 
     bu_vls_free(&str);
 }
@@ -1770,18 +1770,18 @@
 
 
     for (i = 0; i < 5; i++)
-	bu_free((char *)matrixell1[i], "matrixell1 element");
-    bu_free((char *)matrixell1, "matrixell1");
+	bu_free((genptr_t)matrixell1[i], "matrixell1 element");
+    bu_free((genptr_t)matrixell1, "matrixell1");
     for (i = 0; i < 5; i++)
-	bu_free((char *)matrixell2[i], "matrixell2 element");
-    bu_free((char *)matrixell2, "matrixell2");
+	bu_free((genptr_t)matrixell2[i], "matrixell2 element");
+    bu_free((genptr_t)matrixell2, "matrixell2");
 
     for (i = 0; i < 5; i++)
-	bu_free((char *)matrixcut1[i], "matrixcut1 element");
-    bu_free((char *)matrixcut1, "matrixcut1");
+	bu_free((genptr_t)matrixcut1[i], "matrixcut1 element");
+    bu_free((genptr_t)matrixcut1, "matrixcut1");
     for (i = 0; i < 5; i++)
-	bu_free((char *)matrixcut2[i], "matrixell2 element");
-    bu_free((char *)matrixcut2, "matrixell2");
+	bu_free((genptr_t)matrixcut2[i], "matrixell2 element");
+    bu_free((genptr_t)matrixcut2, "matrixell2");
 
     bu_vls_free(&str);
     bu_vls_free(&str2);
Index: libged/track.c
===================================================================
--- libged/track.c	(revision 54048)
+++ libged/track.c	(working copy)
@@ -1035,7 +1035,7 @@
     /* rebuild the tree with GIFT semantics */
     comb->tree = (union tree *)db_mkgift_tree(tree_list, node_count, &rt_uniresource);
 
-    bu_free((char *)tree_list, "track_mk_tree_gift: tree_list");
+    bu_free((genptr_t)tree_list, "track_mk_tree_gift: tree_list");
 
     return 0;	/* OK */
 }
@@ -1100,8 +1100,8 @@
     while (BU_LIST_WHILE(wp, wmember, headp)) {
 	WDB_CK_WMEMBER(wp);
 	BU_LIST_DEQUEUE(&wp->l);
-	bu_free((char *)wp->wm_name, "wm_name");
-	bu_free((char *)wp, "wmember");
+	bu_free((genptr_t)wp->wm_name, "wm_name");
+	bu_free((genptr_t)wp, "wmember");
     }
 }
 
Index: libged/wdb_obj.c
===================================================================
--- libged/wdb_obj.c	(revision 54048)
+++ libged/wdb_obj.c	(working copy)
@@ -768,7 +768,7 @@
 	return RT_DIR_NULL;
     }
 
-    bu_free((char *)tree_list, "combadd: tree_list");
+    bu_free((genptr_t)tree_list, "combadd: tree_list");
 
     return dp;
 }
@@ -3032,7 +3032,7 @@
 	}
 
 	bu_ptbl_free(tbl);
-	bu_free((char *)tbl, "wdb_ls_cmd ptbl");
+	bu_free((genptr_t)tbl, "wdb_ls_cmd ptbl");
     } else if (argc > 0) {
 	/* Just list specified names */
 	dirp = wdb_getspace(wdbp->dbip, argc);
@@ -4441,7 +4441,7 @@
     /* Free the Hash tables */
     ptr = Tcl_FirstHashEntry(&name_tbl, &search);
     while (ptr) {
-	bu_free((char *)Tcl_GetHashValue(ptr), "new name");
+	bu_free((genptr_t)Tcl_GetHashValue(ptr), "new name");
 	ptr = Tcl_NextHashEntry(&search);
     }
     Tcl_DeleteHashTable(&name_tbl);
@@ -6026,7 +6026,7 @@
 	bu_vls_free(&vls);
 
 	if (rt_tree_array)
-	    bu_free((char *)rt_tree_array, "printnode: rt_tree_array");
+	    bu_free((genptr_t)rt_tree_array, "printnode: rt_tree_array");
     }
     rt_db_free_internal(&intern);
 
@@ -6243,7 +6243,7 @@
 	    }
 	    db_free_tree(rt_tree_array[i].tl_tree, &rt_uniresource);
 	}
-	if (rt_tree_array) bu_free((char *)rt_tree_array, "printnode: rt_tree_array");
+	if (rt_tree_array) bu_free((genptr_t)rt_tree_array, "printnode: rt_tree_array");
     }
     rt_db_free_internal(&intern);
 }
Index: libged/bigE.c
===================================================================
--- libged/bigE.c	(revision 54048)
+++ libged/bigE.c	(working copy)
@@ -131,7 +131,7 @@
 
 	struct rt_comb_internal *comb;
 
-	bu_free((char *)eptr, "eptr");
+	bu_free((genptr_t)eptr, "eptr");
 
 	comb = (struct rt_comb_internal *)intern.idb_ptr;
 	RT_CK_COMB(comb);
@@ -662,7 +662,7 @@
 
 	    if (BU_LIST_IS_EMPTY(A)) {
 		MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-		bu_free((char *)B, "bu_list");
+		bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
 		show_seg(A, "Returning");
@@ -670,7 +670,7 @@
 
 		return A;
 	    } else if (BU_LIST_IS_EMPTY(B)) {
-		bu_free((char *)B, "bu_list");
+		bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
 		show_seg(A, "Returning");
@@ -698,7 +698,7 @@
 		}
 	    }
 	    MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-	    bu_free((char *)B, "bu_list");
+	    bu_free((genptr_t)B, "bu_list");
 	    MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
 	    BU_LIST_INSERT_LIST(A, &ret);
 
@@ -716,7 +716,7 @@
 	    if (BU_LIST_IS_EMPTY(A) || BU_LIST_IS_EMPTY(B)) {
 		MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
 		MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-		bu_free((char *)B, "bu_list");
+		bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
 		show_seg(A, "Returning");
@@ -741,7 +741,7 @@
 		}
 	    }
 	    MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-	    bu_free((char *)B, "bu_list");
+	    bu_free((genptr_t)B, "bu_list");
 	    MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
 	    BU_LIST_INSERT_LIST(A, &ret)
 
@@ -757,7 +757,7 @@
 #endif
 
 	    if (BU_LIST_IS_EMPTY(A)) {
-		bu_free((char *)A, "bu_list");
+		bu_free((genptr_t)A, "bu_list");
 
 #ifdef debug
 		show_seg(B, "Returning B (A is empty)");
@@ -766,7 +766,7 @@
 		return B;
 	    }
 	    if (BU_LIST_IS_EMPTY(B)) {
-		bu_free((char *)B, "bu_list");
+		bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
 		show_seg(A, "Returning A (B is empty)");
@@ -931,7 +931,7 @@
 			}
 
 	    MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-	    bu_free((char *)B, "bu_list");
+	    bu_free((genptr_t)B, "bu_list");
 	    MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
 	    BU_LIST_INSERT_LIST(A, &ret)
 
@@ -945,7 +945,7 @@
     /* should never get here */
     MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
     MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-    bu_free((char *)B, "bu_list");
+    bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
     show_seg(A, "Returning (default)");
@@ -1337,7 +1337,7 @@
 
     if (final_segs)
 	MY_FREE_SEG_LIST(final_segs, dgcdp->ap->a_resource);
-    bu_free((char *)final_segs, "bu_list");
+    bu_free((genptr_t)final_segs, "bu_list");
 
     if (bu_debug&BU_DEBUG_MEM_CHECK && bu_mem_barriercheck())
 	bu_log("Error at end of shoot_and_plot()\n");
@@ -1697,15 +1697,15 @@
 		    }
 		    MY_FREE_SEG_LIST(result, dgcdp->ap->a_resource);
 
-		    bu_free((char *)dists1, "dists1");
-		    bu_free((char *)dists2, "dists2");
+		    bu_free((genptr_t)dists1, "dists1");
+		    bu_free((genptr_t)dists2, "dists2");
 		}
 	    }
 	}
     }
 
-    bu_free((char *)hits1, "hits1");
-    bu_free((char *)hits2, "hits2");
+    bu_free((genptr_t)hits1, "hits1");
+    bu_free((genptr_t)hits2, "hits2");
 }
 
 
@@ -1721,7 +1721,7 @@
 	case OP_INTERSECT:
 	    free_etree(eptr->n.left, dgcdp);
 	    free_etree(eptr->n.right, dgcdp);
-	    bu_free((char *)eptr, "node pointer");
+	    bu_free((genptr_t)eptr, "node pointer");
 	    break;
 	case OP_DB_LEAF:
 	case OP_SOLID:
@@ -1738,10 +1738,10 @@
 	    if (eptr->l.stp) {
 		if (eptr->l.stp->st_specific && rt_functab[eptr->l.stp->st_id].ft_free)
 		    rt_functab[eptr->l.stp->st_id].ft_free(eptr->l.stp);
-		bu_free((char *)eptr->l.stp, "struct soltab");
+		bu_free((genptr_t)eptr->l.stp, "struct soltab");
 	    }
 
-	    bu_free((char *)eptr, "leaf pointer");
+	    bu_free((genptr_t)eptr, "leaf pointer");
 	    break;
     }
 }
@@ -1996,7 +1996,7 @@
 	BU_GET(pg, struct rt_pg_internal);
 
 	if (!nmg_to_poly(tp->l.m, pg, tol)) {
-	    bu_free((char *)pg, "rt_pg_internal");
+	    bu_free((genptr_t)pg, "rt_pg_internal");
 	    bu_vls_printf(dgcdp->gedp->ged_result_str, "Prep failure for solid '%s'\n", tp->l.stp->st_dp->d_namep);
 	} else {
 	    struct rt_db_internal intern2;
@@ -2130,7 +2130,7 @@
 	    /* do not do an rt_free_rti() (closes the database!!!!) */
 	    rt_clean(dgcdp->rtip);
 
-	    bu_free((char *)dgcdp->rtip, "rt_i structure for 'E'");
+	    bu_free((genptr_t)dgcdp->rtip, "rt_i structure for 'E'");
 	    bu_free(dgcdp, "dgcdp");
 
 	    bu_vls_printf(gedp->ged_result_str, "Failed to get objects\n");
@@ -2163,7 +2163,7 @@
 	    /* do not do an rt_free_rti() (closes the database!!!!) */
 	    rt_clean(dgcdp->rtip);
 
-	    bu_free((char *)dgcdp->rtip, "rt_i structure for 'E'");
+	    bu_free((genptr_t)dgcdp->rtip, "rt_i structure for 'E'");
 	}
     }
 
Index: libged/draw.c
===================================================================
--- libged/draw.c	(revision 54048)
+++ libged/draw.c	(working copy)
@@ -1471,7 +1471,7 @@
 
 	max_count = BU_PTBL_LEN(tbl) + last_opt + 1;
 	bu_ptbl_free(tbl);
-	bu_free((char *)tbl, "ged_draw_guts ptbl");
+	bu_free((genptr_t)tbl, "ged_draw_guts ptbl");
 	new_argv = (char **)bu_calloc(max_count+1, sizeof(char *), "ged_draw_guts new_argv");
 	new_argc = bu_argv_from_string(new_argv, max_count, bu_vls_addr(&vls));
 
@@ -1488,7 +1488,7 @@
 
 	_ged_drawtrees(gedp, new_argc, (const char **)new_argv, kind, (struct _ged_client_data *)0);
 	bu_vls_free(&vls);
-	bu_free((char *)new_argv, "ged_draw_guts new_argv");
+	bu_free((genptr_t)new_argv, "ged_draw_guts new_argv");
     } else {
 	bu_vls_free(&vls);
 
Index: libged/get_obj_bounds.c
===================================================================
--- libged/get_obj_bounds.c	(revision 54048)
+++ libged/get_obj_bounds.c	(working copy)
@@ -273,7 +273,7 @@
 
     rt_free_rti(rtip);
     rt_db_free_internal(&intern);
-    bu_free((char *)stp, "struct soltab");
+    bu_free((genptr_t)stp, "struct soltab");
 
     return GED_OK;
 }
Index: libged/dag.cpp
===================================================================
--- libged/dag.cpp	(revision 54048)
+++ libged/dag.cpp	(working copy)
@@ -416,7 +416,7 @@
     bu_vls_free(&vls);
 
     if (rt_tree_array)
-	bu_free((char *)rt_tree_array, "printnode: rt_tree_array");
+	bu_free((genptr_t)rt_tree_array, "printnode: rt_tree_array");
     }
 
     rt_db_free_internal(&intern);
Index: libged/ged.c
===================================================================
--- libged/ged.c	(revision 54048)
+++ libged/ged.c	(working copy)
@@ -549,7 +549,7 @@
 	    }
 	    db_free_tree(rt_tree_array[i].tl_tree, &rt_uniresource);
 	}
-	if (rt_tree_array) bu_free((char *)rt_tree_array, "printnode: rt_tree_array");
+	if (rt_tree_array) bu_free((genptr_t)rt_tree_array, "printnode: rt_tree_array");
     }
     rt_db_free_internal(&intern);
 }
Index: libged/wdb_bigE.c
===================================================================
--- libged/wdb_bigE.c	(revision 54048)
+++ libged/wdb_bigE.c	(working copy)
@@ -145,7 +145,7 @@
 
 	struct rt_comb_internal *comb;
 
-	bu_free((char *)eptr, "eptr");
+	bu_free((genptr_t)eptr, "eptr");
 
 	comb = (struct rt_comb_internal *)intern.idb_ptr;
 	RT_CK_COMB(comb);
@@ -671,7 +671,7 @@
 
 	    if (BU_LIST_IS_EMPTY(A)) {
 		MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-		bu_free((char *)B, "bu_list");
+		bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
 		wdb_show_seg(A, "Returning");
@@ -679,7 +679,7 @@
 
 		return A;
 	    } else if (BU_LIST_IS_EMPTY(B)) {
-		bu_free((char *)B, "bu_list");
+		bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
 		wdb_show_seg(A, "Returning");
@@ -706,7 +706,7 @@
 		}
 	    }
 	    MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-	    bu_free((char *)B, "bu_list");
+	    bu_free((genptr_t)B, "bu_list");
 	    MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
 	    BU_LIST_INSERT_LIST(A, &ret)
 
@@ -724,7 +724,7 @@
 	    if (BU_LIST_IS_EMPTY(A) || BU_LIST_IS_EMPTY(B)) {
 		MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
 		MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-		bu_free((char *)B, "bu_list");
+		bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
 		wdb_show_seg(A, "Returning");
@@ -747,7 +747,7 @@
 		}
 	    }
 	    MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-	    bu_free((char *)B, "bu_list");
+	    bu_free((genptr_t)B, "bu_list");
 	    MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
 	    BU_LIST_INSERT_LIST(A, &ret)
 
@@ -763,7 +763,7 @@
 #endif
 
 	    if (BU_LIST_IS_EMPTY(A)) {
-		bu_free((char *)A, "bu_list");
+		bu_free((genptr_t)A, "bu_list");
 
 #ifdef debug
 		wdb_show_seg(B, "Returning B (A is empty)");
@@ -772,7 +772,7 @@
 		return B;
 	    }
 	    if (BU_LIST_IS_EMPTY(B)) {
-		bu_free((char *)B, "bu_list");
+		bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
 		wdb_show_seg(A, "Returning A (B is empty)");
@@ -941,7 +941,7 @@
 	    }
 
 	    MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-	    bu_free((char *)B, "bu_list");
+	    bu_free((genptr_t)B, "bu_list");
 	    MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
 	    BU_LIST_INSERT_LIST(A, &ret);
 
@@ -955,7 +955,7 @@
     /* should never get here */
     MY_FREE_SEG_LIST(A, dgcdp->ap->a_resource);
     MY_FREE_SEG_LIST(B, dgcdp->ap->a_resource);
-    bu_free((char *)B, "bu_list");
+    bu_free((genptr_t)B, "bu_list");
 
 #ifdef debug
     wdb_show_seg(A, "Returning (default)");
@@ -1339,7 +1339,7 @@
 
     if (final_segs)
 	MY_FREE_SEG_LIST(final_segs, dgcdp->ap->a_resource);
-    bu_free((char *)final_segs, "bu_list");
+    bu_free((genptr_t)final_segs, "bu_list");
 
     if (bu_debug&BU_DEBUG_MEM_CHECK && bu_mem_barriercheck())
 	bu_log("Error at end of wdb_shoot_and_plot()\n");
@@ -1693,15 +1693,15 @@
 		    }
 		    MY_FREE_SEG_LIST(result, dgcdp->ap->a_resource);
 
-		    bu_free((char *)dists1, "dists1");
-		    bu_free((char *)dists2, "dists2");
+		    bu_free((genptr_t)dists1, "dists1");
+		    bu_free((genptr_t)dists2, "dists2");
 		}
 	    }
 	}
     }
 
-    bu_free((char *)hits1, "hits1");
-    bu_free((char *)hits2, "hits2");
+    bu_free((genptr_t)hits1, "hits1");
+    bu_free((genptr_t)hits2, "hits2");
 }
 
 
@@ -1717,7 +1717,7 @@
 	case OP_INTERSECT:
 	    wdb_free_etree(eptr->n.left, dgcdp);
 	    wdb_free_etree(eptr->n.right, dgcdp);
-	    bu_free((char *)eptr, "node pointer");
+	    bu_free((genptr_t)eptr, "node pointer");
 	    break;
 	case OP_DB_LEAF:
 	case OP_SOLID:
@@ -1734,10 +1734,10 @@
 	    if (eptr->l.stp) {
 		if (eptr->l.stp->st_specific && rt_functab[eptr->l.stp->st_id].ft_free)
 		    rt_functab[eptr->l.stp->st_id].ft_free(eptr->l.stp);
-		bu_free((char *)eptr->l.stp, "struct soltab");
+		bu_free((genptr_t)eptr->l.stp, "struct soltab");
 	    }
 
-	    bu_free((char *)eptr, "leaf pointer");
+	    bu_free((genptr_t)eptr, "leaf pointer");
 	    break;
     }
 }
@@ -1992,7 +1992,7 @@
 	BU_GET(pg, struct rt_pg_internal);
 
 	if (!nmg_to_poly(tp->l.m, pg, tol)) {
-	    bu_free((char *)pg, "rt_pg_internal");
+	    bu_free((genptr_t)pg, "rt_pg_internal");
 	    Tcl_AppendResult(dgcdp->interp, "Prep failure for solid '", tp->l.stp->st_dp->d_namep,
 			     "'\n", (char *)NULL);
 	} else {
@@ -2115,7 +2115,7 @@
 	/* do not do an rt_free_rti() (closes the database!!!!) */
 	rt_clean(dgcdp->rtip);
 
-	bu_free((char *)dgcdp->rtip, "rt_i structure for 'E'");
+	bu_free((genptr_t)dgcdp->rtip, "rt_i structure for 'E'");
 	bu_free(dgcdp, "dgcdp");
 
 	bu_log("Failed to get objects\n");
@@ -2148,7 +2148,7 @@
 	/* do not do an rt_free_rti() (closes the database!!!!) */
 	rt_clean(dgcdp->rtip);
 
-	bu_free((char *)dgcdp->rtip, "rt_i structure for 'E'");
+	bu_free((genptr_t)dgcdp->rtip, "rt_i structure for 'E'");
     }
 
     dgo_color_soltab(&dgop->dgo_headSolid);
Index: libged/edcodes.c
===================================================================
--- libged/edcodes.c	(revision 54048)
+++ libged/edcodes.c	(working copy)
@@ -271,7 +271,7 @@
 	    fprintf(f_srt, "%s", line_array[j]);
 	    bu_free(line_array[j], "ged_edcodes line array element");
 	}
-	bu_free((char *)line_array, "ged_edcodes line array");
+	bu_free((genptr_t)line_array, "ged_edcodes line array");
 	fclose(f_srt);
     }
 
Index: proc-db/bottest.c
===================================================================
--- proc-db/bottest.c	(revision 54048)
+++ proc-db/bottest.c	(working copy)
@@ -309,7 +309,7 @@
 
     mk_bot(outfp, "bot_solid_dup_fs", RT_BOT_SOLID, RT_BOT_UNORIENTED, 0, 12, 5, vertices, faces, (fastf_t *)NULL, (struct bu_bitv *)NULL);
 
-    bu_free((char *)face_mode, "bottest: face_mode");
+    bu_free((genptr_t)face_mode, "bottest: face_mode");
 
     wdb_close(outfp);
 
Index: proc-db/masonry.c
===================================================================
--- proc-db/masonry.c	(revision 54048)
+++ proc-db/masonry.c	(working copy)
@@ -388,7 +388,7 @@
 			 */
 			sp = BU_LIST_PLAST(boardseg, &(seg->l));
 			BU_LIST_DEQUEUE(&(seg->l));
-			bu_free((char *)seg, "seg free 2");
+			bu_free((genptr_t)seg, "seg free 2");
 			seg = sp;
 
 		    } else if (op->ex > seg->s) {
@@ -720,7 +720,7 @@
 		 0.0, bd_thin);
 
 	BU_LIST_DEQUEUE(&(seg->l));
-	bu_free((char *)seg, "seg free 3");
+	bu_free((genptr_t)seg, "seg free 3");
     }
 
     /* now find the segments of the cap board */
@@ -741,7 +741,7 @@
 		 WALL_HEIGHT-bd_thin, WALL_HEIGHT);
 
 	BU_LIST_DEQUEUE(&(seg->l));
-	bu_free((char *)seg, "seg_free 4");
+	bu_free((genptr_t)seg, "seg_free 4");
     }
 
     /* put in the vertical stud boards that are not a part of an
Index: proc-db/tea.c
===================================================================
--- proc-db/tea.c	(revision 54048)
+++ proc-db/tea.c	(working copy)
@@ -66,10 +66,10 @@
      * Number of interior knots)
      */
 
-    bu_free((char *)b_patch->u.knots, "dumping u knots I'm about to realloc");
+    bu_free((genptr_t)b_patch->u.knots, "dumping u knots I'm about to realloc");
     rt_nurb_kvknot(&b_patch->u, 4, 0.0, 1.0, 0, &rt_uniresource);
 
-    bu_free((char *)b_patch->v.knots, "dumping v_kv knots I'm about to realloc");
+    bu_free((genptr_t)b_patch->v.knots, "dumping v_kv knots I'm about to realloc");
     rt_nurb_kvknot(&b_patch->v, 4, 0.0, 1.0, 0, &rt_uniresource);
 
     /* Copy the control points */
Index: fb/cell-fb.c
===================================================================
--- fb/cell-fb.c	(revision 54048)
+++ fb/cell-fb.c	(working copy)
@@ -566,7 +566,7 @@
     }
     (void) fb_close(fbiop);
 
-    bu_free((char *) buf, "line of frame buffer");
+    bu_free((genptr_t) buf, "line of frame buffer");
     if (debug_flag & CFB_DBG_MEM)
 	bu_log("freed buf, which is now %p\n", (void *)buf);
     return 1;
@@ -963,7 +963,7 @@
 		BU_LIST_DEQUEUE(&(lrp->l));
 		bu_log("%g %g	%d %d\n", lrp->h, lrp->v,
 		       (int) H2SCRX(lrp->h), (int) V2SCRY(lrp->v));
-		bu_free((char *) lrp, "location record");
+		bu_free((genptr_t) lrp, "location record");
 	    }
 	} else {
 	    bu_log("Displaying %ld cells\n", ncells);
Index: adrt/librender/spall.c
===================================================================
--- adrt/librender/spall.c	(revision 54048)
+++ adrt/librender/spall.c	(working copy)
@@ -108,7 +108,7 @@
      * First intersect this ray with the plane and fire the ray from there
      * Plane: Ax + By + Cz + D = 0
      * Ray = O + td
-     * t = -(Pn � R0 + D) / (Pn � Rd)
+     * t = -(Pn � R0 + D) / (Pn � Rd)
      *
      */
 
Index: adrt/librender/cut.c
===================================================================
--- adrt/librender/cut.c	(revision 54048)
+++ adrt/librender/cut.c	(working copy)
@@ -121,7 +121,7 @@
      * First intersect this ray with the plane and fire the ray from there
      * Plane: Ax + By + Cz + D = 0
      * Ray = O + td
-     * t = -(Pn � R0 + D) / (Pn � Rd)
+     * t = -(Pn � R0 + D) / (Pn � Rd)
      */
     t = (rd->plane[0]*ray->pos[0] + rd->plane[1]*ray->pos[1] + rd->plane[2]*ray->pos[2] + rd->plane[3]) /
 	(rd->plane[0]*ray->dir[0] + rd->plane[1]*ray->dir[1] + rd->plane[2]*ray->dir[2]);
Index: conv/obj-g.c
===================================================================
--- conv/obj-g.c	(revision 54048)
+++ conv/obj-g.c	(working copy)
@@ -1737,7 +1737,7 @@
 
     if ((ti->bot_mode == RT_BOT_PLATE) || (ti->bot_mode == RT_BOT_PLATE_NOCOS)) {
 	/* free array of bot_face_mode */
-	bu_free((char *)ti->bot_face_mode, "ti->bot_face_mode");
+	bu_free((genptr_t)ti->bot_face_mode, "ti->bot_face_mode");
 
 	/* free 'array of floats for face thickness' */
 	bu_free(ti->bot_thickness, "ti->bot_thickness");
Index: conv/g-obj.c
===================================================================
--- conv/g-obj.c	(revision 54048)
+++ conv/g-obj.c	(working copy)
@@ -494,7 +494,7 @@
 
 	sofar = db_path_to_string(pathp);
 	bu_log("FAILED in triangulator: %s\n", sofar);
-	bu_free((char *)sofar, "sofar");
+	bu_free((genptr_t)sofar, "sofar");
 
 	/* Sometimes the NMG library adds debugging bits when
 	 * it detects an internal error, before bombing out.
Index: conv/fast4-g.c
===================================================================
--- conv/fast4-g.c	(revision 54048)
+++ conv/fast4-g.c	(working copy)
@@ -2146,11 +2146,11 @@
     bu_free(name, "solid_name");
 
     if (mode == PLATE_MODE) {
-	bu_free((char *)bot_ip.thickness, "BOT thickness");
-	bu_free((char *)bot_ip.face_mode, "BOT face_mode");
+	bu_free((genptr_t)bot_ip.thickness, "BOT thickness");
+	bu_free((genptr_t)bot_ip.face_mode, "BOT face_mode");
     }
-    bu_free((char *)bot_ip.vertices, "BOT vertices");
-    bu_free((char *)bot_ip.faces, "BOT faces");
+    bu_free((genptr_t)bot_ip.vertices, "BOT vertices");
+    bu_free((genptr_t)bot_ip.faces, "BOT faces");
 
 }
 
Index: conv/comgeom/solid.c
===================================================================
--- conv/comgeom/solid.c	(revision 54048)
+++ conv/comgeom/solid.c	(working copy)
@@ -308,7 +308,7 @@
 	    printf("mk_ars(%s) failed\n", name);
 	    /* Need to free memory ONLY if mk_ars fails; 'ret' is returned below */
 	    for (i = 0; i < ncurves; i++) {
-		bu_free((char *)curve[i], "curve[i]");
+		bu_free((genptr_t)curve[i], "curve[i]");
 	    }
 	    bu_free((char **)curve, "curve");
 	}
@@ -829,7 +829,7 @@
 	input_points = (fastf_t *)bu_malloc(npt*3*sizeof(fastf_t), "input_points");
 
 	if (getxsoldata(input_points, npt*3, sol_work) < 0) {
-	    bu_free((char *)input_points, "input_points");
+	    bu_free((genptr_t)input_points, "input_points");
 	    input_points = NULL;
 	    goto bad;
 	}
@@ -977,7 +977,7 @@
     }
 
     /* Release storage for input points */
-    bu_free((char *)input_points, "input_points");
+    bu_free((genptr_t)input_points, "input_points");
     input_points = NULL;
 
     /*
@@ -1059,9 +1059,9 @@
     /* Write out the solid ! */
     i = mk_arbn(outfp, name, nface, eqn);
 
-    if (vertex) bu_free((char *)vertex, "vertex");
-    if (eqn)    bu_free((char *)eqn, "eqn");
-    if (used)   bu_free((char *)used, "used");
+    if (vertex) bu_free((genptr_t)vertex, "vertex");
+    if (eqn)    bu_free((genptr_t)eqn, "eqn");
+    if (used)   bu_free((genptr_t)used, "used");
 
     return i;
 }
Index: conv/g-acad.c
===================================================================
--- conv/g-acad.c	(revision 54048)
+++ conv/g-acad.c	(working copy)
@@ -293,7 +293,7 @@
 	bu_log("FAILED in Boolean evaluation: %s\n", sofar);
 	fprintf(fpe, "Failed Bool. Eval.: %s\n", sofar);
 	fflush(fpe);
-	bu_free((char *)sofar, "sofar");
+	bu_free((genptr_t)sofar, "sofar");
 
 	/* Sometimes the NMG library adds debugging bits when
 	 * it detects an internal error, before bombing out.
@@ -419,7 +419,7 @@
 		BU_UNSETJUMP;
 
 		sofar = db_path_to_string(pathp);
-		bu_free((char *)sofar, "sofar");
+		bu_free((genptr_t)sofar, "sofar");
 
 		/* Sometimes the NMG library adds debugging bits when
 		 * it detects an internal error, before bombing out.
Index: conv/patch/patch-g.c
===================================================================
--- conv/patch/patch-g.c	(revision 54048)
+++ conv/patch/patch-g.c	(working copy)
@@ -396,8 +396,8 @@
 	    }
 	}
     }
-    bu_free((char *)flags1, "nmg_shell_coplanar_face_merge flags1[]");
-    bu_free((char *)flags2, "nmg_shell_coplanar_face_merge flags2[]");
+    bu_free((genptr_t)flags1, "nmg_shell_coplanar_face_merge flags1[]");
+    bu_free((genptr_t)flags2, "nmg_shell_coplanar_face_merge flags2[]");
 
     if (rt_g.NMG_debug & DEBUG_BASIC) {
 	bu_log("nmg_shell_coplanar_face_merge(s=%p, tol=%p, simplify=%d)\n",
@@ -638,7 +638,7 @@
     }
 
     /* don't need the verts array any more */
-    bu_free((char *)verts, "build_solid: verts");
+    bu_free((genptr_t)verts, "build_solid: verts");
 
     /* fuse vertices */
     (void)nmg_vertex_fuse(&m->magic, tol);
@@ -669,7 +669,7 @@
 	bu_ptbl_free(&faces);
 
 	/* don't need the p_faces array any more */
-	bu_free((char *)p_faces, "build_solid: p_faces");
+	bu_free((genptr_t)p_faces, "build_solid: p_faces");
 
 	/* Calculate bounding boxes */
 	nmg_region_a(r, tol);
@@ -822,7 +822,7 @@
     is = nmg_dup_shell(s, &copy_tbl, tol);
 
     /* make a new flags array */
-    bu_free((char *)flags, "build_solid: flags");
+    bu_free((genptr_t)flags, "build_solid: flags");
     flags = (long *)bu_calloc(m->maxindex, sizeof(long), "patch-g: flags");
 
     /* Move faces planes */
@@ -855,7 +855,7 @@
     }
 
     /* don't need the p_faces array any more */
-    bu_free((char *)p_faces, "build_solid: p_faces");
+    bu_free((genptr_t)p_faces, "build_solid: p_faces");
 
     /* Reverse the normals of all the new faces */
     for (BU_LIST_FOR (fu, faceuse, &is->fu_hd)) {
@@ -875,7 +875,7 @@
     nmg_shell_a(is, tol);
 
     /* make yet another version of the flags array */
-    bu_free((char *)flags, "build_solid: flags");
+    bu_free((genptr_t)flags, "build_solid: flags");
     flags = (long *)bu_calloc(m->maxindex, sizeof(long), "patch-g: flags");
 
     /* make a list of the vertices to be moved */
@@ -931,8 +931,8 @@
 		bu_log("BAD shell written as %s\n", bad);
 	    }
 	    nmg_km(m);
-	    bu_free((char *)flags, "build_solid: flags");
-	    bu_free((char *)copy_tbl, "build_solid: copy_tbl");
+	    bu_free((genptr_t)flags, "build_solid: flags");
+	    bu_free((genptr_t)copy_tbl, "build_solid: copy_tbl");
 	    bu_ptbl_free(&verts_to_move);
 	    return 1;
 	}
@@ -963,13 +963,13 @@
 	mk_nmg(outfp, bad, m);
 	bu_log("BAD shell written as %s\n", bad);
 	nmg_km(m);
-	bu_free((char *)flags, "Build_solid: flags");
-	bu_free((char *)copy_tbl, "Build_solid: copy_tbl");
+	bu_free((genptr_t)flags, "Build_solid: flags");
+	bu_free((genptr_t)copy_tbl, "Build_solid: copy_tbl");
 	return 1;
     }
 
-    bu_free((char *)flags, "Build_solid: flags");
-    bu_free((char *)copy_tbl, "Build_solid: copy_tbl");
+    bu_free((genptr_t)flags, "Build_solid: flags");
+    bu_free((genptr_t)copy_tbl, "Build_solid: copy_tbl");
 
     bu_ptbl_reset(&faces);
 
@@ -3324,7 +3324,7 @@
     for (next=slist; next;) {
 	slist = next;
 	next = slist->next;
-	bu_free((char *)slist, "get_subtract: slist");
+	bu_free((genptr_t)slist, "get_subtract: slist");
     }
 
     slist = (struct subtract_list *)NULL;
Index: conv/euclid/g-euclid.c
===================================================================
--- conv/euclid/g-euclid.c	(revision 54048)
+++ conv/euclid/g-euclid.c	(working copy)
@@ -461,7 +461,7 @@
 		Write_euclid_face(faces[i].lu, 0, tsp->ts_regionid, ++face_count);
 	    }
 
-	    bu_free((char *)faces, "g-euclid: faces");
+	    bu_free((genptr_t)faces, "g-euclid: faces");
 	    faces = (struct facets*)NULL;
 	}
     }
@@ -470,7 +470,7 @@
 
 outt:
     if (faces)
-	bu_free((char *)faces, "g-euclid: faces");
+	bu_free((genptr_t)faces, "g-euclid: faces");
     return;
 }
 
Index: conv/asc/asc2g.c
===================================================================
--- conv/asc/asc2g.c	(revision 54048)
+++ conv/asc/asc2g.c	(working copy)
@@ -887,7 +887,7 @@
     int i;
 
     if (ars_name)
-	bu_free((char *)ars_name, "ars_name");
+	bu_free((genptr_t)ars_name, "ars_name");
     cp = buf;
     cp = nxt_spc(cp);
     cp = nxt_spc(cp);
@@ -1255,7 +1255,7 @@
 	if (i != j) {
 	    bu_log("Vertices out of order in solid %s (expecting %d, found %d)\n",
 		   my_name, i, j);
-	    bu_free((char *)vertices, "botbld: vertices");
+	    bu_free((genptr_t)vertices, "botbld: vertices");
 	    bu_log("Skipping this solid!\n");
 	    while (buf[0] == '\t')
 		bu_fgets(buf, BUFSIZE, ifp);
@@ -1278,10 +1278,10 @@
 	if (i != j) {
 	    bu_log("Faces out of order in solid %s (expecting %d, found %d)\n",
 		   my_name, i, j);
-	    bu_free((char *)vertices, "botbld: vertices");
-	    bu_free((char *)faces, "botbld: faces");
+	    bu_free((genptr_t)vertices, "botbld: vertices");
+	    bu_free((genptr_t)faces, "botbld: faces");
 	    if (mode == RT_BOT_PLATE)
-		bu_free((char *)thick, "botbld thick");
+		bu_free((genptr_t)thick, "botbld thick");
 	    bu_log("Skipping this solid!\n");
 	    while (buf[0] == '\t')
 		bu_fgets(buf, BUFSIZE, ifp);
@@ -1301,11 +1301,11 @@
     mk_bot(ofp, my_name, mode, orientation, 0, num_vertices, num_faces,
 	   vertices, faces, thick, facemode);
 
-    bu_free((char *)vertices, "botbld: vertices");
-    bu_free((char *)faces, "botbld: faces");
+    bu_free((genptr_t)vertices, "botbld: vertices");
+    bu_free((genptr_t)faces, "botbld: faces");
     if (mode == RT_BOT_PLATE) {
-	bu_free((char *)thick, "botbld thick");
-	bu_free((char *)facemode, "botbld facemode");
+	bu_free((genptr_t)thick, "botbld thick");
+	bu_free((genptr_t)facemode, "botbld facemode");
     }
 }
 
Index: conv/asc/g2asc.c
===================================================================
--- conv/asc/g2asc.c	(revision 54048)
+++ conv/asc/g2asc.c	(working copy)
@@ -965,12 +965,12 @@
     while (BU_LIST_WHILE(mp, mchain, &head)) {
 	membdump(&mp->r);
 	BU_LIST_DEQUEUE(&mp->l);
-	bu_free((char *)mp, "mchain");
+	bu_free((genptr_t)mp, "mchain");
     }
 
     if (ret_mp) {
 	memcpy((char *)&record, (char *)&ret_mp->r, sizeof(record));
-	bu_free((char *)ret_mp, "mchain");
+	bu_free((genptr_t)ret_mp, "mchain");
 	return 1;
     }
     return 0;
@@ -1118,7 +1118,7 @@
 	fprintf(ofp, "%.12e\n", *vp++);
     }
     /* Free the knot data memory */
-    (void)bu_free((char *)fp, "KNOT DATA");
+    (void)bu_free((genptr_t)fp, "KNOT DATA");
 
     /* Malloc and clear memory for the CONTROL MESH data and read it */
     nbytes = record.d.d_nctls * sizeof(union record);
@@ -1136,7 +1136,7 @@
 	fprintf(ofp, "%.12e\n", *vp++);
     }
     /* Free the control mesh memory */
-    (void)bu_free((char *)fp, "CONTROL MESH");
+    (void)bu_free((genptr_t)fp, "CONTROL MESH");
 }
 
 /*
Index: conv/g-shell-rect.c
===================================================================
--- conv/g-shell-rect.c	(revision 54048)
+++ conv/g-shell-rect.c	(working copy)
@@ -1078,7 +1078,7 @@
 	(void)rt_shootray(&ap);
     }
     bu_free(sd.manifolds, "manifolds");
-    bu_free((char *)sd.hitmiss, "hitmiss");
+    bu_free((genptr_t)sd.hitmiss, "hitmiss");
 }
 
 static int
@@ -1694,14 +1694,14 @@
 		ptr = strtok(bu_optarg, token_seps);
 		if (!ptr) {
 		    bu_log("Bad -a option '%s'\n", bu_optarg);
-		    bu_free((char *)rpp, "rpp");
+		    bu_free((genptr_t)rpp, "rpp");
 		    break;
 		}
 
 		rpp->tolerance = atof(ptr);
 		if (rpp->tolerance <= 0.0) {
 		    bu_log("Illegal tolerance in -a option (%s)\n", ptr);
-		    bu_free((char *)rpp, "rpp");
+		    bu_free((genptr_t)rpp, "rpp");
 		    break;
 		}
 
@@ -1716,7 +1716,7 @@
 		    rpp->min[i] = atof(ptr);
 		}
 		if (bad_opt) {
-		    bu_free((char *)rpp, "rpp");
+		    bu_free((genptr_t)rpp, "rpp");
 		    break;
 		}
 
@@ -1732,7 +1732,7 @@
 		    rpp->max[i] = atof(ptr);
 		}
 		if (bad_opt) {
-		    bu_free((char *) rpp, "rpp");
+		    bu_free((genptr_t) rpp, "rpp");
 		    break;
 		}
 
Index: conv/proe-g.c
===================================================================
--- conv/proe-g.c	(revision 54048)
+++ conv/proe-g.c	(working copy)
@@ -186,7 +186,7 @@
 	if (debug)
 	    bu_log("\tafter reg_ex, name is %s\n", ptr->brlcad_name);
     } else if (type == CUT_SOLID_TYPE) {
-	bu_free((char *)ptr->brlcad_name, "brlcad_name");
+	bu_free((genptr_t)ptr->brlcad_name, "brlcad_name");
 	ptr->brlcad_name = NULL;
     }
     ptr->solid_use_no = 0;
@@ -198,7 +198,7 @@
 
 	tmp = ptr->brlcad_name;
 	ptr->brlcad_name = bu_strdup(Build_unique_name(ptr->brlcad_name));
-	bu_free((char *)tmp, "brlcad_name");
+	bu_free((genptr_t)tmp, "brlcad_name");
     }
 
     if (type == ASSEMBLY_TYPE) {
@@ -997,7 +997,7 @@
 		continue;
 	    }
 	}
-	bu_free((char *)tree_list, "tree_list");
+	bu_free((genptr_t)tree_list, "tree_list");
     } FOR_ALL_DIRECTORY_END;
 }
 
Index: conv/g-xxx_facets.c
===================================================================
--- conv/g-xxx_facets.c	(revision 54048)
+++ conv/g-xxx_facets.c	(working copy)
@@ -309,7 +309,7 @@
 
 	sofar = db_path_to_string(pathp);
 	bu_log("FAILED in triangulator: %s\n", sofar);
-	bu_free((char *)sofar, "sofar");
+	bu_free((genptr_t)sofar, "sofar");
 
 	/* Sometimes the NMG library adds debugging bits when
 	 * it detects an internal error, before bombing out.
Index: conv/nmg/g-nmg.c
===================================================================
--- conv/nmg/g-nmg.c	(revision 54048)
+++ conv/nmg/g-nmg.c	(working copy)
@@ -88,7 +88,7 @@
 
 	sofar = db_path_to_string(pathp);
 	bu_log("FAILED: %s\n", sofar);
-	bu_free((char *)sofar, "sofar");
+	bu_free((genptr_t)sofar, "sofar");
 
 	/* Sometimes the NMG library adds debugging bits when
 	 * it detects an internal error, before bombing out.
@@ -383,7 +383,7 @@
 		break;
 	    default:
 		bu_log("Unrecognized Boolean operator in combination (%s)\n", dp->d_namep);
-		bu_free((char *)tree_list, "tree_list");
+		bu_free((genptr_t)tree_list, "tree_list");
 		rt_db_free_internal(&intern);
 		return;
 	}
Index: conv/iges/findp.c
===================================================================
--- conv/iges/findp.c	(revision 54048)
+++ conv/iges/findp.c	(working copy)
@@ -97,12 +97,12 @@
 
     for (i = 0; i < totentities; i++) {
 	if (dir[i]->type == 124 || dir[i]->type == 700)
-	    bu_free((char *)dir[i]->rot, "Free_dir: dir[i]->rot");
-	bu_free((char *)dir[i], "Free_dir: dir[i]");
+	    bu_free((genptr_t)dir[i]->rot, "Free_dir: dir[i]->rot");
+	bu_free((genptr_t)dir[i], "Free_dir: dir[i]");
     }
 
     if (totentities > 0)
-	bu_free((char *)dir, "Free_dir: dir");
+	bu_free((genptr_t)dir, "Free_dir: dir");
 }
 
 
Index: conv/iges/conv_drawings.c
===================================================================
--- conv/iges/conv_drawings.c	(revision 54048)
+++ conv/iges/conv_drawings.c	(working copy)
@@ -463,7 +463,7 @@
 		    struct ptlist *tmp_ptr;
 
 		    tmp_ptr = ptr->next;
-		    bu_free((char *)ptr, "Draw_entities: ptr");
+		    bu_free((genptr_t)ptr, "Draw_entities: ptr");
 		    ptr = tmp_ptr;;
 		}
 		break;
@@ -653,7 +653,7 @@
 
     Draw_entities(m, de_list, no_of_des, x, y, ang, (fastf_t)local_scale, xform);
 
-    bu_free((char *)de_list, "Do_view: de_list");
+    bu_free((genptr_t)de_list, "Do_view: de_list");
 }
 
 
@@ -721,10 +721,10 @@
     (void)mk_lfcomb(fdout, dir[entno]->name, &headp, 0)
 
 /*	if (no_of_views) {
-	bu_free((char *)view_entno, "Get_drawing: view_entno");
-	bu_free((char *)x, "Get_drawing: x");
-	bu_free((char *)y, "Get_drawing: y");
-	bu_free((char *)ang, "Get_drawing: ang");
+	bu_free((genptr_t)view_entno, "Get_drawing: view_entno");
+	bu_free((genptr_t)x, "Get_drawing: x");
+	bu_free((genptr_t)y, "Get_drawing: y");
+	bu_free((genptr_t)ang, "Get_drawing: ang");
 	}
 */
 	}
@@ -773,8 +773,8 @@
 	/* free views visible list */
 	for (i = 0; i < BU_PTBL_END(&view_vis_list); i++) {
 	    vv = (struct views_visible *)BU_PTBL_GET(&view_vis_list, i);
-	    bu_free((char *)vv->view_de, "Conv_drawings: vv->view_de");
-	    bu_free((char *)vv, "Conv_drawings: vv");
+	    bu_free((genptr_t)vv->view_de, "Conv_drawings: vv->view_de");
+	    bu_free((genptr_t)vv, "Conv_drawings: vv");
 	}
 	bu_ptbl_free(&view_vis_list);
 	return;
@@ -818,8 +818,8 @@
 	    /* free views visible list */
 	    for (i = 0; i < BU_PTBL_END(&view_vis_list); i++) {
 		vv = (struct views_visible *)BU_PTBL_GET(&view_vis_list, i);
-		bu_free((char *)vv->view_de, "Conv_drawings: vv->view_de");
-		bu_free((char *)vv, "Conv_drawings: vv");
+		bu_free((genptr_t)vv->view_de, "Conv_drawings: vv->view_de");
+		bu_free((genptr_t)vv, "Conv_drawings: vv");
 	    }
 	bu_ptbl_free(&view_vis_list);
 
@@ -848,8 +848,8 @@
     /* free views visible list */
     for (i = 0; i < BU_PTBL_END(&view_vis_list); i++) {
 	vv = (struct views_visible *)BU_PTBL_GET(&view_vis_list, i);
-	bu_free((char *)vv->view_de, "Conv_drawings: vv->view_de");
-	bu_free((char *)vv, "Conv_drawings: vv");
+	bu_free((genptr_t)vv->view_de, "Conv_drawings: vv->view_de");
+	bu_free((genptr_t)vv, "Conv_drawings: vv");
     }
     bu_ptbl_free(&view_vis_list);
 }
Index: conv/iges/add_inner_shell.c
===================================================================
--- conv/iges/add_inner_shell.c	(revision 54048)
+++ conv/iges/add_inner_shell.c	(working copy)
@@ -64,9 +64,9 @@
 
     nmg_gluefaces(fu, face_count, &tol);
 
-    bu_free((char *)fu, "Add_inner_shell: faceuse list");
-    bu_free((char *)face_de, "Add_inner_shell: face DE's");
-    bu_free((char *)face_orient, "Add_inner_shell: face orients");
+    bu_free((genptr_t)fu, "Add_inner_shell: faceuse list");
+    bu_free((genptr_t)face_de, "Add_inner_shell: face DE's");
+    bu_free((genptr_t)face_orient, "Add_inner_shell: face orients");
     return s;
 }
 
Index: conv/iges/trimsurf.c
===================================================================
--- conv/iges/trimsurf.c	(revision 54048)
+++ conv/iges/trimsurf.c	(working copy)
@@ -414,7 +414,7 @@
 	    for (i = 0; i < curve_count; i++)
 		Add_trim_curve((curve_list[i]-1)/2, lu, srf);
 
-	    bu_free((char *)curve_list, "Add_trim_curve: curve_list");
+	    bu_free((genptr_t)curve_list, "Add_trim_curve: curve_list");
 	}
 	    break;
 	case 110:	/* line */
@@ -586,7 +586,7 @@
 	    for (i = 0; i < curve_count; i++)
 		Add_trim_curve((curve_list[i]-1)/2, lu, srf);
 
-	    bu_free((char *)curve_list, "Make_trim_loop: curve_list");
+	    bu_free((genptr_t)curve_list, "Make_trim_loop: curve_list");
 
 	    /* if last EU is zero length, kill it */
 	    eu = BU_LIST_LAST(edgeuse, &lu->down_hd);
@@ -970,7 +970,7 @@
 
     if ((srf = Get_nurb_surf((surf_de-1)/2, m)) == (struct face_g_snurb *)NULL) {
 	if (inner_loop_count)
-	    bu_free((char *)inner_loop, "trim_surf: inner_loop");
+	    bu_free((genptr_t)inner_loop, "trim_surf: inner_loop");
 	return (struct faceuse *)NULL;
     }
 
@@ -1053,7 +1053,7 @@
     }
 
     if (inner_loop_count)
-	bu_free((char *)inner_loop, "trim_surf: inner_loop");
+	bu_free((genptr_t)inner_loop, "trim_surf: inner_loop");
 
     NMG_CK_FACE_G_SNURB(fu->f_p->g.snurb_p);
 
@@ -1157,7 +1157,7 @@
 		if (rt_g.NMG_debug & DEBUG_RT_ISECT)
 		    bu_log("\tNot a hit\n");
 
-		bu_free((char *)hp, "nurb_uv_hit");
+		bu_free((genptr_t)hp, "nurb_uv_hit");
 		hp = next;
 		continue;
 	    }
@@ -1205,7 +1205,7 @@
 		}
 	    }
 
-	    bu_free((char *)hp, "nurb_uv_hit");
+	    bu_free((genptr_t)hp, "nurb_uv_hit");
 	    hp = next;
 	}
 	rt_nurb_free_snurb(srf, (struct resource *)NULL);
@@ -1469,7 +1469,7 @@
 	    myhit = BU_LIST_FIRST(snurb_hit, &hit_list);
 	    BU_LIST_DEQUEUE(&myhit->l);
 
-	    bu_free((char *)myhit, "myhit");
+	    bu_free((genptr_t)myhit, "myhit");
 	}
 
     }
Index: conv/iges/revolve.c
===================================================================
--- conv/iges/revolve.c	(revision 54048)
+++ conv/iges/revolve.c	(working copy)
@@ -219,7 +219,7 @@
     /* Eliminate last struct if not used */
     if (trcptr->name[0] == '\0') {
       if (trcptr->prev) trcptr->prev->next = NULL;
-      bu_free((char *)trcptr, "Revolve: trcptr");
+      bu_free((genptr_t)trcptr, "Revolve: trcptr");
     }
 
     if (dir[entityno]->form == 1) {
@@ -404,7 +404,7 @@
     trcptr = trcs;
     while (trcptr != NULL) {
 	trcptr_tmp = trcptr->next;
-	bu_free((char *)trcptr, "Revolve: trcptr");
+	bu_free((genptr_t)trcptr, "Revolve: trcptr");
 	trcptr = trcptr_tmp;
     }
     return 1;
Index: conv/iges/get_outer_shell.cpp
===================================================================
--- conv/iges/get_outer_shell.cpp	(revision 54048)
+++ conv/iges/get_outer_shell.cpp	(working copy)
@@ -57,8 +57,8 @@
 
     // ??? do I need to glue these faces together?
 
-    bu_free((char *)face_de , "Get_outer_shell: face DE's");
-    bu_free((char *)face_orient , "Get_outer_shell: face orients");
+    bu_free((genptr_t)face_de , "Get_outer_shell: face DE's");
+    bu_free((genptr_t)face_orient , "Get_outer_shell: face orients");
     return s;
 }
 
@@ -110,9 +110,9 @@
 
     nmg_gluefaces(fu , face_count, &tol);
 
-    bu_free((char *)fu , "Get_outer_shell: faceuse list");
-    bu_free((char *)face_de , "Get_outer_shell: face DE's");
-    bu_free((char *)face_orient , "Get_outer_shell: face orients");
+    bu_free((genptr_t)fu , "Get_outer_shell: faceuse list");
+    bu_free((genptr_t)face_de , "Get_outer_shell: face DE's");
+    bu_free((genptr_t)face_orient , "Get_outer_shell: face orients");
     return s;
 }
 
Index: conv/iges/do_subfigs.c
===================================================================
--- conv/iges/do_subfigs.c	(revision 54048)
+++ conv/iges/do_subfigs.c	(working copy)
@@ -201,7 +201,7 @@
 
 		    name = list_ptr->obj_name;
 		} else
-		    bu_free((char *)file_name, "Do_subfigs: file_name");
+		    bu_free((genptr_t)file_name, "Do_subfigs: file_name");
 
 	    } else
 		name = dir[idx]->name;
Index: conv/iges/brep.c
===================================================================
--- conv/iges/brep.c	(revision 54048)
+++ conv/iges/brep.c	(working copy)
@@ -114,16 +114,16 @@
     }
 
     if (num_of_voids) {
-	bu_free((char *)void_shell_de, "BREP: void shell DE's");
-	bu_free((char *)void_orient, "BREP: void shell orients");
-	bu_free((char *)void_shells, "brep: void shell list");
+	bu_free((genptr_t)void_shell_de, "BREP: void shell DE's");
+	bu_free((genptr_t)void_orient, "BREP: void shell orients");
+	bu_free((genptr_t)void_shells, "brep: void shell list");
     }
 
     v_list = vertex_root;
     while (v_list != NULL) {
 	v_list_tmp = v_list->next;
-	bu_free((char *)v_list->i_verts, "brep: iges_vertex");
-	bu_free((char *)v_list, "brep: vertex list");
+	bu_free((genptr_t)v_list->i_verts, "brep: iges_vertex");
+	bu_free((genptr_t)v_list, "brep: vertex list");
 	v_list = v_list_tmp;
     }
     vertex_root = NULL;
@@ -131,8 +131,8 @@
     e_list = edge_root;
     while (e_list != NULL) {
 	e_list_tmp = e_list->next;
-	bu_free((char *)e_list->i_edge, "brep:iges_edge");
-	bu_free((char *)e_list, "brep: edge list");
+	bu_free((genptr_t)e_list->i_edge, "brep:iges_edge");
+	bu_free((genptr_t)e_list, "brep: edge list");
 	e_list = e_list_tmp;
     }
     edge_root = NULL;
@@ -148,9 +148,9 @@
 
     err :
 	if (num_of_voids) {
-	    bu_free((char *)void_shell_de, "BREP: void shell DE's");
-	    bu_free((char *)void_orient, "BREP: void shell orients");
-	    bu_free((char *)void_shells, "brep: void shell list");
+	    bu_free((genptr_t)void_shell_de, "BREP: void shell DE's");
+	    bu_free((genptr_t)void_orient, "BREP: void shell orients");
+	    bu_free((genptr_t)void_shells, "brep: void shell list");
 	}
 
     /* perform nmg kill model if make nmg was not executed since
Index: conv/iges/showtree.c
===================================================================
--- conv/iges/showtree.c	(revision 54048)
+++ conv/iges/showtree.c	(working copy)
@@ -187,7 +187,7 @@
 
     jtop = (-1);
     stklen = 0;
-    bu_free((char *)stk, "Afreestack: stk");
+    bu_free((genptr_t)stk, "Afreestack: stk");
     return;
 }
 
@@ -252,7 +252,7 @@
 Sfreestack()
 {
     sjtop = (-1);
-    bu_free((char *)sstk_p, "Sfreestack: sstk_p");
+    bu_free((genptr_t)sstk_p, "Sfreestack: sstk_p");
     return;
 }
 
Index: conv/iges/freetree.c
===================================================================
--- conv/iges/freetree.c	(revision 54048)
+++ conv/iges/freetree.c	(working copy)
@@ -32,7 +32,7 @@
 	    ptr = ptr->left;
 	}
 	ptr = (struct node *)Pop();
-	bu_free((char *)ptr, "Freetree: ptr");
+	bu_free((genptr_t)ptr, "Freetree: ptr");
 
 	if (ptr->parent == NULL)
 	    return;
Index: conv/iges/g-iges.c
===================================================================
--- conv/iges/g-iges.c	(revision 54048)
+++ conv/iges/g-iges.c	(working copy)
@@ -768,7 +768,7 @@
     de_pointer_number = 0;
     if (get_de_pointers(comb->tree, dp, comb_len, de_pointers)) {
 	bu_log("Error in combination %s\n", dp->d_namep);
-	bu_free((char *)de_pointers, "csg_comb_func de_pointers");
+	bu_free((genptr_t)de_pointers, "csg_comb_func de_pointers");
 	rt_db_free_internal(&intern);
 	return;
     }
@@ -794,7 +794,7 @@
     }
 
     rt_db_free_internal(&intern);
-    bu_free((char *)de_pointers, "csg_comb_func de_pointers");
+    bu_free((genptr_t)de_pointers, "csg_comb_func de_pointers");
 
 }
 
Index: conv/iges/get_outer_shell.c
===================================================================
--- conv/iges/get_outer_shell.c	(revision 54048)
+++ conv/iges/get_outer_shell.c	(working copy)
@@ -65,9 +65,9 @@
 
     nmg_gluefaces(fu, face_count, &tol);
 
-    bu_free((char *)fu, "Get_outer_shell: faceuse list");
-    bu_free((char *)face_de, "Get_outer_shell: face DE's");
-    bu_free((char *)face_orient, "Get_outer_shell: face orients");
+    bu_free((genptr_t)fu, "Get_outer_shell: faceuse list");
+    bu_free((genptr_t)face_de, "Get_outer_shell: face DE's");
+    bu_free((genptr_t)face_orient, "Get_outer_shell: face orients");
     return s;
 }
 
Index: conv/iges/iges.c
===================================================================
--- conv/iges/iges.c	(revision 54048)
+++ conv/iges/iges.c	(working copy)
@@ -1111,7 +1111,7 @@
 	bu_vls_printf(&str, ", %d", curve_de[i]);
     bu_vls_strcat(&str, ";");
 
-    bu_free((char *)curve_de, "nmg_fu_to_tsurf: curve_de");
+    bu_free((genptr_t)curve_de, "nmg_fu_to_tsurf: curve_de");
 
     /* remember where parameter data is going */
     dir_entry[2] = param_seq + 1;
@@ -1793,7 +1793,7 @@
 
 	    face_list[face_count++] = write_dir_entry(fp_dir, dir_entry);;
 
-	    bu_free((char *)loop_list, "loop list");
+	    bu_free((genptr_t)loop_list, "loop list");
 	    bu_vls_free(&str);
 	}
 
@@ -1817,7 +1817,7 @@
 
 	shell_list[shell_count++] = write_dir_entry(fp_dir, dir_entry);
 
-	bu_free((char *)face_list, "face list");
+	bu_free((genptr_t)face_list, "face list");
 	bu_vls_free(&str);
     }
 
@@ -1877,7 +1877,7 @@
     dir_entry[15] = 0;
     dir_entry[14] = write_freeform(fp_param, bu_vls_addr(&str), dir_seq+1, 'P');
 
-    bu_free((char *)shell_list, "shell list");
+    bu_free((genptr_t)shell_list, "shell list");
     bu_vls_free(&str);
 
     return write_dir_entry(fp_dir, dir_entry);
@@ -2588,7 +2588,7 @@
 	    brep_de = write_tree_of_unions(name, region_de, region_count ,
 					   dependent, fp_dir, fp_param);
 
-	    bu_free((char *)region_de, "nmg_to_iges");
+	    bu_free((genptr_t)region_de, "nmg_to_iges");
 	    return brep_de;
 	}
     } else {
Index: conv/iges/convassem.c
===================================================================
--- conv/iges/convassem.c	(revision 54048)
+++ conv/iges/convassem.c	(working copy)
@@ -200,7 +200,7 @@
 	ptr = root;
 	while (ptr != NULL) {
 	    ptr_tmp = ptr->next;
-	    bu_free((char *)ptr, "convassem: ptr");
+	    bu_free((genptr_t)ptr, "convassem: ptr");
 	    ptr = ptr_tmp;
 	}
     }
Index: conv/iges/check_names.c
===================================================================
--- conv/iges/check_names.c	(revision 54048)
+++ conv/iges/check_names.c	(working copy)
@@ -245,7 +245,7 @@
 
     Readname(&name, "");
     dir[entityno]->name = Make_unique_brl_name(name);
-    bu_free((char *)name, "Get_name: name");
+    bu_free((genptr_t)name, "Get_name: name");
 
 }
 
@@ -322,7 +322,7 @@
 
     Readname(&name, "");
     dir[entityno]->name = Make_unique_brl_name(name);
-    bu_free((char *)name, "Get_name: name");
+    bu_free((genptr_t)name, "Get_name: name");
 }
 
 
@@ -397,7 +397,7 @@
 
     Readname(&name, "");
     dir[entityno]->name = Make_unique_brl_name(name);
-    bu_free((char *)name, "Get_name: name");
+    bu_free((genptr_t)name, "Get_name: name");
 }
 
 
@@ -471,7 +471,7 @@
 
     Readname(&name, "");
     dir[entityno]->name = Make_unique_brl_name(name);
-    bu_free((char *)name, "Get_name: name");
+    bu_free((genptr_t)name, "Get_name: name");
 }
 
 
@@ -508,7 +508,7 @@
     Readname(&name, "");	/* get subfigure name */
 
     dir[entityno]->name = Add_brl_name(name);
-    bu_free((char *)name, "Get_name: name");
+    bu_free((genptr_t)name, "Get_name: name");
 }
 
 
Index: conv/iges/add_face.cpp
===================================================================
--- conv/iges/add_face.cpp	(revision 54048)
+++ conv/iges/add_face.cpp	(working copy)
@@ -101,7 +101,7 @@
     }
 
     err :
-	bu_free((char *)loop_de , "Add_face_to_shell: loop DE's");
+	bu_free((genptr_t)loop_de , "Add_face_to_shell: loop DE's");
     return fu;
 }
 
Index: conv/iges/b-spline.c
===================================================================
--- conv/iges/b-spline.c	(revision 54048)
+++ conv/iges/b-spline.c	(working copy)
@@ -47,7 +47,7 @@
     }
 
     if (numknots)
-	bu_free((char *)knots, "Knot: knots");
+	bu_free((genptr_t)knots, "Knot: knots");
 
     knots = (fastf_t *)bu_calloc(n, sizeof(fastf_t), "Knot: knots");
 
@@ -62,7 +62,7 @@
 void
 Freeknots(void)
 {
-    bu_free((char *)knots, "Freeknots: knots");
+    bu_free((genptr_t)knots, "Freeknots: knots");
     numknots = 0;
 }
 
Index: conv/iges/extrude.c
===================================================================
--- conv/iges/extrude.c	(revision 54048)
+++ conv/iges/extrude.c	(working copy)
@@ -121,20 +121,20 @@
 	    if (nmg_calc_face_g(fu)) {
 		bu_log("Extrude: Failed to calculate face geometry\n");
 		nmg_km(m);
-		bu_free((char *)curv_pts, "curve_pts");
+		bu_free((genptr_t)curv_pts, "curve_pts");
 		return 0;
 	    }
 
 	    if (nmg_extrude_face(fu, evect, &tol)) {
 		bu_log("Extrude: extrusion failed\n");
 		nmg_km(m);
-		bu_free((char *)curv_pts, "curve_pts");
+		bu_free((genptr_t)curv_pts, "curve_pts");
 		return 0;
 	    }
 
 	    mk_bot_from_nmg(fdout, dir[entityno]->name, s);
 	    nmg_km(m);
-	    bu_free((char *)curv_pts, "curve_pts");
+	    bu_free((genptr_t)curv_pts, "curve_pts");
 
 	    return 1;
 	}
Index: conv/iges/make_nurb_face.c
===================================================================
--- conv/iges/make_nurb_face.c	(revision 54048)
+++ conv/iges/make_nurb_face.c	(working copy)
@@ -299,7 +299,7 @@
 
 		    tmp_crv = BU_LIST_FIRST(edge_g_cnurb, &split_hd);
 		    BU_LIST_DEQUEUE(&tmp_crv->l);
-		    bu_free((char *)tmp_crv, "Add_nurb_loop_to_face: tmp_crv");
+		    bu_free((genptr_t)tmp_crv, "Add_nurb_loop_to_face: tmp_crv");
 		}
 	    } else {
 		nmg_vertexuse_a_cnurb(eu->vu_p, start_uv);
@@ -311,9 +311,9 @@
 		    Assign_cnurb_to_eu(eu, crv);
 	    }
 
-	    bu_free((char *)crv->k.knots, "Add_nurb_loop_to_face: crv->k.knots");
-	    bu_free((char *)crv->ctl_points, "Add_nurb_loop_to_face: crv->ctl_points");
-	    bu_free((char *)crv, "Add_nurb_loop_to_face: crv");
+	    bu_free((genptr_t)crv->k.knots, "Add_nurb_loop_to_face: crv->k.knots");
+	    bu_free((genptr_t)crv->ctl_points, "Add_nurb_loop_to_face: crv->ctl_points");
+	    bu_free((genptr_t)crv, "Add_nurb_loop_to_face: crv");
 
 	    if (new_eu)
 		eu = new_eu;
Index: conv/iges/evalxform.c
===================================================================
--- conv/iges/evalxform.c	(revision 54048)
+++ conv/iges/evalxform.c	(working copy)
@@ -97,7 +97,7 @@
 	    while (ptr) {
 		ptr1 = ptr;
 		ptr = ptr->prev;
-		bu_free((char *)ptr1, "Evalxform: ptr1");
+		bu_free((genptr_t)ptr1, "Evalxform: ptr1");
 	    }
 	}
     }
Index: conv/iges/add_face.c
===================================================================
--- conv/iges/add_face.c	(revision 54048)
+++ conv/iges/add_face.c	(working copy)
@@ -90,7 +90,7 @@
     }
 
     err :
-	bu_free((char *)loop_de, "Add_face_to_shell: loop DE's");
+	bu_free((genptr_t)loop_de, "Add_face_to_shell: loop DE's");
     return fu;
 }
 
Index: conv/iges/orient_loops.c
===================================================================
--- conv/iges/orient_loops.c	(revision 54048)
+++ conv/iges/orient_loops.c	(working copy)
@@ -89,7 +89,7 @@
 			lptr->inner_loops = inner1->next;
 
 		    inner1 = inner1->next;
-		    bu_free((char *)tmp, "Find_inner_loops: tmp");
+		    bu_free((genptr_t)tmp, "Find_inner_loops: tmp");
 		    deleted = 1;
 		}
 	    }
Index: conv/iges/main.c
===================================================================
--- conv/iges/main.c	(revision 54048)
+++ conv/iges/main.c	(working copy)
@@ -306,8 +306,8 @@
 	    bu_mem_barriercheck();
 
 	BU_LIST_DEQUEUE(&curr_file->l);
-	bu_free((char *)curr_file->file_name, "iges-g: curr_file->file_name");
-	bu_free((char *)curr_file, "iges-g: curr_file");
+	bu_free((genptr_t)curr_file->file_name, "iges-g: curr_file->file_name");
+	bu_free((genptr_t)curr_file, "iges-g: curr_file");
 	file_count++;
 
 	if (RT_G_DEBUG & DEBUG_MEM_FULL)
Index: conv/iges/getcurve.c
===================================================================
--- conv/iges/getcurve.c	(revision 54048)
+++ conv/iges/getcurve.c	(working copy)
@@ -160,7 +160,7 @@
 		ptr->prev = prev;
 	    }
 	    ptr = prev;
-	    bu_free((char *)ptr->next, "Getcurve: ptr->next");
+	    bu_free((genptr_t)ptr->next, "Getcurve: ptr->next");
 	    ptr->next = NULL;
 	    break;
 	}
@@ -216,7 +216,7 @@
 			ptr->next = NULL;
 		    }
 		    ptr = ptr->prev;
-		    bu_free((char *)ptr->next, "Getcurve: ptr->next");
+		    bu_free((genptr_t)ptr->next, "Getcurve: ptr->next");
 		    ptr->next = NULL;
 		    npts = ntuples;
 		    break;
@@ -246,7 +246,7 @@
 			ptr->prev = prev;
 		    }
 		    ptr = ptr->prev;
-		    bu_free((char *)ptr->next, "Getcurve: ptr->next");
+		    bu_free((genptr_t)ptr->next, "Getcurve: ptr->next");
 		    ptr->next = NULL;
 		    npts = ntuples;
 		    break;
@@ -351,7 +351,7 @@
 		seg = seg->next;
 	    }
 	    ptr = ptr->prev;
-	    bu_free((char *)ptr->next, "Getcurve: ptr->next");
+	    bu_free((genptr_t)ptr->next, "Getcurve: ptr->next");
 	    ptr->next = NULL;
 
 	    /* free the used memory */
@@ -359,9 +359,9 @@
 	    while (seg != NULL) {
 		seg1 = seg;
 		seg = seg->next;
-		bu_free((char *)seg1, "Getcurve: seg1");
+		bu_free((genptr_t)seg1, "Getcurve: seg1");
 	    }
-	    bu_free((char *)splroot, "Getcurve: splroot");
+	    bu_free((genptr_t)splroot, "Getcurve: splroot");
 	    splroot = NULL;
 
 	    break;
@@ -736,7 +736,7 @@
 			ptr->next = ptr->next->next;
 			if (ptr->next != NULL)
 			    ptr->next->prev = ptr;
-			bu_free((char *)tmp_ptr, "Getcurve: tmp_ptr");
+			bu_free((genptr_t)tmp_ptr, "Getcurve: tmp_ptr");
 			npts--;
 		    }
 		}
@@ -825,9 +825,9 @@
 
 	    /* Free memory */
 	    Freeknots();
-	    bu_free((char *)cntrl_pts, "Getcurve: spline cntrl_pts");
-	    bu_free((char *)w, "Getcurve: spline w");
-	    bu_free((char *)t, "Getcurve: spline t");
+	    bu_free((genptr_t)cntrl_pts, "Getcurve: spline cntrl_pts");
+	    bu_free((genptr_t)w, "Getcurve: spline w");
+	    bu_free((genptr_t)t, "Getcurve: spline t");
 
 	    break;
 	}
Index: conv/iges/brep.cpp
===================================================================
--- conv/iges/brep.cpp	(revision 54048)
+++ conv/iges/brep.cpp	(working copy)
@@ -115,23 +115,23 @@
     }
 
     if (num_of_voids) {
-	bu_free((char *)void_shell_de , "BREP: void shell DE's");
-	bu_free((char *)void_orient , "BREP: void shell orients");
-	bu_free((char *)void_shells , "brep: void shell list");
+	bu_free((genptr_t)void_shell_de , "BREP: void shell DE's");
+	bu_free((genptr_t)void_orient , "BREP: void shell orients");
+	bu_free((genptr_t)void_shells , "brep: void shell list");
     }
 
     v_list = vertex_root;
     while (v_list != NULL) {
-	bu_free((char *)v_list->i_verts , "brep: iges_vertex");
-	bu_free((char *)v_list , "brep: vertex list");
+	bu_free((genptr_t)v_list->i_verts , "brep: iges_vertex");
+	bu_free((genptr_t)v_list , "brep: vertex list");
 	v_list = v_list->next;
     }
     vertex_root = NULL;
 
     e_list = edge_root;
     while (e_list != NULL) {
-	bu_free((char *)e_list->i_edge , "brep:iges_edge");
-	bu_free((char *)e_list , "brep: edge list");
+	bu_free((genptr_t)e_list->i_edge , "brep:iges_edge");
+	bu_free((genptr_t)e_list , "brep: edge list");
 	e_list = e_list->next;
     }
     edge_root = NULL;
@@ -139,9 +139,9 @@
 
     err :
 	if (num_of_voids) {
-	    bu_free((char *)void_shell_de , "BREP: void shell DE's");
-	    bu_free((char *)void_orient , "BREP: void shell orients");
-	    bu_free((char *)void_shells , "brep: void shell list");
+	    bu_free((genptr_t)void_shell_de , "BREP: void shell DE's");
+	    bu_free((genptr_t)void_orient , "BREP: void shell orients");
+	    bu_free((genptr_t)void_shells , "brep: void shell list");
 	}
     nmg_km(m);
     return 0;
Index: conv/iges/make_face.c
===================================================================
--- conv/iges/make_face.c	(revision 54048)
+++ conv/iges/make_face.c	(working copy)
@@ -178,8 +178,8 @@
 	bu_log("No edges left!\n");
 
 err:
-    bu_free((char *)edge_list, "Make_face (edge_list)");
-    bu_free((char *)verts, "Make_face (vertexlist)");
+    bu_free((genptr_t)edge_list, "Make_face (edge_list)");
+    bu_free((genptr_t)verts, "Make_face (vertexlist)");
     return fu;
 }
 
Index: conv/g-dot.c
===================================================================
--- conv/g-dot.c	(revision 54048)
+++ conv/g-dot.c	(working copy)
@@ -129,7 +129,7 @@
 	bu_vls_free(&vls);
 
 	if (rt_tree_array)
-	    bu_free((char *)rt_tree_array, "printnode: rt_tree_array");
+	    bu_free((genptr_t)rt_tree_array, "printnode: rt_tree_array");
     }
 
     rt_db_free_internal(&intern);
Index: conv/jack/g-jack.c
===================================================================
--- conv/jack/g-jack.c	(revision 54048)
+++ conv/jack/g-jack.c	(working copy)
@@ -209,7 +209,7 @@
     jack_faces(r, fp_psurf, map);
 
     bu_ptbl_free(&vtab);
-    bu_free((char *)map, "Jack vert map");
+    bu_free((genptr_t)map, "Jack vert map");
 }
 
 
Index: conv/off/off-g.c
===================================================================
--- conv/off/off-g.c	(revision 54048)
+++ conv/off/off-g.c	(working copy)
@@ -119,8 +119,8 @@
 	if (ret > 0)
 	    bu_log("unknown parsing error\n");
 
-	bu_free((char *)vlist, "vertext list");
-	bu_free((char *)pinds, "point indices");
+	bu_free((genptr_t)vlist, "vertext list");
+	bu_free((genptr_t)pinds, "point indices");
     }
 
     for (i = 0; i < nverts; i++)
@@ -145,7 +145,7 @@
     nmg_gluefaces(outfaceuses, nfaces, &tol);
     nmg_region_a(r, &tol);
 
-    bu_free((char *)pts, "points list");
+    bu_free((genptr_t)pts, "points list");
     return 0;
 }
 
Index: conv/g-nff.c
===================================================================
--- conv/g-nff.c	(revision 54048)
+++ conv/g-nff.c	(working copy)
@@ -139,7 +139,7 @@
 
 	sofar = db_path_to_string(pathp);
 	bu_log("FAILED in triangulator: %s\n", sofar);
-	bu_free((char *)sofar, "sofar");
+	bu_free((genptr_t)sofar, "sofar");
 
 	/* Sometimes the NMG library adds debugging bits when
 	 * it detects an internal error, before bombing out.
Index: tab/tabinterp.c
===================================================================
--- tab/tabinterp.c	(revision 54048)
+++ tab/tabinterp.c	(working copy)
@@ -271,8 +271,8 @@
     /* Free intermediate dynamic memory */
  out:
     fclose(fp);
-    bu_free((char *)cnum, "cnum[]");
-    bu_free((char *)iwords, "iwords[]");
+    bu_free((genptr_t)cnum, "cnum[]");
+    bu_free((genptr_t)iwords, "iwords[]");
     bu_vls_free(&buf);
 
     if (errors)
@@ -918,12 +918,12 @@
 	    chp->c_oval[t] = yy;
 	}
     }
-    bu_free((char *)diag, "diag");
-    bu_free((char *)rrr, "rrr");
+    bu_free((genptr_t)diag, "diag");
+    bu_free((genptr_t)rrr, "rrr");
     return 1;
  bad:
-    if (diag) bu_free((char *)diag, "diag");
-    if (rrr) bu_free((char *)rrr, "rrr");
+    if (diag) bu_free((genptr_t)diag, "diag");
+    if (rrr) bu_free((genptr_t)rrr, "rrr");
     return 0;
 }
 
@@ -1032,7 +1032,7 @@
 	next_interpolate(chp);
     }
 
-    bu_free((char *)times, "loc times");
+    bu_free((genptr_t)times, "loc times");
 }
 
 
Index: libgcv/region_end_mc.c
===================================================================
--- libgcv/region_end_mc.c	(revision 54048)
+++ libgcv/region_end_mc.c	(working copy)
@@ -151,7 +151,7 @@
 
 	sofar = db_path_to_string(pathp);
 	bu_log("FAILED in triangulator: %s\n", sofar);
-	bu_free((char *)sofar, "sofar");
+	bu_free((genptr_t)sofar, "sofar");
 
 	/* Release any intersector 2d tables */
 	nmg_isect2d_final_cleanup();
Index: libgcv/region_end.c
===================================================================
--- libgcv/region_end.c	(revision 54048)
+++ libgcv/region_end.c	(working copy)
@@ -118,7 +118,7 @@
 
 	sofar = db_path_to_string(pathp);
 	bu_log("FAILED in boolean evaluation: %s\n", sofar);
-	bu_free((char *)sofar, "sofar");
+	bu_free((genptr_t)sofar, "sofar");
 
 	/* Release any intersector 2d tables */
 	nmg_isect2d_final_cleanup();
@@ -181,7 +181,7 @@
 
 	sofar = db_path_to_string(pathp);
 	bu_log("FAILED in triangulator: %s\n", sofar);
-	bu_free((char *)sofar, "sofar");
+	bu_free((genptr_t)sofar, "sofar");
 
 	/* Release any intersector 2d tables */
 	nmg_isect2d_final_cleanup();
Index: mged/muves.c
===================================================================
--- mged/muves.c	(revision 54048)
+++ mged/muves.c	(working copy)
@@ -129,7 +129,7 @@
 	sys = BU_LIST_FIRST(muves_sys, hp);
 	bu_free(sys->muves_name, "muves_sys.muves_name");
 	BU_LIST_DEQUEUE(&sys->l);
-	bu_free((char *)sys, "muves_sys");
+	bu_free((genptr_t)sys, "muves_sys");
     }
 }
 
@@ -143,7 +143,7 @@
 
 	cad = BU_LIST_FIRST(cad_comp_list, hp);
 	BU_LIST_DEQUEUE(&cad->l);
-	bu_free((char *)cad, "cad");
+	bu_free((genptr_t)cad, "cad");
     }
 }
 
@@ -158,7 +158,7 @@
 	bu_free(comp->muves_name, "muves_comp.muves_name");
 	Free_cad_list(&comp->comp_head.l);
 	BU_LIST_DEQUEUE(&comp->l);
-	bu_free((char *)comp, "muves_comp");
+	bu_free((genptr_t)comp, "muves_comp");
     }
 }
 
@@ -337,7 +337,7 @@
 	}
     }
 
-    bu_free((char *)regions, "regions");
+    bu_free((genptr_t)regions, "regions");
 
     if (new_comp) {
 	BU_LIST_INSERT(&muves_comp_head.l, &new_comp->l);
@@ -625,7 +625,7 @@
     if (e_argc > 1)
 	return edit_com(e_argc, (const char **)e_argv, 1, 0);
 
-    bu_free((char *)e_argv, "e_argv");
+    bu_free((genptr_t)e_argv, "e_argv");
 
     return TCL_OK;
 }
Index: mged/clone.c
===================================================================
--- mged/clone.c	(revision 54048)
+++ mged/clone.c	(working copy)
@@ -352,7 +352,7 @@
 	}
     }
     if (rp)
-	bu_free((char *)rp, "copy_solid record[]");
+	bu_free((genptr_t)rp, "copy_solid record[]");
 
     return;
 }
@@ -545,7 +545,7 @@
 	}
 
 	/* our responsibility to free the record */
-	bu_free((char *)rp, "deallocate copy_v4_comb() db_getmrec() record");
+	bu_free((genptr_t)rp, "deallocate copy_v4_comb() db_getmrec() record");
     }
 
     return dp;
@@ -764,11 +764,11 @@
 
  done_copy_tree:
     if (rp)
-	bu_free((char *)rp, "copy_tree record[]");
+	bu_free((genptr_t)rp, "copy_tree record[]");
     if (copyname)
-	bu_free((char *)copyname, "free get_name() copyname");
+	bu_free((genptr_t)copyname, "free get_name() copyname");
     if (nextname)
-	bu_free((char *)nextname, "free get_name() copyname");
+	bu_free((genptr_t)nextname, "free get_name() copyname");
 
     return copy;
 }
Index: mged/edsol.c
===================================================================
--- mged/edsol.c	(revision 54048)
+++ mged/edsol.c	(working copy)
@@ -4249,9 +4249,9 @@
 		} else {
 		    if (old_mode == RT_BOT_PLATE || old_mode == RT_BOT_PLATE_NOCOS) {
 			/* free the per face memory */
-			bu_free((char *)bot->thickness, "BOT thickness");
+			bu_free((genptr_t)bot->thickness, "BOT thickness");
 			bot->thickness = (fastf_t *)NULL;
-			bu_free((char *)bot->face_mode, "BOT face_mode");
+			bu_free((genptr_t)bot->face_mode, "BOT face_mode");
 			bot->face_mode = (struct bu_bitv *)NULL;
 		    }
 		}
@@ -4550,7 +4550,7 @@
 
 		sketch_name = Tcl_GetVar(INTERP, "final_sketch_name", TCL_GLOBAL_ONLY);
 		if (extr->sketch_name)
-		    bu_free((char *)extr->sketch_name, "extr->sketch_name");
+		    bu_free((genptr_t)extr->sketch_name, "extr->sketch_name");
 		extr->sketch_name = bu_strdup(sketch_name);
 
 		if (extr->skt) {
@@ -7669,11 +7669,11 @@
 	if (bot->mode == RT_BOT_SURFACE || bot->mode == RT_BOT_SOLID) {
 	    /* make sure facemodes and thicknesses have been freed */
 	    if (bot->thickness) {
-		bu_free((char *)bot->thickness, "BOT thickness");
+		bu_free((genptr_t)bot->thickness, "BOT thickness");
 		bot->thickness = NULL;
 	    }
 	    if (bot->face_mode) {
-		bu_free((char *)bot->face_mode, "BOT face_mode");
+		bu_free((genptr_t)bot->face_mode, "BOT face_mode");
 		bot->face_mode = NULL;
 	    }
 	} else {
Index: mged/chgview.c
===================================================================
--- mged/chgview.c	(revision 54048)
+++ mged/chgview.c	(working copy)
@@ -395,7 +395,7 @@
 
 	max_count = BU_PTBL_LEN(tbl) + last_opt + 1;
 	bu_ptbl_free(tbl);
-	bu_free((char *)tbl, "edit_com ptbl");
+	bu_free((genptr_t)tbl, "edit_com ptbl");
 	new_argv = (char **)bu_calloc(max_count + 1, sizeof(char *), "edit_com new_argv");
 	new_argc = bu_argv_from_string(new_argv, max_count, bu_vls_addr(&vls));
 
@@ -404,17 +404,17 @@
 	if (ret == GED_ERROR) {
 	    bu_log("ERROR: %s\n", bu_vls_addr(gedp->ged_result_str));
 	    bu_vls_free(&vls);
-	    bu_free((char *)new_argv, "edit_com new_argv");
+	    bu_free((genptr_t)new_argv, "edit_com new_argv");
 	    return ret;
 	} else if (ret == GED_HELP) {
 	    bu_log("%s\n", bu_vls_addr(gedp->ged_result_str));
 	    bu_vls_free(&vls);
-	    bu_free((char *)new_argv, "edit_com new_argv");
+	    bu_free((genptr_t)new_argv, "edit_com new_argv");
 	    return ret;
 	}
 
 	bu_vls_free(&vls);
-	bu_free((char *)new_argv, "edit_com new_argv");
+	bu_free((genptr_t)new_argv, "edit_com new_argv");
     } else {
 	bu_vls_free(&vls);
 
@@ -549,7 +549,7 @@
     }
 
     if (BU_PTBL_LEN(tbl) < 1) {
-	bu_free((char *)tbl, "tbl returned by wdb_get_by_attr");
+	bu_free((genptr_t)tbl, "tbl returned by wdb_get_by_attr");
 	return TCL_OK;
     }
 
@@ -568,8 +568,8 @@
 
     ret = edit_com((BU_PTBL_LEN(tbl) + 1), objs, 1);
     bu_ptbl_free(tbl);
-    bu_free((char *)tbl, "tbl returned by wdb_get_by_attr");
-    bu_free((char *)objs, "emuves_com objs");
+    bu_free((genptr_t)tbl, "tbl returned by wdb_get_by_attr");
+    bu_free((genptr_t)objs, "emuves_com objs");
     return ret;
 }
 
Index: mged/cmd.c
===================================================================
--- mged/cmd.c	(revision 54048)
+++ mged/cmd.c	(working copy)
@@ -1944,7 +1944,7 @@
 	bu_vls_free(&vls);
 	bu_avs_free(&avs);
 	bu_ptbl_free(tbl);
-	bu_free((char *)tbl, "cmd_lm ptbl");
+	bu_free((genptr_t)tbl, "cmd_lm ptbl");
 	return TCL_OK;
     }
 
@@ -1956,7 +1956,7 @@
     }
 
     bu_ptbl_free(tbl);
-    bu_free((char *)tbl, "cmd_lm ptbl");
+    bu_free((genptr_t)tbl, "cmd_lm ptbl");
 
     /* create a new argc and argv to pass to the cmd_ls routine */
     new_argv = (char **)bu_calloc(new_arg_count+1, sizeof(char *), "cmd_lm new_argv");
@@ -1964,7 +1964,7 @@
 
     ret = ged_ls(gedp, new_argc, (const char **)new_argv);
     bu_vls_free(&vls);
-    bu_free((char *)new_argv, "cmd_lm new_argv");
+    bu_free((genptr_t)new_argv, "cmd_lm new_argv");
 
     Tcl_AppendResult(interpreter, bu_vls_addr(gedp->ged_result_str), NULL);
 
Index: libfb/fb_obj.c
===================================================================
--- libfb/fb_obj.c	(revision 54048)
+++ libfb/fb_obj.c	(working copy)
@@ -497,7 +497,7 @@
 	pp[i+2] = pixel[2];
     }
     fb_writerect(fbop->fbo_fbs.fbs_fbp, xmin, ymin, width, height, pp);
-    bu_free((void *)pp, "free pixel array");
+    bu_free((genptr_t)pp, "free pixel array");
 
     return BRLCAD_OK;
 }
Index: libtclcad/tkImgFmtPIX.c
===================================================================
--- libtclcad/tkImgFmtPIX.c	(revision 54048)
+++ libtclcad/tkImgFmtPIX.c	(working copy)
@@ -264,7 +264,7 @@
 			     fileName, "\": ",
 			     Tcl_Eof(chan) ? "not enough data" : Tcl_PosixError(interp),
 			     (char *) NULL);
-	    bu_free((char *) pixelPtr, "PIX image");
+	    bu_free((genptr_t) pixelPtr, "PIX image");
 	    return TCL_ERROR;
 	}
 	block.height = 1;
@@ -275,7 +275,7 @@
 #endif
     }
 
-    bu_free((char *) pixelPtr, "PIX image buffer");
+    bu_free((genptr_t) pixelPtr, "PIX image buffer");
     return TCL_OK;
 }
 
Index: libtclcad/tclcad_obj.c
===================================================================
--- libtclcad/tclcad_obj.c	(revision 54048)
+++ libtclcad/tclcad_obj.c	(working copy)
@@ -10365,7 +10365,7 @@
     if (current_top->to_gop->go_prim_label_list_size) {
 	for (i = 0; i < current_top->to_gop->go_prim_label_list_size; ++i)
 	    bu_vls_free(&current_top->to_gop->go_prim_label_list[i]);
-	bu_free((void *)current_top->to_gop->go_prim_label_list, "prim_label");
+	bu_free((genptr_t)current_top->to_gop->go_prim_label_list, "prim_label");
 	current_top->to_gop->go_prim_label_list = (struct bu_vls *)0;
     }
 
@@ -12183,7 +12183,7 @@
     bu_vls_free(&temp);
 
     for (i = 0; i < ac; ++i)
-	bu_free((void *)av[i], "to_more_args_func");
+	bu_free((genptr_t)av[i], "to_more_args_func");
 
     return ret;
 }
Index: anim/anim_time.c
===================================================================
--- anim/anim_time.c	(revision 54048)
+++ anim/anim_time.c	(working copy)
@@ -281,10 +281,10 @@
 	printf("%.12e\n", end);
     }
 
-    bu_free((char *) l, "l[]");
-    bu_free((char *) x, "x[]");
-    bu_free((char *) y, "y[]");
-    bu_free((char *) z, "z[]");
+    bu_free((genptr_t) l, "l[]");
+    bu_free((genptr_t) x, "x[]");
+    bu_free((genptr_t) y, "y[]");
+    bu_free((genptr_t) z, "z[]");
     return 0;
 }
 
Index: rt/viewarea.c
===================================================================
--- rt/viewarea.c	(revision 54048)
+++ rt/viewarea.c	(working copy)
@@ -1036,7 +1036,7 @@
     if (cell) {
 	while (BU_LIST_WHILE(cellp, area, &(cell->assembly->l))) {
 	    if (cellp->name) {
-		bu_free((char *)cellp->name, "view_end assembly name free");
+		bu_free((genptr_t)cellp->name, "view_end assembly name free");
 	    }
 	    if (rtarea_compute_centers) {
 		if (cellp->exp_points) {
Index: rt/viewcheck.c
===================================================================
--- rt/viewcheck.c	(revision 54048)
+++ rt/viewcheck.c	(working copy)
@@ -179,7 +179,7 @@
 		if (depth > op->maxdepth)
 		    op->maxdepth = depth;
 		bu_semaphore_release(BU_SEM_SYSCALL);
-		bu_free((char *) new_op, "overlap list");
+		bu_free((genptr_t) new_op, "overlap list");
 		return 0;	/* already on list */
 	    }
 	}
@@ -386,7 +386,7 @@
 	while (op) {
 	    /* free struct */
 	    nextop = op->next;
-	    bu_free((char *)op, "overlap_list");
+	    bu_free((genptr_t)op, "overlap_list");
 	    op = nextop;
 	}
 	olist = (struct overlap_list *)NULL;
Index: rt/view.c
===================================================================
--- rt/view.c	(revision 54048)
+++ rt/view.c	(working copy)
@@ -758,7 +758,7 @@
 	mlib_free(regp);
     }
     if (env_region.reg_mfuncs) {
-	bu_free((char *)env_region.reg_name, "env_region.reg_name");
+	bu_free((genptr_t)env_region.reg_name, "env_region.reg_name");
 	env_region.reg_name = (char *)0;
 	mlib_free(&env_region);
     }
Index: libbn/sphmap.c
===================================================================
--- libbn/sphmap.c	(revision 54048)
+++ libbn/sphmap.c	(working copy)
@@ -38,21 +38,21 @@
 	return;
 
     if (mp->_data != NULL) {
-	(void) bu_free((char *)mp->_data, "sph _data");
+	(void) bu_free((genptr_t)mp->_data, "sph _data");
 	mp->_data = NULL;
     }
 
     if (mp->nx != NULL) {
-	(void) bu_free((char *)mp->nx, "sph nx");
+	(void) bu_free((genptr_t)mp->nx, "sph nx");
 	mp->nx = NULL;
     }
 
     if (mp->xbin != NULL) {
-	(void) bu_free((char *)mp->xbin, "sph xbin");
+	(void) bu_free((genptr_t)mp->xbin, "sph xbin");
 	mp->xbin = NULL;
     }
 
-    (void) bu_free((char *)mp, "bn_spm_map_t");
+    (void) bu_free((genptr_t)mp, "bn_spm_map_t");
 }
 
 
@@ -299,7 +299,7 @@
 	    *cp++ = (unsigned char)(blue/count);
 	}
     }
-    (void) bu_free((char *)buffer, "bn_spm buffer");
+    (void) bu_free((genptr_t)buffer, "bn_spm buffer");
 
     return 0;
 }
Index: libbu/hist.c
===================================================================
--- libbu/hist.c	(revision 54048)
+++ libbu/hist.c	(working copy)
@@ -39,7 +39,7 @@
     BU_CK_HIST(histp);
 
     if (histp->hg_bins)
-	bu_free((char *)histp->hg_bins, "old bu_hist bins");
+	bu_free((genptr_t)histp->hg_bins, "old bu_hist bins");
     histp->hg_bins = (long *)0;
     histp->hg_nbins = 0;
     histp->magic = (unsigned int)-1;	/* sanity */
Index: libbu/argv.c
===================================================================
--- libbu/argv.c	(revision 54048)
+++ libbu/argv.c	(working copy)
@@ -170,12 +170,12 @@
 
     for (i = 0; i < argc; ++i) {
 	if (argv[i]) {
-	    bu_free((void *)argv[i], "bu_free_argv");
+	    bu_free((genptr_t)argv[i], "bu_free_argv");
 	    argv[i] = NULL; /* sanity */
 	}
     }
 
-    bu_free((void *)argv, "bu_free_argv");
+    bu_free((genptr_t)argv, "bu_free_argv");
     argv = NULL;
 }
 
@@ -318,7 +318,7 @@
 	av[i] = (char *)0;
 	--*ac;
     }
-    bu_free((void *)newstr, "bu_argv_from_path");
+    bu_free((genptr_t)newstr, "bu_argv_from_path");
 
     return av;
 }
Index: libbu/bitv.c
===================================================================
--- libbu/bitv.c	(revision 54048)
+++ libbu/bitv.c	(working copy)
@@ -105,7 +105,7 @@
     BU_CK_BITV(bv);
 
     bv->l.forw = bv->l.back = BU_LIST_NULL;	/* sanity */
-    bu_free((char *)bv, "struct bu_bitv");
+    bu_free((genptr_t)bv, "struct bu_bitv");
 }
 
 
Index: libbu/parse.c
===================================================================
--- libbu/parse.c	(revision 54048)
+++ libbu/parse.c	(working copy)
@@ -149,7 +149,7 @@
 		break;
 	    default:
 		/* Unknown */
-		bu_free((char *) ext->ext_buf, "output ext_buf");
+		bu_free((genptr_t) ext->ext_buf, "output ext_buf");
 		return 0;
 	}
 	/* [0] == '%', use printf-like format char */
@@ -264,7 +264,7 @@
 		}
 		continue;
 	    default:
-		bu_free((char *) ext->ext_buf, "output ext_buf");
+		bu_free((genptr_t) ext->ext_buf, "output ext_buf");
 		return 0;
 	}
     }
Index: libbu/vfont.c
===================================================================
--- libbu/vfont.c	(revision 54048)
+++ libbu/vfont.c	(working copy)
@@ -95,7 +95,7 @@
 	fprintf(stderr, "vfont_get(%s):  bitmap read error\n", fname);
 	fclose(fp);
 	bu_free(vfp->vf_bits, "vfont bits");
-	bu_free((char *)vfp, "vfont");
+	bu_free((genptr_t)vfp, "vfont");
 	return VFONT_NULL;
     }
 
@@ -128,7 +128,7 @@
 vfont_free(register struct vfont *vfp)
 {
     bu_free(vfp->vf_bits, "vfont bits");
-    bu_free((char *)vfp, "vfont");
+    bu_free((genptr_t)vfp, "vfont");
 }
 
 
Index: burst/Mm.h
===================================================================
--- burst/Mm.h	(revision 54048)
+++ burst/Mm.h	(working copy)
@@ -35,9 +35,9 @@
 #include "bu.h"
 
 #define MmAllo(typ)		(typ *) bu_malloc(sizeof(typ), BU_FLSTR)
-#define MmFree(typ, ptr) bu_free((char *) ptr, BU_FLSTR)
+#define MmFree(typ, ptr) bu_free((genptr_t) ptr, BU_FLSTR)
 #define MmVAllo(ct, typ)	(typ *) bu_malloc((ct)*sizeof(typ), BU_FLSTR)
-#define MmVFree(ct, typ, ptr) bu_free((char *) ptr, BU_FLSTR)
+#define MmVFree(ct, typ, ptr) bu_free((genptr_t) ptr, BU_FLSTR)
 #define MmStrDup(str) bu_strdup(str)
 #define MmStrFree(str) bu_free(str, BU_FLSTR)
 
Index: libwdb/reg.c
===================================================================
--- libwdb/reg.c	(revision 54048)
+++ libwdb/reg.c	(working copy)
@@ -177,7 +177,7 @@
     /* rebuild the tree with GIFT semantics */
     comb->tree = (union tree *)db_mkgift_tree(tree_list, node_count, &rt_uniresource);
 
-    bu_free((char *)tree_list, "mk_tree_gift: tree_list");
+    bu_free((genptr_t)tree_list, "mk_tree_gift: tree_list");
 
     return 0;	/* OK */
 }
@@ -242,8 +242,8 @@
     while (BU_LIST_WHILE(wp, wmember, headp)) {
 	WDB_CK_WMEMBER(wp);
 	BU_LIST_DEQUEUE(&wp->l);
-	bu_free((char *)wp->wm_name, "wm_name");
-	bu_free((char *)wp, "wmember");
+	bu_free((genptr_t)wp->wm_name, "wm_name");
+	bu_free((genptr_t)wp, "wmember");
     }
 }
 
Index: libwdb/pipe.c
===================================================================
--- libwdb/pipe.c	(revision 54048)
+++ libwdb/pipe.c	(working copy)
@@ -91,7 +91,7 @@
 
     while (BU_LIST_WHILE(wp, wdb_pipept, headp)) {
 	BU_LIST_DEQUEUE(&wp->l);
-	bu_free((char *)wp, "mk_pipe_free");
+	bu_free((genptr_t)wp, "mk_pipe_free");
     }
 }
 
Index: librt/primitives/extrude/extrude.c
===================================================================
--- librt/primitives/extrude/extrude.c	(revision 54048)
+++ librt/primitives/extrude/extrude.c	(working copy)
@@ -313,9 +313,9 @@
     }
 
     if (extr->verts)
-	 bu_free((char *)extr->verts, "extrude->verts");
+	 bu_free((genptr_t)extr->verts, "extrude->verts");
     rt_curve_free(&(extr->crv));
-    bu_free((char *)extr, "extrude_specific");
+    bu_free((genptr_t)extr, "extrude_specific");
 
     return 0;              /* OK */
 }
@@ -979,10 +979,10 @@
 			V2SUB2(to_pt, intercept[j], ray_start);
 			dists[j] = V2DOT(to_pt, ray_dir_unit) / diff;
 		    }
-		    bu_free((char *)intercept, "Bezier intercept");
+		    bu_free((genptr_t)intercept, "Bezier intercept");
 		    surfno = BEZIER_SEG;
 		}
-		bu_free((char *)verts, "Bezier verts");
+		bu_free((genptr_t)verts, "Bezier verts");
 		break;
 	    case CURVE_NURB_MAGIC:
 		break;
@@ -1115,7 +1115,7 @@
 	    hit_count++;
 	}
 	if (free_dists)
-	    bu_free((char *)dists, "dists");
+	    bu_free((genptr_t)dists, "dists");
     }
 
     if (check_inout) {
@@ -1338,9 +1338,9 @@
 	(struct extrude_specific *)stp->st_specific;
 
     if (extrude->verts)
-	bu_free((char *)extrude->verts, "extrude->verts");
+	bu_free((genptr_t)extrude->verts, "extrude->verts");
     rt_curve_free(&(extrude->crv));
-    bu_free((char *)extrude, "extrude_specific");
+    bu_free((genptr_t)extrude, "extrude_specific");
 }
 
 
@@ -1599,7 +1599,7 @@
 	    } else {
 		V2MOVE(pt, tmp_pt);
 	    }
-	    bu_free((char *)eg.ctl_points, "eg.ctl_points");
+	    bu_free((genptr_t)eg.ctl_points, "eg.ctl_points");
 	    break;
 	case CURVE_BEZIER_MAGIC:
 	    bsg = (struct bezier_seg *)lng;
@@ -1608,7 +1608,7 @@
 		VMOVE_2D(V[i], skt->verts[bsg->ctl_points[i]]);
 	    }
 	    Bezier(V, bsg->degree, 0.51, NULL, NULL, pt, NULL);
-	    bu_free((char *)V, "Bezier control points");
+	    bu_free((genptr_t)V, "Bezier control points");
 	    break;
 	default:
 	    bu_bomb("Unrecognized segment type in sketch\n");
@@ -1849,10 +1849,10 @@
 		    }
 		}
 		if ((*intercept))
-		    bu_free((char *)intercept, "Bezier Intercepts");
+		    bu_free((genptr_t)intercept, "Bezier Intercepts");
 		if ((*normal))
-		    bu_free((char *)normal, "Bezier normals");
-		bu_free((char *)verts, "Bezier Ctl points");
+		    bu_free((genptr_t)normal, "Bezier normals");
+		bu_free((genptr_t)verts, "Bezier Ctl points");
 		break;
 	    default:
 		bu_log("isect_2D_loop_ray: Unrecognized curve segment type x%x\n", *lng);
@@ -1877,7 +1877,7 @@
 	ptr = ptr->next;
 	if (ptr->vert_index > -1 && ptr->vert_index == prev->vert_index) {
 	    prev->next = ptr->next;
-	    bu_free((char *)ptr, "struct loop_inter");
+	    bu_free((genptr_t)ptr, "struct loop_inter");
 	    ptr = prev;
 	}
     }
@@ -1889,7 +1889,7 @@
 	diff = fabs(ptr->dist - prev->dist);
 	if (diff < tol->dist) {
 	    prev->next = ptr->next;
-	    bu_free((char *)ptr, "struct loop_inter");
+	    bu_free((genptr_t)ptr, "struct loop_inter");
 	    ptr = prev;
 	}
     }
@@ -1984,7 +1984,7 @@
 	    }
 	}
 	ptr = ptr->next;
-	bu_free((char *)tmp, "loop intercept");
+	bu_free((genptr_t)tmp, "loop intercept");
     }
 
     return ret;
@@ -2077,16 +2077,16 @@
 		for (j=0; j<(size_t)BU_PTBL_END(&loops); j++) {
 		    aloop = (struct bu_ptbl *)BU_PTBL_GET(&loops, j);
 		    bu_ptbl_free(aloop);
-		    bu_free((char *)aloop, "aloop");
+		    bu_free((genptr_t)aloop, "aloop");
 		}
 		bu_ptbl_free(&loops);
-		bu_free((char *)used_seg, "used_seg");
+		bu_free((genptr_t)used_seg, "used_seg");
 		return -2;
 	    }
 	}
 	bu_ptbl_ins(&loops, (long *)aloop);
     }
-    bu_free((char *)used_seg, "used_seg");
+    bu_free((genptr_t)used_seg, "used_seg");
 
     /* sort the loops to find inside/outside relationships */
     containing_loops = (struct bu_ptbl **)bu_calloc(BU_PTBL_END(&loops),
@@ -2137,12 +2137,12 @@
 	for (i=0; i<(size_t)BU_PTBL_END(&loops); i++) {
 	    aloop = (struct bu_ptbl *)BU_PTBL_GET(&loops, i);
 	    bu_ptbl_free(aloop);
-	    bu_free((char *)aloop, "aloop");
+	    bu_free((genptr_t)aloop, "aloop");
 	    bu_ptbl_free(containing_loops[i]);
-	    bu_free((char *)containing_loops[i], "aloop");
+	    bu_free((genptr_t)containing_loops[i], "aloop");
 	}
 	bu_ptbl_free(&loops);
-	bu_free((char *)containing_loops, "containing_loops");
+	bu_free((genptr_t)containing_loops, "containing_loops");
     }
 
     BU_LIST_INIT(&vhead);
@@ -2188,7 +2188,7 @@
     BN_FREE_VLIST(&rt_g.rtg_vlfree, &vhead);
 
     /* make sure face normal is in correct direction */
-    bu_free((char *)verts, "verts");
+    bu_free((genptr_t)verts, "verts");
     if (nmg_calc_face_plane(fu, pl)) {
 	bu_log("Failed to calculate face plane for extrusion\n");
 	return -1;
@@ -2289,11 +2289,11 @@
  failed:
     for (i=0; i<(size_t)BU_PTBL_END(&loops); i++) {
 	bu_ptbl_free(containing_loops[i]);
-	bu_free((char *)containing_loops[i], "containing_loops[i]");
+	bu_free((genptr_t)containing_loops[i], "containing_loops[i]");
     }
-    bu_free((char *)containing_loops, "containing_loops");
+    bu_free((genptr_t)containing_loops, "containing_loops");
     bu_ptbl_free(aloop);
-    bu_free((char *)aloop, "aloop");
+    bu_free((genptr_t)aloop, "aloop");
     return -1;
 }
 
@@ -2600,7 +2600,7 @@
     extrude_ip->magic = 0;	/* sanity */
 
     bu_free(extrude_ip->sketch_name, "Extrude sketch_name");
-    bu_free((char *)extrude_ip, "extrude ifree");
+    bu_free((genptr_t)extrude_ip, "extrude ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
@@ -2771,7 +2771,7 @@
 	    extr->keypoint = atoi(argv[1]);
 	} else if (*argv[0] == 'S') {
 	    if (extr->sketch_name)
-		bu_free((char *)extr->sketch_name, "rt_extrude_tcladjust: sketch_name");
+		bu_free((genptr_t)extr->sketch_name, "rt_extrude_tcladjust: sketch_name");
 	    extr->sketch_name = bu_strdup(argv[1]);
 	}
 
Index: librt/primitives/arbn/arbn.c
===================================================================
--- librt/primitives/arbn/arbn.c	(revision 54048)
+++ librt/primitives/arbn/arbn.c	(working copy)
@@ -184,10 +184,10 @@
 	if (used[i] != 0) continue;	/* face was used */
 	bu_log("arbn(%s) face %zu unused, solid is not convex\n",
 	       stp->st_name, i);
-	bu_free((char *)used, "arbn used[]");
+	bu_free((genptr_t)used, "arbn used[]");
 	return -1;		/* BAD */
     }
-    bu_free((char *)used, "arbn used[]");
+    bu_free((genptr_t)used, "arbn used[]");
 
     stp->st_specific = (genptr_t)aip;
     ip->idb_ptr = GENPTR_NULL;	/* indicate we stole it */
@@ -382,8 +382,8 @@
     struct rt_arbn_internal *aip =
 	(struct rt_arbn_internal *)stp->st_specific;
 
-    bu_free((char *)aip->eqn, "rt_arbn_internal eqn[]");
-    bu_free((char *)aip, "rt_arbn_internal");
+    bu_free((genptr_t)aip->eqn, "rt_arbn_internal eqn[]");
+    bu_free((genptr_t)aip, "rt_arbn_internal");
 }
 
 
@@ -779,24 +779,24 @@
 	nmg_vertex_gv(*pts[i].vp, pts[i].pt);
     }
 
-    bu_free((char *)pts, "rt_arbn_tess: pts");
-    bu_free((char *)edges, "rt_arbn_tess: edges");
-    bu_free((char *)edge_count, "rt_arbn_tess: edge_count");
-    bu_free((char *)verts, "rt_arbn_tess: verts");
-    bu_free((char *)loop_verts, "rt_arbn_tess: loop_verts");
+    bu_free((genptr_t)pts, "rt_arbn_tess: pts");
+    bu_free((genptr_t)edges, "rt_arbn_tess: edges");
+    bu_free((genptr_t)edge_count, "rt_arbn_tess: edge_count");
+    bu_free((genptr_t)verts, "rt_arbn_tess: verts");
+    bu_free((genptr_t)loop_verts, "rt_arbn_tess: loop_verts");
 
     /* Associate face geometry */
     for (i=0; i<face_count; i++) {
 	if (nmg_fu_planeeqn(fu[i], tol)) {
 	    bu_log("Failed to calculate face plane equation\n");
-	    bu_free((char *)fu, "rt_arbn_tess: fu");
+	    bu_free((genptr_t)fu, "rt_arbn_tess: fu");
 	    nmg_kr(*r);
 	    *r = (struct nmgregion *)NULL;
 	    return -1;
 	}
     }
 
-    bu_free((char *)fu, "rt_arbn_tess: fu");
+    bu_free((genptr_t)fu, "rt_arbn_tess: fu");
 
     nmg_fix_normals(s, tol);
 
@@ -808,10 +808,10 @@
     return 0;
 
 fail:
-    bu_free((char *)pts, "rt_arbn_tess: pts");
-    bu_free((char *)edges, "rt_arbn_tess: edges");
-    bu_free((char *)edge_count, "rt_arbn_tess: edge_count");
-    bu_free((char *)verts, "rt_arbn_tess: verts");
+    bu_free((genptr_t)pts, "rt_arbn_tess: pts");
+    bu_free((genptr_t)edges, "rt_arbn_tess: edges");
+    bu_free((genptr_t)edge_count, "rt_arbn_tess: edge_count");
+    bu_free((genptr_t)verts, "rt_arbn_tess: verts");
     return -1;
 }
 
@@ -947,7 +947,7 @@
 
     htond((unsigned char *)&rec[1], (unsigned char *)sbuf, aip->neqn * ELEMENTS_PER_PLANE);
 
-    bu_free((char *)sbuf, "arbn temp");
+    bu_free((genptr_t)sbuf, "arbn temp");
     return 0;			/* OK */
 }
 
@@ -1075,7 +1075,7 @@
     /* Convert from internal (host) to database (network) format */
     htond((unsigned char *)ep->ext_buf + SIZEOF_NETWORK_LONG, (unsigned char *)vec, double_count);
 
-    bu_free((char *)vec, "arbn temp");
+    bu_free((genptr_t)vec, "arbn temp");
     return 0;			/* OK */
 }
 
@@ -1129,8 +1129,8 @@
     RT_ARBN_CK_MAGIC(aip);
 
     if (aip->neqn > 0)
-	bu_free((char *)aip->eqn, "rt_arbn_internal eqn[]");
-    bu_free((char *)aip, "rt_arbn_internal");
+	bu_free((genptr_t)aip->eqn, "rt_arbn_internal eqn[]");
+    bu_free((genptr_t)aip, "rt_arbn_internal");
 
     ip->idb_ptr = (genptr_t)0;	/* sanity */
 }
@@ -1255,11 +1255,11 @@
 		bu_vls_printf(logstr,
 			      "ERROR: Incorrect number of plane coefficients\n");
 		if (len)
-		    bu_free((char *)new_planes, "new_planes");
+		    bu_free((genptr_t)new_planes, "new_planes");
 		return BRLCAD_ERROR;
 	    }
 	    if (arbn->eqn)
-		bu_free((char *)arbn->eqn, "arbn->eqn");
+		bu_free((genptr_t)arbn->eqn, "arbn->eqn");
 	    arbn->eqn = (plane_t *)new_planes;
 	    arbn->neqn = (size_t)len / ELEMENTS_PER_PLANE;
 	    for (i=0; i<arbn->neqn; i++)
Index: librt/primitives/revolve/revolve.c
===================================================================
--- librt/primitives/revolve/revolve.c	(revision 54048)
+++ librt/primitives/revolve/revolve.c	(working copy)
@@ -1183,7 +1183,7 @@
     struct revolve_specific *revolve =
 	(struct revolve_specific *)stp->st_specific;
     bu_free(revolve->ends, "endcount");
-    bu_free((char *)revolve, "revolve_specific");
+    bu_free((genptr_t)revolve, "revolve_specific");
 }
 
 
@@ -1723,7 +1723,7 @@
     else
 	bu_log("Freeing bogus revolve, VLS string not initialized\n");
 
-    bu_free((char *)revolve_ip, "revolve ifree");
+    bu_free((genptr_t)revolve_ip, "revolve ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/poly/poly.c
===================================================================
--- librt/primitives/poly/poly.c	(revision 54048)
+++ librt/primitives/poly/poly.c	(working copy)
@@ -181,7 +181,7 @@
     m4 = MAGNITUDE(trip->tri_wn);
     if (m1 < tol->dist || m2 < tol->dist ||
 	m3 < tol->dist || m4 < tol->dist) {
-	bu_free((char *)trip, "getstruct tri_specific");
+	bu_free((genptr_t)trip, "getstruct tri_specific");
 	if (RT_G_DEBUG & DEBUG_ARB8)
 	    bu_log("pg(%s): degenerate facet\n", stp->st_name);
 	return 0;			/* BAD */
@@ -463,7 +463,7 @@
     while (trip != TRI_NULL) {
 	struct tri_specific *nexttri = trip->tri_forw;
 
-	bu_free((char *)trip, "pg tri_specific");
+	bu_free((genptr_t)trip, "pg tri_specific");
 	trip = nexttri;
     }
 }
@@ -653,8 +653,8 @@
 	/* Associate face geometry */
 	if (nmg_calc_face_g(fu)) {
 	    nmg_pr_fu_briefly(fu, "");
-	    bu_free((char *)verts, "pg_tess verts[]");
-	    bu_free((char *)vertp, "pg_tess vertp[]");
+	    bu_free((genptr_t)verts, "pg_tess verts[]");
+	    bu_free((genptr_t)vertp, "pg_tess vertp[]");
 	    return -1;			/* FAIL */
 	}
     }
@@ -666,8 +666,8 @@
      * Don't depend on them here.
      */
     nmg_fix_normals(s, tol);
-    bu_free((char *)verts, "pg_tess verts[]");
-    bu_free((char *)vertp, "pg_tess vertp[]");
+    bu_free((genptr_t)verts, "pg_tess verts[]");
+    bu_free((genptr_t)vertp, "pg_tess vertp[]");
 
     return 0;		/* OK */
 }
@@ -923,14 +923,14 @@
      * Free storage for each polygon
      */
     for (i=0; i < pgp->npoly; i++) {
-	bu_free((char *)pgp->poly[i].verts, "pg verts[]");
-	bu_free((char *)pgp->poly[i].norms, "pg norms[]");
+	bu_free((genptr_t)pgp->poly[i].verts, "pg verts[]");
+	bu_free((genptr_t)pgp->poly[i].norms, "pg norms[]");
     }
     if (pgp->npoly)
-	bu_free((char *)pgp->poly, "pg poly[]");
+	bu_free((genptr_t)pgp->poly, "pg poly[]");
     pgp->magic = 0;			/* sanity */
     pgp->npoly = 0;
-    bu_free((char *)pgp, "pg ifree");
+    bu_free((genptr_t)pgp, "pg ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 /**
Index: librt/primitives/poly/poly_mirror.c
===================================================================
--- librt/primitives/poly/poly_mirror.c	(revision 54048)
+++ librt/primitives/poly/poly_mirror.c	(working copy)
@@ -121,8 +121,8 @@
 	}
     }
 
-    bu_free((char *)verts, "rt_mirror: verts");
-    bu_free((char *)norms, "rt_mirror: norms");
+    bu_free((genptr_t)verts, "rt_mirror: verts");
+    bu_free((genptr_t)norms, "rt_mirror: norms");
 
     return 0;
 }
Index: librt/primitives/rpc/rpc.c
===================================================================
--- librt/primitives/rpc/rpc.c	(revision 54048)
+++ librt/primitives/rpc/rpc.c	(working copy)
@@ -644,7 +644,7 @@
     struct rpc_specific *rpc =
 	(struct rpc_specific *)stp->st_specific;
 
-    bu_free((char *)rpc, "rpc_specific");
+    bu_free((genptr_t)rpc, "rpc_specific");
 }
 
 
@@ -997,7 +997,7 @@
 	i += 3;
 	old = pos;
 	pos = pos->next;
-	bu_free((char *)old, "rt_pt_node");
+	bu_free((genptr_t)old, "rt_pt_node");
     }
 
     /* Draw the front */
@@ -1019,8 +1019,8 @@
 	RT_ADD_VLIST(vhead, &back[i*ELEMENTS_PER_VECT], BN_VLIST_LINE_DRAW);
     }
 
-    bu_free((char *)front, "fastf_t");
-    bu_free((char *)back,  "fastf_t");
+    bu_free((genptr_t)front, "fastf_t");
+    bu_free((genptr_t)back,  "fastf_t");
 
     return 0;
 }
@@ -1196,7 +1196,7 @@
 	j++;
 	old = pos;
 	pos = pos->next;
-	bu_free((char *)old, "rt_pt_node");
+	bu_free((genptr_t)old, "rt_pt_node");
     }
 
     *r = nmg_mrsv(m);	/* Make region, empty shell, vertex */
@@ -1253,8 +1253,8 @@
     for (i=0; i < n+2; i++) {
 	if (nmg_fu_planeeqn(outfaceuses[i], tol) < 0) {
 	    /* free mem */
-	    bu_free((char *)front, "fastf_t");
-	    bu_free((char *)back, "fastf_t");
+	    bu_free((genptr_t)front, "fastf_t");
+	    bu_free((genptr_t)back, "fastf_t");
 	    bu_free((char*)vfront, "vertex *");
 	    bu_free((char*)vback, "vertex *");
 	    bu_free((char*)vtemp, "vertex *");
@@ -1314,8 +1314,8 @@
     nmg_region_a(*r, tol);
 
     /* free mem */
-    bu_free((char *)front, "fastf_t");
-    bu_free((char *)back, "fastf_t");
+    bu_free((genptr_t)front, "fastf_t");
+    bu_free((genptr_t)back, "fastf_t");
     bu_free((char*)vfront, "vertex *");
     bu_free((char*)vback, "vertex *");
     bu_free((char*)vtemp, "vertex *");
@@ -1383,7 +1383,7 @@
 
     if (xip->rpc_r <= SMALL_FASTF) {
 	bu_log("rt_rpc_import4: r is zero\n");
-	bu_free((char *)ip->idb_ptr, "rt_rpc_import4: ip->idp_ptr");
+	bu_free((genptr_t)ip->idb_ptr, "rt_rpc_import4: ip->idp_ptr");
 	return -1;
     }
 
@@ -1482,7 +1482,7 @@
 
     if (xip->rpc_r <= SMALL_FASTF) {
 	bu_log("rt_rpc_import4: r is zero\n");
-	bu_free((char *)ip->idb_ptr, "rt_rpc_import4: ip->idp_ptr");
+	bu_free((genptr_t)ip->idb_ptr, "rt_rpc_import4: ip->idp_ptr");
 	return -1;
     }
 
@@ -1605,7 +1605,7 @@
     RT_RPC_CK_MAGIC(xip);
     xip->rpc_magic = 0;		/* sanity */
 
-    bu_free((char *)xip, "rpc ifree");
+    bu_free((genptr_t)xip, "rpc ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/ars/ars_mirror.c
===================================================================
--- librt/primitives/ars/ars_mirror.c	(revision 54048)
+++ librt/primitives/ars/ars_mirror.c	(working copy)
@@ -110,7 +110,7 @@
 	memcpy(ars->curves[i], tmp_curve, ars->pts_per_curve*3*sizeof(fastf_t));
     }
 
-    bu_free((char *)tmp_curve, "rt_mirror: tmp_curve");
+    bu_free((genptr_t)tmp_curve, "rt_mirror: tmp_curve");
 
     return 0;
 }
Index: librt/primitives/ars/ars.c
===================================================================
--- librt/primitives/ars/ars.c	(revision 54048)
+++ librt/primitives/ars/ars.c	(working copy)
@@ -479,12 +479,12 @@
      * Free storage for faces
      */
     for (i = 0; i < arip->ncurves; i++) {
-	bu_free((char *)arip->curves[i], "ars curve");
+	bu_free((genptr_t)arip->curves[i], "ars curve");
     }
-    bu_free((char *)arip->curves, "ars curve ptrs");
+    bu_free((genptr_t)arip->curves, "ars curve ptrs");
     arip->magic = 0;		/* sanity */
     arip->ncurves = 0;
-    bu_free((char *)arip, "ars ifree");
+    bu_free((genptr_t)arip, "ars ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
@@ -638,7 +638,7 @@
 	}
     }
 
-    bu_free((char *)verts, "rt_ars_tess *verts[]");
+    bu_free((genptr_t)verts, "rt_ars_tess *verts[]");
 
     /* kill any degenerate faces that may have been created */
     for (i=0; i<(size_t)BU_PTBL_END(&kill_fus); i++) {
@@ -1215,7 +1215,7 @@
 	    i = atoi(argv[1]);
 	    if (i < ars->ncurves) {
 		for (j=i; j<ars->ncurves; j++)
-		    bu_free((char *)ars->curves[j], "ars->curves[j]");
+		    bu_free((genptr_t)ars->curves[j], "ars->curves[j]");
 		ars->curves = (fastf_t **)bu_realloc(ars->curves,
 						     i*sizeof(fastf_t *), "ars->curves");
 		ars->ncurves = i;
Index: librt/primitives/ehy/ehy.c
===================================================================
--- librt/primitives/ehy/ehy.c	(revision 54048)
+++ librt/primitives/ehy/ehy.c	(working copy)
@@ -659,7 +659,7 @@
 	(struct ehy_specific *)stp->st_specific;
 
 
-    bu_free((char *)ehy, "ehy_specific");
+    bu_free((genptr_t)ehy, "ehy_specific");
 }
 
 
@@ -1050,7 +1050,7 @@
 
 	    /* get next node before freeing */
 	    next = pos_b->next;
-	    bu_free((char *)pos_b, "rt_pt_node");
+	    bu_free((genptr_t)pos_b, "rt_pt_node");
 	    pos_b = next;
 	}
 	/* construct hyperbola along semi-major axis of ehy using same
@@ -1172,10 +1172,10 @@
 
     /* free mem */
     for (i = 0; i < nell; i++) {
-	bu_free((char *)ellipses[i], "pts ell");
+	bu_free((genptr_t)ellipses[i], "pts ell");
     }
-    bu_free((char *)ellipses, "fastf_t ell[]");
-    bu_free((char *)pts_dbl, "dbl ints");
+    bu_free((genptr_t)ellipses, "fastf_t ell[]");
+    bu_free((genptr_t)pts_dbl, "dbl ints");
 
     return 0;
 }
@@ -1325,7 +1325,7 @@
 	    struct rt_pt_node *tmp;
 
 	    tmp = pos_b->next;
-	    bu_free((char *)pos_b, "rt_pt_node");
+	    bu_free((genptr_t)pos_b, "rt_pt_node");
 	    pos_b = tmp;
 	}
 	/* construct hyperbola along semi-major axis of ehy using same
@@ -1575,13 +1575,13 @@
     nmg_shell_coplanar_face_merge(s, tol, 1);
 
     /* free mem */
-    bu_free((char *)outfaceuses, "faceuse []");
+    bu_free((genptr_t)outfaceuses, "faceuse []");
     for (i = 0; i < nell; i++) {
-	bu_free((char *)ellipses[i], "pts ell");
-	bu_free((char *)vells[i], "vertex []");
+	bu_free((genptr_t)ellipses[i], "pts ell");
+	bu_free((genptr_t)vells[i], "vertex []");
     }
-    bu_free((char *)ellipses, "fastf_t ell[]");
-    bu_free((char *)vells, "vertex [][]");
+    bu_free((genptr_t)ellipses, "fastf_t ell[]");
+    bu_free((genptr_t)vells, "vertex [][]");
 
     /* Assign vertexuse normals */
     nmg_vertex_tabulate(&vert_tab, &s->l.magic);
@@ -1627,13 +1627,13 @@
 
  fail:
     /* free mem */
-    bu_free((char *)outfaceuses, "faceuse []");
+    bu_free((genptr_t)outfaceuses, "faceuse []");
     for (i = 0; i < nell; i++) {
-	bu_free((char *)ellipses[i], "pts ell");
-	bu_free((char *)vells[i], "vertex []");
+	bu_free((genptr_t)ellipses[i], "pts ell");
+	bu_free((genptr_t)vells[i], "vertex []");
     }
-    bu_free((char *)ellipses, "fastf_t ell[]");
-    bu_free((char *)vells, "vertex [][]");
+    bu_free((genptr_t)ellipses, "fastf_t ell[]");
+    bu_free((genptr_t)vells, "vertex [][]");
 
     return -1;
 }
@@ -1705,7 +1705,7 @@
 
     if (xip->ehy_r1 <= SMALL_FASTF || xip->ehy_r2 <= SMALL_FASTF || xip->ehy_c <= SMALL_FASTF) {
 	bu_log("rt_ehy_import4: r1, r2, or c are zero\n");
-	bu_free((char *)ip->idb_ptr, "rt_ehy_import4: ip->idb_ptr");
+	bu_free((genptr_t)ip->idb_ptr, "rt_ehy_import4: ip->idb_ptr");
 	return -1;
     }
 
@@ -1818,7 +1818,7 @@
 
     if (xip->ehy_r1 <= SMALL_FASTF || xip->ehy_r2 <= SMALL_FASTF || xip->ehy_c <= SMALL_FASTF) {
 	bu_log("rt_ehy_import5: r1, r2, or c are zero\n");
-	bu_free((char *)ip->idb_ptr, "rt_ehy_import5: ip->idb_ptr");
+	bu_free((genptr_t)ip->idb_ptr, "rt_ehy_import5: ip->idb_ptr");
 	return -1;
     }
 
@@ -1951,7 +1951,7 @@
     RT_EHY_CK_MAGIC(xip);
     xip->ehy_magic = 0;		/* sanity */
 
-    bu_free((char *)xip, "ehy ifree");
+    bu_free((genptr_t)xip, "ehy ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/eto/eto.c
===================================================================
--- librt/primitives/eto/eto.c	(revision 54048)
+++ librt/primitives/eto/eto.c	(working copy)
@@ -732,7 +732,7 @@
     struct eto_specific *eto =
 	(struct eto_specific *)stp->st_specific;
 
-    bu_free((char *)eto, "eto_specific");
+    bu_free((genptr_t)eto, "eto_specific");
 }
 
 
@@ -831,7 +831,7 @@
 	VMOVE(ell[i], pos->p);
 	oldpos = pos;
 	pos = pos->next;
-	bu_free((char *)oldpos, "rt_pt_node");
+	bu_free((genptr_t)oldpos, "rt_pt_node");
     }
     /* mirror 1st quad to make 2nd */
     for (i = (*n+1)+1; i < 2*(*n+1); i++) {
@@ -1131,7 +1131,7 @@
 	    RT_ADD_VLIST(vhead, ETO_PTA(j, i), BN_VLIST_LINE_DRAW);
     }
 
-    bu_free((char *)eto_ells, "ells[]");
+    bu_free((genptr_t)eto_ells, "ells[]");
     return 0;
 }
 
@@ -1306,11 +1306,11 @@
     nmg_region_a(*r, tol);
 
  failure:
-    bu_free((char *)ell, "make_ellipse pts");
-    bu_free((char *)eto_ells, "ells[]");
-    bu_free((char *)verts, "rt_eto_tess *verts[]");
-    bu_free((char *)faces, "rt_eto_tess *faces[]");
-    bu_free((char *)norms, "rt_eto_tess: norms[]");
+    bu_free((genptr_t)ell, "make_ellipse pts");
+    bu_free((genptr_t)eto_ells, "ells[]");
+    bu_free((genptr_t)verts, "rt_eto_tess *verts[]");
+    bu_free((genptr_t)faces, "rt_eto_tess *faces[]");
+    bu_free((genptr_t)norms, "rt_eto_tess: norms[]");
 
     return fail;
 }
@@ -1576,7 +1576,7 @@
     tip = (struct rt_eto_internal *)ip->idb_ptr;
     RT_ETO_CK_MAGIC(tip);
 
-    bu_free((char *)tip, "eto ifree");
+    bu_free((genptr_t)tip, "eto ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/sph/sph.c
===================================================================
--- librt/primitives/sph/sph.c	(revision 54048)
+++ librt/primitives/sph/sph.c	(working copy)
@@ -406,7 +406,7 @@
     register struct sph_specific *sph =
 	(struct sph_specific *)stp->st_specific;
 
-    bu_free((char *)sph, "sph_specific");
+    bu_free((genptr_t)sph, "sph_specific");
 }
 
 
Index: librt/primitives/cline/cline.c
===================================================================
--- librt/primitives/cline/cline.c	(revision 54048)
+++ librt/primitives/cline/cline.c	(working copy)
@@ -441,7 +441,7 @@
 
     if (stp) RT_CK_SOLTAB(stp);
 
-    bu_free((char *)cline, "cline_specific");
+    bu_free((genptr_t)cline, "cline_specific");
 }
 
 
@@ -791,11 +791,11 @@
 	}
     }
 
-    bu_free((char *)base_outer, "base outer vertices");
-    bu_free((char *)top_outer, "top outer vertices");
+    bu_free((genptr_t)base_outer, "base outer vertices");
+    bu_free((genptr_t)top_outer, "top outer vertices");
     if (cline_ip->thickness > 0.0 && cline_ip->thickness < cline_ip->radius) {
-	bu_free((char *)base_inner, "base inner vertices");
-	bu_free((char *)top_inner, "top inner vertices");
+	bu_free((genptr_t)base_inner, "base inner vertices");
+	bu_free((genptr_t)top_inner, "top inner vertices");
     }
 
     /* Associate face plane equations */
@@ -1043,7 +1043,7 @@
     RT_CLINE_CK_MAGIC(cline_ip);
     cline_ip->magic = 0;			/* sanity */
 
-    bu_free((char *)cline_ip, "cline ifree");
+    bu_free((genptr_t)cline_ip, "cline ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/superell/superell.c
===================================================================
--- librt/primitives/superell/superell.c	(revision 54048)
+++ librt/primitives/superell/superell.c	(working copy)
@@ -641,7 +641,7 @@
     struct superell_specific *superell =
 	(struct superell_specific *)stp->st_specific;
 
-    bu_free((char *)superell, "superell_specific");
+    bu_free((genptr_t)superell, "superell_specific");
 }
 
 
Index: librt/primitives/arb8/arb8.c
===================================================================
--- librt/primitives/arb8/arb8.c	(revision 54048)
+++ librt/primitives/arb8/arb8.c	(working copy)
@@ -1115,8 +1115,8 @@
 	(struct arb_specific *)stp->st_specific;
 
     if (arbp->arb_opt)
-	bu_free((char *)arbp->arb_opt, "arb_opt");
-    bu_free((char *)arbp, "arb_specific");
+	bu_free((genptr_t)arbp->arb_opt, "arb_opt");
+    bu_free((genptr_t)arbp, "arb_specific");
 }
 
 #define ARB_FACE(vlist_head, arb_pts, a, b, c, d) \
Index: librt/primitives/bspline/nurb_reverse.c
===================================================================
--- librt/primitives/bspline/nurb_reverse.c	(revision 54048)
+++ librt/primitives/bspline/nurb_reverse.c	(working copy)
@@ -79,7 +79,7 @@
     srf->u.knots = srf->v.knots;
     srf->v.knots = p_ptr;
 
-    bu_free((char *) tmp, "temporary storage for transpose");
+    bu_free((genptr_t) tmp, "temporary storage for transpose");
 }
 
 
Index: librt/primitives/bspline/nurb_knot.c
===================================================================
--- librt/primitives/bspline/nurb_knot.c	(revision 54048)
+++ librt/primitives/bspline/nurb_knot.c	(working copy)
@@ -108,7 +108,7 @@
     rt_nurb_kvmerge(new_kv, &check, kv, res);
 
     /* free up old knot values */
-    bu_free((char *)check.knots, "rt_nurb_kvmult:check knots");
+    bu_free((genptr_t)check.knots, "rt_nurb_kvmult:check knots");
 }
 
 
Index: librt/primitives/bspline/nurb_util.c
===================================================================
--- librt/primitives/bspline/nurb_util.c	(revision 54048)
+++ librt/primitives/bspline/nurb_util.c	(working copy)
@@ -113,9 +113,9 @@
 
     if (res) RT_CK_RESOURCE(res);
 
-    bu_free((char *)srf->u.knots, "rt_nurb_clean_snurb() u.knots");
-    bu_free((char *)srf->v.knots, "rt_nurb_free_snurb() v.knots");
-    bu_free((char *)srf->ctl_points, "rt_nurb_free_snurb() ctl_points");
+    bu_free((genptr_t)srf->u.knots, "rt_nurb_clean_snurb() u.knots");
+    bu_free((genptr_t)srf->v.knots, "rt_nurb_free_snurb() v.knots");
+    bu_free((genptr_t)srf->ctl_points, "rt_nurb_free_snurb() ctl_points");
 
     /* Invalidate the structure */
     srf->u.knots = (fastf_t *)NULL;
@@ -140,12 +140,12 @@
      * deleted.
      */
 
-    bu_free((char *)srf->u.knots, "rt_nurb_free_snurb: u kv knots");
-    bu_free((char *)srf->v.knots, "rt_nurb_free_snurb: v kv knots");
-    bu_free((char *)srf->ctl_points, "rt_nurb_free_snurb: mesh points");
+    bu_free((genptr_t)srf->u.knots, "rt_nurb_free_snurb: u kv knots");
+    bu_free((genptr_t)srf->v.knots, "rt_nurb_free_snurb: v kv knots");
+    bu_free((genptr_t)srf->ctl_points, "rt_nurb_free_snurb: mesh points");
 
     srf->l.magic = 0;
-    bu_free((char *)srf, "rt_nurb_free_snurb: snurb struct");
+    bu_free((genptr_t)srf, "rt_nurb_free_snurb: snurb struct");
 }
 
 
Index: librt/primitives/bspline/nurb_xsplit.c
===================================================================
--- librt/primitives/bspline/nurb_xsplit.c	(revision 54048)
+++ librt/primitives/bspline/nurb_xsplit.c	(working copy)
@@ -204,7 +204,7 @@
 
     BU_LIST_APPEND(&srf1->l, &srf2->l);
 
-    bu_free((char *) new_kv.knots, "rt_nurb_s_xsplit: new_kv.knots");
+    bu_free((genptr_t) new_kv.knots, "rt_nurb_s_xsplit: new_kv.knots");
 
     rt_nurb_free_oslo(oslo, (struct resource *)NULL);
 
@@ -271,7 +271,7 @@
 
     rt_nurb_free_oslo(oslo, (struct resource *)NULL);
 
-    bu_free((char *) new_kv.knots, "rt_nurb_c_xsplit: new_kv.knots");
+    bu_free((genptr_t) new_kv.knots, "rt_nurb_c_xsplit: new_kv.knots");
 
     BU_LIST_APPEND(&crv1->l, &crv2->l);
     return crv1;
Index: librt/primitives/bspline/nurb_flat.c
===================================================================
--- librt/primitives/bspline/nurb_flat.c	(revision 54048)
+++ librt/primitives/bspline/nurb_flat.c	(working copy)
@@ -90,7 +90,7 @@
 	max_row_dist = FMAX(max_row_dist, rdist);
     }
 
-    bu_free((char *)crv, "rt_nurb_s_flat: crv");
+    bu_free((genptr_t)crv, "rt_nurb_s_flat: crv");
 
     crv = (fastf_t *) bu_malloc(sizeof(fastf_t) *
 				RT_NURB_EXTRACT_COORDS(srf->pt_type) *
@@ -114,7 +114,7 @@
 	max_col_dist = FMAX(max_col_dist, rdist);
     }
 
-    bu_free((char *)crv, "rt_nurb_s_flat: crv");
+    bu_free((genptr_t)crv, "rt_nurb_s_flat: crv");
 
     max_dist = FMAX(max_row_dist, max_col_dist);
 
Index: librt/primitives/bspline/nurb_eval.c
===================================================================
--- librt/primitives/bspline/nurb_eval.c	(revision 54048)
+++ librt/primitives/bspline/nurb_eval.c	(working copy)
@@ -102,7 +102,7 @@
 	c_ptr += coords;
     }
 
-    bu_free((char *)curves, "rt_nurb_s_eval: curves");
+    bu_free((genptr_t)curves, "rt_nurb_s_eval: curves");
 
     k_index = rt_nurb_knot_index(&srf->v, v, srf->order[RT_NURB_SPLIT_COL]);
     if (k_index < 0) {
@@ -154,7 +154,7 @@
     for (i = 0; i < coords; i++)
 	final_value[i] = ev_pt[i];
 
-    bu_free((char *) pnts, "rt_nurb_c_eval");
+    bu_free((genptr_t) pnts, "rt_nurb_c_eval");
 }
 
 
Index: librt/primitives/bspline/nurb_solve.c
===================================================================
--- librt/primitives/bspline/nurb_solve.c	(revision 54048)
+++ librt/primitives/bspline/nurb_solve.c	(working copy)
@@ -198,9 +198,9 @@
 	}
 
     }
-    bu_free((char *)d, "rt_nurb_doolittle:d");		/* Free up the storage. */
-    bu_free((char *)s, "rt_nurb_doolittle:s");
-    bu_free((char *)ds, "rt_nurb_doolittle:ds");
+    bu_free((genptr_t)d, "rt_nurb_doolittle:d");		/* Free up the storage. */
+    bu_free((genptr_t)s, "rt_nurb_doolittle:s");
+    bu_free((genptr_t)ds, "rt_nurb_doolittle:ds");
 }
 
 
Index: librt/primitives/bspline/nurb_split.c
===================================================================
--- librt/primitives/bspline/nurb_split.c	(revision 54048)
+++ librt/primitives/bspline/nurb_split.c	(working copy)
@@ -235,7 +235,7 @@
     BU_LIST_APPEND(split_hd, &srf1->l);
 
     rt_nurb_free_oslo(oslo, res);
-    bu_free((char *)new_kv.knots, "rt_nurb_s_split: new kv knots");
+    bu_free((genptr_t)new_kv.knots, "rt_nurb_s_split: new kv knots");
 
 }
 
@@ -320,7 +320,7 @@
 
     rt_nurb_free_oslo(oslo, (struct resource *)NULL);
 
-    bu_free((char *) new_kv.knots, "rt_nurb_c_split; new_kv.knots");
+    bu_free((genptr_t) new_kv.knots, "rt_nurb_c_split; new_kv.knots");
 
     /* Arrangement will be:  head, crv1, crv2 */
     BU_LIST_APPEND(split_hd, &crv2->l);
Index: librt/primitives/bspline/bspline_mirror.c
===================================================================
--- librt/primitives/bspline/bspline_mirror.c	(revision 54048)
+++ librt/primitives/bspline/bspline_mirror.c	(working copy)
@@ -137,7 +137,7 @@
 	}
 
 	/* free old mesh */
-	bu_free((char *)nurb->srfs[i]->ctl_points, "rt_mirror: ctl points");
+	bu_free((genptr_t)nurb->srfs[i]->ctl_points, "rt_mirror: ctl points");
 
 	/* put new mesh in place */
 	nurb->srfs[i]->ctl_points = ptr;
Index: librt/primitives/bspline/nurb_interp.c
===================================================================
--- librt/primitives/bspline/nurb_interp.c	(revision 54048)
+++ librt/primitives/bspline/nurb_interp.c	(working copy)
@@ -128,9 +128,9 @@
 
     /* Free up node and interp_mat storage */
 
-    bu_free((char *) interp_mat, "rt_nurb_cinterp: interp_mat");
-    bu_free((char *) nodes, "rt_nurb_cinterp: nodes");
-    bu_free((char *) local_data, "rt_nurb_cinterp() local_data[]");
+    bu_free((genptr_t) interp_mat, "rt_nurb_cinterp: interp_mat");
+    bu_free((genptr_t) nodes, "rt_nurb_cinterp: nodes");
+    bu_free((genptr_t) local_data, "rt_nurb_cinterp() local_data[]");
 
     /* All done, The resulting crv now interpolates the data */
 }
@@ -224,8 +224,8 @@
     for (y = 0; y < ymax; y++) {
 	rt_nurb_clean_cnurb(&crv[y]);
     }
-    bu_free((char *)crv, "crv[]");
-    bu_free((char *)tmp, "tmp[]");
+    bu_free((genptr_t)crv, "crv[]");
+    bu_free((genptr_t)tmp, "tmp[]");
 }
 
 
Index: librt/primitives/bspline/bspline.cpp
===================================================================
--- librt/primitives/bspline/bspline.cpp	(revision 54048)
+++ librt/primitives/bspline/bspline.cpp	(working copy)
@@ -181,7 +181,7 @@
 	    rt_nurb_free_snurb(s, (struct resource *)NULL);
 	}
 	rt_nurb_free_snurb(nurbs->srf, (struct resource *)NULL);	/* original surf */
-	bu_free((char *)nurbs, "nurb_specific");
+	bu_free((genptr_t)nurbs, "nurb_specific");
     }
 
     return 0;
@@ -406,7 +406,7 @@
 
 		o = hp;
 		hp = hp->next;
-		bu_free((char *)o,
+		bu_free((genptr_t)o,
 			"rt_nurb_shot:rt_nurb_uv_hit structure");
 
 		rt_nurb_add_hit(&hit_list, hit, tol);
@@ -449,7 +449,7 @@
 	    segp->seg_out.hit_vpriv[0] = h2->hit_uv[0];
 	    segp->seg_out.hit_vpriv[1] = h2->hit_uv[1];
 	    segp->seg_out.hit_private = h2->hit_private;
-	    bu_free((char *)h2, "rt_nurb_shot: nurb hit");
+	    bu_free((genptr_t)h2, "rt_nurb_shot: nurb hit");
 	    hit_num++;
 	} else {
 	    segp->seg_out.hit_dist = h1->hit_dist + .01;
@@ -461,7 +461,7 @@
 	    segp->seg_out.hit_private = h1->hit_private;
 	}
 
-	bu_free((char *)h1, "rt_nurb_shot:nurb hit");
+	bu_free((genptr_t)h1, "rt_nurb_shot:nurb hit");
 
 	BU_LIST_INSERT(&(seghead->l), &(segp->l));
     }
@@ -590,7 +590,7 @@
 	    rt_nurb_free_snurb(s, (struct resource *)NULL);
 	}
 	rt_nurb_free_snurb(nurb->srf, (struct resource *)NULL);	/* original surf */
-	bu_free((char *)nurb, "nurb_specific");
+	bu_free((genptr_t)nurb, "nurb_specific");
     }
     return;
 #endif /* CONVERT_TO_BREP */
@@ -715,8 +715,8 @@
 	if (refined_row) {
 	    rt_nurb_free_snurb(c, (struct resource *)NULL);
 	}
-	bu_free((char *) tkv1.knots, "rt_nurb_plot:tkv1>knots");
-	bu_free((char *) tkv2.knots, "rt_nurb_plot:tkv2.knots");
+	bu_free((genptr_t) tkv1.knots, "rt_nurb_plot:tkv1>knots");
+	bu_free((genptr_t) tkv2.knots, "rt_nurb_plot:tkv2.knots");
     }
 #endif
 
@@ -1416,7 +1416,7 @@
 	    if (nurb->srfs) {
 		for (i=0; i<nurb->nsrf; i++)
 		    rt_nurb_free_snurb(nurb->srfs[i], NULL);
-		bu_free((char *)nurb->srfs, "nurb surfaces");
+		bu_free((genptr_t)nurb->srfs, "nurb surfaces");
 	    }
 	    nurb->nsrf = atoi(argv[1]);
 	    nurb->srfs = (struct face_g_snurb **) bu_calloc(
@@ -1475,14 +1475,14 @@
 			    s_size[0], s_size[1],
 			    pt_type, (struct resource *)NULL);
 			srf = nurb->srfs[srf_no];
-			bu_free((char *)order, "order");
-			bu_free((char *)s_size, "s_size");
+			bu_free((genptr_t)order, "order");
+			bu_free((genptr_t)s_size, "s_size");
 			(void)memcpy(srf->u.knots, u_pts,
 				     srf->u.k_size * sizeof(fastf_t));
 			(void)memcpy(srf->v.knots, v_pts,
 				     srf->v.k_size * sizeof(fastf_t));
-			bu_free((char *)u_pts, "u_pts");
-			bu_free((char *)v_pts, "v_pts");
+			bu_free((genptr_t)u_pts, "u_pts");
+			bu_free((genptr_t)v_pts, "v_pts");
 			tmp_len = srf->s_size[0] * srf->s_size[1] *
 			    RT_NURB_EXTRACT_COORDS(srf->pt_type);
 			tmp2 = tmp_len;
Index: librt/primitives/hf/hf.c
===================================================================
--- librt/primitives/hf/hf.c	(revision 54048)
+++ librt/primitives/hf/hf.c	(working copy)
@@ -1657,7 +1657,7 @@
 	bu_close_mapped_file(hf->hf_mp);
 	hf->hf_mp = (struct bu_mapped_file *)0;
     }
-    bu_free((char *)hf, "hf_specific");
+    bu_free((genptr_t)hf, "hf_specific");
 }
 
 
@@ -1999,7 +1999,7 @@
     if (bu_struct_parse(&str, rt_hf_parse, (char *)xip) < 0) {
 	bu_vls_free(&str);
     err1:
-	bu_free((char *)xip, "rt_hf_import4: xip");
+	bu_free((genptr_t)xip, "rt_hf_import4: xip");
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
 	return -2;
@@ -2242,7 +2242,7 @@
 	bu_close_mapped_file(xip->mp);
     }
 
-    bu_free((char *)xip, "hf ifree");
+    bu_free((genptr_t)xip, "hf ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 /**
Index: librt/primitives/rec/rec.c
===================================================================
--- librt/primitives/rec/rec.c	(revision 54048)
+++ librt/primitives/rec/rec.c	(working copy)
@@ -897,7 +897,7 @@
     struct rec_specific *rec =
 	(struct rec_specific *)stp->st_specific;
 
-    bu_free((char *)rec, "rec_specific");
+    bu_free((genptr_t)rec, "rec_specific");
 }
 
 
Index: librt/primitives/half/half.c
===================================================================
--- librt/primitives/half/half.c	(revision 54048)
+++ librt/primitives/half/half.c	(working copy)
@@ -395,7 +395,7 @@
     register struct half_specific *halfp =
 	(struct half_specific *)stp->st_specific;
 
-    bu_free((char *)halfp, "half_specific");
+    bu_free((genptr_t)halfp, "half_specific");
 }
 
 
Index: librt/primitives/tgc/tgc.c
===================================================================
--- librt/primitives/tgc/tgc.c	(revision 54048)
+++ librt/primitives/tgc/tgc.c	(working copy)
@@ -1342,7 +1342,7 @@
 	    }
 	}
     } /* end for each ray/cone pair */
-    bu_free((char *)C, "tor bn_poly_t");
+    bu_free((genptr_t)C, "tor bn_poly_t");
 }
 
 
@@ -1531,7 +1531,7 @@
     register struct tgc_specific *tgc =
 	(struct tgc_specific *)stp->st_specific;
 
-    bu_free((char *)tgc, "tgc_specific");
+    bu_free((genptr_t)tgc, "tgc_specific");
 }
 
 
@@ -2676,12 +2676,12 @@
     }
 
     /* Finished with storage, so free it */
-    bu_free((char *)factors, "rt_tgc_tess: factors");
-    bu_free((char *)A, "rt_tgc_tess: A");
-    bu_free((char *)B, "rt_tgc_tess: B");
+    bu_free((genptr_t)factors, "rt_tgc_tess: factors");
+    bu_free((genptr_t)A, "rt_tgc_tess: A");
+    bu_free((genptr_t)B, "rt_tgc_tess: B");
     for (i=0; i<nells; i++)
-	bu_free((char *)pts[i], "rt_tgc_tess: pts[i]");
-    bu_free((char *)pts, "rt_tgc_tess: pts");
+	bu_free((genptr_t)pts[i], "rt_tgc_tess: pts[i]");
+    bu_free((genptr_t)pts, "rt_tgc_tess: pts");
 
     /* mark real edges for top and bottom faces */
     for (i=0; i<2; i++) {
Index: librt/primitives/sketch/sketch.c
===================================================================
--- librt/primitives/sketch/sketch.c	(revision 54048)
+++ librt/primitives/sketch/sketch.c	(working copy)
@@ -769,7 +769,7 @@
 			    else
 				RT_ADD_VLIST(vhead, pt, BN_VLIST_LINE_DRAW);
 		}
-		bu_free((char *)eg.ctl_points, "eg.ctl_points");
+		bu_free((genptr_t)eg.ctl_points, "eg.ctl_points");
 		break;
 	    }
 	case CURVE_BEZIER_MAGIC: {
@@ -864,10 +864,10 @@
 			   bz->ctl[i][1], v_vec);
 		    RT_ADD_VLIST(vhead, pt, BN_VLIST_LINE_DRAW);
 		}
-		bu_free((char *)bz->ctl, "g_sketch.c: bz->ctl");
-		bu_free((char *)bz, "g_sketch.c: bz");
+		bu_free((genptr_t)bz->ctl, "g_sketch.c: bz->ctl");
+		bu_free((genptr_t)bz, "g_sketch.c: bz");
 	    }
-	    bu_free((char *)bezier_hd, "g_sketch.c: bezier_hd");
+	    bu_free((genptr_t)bezier_hd, "g_sketch.c: bezier_hd");
 	    break;
 	}
 	default:
@@ -1957,7 +1957,7 @@
     size_t i;
 
     if (crv->count)
-	bu_free((char *)crv->reverse, "crv->reverse");
+	bu_free((genptr_t)crv->reverse, "crv->reverse");
     for (i=0; i<crv->count; i++) {
 	uint32_t *lng;
 	struct nurb_seg *nsg;
@@ -1967,20 +1967,20 @@
 	switch (*lng) {
 	    case CURVE_NURB_MAGIC:
 		nsg = (struct nurb_seg *)lng;
-		bu_free((char *)nsg->ctl_points, "nsg->ctl_points");
+		bu_free((genptr_t)nsg->ctl_points, "nsg->ctl_points");
 		if (nsg->weights)
-		    bu_free((char *)nsg->weights, "nsg->weights");
-		bu_free((char *)nsg->k.knots, "nsg->k.knots");
-		bu_free((char *)lng, "curve segment");
+		    bu_free((genptr_t)nsg->weights, "nsg->weights");
+		bu_free((genptr_t)nsg->k.knots, "nsg->k.knots");
+		bu_free((genptr_t)lng, "curve segment");
 		break;
 	    case CURVE_BEZIER_MAGIC:
 		bsg = (struct bezier_seg *)lng;
-		bu_free((char *)bsg->ctl_points, "bsg->ctl_points");
-		bu_free((char *)lng, "curve segment");
+		bu_free((genptr_t)bsg->ctl_points, "bsg->ctl_points");
+		bu_free((genptr_t)lng, "curve segment");
 		break;
 	    case CURVE_LSEG_MAGIC:
 	    case CURVE_CARC_MAGIC:
-		bu_free((char *)lng, "curve segment");
+		bu_free((genptr_t)lng, "curve segment");
 		break;
 	    default:
 		bu_log("ERROR: rt_curve_free: unrecognized curve segments type!\n");
@@ -1989,7 +1989,7 @@
     }
 
     if (crv->count > 0)
-	bu_free((char *)crv->segment, "crv->segments");
+	bu_free((genptr_t)crv->segment, "crv->segments");
 
     crv->count = 0;
     crv->reverse = (int *)NULL;
@@ -2021,13 +2021,13 @@
     }
 
     if (sketch_ip->verts)
-	bu_free((char *)sketch_ip->verts, "sketch_ip->verts");
+	bu_free((genptr_t)sketch_ip->verts, "sketch_ip->verts");
 
     crv = &sketch_ip->curve;
 
     rt_curve_free(crv);
 
-    bu_free((char *)sketch_ip, "sketch ifree");
+    bu_free((genptr_t)sketch_ip, "sketch ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 
     if (bu_debug&BU_DEBUG_MEM_CHECK) {
@@ -2516,7 +2516,7 @@
 	    }
 
 	    if (skt->verts)
-		bu_free((char *)skt->verts, "verts");
+		bu_free((genptr_t)skt->verts, "verts");
 	    skt->verts = (point2d_t *)new_verts;
 	    skt->vert_count = len / 2;
 	} else if (BU_STR_EQUAL(argv[0], "SL")) {
Index: librt/primitives/nmg/nmg_ck.c
===================================================================
--- librt/primitives/nmg/nmg_ck.c	(revision 54048)
+++ librt/primitives/nmg/nmg_ck.c	(working copy)
@@ -1717,7 +1717,7 @@
 
     bu_ptbl_free(&tab);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
Index: librt/primitives/nmg/nmg_tri.c
===================================================================
--- librt/primitives/nmg/nmg_tri.c	(revision 54048)
+++ librt/primitives/nmg/nmg_tri.c	(working copy)
@@ -275,7 +275,7 @@
     }
 
 
-    bu_free((char *)b, "plot table");
+    bu_free((genptr_t)b, "plot table");
     fclose(fp);
 }
 
@@ -4677,10 +4677,10 @@
 out1:
     while (BU_LIST_WHILE(pt, pt2d, tbl2d)) {
 	BU_LIST_DEQUEUE(&pt->l);
-	bu_free((char *)pt, "pt2d free");
+	bu_free((genptr_t)pt, "pt2d free");
     }
 
-    bu_free((char *)tbl2d, "discard tbl2d");
+    bu_free((genptr_t)tbl2d, "discard tbl2d");
 
 out2:
     return ret;
@@ -4870,14 +4870,14 @@
 
     while (BU_LIST_WHILE(tp, trap, &tlist)) {
 	BU_LIST_DEQUEUE(&tp->l);
-	bu_free((char *)tp, "trapezoid free");
+	bu_free((genptr_t)tp, "trapezoid free");
     }
 
     while (BU_LIST_WHILE(pt, pt2d, tbl2d)) {
 	BU_LIST_DEQUEUE(&pt->l);
-	bu_free((char *)pt, "pt2d free");
+	bu_free((genptr_t)pt, "pt2d free");
     }
-    bu_free((char *)tbl2d, "discard tbl2d");
+    bu_free((genptr_t)tbl2d, "discard tbl2d");
 
     return;
 }
Index: librt/primitives/nmg/nmg_fcut.c
===================================================================
--- librt/primitives/nmg/nmg_fcut.c	(revision 54048)
+++ librt/primitives/nmg/nmg_fcut.c	(working copy)
@@ -1571,7 +1571,7 @@
 	rt_plot_vlblock(fp, vbp);
 	fclose(fp);
 	bu_log("wrote %s\n", buf);
-	bu_free((char *)b, "nmg_special_wedge_processing flag[]");
+	bu_free((genptr_t)b, "nmg_special_wedge_processing flag[]");
 	rt_vlblock_free(vbp);
     }
 
@@ -1875,8 +1875,8 @@
 	}
     }
 
-    bu_free((char *)vs, "nmg_vu_stuff");
-    bu_free((char *)ls, "nmg_loop_stuff");
+    bu_free((genptr_t)vs, "nmg_vu_stuff");
+    bu_free((genptr_t)ls, "nmg_loop_stuff");
 
     if (rt_g.NMG_debug&DEBUG_VU_SORT)
 	bu_log("nmg_face_coincident_vu_sort(, %d, %d) END, ret=%d\n", start, end, start+nvu);
@@ -2890,7 +2890,7 @@
 		rs->vu[prior_end-1-cut_no] = eu_tmp->vu_p;
 	    }
 	    bu_ptbl_free(cuts);
-	    bu_free((char *)cuts, "cuts");
+	    bu_free((genptr_t)cuts, "cuts");
 
 	    continue;
 	}
Index: librt/primitives/nmg/nmg_fuse.c
===================================================================
--- librt/primitives/nmg/nmg_fuse.c	(revision 54048)
+++ librt/primitives/nmg/nmg_fuse.c	(working copy)
@@ -1190,7 +1190,7 @@
 	}
     }
 
-    bu_free((char *)edgeuse_vert_list, "edgeuse_vert_list");
+    bu_free((genptr_t)edgeuse_vert_list, "edgeuse_vert_list");
 
     /* if bu_ptbl was passed into this function don't free it here */
     if (*magic_p != BU_PTBL_MAGIC) {
@@ -3388,7 +3388,7 @@
     bu_ptbl_free(&shell_tbl);
     while (BU_LIST_WHILE(rad, nmg_radial, &list1)) {
 	BU_LIST_DEQUEUE(&rad->l);
-	bu_free((char *)rad, "nmg_radial");
+	bu_free((genptr_t)rad, "nmg_radial");
     }
     return;
 }
@@ -3494,7 +3494,7 @@
 	/* Release the storage */
 	while (BU_LIST_WHILE(rad, nmg_radial, &list)) {
 	    BU_LIST_DEQUEUE(&rad->l);
-	    bu_free((char *)rad, "nmg_radial");
+	    bu_free((genptr_t)rad, "nmg_radial");
 	}
     }
 
Index: librt/primitives/nmg/nmg_class.c
===================================================================
--- librt/primitives/nmg/nmg_class.c	(revision 54048)
+++ librt/primitives/nmg/nmg_class.c	(working copy)
@@ -391,7 +391,7 @@
 	VJOIN1(left_pt, mid_pt, 500, left);
 	pdv_3line(fp, mid_pt, left_pt);
 	fclose(fp);
-	bu_free((char *)bits, "bits[]");
+	bu_free((genptr_t)bits, "bits[]");
 	bu_log("wrote %s\n", buf);
     }
 }
@@ -771,7 +771,7 @@
 
 out:
     if (!in_or_out_only) {
-	bu_free((char *)faces_seen, "nmg_class_pt_s faces_seen[]");
+	bu_free((genptr_t)faces_seen, "nmg_class_pt_s faces_seen[]");
     }
 
     if (rt_g.NMG_debug & DEBUG_CLASSIFY) {
@@ -1657,7 +1657,7 @@
 		}
 		nmg_pr_lu(lu, "");
 		nmg_stash_model_to_file("class.g", nmg_find_model((uint32_t *)lu), "class_ls_vs_s: loop transits plane of shell/face?");
-		bu_free((char *)b, "nmg_pl_lu flag[]");
+		bu_free((genptr_t)b, "nmg_pl_lu flag[]");
 	    }
 
 	    if (seen_error > 3) {
Index: librt/primitives/nmg/nmg_rt_segs.c
===================================================================
--- librt/primitives/nmg/nmg_rt_segs.c	(revision 54048)
+++ librt/primitives/nmg/nmg_rt_segs.c	(working copy)
@@ -1136,8 +1136,8 @@
 
     bu_ptbl_free(next_tbl);
     bu_ptbl_free(a_tbl);
-    (void)bu_free((char *)a_tbl, "a_tbl");
-    (void)bu_free((char *)next_tbl, "next_tbl");
+    (void)bu_free((genptr_t)a_tbl, "a_tbl");
+    (void)bu_free((genptr_t)next_tbl, "next_tbl");
 
     return 0;
 }
Index: librt/primitives/nmg/nmg_mk.c
===================================================================
--- librt/primitives/nmg/nmg_mk.c	(revision 54048)
+++ librt/primitives/nmg/nmg_mk.c	(working copy)
@@ -1213,9 +1213,9 @@
 	    struct face_g_snurb *sp;
 	    sp = (struct face_g_snurb *)magic_p;
 	    if (BU_LIST_NON_EMPTY(&(sp->f_hd))) return;
-	    bu_free((char *)sp->u.knots, "nmg_kfg snurb u knots[]");
-	    bu_free((char *)sp->v.knots, "nmg_kfg snurb v knots[]");
-	    bu_free((char *)sp->ctl_points, "nmg_kfg snurb ctl_points[]");
+	    bu_free((genptr_t)sp->u.knots, "nmg_kfg snurb u knots[]");
+	    bu_free((genptr_t)sp->v.knots, "nmg_kfg snurb v knots[]");
+	    bu_free((genptr_t)sp->ctl_points, "nmg_kfg snurb ctl_points[]");
 	    FREE_FACE_G_SNURB(sp);
 	}
 	    break;
@@ -1428,8 +1428,8 @@
 	    eu->g.magic_p = NULL;
 	    if (BU_LIST_NON_EMPTY(&eg->eu_hd2)) return 0;
 	    if (eg->order != 0) {
-		bu_free((char *)eg->k.knots, "nmg_keg cnurb knots[]");
-		bu_free((char *)eg->ctl_points, "nmg_keg cnurb ctl_points[]");
+		bu_free((genptr_t)eg->k.knots, "nmg_keg cnurb knots[]");
+		bu_free((genptr_t)eg->ctl_points, "nmg_keg cnurb ctl_points[]");
 	    }
 	    FREE_EDGE_G_CNURB(eg);
 	    break;
@@ -1690,7 +1690,7 @@
 	(void)nmg_kr(BU_LIST_FIRST(nmgregion, &m->r_hd));
 
     if (m->manifolds) {
-	bu_free((char *)m->manifolds, "free manifolds table");
+	bu_free((genptr_t)m->manifolds, "free manifolds table");
 	m->manifolds = (char *)NULL;
     }
 
Index: librt/primitives/nmg/nmg_index.c
===================================================================
--- librt/primitives/nmg/nmg_index.c	(revision 54048)
+++ librt/primitives/nmg/nmg_index.c	(working copy)
@@ -793,11 +793,11 @@
      * need to be regenerated.
      */
     if (m1->manifolds) {
-	bu_free((char *)m1->manifolds, "free manifolds table");
+	bu_free((genptr_t)m1->manifolds, "free manifolds table");
 	m1->manifolds = (char *)NULL;
     }
     if (m2->manifolds) {
-	bu_free((char *)m2->manifolds, "free manifolds table");
+	bu_free((genptr_t)m2->manifolds, "free manifolds table");
 	m2->manifolds = (char *)NULL;
     }
 
Index: librt/primitives/nmg/nmg_junk.c
===================================================================
--- librt/primitives/nmg/nmg_junk.c	(revision 54048)
+++ librt/primitives/nmg/nmg_junk.c	(working copy)
@@ -160,7 +160,7 @@
 	if (BU_LIST_IS_EMPTY(&v[i]->vu_hd)) continue;
 	FREE_VERTEX(v[i]);
     }
-    bu_free((char *)v, "vertex array");
+    bu_free((genptr_t)v, "vertex array");
     return s;
 }
 
Index: librt/primitives/nmg/nmg_rt_isect.c
===================================================================
--- librt/primitives/nmg/nmg_rt_isect.c	(revision 54048)
+++ librt/primitives/nmg/nmg_rt_isect.c	(working copy)
@@ -160,7 +160,7 @@
     pl_color(fp, 255, 50, 50);
     pdv_3line(fp, pt, plane_pt);
 
-    bu_free((char *)b, "bit vec");
+    bu_free((genptr_t)b, "bit vec");
     fclose(fp);
 }
 
@@ -205,7 +205,7 @@
     nmg_pl_eu(fp, eu, b, 255, 255, 255);
     pl_color(fp, 255, 50, 50);
     pdv_3line(fp, pt, plane_pt);
-    bu_free((char *)b, "bit vec");
+    bu_free((genptr_t)b, "bit vec");
     fclose(fp);
 }
 
@@ -1956,7 +1956,7 @@
 		if (rt_g.NMG_debug & DEBUG_RT_ISECT)
 		    bu_log("\tNot a hit\n");
 
-		bu_free((char *)hp, "hit");
+		bu_free((genptr_t)hp, "hit");
 		hp = next;
 		continue;
 	    }
@@ -2050,7 +2050,7 @@
 
 	    hit_ins(rd, myhit);
 
-	    bu_free((char *)hp, "hit");
+	    bu_free((genptr_t)hp, "hit");
 	    hp = next;
 	}
 	rt_nurb_free_snurb(srf, rd->ap->a_resource);
@@ -2796,7 +2796,7 @@
     }
 
     /* free the hitmiss table */
-    bu_free((char *)rd.hitmiss, "free nmg geom hit list");
+    bu_free((genptr_t)rd.hitmiss, "free nmg geom hit list");
 
     if (!rd.rd_m->manifolds) {
 	/* If there is no manifolds list attached to the model
@@ -2807,7 +2807,7 @@
 	 * function and should be freed in the nmg_bool
 	 * function.
 	 */
-	bu_free((char *)rd.manifolds, "free local manifolds table");
+	bu_free((genptr_t)rd.manifolds, "free local manifolds table");
 	rd.manifolds = NULL; /* sanity */
     }
 
Index: librt/primitives/nmg/nmg_pt_fu.c
===================================================================
--- librt/primitives/nmg/nmg_pt_fu.c	(revision 54048)
+++ librt/primitives/nmg/nmg_pt_fu.c	(working copy)
@@ -757,11 +757,11 @@
 		tmp = ei_p;
 		ei_p = BU_LIST_PLAST(edge_info, &ei_p->l);
 		BU_LIST_DEQUEUE(&tmp->l);
-		bu_free((char *)tmp, "edge info struct");
+		bu_free((genptr_t)tmp, "edge info struct");
 		tmp = ei;
 		ei = BU_LIST_PLAST(edge_info, &ei->l);
 		BU_LIST_DEQUEUE(&tmp->l);
-		bu_free((char *)tmp, "edge info struct");
+		bu_free((genptr_t)tmp, "edge info struct");
 		break;
 	    }
 	    ei_p = BU_LIST_PNEXT(edge_info, &ei_p->l);
@@ -870,7 +870,7 @@
 	pdv_3line(fp, p1, p2);
     }
 
-    bu_free((char *)b, "bit vec");
+    bu_free((genptr_t)b, "bit vec");
     fclose(fp);
 }
 
@@ -972,7 +972,7 @@
      */
     while (BU_LIST_WHILE(ei, edge_info, &near1)) {
 	BU_LIST_DEQUEUE(&ei->l);
-	bu_free((char *)ei, "edge_info struct");
+	bu_free((genptr_t)ei, "edge_info struct");
     }
 
     if (UNLIKELY(rt_g.NMG_debug & DEBUG_PT_FU)) {
@@ -1096,7 +1096,7 @@
 	/* free up the edge_list elements */
 	while (BU_LIST_WHILE(ei, edge_info, &edge_list.l)) {
 	    BU_LIST_DEQUEUE(&ei->l);
-	    bu_free((char *)ei, "edge info struct");
+	    bu_free((genptr_t)ei, "edge info struct");
 	}
     } else if (BU_LIST_FIRST_MAGIC(&lu->down_hd) == NMG_VERTEXUSE_MAGIC) {
 	register struct vertexuse *vu;
@@ -1180,7 +1180,7 @@
 	pdv_3line(fp, p1, p2);
     }
 
-    bu_free((char *)b, "plot table");
+    bu_free((genptr_t)b, "plot table");
     fclose(fp);
 
 }
@@ -1359,7 +1359,7 @@
 
     while (BU_LIST_WHILE(ved_p, ve_dist, &fpi.ve_dh)) {
 	BU_LIST_DEQUEUE(&ved_p->l);
-	bu_free((char *)ved_p, "ve_dist struct");
+	bu_free((genptr_t)ved_p, "ve_dist struct");
     }
 
 
@@ -1474,12 +1474,12 @@
     /* free up the edge_list elements */
     while (BU_LIST_WHILE(ei, edge_info, &edge_list.l)) {
 	BU_LIST_DEQUEUE(&ei->l);
-	bu_free((char *)ei, "edge info struct");
+	bu_free((genptr_t)ei, "edge info struct");
     }
 
     while (BU_LIST_WHILE(ved_p, ve_dist, &fpi.ve_dh)) {
 	BU_LIST_DEQUEUE(&ved_p->l);
-	bu_free((char *)ved_p, "ve_dist struct");
+	bu_free((genptr_t)ved_p, "ve_dist struct");
     }
 
     if (rt_g.NMG_debug & DEBUG_PT_FU)
Index: librt/primitives/nmg/nmg_plot.c
===================================================================
--- librt/primitives/nmg/nmg_plot.c	(revision 54048)
+++ librt/primitives/nmg/nmg_plot.c	(working copy)
@@ -1250,7 +1250,7 @@
 	nmg_vlblock_v(vbp, s->vu_p->v_p, tab);
     }
 
-    bu_free((char *)tab, "nmg_vlblock_s tab[]");
+    bu_free((genptr_t)tab, "nmg_vlblock_s tab[]");
 }
 
 
@@ -1383,7 +1383,7 @@
     rt_plot_vlblock(fp, vbp);
     rt_vlblock_free(vbp);
 
-    bu_free((char *)b, "nmg_pl_isect flags[]");
+    bu_free((genptr_t)b, "nmg_pl_isect flags[]");
 
     (void)fclose(fp);
 }
@@ -1445,7 +1445,7 @@
 	}
     }
     rt_vlblock_free(vbp);
-    bu_free((char *)tab, "nmg_pl_comb_fu tab[]");
+    bu_free((genptr_t)tab, "nmg_pl_comb_fu tab[]");
 }
 
 
@@ -1508,7 +1508,7 @@
     }
 
     rt_vlblock_free(vbp);
-    bu_free((char *)tab, "nmg_pl_2fu tab[]");
+    bu_free((genptr_t)tab, "nmg_pl_2fu tab[]");
 }
 
 
@@ -1927,7 +1927,7 @@
 
 	rt_vlblock_free(vbp);
 	vbp = (struct bn_vlblock *)NULL;
-	bu_free((char *)broken_tab, "broken_tab");
+	bu_free((genptr_t)broken_tab, "broken_tab");
 	broken_tab = (long *)NULL;
 	broken_tab_len = 0;
     }
@@ -1988,7 +1988,7 @@
 	}
     }
     rt_vlblock_free(vbp);
-    bu_free((char *)tab, "nmg_face_plot tab[]");
+    bu_free((genptr_t)tab, "nmg_face_plot tab[]");
 
 }
 
@@ -2034,7 +2034,7 @@
 	bu_log("null nmg_vlblock_anim_upcall, no animation\n");
     }
     rt_vlblock_free(vbp);
-    bu_free((char *)tab, "nmg_2face_plot tab[]");
+    bu_free((genptr_t)tab, "nmg_2face_plot tab[]");
 
 }
 
@@ -2086,7 +2086,7 @@
 
     fclose(fp);
     bu_log("overlay %s\n", buf);
-    bu_free((char *)b, "nmg_face_lu_plot flag[]");
+    bu_free((genptr_t)b, "nmg_face_lu_plot flag[]");
 }
 
 
@@ -2143,7 +2143,7 @@
 
     fclose(fp);
     bu_log("overlay %s\n", buf);
-    bu_free((char *)b, "nmg_plot_lu_ray flag[]");
+    bu_free((genptr_t)b, "nmg_plot_lu_ray flag[]");
 }
 
 
@@ -2174,7 +2174,7 @@
 
     nmg_pl_fu(fp, fu, b, 200, 200, 200);
 
-    bu_free((char *)b, "bit vec");
+    bu_free((genptr_t)b, "bit vec");
 
     VSCALE(pp, dir, 1000.0);
     VADD2(pp, pt, pp);
@@ -2236,7 +2236,7 @@
     rt_plot_vlblock(fp, vbp);
     (void)fclose(fp);
     rt_vlblock_free(vbp);
-    bu_free((char *)tab, "bit vec");
+    bu_free((genptr_t)tab, "bit vec");
 }
 
 
@@ -2322,10 +2322,10 @@
     rt_nurb_free_snurb(c, (struct resource *)NULL);
     rt_nurb_free_snurb(r, (struct resource *)NULL);
 
-    bu_free((char *) tau1.knots, "rt_nurb_plot:tau1.knots");
-    bu_free((char *) tau2.knots, "rt_nurb_plot:tau2.knots");
-    bu_free((char *) tkv1.knots, "rt_nurb_plot:tkv1>knots");
-    bu_free((char *) tkv2.knots, "rt_nurb_plot:tkv2.knots");
+    bu_free((genptr_t) tau1.knots, "rt_nurb_plot:tau1.knots");
+    bu_free((genptr_t) tau2.knots, "rt_nurb_plot:tau2.knots");
+    bu_free((genptr_t) tkv1.knots, "rt_nurb_plot:tkv1>knots");
+    bu_free((genptr_t) tkv2.knots, "rt_nurb_plot:tkv2.knots");
 
     return 0;
 }
@@ -2459,8 +2459,8 @@
     }
 
     if (eg->order <= 0) {
-	bu_free((char *)n.k.knots, "nmg_cnurb_to_vlist() n.knot.knots");
-	bu_free((char *)n.ctl_points, "nmg_cnurb_to_vlist() ctl_points");
+	bu_free((genptr_t)n.k.knots, "nmg_cnurb_to_vlist() n.knot.knots");
+	bu_free((genptr_t)n.ctl_points, "nmg_cnurb_to_vlist() ctl_points");
     }
 }
 
Index: librt/primitives/nmg/nmg_mod.c
===================================================================
--- librt/primitives/nmg/nmg_mod.c	(revision 54048)
+++ librt/primitives/nmg/nmg_mod.c	(working copy)
@@ -193,7 +193,7 @@
 	}
     }
 
-    bu_free((char *)flags, "nmg_shell_coplanar_face_merge flags[]");
+    bu_free((genptr_t)flags, "nmg_shell_coplanar_face_merge flags[]");
 
     nmg_shell_a(s, tol);
 
@@ -1947,7 +1947,7 @@
     new_fu->orientation = fu->orientation;
     new_fu->fumate_p->orientation = fu->fumate_p->orientation;
 
-    bu_free((char *)trans_tbl, "nmg_dup_face trans_tbl");
+    bu_free((genptr_t)trans_tbl, "nmg_dup_face trans_tbl");
 
     if (rt_g.NMG_debug & DEBUG_BASIC) {
 	bu_log("nmg_dup_face(fu=x%x, s=x%x) new_fu=x%x\n",
@@ -2383,7 +2383,7 @@
 	    nmg_pl_fu(fd, oldlu->up.fu_p, tab, 100, 100, 100);
 	    nmg_pl_fu(fd, oldlu->up.fu_p->fumate_p, tab, 100, 100, 100);
 	    (void)fclose(fd);
-	    bu_free((char *)tab, "nmg_cut_loop flag[] 1");
+	    bu_free((genptr_t)tab, "nmg_cut_loop flag[] 1");
 	}
     }
 
@@ -2455,7 +2455,7 @@
 	nmg_pl_fu(fd, oldlu->up.fu_p, tab, 100, 100, 100);
 	nmg_pl_fu(fd, oldlu->up.fu_p->fumate_p, tab, 100, 100, 100);
 	(void)fclose(fd);
-	bu_free((char *)tab, "nmg_cut_loop flag[] 2");
+	bu_free((genptr_t)tab, "nmg_cut_loop flag[] 2");
     }
  out:
     if (rt_g.NMG_debug & DEBUG_BASIC) {
@@ -3142,9 +3142,9 @@
 
     if (jaunt_count == 0) {
 	if (visit_count)
-	    bu_free((char *)visit_count, "nmg_loop_split_at_touching_jaunt: visit_count[]\n");
+	    bu_free((genptr_t)visit_count, "nmg_loop_split_at_touching_jaunt: visit_count[]\n");
 	if (jaunt_status)
-	    bu_free((char *)jaunt_status, "nmg_loop_split_at_touching_jaunt: jaunt_status[]\n");
+	    bu_free((genptr_t)jaunt_status, "nmg_loop_split_at_touching_jaunt: jaunt_status[]\n");
 	if (!need_init)
 	    bu_ptbl_free(&jaunt_tbl);
 
@@ -3171,9 +3171,9 @@
 
 	bu_ptbl_free(&jaunt_tbl);
 	if (visit_count)
-	    bu_free((char *)visit_count, "nmg_loop_split_at_touching_jaunt: visit_count[]\n");
+	    bu_free((genptr_t)visit_count, "nmg_loop_split_at_touching_jaunt: visit_count[]\n");
 	if (jaunt_status)
-	    bu_free((char *)jaunt_status, "nmg_loop_split_at_touching_jaunt: jaunt_status[]\n");
+	    bu_free((genptr_t)jaunt_status, "nmg_loop_split_at_touching_jaunt: jaunt_status[]\n");
 
 	if ((rt_g.NMG_debug & DEBUG_BASIC) || (rt_g.NMG_debug & DEBUG_CUTLOOP)) {
 	    bu_log("nmg_loop_split_at_touching_jaunt(lu=x%x) END count=%d\n",
@@ -3203,9 +3203,9 @@
     BU_CK_PTBL(&jaunt_tbl);
 
     if (visit_count)
-	bu_free((char *)visit_count, "nmg_loop_split_at_touching_jaunt: visit_count[]\n");
+	bu_free((genptr_t)visit_count, "nmg_loop_split_at_touching_jaunt: visit_count[]\n");
     if (jaunt_status)
-	bu_free((char *)jaunt_status, "nmg_loop_split_at_touching_jaunt: jaunt_status[]\n");
+	bu_free((genptr_t)jaunt_status, "nmg_loop_split_at_touching_jaunt: jaunt_status[]\n");
 
     visit_count = (int *)bu_calloc(BU_PTBL_END(&jaunt_tbl), sizeof(int),
 				   "nmg_loop_split_at_touching_jaunt: visit_count[]");
Index: librt/primitives/nmg/nmg_extrude.c
===================================================================
--- librt/primitives/nmg/nmg_extrude.c	(revision 54048)
+++ librt/primitives/nmg/nmg_extrude.c	(working copy)
@@ -174,7 +174,7 @@
 	bu_bomb("nmg_translate_face: Cannot calculate plane equation for face\n");
     }
     nmg_face_g(fu_tmp, pl);
-    bu_free((char *)verts, "verts");
+    bu_free((genptr_t)verts, "verts");
 }
 
 
@@ -262,7 +262,7 @@
 
     nmg_gluefaces(outfaces, face_count, tol);
 
-    bu_free((char *)outfaces, "nmg_extrude_face: outfaces");
+    bu_free((genptr_t)outfaces, "nmg_extrude_face: outfaces");
 
     return 0;
 }
@@ -681,7 +681,7 @@
 		}
 
 		bu_ptbl_free(loop_tab);
-		bu_free((char *)loop_tab, "nmg_fix_overlapping_loops: loop_tab");
+		bu_free((genptr_t)loop_tab, "nmg_fix_overlapping_loops: loop_tab");
 	    }
 	}
 
@@ -1164,8 +1164,8 @@
 	nmg_region_a(s_tmp->r_p, tol);
 
 	/* free memory */
-	bu_free((char *)flags, "nmg_extrude_shell: flags");
-	bu_free((char *)copy_tbl, "nmg_extrude_shell: copy_tbl");
+	bu_free((genptr_t)flags, "nmg_extrude_shell: flags");
+	bu_free((genptr_t)copy_tbl, "nmg_extrude_shell: copy_tbl");
     }
 
     /* put it all back together */
@@ -1286,7 +1286,7 @@
 	    }
 	}
 
-	bu_free((char *)flags, "nmg_extrude_shell flags");
+	bu_free((genptr_t)flags, "nmg_extrude_shell flags");
 
 	/* get table of vertices in this shell */
 	nmg_vertex_tabulate(&verts, &s_tmp->l.magic);
Index: librt/primitives/nmg/nmg.c
===================================================================
--- librt/primitives/nmg/nmg.c	(revision 54048)
+++ librt/primitives/nmg/nmg.c	(working copy)
@@ -223,7 +223,7 @@
     status = nmg_ray_segs(&rd);
 
     /* free the hitmiss table */
-    bu_free((char *)rd.hitmiss, "free nmg geom hit list");
+    bu_free((genptr_t)rd.hitmiss, "free nmg geom hit list");
 
     return status;
 }
@@ -298,7 +298,7 @@
 	(struct nmg_specific *)stp->st_specific;
 
     nmg_km(nmg->nmg_model);
-    bu_free((char *)nmg, "nmg_specific");
+    bu_free((genptr_t)nmg, "nmg_specific");
     stp->st_specific = NULL; /* sanity */
 }
 
@@ -2199,8 +2199,8 @@
     ip->idb_meth = &rt_functab[ID_NMG];
     ip->idb_ptr = (genptr_t)m;
 
-    bu_free((char *)ecnt, "ecnt[]");
-    bu_free((char *)real_ptrs, "ptrs[]");
+    bu_free((genptr_t)ecnt, "ecnt[]");
+    bu_free((genptr_t)real_ptrs, "ptrs[]");
 
     return 0;			/* OK */
 }
@@ -2558,8 +2558,8 @@
     ip->idb_meth = &rt_functab[ ID_NMG ];
     ip->idb_ptr = (genptr_t)m;
     NMG_CK_MODEL(m);
-    bu_free((char *)ecnt, "ecnt[]");
-    bu_free((char *)real_ptrs, "ptrs[]");
+    bu_free((genptr_t)ecnt, "ecnt[]");
+    bu_free((genptr_t)real_ptrs, "ptrs[]");
 
     if (RT_G_DEBUG || rt_g.NMG_debug) {
 	nmg_vmodel(m);
@@ -2762,8 +2762,8 @@
 		     (genptr_t)(ptrs[i]), ecnt, i, local2mm);
     }
 
-    bu_free((char *)ptrs, "ptrs[]");
-    bu_free((char *)ecnt, "ecnt[]");
+    bu_free((genptr_t)ptrs, "ptrs[]");
+    bu_free((genptr_t)ecnt, "ecnt[]");
     return 0;		/* OK */
 }
 
@@ -3033,7 +3033,7 @@
 			face_verts[j] = &verts[loop[j]].v;
 		    }
 		    fu = nmg_cmface(s, face_verts, loop_len);
-		    bu_free((char *)face_verts, "face_verts");
+		    bu_free((genptr_t)face_verts, "face_verts");
 		}
 	    }
 	} else {
Index: librt/primitives/nmg/nmg_inter.c
===================================================================
--- librt/primitives/nmg/nmg_inter.c	(revision 54048)
+++ librt/primitives/nmg/nmg_inter.c	(working copy)
@@ -636,7 +636,7 @@
     nmg_hack_last_is = (struct nmg_inter_struct *)NULL;
 
     if (!is->vert2d) return;
-    bu_free((char *)is->vert2d, "vert2d");
+    bu_free((genptr_t)is->vert2d, "vert2d");
     is->vert2d = NULL;
     is->twod = NULL;
 }
@@ -2273,9 +2273,9 @@
     (void)bu_ptbl_free(&eu1_list);
     (void)bu_ptbl_free(&eu2_list);
     if (mag1)
-	bu_free((char *)mag1, "nmg_isect_edge2p_face2p: mag1");
+	bu_free((genptr_t)mag1, "nmg_isect_edge2p_face2p: mag1");
     if (mag2)
-	bu_free((char *)mag2, "nmg_isect_edge2p_face2p: mag2");
+	bu_free((genptr_t)mag2, "nmg_isect_edge2p_face2p: mag2");
 
 do_ret:
     if (rt_g.NMG_debug & DEBUG_POLYSECT) {
@@ -2855,9 +2855,9 @@
 	}
     }
     if (mag1)
-	bu_free((char *)mag1, "mag1");
+	bu_free((genptr_t)mag1, "mag1");
     if (mag2)
-	bu_free((char *)mag2, "mag2");
+	bu_free((genptr_t)mag2, "mag2");
 
     bu_ptbl_free(is->l1);
     bu_ptbl_free(is->l2);
@@ -3005,7 +3005,7 @@
 	nmg_region_v_unique(fu1->s_p->r_p, &is->tol);
 	nmg_region_v_unique(fu2->s_p->r_p, &is->tol);
     }
-    bu_free((char *)tags, "tags[]");
+    bu_free((genptr_t)tags, "tags[]");
     if (rt_g.NMG_debug & DEBUG_POLYSECT)
 	bu_log("nmg_isect_two_face2p(fu1=x%x, fu2=x%x) END\n", fu1, fu2);
 }
@@ -4063,7 +4063,7 @@
 	inter_dist[index_at_max] = (-10.0);
     }
 
-    bu_free((char *)inter_dist, "nmg_isect_eu_fu: inter_dist");
+    bu_free((genptr_t)inter_dist, "nmg_isect_eu_fu: inter_dist");
 
 out:
     bu_ptbl_free(&inters);
@@ -5222,9 +5222,9 @@
     (void)bu_ptbl_free(&eu1_list);
     (void)bu_ptbl_free(&eu2_list);
     if (mag1)
-	bu_free((char *)mag1, "nmg_isect_two_face3p: mag1");
+	bu_free((genptr_t)mag1, "nmg_isect_two_face3p: mag1");
     if (mag2)
-	bu_free((char *)mag2, "nmg_isect_two_face3p: mag2");
+	bu_free((genptr_t)mag2, "nmg_isect_two_face3p: mag2");
 
 
     if (rt_g.NMG_debug & DEBUG_VERIFY) {
@@ -5505,7 +5505,7 @@
 		bu_log("v=x%x, dist=%g\n", BU_PTBL_GET(&cut_list, i), dist_array[i]);
 	}
 
-	bu_free((char *)dist_array, "distance array");
+	bu_free((genptr_t)dist_array, "distance array");
     }
 
     for (i=0; i<BU_PTBL_END(&cut_list); i += 2) {
@@ -6601,9 +6601,9 @@
     nmg_isect_coplanar_edges(is, &eu1_list, &eu2_list);
 
     if (mag1)
-	bu_free((char *)mag1, "mag1");
+	bu_free((genptr_t)mag1, "mag1");
     if (mag2)
-	bu_free((char *)mag2, "mag2");
+	bu_free((genptr_t)mag2, "mag2");
 
     bu_ptbl_free(is->l1);
     bu_ptbl_free(is->l2);
Index: librt/primitives/nmg/nmg_pr.c
===================================================================
--- librt/primitives/nmg/nmg_pr.c	(revision 54048)
+++ librt/primitives/nmg/nmg_pr.c	(working copy)
@@ -1101,7 +1101,7 @@
 	eu1 = eu1->radial_p;
     } while (eu1 != eu);
 
-    bu_free((char *)b, "nmg_pl_lu_around_eu flag[]");
+    bu_free((genptr_t)b, "nmg_pl_lu_around_eu flag[]");
     fclose(fp);
     bu_log("Wrote %s\n", buf);
 }
Index: librt/primitives/nmg/nmg_info.c
===================================================================
--- librt/primitives/nmg/nmg_info.c	(revision 54048)
+++ librt/primitives/nmg/nmg_info.c	(working copy)
@@ -1264,7 +1264,7 @@
 
     nmg_visit(magic_p, &htab, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 
     if (st.ep) {
 	NMG_CK_EDGE(st.ep);
@@ -2093,7 +2093,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
@@ -2150,7 +2150,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
@@ -2204,7 +2204,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
@@ -2258,7 +2258,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
@@ -2321,7 +2321,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
@@ -2375,7 +2375,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
@@ -2499,7 +2499,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
@@ -2585,7 +2585,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
 }
 
 
Index: librt/primitives/nmg/nmg_bool.c
===================================================================
--- librt/primitives/nmg/nmg_bool.c	(revision 54048)
+++ librt/primitives/nmg/nmg_bool.c	(working copy)
@@ -198,7 +198,7 @@
 
     nmg_visit(magic_p, &handlers, (genptr_t)&st);
 
-    bu_free((char *)st.visited, "visited[]");
+    bu_free((genptr_t)st.visited, "visited[]");
     return st.count;
 }
 
@@ -963,7 +963,7 @@
     }
 
     if (m->manifolds) {
-	bu_free((char *)m->manifolds, "free manifolds table");
+	bu_free((genptr_t)m->manifolds, "free manifolds table");
 	m->manifolds = (char *)NULL;
     }
     m->manifolds = nmg_manifolds(m);
@@ -987,7 +987,7 @@
     nmg_class_shells(sB, sA, &classlist[4], tol);
 
     if (m->manifolds) {
-	bu_free((char *)m->manifolds, "free manifolds table");
+	bu_free((genptr_t)m->manifolds, "free manifolds table");
 	m->manifolds = (char *)NULL;
     }
 
@@ -1106,7 +1106,7 @@
     }
 
     for (i = 0; i < 8; i++) {
-	bu_free((char *)classlist[i], "nmg_bool classlist");
+	bu_free((genptr_t)classlist[i], "nmg_bool classlist");
     }
 
     if (rt_g.NMG_debug & DEBUG_BOOL) {
Index: librt/primitives/nmg/nmg_misc.c
===================================================================
--- librt/primitives/nmg/nmg_misc.c	(revision 54048)
+++ librt/primitives/nmg/nmg_misc.c	(working copy)
@@ -149,7 +149,7 @@
 	VADD2(area, area, cross);
     }
 
-    bu_free((char *)pts, "nmg_snurb_calc_lu_uv_orient: pts");
+    bu_free((genptr_t)pts, "nmg_snurb_calc_lu_uv_orient: pts");
 
     if (area[Z] > 0.0)
 	return OT_SAME;
@@ -744,7 +744,7 @@
 	    bu_ptbl_ins(shells, (long *)void_s);
 	}
     }
-    bu_free((char *)flags, "nmg_assoc_void_shells: flags");
+    bu_free((genptr_t)flags, "nmg_assoc_void_shells: flags");
 }
 
 
@@ -840,7 +840,7 @@
 	    nmg_assoc_void_shells(r, (*shells)[i], tol);
     }
 
-    bu_free((char *)flags, "nmg_find_outer_and_void_shells: flags");
+    bu_free((genptr_t)flags, "nmg_find_outer_and_void_shells: flags");
     bu_ptbl_free(outer_shells);
     return outer_shell_count;
 }
@@ -2171,7 +2171,7 @@
 	nmg_region_a(r, tol);
     }
 
-    bu_free((char *)flags, "rebound flags[]");
+    bu_free((genptr_t)flags, "rebound flags[]");
 }
 
 
@@ -2216,7 +2216,7 @@
 	}
     }
 
-    bu_free((char *)tbl, "face/wire/point counted table");
+    bu_free((genptr_t)tbl, "face/wire/point counted table");
 }
 
 
@@ -2483,7 +2483,7 @@
 		for (i=0; i<loop_size; i++)
 		    bu_ptbl_rm(&eu_tbl, (long *)eu_used[i]);
 
-		bu_free((char *)eu_used, "edge used list");
+		bu_free((genptr_t)eu_used, "edge used list");
 
 		/* may need to remove one more edgeuse from table */
 		eu_tmp = nmg_find_e((*(struct vertex **)BU_PTBL_GET(&vert_tbl, 0)), (*(struct vertex **)BU_PTBL_GET(&vert_tbl, loop_size-1)), (struct shell *)NULL, (struct edge *)NULL);
@@ -2616,7 +2616,7 @@
 		}
 	    }
 
-	    bu_free((char *)eu_used, "edge used list");
+	    bu_free((genptr_t)eu_used, "edge used list");
 
 	    /* re-order loop */
 	    loop_size = 0;
@@ -2692,7 +2692,7 @@
     }
 
     /* Free up all the memory */
-    bu_free((char *)idx, "idx");
+    bu_free((genptr_t)idx, "idx");
     bu_ptbl_free(&eu_tbl);
     bu_ptbl_free(&vert_tbl);
 
@@ -3041,7 +3041,7 @@
 
     f = nmg_find_top_face(s, &dir, flags);
 
-    bu_free((char *)flags, "nmg_shell_is_void: flags");
+    bu_free((genptr_t)flags, "nmg_shell_is_void: flags");
 
     if (f == (struct face *)NULL)
 	return -1;
@@ -3380,7 +3380,7 @@
     if (f_top == (struct face *)NULL) {
 	bu_log("nmg_fix_decomposed_shell_normals: Could not get a top face from nmg_find_top_face()\n");
 	bu_log("\tWARNING: continuing without fixing normals!\n");
-	bu_free((char *)flags, "nmg_fix_decomposed_shell_normals: flags");
+	bu_free((genptr_t)flags, "nmg_fix_decomposed_shell_normals: flags");
 	return;
     }
     if (*f_top->g.magic_p != NMG_FACE_G_PLANE_MAGIC) {
@@ -3398,7 +3398,7 @@
 	fu = fu->fumate_p;
     if (fu->orientation != OT_SAME) {
 	bu_log("nmg_fix_decomposed_shell_normals: no OT_SAME use of top face\n");
-	bu_free((char *)flags, "nmg_fix_decomposed_shell_normals: flags");
+	bu_free((genptr_t)flags, "nmg_fix_decomposed_shell_normals: flags");
 	return;
     }
     NMG_GET_FU_NORMAL(normal, fu);
@@ -3454,7 +3454,7 @@
 	bu_bomb("nmg_fix_decomposed_shell_normals: missed faces in shell (was it decomposed?)\n");
     }
 
-    bu_free((char *)flags, "flags");
+    bu_free((genptr_t)flags, "flags");
 }
 
 
@@ -3629,7 +3629,7 @@
     if (shell_count == 1) {
 	/* just one shell, so fix it and return */
 	(void)nmg_km(tmp_m);
-	bu_free((char *)trans_tbl, "translate table");
+	bu_free((genptr_t)trans_tbl, "translate table");
 	nmg_connect_same_fu_orients(s_orig);
 	nmg_fix_decomposed_shell_normals(s_orig, tol);
 	return;
@@ -3725,7 +3725,7 @@
     }
 
     bu_ptbl_free(&reverse);
-    bu_free((char *)trans_tbl, "translation table");
+    bu_free((genptr_t)trans_tbl, "translation table");
 
     nmg_km(tmp_m);
 }
@@ -4120,7 +4120,7 @@
 
     count = sl_state.split;
 
-    bu_free((char *)sl_state.flags, "nmg_split_loops_into_faces: flags");
+    bu_free((genptr_t)sl_state.flags, "nmg_split_loops_into_faces: flags");
 
     return count;
 }
@@ -4262,7 +4262,7 @@
 
     if (!missed_faces) {
 	/* nothing to do, just one shell */
-	bu_free((char *)flags, "nmg_decompose_shell: flags ");
+	bu_free((genptr_t)flags, "nmg_decompose_shell: flags ");
 	bu_ptbl_free(&stack);
 	bu_ptbl_free(&shared_edges);
 	return no_of_shells;
@@ -4406,7 +4406,7 @@
 	    }
 	}
 
-	bu_free((char *)shells_at_edge, "nmg_decompose_shell: shells_at_edge");
+	bu_free((genptr_t)shells_at_edge, "nmg_decompose_shell: shells_at_edge");
 
 	/* make a new shell number */
 	if (new_shell_no) {
@@ -4537,7 +4537,7 @@
 	bu_ptbl_free(&faces);
 	nmg_shell_a(new_s, tol);
     }
-    bu_free((char *)flags, "nmg_decompose_shell: flags ");
+    bu_free((genptr_t)flags, "nmg_decompose_shell: flags ");
     bu_ptbl_free(&stack);
     bu_ptbl_free(&shared_edges);
 
@@ -4738,7 +4738,7 @@
 
     count = ub_state.unbroken;
 
-    bu_free((char *)ub_state.flags, "nmg_unbreak_region_edges: flags");
+    bu_free((genptr_t)ub_state.flags, "nmg_unbreak_region_edges: flags");
 
     return count;
 }
@@ -5282,7 +5282,7 @@
 	    for (edge_no=0; edge_no<BU_PTBL_END(int_faces); edge_no++) {
 		i_fus = (struct intersect_fus *)BU_PTBL_GET(int_faces, edge_no);
 
-		bu_free((char *)i_fus, "nmg_get_edge_lines: i_fus");
+		bu_free((genptr_t)i_fus, "nmg_get_edge_lines: i_fus");
 	    }
 	    return 1;
 	}
@@ -5605,7 +5605,7 @@
 	i_fus->free_edge = 1;
 
     bu_ptbl_rm(int_faces, (long *)j_fus);
-    bu_free((char *)j_fus, "nmg_split_edges_at_pts: j_fus ");
+    bu_free((genptr_t)j_fus, "nmg_split_edges_at_pts: j_fus ");
 
 }
 
@@ -6715,7 +6715,7 @@
 	if (bn_isect_planes(new_v->vg_p->coord, (const plane_t *)planes, pl_count)) {
 	    bu_log("nmg_cacl_new_v: Cannot solve for new geometry at (%f %f %f)\n",
 		   V3ARGS(new_v->vg_p->coord));
-	    bu_free((char *)planes, "nmg_calc_new_v: planes");
+	    bu_free((genptr_t)planes, "nmg_calc_new_v: planes");
 	    return 1;
 	}
     } else if (pl_count == 1) {
@@ -6730,20 +6730,20 @@
 	pl_count = 3;
 	if (bn_mkpoint_3planes(new_v->vg_p->coord, planes[0], planes[1], planes[2])) {
 	    bu_log("nmg_cacl_new_v: 3 planes do not intersect at a point\n");
-	    bu_free((char *)planes, "nmg_calc_new_v: planes");
+	    bu_free((genptr_t)planes, "nmg_calc_new_v: planes");
 	    return 1;
 	}
     } else {
 	bu_log("nmg_calc_new_v: No face planes at vertex x%x (%f %f %f)\n",
 	       new_v, V3ARGS(new_v->vg_p->coord));
-	bu_free((char *)planes, "nmg_calc_new_v: planes");
+	bu_free((genptr_t)planes, "nmg_calc_new_v: planes");
 	return 1;
     }
 
     if (rt_g.NMG_debug & DEBUG_BASIC)
 	bu_log("\tnew_v = (%f %f %f)\n", V3ARGS(new_v->vg_p->coord));
 
-    bu_free((char *)planes, "nmg_calc_new_v: planes");
+    bu_free((genptr_t)planes, "nmg_calc_new_v: planes");
 
     for (i=0; i<BU_PTBL_END(int_faces); i++) {
 	struct intersect_fus *fus;
@@ -6878,10 +6878,10 @@
 	if (bn_isect_planes(new_v->vg_p->coord, (const plane_t *)planes, plane_count)) {
 	    bu_log("nmg_complex_vertex_solve: Could not calculate new geometry at (%f %f %f)\n",
 		   V3ARGS(new_v->vg_p->coord));
-	    bu_free((char *) planes, "nmg_complex_vertex_solve: planes");
+	    bu_free((genptr_t) planes, "nmg_complex_vertex_solve: planes");
 	    return 1;
 	}
-	bu_free((char *) planes, "nmg_complex_vertex_solve: planes");
+	bu_free((genptr_t) planes, "nmg_complex_vertex_solve: planes");
 
 	if (rt_g.NMG_debug & DEBUG_BASIC)
 	    bu_log("nmg_complex_vertex_solve: new coords = (%f %f %f)\n",
@@ -6936,7 +6936,7 @@
 	struct intersect_fus *i_fus;
 
 	i_fus = (struct intersect_fus *)BU_PTBL_GET(&int_faces, i);
-	bu_free((char *)i_fus, "nmg_complex_vertex_solve: intersect_fus struct\n");
+	bu_free((genptr_t)i_fus, "nmg_complex_vertex_solve: intersect_fus struct\n");
     }
     bu_ptbl_free(&int_faces);
 
@@ -7299,7 +7299,7 @@
 		    if (nmg_find_isect_faces(vu->v_p, &faces, &count, tol) > 3) {
 			bu_log("mg_move_edge_thru_pt: Cannot handle complex vertices\n");
 			bu_ptbl_free(&faces);
-			bu_free((char *)flags, "mg_move_edge_thru_pt: flags");
+			bu_free((genptr_t)flags, "mg_move_edge_thru_pt: flags");
 			return 1;
 		    }
 
@@ -7307,7 +7307,7 @@
 			/* failed */
 			bu_log("nmg_move_edge_thru_pt: Could not solve simple vertex\n");
 			bu_ptbl_free(&faces);
-			bu_free((char *)flags, "mg_move_edge_thru_pt: flags");
+			bu_free((genptr_t)flags, "mg_move_edge_thru_pt: flags");
 			return 1;
 		    }
 		}
@@ -7326,7 +7326,7 @@
 		    if (nmg_find_isect_faces(vu->v_p, &faces, &count, tol) > 3) {
 			bu_log("mg_move_edge_thru_pt: Cannot handle complex vertices\n");
 			bu_ptbl_free(&faces);
-			bu_free((char *)flags, "mg_move_edge_thru_pt: flags");
+			bu_free((genptr_t)flags, "mg_move_edge_thru_pt: flags");
 			return 1;
 		    }
 
@@ -7350,7 +7350,7 @@
 			    /* failed */
 			    bu_log("nmg_move_edge_thru_pt: Could not solve simple vertex\n");
 			    bu_ptbl_free(&faces);
-			    bu_free((char *)flags, "mg_move_edge_thru_pt: flags");
+			    bu_free((genptr_t)flags, "mg_move_edge_thru_pt: flags");
 			    return 1;
 			}
 		    }
@@ -7376,7 +7376,7 @@
     }
     while (fu != fu1 && fu != fu1->fumate_p);
 
-    bu_free((char *)flags, "mg_move_edge_thru_pt: flags");
+    bu_free((genptr_t)flags, "mg_move_edge_thru_pt: flags");
     bu_ptbl_free(&faces);
 
     return 0;
@@ -8210,7 +8210,7 @@
 	    }
 	}
 	bu_ptbl_rm(&dangles, (long *)dang);
-	bu_free((char *)dang, "nmg_open_shells_connect: dang");
+	bu_free((genptr_t)dang, "nmg_open_shells_connect: dang");
     }
 
     bu_ptbl_free(&dangles);
@@ -8342,7 +8342,7 @@
 	}
     }
 
-    bu_free((char *)flags, "nmg_mirror_model: flags ");
+    bu_free((genptr_t)flags, "nmg_mirror_model: flags ");
 }
 
 
@@ -11050,9 +11050,9 @@
 	    fu = fu->fumate_p;
 	    if (fu->orientation != OT_SAME) {
 		bu_log("nmg_bot(): Face has no OT_SAME use!\n");
-		bu_free((char *)bot->vertices, "BOT vertices");
-		bu_free((char *)bot->faces, "BOT faces");
-		bu_free((char *)bot, "BOT");
+		bu_free((genptr_t)bot->vertices, "BOT vertices");
+		bu_free((genptr_t)bot->faces, "BOT faces");
+		bu_free((genptr_t)bot, "BOT");
 		return (struct rt_bot_internal *)NULL;
 	    }
 	}
@@ -11099,9 +11099,9 @@
 	    fu = fu->fumate_p;
 	    if (fu->orientation != OT_SAME) {
 		bu_log("nmg_bot(): Face has no OT_SAME use!\n");
-		bu_free((char *)bot->vertices, "BOT vertices");
-		bu_free((char *)bot->faces, "BOT faces");
-		bu_free((char *)bot, "BOT");
+		bu_free((genptr_t)bot->vertices, "BOT vertices");
+		bu_free((genptr_t)bot->faces, "BOT faces");
+		bu_free((genptr_t)bot, "BOT");
 		return (struct rt_bot_internal *)NULL;
 	    }
 	}
@@ -11116,9 +11116,9 @@
 	    for (BU_LIST_FOR (eu, edgeuse, &lu->down_hd)) {
 		if (vertex_no > 2) {
 		    bu_log("nmg_bot(): Face has not been triangulated!\n");
-		    bu_free((char *)bot->vertices, "BOT vertices");
-		    bu_free((char *)bot->faces, "BOT faces");
-		    bu_free((char *)bot, "BOT");
+		    bu_free((genptr_t)bot->vertices, "BOT vertices");
+		    bu_free((genptr_t)bot->faces, "BOT faces");
+		    bu_free((genptr_t)bot, "BOT");
 		    return (struct rt_bot_internal *)NULL;
 		}
 
Index: librt/primitives/metaball/metaball.c
===================================================================
--- librt/primitives/metaball/metaball.c	(revision 54048)
+++ librt/primitives/metaball/metaball.c	(working copy)
@@ -629,7 +629,7 @@
 {
     struct rt_metaball_internal *metaball = (struct rt_metaball_internal *)stp->st_specific;
 
-    bu_free((char *)metaball, "rt_metaball_internal");
+    bu_free((genptr_t)metaball, "rt_metaball_internal");
 }
 
 
@@ -871,7 +871,7 @@
     if (metaball->metaball_ctrl_head.magic != 0)
 	while (BU_LIST_WHILE(mbpt, wdb_metaballpt, &metaball->metaball_ctrl_head)) {
 	    BU_LIST_DEQUEUE(&(mbpt->l));
-	    bu_free((char *)mbpt, "wdb_metaballpt");
+	    bu_free((genptr_t)mbpt, "wdb_metaballpt");
 	}
     bu_free(ip->idb_ptr, "metaball ifree");
     ip->idb_ptr = GENPTR_NULL;
Index: librt/primitives/bot/bot.c
===================================================================
--- librt/primitives/bot/bot.c	(revision 54048)
+++ librt/primitives/bot/bot.c	(working copy)
@@ -3302,7 +3302,7 @@
 	}
     }
 
-    bu_free((char *)verts, "rt_bot_condense: verts");
+    bu_free((genptr_t)verts, "rt_bot_condense: verts");
 
     if (!dead_verts) return 0;
 
Index: librt/primitives/bot/g_bot_include.c
===================================================================
--- librt/primitives/bot/g_bot_include.c	(revision 54048)
+++ librt/primitives/bot/g_bot_include.c	(working copy)
@@ -74,7 +74,7 @@
 	|| m3 < tol->dist_sq
 	|| m4 < tol->dist_sq)
     {
-	bu_free((char *)trip, "getstruct tri_specific");
+	bu_free((genptr_t)trip, "getstruct tri_specific");
 
 	if (RT_G_DEBUG & DEBUG_SHOOT) {
 	    bu_log("%s: degenerate facet #%zu\n",
@@ -1361,16 +1361,16 @@
     register XGLUE(tri_specific_, TRI_TYPE) *tri, *ptr;
 
     if (bot->bot_facearray) {
-	bu_free((char *)bot->bot_facearray, "bot_facearray");
+	bu_free((genptr_t)bot->bot_facearray, "bot_facearray");
 	bot->bot_facearray = NULL;
     }
 
     if (bot->bot_thickness) {
-	bu_free((char *)bot->bot_thickness, "bot_thickness");
+	bu_free((genptr_t)bot->bot_thickness, "bot_thickness");
 	bot->bot_thickness = NULL;
     }
     if (bot->bot_facemode) {
-	bu_free((char *)bot->bot_facemode, "bot_facemode");
+	bu_free((genptr_t)bot->bot_facemode, "bot_facemode");
 	bot->bot_facemode = NULL;
     }
     ptr = bot->bot_facelist;
@@ -1378,14 +1378,14 @@
 	tri = ptr->tri_forw;
 	if (ptr) {
 	    if (ptr->tri_normals) {
-		bu_free((char *)ptr->tri_normals, "bot tri_specific normals");
+		bu_free((genptr_t)ptr->tri_normals, "bot tri_specific normals");
 	    }
-	    bu_free((char *)ptr, "bot tri_specific");
+	    bu_free((genptr_t)ptr, "bot tri_specific");
 	}
 	ptr = tri;
     }
     bot->bot_facelist = NULL;
-    bu_free((char *)bot, "bot_specific");
+    bu_free((genptr_t)bot, "bot_specific");
 }
 
 
Index: librt/primitives/dsp/dsp.c
===================================================================
--- librt/primitives/dsp/dsp.c	(revision 54048)
+++ librt/primitives/dsp/dsp.c	(working copy)
@@ -75,7 +75,7 @@
 #define IMPORT_FAIL(_s) \
     if (dsp_ip) { \
 	bu_log("rt_dsp_import4(%d) '%V' %s\n", __LINE__, &dsp_ip->dsp_name, _s); \
-	bu_free((char *)dsp_ip, "rt_dsp_import4: dsp_ip"); \
+	bu_free((genptr_t)dsp_ip, "rt_dsp_import4: dsp_ip"); \
     } \
     ip->idb_type = ID_NULL; \
     ip->idb_ptr = (genptr_t)NULL; \
@@ -974,7 +974,7 @@
 	    break;
     }
 
-    bu_free((char *)dsp, "bbox dsp");
+    bu_free((genptr_t)dsp, "bbox dsp");
 
     return 0;
 }
@@ -3173,7 +3173,7 @@
 	    break;
     }
 
-    bu_free((char *)dsp, "dsp_specific");
+    bu_free((genptr_t)dsp, "dsp_specific");
 }
 
 
@@ -4678,7 +4678,7 @@
 	bu_log("Freeing Bogus DSP, VLS string not initialized\n");
 
 
-    bu_free((char *)dsp_ip, "dsp ifree");
+    bu_free((genptr_t)dsp_ip, "dsp ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/xxx/xxx.c
===================================================================
--- librt/primitives/xxx/xxx.c	(revision 54048)
+++ librt/primitives/xxx/xxx.c	(working copy)
@@ -239,7 +239,7 @@
     xxx = (struct xxx_specific *)stp->st_specific;
     if (!xxx) return;
 
-    bu_free((char *)xxx, "xxx_specific");
+    bu_free((genptr_t)xxx, "xxx_specific");
 }
 
 
@@ -415,7 +415,7 @@
     RT_XXX_CK_MAGIC(xxx_ip);
     xxx_ip->magic = 0;			/* sanity */
 
-    bu_free((char *)xxx_ip, "xxx ifree");
+    bu_free((genptr_t)xxx_ip, "xxx ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/pipe/pipe.c
===================================================================
--- librt/primitives/pipe/pipe.c	(revision 54048)
+++ librt/primitives/pipe/pipe.c	(working copy)
@@ -2789,7 +2789,7 @@
 		}
 	    }
 	}
-	bu_free((char *)(*outer_loop), "tesselate_pipe_bend: outer_loop");
+	bu_free((genptr_t)(*outer_loop), "tesselate_pipe_bend: outer_loop");
 	*outer_loop = new_outer_loop;
     } else if ( or > tol->dist && end_or <= tol->dist) {
 	struct vertex *v = (struct vertex *)NULL;
@@ -2862,7 +2862,7 @@
 	    }
 	}
 
-	bu_free((char *)(*outer_loop), "tesselate_pipe_linear: outer_loop");
+	bu_free((genptr_t)(*outer_loop), "tesselate_pipe_linear: outer_loop");
 	outer_loop[0] = &v;
     } else if ( or <= tol->dist && end_or > tol->dist) {
 	point_t pt, pt_next;
@@ -2949,7 +2949,7 @@
 		}
 	    }
 	}
-	bu_free((char *)(*outer_loop), "tesselate_pipe_linear: outer_loop");
+	bu_free((genptr_t)(*outer_loop), "tesselate_pipe_linear: outer_loop");
 	*outer_loop = new_outer_loop;
     }
 
@@ -3107,7 +3107,7 @@
 	    }
 
 	}
-	bu_free((char *)(*inner_loop), "tesselate_pipe_bend: inner_loop");
+	bu_free((genptr_t)(*inner_loop), "tesselate_pipe_bend: inner_loop");
 	*inner_loop = new_inner_loop;
     } else if (ir > tol->dist && end_ir <= tol->dist) {
 	struct vertex *v = (struct vertex *)NULL;
@@ -3182,7 +3182,7 @@
 	    }
 	}
 
-	bu_free((char *)(*inner_loop), "tesselate_pipe_linear: inner_loop");
+	bu_free((genptr_t)(*inner_loop), "tesselate_pipe_linear: inner_loop");
 	inner_loop[0] = &v;
     } else if (ir <= tol->dist && end_ir > tol->dist) {
 	point_t pt, pt_next;
@@ -3269,10 +3269,10 @@
 		}
 	    }
 	}
-	bu_free((char *)(*inner_loop), "tesselate_pipe_linear: inner_loop");
+	bu_free((genptr_t)(*inner_loop), "tesselate_pipe_linear: inner_loop");
 	*inner_loop = new_inner_loop;
     }
-    bu_free((char *)norms, "tesselate_linear_pipe: norms");
+    bu_free((genptr_t)norms, "tesselate_linear_pipe: norms");
 }
 
 
@@ -3543,14 +3543,14 @@
 	    }
 	}
 
-	bu_free((char *)(*outer_loop), "tesselate_pipe_bend: outer_loop");
+	bu_free((genptr_t)(*outer_loop), "tesselate_pipe_bend: outer_loop");
 	*outer_loop = new_outer_loop;
 	VMOVE(old_center, center);
     }
 
     /* release resources, sanity */
     free_vert_tree(vertex_tree);
-    bu_free((char *)vertex_array, "vertex array in pipe.c");
+    bu_free((genptr_t)vertex_array, "vertex array in pipe.c");
     vertex_tree = NULL;
     vertex_array = NULL;
 
@@ -3706,7 +3706,7 @@
 		}
 	    }
 	}
-	bu_free((char *)(*inner_loop), "tesselate_pipe_bend: inner_loop");
+	bu_free((genptr_t)(*inner_loop), "tesselate_pipe_bend: inner_loop");
 	*inner_loop = new_inner_loop;
 	VMOVE(old_center, center);
     }
@@ -3764,7 +3764,7 @@
 
 	fu = nmg_add_loop_to_face(s, fu, verts, arc_segs, OT_OPPOSITE);
 
-	bu_free((char *)verts, "tesselate_pipe_end: verts");
+	bu_free((genptr_t)verts, "tesselate_pipe_end: verts");
     } else if (prev->pp_id > tol->dist) {
 	struct vertexuse *vu;
 
@@ -3979,8 +3979,8 @@
 
     tesselate_pipe_end(pp2, arc_segs, &outer_loop, &inner_loop, s, tol);
 
-    bu_free((char *)outer_loop, "rt_pipe_tess: outer_loop");
-    bu_free((char *)inner_loop, "rt_pipe_tess: inner_loop");
+    bu_free((genptr_t)outer_loop, "rt_pipe_tess: outer_loop");
+    bu_free((genptr_t)inner_loop, "rt_pipe_tess: inner_loop");
 
     nmg_rebound(m, tol);
     nmg_edge_fuse(&s->l.magic, tol);
@@ -4368,7 +4368,7 @@
     if (pip->pipe_segs_head.magic != 0) {
 	while (BU_LIST_WHILE(ptp, wdb_pipept, &pip->pipe_segs_head)) {
 	    BU_LIST_DEQUEUE(&(ptp->l));
-	    bu_free((char *)ptp, "wdb_pipept");
+	    bu_free((genptr_t)ptp, "wdb_pipept");
 	}
     }
     bu_free(ip->idb_ptr, "pipe ifree");
Index: librt/primitives/vol/vol.c
===================================================================
--- librt/primitives/vol/vol.c	(revision 54048)
+++ librt/primitives/vol/vol.c	(working copy)
@@ -732,11 +732,11 @@
     vip = (struct rt_vol_internal *)ip->idb_ptr;
     RT_VOL_CK_MAGIC(vip);
 
-    if (vip->map) bu_free((char *)vip->map, "vol bitmap");
+    if (vip->map) bu_free((genptr_t)vip->map, "vol bitmap");
 
     vip->magic = 0;			/* sanity */
     vip->map = (unsigned char *)0;
-    bu_free((char *)vip, "vol ifree");
+    bu_free((genptr_t)vip, "vol ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
@@ -936,8 +936,8 @@
     register struct rt_vol_specific *volp =
 	(struct rt_vol_specific *)stp->st_specific;
 
-    bu_free((char *)volp->vol_i.map, "vol_map");
-    bu_free((char *)volp, "rt_vol_specific");
+    bu_free((genptr_t)volp->vol_i.map, "vol_map");
+    bu_free((genptr_t)volp, "rt_vol_specific");
 }
 
 
Index: librt/primitives/hyp/hyp.c
===================================================================
--- librt/primitives/hyp/hyp.c	(revision 54048)
+++ librt/primitives/hyp/hyp.c	(working copy)
@@ -600,7 +600,7 @@
     struct hyp_specific *hyp =
 	(struct hyp_specific *)stp->st_specific;
 
-    bu_free((char *)hyp, "hyp_specific");
+    bu_free((genptr_t)hyp, "hyp_specific");
 }
 
 
@@ -1118,13 +1118,13 @@
     nmg_shell_coplanar_face_merge(s, tol, 1);
 
     /* free mem */
-    bu_free((char *)outfaceuses, "faceuse []");
+    bu_free((genptr_t)outfaceuses, "faceuse []");
     for (i = 0; i < nell; i++) {
-	bu_free((char *)ellipses[i], "pts ell");
-	bu_free((char *)vells[i], "vertex []");
+	bu_free((genptr_t)ellipses[i], "pts ell");
+	bu_free((genptr_t)vells[i], "vertex []");
     }
-    bu_free((char *)ellipses, "fastf_t ell[]");
-    bu_free((char *)vells, "vertex [][]");
+    bu_free((genptr_t)ellipses, "fastf_t ell[]");
+    bu_free((genptr_t)vells, "vertex [][]");
 
     /* Assign vertexuse normals */
     nmg_vertex_tabulate(&vert_tab, &s->l.magic);
@@ -1170,13 +1170,13 @@
 
  fail:
     /* free mem */
-    bu_free((char *)outfaceuses, "faceuse []");
+    bu_free((genptr_t)outfaceuses, "faceuse []");
     for (i = 0; i < nell; i++) {
-	bu_free((char *)ellipses[i], "pts ell");
-	bu_free((char *)vells[i], "vertex []");
+	bu_free((genptr_t)ellipses[i], "pts ell");
+	bu_free((genptr_t)vells[i], "vertex []");
     }
-    bu_free((char *)ellipses, "fastf_t ell[]");
-    bu_free((char *)vells, "vertex [][]");
+    bu_free((genptr_t)ellipses, "fastf_t ell[]");
+    bu_free((genptr_t)vells, "vertex [][]");
 
     return -1;
 }
@@ -1347,7 +1347,7 @@
     RT_HYP_CK_MAGIC(hyp_ip);
     hyp_ip->hyp_magic = 0;			/* sanity */
 
-    bu_free((char *)hyp_ip, "hyp ifree");
+    bu_free((genptr_t)hyp_ip, "hyp ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/grip/grip.c
===================================================================
--- librt/primitives/grip/grip.c	(revision 54048)
+++ librt/primitives/grip/grip.c	(working copy)
@@ -202,7 +202,7 @@
 {
     struct grip_specific *gripp = (struct grip_specific *)stp->st_specific;
 
-    bu_free((char *)gripp, "grip_specific");
+    bu_free((genptr_t)gripp, "grip_specific");
 }
 
 
Index: librt/primitives/ebm/ebm.c
===================================================================
--- librt/primitives/ebm/ebm.c	(revision 54048)
+++ librt/primitives/ebm/ebm.c	(working copy)
@@ -539,7 +539,7 @@
     bu_vls_strcpy(&str, rp->ss.ss_args);
     if (bu_struct_parse(&str, rt_ebm_parse, (char *)eip) < 0) {
 	bu_vls_free(&str);
-	bu_free((char *)eip, "rt_ebm_import4: eip");
+	bu_free((genptr_t)eip, "rt_ebm_import4: eip");
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
 	return -2;
@@ -552,7 +552,7 @@
 	eip->tallness <= 0.0) {
 	bu_struct_print("Unreasonable EBM parameters", rt_ebm_parse,
 			(char *)eip);
-	bu_free((char *)eip, "rt_ebm_import4: eip");
+	bu_free((genptr_t)eip, "rt_ebm_import4: eip");
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
 	return -1;
@@ -567,7 +567,7 @@
     mp = bu_open_mapped_file_with_path(dbip->dbi_filepath, eip->file, "ebm");
     if (!mp) {
 	bu_log("rt_ebm_import4() unable to open '%s'\n", eip->file);
-	bu_free((char *)eip, "rt_ebm_import4: eip");
+	bu_free((genptr_t)eip, "rt_ebm_import4: eip");
     fail:
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
@@ -684,7 +684,7 @@
     bu_vls_strcpy(&str, (const char *)ep->ext_buf);
     if (bu_struct_parse(&str, rt_ebm_parse, (char *)eip) < 0) {
 	bu_vls_free(&str);
-	bu_free((char *)eip, "rt_ebm_import4: eip");
+	bu_free((genptr_t)eip, "rt_ebm_import4: eip");
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
 	return -2;
@@ -697,7 +697,7 @@
 	eip->tallness <= 0.0) {
 	bu_struct_print("Unreasonable EBM parameters", rt_ebm_parse,
 			(char *)eip);
-	bu_free((char *)eip, "rt_ebm_import4: eip");
+	bu_free((genptr_t)eip, "rt_ebm_import4: eip");
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
 	return -1;
@@ -712,7 +712,7 @@
     mp = bu_open_mapped_file_with_path(dbip->dbi_filepath, eip->file, "ebm");
     if (!mp) {
 	bu_log("rt_ebm_import4() unable to open '%s'\n", eip->file);
-	bu_free((char *)eip, "rt_ebm_import4: eip");
+	bu_free((genptr_t)eip, "rt_ebm_import4: eip");
     fail:
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
@@ -857,7 +857,7 @@
 
     eip->magic = 0;			/* sanity */
     eip->mp = (struct bu_mapped_file *)0;
-    bu_free((char *)eip, "ebm ifree");
+    bu_free((genptr_t)eip, "ebm ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
     ip->idb_type = ID_NULL;		/* sanity */
 }
@@ -1099,7 +1099,7 @@
     BU_CK_MAPPED_FILE(ebmp->ebm_i.mp);
     bu_close_mapped_file(ebmp->ebm_i.mp);
 
-    bu_free((char *)ebmp, "rt_ebm_specific");
+    bu_free((genptr_t)ebmp, "rt_ebm_specific");
 }
 
 
@@ -1549,22 +1549,22 @@
 
     (void)nmg_mark_edges_real(&s->l.magic);
 
-    bu_free((char *)vertp, "rt_ebm_tess: vertp");
-    bu_free((char *)loop_verts, "rt_ebm_tess: loop_verts");
+    bu_free((genptr_t)vertp, "rt_ebm_tess: vertp");
+    bu_free((genptr_t)loop_verts, "rt_ebm_tess: loop_verts");
     while (BU_LIST_NON_EMPTY(&edges.l)) {
 	e = BU_LIST_FIRST(ebm_edge, &edges.l);
 	BU_LIST_DEQUEUE(&e->l);
-	bu_free((char *)e, "rt_ebm_tess: e");
+	bu_free((genptr_t)e, "rt_ebm_tess: e");
     }
     return 0;
 
 fail:
-    bu_free((char *)vertp, "rt_ebm_tess: vertp");
-    bu_free((char *)loop_verts, "rt_ebm_tess: loop_verts");
+    bu_free((genptr_t)vertp, "rt_ebm_tess: vertp");
+    bu_free((genptr_t)loop_verts, "rt_ebm_tess: loop_verts");
     while (BU_LIST_NON_EMPTY(&edges.l)) {
 	e = BU_LIST_FIRST(ebm_edge, &edges.l);
 	BU_LIST_DEQUEUE(&e->l);
-	bu_free((char *)e, "rt_ebm_tess: e");
+	bu_free((genptr_t)e, "rt_ebm_tess: e");
     }
 
     return -1;
Index: librt/primitives/tor/tor.c
===================================================================
--- librt/primitives/tor/tor.c	(revision 54048)
+++ librt/primitives/tor/tor.c	(working copy)
@@ -784,9 +784,9 @@
     }
 
     /* Free tmp space used */
-    bu_free((char *)C, "tor C");
-    bu_free((char *)val, "tor val");
-    bu_free((char *)cor_proj, "tor cor_proj");
+    bu_free((genptr_t)C, "tor C");
+    bu_free((genptr_t)val, "tor val");
+    bu_free((genptr_t)cor_proj, "tor cor_proj");
 }
 
 
@@ -932,7 +932,7 @@
     register struct tor_specific *tor =
 	(struct tor_specific *)stp->st_specific;
 
-    bu_free((char *)tor, "tor_specific");
+    bu_free((genptr_t)tor, "tor_specific");
 }
 
 
@@ -1224,7 +1224,7 @@
 	}
     }
 
-    bu_free((char *)pts, "rt_tor_plot pts[]");
+    bu_free((genptr_t)pts, "rt_tor_plot pts[]");
     return 0;
 }
 
@@ -1399,10 +1399,10 @@
     /* Compute "geometry" for region and shell */
     nmg_region_a(*r, tol);
 
-    bu_free((char *)pts, "rt_tor_tess pts[]");
-    bu_free((char *)verts, "rt_tor_tess *verts[]");
-    bu_free((char *)faces, "rt_tor_tess *faces[]");
-    bu_free((char *)norms, "rt_tor_tess norms[]");
+    bu_free((genptr_t)pts, "rt_tor_tess pts[]");
+    bu_free((genptr_t)verts, "rt_tor_tess *verts[]");
+    bu_free((genptr_t)faces, "rt_tor_tess *faces[]");
+    bu_free((genptr_t)norms, "rt_tor_tess norms[]");
     return 0;
 }
 
@@ -1739,7 +1739,7 @@
     tip = (struct rt_tor_internal *)ip->idb_ptr;
     RT_TOR_CK_MAGIC(tip);
 
-    bu_free((char *)tip, "rt_tor_internal");
+    bu_free((genptr_t)tip, "rt_tor_internal");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/epa/epa.c
===================================================================
--- librt/primitives/epa/epa.c	(revision 54048)
+++ librt/primitives/epa/epa.c	(working copy)
@@ -635,7 +635,7 @@
 	(struct epa_specific *)stp->st_specific;
 
 
-    bu_free((char *)epa, "epa_specific");
+    bu_free((genptr_t)epa, "epa_specific");
 }
 
 
@@ -1013,7 +1013,7 @@
 
 	    /* get next node before freeing */
 	    next = pos_b->next;
-	    bu_free((char *)pos_b, "rt_pt_node");
+	    bu_free((genptr_t)pos_b, "rt_pt_node");
 	    pos_b = next;
 	}
 	/* construct parabola along semi-major axis of epa using same
@@ -1129,10 +1129,10 @@
 
     /* free mem */
     for (i = 0; i < nell; i++) {
-	bu_free((char *)ellipses[i], "pts ell");
+	bu_free((genptr_t)ellipses[i], "pts ell");
     }
-    bu_free((char *)ellipses, "fastf_t ell[]");
-    bu_free((char *)pts_dbl, "dbl ints");
+    bu_free((genptr_t)ellipses, "fastf_t ell[]");
+    bu_free((genptr_t)pts_dbl, "dbl ints");
 
     return 0;
 }
@@ -1313,7 +1313,7 @@
 	    struct rt_pt_node *tmp;
 
 	    tmp = pos_b->next;
-	    bu_free((char *)pos_b, "rt_pt_node");
+	    bu_free((genptr_t)pos_b, "rt_pt_node");
 	    pos_b = tmp;
 	}
 	/* construct parabola along semi-major axis of epa
@@ -1588,27 +1588,27 @@
     nmg_shell_coplanar_face_merge(s, tol, 1);
 
     /* free mem */
-    bu_free((char *)outfaceuses, "faceuse []");
+    bu_free((genptr_t)outfaceuses, "faceuse []");
     for (i = 0; i < nell; i++) {
-	bu_free((char *)ellipses[i], "pts ell");
-	bu_free((char *)vells[i], "vertex []");
+	bu_free((genptr_t)ellipses[i], "pts ell");
+	bu_free((genptr_t)vells[i], "vertex []");
     }
-    bu_free((char *)ellipses, "fastf_t ell[]");
-    bu_free((char *)pts_dbl, "dbl ints");
-    bu_free((char *)vells, "vertex [][]");
+    bu_free((genptr_t)ellipses, "fastf_t ell[]");
+    bu_free((genptr_t)pts_dbl, "dbl ints");
+    bu_free((genptr_t)vells, "vertex [][]");
 
     return 0;
 
  fail:
     /* free mem */
-    bu_free((char *)outfaceuses, "faceuse []");
+    bu_free((genptr_t)outfaceuses, "faceuse []");
     for (i = 0; i < nell; i++) {
-	bu_free((char *)ellipses[i], "pts ell");
-	bu_free((char *)vells[i], "vertex []");
+	bu_free((genptr_t)ellipses[i], "pts ell");
+	bu_free((genptr_t)vells[i], "vertex []");
     }
-    bu_free((char *)ellipses, "fastf_t ell[]");
-    bu_free((char *)pts_dbl, "dbl ints");
-    bu_free((char *)vells, "vertex [][]");
+    bu_free((genptr_t)ellipses, "fastf_t ell[]");
+    bu_free((genptr_t)pts_dbl, "dbl ints");
+    bu_free((genptr_t)vells, "vertex [][]");
 
     return -1;
 }
@@ -1677,7 +1677,7 @@
 
     if (xip->epa_r1 <= SMALL_FASTF || xip->epa_r2 <= SMALL_FASTF) {
 	bu_log("rt_epa_import4: r1 or r2 are zero\n");
-	bu_free((char *)ip->idb_ptr, "rt_epa_import4: ip->idb_ptr");
+	bu_free((genptr_t)ip->idb_ptr, "rt_epa_import4: ip->idb_ptr");
 	return -1;
     }
 
@@ -1789,7 +1789,7 @@
 
     if (xip->epa_r1 <= SMALL_FASTF || xip->epa_r2 <= SMALL_FASTF) {
 	bu_log("rt_epa_import4: r1 or r2 are zero\n");
-	bu_free((char *)ip->idb_ptr, "rt_epa_import4: ip->idb_ptr");
+	bu_free((genptr_t)ip->idb_ptr, "rt_epa_import4: ip->idb_ptr");
 	return -1;
     }
 
@@ -1919,7 +1919,7 @@
     RT_EPA_CK_MAGIC(xip);
     xip->epa_magic = 0;		/* sanity */
 
-    bu_free((char *)xip, "epa ifree");
+    bu_free((genptr_t)xip, "epa ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/primitives/part/part.c
===================================================================
--- librt/primitives/part/part.c	(revision 54048)
+++ librt/primitives/part/part.c	(working copy)
@@ -894,7 +894,7 @@
     register struct part_specific *part =
 	(struct part_specific *)stp->st_specific;
 
-    bu_free((char *)part, "part_specific");
+    bu_free((genptr_t)part, "part_specific");
     stp->st_specific = GENPTR_NULL;
 }
 
@@ -1417,29 +1417,29 @@
     /* Release memory */
     /* All strips have vertices and normals */
     for (i=0; i<nstrips; i++) {
-	bu_free((char *)strips[i].vp, "strip vertex[]");
-	bu_free((char *)strips[i].norms, "strip norms[]");
+	bu_free((genptr_t)strips[i].vp, "strip vertex[]");
+	bu_free((genptr_t)strips[i].norms, "strip norms[]");
     }
     /* All strips have faces, except for equator */
     for (i=0; i < nstrips; i++) {
 	if (strips[i].fu == (struct faceuse **)0) continue;
-	bu_free((char *)strips[i].fu, "strip faceuse[]");
+	bu_free((genptr_t)strips[i].fu, "strip faceuse[]");
     }
-    bu_free((char *)strips, "strips[]");
+    bu_free((genptr_t)strips, "strips[]");
     return 0;
  fail:
     /* Release memory */
     /* All strips have vertices and normals */
     for (i=0; i<nstrips; i++) {
-	bu_free((char *)strips[i].vp, "strip vertex[]");
-	bu_free((char *)strips[i].norms, "strip norms[]");
+	bu_free((genptr_t)strips[i].vp, "strip vertex[]");
+	bu_free((genptr_t)strips[i].norms, "strip norms[]");
     }
     /* All strips have faces, except for equator */
     for (i=0; i < nstrips; i++) {
 	if (strips[i].fu == (struct faceuse **)0) continue;
-	bu_free((char *)strips[i].fu, "strip faceuse[]");
+	bu_free((genptr_t)strips[i].fu, "strip faceuse[]");
     }
-    bu_free((char *)strips, "strips[]");
+    bu_free((genptr_t)strips, "strips[]");
     return -1;
 }
 
Index: librt/primitives/submodel/submodel.c
===================================================================
--- librt/primitives/submodel/submodel.c	(revision 54048)
+++ librt/primitives/submodel/submodel.c	(working copy)
@@ -839,7 +839,7 @@
     if (bu_struct_parse(&str, rt_submodel_parse, (char *)sip) < 0) {
 	bu_vls_free(&str);
     fail:
-	bu_free((char *)sip, "rt_submodel_import4: sip");
+	bu_free((genptr_t)sip, "rt_submodel_import4: sip");
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
 	return -2;
@@ -925,7 +925,7 @@
     if (bu_struct_parse(&str, rt_submodel_parse, (char *)sip) < 0) {
 	bu_vls_free(&str);
     fail:
-	bu_free((char *)sip, "rt_submodel_import4: sip");
+	bu_free((genptr_t)sip, "rt_submodel_import4: sip");
 	ip->idb_type = ID_NULL;
 	ip->idb_ptr = (genptr_t)NULL;
 	return -2;
Index: librt/primitives/ell/ell.c
===================================================================
--- librt/primitives/ell/ell.c	(revision 54048)
+++ librt/primitives/ell/ell.c	(working copy)
@@ -614,7 +614,7 @@
     register struct ell_specific *ell =
 	(struct ell_specific *)stp->st_specific;
 
-    bu_free((char *)ell, "ell_specific");
+    bu_free((genptr_t)ell, "ell_specific");
 }
 
 
@@ -1240,29 +1240,29 @@
     /* Release memory */
     /* All strips have vertices and normals */
     for (i=0; i<nstrips; i++) {
-	bu_free((char *)strips[i].vp, "strip vertex[]");
-	bu_free((char *)strips[i].norms, "strip norms[]");
+	bu_free((genptr_t)strips[i].vp, "strip vertex[]");
+	bu_free((genptr_t)strips[i].norms, "strip norms[]");
     }
     /* All strips have faces, except for equator */
     for (i=0; i < nstrips; i++) {
 	if (strips[i].fu == (struct faceuse **)0) continue;
-	bu_free((char *)strips[i].fu, "strip faceuse[]");
+	bu_free((genptr_t)strips[i].fu, "strip faceuse[]");
     }
-    bu_free((char *)strips, "strips[]");
+    bu_free((genptr_t)strips, "strips[]");
     return 0;
 fail:
     /* Release memory */
     /* All strips have vertices and normals */
     for (i=0; i<nstrips; i++) {
-	bu_free((char *)strips[i].vp, "strip vertex[]");
-	bu_free((char *)strips[i].norms, "strip norms[]");
+	bu_free((genptr_t)strips[i].vp, "strip vertex[]");
+	bu_free((genptr_t)strips[i].norms, "strip norms[]");
     }
     /* All strips have faces, except for equator */
     for (i=0; i < nstrips; i++) {
 	if (strips[i].fu == (struct faceuse **)0) continue;
-	bu_free((char *)strips[i].fu, "strip faceuse[]");
+	bu_free((genptr_t)strips[i].fu, "strip faceuse[]");
     }
-    bu_free((char *)strips, "strips[]");
+    bu_free((genptr_t)strips, "strips[]");
     return -1;
 }
 
Index: librt/primitives/rhc/rhc.c
===================================================================
--- librt/primitives/rhc/rhc.c	(revision 54048)
+++ librt/primitives/rhc/rhc.c	(working copy)
@@ -715,7 +715,7 @@
     struct rhc_specific *rhc =
 	(struct rhc_specific *)stp->st_specific;
 
-    bu_free((char *)rhc, "rhc_specific");
+    bu_free((genptr_t)rhc, "rhc_specific");
 }
 
 
@@ -1106,8 +1106,8 @@
     }
 
     /* free mem */
-    bu_free((char *)front, "fastf_t");
-    bu_free((char *)back, "fastf_t");
+    bu_free((genptr_t)front, "fastf_t");
+    bu_free((genptr_t)back, "fastf_t");
 
     return 0;
 }
@@ -1446,13 +1446,13 @@
 
 fail:
     /* free mem */
-    bu_free((char *)front, "fastf_t");
-    bu_free((char *)back, "fastf_t");
-    bu_free((char *)vfront, "vertex *");
-    bu_free((char *)vback, "vertex *");
-    bu_free((char *)vtemp, "vertex *");
-    bu_free((char *)norms, "rt_rhc_tess: norms");
-    bu_free((char *)outfaceuses, "faceuse *");
+    bu_free((genptr_t)front, "fastf_t");
+    bu_free((genptr_t)back, "fastf_t");
+    bu_free((genptr_t)vfront, "vertex *");
+    bu_free((genptr_t)vback, "vertex *");
+    bu_free((genptr_t)vtemp, "vertex *");
+    bu_free((genptr_t)norms, "rt_rhc_tess: norms");
+    bu_free((genptr_t)outfaceuses, "faceuse *");
 
     return failure;
 }
@@ -1524,7 +1524,7 @@
 
     if (xip->rhc_r <= SMALL_FASTF || xip->rhc_c <= SMALL_FASTF) {
 	bu_log("rt_rhc_import4: r or c are zero\n");
-	bu_free((char *)ip->idb_ptr, "rt_rhc_import4: ip->idb_ptr");
+	bu_free((genptr_t)ip->idb_ptr, "rt_rhc_import4: ip->idb_ptr");
 	return -1;
     }
 
@@ -1623,7 +1623,7 @@
 
     if (xip->rhc_r <= SMALL_FASTF || xip->rhc_c <= SMALL_FASTF) {
 	bu_log("rt_rhc_import4: r or c are zero\n");
-	bu_free((char *)ip->idb_ptr, "rt_rhc_import4: ip->idb_ptr");
+	bu_free((genptr_t)ip->idb_ptr, "rt_rhc_import4: ip->idb_ptr");
 	return -1;
     }
 
@@ -1744,7 +1744,7 @@
     RT_RHC_CK_MAGIC(xip);
     xip->rhc_magic = 0;		/* sanity */
 
-    bu_free((char *)xip, "rhc ifree");
+    bu_free((genptr_t)xip, "rhc ifree");
     ip->idb_ptr = GENPTR_NULL;	/* sanity */
 }
 
Index: librt/vshoot.c
===================================================================
--- librt/vshoot.c	(revision 54048)
+++ librt/vshoot.c	(working copy)
@@ -363,9 +363,9 @@
 #endif
 
 out:
-    bu_free((char *)ary_stp, "*ary_stp[]");
-    bu_free((char *)ary_rp, "*ary_rp[]");
-    bu_free((char *)ary_seg, "ary_seg[]");
+    bu_free((genptr_t)ary_stp, "*ary_stp[]");
+    bu_free((genptr_t)ary_rp, "*ary_rp[]");
+    bu_free((genptr_t)ary_seg, "ary_seg[]");
 
     if (solidbits != NULL) {
 	bu_bitv_free(solidbits);
Index: librt/db_fullpath.c
===================================================================
--- librt/db_fullpath.c	(revision 54048)
+++ librt/db_fullpath.c	(working copy)
@@ -317,7 +317,7 @@
     RT_CK_FULL_PATH(pp);
 
     if (pp->fp_maxlen > 0) {
-	bu_free((char *)pp->fp_names, "db_full_path array");
+	bu_free((genptr_t)pp->fp_names, "db_full_path array");
 	pp->fp_maxlen = pp->fp_len = 0;
 	pp->fp_names = (struct directory **)0;
     }
Index: librt/oslo_calc.c
===================================================================
--- librt/oslo_calc.c	(revision 54048)
+++ librt/oslo_calc.c	(working copy)
@@ -221,8 +221,8 @@
     while (om != (struct oslo_mat *) 0) {
 	omp = om;
 	om = om->next;
-	bu_free((char *)omp->o_vec, "rt_nurb_free_oslo: ovec");
-	bu_free((char *)omp, "rt_nurb_free_oslo: struct oslo");
+	bu_free((genptr_t)omp->o_vec, "rt_nurb_free_oslo: ovec");
+	bu_free((genptr_t)omp, "rt_nurb_free_oslo: struct oslo");
     }
 }
 
Index: librt/comb/comb.c
===================================================================
--- librt/comb/comb.c	(revision 54048)
+++ librt/comb/comb.c	(working copy)
@@ -547,7 +547,7 @@
 			sizeof(mat_t), "v5comb mat");
 		    bn_mat_mul(tp->tr_l.tl_mat, mat, diskmat);
 		    if (bn_mat_is_identity(tp->tr_l.tl_mat)) {
-			bu_free((char *)tp->tr_l.tl_mat, "tl_mat");
+			bu_free((genptr_t)tp->tr_l.tl_mat, "tl_mat");
 			tp->tr_l.tl_mat = (matp_t)NULL;
 		    }
 		}
@@ -596,15 +596,15 @@
 		comb->tree = (union tree *)NULL;
 		bu_ptbl_free(tbl1);
 		bu_ptbl_free(tbl2);
-		bu_free((char *)tbl1, "rt_comb_import5: tbl1");
-		bu_free((char *)tbl2, "rt_comb_import5: tbl2");
+		bu_free((genptr_t)tbl1, "rt_comb_import5: tbl1");
+		bu_free((genptr_t)tbl2, "rt_comb_import5: tbl2");
 		break;
 	    } else if (BU_PTBL_LEN(tbl2) == 1) {
 		comb->tree = (union tree *)BU_PTBL_GET(tbl2, 0);
 		bu_ptbl_free(tbl1);
 		bu_ptbl_free(tbl2);
-		bu_free((char *)tbl1, "rt_comb_import5: tbl1");
-		bu_free((char *)tbl2, "rt_comb_import5: tbl2");
+		bu_free((genptr_t)tbl1, "rt_comb_import5: tbl1");
+		bu_free((genptr_t)tbl2, "rt_comb_import5: tbl2");
 		break;
 	    }
 
@@ -670,7 +670,7 @@
 			    sizeof(mat_t), "v5comb mat");
 			bn_mat_mul(tp->tr_l.tl_mat, mat, diskmat);
 			if (bn_mat_is_identity(tp->tr_l.tl_mat)) {
-			    bu_free((char *)tp->tr_l.tl_mat, "tl_mat");
+			    bu_free((genptr_t)tp->tr_l.tl_mat, "tl_mat");
 			    tp->tr_l.tl_mat = (matp_t)NULL;
 			}
 		    }
Index: librt/comb/db_comb.c
===================================================================
--- librt/comb/db_comb.c	(revision 54048)
+++ librt/comb/db_comb.c	(working copy)
@@ -560,7 +560,7 @@
 
     rp[0].c.c_inherit = comb->inherit;
 
-    if (rt_tree_array) bu_free((char *)rt_tree_array, "rt_tree_array");
+    if (rt_tree_array) bu_free((genptr_t)rt_tree_array, "rt_tree_array");
 
     return 0;		/* OK */
 }
Index: librt/tree.c
===================================================================
--- librt/tree.c	(revision 54048)
+++ librt/tree.c	(working copy)
@@ -630,7 +630,7 @@
 	    stp->st_meth->ft_free(stp);
 	stp->st_aradius = 0;
     }
-    if (stp->st_matp) bu_free((char *)stp->st_matp, "st_matp");
+    if (stp->st_matp) bu_free((genptr_t)stp->st_matp, "st_matp");
     stp->st_matp = (matp_t)0;	/* Sanity */
 
     bu_ptbl_free(&stp->st_regions);
@@ -642,7 +642,7 @@
 	db_free_full_path(&stp->st_path);
     }
 
-    bu_free((char *)stp, "struct soltab");
+    bu_free((genptr_t)stp, "struct soltab");
 }
 
 
Index: librt/vlist.c
===================================================================
--- librt/vlist.c	(revision 54048)
+++ librt/vlist.c	(working copy)
@@ -89,9 +89,9 @@
 	BN_FREE_VLIST(vbp->free_vlist_hd, &(vbp->head[i]));
     }
 
-    bu_free((char *)(vbp->head), "head[]");
-    bu_free((char *)(vbp->rgb), "rgb[]");
-    bu_free((char *)vbp, "bn_vlblock");
+    bu_free((genptr_t)(vbp->head), "head[]");
+    bu_free((genptr_t)(vbp->rgb), "rgb[]");
+    bu_free((genptr_t)vbp, "bn_vlblock");
 
 }
 
@@ -241,7 +241,7 @@
     while (BU_LIST_WHILE(vp, bn_vlist, hd)) {
 	BN_CK_VLIST(vp);
 	BU_LIST_DEQUEUE(&(vp->l));
-	bu_free((char *)vp, "bn_vlist");
+	bu_free((genptr_t)vp, "bn_vlist");
     }
 }
 
Index: librt/mater.c
===================================================================
--- librt/mater.c	(revision 54048)
+++ librt/mater.c	(working copy)
@@ -74,7 +74,7 @@
 	    newp->mt_forw = zot->mt_forw;
 	    bu_log("dropping overlapping region-id based material property entry:\n");
 	    rt_pr_mater(zot);
-	    bu_free((char *)zot, "getstruct mater");
+	    bu_free((genptr_t)zot, "getstruct mater");
 	    continue;
 	}
 	if (newp->mt_high >= newp->mt_forw->mt_low) {
@@ -120,7 +120,7 @@
 	    newp->mt_forw = mp->mt_forw;
 	    rt_pr_mater(mp);
 	    *mp = *newp;		/* struct copy */
-	    bu_free((char *)newp, "getstruct mater");
+	    bu_free((genptr_t)newp, "getstruct mater");
 	    newp = mp;
 	    _rt_check_overlap(newp);
 	    return;
@@ -305,7 +305,7 @@
     while ((mp = material_head) != MATER_NULL) {
 	material_head = mp->mt_forw;	/* Dequeue 'mp' */
 	/* mt_handle? */
-	bu_free((char *)mp, "getstruct mater");
+	bu_free((genptr_t)mp, "getstruct mater");
 	mp = MATER_NULL;
     }
 }
Index: librt/memalloc.c
===================================================================
--- librt/memalloc.c	(revision 54048)
+++ librt/memalloc.c	(working copy)
@@ -356,7 +356,7 @@
 
     while ((mp = rt_mem_freemap) != MAP_NULL) {
 	rt_mem_freemap = mp->m_nxtp;
-	bu_free((char *)mp, "struct mem_map " BU_FLSTR);
+	bu_free((genptr_t)mp, "struct mem_map " BU_FLSTR);
     }
 }
 
Index: librt/db_alloc.c
===================================================================
--- librt/db_alloc.c	(revision 54048)
+++ librt/db_alloc.c	(working copy)
@@ -211,7 +211,7 @@
     for (i=0; i < todo; i++)
 	rp[i].u_id = ID_FREE;
     ret = db_put(dbip, dp, rp, (off_t)start, todo);
-    bu_free((char *)rp, "db_zapper buf");
+    bu_free((genptr_t)rp, "db_zapper buf");
     return ret;
 }
 
Index: librt/db_walk.c
===================================================================
--- librt/db_walk.c	(revision 54048)
+++ librt/db_walk.c	(working copy)
@@ -123,7 +123,7 @@
 		    continue;
 		db_preorder_traverse(mdp, dtp);
 	    }
-	    bu_free((char *)rp, "db_preorder_traverse[]");
+	    bu_free((genptr_t)rp, "db_preorder_traverse[]");
 	} else {
 	    struct rt_db_internal in;
 	    struct rt_comb_internal *comb;
@@ -237,7 +237,7 @@
 		    continue;
 		db_functree(dbip, mdp, comb_func, leaf_func, resp, client_data);
 	    }
-	    bu_free((char *)rp, "db_functree record[]");
+	    bu_free((genptr_t)rp, "db_functree record[]");
 	} else {
 	    struct rt_db_internal in;
 	    struct rt_comb_internal *comb;
Index: librt/db_tree.c
===================================================================
--- librt/db_tree.c	(revision 54048)
+++ librt/db_tree.c	(working copy)
@@ -155,7 +155,7 @@
     db_free_full_path(&(ctsp->cts_p));
     db_free_db_tree_state(&(ctsp->cts_s));
     memset((char *)ctsp, 0, sizeof(*ctsp));		/* sanity */
-    bu_free((char *)ctsp, "combined_tree_state");
+    bu_free((genptr_t)ctsp, "combined_tree_state");
 }
 
 
@@ -920,7 +920,7 @@
 	    if (db_apply_state_from_memb(&memb_state, pathp, tp) < 0) {
 		/* Lookup of this leaf failed, NOP it out. */
 		if (tp->tr_l.tl_mat) {
-		    bu_free((char *)tp->tr_l.tl_mat, "tl_mat");
+		    bu_free((genptr_t)tp->tr_l.tl_mat, "tl_mat");
 		    tp->tr_l.tl_mat = NULL;
 		}
 		bu_free(tp->tr_l.tl_name, "tl_name");
@@ -943,7 +943,7 @@
 		 * NOP it out.
 		 */
 		if (tp->tr_l.tl_mat) {
-		    bu_free((char *)tp->tr_l.tl_mat, "tl_mat");
+		    bu_free((genptr_t)tp->tr_l.tl_mat, "tl_mat");
 		    tp->tr_l.tl_mat = NULL;
 		}
 		bu_free(tp->tr_l.tl_name, "tl_name");
@@ -969,7 +969,7 @@
 	    } else {
 		/* Processing of this leaf failed, NOP it out. */
 		if (tp->tr_l.tl_mat) {
-		    bu_free((char *)tp->tr_l.tl_mat, "tl_mat");
+		    bu_free((genptr_t)tp->tr_l.tl_mat, "tl_mat");
 		    tp->tr_l.tl_mat = NULL;
 		}
 		bu_free(tp->tr_l.tl_name, "tl_name");
@@ -1373,7 +1373,7 @@
 	    {
 		struct nmgregion *r = tp->tr_d.td_r;
 		if (tp->tr_d.td_name) {
-		    bu_free((char *)tp->tr_d.td_name, "region name");
+		    bu_free((genptr_t)tp->tr_d.td_name, "region name");
 		    tp->tr_d.td_name = (const char *)NULL;
 		}
 		if (r == (struct nmgregion *)NULL) {
@@ -1393,7 +1393,7 @@
 
 	case OP_DB_LEAF:
 	    if (tp->tr_l.tl_mat) {
-		bu_free((char *)tp->tr_l.tl_mat, "tl_mat");
+		bu_free((genptr_t)tp->tr_l.tl_mat, "tl_mat");
 		tp->tr_l.tl_mat = NULL;
 	    }
 	    bu_free(tp->tr_l.tl_name, "tl_name");
@@ -2252,7 +2252,7 @@
     for (i = 0; i < new_reg_count; i++) {
 	db_free_tree(reg_trees[i], resp);
     }
-    bu_free((char *)reg_trees, "*reg_trees[]");
+    bu_free((genptr_t)reg_trees, "*reg_trees[]");
 
     if (something_not_found) {
 	bu_log ("db_walk_tree: %d %s not found.\n",
@@ -2770,13 +2770,13 @@
 		bu_vls_printf(vls,
 			      "db_tree_parse: unary operator %s has insufficient operands in %s\n",
 			      argv[0], str);
-		bu_free((char *)tp, "union tree");
+		bu_free((genptr_t)tp, "union tree");
 		tp = TREE_NULL;
 		goto out;
 	    }
 	    tp->tr_b.tb_left = db_tree_parse(vls, argv[1], resp);
 	    if (tp->tr_b.tb_left == TREE_NULL) {
-		bu_free((char *)tp, "union tree");
+		bu_free((genptr_t)tp, "union tree");
 		tp = TREE_NULL;
 		goto out;
 	    }
Index: librt/db_anim.c
===================================================================
--- librt/db_anim.c	(revision 54048)
+++ librt/db_anim.c	(working copy)
@@ -213,7 +213,7 @@
     }
 
     db_free_full_path(&anp->an_path);
-    bu_free((char *)anp, "animate");
+    bu_free((genptr_t)anp, "animate");
 }
 
 void
Index: librt/bool.c
===================================================================
--- librt/bool.c	(revision 54048)
+++ librt/bool.c	(working copy)
@@ -2066,7 +2066,7 @@
 
 	    if (!reg_count) {
 		BU_LIST_DEQUEUE((struct bu_list *)pp)
-		    bu_free((char *)pp->pt_overlap_reg, "overlap list");
+		    bu_free((genptr_t)pp->pt_overlap_reg, "overlap list");
 		pp->pt_overlap_reg = NULL;	/* sanity */
 		pp = (struct partition *)NULL;
 	    }
@@ -2113,7 +2113,7 @@
 		}
 	    }
 	    if (pp->pt_overlap_reg) {
-		bu_free((char *)pp->pt_overlap_reg, "overlap list");
+		bu_free((genptr_t)pp->pt_overlap_reg, "overlap list");
 		pp->pt_overlap_reg = (struct region **)NULL;
 	    }
 	}
Index: librt/bezier_2d_isect.c
===================================================================
--- librt/bezier_2d_isect.c	(revision 54048)
+++ librt/bezier_2d_isect.c	(working copy)
@@ -136,7 +136,7 @@
 	    max_distance_above = FMAX(max_distance_above, distance[i]);
 	}
     }
-    bu_free((char *)distance, "ControlPolygonFlatEnough");
+    bu_free((genptr_t)distance, "ControlPolygonFlatEnough");
 
     {
 	double det, dInv;
@@ -245,8 +245,8 @@
     }
 
     for (i=0; i<=degree; i++)
-	bu_free((char *)Vtemp[i], "Bezier: Vtemp[i]");
-    bu_free((char *)Vtemp, "Bezier: Vtemp");
+	bu_free((genptr_t)Vtemp[i], "Bezier: Vtemp[i]");
+    bu_free((genptr_t)Vtemp, "Bezier: Vtemp");
 
     return;
 }
@@ -352,8 +352,8 @@
 		*intercept = (point2d_t *)bu_malloc(sizeof(point2d_t), "FindRoots: unique solution (intercept)");
 		*normal = (point2d_t *)bu_malloc(sizeof(point2d_t), "FindRoots: unique solution (normal)");
 		if (!ComputeXIntercept(w, degree, ray_start, ray_dir, *intercept[0], *normal[0])) {
-		    bu_free((char *)(*intercept), "FindRoots: no solution");
-		    bu_free((char *)(*normal), "FindRoots: no solution");
+		    bu_free((genptr_t)(*intercept), "FindRoots: no solution");
+		    bu_free((genptr_t)(*normal), "FindRoots: no solution");
 		    return 0;
 		}
 		return 1;
@@ -373,8 +373,8 @@
 
     total_count = left_count + right_count;
 
-    bu_free((char *)Left, "FindRoots: Left");
-    bu_free((char *)Right, "FindRoots: Right");
+    bu_free((genptr_t)Left, "FindRoots: Left");
+    bu_free((genptr_t)Right, "FindRoots: Right");
     if (total_count) {
 	*intercept = (point2d_t *)bu_calloc(total_count, sizeof(point2d_t),
 					    "FindRoots: roots compilation");
@@ -393,12 +393,12 @@
     }
 
     if (left_count) {
-	bu_free((char *)left_t, "Left roots");
-	bu_free((char *)left_n, "Left normals");
+	bu_free((genptr_t)left_t, "Left roots");
+	bu_free((genptr_t)left_n, "Left normals");
     }
     if (right_count) {
-	bu_free((char *)right_t, "Right roots");
-	bu_free((char *)right_n, "Right normals");
+	bu_free((genptr_t)right_t, "Right roots");
+	bu_free((genptr_t)right_n, "Right normals");
     }
 
     /* Send back total number of solutions */
@@ -442,8 +442,8 @@
 
     /* eliminate original */
     BU_LIST_DEQUEUE(&bezier_in->l);
-    bu_free((char *)bezier_in->ctl, "subdivide_bezier: bezier_in->ctl");
-    bu_free((char *)bezier_in, "subdivide_bezier: bezier_in");
+    bu_free((genptr_t)bezier_in->ctl, "subdivide_bezier: bezier_in->ctl");
+    bu_free((genptr_t)bezier_in, "subdivide_bezier: bezier_in");
 
     /* recurse on left curve */
     left_rtrn = subdivide_bezier(bz_l, degree, epsilon, depth+1);
@@ -453,8 +453,8 @@
 
     BU_LIST_APPEND_LIST(&new_head->l, &left_rtrn->l);
     BU_LIST_APPEND_LIST(&new_head->l, &rt_rtrn->l);
-    bu_free((char *)left_rtrn, "subdivide_bezier: left_rtrn (head)");
-    bu_free((char *)rt_rtrn, "subdivide_bezier: rt_rtrn (head)");
+    bu_free((genptr_t)left_rtrn, "subdivide_bezier: left_rtrn (head)");
+    bu_free((genptr_t)rt_rtrn, "subdivide_bezier: rt_rtrn (head)");
 
     return new_head;
 }
Index: librt/shoot.c
===================================================================
--- librt/shoot.c	(revision 54048)
+++ librt/shoot.c	(working copy)
@@ -123,7 +123,7 @@
 
 	rtip->rti_nsolids_with_pieces = 0;
     }
-    bu_free((char *)resp->re_pieces, "re_pieces[]");
+    bu_free((genptr_t)resp->re_pieces, "re_pieces[]");
     resp->re_pieces = NULL;
 }
 
Index: librt/search.c
===================================================================
--- librt/search.c	(revision 54048)
+++ librt/search.c	(working copy)
@@ -250,7 +250,7 @@
 		    DB_FULL_PATH_POP(dfp);
 		}
 	    }
-	    bu_free((char *)rp, "db_preorder_traverse[]");
+	    bu_free((genptr_t)rp, "db_preorder_traverse[]");
 	} else {
 	    struct rt_db_internal in;
 	    struct rt_comb_internal *comb;
@@ -526,7 +526,7 @@
 		    }
 		}
 	    }
-	    bu_free((char *)rp, "db_preorder_traverse[]");
+	    bu_free((genptr_t)rp, "db_preorder_traverse[]");
 	} else {
 	    struct rt_db_internal in;
 	    struct rt_comb_internal *comb;
Index: librt/prep.c
===================================================================
--- librt/prep.c	(revision 54048)
+++ librt/prep.c	(working copy)
@@ -184,7 +184,7 @@
     bu_ptbl_free(&rtip->rti_resources);
     bu_ptbl_free(&rtip->delete_regs);
 
-    bu_free((char *)rtip, "struct rt_i");
+    bu_free((genptr_t)rtip, "struct rt_i");
 }
 
 
@@ -395,7 +395,7 @@
     /* Release storage used for bounding RPPs of solid "pieces" */
     RT_VISIT_ALL_SOLTABS_START(stp, rtip) {
 	if (stp->st_piece_rpps) {
-	    bu_free((char *)stp->st_piece_rpps, "st_piece_rpps[]");
+	    bu_free((genptr_t)stp->st_piece_rpps, "st_piece_rpps[]");
 	    stp->st_piece_rpps = NULL;
 	}
     } RT_VISIT_ALL_SOLTABS_END;
@@ -750,7 +750,7 @@
 	tp = resp->re_tree_hd;
 	while (tp != TREE_NULL) {
 	    resp->re_tree_hd = tp->tr_b.tb_left;
-	    bu_free((char *)tp, "union tree in resource struct");
+	    bu_free((genptr_t)tp, "union tree in resource struct");
 	    tp = resp->re_tree_hd;
 	}
     }
@@ -926,7 +926,7 @@
 
     /* Clean out the array of pointers to regions, if any */
     if (rtip->Regions) {
-	bu_free((char *)rtip->Regions, "rtip->Regions[]");
+	bu_free((genptr_t)rtip->Regions, "rtip->Regions[]");
 	rtip->Regions = (struct region **)0;
 
 	/* Free space partitions */
@@ -945,13 +945,13 @@
     for (i=0; i <= ID_MAX_SOLID; i++) {
 	if (rtip->rti_nsol_by_type[i] <= 0) continue;
 	if (rtip->rti_sol_by_type[i]) {
-	    bu_free((char *)rtip->rti_sol_by_type[i], "sol_by_type");
+	    bu_free((genptr_t)rtip->rti_sol_by_type[i], "sol_by_type");
 	}
 	rtip->rti_sol_by_type[i] = (struct soltab **)0;
 	rtip->rti_nsol_by_type[i] = 0;
     }
     if (rtip->rti_Solids) {
-	bu_free((char *)rtip->rti_Solids, "rtip->rti_Solids[]");
+	bu_free((genptr_t)rtip->rti_Solids, "rtip->rti_Solids[]");
 	rtip->rti_Solids = (struct soltab **)0;
     }
 
@@ -984,7 +984,7 @@
     }
 
     if (rtip->Orca_hash_tbl) {
-	bu_free((char *)rtip->Orca_hash_tbl, "rtip->Orca_hash_tbl");
+	bu_free((genptr_t)rtip->Orca_hash_tbl, "rtip->Orca_hash_tbl");
 	rtip->Orca_hash_tbl = NULL;
     }
     if (rt_uniresource.re_magic) {
@@ -1057,10 +1057,10 @@
 
     db_free_tree(delregp->reg_treetop, resp);
     delregp->reg_treetop = TREE_NULL;
-    bu_free((char *)delregp->reg_name, "region name str");
+    bu_free((genptr_t)delregp->reg_name, "region name str");
     delregp->reg_name = (char *)0;
     bu_avs_free(&(delregp->attr_values));
-    bu_free((char *)delregp, "struct region");
+    bu_free((genptr_t)delregp, "struct region");
     return 0;
 }
 
@@ -1304,13 +1304,13 @@
 	bu_log("Cannot find path from %s to %s\n",
 	       start->d_namep, end->d_namep);
 	db_free_full_path(path);
-	bu_free((char *)path, "path");
+	bu_free((genptr_t)path, "path");
 	return 1;
     }
 
     if (rt_db_get_internal(&intern, start, dbip, NULL, resp) < 0) {
 	db_free_full_path(path);
-	bu_free((char *)path, "path");
+	bu_free((genptr_t)path, "path");
 	return 1;
     }
 
@@ -1565,7 +1565,7 @@
 	    for (k=0; k<BU_PTBL_LEN(&objs->paths); k++) {
 		if (objs->tsp[k]) {
 		    db_free_db_tree_state(objs->tsp[k]);
-		    bu_free((char *)objs->tsp[k], "tree_state");
+		    bu_free((genptr_t)objs->tsp[k], "tree_state");
 		}
 		path = (struct db_full_path *)BU_PTBL_GET(&objs->paths, k);
 		db_free_full_path(path);
@@ -1591,7 +1591,7 @@
 	    for (k=0; k<BU_PTBL_LEN(&objs->paths); k++) {
 		if (objs->tsp[k]) {
 		    db_free_db_tree_state(objs->tsp[k]);
-		    bu_free((char *)objs->tsp[k], "tree_state");
+		    bu_free((genptr_t)objs->tsp[k], "tree_state");
 		}
 		path = (struct db_full_path *)BU_PTBL_GET(&objs->paths, k);
 		db_free_full_path(path);
@@ -1602,7 +1602,7 @@
 	}
 
 	db_free_db_tree_state(tree_state);
-	bu_free((char *)tree_state, "tree_state");
+	bu_free((genptr_t)tree_state, "tree_state");
     }
 
     /* eliminate regions to be unprepped */
@@ -1715,7 +1715,7 @@
     for (i=0; i<BU_PTBL_LEN(&(objs->paths)); i++) {
 	bu_free(argv[i], "argv[i]");
     }
-    bu_free((char *)argv, "argv");
+    bu_free((genptr_t)argv, "argv");
 
     rtip->needprep = 0;
 
Index: librt/db_open.c
===================================================================
--- librt/db_open.c	(revision 54048)
+++ librt/db_open.c	(working copy)
@@ -126,7 +126,7 @@
 	    if (RT_G_DEBUG & DEBUG_DB) {
 		bu_log("db_open(%s) FAILED, unable to open file for reading\n", name);
 	    }
-	    bu_free((char *)dbip, "struct db_i");
+	    bu_free((genptr_t)dbip, "struct db_i");
 	    return DBI_NULL;
 	}
 
@@ -141,7 +141,7 @@
 	    if (RT_G_DEBUG & DEBUG_DB) {
 		bu_log("db_open(%s) FAILED, unable to open file for reading/writing\n", name);
 	    }
-	    bu_free((char *)dbip, "struct db_i");
+	    bu_free((genptr_t)dbip, "struct db_i");
 	    return DBI_NULL;
 	}
 
@@ -194,7 +194,7 @@
 
 	    bu_free((genptr_t)argv[0], "db_open: argv[0]");
 	    bu_free((genptr_t)argv, "db_open: argv");
-	    bu_free((char *)dbip, "struct db_i");
+	    bu_free((genptr_t)dbip, "struct db_i");
 
 	    return DBI_NULL;
 	}
@@ -382,7 +382,7 @@
 	dbip->dbi_filepath = NULL; /* sanity */
     }
 
-    bu_free((char *)dbip, "struct db_i");
+    bu_free((genptr_t)dbip, "struct db_i");
 }
 
 int
Index: librt/cut.c
===================================================================
--- librt/cut.c	(revision 54048)
+++ librt/cut.c	(working copy)
@@ -889,7 +889,7 @@
 		head = rt_cut_one_axis(&rtip->rti_cuts_waiting, rtip,
 				       Y, 0, nuginfo.nu_cells_per_axis[Y]-1, &nuginfo);
 		rtip->rti_CutHead = *head;	/* struct copy */
-		bu_free((char *)head, "union cutter");
+		bu_free((genptr_t)head, "union cutter");
 
 		if (RT_G_DEBUG&DEBUG_CUTDETAIL) {
 		    for (i=0; i<3; i++) {
@@ -1256,7 +1256,7 @@
 		olp->pieces[k++] = more_pieces[j];
 	    }
 	    if (more_pieces) {
-		bu_free((char *)more_pieces, "more_pieces");
+		bu_free((genptr_t)more_pieces, "more_pieces");
 	    }
 	    if (olp->npieces < plp->npieces) success = 1;
 	} else {
@@ -1716,7 +1716,7 @@
 
 	case CUT_BOXNODE:
 	    if (cutp->bn.bn_list) {
-		bu_free((char *)cutp->bn.bn_list, "bn_list[]");
+		bu_free((genptr_t)cutp->bn.bn_list, "bn_list[]");
 		cutp->bn.bn_list = (struct soltab **)NULL;
 	    }
 	    cutp->bn.bn_len = 0;
@@ -1726,10 +1726,10 @@
 		for (i=0; i<cutp->bn.bn_piecelen; i++) {
 		    struct rt_piecelist *olp = &cutp->bn.bn_piecelist[i];
 		    if (olp->pieces) {
-			bu_free((char *)olp->pieces, "olp->pieces");
+			bu_free((genptr_t)olp->pieces, "olp->pieces");
 		    }
 		}
-		bu_free((char *)cutp->bn.bn_piecelist, "bn_piecelist[]");
+		bu_free((genptr_t)cutp->bn.bn_piecelist, "bn_piecelist[]");
 		cutp->bn.bn_piecelist = (struct rt_piecelist *)NULL;
 	    }
 	    cutp->bn.bn_piecelen = 0;
@@ -2350,7 +2350,7 @@
 		}
 
 		if (more_pieces) {
-		    bu_free((char *)more_pieces, "more_pieces");
+		    bu_free((genptr_t)more_pieces, "more_pieces");
 		}
 	    }
 	    break;
Index: nirt/if.c
===================================================================
--- nirt/if.c	(revision 54048)
+++ nirt/if.c	(working copy)
@@ -355,7 +355,7 @@
 {
     op->forw->backw = op->backw;
     op->backw->forw = op->forw;
-    bu_free((char *)op, "free op in del_ovlp");
+    bu_free((genptr_t)op, "free op in del_ovlp");
 }
 
 
Index: nirt/parse_fmt.c
===================================================================
--- nirt/parse_fmt.c	(revision 54048)
+++ nirt/parse_fmt.c	(working copy)
@@ -829,7 +829,7 @@
 	next = oip->next;
 	bu_free(oip->format, "outitem.format");
 	if (oip != oil)
-	    bu_free((char *) oip, "outitem");
+	    bu_free((genptr_t) oip, "outitem");
     }
 }
 
