From cc74b2a934f9c1ff0b0792230521746abd2260c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Tr=C3=A1vn=C3=AD=C4=8Dek?= <jan.travnicek@fit.cvut.cz>
Date: Mon, 14 Feb 2022 18:46:28 +0100
Subject: [PATCH] data: extern normalization

---
 .../registration/NormalizationRegistration.hpp  | 17 ++++++++++-------
 alib2data/src/automaton/FSM/CompactDFA.cpp      |  1 +
 alib2data/src/automaton/FSM/CompactDFA.h        |  2 ++
 alib2data/src/automaton/FSM/CompactNFA.cpp      |  1 +
 alib2data/src/automaton/FSM/CompactNFA.h        |  2 ++
 alib2data/src/automaton/FSM/DFA.cpp             |  1 +
 alib2data/src/automaton/FSM/DFA.h               |  2 ++
 alib2data/src/automaton/FSM/EpsilonNFA.cpp      |  1 +
 alib2data/src/automaton/FSM/EpsilonNFA.h        |  2 ++
 alib2data/src/automaton/FSM/ExtendedNFA.cpp     |  1 +
 alib2data/src/automaton/FSM/ExtendedNFA.h       |  2 ++
 .../FSM/MultiInitialStateEpsilonNFA.cpp         |  1 +
 .../automaton/FSM/MultiInitialStateEpsilonNFA.h |  2 ++
 .../src/automaton/FSM/MultiInitialStateNFA.cpp  |  1 +
 .../src/automaton/FSM/MultiInitialStateNFA.h    |  2 ++
 alib2data/src/automaton/FSM/NFA.cpp             |  1 +
 alib2data/src/automaton/FSM/NFA.h               |  2 ++
 alib2data/src/automaton/PDA/DPDA.cpp            |  1 +
 alib2data/src/automaton/PDA/DPDA.h              |  2 ++
 alib2data/src/automaton/PDA/InputDrivenDPDA.cpp |  1 +
 alib2data/src/automaton/PDA/InputDrivenDPDA.h   |  2 ++
 alib2data/src/automaton/PDA/InputDrivenNPDA.cpp |  1 +
 alib2data/src/automaton/PDA/InputDrivenNPDA.h   |  2 ++
 alib2data/src/automaton/PDA/NPDA.cpp            |  1 +
 alib2data/src/automaton/PDA/NPDA.h              |  2 ++
 alib2data/src/automaton/PDA/NPDTA.cpp           |  1 +
 alib2data/src/automaton/PDA/NPDTA.h             |  2 ++
 .../PDA/RealTimeHeightDeterministicDPDA.cpp     |  1 +
 .../PDA/RealTimeHeightDeterministicDPDA.h       |  2 ++
 .../PDA/RealTimeHeightDeterministicNPDA.cpp     |  1 +
 .../PDA/RealTimeHeightDeterministicNPDA.h       |  2 ++
 alib2data/src/automaton/PDA/SinglePopDPDA.cpp   |  1 +
 alib2data/src/automaton/PDA/SinglePopDPDA.h     |  2 ++
 alib2data/src/automaton/PDA/SinglePopNPDA.cpp   |  1 +
 alib2data/src/automaton/PDA/SinglePopNPDA.h     |  2 ++
 .../src/automaton/PDA/VisiblyPushdownDPDA.cpp   |  1 +
 .../src/automaton/PDA/VisiblyPushdownDPDA.h     |  2 ++
 .../src/automaton/PDA/VisiblyPushdownNPDA.cpp   |  1 +
 .../src/automaton/PDA/VisiblyPushdownNPDA.h     |  2 ++
 .../TA/ArcFactoredDeterministicZAutomaton.cpp   |  1 +
 .../TA/ArcFactoredDeterministicZAutomaton.h     |  2 ++
 .../ArcFactoredNondeterministicZAutomaton.cpp   |  1 +
 .../TA/ArcFactoredNondeterministicZAutomaton.h  |  2 ++
 alib2data/src/automaton/TA/DFTA.cpp             |  1 +
 alib2data/src/automaton/TA/DFTA.h               |  2 ++
 alib2data/src/automaton/TA/EpsilonNFTA.cpp      |  1 +
 alib2data/src/automaton/TA/EpsilonNFTA.h        |  2 ++
 alib2data/src/automaton/TA/ExtendedNFTA.cpp     |  1 +
 alib2data/src/automaton/TA/ExtendedNFTA.h       |  2 ++
 alib2data/src/automaton/TA/NFTA.cpp             |  1 +
 alib2data/src/automaton/TA/NFTA.h               |  2 ++
 .../automaton/TA/NondeterministicZAutomaton.cpp |  1 +
 .../automaton/TA/NondeterministicZAutomaton.h   |  2 ++
 alib2data/src/automaton/TA/UnorderedDFTA.cpp    |  1 +
 alib2data/src/automaton/TA/UnorderedDFTA.h      |  2 ++
 alib2data/src/automaton/TA/UnorderedNFTA.cpp    |  1 +
 alib2data/src/automaton/TA/UnorderedNFTA.h      |  2 ++
 alib2data/src/automaton/TM/OneTapeDTM.cpp       |  1 +
 alib2data/src/automaton/TM/OneTapeDTM.h         |  2 ++
 alib2data/src/grammar/ContextFree/CFG.cpp       |  1 +
 alib2data/src/grammar/ContextFree/CFG.h         |  2 ++
 alib2data/src/grammar/ContextFree/CNF.cpp       |  1 +
 alib2data/src/grammar/ContextFree/CNF.h         |  2 ++
 .../src/grammar/ContextFree/EpsilonFreeCFG.cpp  |  1 +
 .../src/grammar/ContextFree/EpsilonFreeCFG.h    |  2 ++
 alib2data/src/grammar/ContextFree/GNF.cpp       |  1 +
 alib2data/src/grammar/ContextFree/GNF.h         |  2 ++
 alib2data/src/grammar/ContextFree/LG.cpp        |  1 +
 alib2data/src/grammar/ContextFree/LG.h          |  2 ++
 alib2data/src/grammar/ContextSensitive/CSG.cpp  |  1 +
 alib2data/src/grammar/ContextSensitive/CSG.h    |  2 ++
 .../ContextSensitive/NonContractingGrammar.cpp  |  1 +
 .../ContextSensitive/NonContractingGrammar.h    |  2 ++
 alib2data/src/grammar/Regular/LeftLG.cpp        |  1 +
 alib2data/src/grammar/Regular/LeftLG.h          |  2 ++
 alib2data/src/grammar/Regular/LeftRG.cpp        |  1 +
 alib2data/src/grammar/Regular/LeftRG.h          |  2 ++
 alib2data/src/grammar/Regular/RightLG.cpp       |  1 +
 alib2data/src/grammar/Regular/RightLG.h         |  2 ++
 alib2data/src/grammar/Regular/RightRG.cpp       |  1 +
 alib2data/src/grammar/Regular/RightRG.h         |  2 ++
 .../ContextPreservingUnrestrictedGrammar.cpp    |  1 +
 .../ContextPreservingUnrestrictedGrammar.h      |  2 ++
 .../Unrestricted/UnrestrictedGrammar.cpp        |  1 +
 .../grammar/Unrestricted/UnrestrictedGrammar.h  |  2 ++
 alib2data/src/regexp/formal/FormalRegExp.cpp    |  1 +
 alib2data/src/regexp/formal/FormalRegExp.h      |  2 ++
 .../src/regexp/unbounded/UnboundedRegExp.cpp    |  1 +
 .../src/regexp/unbounded/UnboundedRegExp.h      |  2 ++
 alib2data/src/rte/formal/FormalRTE.cpp          |  1 +
 alib2data/src/rte/formal/FormalRTE.h            |  2 ++
 alib2data/src/string/CyclicString.cpp           |  1 +
 alib2data/src/string/CyclicString.h             |  2 ++
 alib2data/src/string/LinearString.cpp           |  1 +
 alib2data/src/string/LinearString.h             |  2 ++
 alib2data/src/string/WildcardLinearString.cpp   |  1 +
 alib2data/src/string/WildcardLinearString.h     |  2 ++
 alib2data/src/tree/ranked/PostfixRankedTree.cpp |  1 +
 alib2data/src/tree/ranked/PostfixRankedTree.h   |  2 ++
 .../ranked/PrefixRankedBarNonlinearPattern.cpp  |  1 +
 .../ranked/PrefixRankedBarNonlinearPattern.h    |  2 ++
 .../src/tree/ranked/PrefixRankedBarPattern.cpp  |  1 +
 .../src/tree/ranked/PrefixRankedBarPattern.h    |  2 ++
 .../src/tree/ranked/PrefixRankedBarTree.cpp     |  1 +
 alib2data/src/tree/ranked/PrefixRankedBarTree.h |  2 ++
 .../tree/ranked/PrefixRankedExtendedPattern.cpp |  1 +
 .../tree/ranked/PrefixRankedExtendedPattern.h   |  2 ++
 .../ranked/PrefixRankedNonlinearPattern.cpp     |  1 +
 .../tree/ranked/PrefixRankedNonlinearPattern.h  |  2 ++
 .../src/tree/ranked/PrefixRankedPattern.cpp     |  1 +
 alib2data/src/tree/ranked/PrefixRankedPattern.h |  2 ++
 alib2data/src/tree/ranked/PrefixRankedTree.cpp  |  1 +
 alib2data/src/tree/ranked/PrefixRankedTree.h    |  2 ++
 .../src/tree/ranked/RankedExtendedPattern.cpp   |  1 +
 .../src/tree/ranked/RankedExtendedPattern.h     |  2 ++
 .../src/tree/ranked/RankedNonlinearPattern.cpp  |  1 +
 .../src/tree/ranked/RankedNonlinearPattern.h    |  2 ++
 alib2data/src/tree/ranked/RankedPattern.cpp     |  1 +
 alib2data/src/tree/ranked/RankedPattern.h       |  2 ++
 alib2data/src/tree/ranked/RankedTree.cpp        |  1 +
 alib2data/src/tree/ranked/RankedTree.h          |  2 ++
 .../src/tree/ranked/UnorderedRankedPattern.cpp  |  1 +
 .../src/tree/ranked/UnorderedRankedPattern.h    |  2 ++
 .../src/tree/ranked/UnorderedRankedTree.cpp     |  1 +
 alib2data/src/tree/ranked/UnorderedRankedTree.h |  2 ++
 alib2data/src/tree/unranked/PrefixBarTree.cpp   |  1 +
 alib2data/src/tree/unranked/PrefixBarTree.h     |  2 ++
 .../tree/unranked/UnorderedUnrankedPattern.cpp  |  1 +
 .../tree/unranked/UnorderedUnrankedPattern.h    |  2 ++
 .../src/tree/unranked/UnorderedUnrankedTree.cpp |  1 +
 .../src/tree/unranked/UnorderedUnrankedTree.h   |  2 ++
 .../tree/unranked/UnrankedExtendedPattern.cpp   |  1 +
 .../src/tree/unranked/UnrankedExtendedPattern.h |  2 ++
 .../tree/unranked/UnrankedNonlinearPattern.cpp  |  1 +
 .../tree/unranked/UnrankedNonlinearPattern.h    |  2 ++
 alib2data/src/tree/unranked/UnrankedPattern.cpp |  1 +
 alib2data/src/tree/unranked/UnrankedPattern.h   |  2 ++
 alib2data/src/tree/unranked/UnrankedTree.cpp    |  1 +
 alib2data/src/tree/unranked/UnrankedTree.h      |  2 ++
 139 files changed, 217 insertions(+), 7 deletions(-)

diff --git a/alib2abstraction/src/registration/NormalizationRegistration.hpp b/alib2abstraction/src/registration/NormalizationRegistration.hpp
index ae594f26c2..75fe89d6c4 100644
--- a/alib2abstraction/src/registration/NormalizationRegistration.hpp
+++ b/alib2abstraction/src/registration/NormalizationRegistration.hpp
@@ -12,15 +12,18 @@ class NormalizationRegisterEmpty {
 template < class ReturnType >
 class NormalizationRegisterImpl : public ext::Register < std::list < std::unique_ptr < abstraction::NormalizeRegistry::Entry > >::const_iterator > {
 public:
-	explicit NormalizationRegisterImpl ( ) : ext::Register < std::list < std::unique_ptr < abstraction::NormalizeRegistry::Entry > >::const_iterator > (
-			[ ] ( ) {
-				return abstraction::NormalizeRegistry::registerNormalize < ReturnType > ( );
-			}, [ ] ( std::list < std::unique_ptr < abstraction::NormalizeRegistry::Entry > >::const_iterator iter ) {
-				abstraction::NormalizeRegistry::unregisterNormalize < ReturnType > ( iter );
-			} ) {
-	}
+	explicit NormalizationRegisterImpl ( );
 };
 
+template < class ReturnType >
+NormalizationRegisterImpl < ReturnType >::NormalizationRegisterImpl ( ) : ext::Register < std::list < std::unique_ptr < abstraction::NormalizeRegistry::Entry > >::const_iterator > (
+		[ ] ( ) {
+			return abstraction::NormalizeRegistry::registerNormalize < ReturnType > ( );
+		}, [ ] ( std::list < std::unique_ptr < abstraction::NormalizeRegistry::Entry > >::const_iterator iter ) {
+			abstraction::NormalizeRegistry::unregisterNormalize < ReturnType > ( iter );
+		} ) {
+}
+
 template < class ReturnType >
 using NormalizationRegister = std::conditional_t < core::is_specialized < core::type_util < ReturnType > >, NormalizationRegisterImpl < ReturnType >, NormalizationRegisterEmpty >;
 
diff --git a/alib2data/src/automaton/FSM/CompactDFA.cpp b/alib2data/src/automaton/FSM/CompactDFA.cpp
index 1b39d5e2ed..33feec0cc8 100644
--- a/alib2data/src/automaton/FSM/CompactDFA.cpp
+++ b/alib2data/src/automaton/FSM/CompactDFA.cpp
@@ -6,6 +6,7 @@
 
 template class automaton::CompactDFA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::CompactDFA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::CompactDFA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/FSM/CompactDFA.h b/alib2data/src/automaton/FSM/CompactDFA.h
index e2156a3845..fdea97e431 100644
--- a/alib2data/src/automaton/FSM/CompactDFA.h
+++ b/alib2data/src/automaton/FSM/CompactDFA.h
@@ -47,6 +47,7 @@
 #include "DFA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -778,3 +779,4 @@ struct type_details_retriever < automaton::CompactDFA < SymbolType, StateType >
 
 extern template class automaton::CompactDFA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::CompactDFA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::CompactDFA < > >;
diff --git a/alib2data/src/automaton/FSM/CompactNFA.cpp b/alib2data/src/automaton/FSM/CompactNFA.cpp
index 5c9f1950e6..64cf56f620 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.cpp
+++ b/alib2data/src/automaton/FSM/CompactNFA.cpp
@@ -6,6 +6,7 @@
 
 template class automaton::CompactNFA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::CompactNFA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::CompactNFA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h
index 56d60fbff1..c6844e0887 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.h
+++ b/alib2data/src/automaton/FSM/CompactNFA.h
@@ -52,6 +52,7 @@
 #include "DFA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -849,3 +850,4 @@ struct type_details_retriever < automaton::CompactNFA < SymbolType, StateType >
 
 extern template class automaton::CompactNFA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::CompactNFA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::CompactNFA < > >;
diff --git a/alib2data/src/automaton/FSM/DFA.cpp b/alib2data/src/automaton/FSM/DFA.cpp
index c6748b8f1b..6c7eb1b078 100644
--- a/alib2data/src/automaton/FSM/DFA.cpp
+++ b/alib2data/src/automaton/FSM/DFA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::DFA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::DFA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::DFA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/FSM/DFA.h b/alib2data/src/automaton/FSM/DFA.h
index 15b6be6bd6..6ca984bf80 100644
--- a/alib2data/src/automaton/FSM/DFA.h
+++ b/alib2data/src/automaton/FSM/DFA.h
@@ -42,6 +42,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -771,3 +772,4 @@ struct type_details_retriever < automaton::DFA < SymbolType, StateType > > {
 
 extern template class automaton::DFA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::DFA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::DFA < > >;
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.cpp b/alib2data/src/automaton/FSM/EpsilonNFA.cpp
index 4e8b0bfd9a..e1ba22bbd8 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.cpp
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::EpsilonNFA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::EpsilonNFA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::EpsilonNFA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.h b/alib2data/src/automaton/FSM/EpsilonNFA.h
index 9d99f6684a..5838dcdd6e 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.h
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.h
@@ -49,6 +49,7 @@
 #include "DFA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1062,3 +1063,4 @@ struct type_details_retriever < automaton::EpsilonNFA < SymbolType, StateType >
 
 extern template class automaton::EpsilonNFA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::EpsilonNFA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::EpsilonNFA < > >;
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.cpp b/alib2data/src/automaton/FSM/ExtendedNFA.cpp
index 154127a8e1..e90cf35848 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.cpp
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::ExtendedNFA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::ExtendedNFA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::ExtendedNFA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.h b/alib2data/src/automaton/FSM/ExtendedNFA.h
index 27680a6178..397b2e4bc5 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.h
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.h
@@ -54,6 +54,7 @@
 #include "MultiInitialStateNFA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -875,3 +876,4 @@ struct type_details_retriever < automaton::ExtendedNFA < SymbolType, StateType >
 
 extern template class automaton::ExtendedNFA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::ExtendedNFA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::ExtendedNFA < > >;
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateEpsilonNFA.cpp b/alib2data/src/automaton/FSM/MultiInitialStateEpsilonNFA.cpp
index 8e933ad34a..3ba0d668d0 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateEpsilonNFA.cpp
+++ b/alib2data/src/automaton/FSM/MultiInitialStateEpsilonNFA.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::MultiInitialStateEpsilonNFA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::MultiInitialStateEpsilonNFA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::MultiInitialStateEpsilonNFA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateEpsilonNFA.h b/alib2data/src/automaton/FSM/MultiInitialStateEpsilonNFA.h
index 2ec960c6d7..486a00ea24 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateEpsilonNFA.h
+++ b/alib2data/src/automaton/FSM/MultiInitialStateEpsilonNFA.h
@@ -50,6 +50,7 @@
 #include "DFA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1107,3 +1108,4 @@ struct type_details_retriever < automaton::MultiInitialStateEpsilonNFA < SymbolT
 
 extern template class automaton::MultiInitialStateEpsilonNFA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::MultiInitialStateEpsilonNFA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::MultiInitialStateEpsilonNFA < > >;
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp b/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
index 846eb473f4..8071783cd6 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::MultiInitialStateNFA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::MultiInitialStateNFA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::MultiInitialStateNFA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
index 82cfda0926..e51f0103ed 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
@@ -44,6 +44,7 @@
 #include "DFA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -836,3 +837,4 @@ struct type_details_retriever < automaton::MultiInitialStateNFA < SymbolType, St
 
 extern template class automaton::MultiInitialStateNFA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::MultiInitialStateNFA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::MultiInitialStateNFA < > >;
diff --git a/alib2data/src/automaton/FSM/NFA.cpp b/alib2data/src/automaton/FSM/NFA.cpp
index af6cfb84ad..6f3de9b71c 100644
--- a/alib2data/src/automaton/FSM/NFA.cpp
+++ b/alib2data/src/automaton/FSM/NFA.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::NFA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::NFA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::NFA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/FSM/NFA.h b/alib2data/src/automaton/FSM/NFA.h
index 0eab5bc30d..7c98b8dce8 100644
--- a/alib2data/src/automaton/FSM/NFA.h
+++ b/alib2data/src/automaton/FSM/NFA.h
@@ -41,6 +41,7 @@
 #include "DFA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -794,3 +795,4 @@ struct type_details_retriever < automaton::NFA < SymbolType, StateType > > {
 
 extern template class automaton::NFA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::NFA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::NFA < > >;
diff --git a/alib2data/src/automaton/PDA/DPDA.cpp b/alib2data/src/automaton/PDA/DPDA.cpp
index eca2710315..baacf17a4f 100644
--- a/alib2data/src/automaton/PDA/DPDA.cpp
+++ b/alib2data/src/automaton/PDA/DPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::DPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::DPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::DPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/DPDA.h b/alib2data/src/automaton/PDA/DPDA.h
index 4cabcdd73c..07be89d969 100644
--- a/alib2data/src/automaton/PDA/DPDA.h
+++ b/alib2data/src/automaton/PDA/DPDA.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1083,3 +1084,4 @@ struct type_details_retriever < automaton::DPDA < InputSymbolType, PushdownStore
 
 extern template class automaton::DPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::DPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::DPDA < > >;
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp b/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
index a5ec3edbcc..2e2cea8d4e 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::InputDrivenDPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::InputDrivenDPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::InputDrivenDPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.h b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
index fec0222947..04cf1c2da2 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
@@ -42,6 +42,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1068,3 +1069,4 @@ struct type_details_retriever < automaton::InputDrivenDPDA < InputSymbolType, Pu
 
 extern template class automaton::InputDrivenDPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::InputDrivenDPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::InputDrivenDPDA < > >;
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp b/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
index 7ad538dbad..ba36b02a30 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::InputDrivenNPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::InputDrivenNPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::InputDrivenNPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.h b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
index d75918ae86..e6f56a6a2b 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
@@ -42,6 +42,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1086,3 +1087,4 @@ struct type_details_retriever < automaton::InputDrivenNPDA < InputSymbolType, Pu
 
 extern template class automaton::InputDrivenNPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::InputDrivenNPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::InputDrivenNPDA < > >;
diff --git a/alib2data/src/automaton/PDA/NPDA.cpp b/alib2data/src/automaton/PDA/NPDA.cpp
index 4de3f18487..6febd54f00 100644
--- a/alib2data/src/automaton/PDA/NPDA.cpp
+++ b/alib2data/src/automaton/PDA/NPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::NPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::NPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::NPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/NPDA.h b/alib2data/src/automaton/PDA/NPDA.h
index 9f16826db2..f68c4b2b62 100644
--- a/alib2data/src/automaton/PDA/NPDA.h
+++ b/alib2data/src/automaton/PDA/NPDA.h
@@ -41,6 +41,7 @@
 #include <automaton/PDA/DPDA.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1049,3 +1050,4 @@ struct type_details_retriever < automaton::NPDA < InputSymbolType, PushdownStore
 
 extern template class automaton::NPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::NPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::NPDA < > >;
diff --git a/alib2data/src/automaton/PDA/NPDTA.cpp b/alib2data/src/automaton/PDA/NPDTA.cpp
index 7320033b69..39c9dd8fb8 100644
--- a/alib2data/src/automaton/PDA/NPDTA.cpp
+++ b/alib2data/src/automaton/PDA/NPDTA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::NPDTA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::NPDTA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::NPDTA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/NPDTA.h b/alib2data/src/automaton/PDA/NPDTA.h
index 3776e5a903..6f1f0df4af 100644
--- a/alib2data/src/automaton/PDA/NPDTA.h
+++ b/alib2data/src/automaton/PDA/NPDTA.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1166,3 +1167,4 @@ struct type_details_retriever < automaton::NPDTA < InputSymbolType, OutputSymbol
 
 extern template class automaton::NPDTA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::NPDTA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::NPDTA < > >;
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
index e446093693..6e782423a6 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::RealTimeHeightDeterministicDPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::RealTimeHeightDeterministicDPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::RealTimeHeightDeterministicDPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
index 3c24c14103..fa114507a3 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1505,3 +1506,4 @@ struct type_details_retriever < automaton::RealTimeHeightDeterministicDPDA < Inp
 
 extern template class automaton::RealTimeHeightDeterministicDPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::RealTimeHeightDeterministicDPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::RealTimeHeightDeterministicDPDA < > >;
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
index 98fe888fa0..022ad6a025 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::RealTimeHeightDeterministicNPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::RealTimeHeightDeterministicNPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::RealTimeHeightDeterministicNPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
index dd953aac1f..a14bebaa25 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1451,3 +1452,4 @@ struct type_details_retriever < automaton::RealTimeHeightDeterministicNPDA < Inp
 
 extern template class automaton::RealTimeHeightDeterministicNPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::RealTimeHeightDeterministicNPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::RealTimeHeightDeterministicNPDA < > >;
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.cpp b/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
index f08a538b05..9670e614d2 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::SinglePopDPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::SinglePopDPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::SinglePopDPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.h b/alib2data/src/automaton/PDA/SinglePopDPDA.h
index d45137c23c..23b33b72f4 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.h
@@ -41,6 +41,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1008,3 +1009,4 @@ struct type_details_retriever < automaton::SinglePopDPDA < InputSymbolType, Push
 
 extern template class automaton::SinglePopDPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::SinglePopDPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::SinglePopDPDA < > >;
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.cpp b/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
index 60568f6445..9600bce0c9 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::SinglePopNPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::SinglePopNPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::SinglePopNPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.h b/alib2data/src/automaton/PDA/SinglePopNPDA.h
index 41e086a820..4848095f9b 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -993,3 +994,4 @@ struct type_details_retriever < automaton::SinglePopNPDA < InputSymbolType, Push
 
 extern template class automaton::SinglePopNPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::SinglePopNPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::SinglePopNPDA < > >;
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
index 3729afbc6e..0fbd2896d6 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::VisiblyPushdownDPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::VisiblyPushdownDPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::VisiblyPushdownDPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
index 65697aedc1..14b6712d00 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1438,3 +1439,4 @@ struct type_details_retriever < automaton::VisiblyPushdownDPDA < InputSymbolType
 
 extern template class automaton::VisiblyPushdownDPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::VisiblyPushdownDPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::VisiblyPushdownDPDA < > >;
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
index 11cb0df5eb..bd1604c2ff 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::VisiblyPushdownNPDA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::VisiblyPushdownNPDA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::VisiblyPushdownNPDA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
index ecbacb6dc7..e296f81595 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -1434,3 +1435,4 @@ struct type_details_retriever < automaton::VisiblyPushdownNPDA < InputSymbolType
 
 extern template class automaton::VisiblyPushdownNPDA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::VisiblyPushdownNPDA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::VisiblyPushdownNPDA < > >;
diff --git a/alib2data/src/automaton/TA/ArcFactoredDeterministicZAutomaton.cpp b/alib2data/src/automaton/TA/ArcFactoredDeterministicZAutomaton.cpp
index 71d5cc4e2d..882b9c5d18 100644
--- a/alib2data/src/automaton/TA/ArcFactoredDeterministicZAutomaton.cpp
+++ b/alib2data/src/automaton/TA/ArcFactoredDeterministicZAutomaton.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::ArcFactoredDeterministicZAutomaton < >;
 template class registration::DenormalizationRegisterImpl < const automaton::ArcFactoredDeterministicZAutomaton < > & >;
+template class registration::NormalizationRegisterImpl < automaton::ArcFactoredDeterministicZAutomaton < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/ArcFactoredDeterministicZAutomaton.h b/alib2data/src/automaton/TA/ArcFactoredDeterministicZAutomaton.h
index 030cf0dff1..84ce38ae90 100644
--- a/alib2data/src/automaton/TA/ArcFactoredDeterministicZAutomaton.h
+++ b/alib2data/src/automaton/TA/ArcFactoredDeterministicZAutomaton.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -694,3 +695,4 @@ struct type_details_retriever < automaton::ArcFactoredDeterministicZAutomaton <
 
 extern template class automaton::ArcFactoredDeterministicZAutomaton < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::ArcFactoredDeterministicZAutomaton < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::ArcFactoredDeterministicZAutomaton < > >;
diff --git a/alib2data/src/automaton/TA/ArcFactoredNondeterministicZAutomaton.cpp b/alib2data/src/automaton/TA/ArcFactoredNondeterministicZAutomaton.cpp
index 8a473f93f8..f471ab769f 100644
--- a/alib2data/src/automaton/TA/ArcFactoredNondeterministicZAutomaton.cpp
+++ b/alib2data/src/automaton/TA/ArcFactoredNondeterministicZAutomaton.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::ArcFactoredNondeterministicZAutomaton < >;
 template class registration::DenormalizationRegisterImpl < const automaton::ArcFactoredNondeterministicZAutomaton < > & >;
+template class registration::NormalizationRegisterImpl < automaton::ArcFactoredNondeterministicZAutomaton < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/ArcFactoredNondeterministicZAutomaton.h b/alib2data/src/automaton/TA/ArcFactoredNondeterministicZAutomaton.h
index 184e6e2e69..d12c1d15c8 100644
--- a/alib2data/src/automaton/TA/ArcFactoredNondeterministicZAutomaton.h
+++ b/alib2data/src/automaton/TA/ArcFactoredNondeterministicZAutomaton.h
@@ -41,6 +41,7 @@
 #include "ArcFactoredDeterministicZAutomaton.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -707,3 +708,4 @@ struct type_details_retriever < automaton::ArcFactoredNondeterministicZAutomaton
 
 extern template class automaton::ArcFactoredNondeterministicZAutomaton < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::ArcFactoredNondeterministicZAutomaton < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::ArcFactoredNondeterministicZAutomaton < > >;
diff --git a/alib2data/src/automaton/TA/DFTA.cpp b/alib2data/src/automaton/TA/DFTA.cpp
index 303652cde9..b18f7950cd 100644
--- a/alib2data/src/automaton/TA/DFTA.cpp
+++ b/alib2data/src/automaton/TA/DFTA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::DFTA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::DFTA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::DFTA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/DFTA.h b/alib2data/src/automaton/TA/DFTA.h
index 1665b78fd0..cec463b4b8 100644
--- a/alib2data/src/automaton/TA/DFTA.h
+++ b/alib2data/src/automaton/TA/DFTA.h
@@ -40,6 +40,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -671,3 +672,4 @@ struct type_details_retriever < automaton::DFTA < SymbolType, StateType > > {
 
 extern template class automaton::DFTA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::DFTA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::DFTA < > >;
diff --git a/alib2data/src/automaton/TA/EpsilonNFTA.cpp b/alib2data/src/automaton/TA/EpsilonNFTA.cpp
index 5bac632991..de0968341d 100644
--- a/alib2data/src/automaton/TA/EpsilonNFTA.cpp
+++ b/alib2data/src/automaton/TA/EpsilonNFTA.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::EpsilonNFTA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::EpsilonNFTA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::EpsilonNFTA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/EpsilonNFTA.h b/alib2data/src/automaton/TA/EpsilonNFTA.h
index ce769375e7..9cc8056971 100644
--- a/alib2data/src/automaton/TA/EpsilonNFTA.h
+++ b/alib2data/src/automaton/TA/EpsilonNFTA.h
@@ -42,6 +42,7 @@
 #include "NFTA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -926,3 +927,4 @@ struct type_details_retriever < automaton::EpsilonNFTA < SymbolType, StateType >
 
 extern template class automaton::EpsilonNFTA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::EpsilonNFTA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::EpsilonNFTA < > >;
diff --git a/alib2data/src/automaton/TA/ExtendedNFTA.cpp b/alib2data/src/automaton/TA/ExtendedNFTA.cpp
index c5f8946a25..7e6a9931aa 100644
--- a/alib2data/src/automaton/TA/ExtendedNFTA.cpp
+++ b/alib2data/src/automaton/TA/ExtendedNFTA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::ExtendedNFTA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::ExtendedNFTA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::ExtendedNFTA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/ExtendedNFTA.h b/alib2data/src/automaton/TA/ExtendedNFTA.h
index 077c9036fd..58282c4fa1 100644
--- a/alib2data/src/automaton/TA/ExtendedNFTA.h
+++ b/alib2data/src/automaton/TA/ExtendedNFTA.h
@@ -45,6 +45,7 @@
 #include "NFTA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -744,3 +745,4 @@ struct type_details_retriever < automaton::ExtendedNFTA < SymbolType, StateType
 
 extern template class automaton::ExtendedNFTA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::ExtendedNFTA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::ExtendedNFTA < > >;
diff --git a/alib2data/src/automaton/TA/NFTA.cpp b/alib2data/src/automaton/TA/NFTA.cpp
index 69ac5da3d4..9089760a30 100644
--- a/alib2data/src/automaton/TA/NFTA.cpp
+++ b/alib2data/src/automaton/TA/NFTA.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::NFTA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::NFTA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::NFTA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/NFTA.h b/alib2data/src/automaton/TA/NFTA.h
index 5bcf48e1d6..610042754d 100644
--- a/alib2data/src/automaton/TA/NFTA.h
+++ b/alib2data/src/automaton/TA/NFTA.h
@@ -41,6 +41,7 @@
 #include "DFTA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -697,3 +698,4 @@ struct type_details_retriever < automaton::NFTA < SymbolType, StateType > > {
 
 extern template class automaton::NFTA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::NFTA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::NFTA < > >;
diff --git a/alib2data/src/automaton/TA/NondeterministicZAutomaton.cpp b/alib2data/src/automaton/TA/NondeterministicZAutomaton.cpp
index 34f0dd97b4..ed11fff975 100644
--- a/alib2data/src/automaton/TA/NondeterministicZAutomaton.cpp
+++ b/alib2data/src/automaton/TA/NondeterministicZAutomaton.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::NondeterministicZAutomaton < >;
 template class registration::DenormalizationRegisterImpl < const automaton::NondeterministicZAutomaton < > & >;
+template class registration::NormalizationRegisterImpl < automaton::NondeterministicZAutomaton < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/NondeterministicZAutomaton.h b/alib2data/src/automaton/TA/NondeterministicZAutomaton.h
index f2bbfda057..6ae5ed04d0 100644
--- a/alib2data/src/automaton/TA/NondeterministicZAutomaton.h
+++ b/alib2data/src/automaton/TA/NondeterministicZAutomaton.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -636,3 +637,4 @@ struct type_details_retriever < automaton::NondeterministicZAutomaton < SymbolTy
 
 extern template class automaton::NondeterministicZAutomaton < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::NondeterministicZAutomaton < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::NondeterministicZAutomaton < > >;
diff --git a/alib2data/src/automaton/TA/UnorderedDFTA.cpp b/alib2data/src/automaton/TA/UnorderedDFTA.cpp
index 53dffaffe9..1e0ecfea12 100644
--- a/alib2data/src/automaton/TA/UnorderedDFTA.cpp
+++ b/alib2data/src/automaton/TA/UnorderedDFTA.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::UnorderedDFTA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::UnorderedDFTA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::UnorderedDFTA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/UnorderedDFTA.h b/alib2data/src/automaton/TA/UnorderedDFTA.h
index dbeb1f455e..d22e172f36 100644
--- a/alib2data/src/automaton/TA/UnorderedDFTA.h
+++ b/alib2data/src/automaton/TA/UnorderedDFTA.h
@@ -40,6 +40,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -669,3 +670,4 @@ struct type_details_retriever < automaton::UnorderedDFTA < SymbolType, StateType
 
 extern template class automaton::UnorderedDFTA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::UnorderedDFTA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::UnorderedDFTA < > >;
diff --git a/alib2data/src/automaton/TA/UnorderedNFTA.cpp b/alib2data/src/automaton/TA/UnorderedNFTA.cpp
index 3b43fd911e..b3418d0056 100644
--- a/alib2data/src/automaton/TA/UnorderedNFTA.cpp
+++ b/alib2data/src/automaton/TA/UnorderedNFTA.cpp
@@ -5,6 +5,7 @@
 
 template class automaton::UnorderedNFTA < >;
 template class registration::DenormalizationRegisterImpl < const automaton::UnorderedNFTA < > & >;
+template class registration::NormalizationRegisterImpl < automaton::UnorderedNFTA < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TA/UnorderedNFTA.h b/alib2data/src/automaton/TA/UnorderedNFTA.h
index a84950e959..5f41f58f55 100644
--- a/alib2data/src/automaton/TA/UnorderedNFTA.h
+++ b/alib2data/src/automaton/TA/UnorderedNFTA.h
@@ -41,6 +41,7 @@
 #include "UnorderedDFTA.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -697,3 +698,4 @@ struct type_details_retriever < automaton::UnorderedNFTA < SymbolType, StateType
 
 extern template class automaton::UnorderedNFTA < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::UnorderedNFTA < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::UnorderedNFTA < > >;
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.cpp b/alib2data/src/automaton/TM/OneTapeDTM.cpp
index 30edc33755..aa92b4f362 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.cpp
+++ b/alib2data/src/automaton/TM/OneTapeDTM.cpp
@@ -4,6 +4,7 @@
 
 template class automaton::OneTapeDTM < >;
 template class registration::DenormalizationRegisterImpl < const automaton::OneTapeDTM < > & >;
+template class registration::NormalizationRegisterImpl < automaton::OneTapeDTM < > >;
 
 namespace {
 
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.h b/alib2data/src/automaton/TM/OneTapeDTM.h
index 7dc5e84720..678b0901b7 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.h
+++ b/alib2data/src/automaton/TM/OneTapeDTM.h
@@ -39,6 +39,7 @@
 #include <automaton/common/AutomatonDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace automaton {
 
@@ -880,3 +881,4 @@ struct type_details_retriever < automaton::OneTapeDTM < SymbolType, StateType >
 
 extern template class automaton::OneTapeDTM < >;
 extern template class registration::DenormalizationRegisterImpl < const automaton::OneTapeDTM < > & >;
+extern template class registration::NormalizationRegisterImpl < automaton::OneTapeDTM < > >;
diff --git a/alib2data/src/grammar/ContextFree/CFG.cpp b/alib2data/src/grammar/ContextFree/CFG.cpp
index 64cd8b7490..bcbc6dd43f 100644
--- a/alib2data/src/grammar/ContextFree/CFG.cpp
+++ b/alib2data/src/grammar/ContextFree/CFG.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::CFG < >;
 template class registration::DenormalizationRegisterImpl < const grammar::CFG < > & >;
+template class registration::NormalizationRegisterImpl < grammar::CFG < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h
index 40ac402ea7..bbb26feb81 100644
--- a/alib2data/src/grammar/ContextFree/CFG.h
+++ b/alib2data/src/grammar/ContextFree/CFG.h
@@ -38,6 +38,7 @@
 #include "EpsilonFreeCFG.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -567,3 +568,4 @@ struct type_details_retriever < grammar::CFG < TerminalSymbolType, NonterminalSy
 
 extern template class grammar::CFG < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::CFG < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::CFG < > >;
diff --git a/alib2data/src/grammar/ContextFree/CNF.cpp b/alib2data/src/grammar/ContextFree/CNF.cpp
index 2ef3b9bdb5..f5383a4388 100644
--- a/alib2data/src/grammar/ContextFree/CNF.cpp
+++ b/alib2data/src/grammar/ContextFree/CNF.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::CNF < >;
 template class registration::DenormalizationRegisterImpl < const grammar::CNF < > & >;
+template class registration::NormalizationRegisterImpl < grammar::CNF < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h
index 73f874d357..b8929b598a 100644
--- a/alib2data/src/grammar/ContextFree/CNF.h
+++ b/alib2data/src/grammar/ContextFree/CNF.h
@@ -39,6 +39,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -642,3 +643,4 @@ struct type_details_retriever < grammar::CNF < TerminalSymbolType, NonterminalSy
 
 extern template class grammar::CNF < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::CNF < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::CNF < > >;
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
index dbe64e7f78..9e312ce396 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::EpsilonFreeCFG < >;
 template class registration::DenormalizationRegisterImpl < const grammar::EpsilonFreeCFG < > & >;
+template class registration::NormalizationRegisterImpl < grammar::EpsilonFreeCFG < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
index 16553b86a6..76e40b3bfc 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
@@ -36,6 +36,7 @@
 #include <alphabet/common/SymbolDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -594,3 +595,4 @@ struct type_details_retriever < grammar::EpsilonFreeCFG < TerminalSymbolType, No
 
 extern template class grammar::EpsilonFreeCFG < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::EpsilonFreeCFG < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::EpsilonFreeCFG < > >;
diff --git a/alib2data/src/grammar/ContextFree/GNF.cpp b/alib2data/src/grammar/ContextFree/GNF.cpp
index 96802c4a29..d4665f3cf5 100644
--- a/alib2data/src/grammar/ContextFree/GNF.cpp
+++ b/alib2data/src/grammar/ContextFree/GNF.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::GNF < >;
 template class registration::DenormalizationRegisterImpl < const grammar::GNF < > & >;
+template class registration::NormalizationRegisterImpl < grammar::GNF < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h
index 9b9799d1ae..658061d788 100644
--- a/alib2data/src/grammar/ContextFree/GNF.h
+++ b/alib2data/src/grammar/ContextFree/GNF.h
@@ -38,6 +38,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -594,3 +595,4 @@ struct type_details_retriever < grammar::GNF < TerminalSymbolType, NonterminalSy
 
 extern template class grammar::GNF < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::GNF < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::GNF < > >;
diff --git a/alib2data/src/grammar/ContextFree/LG.cpp b/alib2data/src/grammar/ContextFree/LG.cpp
index 3c43064521..0f9d52abad 100644
--- a/alib2data/src/grammar/ContextFree/LG.cpp
+++ b/alib2data/src/grammar/ContextFree/LG.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::LG < >;
 template class registration::DenormalizationRegisterImpl < const grammar::LG < > & >;
+template class registration::NormalizationRegisterImpl < grammar::LG < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h
index 1ef74fd063..9a7cf9e1c5 100644
--- a/alib2data/src/grammar/ContextFree/LG.h
+++ b/alib2data/src/grammar/ContextFree/LG.h
@@ -40,6 +40,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -643,3 +644,4 @@ struct type_details_retriever < grammar::LG < TerminalSymbolType, NonterminalSym
 
 extern template class grammar::LG < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::LG < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::LG < > >;
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.cpp b/alib2data/src/grammar/ContextSensitive/CSG.cpp
index 5fb770335f..1259584d2d 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.cpp
+++ b/alib2data/src/grammar/ContextSensitive/CSG.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::CSG < >;
 template class registration::DenormalizationRegisterImpl < const grammar::CSG < > & >;
+template class registration::NormalizationRegisterImpl < grammar::CSG < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.h b/alib2data/src/grammar/ContextSensitive/CSG.h
index 0d04c82187..cede910a89 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.h
+++ b/alib2data/src/grammar/ContextSensitive/CSG.h
@@ -39,6 +39,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -623,3 +624,4 @@ struct type_details_retriever < grammar::CSG < SymbolType > > {
 
 extern template class grammar::CSG < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::CSG < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::CSG < > >;
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
index e9bdf0974a..ad1aeb1fd3 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::NonContractingGrammar < >;
 template class registration::DenormalizationRegisterImpl < const grammar::NonContractingGrammar < > & >;
+template class registration::NormalizationRegisterImpl < grammar::NonContractingGrammar < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
index 5389e4d177..59bb89601a 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
@@ -39,6 +39,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -616,3 +617,4 @@ struct type_details_retriever < grammar::NonContractingGrammar < SymbolType > >
 
 extern template class grammar::NonContractingGrammar < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::NonContractingGrammar < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::NonContractingGrammar < > >;
diff --git a/alib2data/src/grammar/Regular/LeftLG.cpp b/alib2data/src/grammar/Regular/LeftLG.cpp
index d92c65b5d1..982af50878 100644
--- a/alib2data/src/grammar/Regular/LeftLG.cpp
+++ b/alib2data/src/grammar/Regular/LeftLG.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::LeftLG < >;
 template class registration::DenormalizationRegisterImpl < const grammar::LeftLG < > & >;
+template class registration::NormalizationRegisterImpl < grammar::LeftLG < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/Regular/LeftLG.h b/alib2data/src/grammar/Regular/LeftLG.h
index bad69c73f7..87431f9542 100644
--- a/alib2data/src/grammar/Regular/LeftLG.h
+++ b/alib2data/src/grammar/Regular/LeftLG.h
@@ -39,6 +39,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -625,3 +626,4 @@ struct type_details_retriever < grammar::LeftLG < TerminalSymbolType, Nontermina
 
 extern template class grammar::LeftLG < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::LeftLG < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::LeftLG < > >;
diff --git a/alib2data/src/grammar/Regular/LeftRG.cpp b/alib2data/src/grammar/Regular/LeftRG.cpp
index ad374e06c8..dda36f7890 100644
--- a/alib2data/src/grammar/Regular/LeftRG.cpp
+++ b/alib2data/src/grammar/Regular/LeftRG.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::LeftRG < >;
 template class registration::DenormalizationRegisterImpl < const grammar::LeftRG < > & >;
+template class registration::NormalizationRegisterImpl < grammar::LeftRG < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/Regular/LeftRG.h b/alib2data/src/grammar/Regular/LeftRG.h
index 2acbbf8ca7..57e1c8f45b 100644
--- a/alib2data/src/grammar/Regular/LeftRG.h
+++ b/alib2data/src/grammar/Regular/LeftRG.h
@@ -39,6 +39,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -641,3 +642,4 @@ struct type_details_retriever < grammar::LeftRG < TerminalSymbolType, Nontermina
 
 extern template class grammar::LeftRG < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::LeftRG < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::LeftRG < > >;
diff --git a/alib2data/src/grammar/Regular/RightLG.cpp b/alib2data/src/grammar/Regular/RightLG.cpp
index 58af15c48b..a33a23d376 100644
--- a/alib2data/src/grammar/Regular/RightLG.cpp
+++ b/alib2data/src/grammar/Regular/RightLG.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::RightLG < >;
 template class registration::DenormalizationRegisterImpl < const grammar::RightLG < > & >;
+template class registration::NormalizationRegisterImpl < grammar::RightLG < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/Regular/RightLG.h b/alib2data/src/grammar/Regular/RightLG.h
index ff78850b83..0092f2140d 100644
--- a/alib2data/src/grammar/Regular/RightLG.h
+++ b/alib2data/src/grammar/Regular/RightLG.h
@@ -39,6 +39,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -622,3 +623,4 @@ struct type_details_retriever < grammar::RightLG < TerminalSymbolType, Nontermin
 
 extern template class grammar::RightLG < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::RightLG < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::RightLG < > >;
diff --git a/alib2data/src/grammar/Regular/RightRG.cpp b/alib2data/src/grammar/Regular/RightRG.cpp
index 0dc60ecccf..da1676c4a7 100644
--- a/alib2data/src/grammar/Regular/RightRG.cpp
+++ b/alib2data/src/grammar/Regular/RightRG.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::RightRG < >;
 template class registration::DenormalizationRegisterImpl < const grammar::RightRG < > & >;
+template class registration::NormalizationRegisterImpl < grammar::RightRG < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/Regular/RightRG.h b/alib2data/src/grammar/Regular/RightRG.h
index 9d648f1b16..2d1a82b6af 100644
--- a/alib2data/src/grammar/Regular/RightRG.h
+++ b/alib2data/src/grammar/Regular/RightRG.h
@@ -39,6 +39,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -640,3 +641,4 @@ struct type_details_retriever < grammar::RightRG < TerminalSymbolType, Nontermin
 
 extern template class grammar::RightRG < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::RightRG < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::RightRG < > >;
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
index b1771d4b0e..bab470a32d 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::ContextPreservingUnrestrictedGrammar < >;
 template class registration::DenormalizationRegisterImpl < const grammar::ContextPreservingUnrestrictedGrammar < > & >;
+template class registration::NormalizationRegisterImpl < grammar::ContextPreservingUnrestrictedGrammar < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
index 18ffebdd82..b83a646a85 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
@@ -38,6 +38,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -592,3 +593,4 @@ struct type_details_retriever < grammar::ContextPreservingUnrestrictedGrammar <
 
 extern template class grammar::ContextPreservingUnrestrictedGrammar < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::ContextPreservingUnrestrictedGrammar < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::ContextPreservingUnrestrictedGrammar < > >;
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
index 8da2ae7e95..5fc178f0cd 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.cpp
@@ -5,6 +5,7 @@
 
 template class grammar::UnrestrictedGrammar < >;
 template class registration::DenormalizationRegisterImpl < const grammar::UnrestrictedGrammar < > & >;
+template class registration::NormalizationRegisterImpl < grammar::UnrestrictedGrammar < > >;
 
 namespace {
 
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
index 2384469aa4..56e116dbbd 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
@@ -38,6 +38,7 @@
 #include <grammar/common/GrammarDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace grammar {
 
@@ -589,3 +590,4 @@ struct type_details_retriever < grammar::UnrestrictedGrammar < SymbolType > > {
 
 extern template class grammar::UnrestrictedGrammar < >;
 extern template class registration::DenormalizationRegisterImpl < const grammar::UnrestrictedGrammar < > & >;
+extern template class registration::NormalizationRegisterImpl < grammar::UnrestrictedGrammar < > >;
diff --git a/alib2data/src/regexp/formal/FormalRegExp.cpp b/alib2data/src/regexp/formal/FormalRegExp.cpp
index 7e46b69230..553aba7066 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.cpp
+++ b/alib2data/src/regexp/formal/FormalRegExp.cpp
@@ -6,6 +6,7 @@
 
 template class regexp::FormalRegExp < >;
 template class registration::DenormalizationRegisterImpl < const regexp::FormalRegExp < > & >;
+template class registration::NormalizationRegisterImpl < regexp::FormalRegExp < > >;
 template class regexp::FormalRegExpStructure < DefaultSymbolType >;
 template class regexp::FormalRegExpElement < DefaultSymbolType >;
 template class regexp::FormalRegExpAlternation < DefaultSymbolType >;
diff --git a/alib2data/src/regexp/formal/FormalRegExp.h b/alib2data/src/regexp/formal/FormalRegExp.h
index 0f07e04cbd..67f6586196 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.h
+++ b/alib2data/src/regexp/formal/FormalRegExp.h
@@ -45,6 +45,7 @@ class FormalRegExp;
 #include <regexp/common/RegExpNormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace regexp {
 
@@ -309,3 +310,4 @@ struct type_details_retriever < regexp::FormalRegExp < SymbolType > > {
 
 extern template class regexp::FormalRegExp < >;
 extern template class registration::DenormalizationRegisterImpl < const regexp::FormalRegExp < > & >;
+extern template class registration::NormalizationRegisterImpl < regexp::FormalRegExp < > >;
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp b/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
index f2d800b595..08a00458b5 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.cpp
@@ -6,6 +6,7 @@
 
 template class regexp::UnboundedRegExp < >;
 template class registration::DenormalizationRegisterImpl < const regexp::UnboundedRegExp < > & >;
+template class registration::NormalizationRegisterImpl < regexp::UnboundedRegExp < > >;
 
 template class regexp::UnboundedRegExpStructure < DefaultSymbolType >;
 template class regexp::UnboundedRegExpElement < DefaultSymbolType >;
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.h b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
index 4dea3cbc6f..52015009a9 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
@@ -45,6 +45,7 @@ class UnboundedRegExp;
 #include <regexp/common/RegExpNormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace regexp {
 
@@ -311,3 +312,4 @@ struct type_details_retriever < regexp::UnboundedRegExp < SymbolType > > {
 
 extern template class regexp::UnboundedRegExp < >;
 extern template class registration::DenormalizationRegisterImpl < const regexp::UnboundedRegExp < > & >;
+extern template class registration::NormalizationRegisterImpl < regexp::UnboundedRegExp < > >;
diff --git a/alib2data/src/rte/formal/FormalRTE.cpp b/alib2data/src/rte/formal/FormalRTE.cpp
index bed3085958..909a5ee236 100644
--- a/alib2data/src/rte/formal/FormalRTE.cpp
+++ b/alib2data/src/rte/formal/FormalRTE.cpp
@@ -5,6 +5,7 @@
 
 template class rte::FormalRTE < >;
 template class registration::DenormalizationRegisterImpl < const rte::FormalRTE < > & >;
+template class registration::NormalizationRegisterImpl < rte::FormalRTE < > >;
 template class rte::FormalRTEStructure < DefaultSymbolType >;
 template class rte::FormalRTEElement < DefaultSymbolType >;
 template class rte::FormalRTEAlternation < DefaultSymbolType >;
diff --git a/alib2data/src/rte/formal/FormalRTE.h b/alib2data/src/rte/formal/FormalRTE.h
index 40db4ef5ec..394aa1e37d 100644
--- a/alib2data/src/rte/formal/FormalRTE.h
+++ b/alib2data/src/rte/formal/FormalRTE.h
@@ -39,6 +39,7 @@
 #include <rte/common/RTEDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace rte {
 
@@ -449,3 +450,4 @@ struct type_details_retriever < rte::FormalRTE < SymbolType > > {
 
 extern template class rte::FormalRTE < >;
 extern template class registration::DenormalizationRegisterImpl < const rte::FormalRTE < > & >;
+extern template class registration::NormalizationRegisterImpl < rte::FormalRTE < > >;
diff --git a/alib2data/src/string/CyclicString.cpp b/alib2data/src/string/CyclicString.cpp
index ae022a8633..90a87ac5ed 100644
--- a/alib2data/src/string/CyclicString.cpp
+++ b/alib2data/src/string/CyclicString.cpp
@@ -5,6 +5,7 @@
 
 template class string::CyclicString < >;
 template class registration::DenormalizationRegisterImpl < const string::CyclicString < > & >;
+template class registration::NormalizationRegisterImpl < string::CyclicString < > >;
 
 namespace {
 
diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h
index c7c7117492..a173682037 100644
--- a/alib2data/src/string/CyclicString.h
+++ b/alib2data/src/string/CyclicString.h
@@ -38,6 +38,7 @@
 #include <alphabet/common/SymbolDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace string {
 
@@ -341,3 +342,4 @@ struct type_details_retriever < string::CyclicString < SymbolType > > {
 
 extern template class string::CyclicString < >;
 extern template class registration::DenormalizationRegisterImpl < const string::CyclicString < > & >;
+extern template class registration::NormalizationRegisterImpl < string::CyclicString < > >;
diff --git a/alib2data/src/string/LinearString.cpp b/alib2data/src/string/LinearString.cpp
index 781bd68099..9b8762556e 100644
--- a/alib2data/src/string/LinearString.cpp
+++ b/alib2data/src/string/LinearString.cpp
@@ -6,6 +6,7 @@
 
 template class string::LinearString < >;
 template class registration::DenormalizationRegisterImpl < const string::LinearString < > & >;
+template class registration::NormalizationRegisterImpl < string::LinearString < > >;
 
 namespace {
 
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index b2bd511bbd..5f91a65d4e 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -38,6 +38,7 @@
 #include <alphabet/common/SymbolDenormalize.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace string {
 
@@ -363,3 +364,4 @@ struct type_details_retriever < string::LinearString < SymbolType > > {
 
 extern template class string::LinearString < >;
 extern template class registration::DenormalizationRegisterImpl < const string::LinearString < > & >;
+extern template class registration::NormalizationRegisterImpl < string::LinearString < > >;
diff --git a/alib2data/src/string/WildcardLinearString.cpp b/alib2data/src/string/WildcardLinearString.cpp
index 5cd4873c60..40f9d91ccc 100644
--- a/alib2data/src/string/WildcardLinearString.cpp
+++ b/alib2data/src/string/WildcardLinearString.cpp
@@ -6,6 +6,7 @@
 
 template class string::WildcardLinearString < >;
 template class registration::DenormalizationRegisterImpl < const string::WildcardLinearString < > & >;
+template class registration::NormalizationRegisterImpl < string::WildcardLinearString < > >;
 
 namespace {
 
diff --git a/alib2data/src/string/WildcardLinearString.h b/alib2data/src/string/WildcardLinearString.h
index 2af0296a76..c13b775cd9 100644
--- a/alib2data/src/string/WildcardLinearString.h
+++ b/alib2data/src/string/WildcardLinearString.h
@@ -22,6 +22,7 @@
 #include "LinearString.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace string {
 
@@ -430,3 +431,4 @@ struct type_details_retriever < string::WildcardLinearString < SymbolType > > {
 
 extern template class string::WildcardLinearString < >;
 extern template class registration::DenormalizationRegisterImpl < const string::WildcardLinearString < > & >;
+extern template class registration::NormalizationRegisterImpl < string::WildcardLinearString < > >;
diff --git a/alib2data/src/tree/ranked/PostfixRankedTree.cpp b/alib2data/src/tree/ranked/PostfixRankedTree.cpp
index 038bd72658..c667a374f0 100644
--- a/alib2data/src/tree/ranked/PostfixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PostfixRankedTree.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PostfixRankedTree < >;
 template class registration::DenormalizationRegisterImpl < const tree::PostfixRankedTree < > & >;
+template class registration::NormalizationRegisterImpl < tree::PostfixRankedTree < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/PostfixRankedTree.h b/alib2data/src/tree/ranked/PostfixRankedTree.h
index f62c67423b..53af8abe32 100644
--- a/alib2data/src/tree/ranked/PostfixRankedTree.h
+++ b/alib2data/src/tree/ranked/PostfixRankedTree.h
@@ -54,6 +54,7 @@ class PostfixRankedTree;
 #include "RankedTree.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -350,3 +351,4 @@ struct type_details_retriever < tree::PostfixRankedTree < SymbolType > > {
 
 extern template class tree::PostfixRankedTree < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PostfixRankedTree < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::PostfixRankedTree < > >;
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
index a5c37ac884..667bc8cc92 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PrefixRankedBarNonlinearPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedBarNonlinearPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::PrefixRankedBarNonlinearPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
index bed8e88867..eaf15ed5e6 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
@@ -62,6 +62,7 @@ class PrefixRankedBarNonlinearPattern;
 #include "RankedNonlinearPattern.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -744,3 +745,4 @@ struct type_details_retriever < tree::PrefixRankedBarNonlinearPattern < SymbolTy
 
 extern template class tree::PrefixRankedBarNonlinearPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedBarNonlinearPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::PrefixRankedBarNonlinearPattern < > >;
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
index 892147b2a0..999b90ba89 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PrefixRankedBarPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedBarPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::PrefixRankedBarPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index ce78dc759a..31b74e2f5d 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -57,6 +57,7 @@ class PrefixRankedBarPattern;
 #include "PrefixRankedBarTree.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -586,3 +587,4 @@ struct type_details_retriever < tree::PrefixRankedBarPattern < SymbolType > > {
 
 extern template class tree::PrefixRankedBarPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedBarPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < const tree::PrefixRankedBarPattern < > & >;
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
index 77f932bae5..6c34da2135 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PrefixRankedBarTree < >;
 template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedBarTree < > & >;
+template class registration::NormalizationRegisterImpl < tree::PrefixRankedBarTree < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 6fcf409927..16192dd441 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -54,6 +54,7 @@ class PrefixRankedBarTree;
 #include "RankedTree.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -451,3 +452,4 @@ struct type_details_retriever < tree::PrefixRankedBarTree < SymbolType > > {
 
 extern template class tree::PrefixRankedBarTree < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedBarTree < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::PrefixRankedBarTree < > >;
diff --git a/alib2data/src/tree/ranked/PrefixRankedExtendedPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedExtendedPattern.cpp
index b2f3827408..158fd0ce1a 100644
--- a/alib2data/src/tree/ranked/PrefixRankedExtendedPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedExtendedPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PrefixRankedExtendedPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedExtendedPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::PrefixRankedExtendedPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedExtendedPattern.h b/alib2data/src/tree/ranked/PrefixRankedExtendedPattern.h
index 701fdaa10b..b6c874d12c 100644
--- a/alib2data/src/tree/ranked/PrefixRankedExtendedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedExtendedPattern.h
@@ -53,6 +53,7 @@ class PrefixRankedExtendedPattern;
 #include "PrefixRankedPattern.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -496,3 +497,4 @@ struct type_details_retriever < tree::PrefixRankedExtendedPattern < SymbolType >
 
 extern template class tree::PrefixRankedExtendedPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedExtendedPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::PrefixRankedExtendedPattern < > >;
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
index 45e4d2f16b..6a84f61717 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PrefixRankedNonlinearPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedNonlinearPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::PrefixRankedNonlinearPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
index 1d86404ca1..0e94954899 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
@@ -58,6 +58,7 @@ class PrefixRankedNonlinearPattern;
 #include "RankedNonlinearPattern.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -543,3 +544,4 @@ struct type_details_retriever < tree::PrefixRankedNonlinearPattern < SymbolType
 
 extern template class tree::PrefixRankedNonlinearPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedNonlinearPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::PrefixRankedNonlinearPattern < > >;
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
index c2ca0d6cd4..b0ab4fea25 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PrefixRankedPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::PrefixRankedPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h
index c625e774e8..3cd038d470 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h
@@ -55,6 +55,7 @@ class PrefixRankedPattern;
 #include "PrefixRankedTree.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -419,3 +420,4 @@ struct type_details_retriever < tree::PrefixRankedPattern < SymbolType > > {
 
 extern template class tree::PrefixRankedPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::PrefixRankedPattern < > >;
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.cpp b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
index 35ef53a95a..972275888c 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.cpp
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PrefixRankedTree < >;
 template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedTree < > & >;
+template class registration::NormalizationRegisterImpl < tree::PrefixRankedTree < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h
index 534a308a8e..8b808e891e 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.h
@@ -51,6 +51,7 @@ class PrefixRankedTree;
 #include "RankedTree.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -357,3 +358,4 @@ struct type_details_retriever < tree::PrefixRankedTree < SymbolType > > {
 
 extern template class tree::PrefixRankedTree < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PrefixRankedTree < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::PrefixRankedTree < > >;
diff --git a/alib2data/src/tree/ranked/RankedExtendedPattern.cpp b/alib2data/src/tree/ranked/RankedExtendedPattern.cpp
index 855cd34dd8..88e4cd3311 100644
--- a/alib2data/src/tree/ranked/RankedExtendedPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedExtendedPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::RankedExtendedPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::RankedExtendedPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::RankedExtendedPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/RankedExtendedPattern.h b/alib2data/src/tree/ranked/RankedExtendedPattern.h
index a12926f6ab..b3dc94cf9e 100644
--- a/alib2data/src/tree/ranked/RankedExtendedPattern.h
+++ b/alib2data/src/tree/ranked/RankedExtendedPattern.h
@@ -51,6 +51,7 @@ class RankedExtendedPattern;
 #include "RankedPattern.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -492,3 +493,4 @@ struct type_details_retriever < tree::RankedExtendedPattern < SymbolType > > {
 
 extern template class tree::RankedExtendedPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::RankedExtendedPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::RankedExtendedPattern < > >;
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
index bc9c496693..7705bc4219 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::RankedNonlinearPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::RankedNonlinearPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::RankedNonlinearPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
index 75a9e302ef..d9585e38d9 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
@@ -51,6 +51,7 @@ class RankedNonlinearPattern;
 #include "../unranked/UnrankedNonlinearPattern.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -501,3 +502,4 @@ struct type_details_retriever < tree::RankedNonlinearPattern < SymbolType > > {
 
 extern template class tree::RankedNonlinearPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::RankedNonlinearPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::RankedNonlinearPattern < > >;
diff --git a/alib2data/src/tree/ranked/RankedPattern.cpp b/alib2data/src/tree/ranked/RankedPattern.cpp
index c5466776b1..30b1eac420 100644
--- a/alib2data/src/tree/ranked/RankedPattern.cpp
+++ b/alib2data/src/tree/ranked/RankedPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::RankedPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::RankedPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::RankedPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h
index 5dec0dc4cd..8c73a689f8 100644
--- a/alib2data/src/tree/ranked/RankedPattern.h
+++ b/alib2data/src/tree/ranked/RankedPattern.h
@@ -51,6 +51,7 @@ class RankedPattern;
 #include "../unranked/UnrankedPattern.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -413,3 +414,4 @@ struct type_details_retriever < tree::RankedPattern < SymbolType > > {
 
 extern template class tree::RankedPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::RankedPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::RankedPattern < > >;
diff --git a/alib2data/src/tree/ranked/RankedTree.cpp b/alib2data/src/tree/ranked/RankedTree.cpp
index eb33245b07..9bc4c9c036 100644
--- a/alib2data/src/tree/ranked/RankedTree.cpp
+++ b/alib2data/src/tree/ranked/RankedTree.cpp
@@ -6,6 +6,7 @@
 
 template class tree::RankedTree < >;
 template class registration::DenormalizationRegisterImpl < const tree::RankedTree < > & >;
+template class registration::NormalizationRegisterImpl < tree::RankedTree < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h
index 9931ce51a6..17a490326c 100644
--- a/alib2data/src/tree/ranked/RankedTree.h
+++ b/alib2data/src/tree/ranked/RankedTree.h
@@ -53,6 +53,7 @@ class RankedTree;
 #include "PrefixRankedTree.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -379,3 +380,4 @@ struct type_details_retriever < tree::RankedTree < SymbolType > > {
 
 extern template class tree::RankedTree < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::RankedTree < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::RankedTree < > >;
diff --git a/alib2data/src/tree/ranked/UnorderedRankedPattern.cpp b/alib2data/src/tree/ranked/UnorderedRankedPattern.cpp
index 36e9b78023..c346d716be 100644
--- a/alib2data/src/tree/ranked/UnorderedRankedPattern.cpp
+++ b/alib2data/src/tree/ranked/UnorderedRankedPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::UnorderedRankedPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::UnorderedRankedPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::UnorderedRankedPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/UnorderedRankedPattern.h b/alib2data/src/tree/ranked/UnorderedRankedPattern.h
index 7c2d496220..43f7af707b 100644
--- a/alib2data/src/tree/ranked/UnorderedRankedPattern.h
+++ b/alib2data/src/tree/ranked/UnorderedRankedPattern.h
@@ -51,6 +51,7 @@ class UnorderedRankedPattern;
 #include <tree/ranked/RankedPattern.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -413,3 +414,4 @@ struct type_details_retriever < tree::UnorderedRankedPattern < SymbolType > > {
 
 extern template class tree::UnorderedRankedPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::UnorderedRankedPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::UnorderedRankedPattern < > >;
diff --git a/alib2data/src/tree/ranked/UnorderedRankedTree.cpp b/alib2data/src/tree/ranked/UnorderedRankedTree.cpp
index 2b933c70b5..7e7e99dc4d 100644
--- a/alib2data/src/tree/ranked/UnorderedRankedTree.cpp
+++ b/alib2data/src/tree/ranked/UnorderedRankedTree.cpp
@@ -6,6 +6,7 @@
 
 template class tree::UnorderedRankedTree < >;
 template class registration::DenormalizationRegisterImpl < const tree::UnorderedRankedTree < > & >;
+template class registration::NormalizationRegisterImpl < tree::UnorderedRankedTree < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/ranked/UnorderedRankedTree.h b/alib2data/src/tree/ranked/UnorderedRankedTree.h
index 0d528cef80..3ad7f1b7d5 100644
--- a/alib2data/src/tree/ranked/UnorderedRankedTree.h
+++ b/alib2data/src/tree/ranked/UnorderedRankedTree.h
@@ -51,6 +51,7 @@ class UnorderedRankedTree;
 #include <tree/ranked/RankedTree.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -355,3 +356,4 @@ struct type_details_retriever < tree::UnorderedRankedTree < SymbolType > > {
 
 extern template class tree::UnorderedRankedTree < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::UnorderedRankedTree < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::UnorderedRankedTree < > >;
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.cpp b/alib2data/src/tree/unranked/PrefixBarTree.cpp
index 006011dca4..33441d39f4 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.cpp
+++ b/alib2data/src/tree/unranked/PrefixBarTree.cpp
@@ -6,6 +6,7 @@
 
 template class tree::PrefixBarTree < >;
 template class registration::DenormalizationRegisterImpl < const tree::PrefixBarTree < > & >;
+template class registration::NormalizationRegisterImpl < tree::PrefixBarTree < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.h b/alib2data/src/tree/unranked/PrefixBarTree.h
index 1b23b1bd51..ad336ca3be 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.h
+++ b/alib2data/src/tree/unranked/PrefixBarTree.h
@@ -54,6 +54,7 @@ class PrefixBarTree;
 #include <string/LinearString.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -422,3 +423,4 @@ struct type_details_retriever < tree::PrefixBarTree < SymbolType > > {
 
 extern template class tree::PrefixBarTree < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::PrefixBarTree < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::PrefixBarTree < > >;
diff --git a/alib2data/src/tree/unranked/UnorderedUnrankedPattern.cpp b/alib2data/src/tree/unranked/UnorderedUnrankedPattern.cpp
index 70e153f5b1..517329a4a2 100644
--- a/alib2data/src/tree/unranked/UnorderedUnrankedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnorderedUnrankedPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::UnorderedUnrankedPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::UnorderedUnrankedPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::UnorderedUnrankedPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/unranked/UnorderedUnrankedPattern.h b/alib2data/src/tree/unranked/UnorderedUnrankedPattern.h
index c45d162057..7e0fc4c14a 100644
--- a/alib2data/src/tree/unranked/UnorderedUnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnorderedUnrankedPattern.h
@@ -50,6 +50,7 @@ class UnorderedUnrankedPattern;
 #include "UnrankedPattern.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -443,3 +444,4 @@ struct type_details_retriever < tree::UnorderedUnrankedPattern < SymbolType > >
 
 extern template class tree::UnorderedUnrankedPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::UnorderedUnrankedPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::UnorderedUnrankedPattern < > >;
diff --git a/alib2data/src/tree/unranked/UnorderedUnrankedTree.cpp b/alib2data/src/tree/unranked/UnorderedUnrankedTree.cpp
index 8bc384ed4e..d02c031e8e 100644
--- a/alib2data/src/tree/unranked/UnorderedUnrankedTree.cpp
+++ b/alib2data/src/tree/unranked/UnorderedUnrankedTree.cpp
@@ -6,6 +6,7 @@
 
 template class tree::UnorderedUnrankedTree < >;
 template class registration::DenormalizationRegisterImpl < const tree::UnorderedUnrankedTree < > & >;
+template class registration::NormalizationRegisterImpl < tree::UnorderedUnrankedTree < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/unranked/UnorderedUnrankedTree.h b/alib2data/src/tree/unranked/UnorderedUnrankedTree.h
index d838cd104a..216359a43a 100644
--- a/alib2data/src/tree/unranked/UnorderedUnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnorderedUnrankedTree.h
@@ -50,6 +50,7 @@ class UnorderedUnrankedTree;
 #include "UnrankedTree.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -334,3 +335,4 @@ struct type_details_retriever < tree::UnorderedUnrankedTree < SymbolType > > {
 
 extern template class tree::UnorderedUnrankedTree < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::UnorderedUnrankedTree < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::UnorderedUnrankedTree < > >;
diff --git a/alib2data/src/tree/unranked/UnrankedExtendedPattern.cpp b/alib2data/src/tree/unranked/UnrankedExtendedPattern.cpp
index 1ffe74d6f4..e4220e36eb 100644
--- a/alib2data/src/tree/unranked/UnrankedExtendedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedExtendedPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::UnrankedExtendedPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::UnrankedExtendedPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::UnrankedExtendedPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/unranked/UnrankedExtendedPattern.h b/alib2data/src/tree/unranked/UnrankedExtendedPattern.h
index b320cfd10a..42877dbf18 100644
--- a/alib2data/src/tree/unranked/UnrankedExtendedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedExtendedPattern.h
@@ -52,6 +52,7 @@ class UnrankedExtendedPattern;
 #include <alphabet/NodeWildcard.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -505,3 +506,4 @@ struct type_details_retriever < tree::UnrankedExtendedPattern < SymbolType > > {
 
 extern template class tree::UnrankedExtendedPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::UnrankedExtendedPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::UnrankedExtendedPattern < > >;
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
index 357cf6e32c..a25c2dc701 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::UnrankedNonlinearPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::UnrankedNonlinearPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::UnrankedNonlinearPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
index 13565c7c41..6270b45d2d 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
@@ -51,6 +51,7 @@ class UnrankedNonlinearPattern;
 #include <alphabet/Gap.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -533,3 +534,4 @@ struct type_details_retriever < tree::UnrankedNonlinearPattern < SymbolType > >
 
 extern template class tree::UnrankedNonlinearPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::UnrankedNonlinearPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::UnrankedNonlinearPattern < > >;
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.cpp b/alib2data/src/tree/unranked/UnrankedPattern.cpp
index d071f2b374..f6307138f6 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.cpp
+++ b/alib2data/src/tree/unranked/UnrankedPattern.cpp
@@ -6,6 +6,7 @@
 
 template class tree::UnrankedPattern < >;
 template class registration::DenormalizationRegisterImpl < const tree::UnrankedPattern < > & >;
+template class registration::NormalizationRegisterImpl < tree::UnrankedPattern < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h
index 491d30d384..412587936a 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedPattern.h
@@ -51,6 +51,7 @@ class UnrankedPattern;
 #include <alphabet/Gap.h>
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -446,3 +447,4 @@ struct type_details_retriever < tree::UnrankedPattern < SymbolType > > {
 
 extern template class tree::UnrankedPattern < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::UnrankedPattern < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::UnrankedPattern < > >;
diff --git a/alib2data/src/tree/unranked/UnrankedTree.cpp b/alib2data/src/tree/unranked/UnrankedTree.cpp
index c3cd676f8b..f3026c41fd 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.cpp
+++ b/alib2data/src/tree/unranked/UnrankedTree.cpp
@@ -6,6 +6,7 @@
 
 template class tree::UnrankedTree < >;
 template class registration::DenormalizationRegisterImpl < const tree::UnrankedTree < > & >;
+template class registration::NormalizationRegisterImpl < tree::UnrankedTree < > >;
 
 namespace {
 
diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h
index ef5d01aa80..d2618dff99 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnrankedTree.h
@@ -50,6 +50,7 @@ class UnrankedTree;
 #include "../ranked/RankedTree.h"
 
 #include <registration/DenormalizationRegistration.hpp>
+#include <registration/NormalizationRegistration.hpp>
 
 namespace tree {
 
@@ -334,3 +335,4 @@ struct type_details_retriever < tree::UnrankedTree < SymbolType > > {
 
 extern template class tree::UnrankedTree < >;
 extern template class registration::DenormalizationRegisterImpl < const tree::UnrankedTree < > & >;
+extern template class registration::NormalizationRegisterImpl < tree::UnrankedTree < > >;
-- 
GitLab