@Override
  public List<SchedulingTask> apply() {
    l = getAlgorithm().getWorkflow().instantiate(getInstance().getInstanceSize());
    setInstance(l);
    List<SchedulingTask> scheduledTasks = new ArrayList<SchedulingTask>(getScheduledTasks());

    getAlgorithm().schedulePathOnInstance(scheduledTasks, l, getUmodLocalTaskStarttimes());

    Set<SchedulingTask> modified = new HashSet<SchedulingTask>();
    for (SchedulingTask task : getPcp()) {
      repairDependencies(task, scheduledTasks, modified);
    }

    for (SchedulingTask t : modified) {
      t.setLatestEndTime(-1.);
    }

    for (SchedulingTask t : modified) {
      AbstractAlgorithm.calcLFT(t);
    }

    return scheduledTasks;
  }