public DTMAxisIterator cloneIterator() {
    _isRestartable = false;
    final HeapNode[] heapCopy = new HeapNode[_heap.length];
    try {
      MultiValuedNodeHeapIterator clone = (MultiValuedNodeHeapIterator) super.clone();

      for (int i = 0; i < _free; i++) {
        heapCopy[i] = _heap[i].cloneHeapNode();
      }
      clone.setRestartable(false);
      clone._heap = heapCopy;
      return clone.reset();
    } catch (CloneNotSupportedException e) {
      BasisLibrary.runTimeError(BasisLibrary.ITERATOR_CLONE_ERR, e.toString());
      return null;
    }
  }