@NonNull
    public List<Image> getFilteredSpoilers() {
        if (getSpoilers().isEmpty()) {
            return Collections.emptyList();
        }
        final Set<String> listingUrls = new HashSet<>();
        ImageUtils.forEachImageUrlInHtml(s -> listingUrls.add(ImageUtils.imageUrlForSpoilerCompare(s)), getShortDescription(), getDescription());
        final List<Image> result = new ArrayList<>();
        for (Image spoilerCandidate : getSpoilers()) {
            final boolean spoilerInTitle = spoilerCandidate.getTitle() != null &&
                    spoilerCandidate.getTitle().toLowerCase(Locale.US).contains("spoiler");
            final boolean containedInListing = listingUrls.contains(ImageUtils.imageUrlForSpoilerCompare(spoilerCandidate.getUrl()));
            if (spoilerInTitle || !containedInListing) {
                result.add(spoilerCandidate);
            }
        }
        return result;
    }
applies filter/plausibilization logic to cache spoilers
main/src/main/java/cgeo/geocaching/models/Geocache.java