docs: @Override
  	public boolean setChildAt(int index, N newChild) throws IndexOutOfBoundsException {
  		final N oldChild = (index < this.children.length) ? this.children[index] : null;
  		if (oldChild == newChild) {
  			return false;
  		}
  
  		if (oldChild != null) {
  			oldChild.setParentNodeReference(null, true);
  			--this.notNullChildCount;
  			firePropertyChildRemoved(index, oldChild);
  		}
  
  		if (newChild != null) {
  			final N oldParent = newChild.getParentNode();
  			if (oldParent != this) {
  				newChild.removeFromParent();
  			}
  		}
  
  		// set the element
  		this.children[index] = newChild;
  
  		if (newChild != null) {
  			newChild.setParentNodeReference(toN(), true);
  			++this.notNullChildCount;
  			firePropertyChildAdded(index, newChild);
  		}
  
  		return true;
  	}