private void setEstimatedLapsByBest()
	{
		int oldEstimatedLapsBest = this.estimatedLapsBest;
		Duration oldEstimatedTimeBest = this.estimatedTimeBest;
		Competitor competitor = Competitor.getByPosition(1);
		if (competitor == null) {
			this.estimatedLapsBest = lapsToGo;
			return;
		}

		int laps = competitor.getLapsComplete();
		if (laps == 0) {
			this.estimatedLapsBest = lapsToGo;
			return;
		}
		int time = competitor.getTotalTime().toInt();
		int bestLapTime = competitor.getBestLap().toInt();

		if (bestLapTime == 0) {
			this.estimatedLapsBest = lapsToGo;
			return;
		}

		do {
			time += bestLapTime;
			laps += 1;
		} while (time < scheduledTime.toInt());

		if (lapsToGo == 0 || laps < lapsToGo + competitor.getLapsComplete()) {
			this.estimatedLapsBest = laps;
		} else {
			this.estimatedLapsBest = scheduledLaps;
		}

		this.estimatedTimeBest = new Duration(time);

		changeSupport.firePropertyChange("estimatedLapsBest", oldEstimatedLapsBest,
			Integer.toString(this.estimatedLapsBest));
		changeSupport.firePropertyChange("estimatedTimeBest", oldEstimatedTimeBest, estimatedTimeBest);
	}