private boolean similarExceptForStateNames(STS sts1, STS sts2) {
		Map<Action, Action> correspAction = new HashMap<Action, Action>();
		Map<Transition, Transition> correspTransition = new HashMap<Transition, Transition>();
		Map<State, State> correspState = new HashMap<State, State>();
		
		boolean inputsMatch = matchInputActions(sts1, sts2, correspAction);
		if (!inputsMatch) {
			return false;
		}
		
		boolean transMatch = matchTransitions(sts1, sts2, correspAction, correspTransition);
		if (!transMatch) {
			return false;
		}
		
		State init1 = sts1.getInitialState();
		correspState.put(init1, sts2.getInitialState());
		
		for (Transition t1 : correspTransition.keySet()) {
			Transition t2 = correspTransition.get(t1);
			
			State corr = correspState.get(t1.getSource());
			if (corr != null && !corr.equals(t2.getSource())) {
				return false;
			}
			correspState.put(t1.getSource(), t2.getSource());
			
			State corrTarget = correspState.get(t1.getTarget());
			if (corrTarget != null && !corrTarget.equals(t2.getTarget())) {
				return false;
			}
			correspState.put(t1.getSource(), t2.getSource());
		}
		
		return true;
	}