diff --git a/alib2algo/src/automaton/determinize/Determinize.cpp b/alib2algo/src/automaton/determinize/Determinize.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7f101f1e436f9271bf5c1038265f336808b71591
--- /dev/null
+++ b/alib2algo/src/automaton/determinize/Determinize.cpp
@@ -0,0 +1,24 @@
+#include "Determinize.h"
+#include <registration/AlgoRegistration.hpp>
+
+namespace {
+
+using deterministicAutomata = ext::variant <
+	automaton::DFA < >,
+	automaton::DFTA < >,
+	automaton::UnorderedDFTA < >,
+	automaton::InputDrivenDPDA < >,
+	automaton::VisiblyPushdownDPDA < >,
+	automaton::RealTimeHeightDeterministicDPDA < >,
+	automaton::SinglePopDPDA < >,
+	automaton::DPDA < >,
+	automaton::OneTapeDTM < >
+>;
+
+auto DeterminizeDeterministicAutomata = registration::AbstractRegister < automaton::determinize::Determinize, deterministicAutomata, const deterministicAutomata & > ( [ ] ( const auto & param ) { return param; }, "automaton" ).setDocumentation (
+"No-op determinisation of automata that are already deterministic.\n\
+\n\
+@param automaton a deterministic automaton\n\
+@return the parameter unchanged" );
+
+} /* namespace */
diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cpp b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cpp
index fc5dc23ca4768462bc2f25ed18f985701dcf4196..fca55b840213b9e91b04c854cd70ae3eac4200bd 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cpp
+++ b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cpp
@@ -1,27 +1,8 @@
 #include "Determinize.h"
-#include <automaton/FSM/DFA.h>
-#include <automaton/FSM/MultiInitialStateNFA.h>
-#include <automaton/PDA/DPDA.h>
-#include <automaton/PDA/NPDA.h>
-#include <automaton/PDA/InputDrivenDPDA.h>
-#include <automaton/PDA/InputDrivenNPDA.h>
-#include <automaton/PDA/SinglePopDPDA.h>
-#include <automaton/PDA/VisiblyPushdownDPDA.h>
-#include <automaton/TM/OneTapeDTM.h>
-#include <automaton/TA/DFTA.h>
-#include <automaton/TA/UnorderedDFTA.h>
-#include <automaton/PDA/RealTimeHeightDeterministicNPDA.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace {
 
-auto DeterminizeInputDrivenDPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::InputDrivenDPDA < >, const automaton::InputDrivenDPDA < > & > ( automaton::determinize::Determinize::determinize, "dpda" ).setDocumentation (
-"Determinization of deterministic input-driven pushdown automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dpda deterministic input-driven pushdown automaton\n\
-@return deterministic input-driven pushdown automaton equivalent to @p dpda" );
-
 auto DeterminizeInputDrivenNPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::InputDrivenDPDA < DefaultSymbolType, DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::InputDrivenNPDA < > & > ( automaton::determinize::Determinize::determinize, "npda" ).setDocumentation (
 "Implementation of determinization for input-driven pushdown automata.\n\
 \n\
diff --git a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cpp b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cpp
index fd03ac53fc2ef22489ffd7466f11066c136ba352..193b884331368de7e5a660da03befa7ae2a525c1 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cpp
+++ b/alib2algo/src/automaton/determinize/DeterminizeNFAPart.cpp
@@ -1,27 +1,8 @@
 #include "Determinize.h"
-#include <automaton/FSM/DFA.h>
-#include <automaton/FSM/MultiInitialStateNFA.h>
-#include <automaton/PDA/DPDA.h>
-#include <automaton/PDA/NPDA.h>
-#include <automaton/PDA/InputDrivenDPDA.h>
-#include <automaton/PDA/InputDrivenNPDA.h>
-#include <automaton/PDA/SinglePopDPDA.h>
-#include <automaton/PDA/VisiblyPushdownDPDA.h>
-#include <automaton/TM/OneTapeDTM.h>
-#include <automaton/TA/DFTA.h>
-#include <automaton/TA/UnorderedDFTA.h>
-#include <automaton/PDA/RealTimeHeightDeterministicNPDA.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace {
 
-auto DeterminizeDFA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::DFA < >, const automaton::DFA < > & > ( automaton::determinize::Determinize::determinize, "dfa" ).setDocumentation (
-"Determinization of deterministic finite automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dfa deterministic finite automaton\n\
-@return deterministic finite automaton equivalent to @p dfa" );
-
 auto DeterminizeNFA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::DFA < DefaultSymbolType, ext::set < DefaultStateType > >, const automaton::NFA < > & > ( automaton::determinize::Determinize::determinize, "nfa" ).setDocumentation (
 "Implementation of subset determinization for nondeterministic finite automata.\n\
 \n\
diff --git a/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cpp b/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cpp
index 7e17b671528aac85adcdfe8935acc6c9329249bb..f9798cebfe6a2549918a02dcf5c8888371e69796 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cpp
+++ b/alib2algo/src/automaton/determinize/DeterminizeNFTAPart.cpp
@@ -1,40 +1,14 @@
 #include "Determinize.h"
-#include <automaton/FSM/DFA.h>
-#include <automaton/FSM/MultiInitialStateNFA.h>
-#include <automaton/PDA/DPDA.h>
-#include <automaton/PDA/NPDA.h>
-#include <automaton/PDA/InputDrivenDPDA.h>
-#include <automaton/PDA/InputDrivenNPDA.h>
-#include <automaton/PDA/SinglePopDPDA.h>
-#include <automaton/PDA/VisiblyPushdownDPDA.h>
-#include <automaton/TM/OneTapeDTM.h>
-#include <automaton/TA/DFTA.h>
-#include <automaton/TA/UnorderedDFTA.h>
-#include <automaton/PDA/RealTimeHeightDeterministicNPDA.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace {
 
-auto DeterminizeUnorderedDFTA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::UnorderedDFTA < >, const automaton::UnorderedDFTA < > & > ( automaton::determinize::Determinize::determinize, "dfta" ).setDocumentation (
-"Determinization of deterministic finite tree automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dfta deterministic finite tree automaton\n\
-@return deterministic finite tree automaton equivalent to @p dfta" );
-
 auto DeterminizeUnorderedNFTA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::UnorderedDFTA < DefaultSymbolType, ext::set < DefaultSymbolType > >, const automaton::UnorderedNFTA < > & > ( automaton::determinize::Determinize::determinize, "nfta" ).setDocumentation (
 "Implementation of subset determinization for nondeterministic finite tree automata.\n\
 \n\
 @param nfta nondeterministic finite tree automaton\n\
 @return deterministic finite tree automaton equivalent to @p nfta" );
 
-auto DeterminizeDFTA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::DFTA < >, const automaton::DFTA < > & > ( automaton::determinize::Determinize::determinize, "dfta" ).setDocumentation (
-"Determinization of deterministic finite tree automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dfta deterministic finite tree automaton\n\
-@return deterministic finite tree automaton equivalent to @p dfta" );
-
 auto DeterminizeNFTA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::DFTA < DefaultSymbolType, ext::set < DefaultSymbolType > >, const automaton::NFTA < > & > ( automaton::determinize::Determinize::determinize, "nfta" ).setDocumentation (
 "Implementation of subset determinization for nondeterministic finite tree automata.\n\
 \n\
diff --git a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cpp b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cpp
index 121edc5501eca5000ee0d04f9aad3d7ca9a5ed51..cd01f91f974ae878af5b90881d2bdad98486ccc1 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cpp
+++ b/alib2algo/src/automaton/determinize/DeterminizeRHDPDAPart.cpp
@@ -1,47 +1,14 @@
 #include "Determinize.h"
-#include <automaton/FSM/DFA.h>
-#include <automaton/FSM/MultiInitialStateNFA.h>
-#include <automaton/PDA/DPDA.h>
-#include <automaton/PDA/NPDA.h>
-#include <automaton/PDA/InputDrivenDPDA.h>
-#include <automaton/PDA/InputDrivenNPDA.h>
-#include <automaton/PDA/SinglePopDPDA.h>
-#include <automaton/PDA/VisiblyPushdownDPDA.h>
-#include <automaton/TM/OneTapeDTM.h>
-#include <automaton/TA/DFTA.h>
-#include <automaton/TA/UnorderedDFTA.h>
-#include <automaton/PDA/RealTimeHeightDeterministicNPDA.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace {
 
-auto DeterminizeRealTimeHeightDeterministicDPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::RealTimeHeightDeterministicDPDA < >, const automaton::RealTimeHeightDeterministicDPDA < > & > ( automaton::determinize::Determinize::determinize, "dpda" ).setDocumentation (
-"Determinization of deterministic real-time height-deterministic pushdown automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dpda deterministic real-time height-deterministic pushdown automaton\n\
-@return deterministic pushdown automaton equivalent to @p dpda" );
-
 auto DeterminizeRealTimeHeightDeterministicNPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::RealTimeHeightDeterministicDPDA < DefaultSymbolType, ext::pair < ext::set < ext::pair < DefaultStateType, DefaultStateType > >, common::symbol_or_epsilon < DefaultSymbolType > >, ext::set < ext::pair < DefaultStateType, DefaultStateType > > >, const automaton::RealTimeHeightDeterministicNPDA < > & > ( automaton::determinize::Determinize::determinize, "npda" ).setDocumentation (
 "Determinization of nondeterministic real-time height-deterministic pushdown automata.\n\
 \n\
 @param npda nondeterministic real-time height-deterministic pushdown automaton\n\
 @return deterministic pushdown automaton equivalent to @p npda" );
 
-auto DeterminizeSinglePopDPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::SinglePopDPDA < >, const automaton::SinglePopDPDA < > & > ( automaton::determinize::Determinize::determinize, "dpda" ).setDocumentation (
-"Determinization of deterministic single pop pushdown automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dpda nondeterministic finite automaton with multiple initial states\n\
-@return deterministic single pop deterministic pushdown automaton equivalent do @p dpda" );
-
-auto DeterminizeDPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::DPDA < >, const automaton::DPDA < > & > ( automaton::determinize::Determinize::determinize, "dpda" ).setDocumentation (
-"Determinization of deterministic pushdown automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dpda deterministic pushdown automaton\n\
-@return deterministic pushdown automaton equivalent to @p dpda" );
-
 auto DeterminizeNPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::RealTimeHeightDeterministicDPDA < DefaultSymbolType, ext::pair < ext::set < ext::pair < ext::variant < DefaultStateType, std::string >, ext::variant < DefaultStateType, std::string > > >, common::symbol_or_epsilon < DefaultSymbolType > >, ext::set < ext::pair < ext::variant < DefaultStateType, std::string >, ext::variant < DefaultStateType, std::string > > > >, const automaton::NPDA < > & > ( automaton::determinize::Determinize::determinize, "npda" ).setDocumentation (
 "Determinization of nondeterministic pushdown automata is implemented as a cast of such automaton to RhPDA.\n\
 \n\
diff --git a/alib2algo/src/automaton/determinize/DeterminizeTM.cpp b/alib2algo/src/automaton/determinize/DeterminizeTM.cpp
deleted file mode 100644
index 61fd20f61c3d6ae4be911710d1a7c778f1355588..0000000000000000000000000000000000000000
--- a/alib2algo/src/automaton/determinize/DeterminizeTM.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#include "Determinize.h"
-#include <automaton/FSM/DFA.h>
-#include <automaton/FSM/MultiInitialStateNFA.h>
-#include <automaton/PDA/DPDA.h>
-#include <automaton/PDA/NPDA.h>
-#include <automaton/PDA/InputDrivenDPDA.h>
-#include <automaton/PDA/InputDrivenNPDA.h>
-#include <automaton/PDA/SinglePopDPDA.h>
-#include <automaton/PDA/VisiblyPushdownDPDA.h>
-#include <automaton/TM/OneTapeDTM.h>
-#include <automaton/TA/DFTA.h>
-#include <automaton/TA/UnorderedDFTA.h>
-#include <automaton/PDA/RealTimeHeightDeterministicNPDA.h>
-#include <registration/AlgoRegistration.hpp>
-
-namespace {
-
-auto DeterminizeOneTapeDTM = registration::AbstractRegister < automaton::determinize::Determinize, automaton::OneTapeDTM < >, const automaton::OneTapeDTM < > & > ( automaton::determinize::Determinize::determinize, "dtm" ).setDocumentation (
-"Determinization of deterministic pushdown automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dtm deterministic one-tape turing machine\n\
-@return deterministic one-tape turing machine equivalent to @p dtm" );
-
-} /* namespace */
diff --git a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cpp b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cpp
index 7281736234de30e7f5a2e2de6498b4ae17202b1d..f766e0297767558c7fef497b33ed5451e4086fa1 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cpp
+++ b/alib2algo/src/automaton/determinize/DeterminizeVPAPart.cpp
@@ -1,27 +1,8 @@
 #include "Determinize.h"
-#include <automaton/FSM/DFA.h>
-#include <automaton/FSM/MultiInitialStateNFA.h>
-#include <automaton/PDA/DPDA.h>
-#include <automaton/PDA/NPDA.h>
-#include <automaton/PDA/InputDrivenDPDA.h>
-#include <automaton/PDA/InputDrivenNPDA.h>
-#include <automaton/PDA/SinglePopDPDA.h>
-#include <automaton/PDA/VisiblyPushdownDPDA.h>
-#include <automaton/TM/OneTapeDTM.h>
-#include <automaton/TA/DFTA.h>
-#include <automaton/TA/UnorderedDFTA.h>
-#include <automaton/PDA/RealTimeHeightDeterministicNPDA.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace {
 
-auto DeterminizeVisiblyPushdownDPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::VisiblyPushdownDPDA < >, const automaton::VisiblyPushdownDPDA < > & > ( automaton::determinize::Determinize::determinize, "dpda" ).setDocumentation (
-"Determinization of deterministic visibly pushdown automata.\n\
-Implemented as a no-op.\n\
-\n\
-@param dpda deterministic visibly pushdown automaton\n\
-@return deterministic pushdown automaton equivalent to @p dpda" );
-
 auto DeterminizeVisiblyPushdownNPDA = registration::AbstractRegister < automaton::determinize::Determinize, automaton::VisiblyPushdownDPDA < DefaultSymbolType, ext::pair < ext::set < ext::pair < DefaultStateType, DefaultStateType > >, DefaultSymbolType >, ext::set < ext::pair < DefaultStateType, DefaultStateType > > >, const automaton::VisiblyPushdownNPDA < > & > ( automaton::determinize::Determinize::determinize, "npda" ).setDocumentation (
 "Determinization of nondeterministic visibly pushdown automata.\n\
 \n\
diff --git a/alib2algo/src/automaton/determinize/DeterminizeZAutomataPart.cpp b/alib2algo/src/automaton/determinize/DeterminizeZAutomataPart.cpp
index 262164e05b640f28408f1e0f86760874e1ccb203..33c7d7a58d5cb9bb93bb404bb139364ab4c52fe3 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeZAutomataPart.cpp
+++ b/alib2algo/src/automaton/determinize/DeterminizeZAutomataPart.cpp
@@ -1,16 +1,4 @@
 #include "Determinize.h"
-#include <automaton/FSM/DFA.h>
-#include <automaton/FSM/MultiInitialStateNFA.h>
-#include <automaton/PDA/DPDA.h>
-#include <automaton/PDA/NPDA.h>
-#include <automaton/PDA/InputDrivenDPDA.h>
-#include <automaton/PDA/InputDrivenNPDA.h>
-#include <automaton/PDA/SinglePopDPDA.h>
-#include <automaton/PDA/VisiblyPushdownDPDA.h>
-#include <automaton/TM/OneTapeDTM.h>
-#include <automaton/TA/DFTA.h>
-#include <automaton/TA/UnorderedDFTA.h>
-#include <automaton/PDA/RealTimeHeightDeterministicNPDA.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace {