public boolean isDisturbed(Packet p) {
		Position receiverPos = p.destination.getPosition();
		double distanceFromSource = p.origin.getPosition().distanceTo(receiverPos);
		double poweredDistanceFromSource = Math.pow(distanceFromSource, alpha);
		
		double signal = p.intensity/poweredDistanceFromSource;
		
		double noise = ambientNoise;

		
		for(Packet pack : Runtime.packetsInTheAir) { // iterate over all active packets
			if(pack == p) {
				continue; // that's the packet we want
			}
			if(pack.origin.ID == p.destination.ID) {
				// the receiver node of p is sending a packet itself
				if(!Configuration.canReceiveWhileSending) {
					return true;
				}
				continue; // the interference created from this sender is not considered
			}
			// Detect multiple packets that want to arrive in parallel at the same destination. 
			if(!Configuration.canReceiveMultiplePacketsInParallel && pack.destination.ID == p.destination.ID ) {
				return true;
			}
			
			Position pos = pack.origin.getPosition();
			double distance = pos.distanceTo(receiverPos);
			double poweredDistance = Math.pow(distance, alpha);
			noise += pack.intensity / poweredDistance;
		}
		
		boolean disturbed = signal < beta * noise;
		
		if(LogL.INTERFERENCE_DETAIL) {
			Global.log.logln("Node "+p.destination.ID+" is checking a packet from "+p.origin.ID);
			if(disturbed){
				Global.log.logln("Dropped the message due to too much interference.");
			}
		}
		
		return disturbed;
	}