public void moveTo(double toPosition) {
	  		//get the free space in front of us on this road
	  		double freeSpace = checkFreeSpaceAhead();

	  		
	  		//calculate velocity
	  		double velocity = (_velocity / (_brakeDistance - _stopDistance)) * (freeSpace - _stopDistance);
	  		//System.out.println("V1 = " + velocity);
	  		velocity = Math.max(0, velocity);
	  		//System.out.println("V2 = " + velocity);
	  		velocity = Math.min(_velocity, velocity);
	  		double step = (velocity * MP.simulationTimeStep);
	  		double nextPos = this.getPosition() + step;

	  		//if the road is clear AND the maxMove is beyond the current road road. try to send to the next road
	  		if (nextPos > this.getCurrentRoad().getLength())  {
	  			//send to the next segment and request the appropriate space.
	  			if (sendCarToNextSeg(nextPos - this.getCurrentRoad().getLength())) {
		    		  //System.out.println("Sent car to next seg " + this + " NP " + nextPos + " " + (nextPos - this.getCurrentRoad().getLength()));
		    		  //_ts.enqueue(MP.simulationTimeStep + _ts.currentTime(), this);
		    		  return;
		    	} else {
		    		//the car was rejected by the next road! set the max move to be the 
		    		//length of the road - stopDistance, which should be the max value for the position
		    		nextPos = this.getCurrentRoad().getLength();
		    	}
	  		}
	  		
	  		//System.out.println("C: " + this + " nextPos " + nextPos + " step " + Math.round(step) + " velocity = " + velocity + " fs: " + freeSpace + " rL = " + this.getCurrentRoad().getLength() + " VAL = " + (velocity * MP.simulationTimeStep));
	  		if (nextPos == this.getPosition()) {
	  			//System.out.println("Car stopped: " + this + " " + nextPos + " in road " + this.getCurrentRoad());
	  		}
	  		this.setPosition(nextPos);
	  		
	  	}