match.getParent().addChild(ix,clonedAndMatchedTree(insTree,left,false));
match.getParent().addChild(ix,clonedAndMatchedTree( insTree instanceof BaseNode ? (left ? ((BaseNode) insTree).getLeft().getFullMatch() : ((BaseNode) insTree).getRight().getFullMatch() ) : insTree ,left,false));
  private void doEditTrees( MarkableBaseNode src,   MarkableBaseNode dest, boolean after, Node insTree, boolean cloneInsTree,                           boolean left ) {    MatchedNodes m = null;    //BranchNode deletedNode = null;    if( src != null ) {      // We should detach all matches of src      // NOTE! for move with multiple matches, assumes all matches are identical!      // (we only keep track of 1 deleted node, and reattach it to every copy)      m = left ? src.getLeft() : src.getRight();      for( Iterator i = m.getMatches().iterator();i.hasNext();) {        BranchNode match = (BranchNode) i.next();        insTree = match; // DONT USE .getBaseMatch(), as there may be changes in the Branch!        match.getParent().removeChild(match.getChildPos());      }      m.getMatches().clear();    }    if( dest != null ) {      m = left ? dest.getLeft() : dest.getRight();      for( Iterator i = m.getMatches().iterator();i.hasNext();) {        BranchNode match = (BranchNode) i.next();        int ix = match.getChildPos() + (after ? 1: 0);        if (!cloneInsTree) {          if( src != null ) {            ((BranchNode) insTree).setBaseMatch( src, BranchNode.MATCH_FULL );            (left ? src.getLeft() : src.getRight()).addMatch((BranchNode)insTree);          }          match.getParent().addChild(ix,insTree);        } else {          match.getParent().addChild(ix,clonedAndMatchedTree(insTree,left,false));        }      }    }  }