public Position getNextPos(Node n) {
		if(initialize) {
			initialize = false;
			
			double speed = Math.abs(speedDistribution.nextSample()); // units per round
			double wt = Math.ceil(waitingTimeDistribution.nextSample()); // potential waiting time
			Position startPos = getNextWayPoint();
			nextDestination = getNextWayPoint();
			double mt = startPos.distanceTo(nextDestination) / speed; // time of the move
			double fraction = (wt + mt) * random.nextDouble();
			double dx = nextDestination.xCoord - startPos.xCoord;
			double dy = nextDestination.yCoord - startPos.yCoord;
			if(fraction < wt) {
				// start waiting
				remaining_waitingTime = (int) Math.ceil(wt - fraction);
				remaining_hops = 0;
				
				double movedFraction = random.nextDouble();
				startPos.xCoord += dx * movedFraction;
				startPos.yCoord += dy * movedFraction;
				return startPos; // don't consider initial distribution
			} else {
				double movedFraction = (fraction - wt) / mt; // how far the node has already moved on the line [0..1]
				// the current position 
				startPos.xCoord += dx * movedFraction;
				startPos.yCoord += dy * movedFraction;

				// remaining vector to move
				dx *= (1-movedFraction);
				dy *= (1-movedFraction);
				
				// determine the number of rounds needed to reach the target
				double dist = nextDestination.distanceTo(startPos);
				double rounds = dist / speed;
				remaining_hops = (int) Math.ceil(rounds);
				// determine the moveVector which is added in each round to the position of this node
				moveVector = new Position(dx / rounds, dy / rounds, 0);
				remaining_waitingTime = 0;
				return startPos;
			}
		}
		return super.getNextPos(n);
	}