public static void become(TuringMachine dest, TuringMachine src){
        System.out.println("Calling the real become"); 
		
		dest.clear();
		// Copy over the states.
		HashMap<TMState, TMState> map = new HashMap<TMState, TMState>(); // Old states to new states.
//		Iterator it = src.states.iterator();
		for (Object o: src.states){
            System.out.println(o.getClass().getName());
			TMState state = (TMState) o;
			TMState nstate = new TMState(state.getID(),
					new Point(state.getPoint()), dest); //this time we're not using copy constructor
//			copyStaticRelevantDataForBlocks(nstate, state, dest, src);
			nstate.setLabel(state.getLabel());
			nstate.setName(state.getName());
			map.put(state, nstate);
			dest.addState(nstate);
            
		}
		// Set special states.
        for (Object o: src.finalStates){
            TMState tms = (TMState) o;
            dest.addFinalState(map.get(tms));
        }
		dest.setInitialState((TMState) map.get((TMState) src.getInitialState()));

		// Copy over the transitions.
        for (Object o: src.states){ 
            TMState tms = (TMState)o;
			Transition[] ts = src.getTransitionsFromState(tms);
			TMState from =  map.get(tms);
			for (int i = 0; i < ts.length; i++) {
				TMState to =  map.get(ts[i].getToState());
                Transition toBeAdded = (Transition)ts[i].clone();
                toBeAdded.setFromState(from);
                toBeAdded.setToState(to);

//				dest.addTransition(ts[i].copy(from, to));
				dest.addTransition(toBeAdded);
			}

        }
		for(int k = 0; k < src.getNotes().size(); k++){
			Note curNote = (Note)src.getNotes().get(k);		
			dest.addNote(new Note(curNote.getAutoPoint(), curNote.getText()));
            ((Note)dest.getNotes().get(k)).initializeForView(curNote.getView());
		}
        dest.setEnvironmentFrame(src.getEnvironmentFrame());
//		EDebug.print("finished");
    }