We've added this to the ValhallaPlayerClass as an enhancement of @move on $player. It allows things like @MOVE ME TO ANDRI to join the player Andri (be moved to the same room), @MOVE DOODAD TO FRED to move the DOODAD that I own to the player FRED, assuming FRED accepts it. It doesn't matter where DOODAD is, as long as I own it. @MOVE ME TO THE FIELDS OF VALHALLA to move me to the location with the name "THE FIELDS OF VALHALLA". Some of us find it easier to remember long and complicated names than short, simple object IDs :*) @prop #118."room_calls" {} rc @prop #118."room_calls_max" 10 rc @verb #118:"@move" any to any rxd @program #118:@move if ((!valid(dobj)) && valid(Target = $string_utils:match(dobjstr, player.owned_objects, "name"))) dobjstr = tostr(Target); endif if ((!valid(iobj)) && valid(Destination = $string_utils:match(iobjstr, player.owned_objects, "name"))) iobjstr = tostr(Destination); endif if (((dobj == player) && (dobjstr == "me")) && (!valid(this:my_match_object(iobjstr)))) if (valid(Destination = $string_utils:match_player(iobjstr))) if (valid(Destination.location)) iobjstr = tostr(Destination.location); endif endif endif if (valid(this:my_match_object(dobjstr)) && (!valid(this:my_match_object(iobjstr)))) if (valid(Destination_Room = this:my_match_room(iobjstr))) iobjstr = tostr(Destination_Room); endif endif pass(@args); . @verb #118:"my_match_room" this none this @program #118:my_match_room "Use the syntax this:my_match_room(room_name)"; Room_to_Find = args[1]; if (valid(Room = $string_utils:match(Room_to_Find, player.room_calls, "name"))) Found_Room = Room; else Found_Room = this:find_room(Room_to_Find, $room); endif if (valid(Found_Room)) if (Room_Calls_Loc = (Found_Room in player.room_calls)) if (Room_Calls_Loc > 1) Swap_Down = player.room_calls[Room_Calls_Loc - 1]; player.room_calls[Room_Calls_Loc - 1] = Found_Room; player.room_calls[Room_Calls_Loc] = Swap_Down; endif elseif (length(player.room_calls) == player.room_calls_max) player.room_calls = {Found_Room, @listdelete(player.room_calls, player.room_calls_max)}; elseif (length(player.room_calls) > player.room_calls_max) player.room_calls = {Found_Room, @player.room_calls[1..length(player.room_calls) - 2]}; else player.room_calls = {Found_Room, @player.room_calls}; endif endif return Found_Room; . @verb #118:"find_room" this none this @program #118:find_room Room_to_Find = args[1]; Parent_Room = args[2]; if (length(Room_List = children(Parent_Room))) if (valid(Room = $string_utils:match(Room_to_Find, Room_List, "name"))) return Room; else for Child_Room in (Room_List) suspend(0); if (valid(Found_Room = this:find_room(Room_to_Find, Child_Room))) return Found_Room; endif endfor endif endif return $failed_match; .