@Override public CompletionStage<WithDittoHeaders> apply(final WithDittoHeaders withDittoHeaders) { requireNonNull(withDittoHeaders); final Optional<SubstitutionStrategy> firstMatchingStrategyOpt = substitutionStrategyRegistry.getMatchingStrategy(withDittoHeaders); if (firstMatchingStrategyOpt.isPresent()) { final SubstitutionStrategy firstMatchingStrategy = firstMatchingStrategyOpt.get(); return CompletableFuture.supplyAsync(() -> { @SuppressWarnings("unchecked") final WithDittoHeaders maybeSubstituted = firstMatchingStrategy.apply(withDittoHeaders, substitutionAlgorithm); return maybeSubstituted; }); } else { return CompletableFuture.completedFuture(withDittoHeaders); } }