* @param room
	 * @param item
	 */
	private void take(final Player player, final Room room, final Item item) {
		boolean validRoom = (room != null);
		boolean sameLocation = (player.getLocation() == room.getDBRef());
		boolean itemPresent = (room.getItems().contains(item));
		
		if (validRoom && sameLocation && itemPresent) {
			final String itemName = item.getName();

			debug(itemName + " true");

			// move object from it's present location to player inventory
			// it would be good to just replace this with a function, since it
			// will need to test for a standard location to put it
			// see if there is a generic storage container to put it in

			if (hasGenericStorageContainer(player, item)) {
				// if you have a container for this item type, put it there

				/*
				 * debug(item.getName() + " container"); Container<Item> c =
				 * getGenericStorageContainer( player, item );
				 * item.setLocation(c.getDBRef()); c.add( item );
				 * send("You picked " + colors(item.getName(), "yellow") +
				 * " up off the floor and put it in " + c.getName(), client);
				 */
			}
			else {
				// else just stick it in inventory
				debug(itemName + " inventory");

				int old_loc = item.getLocation();

				final String stackable = item.getProperty("stackable");
				
				boolean stacks = ((stackable != null) ? ((stackable.equals("true")) ? true : false) : false);
				
				// if there is an existing, not full stack of that item trying
				// to add these to it
				if (item instanceof Stackable || stacks) {
					debug(itemName + " stackable");
					
					List<Item> item_stacks = getStackableItems(itemName, player);

					boolean foundItemStack = false;
					
					debug("found stack: " + foundItemStack);

					for (final Item item1 : item_stacks) {
						Stackable<Item> item_stack = (Stackable<Item>) item1;

						if (item1.getItemType() == item.getItemType()) {
							if (item_stack.stackSize() < Constants.MAX_STACK_SIZE) {
								debug("stackable - added to existing stack");
								item_stack.stack(item);
								foundItemStack = true;
								break;
							}
						}

						debug("" + player.getInventory().contains(item));
					}

					// if we didn't find an existing stack of these, just take
					// the item
					if (!foundItemStack) {
						debug("stackable - new stack");

						player.getInventory().add(item);
						item.setLocation(player.getDBRef()); // "move" item
						
						debug("" + player.getInventory().contains(item));
					}
				}
				else {
					debug("not stackable " + item.getName());

					player.getInventory().add(item);
					item.setLocation(player.getDBRef()); // "move" item
					debug("" + player.getInventory().contains(item));
				}

				debug("" + old_loc); // old location
				debug("" + item.getLocation()); // new location

				send("You picked " + colors(itemName, "yellow") + " up off the floor.", player.getClient());
			}

			// remove from the room
			room.removeItem(item);

			// check for silent flag to see if object's dbref name should be shown as well?
			// return message telling the player that they picked up the object
			// return message telling others that the player picked up the item
			// needs to be placed in the message queue for just the room
			// somehow, not sent to the current player
		}
	}