public double checkFreeSpaceAhead() {
		  //get a copy of the cars in this road
		  List<Vehicle> cars = new ArrayList<Vehicle>(this.getCurrentRoad().getCars());
		  //sort it by the position attribute from high -> low
		  Collections.sort(cars, new Comparator<Vehicle>() {
			public int compare(Vehicle o1, Vehicle o2) {
				//double c
				if(o1.getPosition() > o2.getPosition()) {
					return -1;
				} else if (o1.getPosition() < o2.getPosition()) {
					return 1;
				} else {
					return 0;
				}
			}});
		  
			//if the set is empty, return the road length
			if (cars.size() == 0) {
				double d = getFreeSpaceInOutsideVehicleAcceptor(this.getCurrentRoad().getNextSeg(this));
				//System.out.println("Cars not found in road! " + this + " " + cars);
				return this.getCurrentRoad().getLength() + d;
			}
			//if the current car isn't in the set, return the back position of the last car
			//if (!cars.contains(this)) {
			//	System.out.println("Car(" + this.hashCode() + ") not in road(" + this.getCurrentRoad() + ") " + this + " return " + cars.last().getBackPosition());
			//	return cars.last().getBackPosition();
			//}
			//System.out.println("FIRST CAR IN road(l=" + cars.get(0) + ") " + cars );
			if (this.equals(cars.get(0))) {
				//the car is first, return the remaining length of the road AND check the next roads for free space
				double d = getFreeSpaceInOutsideVehicleAcceptor(this.getCurrentRoad().getNextSeg(this));
				//System.out.println("FIRST CAR IN road(l=" + this.getCurrentRoad().getLength() + ") " + this + " return " + (this.getCurrentRoad().getLength() - this.getPosition()) + " " + d + " " + cars);
				return (this.getCurrentRoad().getLength() - this.getPosition()) + d;
			}
			//get a set of all elements which are greater than or equal to this object
			int index = cars.indexOf(this);
			if(index == -1) {
				index = cars.size();
			}
			List<Vehicle> frontCars = cars.subList(0, index);
			//System.out.println("Front Cars(" + frontCars.size() + ") in road(" + this.getCurrentRoad().hashCode() + " w/ length: " + this.getCurrentRoad().getLength() + "): " + frontCars + " vs " + cars + " " + this);
			if(frontCars.size() > 0 && !this.equals(frontCars.get(frontCars.size() - 1))) {
				Vehicle v = frontCars.get(frontCars.size() - 1);
				//System.out.println("V is next car " + v + " to(index=" + index + ") " + this);
				//System.out.println("FCS: " + frontCars);
				return v.getBackPosition() - this.getPosition();
			} else {
				//System.out.println("ELSE " + (this.getCurrentRoad().getLength() - this.getPosition()) + " to " + this);
				return this.getCurrentRoad().getLength() - this.getPosition();
			}		  
		  
	  }