private static Method findSetterWithCompatibleParamType(final Class<?> clazz, final String setterName,
		final Class<?> argumentType) {
		
		Method compatibleSetter = null;
		for( final Method method : clazz.getMethods() ) {
			
			if( !setterName.equals(method.getName()) || method.getParameterTypes().length != 1 ) {
				continue; // setter must have correct name and only 1 parameter
			}
			
			final Class<?> parameterType = method.getParameterTypes()[0];
			if( parameterType.equals(argumentType) ) {
				compatibleSetter = method;
				break; // exact match
				
			} else if( parameterType.isAssignableFrom(argumentType) ) {
				compatibleSetter = method; // potential match, but keep looking for exact match
			}
			
		}
		
		return compatibleSetter;
	}