code: public FieldControl getControl(final MathRandom random, Element element, final Range range) {
  		if (finder == null) {
  			finder = new XmlElementFinder(element.getDocument());
  		}
  		Element fieldElement = element.getChild(XMLTags.FIELD);
  		if (fieldElement != null) {
  			element = fieldElement;
  		} else {
  			fieldElement = element.getChild(XMLTags.FIELD_REF);
  			if (fieldElement != null) {
  				element = finder.findElementById(fieldElement);
  			} else if (XMLTags.FIELD_REF.equals(element.getName())) {
  				// search for original field element
  				element = finder.findElementById(element);
  			}
  		}
  		element = element.getChild(XMLTags.CONTROL_REF);
  		element = finder.findElementById(element);
  		if (element == null) {
  			throw new IllegalStateException("Could not find control object");
  		}
  		String className = null;
  		Class<? extends FieldControl> classObject = null;
  		try {
  			className = element.getAttributeValue(XMLTags.CLASS);
  			className = className.indexOf('.') > 0 ? className : getClass().getPackage().getName() + '.' + className;
  			classObject = Class.forName(className).asSubclass(FieldControl.class);
  		} catch (ClassNotFoundException e) {
  			throw new IllegalStateException("Could  not load class " + className, e);
  		}
  		Constructor<? extends FieldControl> constructor = null;
  		try {
  			constructor = classObject.getConstructor(new Class[] { MathRandom.class, Element.class, Range.class });
  		} catch (NoSuchMethodException e) {
  			throw new IllegalStateException("Could not find constructor for class " + className, e);
  		}
  		try {
  			return constructor.newInstance(new Object[] { random, element, range });
  		} catch (Exception e) {
  			throw new IllegalStateException("Could not call constructor for class " + className, e);
  		}
  	}
docs: Returns a new {@link FieldControl}instance. The element passed either has to be of type
  {@link XMLTags#FIELD} or {@link XMLTags#FIELD_REF} or at least contain one of these tags.