private static State mergeStates(Set<State> original, DataMerger merger) {
		List<String> names = new ArrayList<String>(original.size());
		for (State s : original)
			names.add(s.name);
		Collections.sort(names);

		StringBuilder name = new StringBuilder();
		for (String n : names)
			name.append(n + "|");

		State newState = new State(name.toString());

		Iterator<State> it = original.iterator();
		Object o = it.next().getData();
		while (it.hasNext()) {
			State st = it.next();
			o = merger.merge(o, st.getData());
			Logger.log(" " + st);
		}
		
		if (o instanceof Set<?>) {
			newState.setData(o);			
		} else {
			Set<Object> set = new HashSet<Object>();
			set.add(o);
			newState.setData(set);
		}
		return newState;
	}