public PropagationHistory next() {
   String description = null;
   Vector<ArcWithTimestamp> propagations = new Vector<ArcWithTimestamp>();
   if (nextLine != null) { // we found an @ meme line or tab
     if (nextLine.startsWith("@")) {
       description = nextLine.substring(1).trim();
     } else {
       propagations.add(new ArcWithTimestamp(nextLine));
     }
     nextLine = null;
   }
   while (lineIterator.hasNext()) {
     String str = lineIterator.next().toString();
     if (str.startsWith("#")) {
       continue;
     }
     if (str.startsWith("@")) {
       if (propagations.size() > 0) {
         nextLine = str;
         return new PropagationHistory(description, propagations);
       } else {
         description = str.substring(1).trim();
         continue;
       }
     }
     if (str.startsWith("\t") && propagations.size() > 0) {
       nextLine = str;
       return new PropagationHistory(description, propagations);
     }
     propagations.add(new ArcWithTimestamp(str));
   }
   return new PropagationHistory(description, propagations);
 }
 public boolean hasNext() {
   return lineIterator.hasNext() || (nextLine != null);
 }