public Quantity getFuelConsumption(final Quantity distance) {
		Double result = 0d;
		final Double convDistance = distance.convert(Unit.KILOMETER).getAmount();

		// calculate with multiple trips if distance exceeds the max range of this airplane
		final double numTrips = Math.ceil(convDistance / this.specs.getMaxRange());
		final double calcDist = convDistance / numTrips;

		if (this.specs.hasConsumptionData()) {
			final Map<Double, Double> consumptionProfile = this.specs.getConsumptionProfile();
			if (consumptionProfile.containsKey(calcDist)) {
				result = consumptionProfile.get(calcDist);
			} else {
				Double minKey = null;
				Double maxKey = null;
				// make List from keyset
				final List<Double> keys = new ArrayList<Double>(consumptionProfile.keySet());
				// sort keys in ascending order
				Collections.sort(keys);
				// identify closest values
				for (final Double key : keys) {
					if (calcDist < key) {
						// once a key with a higher distance is found the maxValue is found. exit loop.
						maxKey = key;
						break;
					} else {
						// as long as distance is bigger than key a new minValue is found
						minKey = key;
					}
				}
				if (minKey == null) {
					// may happen if consumption profile holds only key-values bigger than distance
					// linear interpolation will be used
					result = calcDist * consumptionProfile.get(maxKey) / maxKey;
				} else if (maxKey == null) {
					// may happen if consumption profile hold only key-values smaller than distance
					// linear interpolation will be used
					result = calcDist * consumptionProfile.get(minKey) / minKey;
				} else {
					// linear interpolation
					final double steep = (consumptionProfile.get(maxKey) - consumptionProfile.get(minKey))
							/ (maxKey - minKey);
					result = consumptionProfile.get(minKey) + (calcDist - minKey) * steep;
				}

			}
		}
		return new QuantityImpl(result * numTrips, Unit.KILOGRAM);
	}