diff --git a/alib2algo/src/automaton/transform/Compaction.h b/alib2algo/src/automaton/transform/Compaction.h
index a8b872686227e750ba01f774b736b47f28a23d9a..af619d8cfbf6a430b1c2161ede32f278c79ad19f 100644
--- a/alib2algo/src/automaton/transform/Compaction.h
+++ b/alib2algo/src/automaton/transform/Compaction.h
@@ -82,7 +82,7 @@ ext::require < isDFA < T > || isNFA < T >, Compaction::CompactAutomaton < T > >
 	for(const auto& transition: automaton.getTransitionsFromState(automaton.getInitialState()))
 		stack.push(ext::make_tuple(transition.second, automaton.getInitialState(), transition.first.second));
 
-	if(automaton.getFinalStates().count(automaton.getInitialState()) > 0)
+	if(automaton.getFinalStates().count(automaton.getInitialState()))
 		res.addFinalState(automaton.getInitialState());
 
 	while(!stack.empty()) {
@@ -91,7 +91,7 @@ ext::require < isDFA < T > || isNFA < T >, Compaction::CompactAutomaton < T > >
 		SymbolType symbol = std::move(std::get<2>(stack.top()));
 		stack.pop();
 
-		ext::vector < SymbolType > path { symbol };
+		ext::vector < SymbolType > path { std::move ( symbol ) };
 
 		decltype ( automaton.getTransitionsFromState ( q ) ) transitions;
 		// only 1 child and nonfinal
@@ -101,17 +101,17 @@ ext::require < isDFA < T > || isNFA < T >, Compaction::CompactAutomaton < T > >
 			q = transition.second;
 		}
 
+		for(const std::pair<const ext::pair<StateType, SymbolType>, StateType>& transition : transitions )
+			if(visited.insert(ext::make_tuple(transition.second, q, transition.first.second)).second)
+				stack.push(ext::make_tuple(transition.second, q, transition.first.second));
+
 		// fork or final state
 		res.addState(q);
 
 		if(automaton.getFinalStates().count(q))
 			res.addFinalState(q);
 
-		res.addTransition(lastFork, path, q);
-
-		for(const std::pair<const ext::pair<StateType, SymbolType>, StateType>& transition : transitions )
-			if(visited.insert(ext::make_tuple(transition.second, q, transition.first.second)).second)
-				stack.push(ext::make_tuple(transition.second, q, transition.first.second));
+		res.addTransition ( std::move ( lastFork ), std::move ( path ), std::move ( q ) );
 
 	}