private void assignDistanceBinsPerPerson(DesiredDurationPerson desiredDurationPerson) {

    Id personId = desiredDurationPerson.getPersonId();
    PlanImpl plan = (PlanImpl) this.plans.getPersons().get(personId).getSelectedPlan();

    List<? extends PlanElement> actslegs = plan.getPlanElements();
    for (int j = 0; j < actslegs.size(); j = j + 2) {
      final Activity act = (Activity) actslegs.get(j);

      if (act.getType().startsWith("leisure")) {
        final LegImpl leg = (LegImpl) actslegs.get(j + 1);

        if (leg.getMode().equals(this.mode)) {
          int randomDistance =
              (int)
                  Math.round(
                      this.distanceBins.getRandomDistance(
                          desiredDurationPerson.planContainsLeisurePriorToWork()));
          String newActType = act.getType() + "_" + randomDistance;
          act.setType(newActType);

          // minimum duration is 30 min! -> else division by zero while scoring
          plan.getPerson()
              .getDesires()
              .putActivityDuration(
                  newActType, Math.max(30 * 60, desiredDurationPerson.getDuration()));

          // for plot
          this.durationDistanceBins.addVal(desiredDurationPerson.getDuration(), randomDistance);
        }
      }
    }
  }