public Map<Class<? extends TemplateGenerator>, Long> performMultiRoundCheck() {

        Map<Class<? extends TemplateGenerator>, Long> result = new HashMap<Class<? extends TemplateGenerator>, Long>();

        for (int i = 0; i < numberOfCheckRounds; i++) {

            Map<Class<? extends TemplateGenerator>, Long> oneRoundResult = performOneRoundCheck();
            if (i == 0) {
                result.putAll(oneRoundResult);
            } else {
                for (Entry<Class<? extends TemplateGenerator>, Long> resultEntry : oneRoundResult.entrySet()) {

                    Class<? extends TemplateGenerator> generatorClass = resultEntry.getKey();
                    // calculate average avg(x_0, ... ,x_i-1) = (avg(x_0, ...
                    // x_i-2) * (i - 1) + x_i-1) / i
                    long average = (long) ((result.get(generatorClass)) * (i / (i + 1d)) + (resultEntry.getValue() / (i + 1d)));
                    result.put(generatorClass, average);
                }
            }
            
            logger.debug("Round {} results:", i);
            logResults(oneRoundResult);
        }
        
        logger.debug("\nAverage results in {} rounds:", numberOfCheckRounds);
        logResults(result);

        return result;
    }