public CycList<E> flatten() {
    final CycList<E> result = new CycList<E>();
    final Iterator<E> i = this.iterator();
    while (i.hasNext()) {
      E obj = i.next();
      if (obj instanceof CycList) {
        result.addAll(((CycList) obj).flatten());
      } else {
        result.add(obj);
      }
    } //end while
    if (!isProperList) {
      result.add(getDottedElement());
    }
    return result;
  }