Index: include/rt/geom.h
===================================================================
--- include/rt/geom.h	(revision 74545)
+++ include/rt/geom.h	(working copy)
@@ -322,7 +322,7 @@
 #define RT_EBM_NAME_LEN 256
 struct rt_ebm_internal {
     uint32_t magic;
-    char file[RT_EBM_NAME_LEN];
+    char name[RT_EBM_NAME_LEN];
     /* NOTE: xdim/ydim cannot be size_t until rel8 as they are
      * written out to disk via bu_vls_struct_print() as 32-bit ints.
      */
Index: src/libged/typein.c
===================================================================
--- src/libged/typein.c	(revision 74545)
+++ src/libged/typein.c	(working copy)
@@ -91,7 +91,8 @@
 
 
 static char *p_ebm[] = {
-    "Enter name of bit-map file: ",
+    "Take data from file or database binary object [f|o]: ",
+    "Enter name of file/object: ",
     "Enter width of bit-map (number of cells): ",
     "Enter height of bit-map (number of cells): ",
     "Enter extrusion distance: "
@@ -770,12 +771,23 @@
     intern->idb_ptr = (void *)ebm;
     ebm->magic = RT_EBM_INTERNAL_MAGIC;
 
-    bu_strlcpy(ebm->file, cmd_argvs[3], RT_EBM_NAME_LEN);
-    ebm->xdim = atoi(cmd_argvs[4]);
-    ebm->ydim = atoi(cmd_argvs[5]);
-    ebm->tallness = atof(cmd_argvs[6]) * gedp->ged_wdbp->dbip->dbi_local2base;
+    bu_strlcpy(ebm->name, cmd_argvs[4], RT_EBM_NAME_LEN);
+    ebm->xdim = atoi(cmd_argvs[5]);
+    ebm->ydim = atoi(cmd_argvs[6]);
+    ebm->tallness = atof(cmd_argvs[7]) * gedp->ged_wdbp->dbip->dbi_local2base;
     MAT_IDN(ebm->mat);
 
+    ebm->buf = NULL;
+    ebm->mp = NULL;
+    ebm->bip = NULL;
+
+    if (*cmd_argvs[3] == 'f' || *cmd_argvs[3] == 'F')
+	ebm->datasrc = RT_DSP_SRC_FILE;
+    else if (*cmd_argvs[3] == 'o' || *cmd_argvs[3] == 'O')
+	ebm->datasrc = RT_DSP_SRC_OBJ;
+    else
+	return GED_ERROR;
+
     return GED_OK;
 }
 
@@ -3153,7 +3165,7 @@
      rec|trc|rcc|box|raw|rpp|rpc|rhc|epa|ehy|hyp|eto|superell|hrt>
     */
     if (BU_STR_EQUAL(argv[2], "ebm")) {
-	nvals = 4;
+	nvals = 5;
 	menu = p_ebm;
 	fn_in = ebm_in;
     } else if (BU_STR_EQUAL(argv[2], "arbn")) {
Index: src/librt/primitives/ebm/ebm.c
===================================================================
--- src/librt/primitives/ebm/ebm.c	(revision 74545)
+++ src/librt/primitives/ebm/ebm.c	(working copy)
@@ -63,7 +63,8 @@
 #define RT_EBM_O(m) bu_offsetof(struct rt_ebm_internal, m)
 
 const struct bu_structparse rt_ebm_parse[] = {
-    {"%s",	RT_EBM_NAME_LEN, "file", bu_offsetof(struct rt_ebm_internal, file), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL },
+    {"%s",	RT_EBM_NAME_LEN, "file", bu_offsetof(struct rt_ebm_internal, name), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL },
+    {"%s",	RT_EBM_NAME_LEN, "name", bu_offsetof(struct rt_ebm_internal, name), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL },
     {"%c",	1, "src",	RT_EBM_O(datasrc),	BU_STRUCTPARSE_FUNC_NULL, NULL, NULL },
     {"%d",	1, "w",		RT_EBM_O(xdim),		BU_STRUCTPARSE_FUNC_NULL, NULL, NULL },
     {"%d",	1, "n",		RT_EBM_O(ydim),		BU_STRUCTPARSE_FUNC_NULL, NULL, NULL },
@@ -616,7 +617,7 @@
     bu_vls_free(&str);
 
     /* Check for reasonable values */
-    if (eip->file[0] == '\0' || eip->xdim < 1 ||
+    if (eip->name[0] == '\0' || eip->xdim < 1 ||
 	eip->ydim < 1 || eip->mat[15] <= 0.0 ||
 	eip->tallness <= 0.0) {
 	bu_struct_print("Unreasonable EBM parameters", rt_ebm_parse,
@@ -633,9 +634,9 @@
     MAT_COPY(eip->mat, tmat);
 
     /* Get bit map from .bw(5) file */
-    mp = bu_open_mapped_file_with_path(dbip->dbi_filepath, eip->file, "ebm");
+    mp = bu_open_mapped_file_with_path(dbip->dbi_filepath, eip->name, "ebm");
     if (!mp) {
-	bu_log("rt_ebm_import4() unable to open '%s'\n", eip->file);
+	bu_log("rt_ebm_import4() unable to open '%s'\n", eip->name);
 	bu_free((char *)eip, "rt_ebm_import4: eip");
     fail:
 	ip->idb_type = ID_NULL;
@@ -645,7 +646,7 @@
     eip->mp = mp;
     if (mp->buflen < (size_t)(eip->xdim*eip->ydim)) {
 	bu_log("rt_ebm_import4() file '%s' is too short %zu < %u\n",
-	       eip->file, mp->buflen, eip->xdim*eip->ydim);
+	       eip->name, mp->buflen, eip->xdim*eip->ydim);
 	goto fail;
     }
 
@@ -758,7 +759,7 @@
     bu_vls_free(&str);
 
     /* Check for reasonable values */
-    if (eip->file[0] == '\0' || eip->tallness <= 0.0 ||
+    if (eip->name[0] == '\0' || eip->tallness <= 0.0 ||
 	eip->xdim < 1 || eip->ydim < 1 || eip->mat[15] <= 0.0 ||
 	eip->datasrc != RT_EBM_SRC_FILE && eip->datasrc != RT_EBM_SRC_OBJ) {
 	bu_struct_print("Unreasonable EBM parameters", rt_ebm_parse,
@@ -775,9 +776,9 @@
     MAT_COPY(eip->mat, tmat);
 
     /* Get bit map from .bw(5) file */
-    mp = bu_open_mapped_file_with_path(dbip->dbi_filepath, eip->file, "ebm");
+    mp = bu_open_mapped_file_with_path(dbip->dbi_filepath, eip->name, "ebm");
     if (!mp) {
-	bu_log("rt_ebm_import4() unable to open '%s'\n", eip->file);
+	bu_log("rt_ebm_import4() unable to open '%s'\n", eip->name);
 	bu_free((char *)eip, "rt_ebm_import4: eip");
     fail:
 	ip->idb_type = ID_NULL;
@@ -787,7 +788,7 @@
     eip->mp = mp;
     if (mp->buflen < (size_t)(eip->xdim*eip->ydim)) {
 	bu_log("rt_ebm_import4() file '%s' is too short %zu < %u\n",
-	       eip->file, mp->buflen, eip->xdim*eip->ydim);
+	       eip->name, mp->buflen, eip->xdim*eip->ydim);
 	goto fail;
     }
 
@@ -820,8 +821,8 @@
 	}
     }
 
-    RT_CK_DB_INTERNAL(eip->bip);
-    RT_CK_BINUNIF(eip->bip->idb_ptr);
+    // RT_CK_DB_INTERNAL(eip->bip);
+    // RT_CK_BINUNIF(eip->bip->idb_ptr);
 
     return 0;
 }
@@ -883,7 +884,7 @@
 	return 0;
 
     bu_vls_printf(&substr, "  file=\"%s\" w=%u n=%u depth=%g\n   mat=",
-		  eip->file, eip->xdim, eip->ydim, INTCLAMP(eip->tallness*mm2local));
+		  eip->name, eip->xdim, eip->ydim, INTCLAMP(eip->tallness*mm2local));
     bu_vls_vlscat(str, &substr);
     for (i = 0; i < 15; i++) {
 	bu_vls_trunc(&substr, 0);
@@ -1013,7 +1014,7 @@
     register const struct rt_ebm_specific *ebmp =
 	(struct rt_ebm_specific *)stp->st_specific;
 
-    bu_log("ebm file = %s\n", ebmp->ebm_i.file);
+    bu_log("ebm file = %s\n", ebmp->ebm_i.name);
     bu_log("dimensions = (%u, %u, %g)\n",
 	   ebmp->ebm_i.xdim, ebmp->ebm_i.ydim,
 	   ebmp->ebm_i.tallness);
@@ -1623,13 +1624,13 @@
     if (attr == (char *)NULL) {
 	bu_vls_strcpy(logstr, "ebm");
 	bu_vls_printf(logstr, " F %s W %u N %u H %.25g",
-		      ebm->file, ebm->xdim, ebm->ydim, ebm->tallness);
+		      ebm->name, ebm->xdim, ebm->ydim, ebm->tallness);
 	bu_vls_printf(logstr, " M {");
 	for (i = 0; i < 16; i++)
 	    bu_vls_printf(logstr, " %.25g", ebm->mat[i]);
 	bu_vls_printf(logstr, " }");
     } else if (BU_STR_EQUAL(attr, "F") || BU_STR_EQUAL(attr, "file")) {
-	bu_vls_printf(logstr, "%s", ebm->file);
+	bu_vls_printf(logstr, "%s", ebm->name);
     } else if (BU_STR_EQUAL(attr, "W")) {
 	bu_vls_printf(logstr, "%u", ebm->xdim);
     } else if (BU_STR_EQUAL(attr, "N")) {
@@ -1674,7 +1675,7 @@
 		bu_vls_printf(logstr, "ERROR: File name too long");
 		return BRLCAD_ERROR;
 	    }
-	    bu_strlcpy(ebm->file, argv[1], RT_EBM_NAME_LEN);
+	    bu_strlcpy(ebm->name, argv[1], RT_EBM_NAME_LEN);
 	} else if (BU_STR_EQUAL(argv[0], "W")) {
 	    ebm->xdim = atoi(argv[1]);
 	} else if (BU_STR_EQUAL(argv[0], "N")) {
