* @param client
	 */
	private void cmd_control(final String arg, final Client client) {
		final Player player = getPlayer(client);

		if (arg.toLowerCase().equals("#break")) { // break control, return controlling player to their own body (ha ha)
			final Player controller = playerControlMap.getController(player); // get the controller

			// if the player is a slave to some controller
			if (controller != null) {
				// show control table state before change
				debug("DM Control Table:");
				debug(playerControlMap.toString());

				// get name of slave npc
				String name = playerControlMap.getSlave(controller).getName();

				playerControlMap.stopControllingAnyone(controller); // stop controlling an npc

				// show control table state after change
				debug("DM Control Table:");
				debug(playerControlMap.toString());

				// status message, indicate that we have stopped controlling an npc and what its name is
				send("Game> You stop controlling " + name, client);
			}
		}
		else { // should not be able to use this to control other players (at least not normally) NOTE: needs work
			final Player npc = getNPC(arg); // get the npc we want to control by name
			
			// TODO what is the point here?
			//debug(player); // print out player as string
			//debug(npc); // print out npc as string

			if ( npc.isType(TypeFlag.NPC) ) {
				// show control table state before change
				debug("DM Control Table:");
				debug(playerControlMap.toString());

				final Player oldSlave;

				// if the player is really an NPC at the moment (consequence of one level control)
				if ( player.isType(TypeFlag.NPC) ) {
					oldSlave = playerControlMap.control(playerControlMap.getController(player), npc);
				}
				else {
					oldSlave = playerControlMap.control(player, npc); // control an npc
				}

				player.setController(true); // mark the player as controlling an npc (commented out in PlayerControlMap)

				// if we were already controlling an npc, revoke the privilege
				// escalation (controlled npcs have the same permissions as the
				// controller)
				if (oldSlave != null) {
					oldSlave.setAccess(Constants.USER); // revoke any greater privileges granted
				}

				// show control table state after change
				debug("DM Control Table:");
				debug(playerControlMap.toString());

				// status message, indicate that we are now controlling an npc and what its name is
				send("Game> You are now controlling " + npc.getName(), client);
			}
			else {
				send("Players are not controllable, only NPCs", client);
			}
		}
	}