private void use_portal(final Portal portal, final Client client) {
		final Player player = getPlayer(client);
		final Room room = getRoom( player.getLocation() );
		
		final int portalOrigin = portal.getOrigin();
		final int portalDest = portal.getDestination();

		final boolean playerAtPortal = player.getPosition().equals( portal.getPosition() );

		final boolean missingRequiredKey = portal.requiresKey() && !portal.hasKey(player);

		boolean success = false;

		System.out.println("Portal: " + portal.getName());

		debug("Old Location: " + player.getLocation());

		// if the portal is keyed and is some kind of thing/item, then I need to check before permitting use
		if (!playerAtPortal || missingRequiredKey) {
			return;
		}

		if (portalOrigin == room.getDBRef()) {
			player.setLocation(portalDest);

			debug("Portal( " + player.getName() + ", " + portalOrigin + ", " + portalDest + " ): success");

			success = true;
		}
		else if (portalDest == room.getDBRef()) {
			player.setLocation(portalOrigin);

			debug("Portal( " + player.getName() + ", " + portalDest + ", " + portalOrigin + " ): success");

			success = true;
		}

		if (success) {
			send("You use the portal.");
			// tell us about the new location
			int location = getPlayer(client).getLocation();
			debug("New Location: " + location);

			Room room1 = getRoom(location);
			look(room1, client);
		}
		else {
			send("This portal isn't active?", client);
		}
	}