public static void addItem(Hero owner, Item item) {
		if (owner != null && item != null && !owner.equals(item.getOwner())) {
			item.setOwner(owner);
			switch (item.getCategory()) {
				case CONSUMABLE: {
					// add item to pouch
					owner.getPouch().add(item);
					if (LOGGER.isDebugEnabled())
						LOGGER.debug("Successfully added consumable item '" + item + "' to hero " + owner);
					break;
				}
				case QUEST: {
					// add item to inventory
					owner.getInventory().add(item);
					if (LOGGER.isDebugEnabled())
						LOGGER.debug("Successfully added QUEST item '" + item + "' to inventory of hero " + owner);
					break;
				}
				default: {
					// add item to current equipment or inventory of owner
					// try if item can be equipped
					if (!equipItem(owner, item)) {
						// item level requirement to high OR
						// item bearable maximum of this type already reached
						// --> put item in inventory for later use
						owner.getInventory().add(item);
						if (LOGGER.isDebugEnabled())
							LOGGER.debug("Successfully added inventory item '" + item + "' to hero " + owner);
					}
					break;
				}
			}

			// create event for gameEventController
			Map<GameEventParameter, Object> eventParams = new HashMap<GameEventParameter, Object>();
			eventParams.put(GameEventParameter.TRIGGERING_UNIT, owner);
			eventParams.put(GameEventParameter.TRIGGERING_ITEM, item);
			GameEventHandler.INSTANCE.createAndDispatchEvent(GameEventType.UNIT_ADD_ITEM, owner, eventParams);
		}
	}