private Map<State, List<Transition>> getInTransitions() {
        Map<State, List<Transition>> inTransitions = new HashMap<State, List<Transition>>();
        for (State state: getStates()){
        	inTransitions.put(state, new ArrayList<Transition>());
        }
        for (State state : getStates()) {
//        	System.out.print("transitions out from state " + state.id + " are: ");
        	for (Transition transition : state.getTransitions()) {
//        		System.out.print(transition.to);
        		List<Transition> stateInTrans = inTransitions.get(transition.to);
        		if (!containsInTransition(stateInTrans, transition)){
//        			System.out.print(" -> new , ");
        			stateInTrans.add(transition);
        		}
        		else {
        			throw new RuntimeException("visiting a transition twice while building Intransitions of states");
        		}
            }
        }
//        System.out.println("\n\n\ninTransitions:");
        for (State state: getStates()){
//        	System.out.print("In Transitions for state " + state.id + " are: ");
        	List<Transition> inTrans = inTransitions.get(state);
        	if (inTrans == null){
//        		System.out.println();
        		continue;
        	}
        	for (Transition inT: inTrans){
//        		System.out.print(getSource(inT).id + " [" + inT.min + "-" + inT.max + "] , ");
        	}
//        	System.out.println();
        }
//        System.out.println("\n\n\n");
        return inTransitions;
    }