private int calculateSpeed(Street currentStreet) throws InterruptedException {
		
		int speedLimit = 0;
		
		// Limit by street type
		if(!SimulationOption.IGNORE_SPEEDLIMIT.equals(vehicle.getSimulationOption())) {
			
			speedLimit = Math.min(currentStreet.getStreetType().getSpeedLimit(), vehicle.getMaxSpeed());
		}else{
			
			speedLimit = vehicle.getMaxSpeed();
		}
		
		// Limitation for no-passing streets	
		if(currentStreet.isNoPassing()) {
			for(Vehicle other : currentStreet.getVehicles()) {
				
				int abstand =  this.vehicle.getDistToNext() - other.getDistToNext();
				if(other == this.vehicle || abstand < 0) {
					// Don't check myself and only look forward
					continue;
				}
				
				if(abstand == Constants.DISTANCE_NO_PASSING) {
					// speed of other vehicle
					speedLimit = Math.min(currentStreet.getStreetType().getSpeedLimit(), other.getMaxSpeed());
				} else if(abstand < Constants.DISTANCE_NO_PASSING) {
					// slow a bit down
					speedLimit = Math.min(currentStreet.getStreetType().getSpeedLimit(), other.getMaxSpeed()) - 10;
				}
			}
		}
		
		return speedLimit;
	}