public E next() {
    if (currentIterator.hasNext()) {
      while (true) {
        try {
          E e = currentIterator.next();
          lastIteratorToReturn = currentIterator;
          advance();
          return e;
        } catch (Exception e) {
          System.err.println("bad file");
          if (!sourceIterators.hasNext()) {
            throw new NoSuchElementException();
          }
          currentIterator = sourceIterators.next();        
        }
      }
    }
    throw new NoSuchElementException();
  }