diff --git a/alib2algo/src/automaton/simplify/MinimizeByPartitioning.cpp b/alib2algo/src/automaton/simplify/MinimizeByPartitioning.cpp
index 414f20ed4de1abf91ddd7bc07e6c019124e9134a..82a2b399754b2457de1f9bc3a933aa1ff49bdf94 100644
--- a/alib2algo/src/automaton/simplify/MinimizeByPartitioning.cpp
+++ b/alib2algo/src/automaton/simplify/MinimizeByPartitioning.cpp
@@ -16,6 +16,12 @@ auto MinimizeDistinguishableStatesDFA = registration::AbstractRegister < automat
 @param dfa finite automaton to minimize.\n\
 @return Minimal deterministic finite automaton equivalent to @p dfa" );
 
+auto MinimizeDistinguishableStatesNFA = registration::AbstractRegister < automaton::simplify::MinimizeByPartitioning, automaton::NFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::NFA < > &, const ext::set < ext::set < DefaultStateType > > & > ( automaton::simplify::MinimizeByPartitioning::minimize, "nfa" ).setDocumentation (
+"Minimizes the given automaton using Distinguishable states method.\n\
+\n\
+@param nfa finite automaton to minimize.\n\
+@return Minimal deterministic finite automaton equivalent to @p nfa" );
+
 auto MinimizeDistinguishableStatesDFTA = registration::AbstractRegister < automaton::simplify::MinimizeByPartitioning, automaton::DFTA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::DFTA < > &, const ext::set < ext::set < DefaultStateType > > & > ( automaton::simplify::MinimizeByPartitioning::minimize, "dfta" ).setDocumentation (
 "Minimizes the given automaton using Distinguishable states method.\n\
 \n\
diff --git a/alib2algo/src/automaton/simplify/MinimizeByPartitioning.h b/alib2algo/src/automaton/simplify/MinimizeByPartitioning.h
index b7c0f8f5536bfbf682b0bddca1295259956bef2d..839e8f46268af0f453c7b6b8d5d48e3e7f96f55e 100644
--- a/alib2algo/src/automaton/simplify/MinimizeByPartitioning.h
+++ b/alib2algo/src/automaton/simplify/MinimizeByPartitioning.h
@@ -28,6 +28,7 @@
 #include <alib/map>
 
 #include <automaton/FSM/DFA.h>
+#include <automaton/FSM/NFA.h>
 #include <automaton/TA/DFTA.h>
 #include <automaton/TA/NFTA.h>
 
@@ -43,6 +44,20 @@ namespace simplify {
  */
 class MinimizeByPartitioning {
 public:
+	/**
+	 * Aggregates the given automaton with respect to a state partitioning.
+	 *
+	 * @tparam SymbolType Type for input symbols.
+	 * @tparam StateType Type for states.
+	 *
+	 * @param nfa deterministic finite automaton to minimize.
+	 * @param partitions state partitioning
+	 *
+	 * @return Minimal deterministic finite automaton equivalent to @p nfa
+	 */
+	template < class SymbolType, class StateType >
+	static automaton::NFA < SymbolType, ext::set < StateType > > minimize ( const automaton::NFA < SymbolType, StateType > & nfa, const ext::set < ext::set < StateType > > & partitions );
+
 	/**
 	 * Aggregates the given automaton with respect to a state partitioning.
 	 *
@@ -112,6 +127,22 @@ ext::map < StateType, ext::set < StateType > > MinimizeByPartitioning::partition
 	return res;
 }
 
+template < class SymbolType, class StateType >
+automaton::NFA < SymbolType, ext::set < StateType > > MinimizeByPartitioning::minimize ( const automaton::NFA < SymbolType, StateType > & nfa, const ext::set < ext::set < StateType > > & partitions ) {
+	const ext::map < StateType, ext::set < StateType > > statePartitionMap = partitionMap ( partitions );
+
+	automaton::NFA < SymbolType, ext::set < StateType > > res ( statePartitionMap.at ( nfa.getInitialState ( ) ) );
+	res.setStates ( partitions );
+	res.addInputSymbols ( nfa.getInputAlphabet ( ) );
+	for ( const StateType & state : nfa.getFinalStates ( ) )
+		res.addFinalState ( statePartitionMap.at ( state ) );
+
+	for ( const auto & transition : nfa.getTransitions ( ) )
+		res.addTransition ( statePartitionMap.at ( transition.first.first ), transition.first.second, statePartitionMap.at ( transition.second ) );
+
+	return res;
+}
+
 template < class SymbolType, class StateType >
 automaton::DFA < SymbolType, ext::set < StateType > > MinimizeByPartitioning::minimize ( const automaton::DFA < SymbolType, StateType > & dfa, const ext::set < ext::set < StateType > > & partitions ) {
 	const ext::map < StateType, ext::set < StateType > > statePartitionMap = partitionMap ( partitions );