* @param client
	 */
	private void cmd_use(final String arg, final Client client) {
		final Player player = getPlayer(client);
		final Room room = getRoom(player.getLocation());

		MUDObject m = getObject(arg);
		
		// assume that no argument implies something I am wearing..
		if ( arg.equals("") ) {
			debug("Game> Arguments?");

			// since there weren't any arguments, look through the player's equipment

			// Player Equipment
			for (Entry<String, Slot> eq_entry : player.getSlots().entrySet()) {
				final Slot slot = eq_entry.getValue();

				// check that the slot is valid and there is something in it
				if ( slot != null && slot.isFull() ) {
					// TODO is this the right way?
					debug("Slot (" + slot.getItemType().getName() + "): " + slot.isFull());
					
					// if the slot holds rings
					if ( slot.isType(ItemTypes.RING) ) {
						final Item item = slot.getItem();

						//item.isType(TypeFlag)
						if (item instanceof Jewelry) {
							debug("Item is Jewelry");

							final Jewelry j = (Jewelry) item;

							//j.use("", client);
							
							// TODO some kind of check here before applying effect?
							System.out.println( applyEffect( player, j.getEffect() ) );
						}
					}
				}

			}
		}
		else {
			debug("Game> Arguments Received.");
			
			if( module != null) {
				if( module.use( player, m ) ) return;
			}

			// Inventory [Item(s)]
			Item item = null;

			for (final Item e : player.getInventory()) {
				if (e.getName().equals(arg)) {
					item = e;
					break;
				}
			}

			if (item != null) {
				try {
					if (item instanceof Potion) {
						// potion handling
						use_potion((Potion) item, client);
					}
					else if (item instanceof Wand) {
						// wand handling
						use_wand((Wand) item, client);
					}
				}
				catch (final NullPointerException npe) {
					System.out.println("--- Stack Trace ---");
					npe.printStackTrace();
				}

				return;
			}

			// Room [Thing(s)]
			final List<Thing> things = objectDB.getThingsForRoom( room );
			Thing t = null;

			for (final Thing e : things) {
				if (e.getName().equals(arg)) {
					t = e;
					break;
				}
			}

			if (t != null) {
				try {
					final String result = pgm.interpret(t.getScript(TriggerType.onUse), player, t);
					
					if (!result.equals("")) send(result, client);
				}
				catch (final NullPointerException npe) {
					//TODO should the below (not stack trace) be a debug call?
					System.out.println("Arguments: \'" + arg + "\'");
					System.out.println("--- Stack Trace ---");
					npe.printStackTrace();
				}

				return;
			}

			send("No such object.", client);
		}
	}