diff -BbuprN -x '*.o' suntzu/src/act.movement.c suntzu-ken/src/act.movement.c
--- suntzu/src/act.movement.c	2003-11-29 22:52:42.000000000 -0600
+++ suntzu-ken/src/act.movement.c	2003-12-27 19:03:20.000000000 -0600
@@ -29,10 +29,11 @@ void death_cry(struct char_data *ch);
 int find_eq_pos(struct char_data *ch, struct obj_data *obj, char *arg);
 int buildwalk(struct char_data *ch, int dir);
 struct obj_data *find_vehicle_by_vnum(int vnum);
+char *find_exdesc(char *word, struct extra_descr_data *list);
 
 /* local functions */
 int has_boat(struct char_data *ch);
-int find_door(struct char_data *ch, const char *type, char *dir, const char *cmdname);
+int find_door(struct char_data *ch, const char *type, char *dir, const char *cmdname, int silent);
 int has_key(struct char_data *ch, obj_vnum key);
 void do_doorcmd(struct char_data *ch, struct obj_data *obj, int door, int scmd);
 int ok_pick(struct char_data *ch, obj_vnum keynum, int pickproof, int scmd);
@@ -254,7 +255,7 @@ ACMD(do_move)
 }
 
 
-int find_door(struct char_data *ch, const char *type, char *dir, const char *cmdname)
+int find_door(struct char_data *ch, const char *type, char *dir, const char *cmdname, int silent)
 {
   int door;
 
@@ -289,8 +290,10 @@ int find_door(struct char_data *ch, cons
 	  if (isname(type, EXIT(ch, door)->keyword))
 	    return (door);
 
+    if (!silent)
     send_to_char(ch, "There doesn't seem to be %s %s here.\r\n", AN(type), type);
-    return (-1);
+    return (-2); /* We specified a keyword only, but none found on any doors */
+
   }
 }
 
@@ -500,8 +503,15 @@ ACMD(do_gen_door)
     return;
   }
   two_arguments(argument, type, dir);
-  if (!generic_find(type, FIND_OBJ_INV | FIND_OBJ_ROOM, ch, &victim, &obj))
-    door = find_door(ch, type, dir, cmd_door[subcmd]);
+
+  if (!generic_find(type, FIND_OBJ_INV | FIND_OBJ_ROOM, ch, &victim, &obj)) {
+    if ((door = find_door(ch, type, dir, cmd_door[subcmd], TRUE)) == -2) {
+      if (find_exdesc(type, world[IN_ROOM(ch)].ex_description) != NULL)
+        act("You can't $F that!", FALSE, ch, 0, cmd_door[subcmd], TO_CHAR);
+      else
+        act("There is no $F here!", FALSE, ch, 0, type, TO_CHAR);
+    }
+  }
 
   if ((obj) || (door >= 0)) {
     keynum = DOOR_KEY(ch, obj, door);
