diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
index f0faa2fee529f5f82d28014a2409a6934bce03b2..fe71cc91bb231c9e7283f5d6a563f52cbdbd7d96 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
@@ -27,36 +27,36 @@ automaton::InputDrivenDPDA Determinize::determinize(const automaton::InputDriven
 
 	// 2
 	std::deque<automaton::State> todo;
-	todo.push_back(initialState);
+	todo.push_back(std::move(initialState));
 
 	do {
 		// 3a, c
-		automaton::State state = todo.front();
+		automaton::State state = std::move(todo.front());
 		todo.pop_front();
 
 		// 3b
-		for (const auto& input : nfa.getInputAlphabet()) {
+		for (const alphabet::Symbol& input : nfa.getInputAlphabet()) {
 			std::set<automaton::State> targetIDPDAStates;
-			for(const auto& nfaState : recreateNFAStates(state)) {
-				auto iter = nfa.getTransitions().find(std::make_pair(nfaState, input));
+			for(automaton::State nfaState : std::make_moveable_set(recreateNFAStates(state))) {
+				auto iter = nfa.getTransitions().find(std::make_pair(std::move(nfaState), input));
 				if(iter != nfa.getTransitions().end()) {
 					targetIDPDAStates.insert(iter->second.begin(), iter->second.end());
 				}
 			}
-			automaton::State dfaState = createDFAState(targetIDPDAStates);
+			automaton::State dfaState = createDFAState(std::move(targetIDPDAStates));
 
 			// 4
 			bool existed = !res.addState(dfaState);
 
-			// 3b
-			res.addTransition(state, input, dfaState);
-
 			if(!existed) todo.push_back(dfaState);
+
+			// 3b
+			res.addTransition(std::move(state), input, std::move(dfaState));
 		}
 	} while(!todo.empty());
 
 	// 5
-	for (const auto& dfaState : res.getStates()) {
+	for (const automaton::State & dfaState : res.getStates()) {
 		std::set<automaton::State> nfaStates = recreateNFAStates(dfaState);
 		if(std::any_of(nfaStates.begin(), nfaStates.end(), [&](const automaton::State& nfaState) { return nfa.getFinalStates().count(nfaState); })) {
 			res.addFinalState(dfaState);
diff --git a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx
index d49aa10b63f0ff517ad386fc571b9da43f7abe48..fb04dad3430451b8325393d2db4407383b452242 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx
@@ -24,7 +24,7 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n
 
 	// 2
 	std::deque<automaton::State> todo;
-	todo.push_back(initialState);
+	todo.push_back(std::move(initialState));
 
 	do {
 		// 3a, c
@@ -35,7 +35,7 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n
 		for (const alphabet::Symbol& input : nfa.getInputAlphabet()) {
 			std::set<automaton::State> targetNFAStates;
 			for(automaton::State nfaState : std::make_moveable_set(recreateNFAStates(state))) {
-				auto iter = nfa.getTransitions().find(std::make_pair(std::move(nfaState), alphabet::Symbol(input)));
+				auto iter = nfa.getTransitions().find(std::make_pair(std::move(nfaState), input));
 				if(iter != nfa.getTransitions().end()) {
 					targetNFAStates.insert(iter->second.begin(), iter->second.end());
 				}
@@ -45,10 +45,10 @@ automaton::DFA Determinize::determinize(const automaton::MultiInitialStateNFA& n
 			// 4
 			bool existed = !res.addState(dfaState);
 
-			// 3b
-			res.addTransition(state, input, dfaState);
-
 			if(!existed) todo.push_back(std::move(dfaState));
+
+			// 3b
+			res.addTransition(std::move(state), input, std::move(dfaState));
 		}
 	} while(!todo.empty());
 
@@ -73,7 +73,7 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) {
 
 	// 2
 	std::deque<automaton::State> todo;
-	todo.push_back(initialState);
+	todo.push_back(std::move(initialState));
 
 	do {
 		// 3a, c
@@ -84,7 +84,7 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) {
 		for (const alphabet::Symbol& input : nfa.getInputAlphabet()) {
 			std::set<automaton::State> targetNFAStates;
 			for(automaton::State nfaState : std::make_moveable_set(recreateNFAStates(state))) {
-				auto iter = nfa.getTransitions().find(std::make_pair(std::move(nfaState), alphabet::Symbol(input)));
+				auto iter = nfa.getTransitions().find(std::make_pair(std::move(nfaState), input));
 				if(iter != nfa.getTransitions().end()) {
 					targetNFAStates.insert(iter->second.begin(), iter->second.end());
 				}
@@ -94,10 +94,10 @@ automaton::DFA Determinize::determinize(const automaton::NFA& nfa) {
 			// 4
 			bool existed = !res.addState(dfaState);
 
-			// 3b
-			res.addTransition(state, input, dfaState);
+			if(!existed) todo.push_back(dfaState);
 
-			if(!existed) todo.push_back(std::move(dfaState));
+			// 3b
+			res.addTransition(std::move(state), input, std::move(dfaState));
 		}
 	} while(!todo.empty());