@Override
	public boolean replaceChild(Construct replaceMe, Construct newCon)
	{
		if(mState != null && mState.mPlaceholders != null) { 
			int indexOfOldConstruct = this.children.indexOf(replaceMe);
			Placeholder descriptor = null;
			
			// If the index of the old construct is bigger than our placeholders
			// size, then we are likely dealing with a variadic placeholder at the
			// end of the placeholders list. Verify this, and assume this case.
			if(indexOfOldConstruct >= this.mState.mPlaceholders.size()) { 
				// Fetch the last descriptor and verify that it is variadic
				descriptor = mState.mPlaceholders.get(mState.mPlaceholders.size() - 1);
				if(!descriptor.isVariadic()) {
					System.err.println("<ClojureConstruct> Index of replaceChild exceeds mPlaceholders.size() but last placeholder is NOT variadic.");
					return false;
				}
			} else { 
				descriptor = this.mState.mPlaceholders.get(indexOfOldConstruct);
			}
			
			if(!descriptor.isAllowed(newCon.getClass())) { 
				Application.showErrorMessage(descriptor.getHint() + " requires instance of " + descriptor.getClassRestriction().getSimpleName());
				return false;
			}

			if(descriptor.isPermanent()) {
				Application.showErrorMessage("Cannot delete this construct");
				return false;
			}
			
			if(descriptor.isVariadic() && 
					replaceMe.getClass().equals(PlaceholderConstruct.class))
			{ 
				this.addChild(indexOfOldConstruct, newCon, false);
				return true;
			}

			mState.setIsPopulated(descriptor, true);
			mState.mConstructsToPlaceholders.put(newCon, descriptor);			
		}
				
		return super.replaceChild(replaceMe, newCon);
	}