docs: public List<RunnerResult> runTasks(AnnotatedFile input, File output, List<InternalTask> tasks) throws IOException, TaskSystemException {
  		Progress progress = new Progress();
  		logger.info(name + " started on " + progress.getStart());
  		int i = 0;
  		NumberFormat nf = NumberFormat.getPercentInstance();
  		//FIXME: implement temp file handling as per issue #47
  		TempFileWriter tempWriter =
  				writeTempFiles?
  							tempFileWriter!=null?tempFileWriter:new DefaultTempFileWriter.Builder().build()
  						:
  							null;
  		List<RunnerResult> ret = new ArrayList<>();
  		try (TaskRunnerCore itr = new TaskRunnerCore(input, output, tempWriter)) {
  			for (InternalTask task : tasks) {
  				ret.addAll(itr.runTask(task));
  				i++;
  				ProgressEvent event = progress.updateProgress(i/(double)tasks.size());
  				logger.info(nf.format(event.getProgress()) + " done. ETC " + event.getETC());
  				progressListeners.forEach(v->v.accept(event));
  			}
  		} catch (IOException | TaskSystemException | RuntimeException e) {
  			//This is called after the resource (fj) is closed.
  			//Since the temp file handler is closed the current state will be written to output. However, we do not want it.
  			if (!output.delete()) {
  				output.deleteOnExit();
  			}
  			throw e;
  		}
  		if (!keepTempFilesOnSuccess && tempWriter!=null) {
  			// Process were successful, delete temp files
  			tempWriter.deleteTempFiles();
  		}
  		logger.info(name + " finished in " + Math.round(progress.timeSinceStart()/100d)/10d + " s");
  		return ret;		
  	}