function push( ParseNode $Node, $recursion = true ){
		if( $Node->pidx ){
			trigger_error("Node $Node->idx already has parent $Node->pidx", E_USER_WARNING );
		}
		// Resolve recursion on the fly if required
		if( $this->t === $Node->t && $Node->length ){
			// allow node's own setting to override parameter
			if( isset($Node->recursion) ){
				$recursion = $Node->recursion;
			}
			if( ! $recursion ){
				$this->push_thru( $Node );
				$Node->destroy();
				return $this->length;
			}
		}
		// else set node as child of self
		$Node->pidx = $this->idx;
		$Node->depth = $this->depth + 1;
		$this->p = 0;
		return $this->length = array_push( $this->children, $Node );	
	}