I've been coding various CircleMUD things for a couple years now, and the coding resources for Circle on the net have been useful at times, so I guess I should contribute to them. :-) Here's a quick fix for the locate object bug in stock circle. It creates a temporary object with only the alias list defined. Perhaps its a bit of a hack--passing a string argument to a function inside the obj_data struct--but it works the way it should. Of all the possible ways to fix the locate object bug, this is probably the cleanest way. In spell_parser.c, after: if (GET_SKILL(ch, spellnum) == 0) { send_to_char("You are unfamiliar with that spell.\r\n", ch); return; } /* Find the target */ if (t != NULL) { one_argument(strcpy(arg, t), t); skip_spaces(&t); } Add: if (spellnum == SPELL_LOCATE_OBJECT) { /* use the CREATE macro instead of the create_obj func so we don't * add the temp obj to the global list, avoiding the overhead of * adding and removing it. */ CREATE(tobj, struct obj_data, 1); tobj->name = (t && *t ? str_dup(t) : NULL); /* could get fancy here and support multiple arguments, but the code in * spells.c would have to be updated too. Anyone want to write it? :-) */ target = TRUE; } In spells.c, after: struct obj_data *i; char name[MAX_INPUT_LENGTH]; int j; Remove: strcpy(name, fname(obj->name)); Add: /* use the temporary object that do_cast created */ if (!obj->name) { send_to_char("What object would you like to find?\r\n", ch); free(obj); return; } strcpy(name, obj->name); free(obj->name); free(obj); That should do it! --Ben Cartwright / Space of EuropaMUD (europa@vt.edu)