* @param client
	 */
	private void cmd_trade(final String arg, final Client client) {
		// trade <player> -- offer to trade with other player
		// trade #accept -- accept offer to trade
		// trade #add <item> -- add something to the trade
		// trade #rem <item> -- remove something from the trade
		// trade #finalize    -- finalize a trade in progress
		// trade #cancel     -- cancel an in progress trade

		// NOTES:
		// each player may be only trade with one other player and no
		// player may be involved in more than one trade at a time
		// if either player exits the room? then the trade will be canceled

		final Player player = getPlayer(client); // get the current player

		final String[] args = arg.split(" ");

		if (args.length >= 1) {
			if (args[0].charAt(0) == '#') {				
				final String param = args[0].substring(1).toLowerCase();
				final String arg2 = (args.length == 2) ? args[1] : "";

				final Trade trade = trades.get(player);

				if ( trade != null ) {
					final Player player1 = ((player == trade.p1) ? trade.p2 : trade.p1);

					if ( param.equals("add") || param.equals("a") ) {
						final Item item = MudUtils.findItem(arg2, player.getInventory());

						if( item != null ) {
							trade.addItem(player, item);

							send("You add " + item.getName() + " to the trade.", client);
							notify(player1, player.getName() + " has added " + item.getName() + " to the trade.");
						}
					}
					else if ( param.equals("remove") || param.equals("rem") || param.equals("r") ) {
						Item item = null;

						// NOTE: we're assuming trade items are removed from inventory, which they aren't...
						if( player == trade.p1 )      item = MudUtils.findItem(arg2, trade.p1_items);
						else if( player == trade.p2 ) item = MudUtils.findItem(arg2, trade.p2_items);

						if( item != null ) {
							trade.removeItem(player, item);

							send("You remove " + item.getName() + "from the trade.", client);
							notify(player1, player.getName() + " has removed " + item.getName() + " from the trade,");
						}
					}
					else if ( param.equals("accept") ) {
						final Player partner = tradeInvites.get(player);

						if( partner != null ) {
							tradeInvites.remove(player);
							
							//create new Trade object and store it somewhere
							Trade newTrade = new Trade(partner, player);

							trades.put(player, trade);
							trades.put(player1, trade);
							
							notify(partner, player.getName() + " has accepted your trade request.");
						}
					}
					else if ( param.equals("confirm") ) {
						
					}
					else if ( param.equals("cancel") ) {
						send("You cancel your trade with " + player1 + ".", client);
						notify(player1, player.getName() + " has canceled their trade with you.");
						
						trades.remove( player );
						trades.remove( player1 );
					}
					else if ( param.equals("list") || param.equals("l") ) {
						send("-- Trade", client);
						
						send("- You", client);
						
						List<Item> items;
						
						items = ((player == trade.p1) ? trade.p1_items : trade.p2_items);
						
						for(final Item item : items){
							send(colors(item.getName(), getDisplayColor(TypeFlag.ITEM)), client);
						}
						
						items = ((player == trade.p1) ? trade.p2_items : trade.p1_items);
						
						send("- Them", client);
						
						for(final Item item : items){
							send(colors(item.getName(), getDisplayColor(TypeFlag.ITEM)), client);
						}
					}
					else {
					}
				}
			}
			else {
				// try to find the specified player and initiate trade with them
				final Player player1 = objectDB.getPlayer(args[0]);

				// if such a player exists and they are in the same room as you
				if (player1 != null) {
					if (player.getLocation() == player1.getLocation()) {
						tradeInvites.put(player1, player);
						
						final List<String> messages = Utils.mkList(
								player.getName() + " wants to trade with you.",
								"Do you want to trade with them? (start trading with '')");

						send(messages, player1.getClient());
					}
					else send("That player is not present", client);
				}
				else send("No such player.", client);
			}
		}
	}