public void setProperty(String prop, Object value) {
		Map<String, Class<? extends Object>> specialProperties = null;
		try {
			java.lang.reflect.Field f = Class.forName(new Throwable().fillInStackTrace().getStackTrace()[1].getClassName()).getField("SPECIAL_PROPERTIES");
			if(f.getType().getName().equals("java.util.Map")) {
				specialProperties = (Map<String, Class<? extends Object>>) f.get(null);
			}
		} catch (Exception e) {}
		
		if ((Channel.ALLOWED_PROPERTIES.containsKey(prop) && value.getClass().equals(Channel.ALLOWED_PROPERTIES.get(prop))) ||
			(specialProperties != null && specialProperties.containsKey(prop) && value.getClass().equals(specialProperties.get(prop)))) {
			this.properties.put(prop, value);
		} else {
			throw new IllegalArgumentException();
		}
	}