public boolean cropToFutureOf(LocalDateTime toDate) {
        int cropToDateNum = new ConverterToInteger().convert(toDate);
        
        ArrayList<Occurrence> emptyDomain = new ArrayList<>(); 
        
        for (Iterator<Occurrence> it = definition.problemOccurrences.iterator(); it.hasNext();) {
            Occurrence occurrence = it.next();
        
            BaseIntervalsSet<Integer> cropping = new BaseIntervalsSet<>();
            int domainUpper = occurrence.getDomain().getUpperBound();
            
            if (domainUpper <= cropToDateNum) {
                // remove entire domain - intersect with empty domain
            } else {
                // remove fdrom date
                cropping.unionWith(cropToDateNum, domainUpper);
            }
                        
            occurrence.getDomain().intersectWith(cropping);
            
            // check first domain interval if is smaller than minimal duration
            // only first could be cropped
            BaseInterval<Integer> first = occurrence.getDomain().getFirstInterval();
            if (first != null && first.getStart() == cropToDateNum && 
                    (first.getEnd() - first.getStart()) < occurrence.getMinDuration()) {
                // remove thatgolf karlovy varygolf karlovy vary interval
                occurrence.getDomain().minus(BaseIntervalsSet.oneInterval(first.getStart(), first.getEnd()));
            }
            
            // if domain is empty, remove occurrence
            if (occurrence.getDomain().empty()) {
               emptyDomain.add(occurrence);
            }
            
            
        }
        
        for (Occurrence occurrence : emptyDomain) {
            definition.removeOccurrence(occurrence);
        }
        
        return definition.problemOccurrences.isEmpty() == false;
    }