public void update() throws MaltChainedException {
		// Retrieve the address value 
		final AddressValue arg1 = addressFunction1.getAddressValue();
		final AddressValue arg2 = addressFunction2.getAddressValue();
//		featureValue.setKnown(true);
		// if arg1 or arg2 is null, then set a NO_NODE null value as feature value
		if (arg1.getAddress() == null || arg2.getAddress() == null) { 
			featureValue.setIndexCode(table.getNullValueCode(NullValueId.NO_NODE));
			featureValue.setSymbol(table.getNullValueSymbol(NullValueId.NO_NODE));
			featureValue.setValue(1);

			featureValue.setNullValue(true);			
		} else {
			// Unfortunately this method takes a lot of time  arg1.getAddressClass().asSubclass(org.maltparser.core.syntaxgraph.node.DependencyNode.class);
			// Cast the address arguments to dependency nodes
			final DependencyNode node1 = (DependencyNode)arg1.getAddress();
			final DependencyNode node2 = (DependencyNode)arg2.getAddress();
			
			if (!node1.isRoot() && !node2.isRoot()) { 
				// Calculates the distance
				final int index1 = node1.getIndex();
				final int index2 = node2.getIndex();
				final int distance = Math.abs(index1-index2);
				
				
				int lower = -1;
				boolean f = false;
				for (Integer upper : normalization.keySet()) {
					if (distance >= lower && distance < upper) {
						featureValue.setIndexCode(table.getSymbolStringToCode(normalization.get(lower)));
						featureValue.setSymbol(normalization.get(lower));
						featureValue.setValue(1);
						f = true;
						break;
					}
					lower = upper;
				}
				if (f == false) {
					featureValue.setIndexCode(table.getSymbolStringToCode(normalization.get(lower)));
					featureValue.setSymbol(normalization.get(lower));
					featureValue.setValue(1);
				}
				
				// Tells the feature value that the feature is known and is not a null value
				
				featureValue.setNullValue(false);

			} else { 
				// if node1 or node2 is a root node, set a ROOT_NODE null value as feature value
				featureValue.setIndexCode(table.getNullValueCode(NullValueId.ROOT_NODE));
				featureValue.setSymbol(table.getNullValueSymbol(NullValueId.ROOT_NODE));
				featureValue.setValue(1);
				featureValue.setNullValue(true);
			}
		}
	}