diff --git a/alib2algo/src/automaton/EpsilonClosure.cpp b/alib2algo/src/automaton/EpsilonClosure.cpp
index 993dbf0256388b479d2853e8d742b1db4e43ecf5..318bcf5a399c0c9b5e475f3b65503ab5d256d068 100644
--- a/alib2algo/src/automaton/EpsilonClosure.cpp
+++ b/alib2algo/src/automaton/EpsilonClosure.cpp
@@ -124,7 +124,7 @@ std::set<automaton::State> EpsilonClosure::epsilonClosure( const automaton::Comp
 std::set<automaton::State> EpsilonClosure::epsilonClosure(const Automaton& automaton, const automaton::State& q) {
 	std::pair<automaton::State, std::set<automaton::State>> out = std::make_pair(q, std::set<automaton::State> {});
 	automaton.getData().Accept((void*) &out, EpsilonClosure::EPSILON_CLOSURE);
-	return out.second;
+	return std::move(out.second);
 }
 
 void EpsilonClosure::Visit(void*, const UnknownAutomaton&) const {
@@ -133,27 +133,27 @@ void EpsilonClosure::Visit(void*, const UnknownAutomaton&) const {
 
 void EpsilonClosure::Visit(void* data, const EpsilonNFA& automaton) const {
 	std::pair<automaton::State, std::set<automaton::State>> & out = *((std::pair<automaton::State, std::set<automaton::State>>*) data);
-	out.second = this->epsilonClosure(automaton, out.first);
+	out.second = std::move(this->epsilonClosure(automaton, out.first));
 }
 
 void EpsilonClosure::Visit(void* data, const NFA& automaton) const {
 	std::pair<automaton::State, std::set<automaton::State>> & out = *((std::pair<automaton::State, std::set<automaton::State>>*) data);
-	out.second = this->epsilonClosure(automaton, out.first);
+	out.second = std::move(this->epsilonClosure(automaton, out.first));
 }
 
 void EpsilonClosure::Visit(void* data, const DFA& automaton) const {
 	std::pair<automaton::State, std::set<automaton::State>> & out = *((std::pair<automaton::State, std::set<automaton::State>>*) data);
-	out.second = this->epsilonClosure(automaton, out.first);
+	out.second = std::move(this->epsilonClosure(automaton, out.first));
 }
 
 void EpsilonClosure::Visit(void* data, const ExtendedNFA& automaton) const {
 	std::pair<automaton::State, std::set<automaton::State>> & out = *((std::pair<automaton::State, std::set<automaton::State>>*) data);
-	out.second = this->epsilonClosure(automaton, out.first);
+	out.second = std::move(this->epsilonClosure(automaton, out.first));
 }
 
 void EpsilonClosure::Visit(void* data, const CompactNFA& automaton) const {
 	std::pair<automaton::State, std::set<automaton::State>> & out = *((std::pair<automaton::State, std::set<automaton::State>>*) data);
-	out.second = this->epsilonClosure(automaton, out.first);
+	out.second = std::move(this->epsilonClosure(automaton, out.first));
 }
 
 void EpsilonClosure::Visit(void*, const DPDA&) const {
diff --git a/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.cpp b/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.cpp
index 5935e37174e3176b5eef3049b9bb580d276b6855..158c7b2d7910ebd5195b5d3ace21fccec7ae97c9 100644
--- a/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.cpp
+++ b/alib2algo/src/epsilon/fsm/FSMEpsilonRemover.cpp
@@ -38,9 +38,10 @@ automaton::NFA FSMEpsilonRemover::remove( const automaton::EpsilonNFA & origFSM
 	 */
 	for( const auto & from : origFSM.getStates( ) )
 		for( const auto & fromClosure : automaton::EpsilonClosure::epsilonClosure( origFSM, from ) )
-			for( const auto & transition : origFSM.getSymbolTransitionsFromState( fromClosure ) )
-				for( const auto & to : transition.second )
-					fsm.addTransition( from, transition.first.second, to );
+			for( const auto & transition : origFSM.getTransitions( ) )
+				if (transition.first.first == fromClosure && transition.first.second.is<alphabet::Symbol>())
+					for( const auto & to : transition.second )
+						fsm.addTransition( from, transition.first.second.get<alphabet::Symbol>(), to );
 
 	/**
 	 * Step 2 from Melichar 2.41