@Override
	public void run() {
		if(!this.inFlight) // initial 
		{
			calcGetsLost();
			exchangeTransitions(Statics.RX_HELI);
			stopDbDiscoverer();
			waitForTakeOff();
			depart();
		} else {
			getLost();
		}
		
		while(this.inFlight)
		{
			long timeMillis = System.currentTimeMillis();
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			this.flightTimeElapsedInMs += System.currentTimeMillis() - timeMillis;
			printElapsedTime();
			
			// when on half way to the target
			if(this.flightTimeElapsedInMs >= FLIGHT_TIME_IN_MS/2 && !this.radarContacted)
			{
				// start discovering for connection partners
				if(this.dbDiscoverer == null)
				{
					startDbDiscoverer();
				}
			}
			
			// when arrived
			if(this.flightTimeElapsedInMs >= FLIGHT_TIME_IN_MS)
			{
				land();
				exchangeTransitions(Statics.RX_SERVER);
				waitForTakeOff();
				exchangeTransitions(Statics.RX_HELI);
				depart();				
			}
		}
	}