private void cmd_unlock(final String arg, final Client client) {
		debug("Command: unlock");

		final Player player = getPlayer(client);
		final Room room = getRoom( player.getLocation() );

		debug("Player: " + player.getName());
		debug("Room:   " + room.getName());

		// only want to find exits in the same room, should this limit to visible exits too?
		Exit exit = null;
		
		boolean found_exit = false;
		
		for(final Exit e : objectDB.getExitsByRoom(room)) {
			debug("    Exit: " + e.getName());
			
			if( e.getExitType() == ExitType.DOOR ) {
				final Door d = (Door) e;
				
				System.out.println("lock: \'" + d.getName( room.getDBRef() ) + "\'");
				
				if( d.getName( room.getDBRef() ).equals(arg) ) {
					exit = d;
					found_exit = true;
				}
			}
			else if( e.getName().equals(arg) ) {
				exit = e;
				found_exit = true;
			}
			
			if( found_exit ) break;
		}
		
		if (exit != null) {
			if( exit instanceof Lockable ) {
				final Lockable<Item> l = (Lockable<Item>) exit;

				if ( l.isLocked() ) {
					if( l.requiresKey() ) {
						boolean hasKey = hasKey(player, l);
						
						if( hasKey ) {
							l.unlock();
							
							send("You unlock " + exit.getName() + " with " + l.getKey().getName() + ".", client);
							//send("You unlocked " + exit.getName() + ".", client);
						}
					}
					else {
						l.unlock();
						send("You unlock " + exit.getName() + ".", client);
						//send("You unlocked " + exit.getName() + ".", client);
					}
				}
				else send("It's already unlocked.", client);
				//else send("That's already unlocked.", client);
			}
			else {
				//send(obj.getName() + "not lockable.", client);
				send("It's a good thing no one saw you trying to lock a " + exit.getExitType().toString() + " with no lock.", client);
			}
		}
		else send("Unlock what?", client);
	}