private ConditionsTreeNode cloneNode(ConditionsTreeNode parent) {
    ConditionsTreeNode copy = new ConditionsTreeNode(parent, mValue);

    copy.mCondition = mCondition.clone();
    copy.mLeftMPTTMarker = mLeftMPTTMarker;
    copy.mRightMPTTMarker = mRightMPTTMarker;

    copy.mLeft = (mLeft == null) ? null : mLeft.cloneNode(copy);
    copy.mRight = (mRight == null) ? null : mRight.cloneNode(copy);

    return copy;
  }
  /* package */ ConditionsTreeNode cloneTree() {
    if (mParent != null) {
      throw new IllegalStateException("Can't call cloneTree() for a non-root node");
    }

    ConditionsTreeNode copy = new ConditionsTreeNode(mCondition.clone());

    copy.mLeftMPTTMarker = mLeftMPTTMarker;
    copy.mRightMPTTMarker = mRightMPTTMarker;

    copy.mLeft = (mLeft == null) ? null : mLeft.cloneNode(copy);
    copy.mRight = (mRight == null) ? null : mRight.cloneNode(copy);

    return copy;
  }