code: private boolean substitute(final String aKey) {
  		boolean madeChange = false;
  
  		if (substituting.contains(aKey)) {
  			backing.put(aKey, "");
  			booleanBacking.remove(aKey);
  			recordMessage("WARNING: Recursive substitution detected on parameter " + aKey);
  			String history = locations.get(aKey);
  			locations.put(aKey, history + "recursion detected, using null value; " + history);
  			return true;
  		}
  
  		try {
  			substituting.add(aKey);
  
  			String value = (String) backing.get(aKey);
  
  			int start = findStartVariable(value);
  
  			if (start == -1) {
  				return madeChange;
  			}
  
  			int end = value.indexOf('}', start);
  
  			if (end == -1) {
  				return madeChange;
  			}
  
  			String variableName = value.substring(start + 2, end);
  
  			madeChange = madeChange || substitute(variableName);
  
  			String variableValue = get(variableName);
  
  			if (variableValue == null) {
  				return madeChange;
  			}
  
  			String newValue = value.substring(0, start) + variableValue + value.substring(end + 1);
  
  			madeChange = true;
  
  			backing.put(aKey, newValue);
  
  			if ("yes".equals(newValue) || "true".equals(newValue)) {
  				booleanBacking.add(aKey);
  			} else {
  				booleanBacking.remove(aKey);
  			}
  
  			// Record this substitution in the history
  			String history = locations.get(aKey);
  			history = "substitution of ${" + variableName + "}; " + history;
  			locations.put(aKey, history);
  
  			return madeChange;
  		} finally {
  			substituting.remove(aKey);
  		}
  	}
docs: Performs value substitution for the given key. For values containing ${...} strings, we substitute if the stuff
  in the {...} is a defined key.
  
  @param aKey the key to run the substitution for.
  @return true if a substitutions was made, false otherwise.