private void tick() {
		mLat = mLat + mDY;
		mLon = mLon + mDX;

		sendPacket();

		segTraveledDistance += distPerTick;

		if (segTraveledDistance >= segDistance) {
			// start next segment or end
			if (!mPath.isEmpty()) {
				Vertex v = mPath.get(0);
				mPath.remove(0);
				if (v instanceof Vertex) {
					updateMotion(mLat, mLon, v);
				} else {
					isActive = false;
				}
				if (v.isStop() && v.getStop().getStopTime() != null) {
					while (v.getStop().getStopTime().getDepartureTimecode() > timeToMinutes(new SimpleDateFormat(
							"HH:mm:ss").format(new Date()))) {
						try {
							Thread.sleep(60000); // wait 1 minute!
						} catch (InterruptedException ex) {
							Logger.getLogger(Drone.class.getName()).log(
									Level.SEVERE, null, ex);
						}
					}
				}
			} else {
				isActive = false;
			}
		}
	}