private static Map<String, SimpleEntry<Class<?>, Method>> getMethods(Class<?> param, boolean onlySetter, boolean onlyGetter) {
		Map<String, SimpleEntry<Class<?>, Method>> result = null;
		try {
			Method[] methods = param.getDeclaredMethods();
			result = new HashMap<String, SimpleEntry<Class<?>, Method>>();

			for (Method method : methods) {
				if ((onlySetter && method.getName().startsWith("set") && method.getParameterTypes().length == 1) || ((onlyGetter && method.getName().startsWith("get") || onlyGetter && method.getName().startsWith("is")) && method.getParameterTypes().length == 0)) {
					String attributeKey = method.getName().substring(3);
					attributeKey = Introspector.decapitalize(attributeKey);
					try {
						Field field = param.getDeclaredField(attributeKey);
						result.put(attributeKey, new SimpleEntry<Class<?>, Method>(field.getType(), method));
					} catch (NoSuchFieldException e) {
						// attribute has an incorrect name according to naming conventions (THIS CASE NEEDS TO BE FIXED)
						// OR
						// attribute does not exist (f.e. getCollisionRect for Unit class) (THIS CASE IS OKAY) 
						// OR
						// method was overridden (THIS CASE IS OKAY)
						if (onlySetter)
							LOGGER.info("Settermethod could not be retrieved for " + param + " and attribute: " + attributeKey, e);
						else
							LOGGER.info("Gettermethod could not be retrieved for " + param + " and attribute: " + attributeKey, e);
					}
				}
			}
		} catch (Exception e) {
			result.clear();
			result = null;
			if (onlySetter)
				LOGGER.fatal("Setters could not be retrieved for :" + param, e);
			else
				LOGGER.fatal("Gettermethods could not be retrieved for:" + param, e);
		}

		return result;
	}