diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
index e671026d11f2a989f79275f12cfe4a25f728541c..6bd860bf017e821ed701a2b0d6b128a4a07773da 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
@@ -59,12 +59,11 @@ automaton::InputDrivenDPDA Determinize::determinize ( const automaton::InputDriv
 	} while ( !todo.empty ( ) );
 
 	 // 5
+	const std::set<automaton::State>& finalLabels = nfa.getFinalStates();
 	for ( const automaton::State & dfaState : res.getStates ( ) ) {
 		auto nfaStates = make_dsubset_iterator ( dfaState );
 
-		if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) {
-					return nfa.getFinalStates ( ).count ( nfaState );
-				} ) )
+		if(!std::excludes(finalLabels.begin(), finalLabels.end(), nfaStates.begin(), nfaStates.end()))
 			res.addFinalState ( dfaState );
 	}
 
diff --git a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx
index 76809e0ed5eea059a02902f114b45a950711f25f..3cd91e9658ba327056edd109a1e503d0582d5e3b 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cxx
@@ -56,12 +56,11 @@ automaton::DFA Determinize::determinize ( const automaton::MultiInitialStateNFA
 	} while ( !todo.empty ( ) );
 
 	 // 5
+	const std::set<automaton::State>& finalLabels = nfa.getFinalStates();
 	for ( const automaton::State & dfaState : res.getStates ( ) ) {
 		auto nfaStates = make_dsubset_iterator ( dfaState );
 
-		if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) {
-					return nfa.getFinalStates ( ).count ( nfaState );
-				} ) )
+		if(!std::excludes(finalLabels.begin(), finalLabels.end(), nfaStates.begin(), nfaStates.end()))
 			res.addFinalState ( dfaState );
 	}
 
@@ -110,12 +109,11 @@ automaton::DFA Determinize::determinize ( const automaton::NFA & nfa ) {
 	} while ( !todo.empty ( ) );
 
 	 // 5
+	const std::set<automaton::State>& finalLabels = nfa.getFinalStates();
 	for ( const automaton::State & dfaState : res.getStates ( ) ) {
 		auto nfaStates = make_dsubset_iterator ( dfaState );
 
-		if ( std::any_of ( nfaStates.begin ( ), nfaStates.end ( ), [&] ( const automaton::State & nfaState ) {
-					return nfa.getFinalStates ( ).count ( nfaState );
-				} ) )
+		if(!std::excludes(finalLabels.begin(), finalLabels.end(), nfaStates.begin(), nfaStates.end()))
 			res.addFinalState ( dfaState );
 	}
 
diff --git a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx
index 08d9208f674156f04325d60a1d6c1635ca28abc6..40bbcc04ef02de1c44ca8e6e3d4a6b2e359fd99a 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx
@@ -263,7 +263,7 @@ automaton::RealTimeHeightDeterministicDPDA Determinize::determinize(const automa
 	for(const automaton::State& state : d.getStates()) {
 		const std::set<label::Label> labels = retrieveDSubSet(unpackFromStateLabel(state.getName()));
 
-		if(!std::empty_intersection(finalLabels, labels)) {
+		if(!std::excludes(finalLabels.begin(), finalLabels.end(), labels.begin(), labels.end())) {
 			d.addFinalState(state);
 		}
 	}
diff --git a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx
index 2be0234c93fbdde07648ea6417ce94355a583c63..8bb8b005915e1f2b21be53ad9330f22b877ececc 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx
@@ -201,7 +201,7 @@ automaton::VisiblyPushdownDPDA Determinize::determinize(const automaton::Visibly
 	for(const automaton::State& state : d.getStates()) {
 		const std::set<label::Label> labels = retrieveDSubSet(unpackFromStateLabel(state.getName()));
 
-		if(!std::empty_intersection(finalLabels, labels)) {
+		if(!std::excludes(finalLabels.begin(), finalLabels.end(), labels.begin(), labels.end())) {
 			d.addFinalState(state);
 		}
 	}
diff --git a/alib2std/src/extensions/set.hpp b/alib2std/src/extensions/set.hpp
index 751eaf4694d421e566f1717f4b1de3d64f9ec3fe..06c908ac663cb91c07b8f4c80019c597ea40e795 100644
--- a/alib2std/src/extensions/set.hpp
+++ b/alib2std/src/extensions/set.hpp
@@ -40,21 +40,6 @@ struct compare<set<T>> {
 	}
 };
 
-template<class T>
-bool empty_intersection(const set<T>& x, const set<T>& y) {
-	auto i = x.begin();
-	auto j = y.begin();
-	while (i != x.end() && j != y.end()) {
-		if (*i == *j)
-			return false;
-		else if (*i < *j)
-			++i;
-		else
-			++j;
-	}
-	return true;
-}
-
 template <class Iterator>
 class set_move_iterator {
 	Iterator current;