diff --git a/alib2algo/src/automaton/determinize/Determinize.cpp b/alib2algo/src/automaton/determinize/Determinize.cpp
index 1d6adcc57a992040af4abf9e79b3acff8c77a9ac..22cf405f669cce8f018892cf83fa43c9c3a0c9f1 100644
--- a/alib2algo/src/automaton/determinize/Determinize.cpp
+++ b/alib2algo/src/automaton/determinize/Determinize.cpp
@@ -26,53 +26,41 @@ namespace automaton {
 
 namespace determinize {
 
-automaton::Automaton Determinize::determinize(const automaton::Automaton& automaton) {
-	automaton::Automaton res = dispatch(automaton.getData());
-	res.normalize ( );
-	return res;
-}
-
 DFA<> Determinize::determinize(const automaton::DFA<>& automaton) {
 	return automaton;
 }
 
-auto DeterminizeDFA = registration::OverloadRegister < Determinize, automaton::DFA<>, automaton::DFA<> >(Determinize::determinize);
-auto DeterminizeDFA2 = registration::AbstractRegister < Determinize, automaton::DFA < >, const automaton::DFA < > & > ( Determinize::determinize );
+auto DeterminizeDFA = registration::AbstractRegister < Determinize, automaton::DFA < >, const automaton::DFA < > & > ( Determinize::determinize );
 
 DPDA < > Determinize::determinize(const automaton::DPDA < > & automaton) {
 	return automaton;
 }
 
-auto DeterminizeDPDA = registration::OverloadRegister < Determinize, automaton::DPDA < >, automaton::DPDA < > >(Determinize::determinize);
-auto DeterminizeDPDA2 = registration::AbstractRegister < Determinize, automaton::DPDA < >, const automaton::DPDA < > & > ( Determinize::determinize );
+auto DeterminizeDPDA = registration::AbstractRegister < Determinize, automaton::DPDA < >, const automaton::DPDA < > & > ( Determinize::determinize );
 
 SinglePopDPDA < > Determinize::determinize(const automaton::SinglePopDPDA < > & automaton) {
 	return automaton;
 }
 
-auto DeterminizeSinglePopDPDA = registration::OverloadRegister < Determinize, automaton::SinglePopDPDA < >, automaton::SinglePopDPDA < > >(Determinize::determinize);
-auto DeterminizeSinglePopDPDA2 = registration::AbstractRegister < Determinize, automaton::SinglePopDPDA < >, const automaton::SinglePopDPDA < > & > ( Determinize::determinize );
+auto DeterminizeSinglePopDPDA = registration::AbstractRegister < Determinize, automaton::SinglePopDPDA < >, const automaton::SinglePopDPDA < > & > ( Determinize::determinize );
 
 InputDrivenDPDA < > Determinize::determinize(const automaton::InputDrivenDPDA < > & automaton) {
 	return automaton;
 }
 
-auto DeterminizeInputDrivenDPDA = registration::OverloadRegister < Determinize, automaton::InputDrivenDPDA < >, automaton::InputDrivenDPDA < > >(Determinize::determinize);
-auto DeterminizeInputDrivenDPDA2 = registration::AbstractRegister < Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenDPDA < > & > ( Determinize::determinize );
+auto DeterminizeInputDrivenDPDA = registration::AbstractRegister < Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenDPDA < > & > ( Determinize::determinize );
 
 VisiblyPushdownDPDA < > Determinize::determinize(const automaton::VisiblyPushdownDPDA < > & automaton) {
 	return automaton;
 }
 
-auto DeterminizeVisiblyPushdownDPDA = registration::OverloadRegister < Determinize, automaton::VisiblyPushdownDPDA < >, automaton::VisiblyPushdownDPDA < > >(Determinize::determinize);
-auto DeterminizeVisiblyPushdownDPDA2 = registration::AbstractRegister < Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownDPDA < > & > ( Determinize::determinize );
+auto DeterminizeVisiblyPushdownDPDA = registration::AbstractRegister < Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownDPDA < > & > ( Determinize::determinize );
 
 RealTimeHeightDeterministicDPDA < > Determinize::determinize(const automaton::RealTimeHeightDeterministicDPDA < > & automaton) {
 	return automaton;
 }
 
-auto DeterminizeRealTimeHeightDeterministicDPDA = registration::OverloadRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, automaton::RealTimeHeightDeterministicDPDA < > >(Determinize::determinize);
-auto DeterminizeRealTimeHeightDeterministicDPDA2 = registration::AbstractRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicDPDA < > & > ( Determinize::determinize );
+auto DeterminizeRealTimeHeightDeterministicDPDA = registration::AbstractRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicDPDA < > & > ( Determinize::determinize );
 
 DPDA < > Determinize::determinize(const automaton::NPDA < > & automaton) {
 	automaton::RealTimeHeightDeterministicNPDA < > rhpda = automaton::PDAToRHPDA::convert(automaton);
@@ -80,29 +68,24 @@ DPDA < > Determinize::determinize(const automaton::NPDA < > & automaton) {
 	return automaton::RHPDAToPDA::convert(dpda);
 }
 
-auto DeterminizeNPDA = registration::OverloadRegister < Determinize, automaton::DPDA < >, automaton::NPDA < > >(Determinize::determinize);
-auto DeterminizeNPDA2 = registration::AbstractRegister < Determinize, automaton::DPDA < >, const automaton::NPDA < > & > ( Determinize::determinize );
+auto DeterminizeNPDA = registration::AbstractRegister < Determinize, automaton::DPDA < >, const automaton::NPDA < > & > ( Determinize::determinize );
 
 OneTapeDTM<> Determinize::determinize(const automaton::OneTapeDTM<>& automaton) {
 	return automaton;
 }
 
-auto DeterminizeOneTapeDTM = registration::OverloadRegister < Determinize, automaton::OneTapeDTM<>, automaton::OneTapeDTM < > >(Determinize::determinize);
-auto DeterminizeOneTapeDTM2 = registration::AbstractRegister < Determinize, automaton::OneTapeDTM < >, const automaton::OneTapeDTM < > & > ( Determinize::determinize );
+auto DeterminizeOneTapeDTM = registration::AbstractRegister < Determinize, automaton::OneTapeDTM < >, const automaton::OneTapeDTM < > & > ( Determinize::determinize );
 
 DFTA < > Determinize::determinize(const automaton::DFTA < > & automaton) {
 	return automaton;
 }
 
-auto DeterminizeDFTA = registration::OverloadRegister < Determinize, automaton::DFTA < >, automaton::DFTA < > >(Determinize::determinize);
-auto DeterminizeDFTA2 = registration::AbstractRegister < Determinize, automaton::DFTA < >, const automaton::DFTA < > & > ( Determinize::determinize );
+auto DeterminizeDFTA = registration::AbstractRegister < Determinize, automaton::DFTA < >, const automaton::DFTA < > & > ( Determinize::determinize );
 
 
 
-auto DeterminizeMultiInitialStateNFA = registration::OverloadRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, automaton::MultiInitialStateNFA < > > ( Determinize::determinize );
-auto DeterminizeMultiInitialStateNFA2 = registration::AbstractRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::MultiInitialStateNFA < > & > ( Determinize::determinize );
-auto DeterminizeNFA = registration::OverloadRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, automaton::NFA < > > ( Determinize::determinize );
-auto DeterminizeNFA2 = registration::AbstractRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::NFA < > & > ( Determinize::determinize );
+auto DeterminizeMultiInitialStateNFA = registration::AbstractRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::MultiInitialStateNFA < > & > ( Determinize::determinize );
+auto DeterminizeNFA = registration::AbstractRegister < Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::NFA < > & > ( Determinize::determinize );
 
 } /* namespace determinize */
 
diff --git a/alib2algo/src/automaton/determinize/Determinize.h b/alib2algo/src/automaton/determinize/Determinize.h
index 8e1b3517d46baae2b4978a8888c06d626e1f93e1..b3e40db0458735a87eccedc14d89befc7529a80e 100644
--- a/alib2algo/src/automaton/determinize/Determinize.h
+++ b/alib2algo/src/automaton/determinize/Determinize.h
@@ -8,7 +8,6 @@
 #ifndef DETERMINIZE_H_
 #define DETERMINIZE_H_
 
-#include <core/multipleDispatch.hpp>
 #include <set>
 
 #include <automaton/Automaton.h>
@@ -21,18 +20,16 @@ namespace determinize {
 /**
  * Class for running determinization algorithm on fsm.
  */
-class Determinize : public alib::SingleDispatch<Determinize, automaton::Automaton, const automaton::AutomatonBase &> {
+class Determinize {
 public:
 
+	static automaton::DFA<> determinize(const automaton::DFA<>& nfa);
+
 	/**
 	 * @param nfsm nondeterministic final-state machine given for determinization
 	 * @return DFA
 	 * Runs determinization algorithm on nondeterministic fsm given in constructor.
 	 */
-	static automaton::Automaton determinize(const automaton::Automaton& nfa);
-
-	static automaton::DFA<> determinize(const automaton::DFA<>& nfa);
-
 	template < class SymbolType, class StateType >
 	static automaton::DFA < SymbolType, ext::set < StateType > > determinize(const automaton::NFA < SymbolType, StateType > & nfa);
 
diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
index 22b62aadc0af313e49d57988ce7f1697537722ca..2f6ca8e5e5850d1ea7fcdb58f0f7c5eea352ab2f 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
@@ -70,8 +70,7 @@ automaton::InputDrivenDPDA < > Determinize::determinize ( const automaton::Input
 	return res;
 }
 
-auto DeterminizeInputDrivenNPDA = registration::OverloadRegister < Determinize, automaton::InputDrivenDPDA < >, automaton::InputDrivenNPDA < > > ( Determinize::determinize );
-auto DeterminizeInputDrivenNPDA2 = registration::AbstractRegister < Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenNPDA < > & > ( Determinize::determinize );
+auto DeterminizeInputDrivenNPDA = registration::AbstractRegister < Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenNPDA < > & > ( Determinize::determinize );
 
 } /* namespace determinize */
 
diff --git a/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cxx
index 3283ce647b7dac21e556cc2f44a8c6c3cfad7869..481a04502e75ea647daa7ed6f8d5dd7461a47d59 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cxx
@@ -94,8 +94,7 @@ DFTA < > Determinize::determinize(const NFTA < > & nfta) {
 	return res;
 }
 
-auto DeterminizeNFTA = registration::OverloadRegister < Determinize, automaton::DFTA < >, automaton::NFTA < > > ( Determinize::determinize );
-auto DeterminizeNFTA2 = registration::AbstractRegister < Determinize, automaton::DFTA < >, const automaton::NFTA < > & > ( Determinize::determinize );
+auto DeterminizeNFTA = registration::AbstractRegister < Determinize, automaton::DFTA < >, const automaton::NFTA < > & > ( Determinize::determinize );
 
 } /* namespace determinize */
 
diff --git a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx
index 61d6ed13d0f3bd7e3fb1885f36361e8d1f1d4dba..5a3de3026431567f6cb9f29471d36b1587aa173b 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cxx
@@ -277,8 +277,7 @@ automaton::RealTimeHeightDeterministicDPDA < > Determinize::determinize(const au
 	return d;
 }
 
-auto DeterminizeRealTimeHeightDeterministicNPDA = registration::OverloadRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, automaton::RealTimeHeightDeterministicNPDA < > > ( Determinize::determinize );
-auto DeterminizeRealTimeHeightDeterministicNPDA2 = registration::AbstractRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicNPDA < > & > ( Determinize::determinize );
+auto DeterminizeRealTimeHeightDeterministicNPDA = registration::AbstractRegister < Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicNPDA < > & > ( Determinize::determinize );
 
 } /* namespace determinize */
 
diff --git a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx
index c7f2579ec8a670fabae838551040c1053657c1f3..700995357e264a1d2c5e15127f12ad7d431499a5 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cxx
@@ -205,8 +205,7 @@ automaton::VisiblyPushdownDPDA < > Determinize::determinize(const automaton::Vis
 	return d;
 }
 
-auto DeterminizeVisiblyPushdownNPDA = registration::OverloadRegister < Determinize, automaton::VisiblyPushdownDPDA < >, automaton::VisiblyPushdownNPDA < > > ( Determinize::determinize );
-auto DeterminizeVisiblyPushdownNPDA2 = registration::AbstractRegister < Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownNPDA < > & > ( Determinize::determinize );
+auto DeterminizeVisiblyPushdownNPDA = registration::AbstractRegister < Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownNPDA < > & > ( Determinize::determinize );
 
 } /* namespace determinize */
 
diff --git a/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp b/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp
index b1b2190744342064a0f83d49425f7a99701bf5fc..0a26602fa84350bd9f533c5863d807daffa0878c 100644
--- a/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp
+++ b/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp
@@ -34,14 +34,14 @@ void re2faTest::testThompson() {
 
 	automaton::EpsilonNFA < > enfa2 = regexp::convert::ToAutomatonThompson::convert(regexp2);
 
-	automaton::Automaton nfa1 = automaton::simplify::EpsilonRemoverOutgoing::remove(automaton::Automaton(enfa1));
-	automaton::Automaton nfa2 = automaton::simplify::EpsilonRemoverOutgoing::remove(automaton::Automaton(enfa2));
+	automaton::MultiInitialStateNFA < > nfa1 = automaton::simplify::EpsilonRemoverOutgoing::remove(enfa1);
+	automaton::MultiInitialStateNFA < > nfa2 = automaton::simplify::EpsilonRemoverOutgoing::remove(enfa2);
 
-	automaton::Automaton dfa1 = automaton::determinize::Determinize::determinize(nfa1);
-	automaton::Automaton dfa2 = automaton::determinize::Determinize::determinize(nfa2);
+	automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > > dfa1 = automaton::determinize::Determinize::determinize(nfa1);
+	automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > > dfa2 = automaton::determinize::Determinize::determinize(nfa2);
 
-	automaton::Automaton mdfa1 = automaton::simplify::Normalize::normalize(automaton::simplify::Minimize::minimize(dfa1));
-	automaton::Automaton mdfa2 = automaton::simplify::Normalize::normalize(automaton::simplify::Minimize::minimize(dfa2));
+	automaton::DFA< DefaultSymbolType, unsigned > mdfa1 = automaton::simplify::Normalize::normalize(automaton::simplify::Minimize::minimize(dfa1));
+	automaton::DFA< DefaultSymbolType, unsigned > mdfa2 = automaton::simplify::Normalize::normalize(automaton::simplify::Minimize::minimize(dfa2));
 
 	CPPUNIT_ASSERT( mdfa1 == mdfa2);
 }