Index: generic/tclNamesp.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclNamesp.c,v
retrieving revision 1.158
diff -u -r1.158 tclNamesp.c
--- generic/tclNamesp.c	21 Nov 2007 14:30:34 -0000	1.158
+++ generic/tclNamesp.c	28 Nov 2007 16:45:10 -0000
@@ -5407,11 +5407,33 @@
 	return TCL_ERROR;
     }
     if (mapDict != NULL) {
-	int size;
+	int size, done;
+	Tcl_DictSearch search;
+	Tcl_Obj *valuePtr;
 
 	if (Tcl_DictObjSize(interp, mapDict, &size) != TCL_OK) {
 	    return TCL_ERROR;
 	}
+
+	for (Tcl_DictObjFirst(NULL, mapDict, &search, NULL, &valuePtr, &done);
+		!done; Tcl_DictObjNext(&search, NULL, &valuePtr, &done)) {
+	    Tcl_Obj *cmdPtr;
+	    const char *bytes;
+
+	    if (Tcl_ListObjIndex(interp, valuePtr, 0, &cmdPtr) != TCL_OK) {
+		Tcl_DictObjDone(&search);
+		return TCL_ERROR;
+	    }
+	    bytes = TclGetString(cmdPtr);
+	    if (bytes[0] != ':' || bytes[1] != ':') {
+		Tcl_AppendResult(interp,
+			"ensemble target is not a fully-qualified command",
+			NULL);
+		Tcl_DictObjDone(&search);
+		return TCL_ERROR;
+	    }
+	}
+
 	if (size < 1) {
 	    mapDict = NULL;
 	}
