public CycList<E> deepCopy() {
    final CycList cycList = new CycList<E>();
    if (!this.isProperList()) {
      if (this.dottedElement instanceof CycList) {
        cycList.setDottedElement(((CycList) this.dottedElement).deepCopy());
      } else {
        cycList.setDottedElement(this.getDottedElement());
      }
    }
    for (int i = 0; i < super.size(); i++) {
      final Object element = this.get(i);
      if (element instanceof CycList) {
        cycList.add(((CycList) element).deepCopy());
      } else {
        cycList.add(element);
      }
    }
    return cycList;
  }