@Override
 public final InputProcessor<IndexedContextRoot> getEngine(
     ContextCreationListener creationListener, ContextModificationListener modificationListener) {
   SaturationStatistics localStatistics = new SaturationStatistics();
   localStatistics.startMeasurements();
   creationListener =
       SaturationUtils.addStatsToContextCreationListener(
           creationListener, localStatistics.getContextStatistics());
   modificationListener =
       SaturationUtils.addStatsToContextModificationListener(
           modificationListener, localStatistics.getContextStatistics());
   SaturationStateWriter<? extends C> writer =
       getBaseWriter(creationListener, modificationListener);
   WorkerLocalTodo localTodo = new WorkerLocalTodoImpl();
   WorkerLocalizedSaturationStateWriter<C> optimizedWriter =
       new WorkerLocalizedSaturationStateWriter<C>(writer, localTodo);
   writer = SaturationUtils.<C>getStatsAwareWriter(optimizedWriter, localStatistics);
   writer = getFinalWriter(writer);
   RuleVisitor ruleVisitor =
       SaturationUtils.getStatsAwareRuleVisitor(localStatistics.getRuleStatistics());
   return getEngine(
       getConclusionProcessor(ruleVisitor, writer, localStatistics),
       writer,
       localTodo,
       localStatistics);
 }
 /**
  * @param conclusionProcessor
  * @param saturationStateWriter
  * @param localStatistics
  * @return an {@link InputProcessor} that processes {@link Conclusion}s in {@link Context}s within
  *     an individual worker thread for the input root {@link IndexedClassExpression} using the
  *     supplied {@link SaturationStateWriter} and updates the supplied local {@link
  *     SaturationStatistics} accordingly
  */
 protected InputProcessor<IndexedContextRoot> getEngine(
     ConclusionVisitor<? super Context, Boolean> conclusionProcessor,
     SaturationStateWriter<? extends C> saturationStateWriter,
     WorkerLocalTodo localTodo,
     SaturationStatistics localStatistics) {
   conclusionProcessor =
       SaturationUtils.getTimedConclusionVisitor(conclusionProcessor, localStatistics);
   return new BasicRuleEngine(
       saturationState_.getOntologyIndex(),
       conclusionProcessor,
       localTodo,
       this,
       saturationStateWriter,
       aggregatedStats_,
       localStatistics);
 }