public ScoreConfigFactory<P, F> withScoreConfig(ScoreConfig<P, F> config) {
		ScoreConfigFactory<P, F> result = this;
		
		for (PreScorer<P> pre : config.getPreScorers()) {
			if (!preScorers.contains(pre))
				result = withPreScorer(pre);
		}
		
		for (PostScorer<P, F> post : config.getPostScorers()) {
			if (!postScorers.contains(post))
				result = withPost(post);
		}
		
		for (Entry<FScorer<P, F>, Double> scorer : config.getScorers().entrySet()) {
			FScorer<P, F> key = scorer.getKey();
			double value = scorer.getValue();
			if (!scoreSet.containsKey(key))
				result = withScorer(key, value);
			else {
				scoreSet.put(key, value + scoreSet.get(key));
			}
		}
		
		return result;
	}