public static void addBuff(Unit owner, Unit target, Buff buff) {
		if (owner != null && target != null && buff != null) {
			// check if buff already had a target -> if so then remove the buff from the current target
			if (buff.getTarget() != null)
				GameLogic.INSTANCE.removeBuff(buff.getTarget(), buff);

			// set buff owner to have a correct reference to the source unit of the buff
			buff.setOwner(owner);
			buff.setTarget(target);

			Set<Buff> currentBuffs = target.getBuffs();
			if (currentBuffs == null) {
				// unit does not have a buff yet
				currentBuffs = new HashSet<Buff>();
				target.setBuffs(currentBuffs);
			}

			currentBuffs.add(buff);
			// buff was successfully added to the target unit
			// create event for gameEventController
			Map<GameEventParameter, Object> eventParams = new HashMap<GameEventParameter, Object>();
			eventParams.put(GameEventParameter.TRIGGERING_UNIT, owner);
			eventParams.put(GameEventParameter.TARGET_UNIT, target);
			eventParams.put(GameEventParameter.TRIGGERING_BUFF, buff);
			GameEventHandler.INSTANCE.createAndDispatchEvent(GameEventType.UNIT_ADD_BUFF, owner, eventParams);
			if (LOGGER.isDebugEnabled())
				LOGGER.debug("Successfully added buff '" + buff + "' to target unit '" + target + "'");
		}
	}