From 6771c3c2d386bee3c1b26a062749e30d7ac4c51d Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Thu, 13 Apr 2017 14:59:09 +0200
Subject: [PATCH] optimize normalisation

---
 alib2data/src/alphabet/NonlinearVariableSymbol.h               | 3 +++
 alib2data/src/alphabet/RankedSymbol.h                          | 3 +++
 alib2data/src/automaton/FSM/CompactNFA.h                       | 3 +++
 alib2data/src/automaton/FSM/DFA.h                              | 3 +++
 alib2data/src/automaton/FSM/EpsilonNFA.h                       | 3 +++
 alib2data/src/automaton/FSM/ExtendedNFA.h                      | 3 +++
 alib2data/src/automaton/FSM/MultiInitialStateNFA.h             | 3 +++
 alib2data/src/automaton/FSM/NFA.h                              | 3 +++
 alib2data/src/automaton/PDA/DPDA.h                             | 3 +++
 alib2data/src/automaton/PDA/InputDrivenDPDA.h                  | 3 +++
 alib2data/src/automaton/PDA/InputDrivenNPDA.h                  | 3 +++
 alib2data/src/automaton/PDA/NPDA.h                             | 3 +++
 alib2data/src/automaton/PDA/NPDTA.h                            | 3 +++
 alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h  | 3 +++
 alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h  | 3 +++
 alib2data/src/automaton/PDA/SinglePopDPDA.h                    | 3 +++
 alib2data/src/automaton/PDA/SinglePopNPDA.h                    | 3 +++
 alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h              | 3 +++
 alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h              | 3 +++
 alib2data/src/automaton/TA/DFTA.h                              | 3 +++
 alib2data/src/automaton/TA/NFTA.h                              | 3 +++
 alib2data/src/automaton/TM/OneTapeDTM.h                        | 3 +++
 alib2data/src/grammar/ContextFree/CFG.h                        | 3 +++
 alib2data/src/grammar/ContextFree/CNF.h                        | 3 +++
 alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h             | 3 +++
 alib2data/src/grammar/ContextFree/GNF.h                        | 3 +++
 alib2data/src/grammar/ContextFree/LG.h                         | 3 +++
 alib2data/src/grammar/ContextSensitive/CSG.h                   | 3 +++
 alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h | 3 +++
 alib2data/src/grammar/Regular/LeftLG.h                         | 3 +++
 alib2data/src/grammar/Regular/LeftRG.h                         | 3 +++
 alib2data/src/grammar/Regular/RightLG.h                        | 3 +++
 alib2data/src/grammar/Regular/RightRG.h                        | 3 +++
 .../Unrestricted/ContextPreservingUnrestrictedGrammar.h        | 3 +++
 alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h       | 3 +++
 .../src/indexes/arbology/CompressedBitParallelTreeIndex.h      | 3 +++
 alib2data/src/indexes/arbology/FullAndLinearIndex.h            | 3 +++
 alib2data/src/indexes/stringology/BitParallelIndex.h           | 3 +++
 alib2data/src/indexes/stringology/CompressedBitParallelIndex.h | 3 +++
 alib2data/src/indexes/stringology/PositionHeap.h               | 3 +++
 alib2data/src/indexes/stringology/SuffixArray.h                | 3 +++
 alib2data/src/indexes/stringology/SuffixTrie.h                 | 3 +++
 alib2data/src/regexp/formal/FormalRegExp.h                     | 3 +++
 alib2data/src/regexp/unbounded/UnboundedRegExp.h               | 3 +++
 alib2data/src/rte/formal/FormalRTE.h                           | 3 +++
 alib2data/src/string/CyclicString.h                            | 3 +++
 alib2data/src/string/Epsilon.h                                 | 3 +++
 alib2data/src/string/LinearString.h                            | 3 +++
 alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h    | 3 +++
 alib2data/src/tree/ranked/PrefixRankedBarPattern.h             | 3 +++
 alib2data/src/tree/ranked/PrefixRankedBarTree.h                | 3 +++
 alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h       | 3 +++
 alib2data/src/tree/ranked/PrefixRankedPattern.h                | 3 +++
 alib2data/src/tree/ranked/PrefixRankedTree.h                   | 3 +++
 alib2data/src/tree/ranked/RankedNonlinearPattern.h             | 3 +++
 alib2data/src/tree/ranked/RankedPattern.h                      | 3 +++
 alib2data/src/tree/ranked/RankedTree.h                         | 3 +++
 alib2data/src/tree/unranked/PrefixBarTree.h                    | 3 +++
 alib2data/src/tree/unranked/UnrankedNonlinearPattern.h         | 3 +++
 alib2data/src/tree/unranked/UnrankedPattern.h                  | 3 +++
 alib2data/src/tree/unranked/UnrankedTree.h                     | 3 +++
 61 files changed, 183 insertions(+)

diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.h b/alib2data/src/alphabet/NonlinearVariableSymbol.h
index 2357cdaf69..1014187840 100644
--- a/alib2data/src/alphabet/NonlinearVariableSymbol.h
+++ b/alib2data/src/alphabet/NonlinearVariableSymbol.h
@@ -75,6 +75,9 @@ public:
 	virtual SymbolBase * inc ( ) &&;
 
 	virtual SymbolBase * normalize ( ) && {
+		if ( typeid ( NonlinearVariableSymbol < > ) == typeid ( NonlinearVariableSymbol < SymbolType > ) )
+			return this;
+
 		return new NonlinearVariableSymbol < > ( SymbolNormalize::normalizeSymbol ( std::move ( this->getSymbol ( ) ) ) );
 	}
 };
diff --git a/alib2data/src/alphabet/RankedSymbol.h b/alib2data/src/alphabet/RankedSymbol.h
index c2ef21ba30..8adaf52eb3 100644
--- a/alib2data/src/alphabet/RankedSymbol.h
+++ b/alib2data/src/alphabet/RankedSymbol.h
@@ -71,6 +71,9 @@ public:
 	}
 
 	virtual SymbolBase * normalize ( ) && {
+		if ( typeid ( RankedSymbol < > ) == typeid ( RankedSymbol < SymbolType, RankType > ) )
+			return this;
+
 		return new RankedSymbol < > ( normalizeRaw ( std::move ( *this ) ) );
 	}
 };
diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h
index 2f5d2f43fa..96a07c0b4f 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.h
+++ b/alib2data/src/automaton/FSM/CompactNFA.h
@@ -184,6 +184,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( CompactNFA < > ) == typeid ( CompactNFA < SymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultStateType > states = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < States > ( ).get ( ) ) );
 		DefaultStateType initialState = AutomatonNormalize::normalizeState ( std::move ( this->template accessElement < InitialState > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/FSM/DFA.h b/alib2data/src/automaton/FSM/DFA.h
index dd6e719c09..5156aaa8e0 100644
--- a/alib2data/src/automaton/FSM/DFA.h
+++ b/alib2data/src/automaton/FSM/DFA.h
@@ -175,6 +175,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( DFA < > ) == typeid ( DFA < SymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultStateType > states = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < States > ( ).get ( ) ) );
 		DefaultStateType initialState = AutomatonNormalize::normalizeState ( std::move ( this->template accessElement < InitialState > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.h b/alib2data/src/automaton/FSM/EpsilonNFA.h
index 0b34800711..7d4f210ab7 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.h
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.h
@@ -277,6 +277,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( EpsilonNFA < > ) == typeid ( EpsilonNFA < SymbolType, EpsilonType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultStateType > states = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < States > ( ).get ( ) ) );
 		DefaultStateType initialState = AutomatonNormalize::normalizeState ( std::move ( this->template accessElement < InitialState > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.h b/alib2data/src/automaton/FSM/ExtendedNFA.h
index 8cf9cfc966..ad51588e94 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.h
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.h
@@ -188,6 +188,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( ExtendedNFA < > ) == typeid ( ExtendedNFA < SymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultStateType > states = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < States > ( ).get ( ) ) );
 		DefaultStateType initialState = AutomatonNormalize::normalizeState ( std::move ( this->template accessElement < InitialState > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
index d7b04e49c9..ba75d0c412 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
@@ -202,6 +202,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( MultiInitialStateNFA < > ) == typeid ( MultiInitialStateNFA < SymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultStateType > states = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < States > ( ).get ( ) ) );
 		std::set < DefaultStateType > initialStates = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < InitialStates > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/FSM/NFA.h b/alib2data/src/automaton/FSM/NFA.h
index e2eabec3a1..cbf2077c1c 100644
--- a/alib2data/src/automaton/FSM/NFA.h
+++ b/alib2data/src/automaton/FSM/NFA.h
@@ -194,6 +194,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( NFA < > ) == typeid ( NFA < SymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultStateType > states = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < States > ( ).get ( ) ) );
 		DefaultStateType initialState = AutomatonNormalize::normalizeState ( std::move ( this->template accessElement < InitialState > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/DPDA.h b/alib2data/src/automaton/PDA/DPDA.h
index a50a8960d1..ab99f5dab6 100644
--- a/alib2data/src/automaton/PDA/DPDA.h
+++ b/alib2data/src/automaton/PDA/DPDA.h
@@ -209,6 +209,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( DPDA < > ) == typeid ( DPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.h b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
index b12dc84995..979e7ad6f3 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
@@ -213,6 +213,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( InputDrivenDPDA < > ) == typeid ( InputDrivenDPDA < InputSymbolType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.h b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
index c9f8ccb935..f916b2c964 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
@@ -222,6 +222,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( InputDrivenNPDA < > ) == typeid ( InputDrivenNPDA < InputSymbolType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/NPDA.h b/alib2data/src/automaton/PDA/NPDA.h
index 26515eb58c..9a6dad36d6 100644
--- a/alib2data/src/automaton/PDA/NPDA.h
+++ b/alib2data/src/automaton/PDA/NPDA.h
@@ -207,6 +207,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( NPDA < > ) == typeid ( NPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/NPDTA.h b/alib2data/src/automaton/PDA/NPDTA.h
index c0b8624383..e84338d434 100644
--- a/alib2data/src/automaton/PDA/NPDTA.h
+++ b/alib2data/src/automaton/PDA/NPDTA.h
@@ -231,6 +231,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( NPDTA < > ) == typeid ( NPDTA < InputSymbolType, OutputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > outputAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < OutputAlphabet > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
index 9baee2c97f..b7e521310a 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
@@ -235,6 +235,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( RealTimeHeightDeterministicDPDA < > ) == typeid ( RealTimeHeightDeterministicDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType bottomSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < BottomOfTheStackSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
index 06159756d1..0718f3ea9a 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
@@ -276,6 +276,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( RealTimeHeightDeterministicNPDA < > ) == typeid ( RealTimeHeightDeterministicNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType bottomSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < BottomOfTheStackSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.h b/alib2data/src/automaton/PDA/SinglePopDPDA.h
index 58b7ea44f5..0a6d722ae1 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.h
@@ -200,6 +200,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( SinglePopDPDA < > ) == typeid ( SinglePopDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType bottomSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.h b/alib2data/src/automaton/PDA/SinglePopNPDA.h
index 6de608b29e..f134968944 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.h
@@ -207,6 +207,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( SinglePopNPDA < > ) == typeid ( SinglePopNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < PushdownStoreAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType bottomSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
index 10214d3f95..cd5e4aa8c1 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
@@ -268,6 +268,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( VisiblyPushdownDPDA < > ) == typeid ( VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > call_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < CallAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > return_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < ReturnAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > local_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < LocalAlphabet > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
index fc4f4ef46e..51002ae380 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
@@ -303,6 +303,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( VisiblyPushdownNPDA < > ) == typeid ( VisiblyPushdownNPDA < InputSymbolType, PushdownStoreSymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > call_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < CallAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > return_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < ReturnAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > local_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < LocalAlphabet > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/TA/DFTA.h b/alib2data/src/automaton/TA/DFTA.h
index cd7ca3f7b8..6efe2375b9 100644
--- a/alib2data/src/automaton/TA/DFTA.h
+++ b/alib2data/src/automaton/TA/DFTA.h
@@ -151,6 +151,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( DFTA < > ) == typeid ( DFTA < SymbolType, RankType, StateType > ) )
+			return this;
+
 		std::set < std::ranked_symbol < DefaultSymbolType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultStateType > states = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < States > ( ).get ( ) ) );
 		std::set < DefaultStateType > finalStates = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < FinalStates > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/TA/NFTA.h b/alib2data/src/automaton/TA/NFTA.h
index ae74bfb845..53129b5804 100644
--- a/alib2data/src/automaton/TA/NFTA.h
+++ b/alib2data/src/automaton/TA/NFTA.h
@@ -169,6 +169,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( NFTA < > ) == typeid ( NFTA < SymbolType, RankType, StateType > ) )
+			return this;
+
 		std::set < std::ranked_symbol < DefaultSymbolType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		std::set < DefaultStateType > states = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < States > ( ).get ( ) ) );
 		std::set < DefaultStateType > finalStates = AutomatonNormalize::normalizeStates ( std::move ( this->template accessComponent < FinalStates > ( ).get ( ) ) );
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.h b/alib2data/src/automaton/TM/OneTapeDTM.h
index 3ae785c6b7..dbd2d5b774 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.h
+++ b/alib2data/src/automaton/TM/OneTapeDTM.h
@@ -188,6 +188,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual AutomatonBase * normalize ( ) && {
+		if ( typeid ( OneTapeDTM < > ) == typeid ( OneTapeDTM < SymbolType, StateType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > tapeAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TapeAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < InputAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType blankSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < BlankSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h
index bd0df7736a..319df67569 100644
--- a/alib2data/src/grammar/ContextFree/CFG.h
+++ b/alib2data/src/grammar/ContextFree/CFG.h
@@ -122,6 +122,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( CFG < > ) == typeid ( CFG < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h
index 3fe253bb52..99dec2db97 100644
--- a/alib2data/src/grammar/ContextFree/CNF.h
+++ b/alib2data/src/grammar/ContextFree/CNF.h
@@ -129,6 +129,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( CNF < > ) == typeid ( CNF < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
index 5b57b76af0..7f48583bf1 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
@@ -124,6 +124,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( EpsilonFreeCFG < > ) == typeid ( EpsilonFreeCFG < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h
index 345b4fa699..a7d85cc85c 100644
--- a/alib2data/src/grammar/ContextFree/GNF.h
+++ b/alib2data/src/grammar/ContextFree/GNF.h
@@ -125,6 +125,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( GNF < > ) == typeid ( GNF < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h
index 75408d84b3..b45d22cc70 100644
--- a/alib2data/src/grammar/ContextFree/LG.h
+++ b/alib2data/src/grammar/ContextFree/LG.h
@@ -126,6 +126,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( LG < > ) == typeid ( LG < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.h b/alib2data/src/grammar/ContextSensitive/CSG.h
index c5bb81460d..60798f44cb 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.h
+++ b/alib2data/src/grammar/ContextSensitive/CSG.h
@@ -118,6 +118,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( CSG < > ) == typeid ( CSG < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
index d58ad2e126..c46365433f 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
@@ -118,6 +118,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( NonContractingGrammar < > ) == typeid ( NonContractingGrammar < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/Regular/LeftLG.h b/alib2data/src/grammar/Regular/LeftLG.h
index 46ed0d4836..accb91d52b 100644
--- a/alib2data/src/grammar/Regular/LeftLG.h
+++ b/alib2data/src/grammar/Regular/LeftLG.h
@@ -125,6 +125,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( LeftLG < > ) == typeid ( LeftLG < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/Regular/LeftRG.h b/alib2data/src/grammar/Regular/LeftRG.h
index 845122fde3..9808617bf7 100644
--- a/alib2data/src/grammar/Regular/LeftRG.h
+++ b/alib2data/src/grammar/Regular/LeftRG.h
@@ -206,6 +206,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( LeftRG < > ) == typeid ( LeftRG < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/Regular/RightLG.h b/alib2data/src/grammar/Regular/RightLG.h
index 9e64bbc2f1..0daa2873f5 100644
--- a/alib2data/src/grammar/Regular/RightLG.h
+++ b/alib2data/src/grammar/Regular/RightLG.h
@@ -125,6 +125,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( RightLG < > ) == typeid ( RightLG < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/Regular/RightRG.h b/alib2data/src/grammar/Regular/RightRG.h
index 876065f5f2..c7fbce6e9f 100644
--- a/alib2data/src/grammar/Regular/RightRG.h
+++ b/alib2data/src/grammar/Regular/RightRG.h
@@ -146,6 +146,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( RightRG < > ) == typeid ( RightRG < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
index 0474341fdc..deccf917d8 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
@@ -114,6 +114,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( ContextPreservingUnrestrictedGrammar < > ) == typeid ( ContextPreservingUnrestrictedGrammar < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
index b1b35c1c8e..8ec51e336f 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
@@ -114,6 +114,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual GrammarBase * normalize ( ) && {
+		if ( typeid ( UnrestrictedGrammar < > ) == typeid ( UnrestrictedGrammar < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonterminalAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < TerminalAlphabet > ( ).get ( ) ) );
 		DefaultSymbolType initialSymbol = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < InitialSymbol > ( ).get ( ) ) );
diff --git a/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.h b/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.h
index 214f5aa312..2ada29763e 100644
--- a/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.h
+++ b/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.h
@@ -120,6 +120,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual ObjectBase * normalize ( ) && {
+		if ( typeid ( CompressedBitParallelTreeIndex < > ) == typeid ( CompressedBitParallelTreeIndex < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::map < DefaultSymbolType, common::SparseBoolVector > vectors;
 		for ( std::pair < SymbolType, common::SparseBoolVector > && vector : std::make_moveable_map ( m_vectors ) )
diff --git a/alib2data/src/indexes/arbology/FullAndLinearIndex.h b/alib2data/src/indexes/arbology/FullAndLinearIndex.h
index 1f27a248a0..ffb7fdd283 100644
--- a/alib2data/src/indexes/arbology/FullAndLinearIndex.h
+++ b/alib2data/src/indexes/arbology/FullAndLinearIndex.h
@@ -115,6 +115,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual ObjectBase * normalize ( ) && {
+		if ( typeid ( FullAndLinearIndex < > ) == typeid ( FullAndLinearIndex < SymbolType > ) )
+			return this;
+
 		indexes::stringology::PositionHeap < DefaultSymbolType > stringIndex = std::move ( m_StringIndex ).normalizeRaw ( );
 
 		return new FullAndLinearIndex < > ( std::move ( stringIndex ), std::move ( m_JumpTable ) );
diff --git a/alib2data/src/indexes/stringology/BitParallelIndex.h b/alib2data/src/indexes/stringology/BitParallelIndex.h
index 8b984af866..bb6e507456 100644
--- a/alib2data/src/indexes/stringology/BitParallelIndex.h
+++ b/alib2data/src/indexes/stringology/BitParallelIndex.h
@@ -113,6 +113,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual ObjectBase * normalize ( ) && {
+		if ( typeid ( BitParallelIndex < > ) == typeid ( BitParallelIndex < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::map < DefaultSymbolType, std::vector < bool > > vectors;
 		for ( std::pair < SymbolType, std::vector < bool > > && vector : std::make_moveable_map ( m_vectors ) )
diff --git a/alib2data/src/indexes/stringology/CompressedBitParallelIndex.h b/alib2data/src/indexes/stringology/CompressedBitParallelIndex.h
index f2e75d5ef5..53bd95dd13 100644
--- a/alib2data/src/indexes/stringology/CompressedBitParallelIndex.h
+++ b/alib2data/src/indexes/stringology/CompressedBitParallelIndex.h
@@ -113,6 +113,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual ObjectBase * normalize ( ) && {
+		if ( typeid ( CompressedBitParallelIndex < > ) == typeid ( CompressedBitParallelIndex < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::map < DefaultSymbolType, common::SparseBoolVector > vectors;
 		for ( std::pair < SymbolType, common::SparseBoolVector > && vector : std::make_moveable_map ( m_vectors ) )
diff --git a/alib2data/src/indexes/stringology/PositionHeap.h b/alib2data/src/indexes/stringology/PositionHeap.h
index 960824bb62..5e76e2b017 100644
--- a/alib2data/src/indexes/stringology/PositionHeap.h
+++ b/alib2data/src/indexes/stringology/PositionHeap.h
@@ -131,6 +131,9 @@ public:
 	}
 
 	virtual alib::ObjectBase * normalize ( ) && {
+		if ( typeid ( PositionHeap < > ) == typeid ( PositionHeap < SymbolType > ) )
+			return this;
+
 		return std::move ( * this ).normalizeRaw ( ).plunder ( );
 	}
 };
diff --git a/alib2data/src/indexes/stringology/SuffixArray.h b/alib2data/src/indexes/stringology/SuffixArray.h
index e9aefeadc5..1ba1070828 100644
--- a/alib2data/src/indexes/stringology/SuffixArray.h
+++ b/alib2data/src/indexes/stringology/SuffixArray.h
@@ -117,6 +117,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual ObjectBase * normalize ( ) && {
+		if ( typeid ( SuffixArray < > ) == typeid ( SuffixArray < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::vector < DefaultSymbolType > string = alphabet::SymbolNormalize::normalizeSymbols ( std::move ( m_string ) );
 
diff --git a/alib2data/src/indexes/stringology/SuffixTrie.h b/alib2data/src/indexes/stringology/SuffixTrie.h
index f7a730e386..cbca5fb2d9 100644
--- a/alib2data/src/indexes/stringology/SuffixTrie.h
+++ b/alib2data/src/indexes/stringology/SuffixTrie.h
@@ -123,6 +123,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual alib::ObjectBase * normalize ( ) && {
+		if ( typeid ( SuffixTrie < > ) == typeid ( SuffixTrie < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::trie < DefaultSymbolType, std::variant < void, unsigned > > trie = IndexesNormalize::normalizeTrie ( std::move ( m_trie ) );
 
diff --git a/alib2data/src/regexp/formal/FormalRegExp.h b/alib2data/src/regexp/formal/FormalRegExp.h
index 2358959b05..22652937fe 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.h
+++ b/alib2data/src/regexp/formal/FormalRegExp.h
@@ -106,6 +106,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RegExpBase * normalize ( ) && {
+		if ( typeid ( FormalRegExp < > ) == typeid ( FormalRegExp < SymbolType > ) )
+			return this;
+
 		return new FormalRegExp < > ( std::move ( m_regExp ).normalize ( ) );
 	}
 };
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.h b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
index c171ea25fe..9b7d006652 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
@@ -106,6 +106,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RegExpBase * normalize ( ) && {
+		if ( typeid ( UnboundedRegExp < > ) == typeid ( UnboundedRegExp < SymbolType > ) )
+			return this;
+
 		return new UnboundedRegExp < > ( std::move ( m_regExp ).normalize ( ) );
 	}
 };
diff --git a/alib2data/src/rte/formal/FormalRTE.h b/alib2data/src/rte/formal/FormalRTE.h
index fea59dae95..6425a592cf 100644
--- a/alib2data/src/rte/formal/FormalRTE.h
+++ b/alib2data/src/rte/formal/FormalRTE.h
@@ -143,6 +143,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RTEBase * normalize ( ) && {
+		if ( typeid ( FormalRTE < > ) == typeid ( FormalRTE < SymbolType > ) )
+			return this;
+
 		return new FormalRTE < > ( std::move ( m_rte ).normalize ( ) );
 	}
 };
diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h
index 5bdce66015..2cd9b23b4b 100644
--- a/alib2data/src/string/CyclicString.h
+++ b/alib2data/src/string/CyclicString.h
@@ -93,6 +93,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual StringBase * normalize ( ) && {
+		if ( typeid ( CyclicString < > ) == typeid ( CyclicString < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::vector < DefaultSymbolType > content = alphabet::SymbolNormalize::normalizeSymbols ( std::move ( m_Data ) );
 		return new CyclicString < > ( std::move ( alphabet ), std::move ( content ) );
diff --git a/alib2data/src/string/Epsilon.h b/alib2data/src/string/Epsilon.h
index f2ff86ebd9..77cfeef8d7 100644
--- a/alib2data/src/string/Epsilon.h
+++ b/alib2data/src/string/Epsilon.h
@@ -86,6 +86,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual StringBase * normalize ( ) && {
+		if ( typeid ( Epsilon < > ) == typeid ( Epsilon < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		return new Epsilon < > ( std::move ( alphabet ) );
 	}
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index d1ffbe02e9..31d190498b 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -113,6 +113,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual StringBase * normalize ( ) && {
+		if ( typeid ( LinearString < > ) == typeid ( LinearString < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::vector < DefaultSymbolType > content = alphabet::SymbolNormalize::normalizeSymbols ( std::move ( m_Data ) );
 		return new LinearString < > ( std::move ( alphabet ), std::move ( content ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
index 0551f639ec..63cc98e7a1 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
@@ -129,6 +129,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( PrefixRankedBarNonlinearPattern < > ) == typeid ( PrefixRankedBarNonlinearPattern < SymbolType, RankType > ) )
+			return this;
+
 		std::ranked_symbol < DefaultSymbolType, DefaultRankType > variablesBars = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( this->template accessElement < VariablesBarSymbol > ( ).get ( ) ) );
 		std::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( this->template accessElement < SubtreeWildcard > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > nonlinearAlphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < NonlinearAlphabet > ( ).get ( ) ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index 1e9d1cf828..ef9cdf1fb3 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -118,6 +118,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( PrefixRankedBarPattern < > ) == typeid ( PrefixRankedBarPattern < SymbolType, RankType > ) )
+			return this;
+
 		std::ranked_symbol < DefaultSymbolType, DefaultRankType > variablesBars = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( this->template accessElement < VariablesBarSymbol > ( ).get ( ) ) );
 		std::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( this->template accessElement < SubtreeWildcard > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > bars = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < BarSymbols > ( ).get ( ) ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 82dfd8ee06..a85b7bccb9 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -105,6 +105,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( PrefixRankedBarTree < > ) == typeid ( PrefixRankedBarTree < SymbolType, RankType > ) )
+			return this;
+
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > bars = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < BarSymbols > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::vector < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > content = alphabet::SymbolNormalize::normalizeRankedSymbols ( std::move ( m_Data ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
index 5f5d1fc9d1..d6a08ae232 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
@@ -113,6 +113,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( PrefixRankedNonlinearPattern < > ) == typeid ( PrefixRankedNonlinearPattern < SymbolType, RankType > ) )
+			return this;
+
 		std::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( this->template accessElement < SubtreeWildcard > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > nonlinearAlphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < NonlinearAlphabet > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h
index ec5681c0ca..57d3f06fb4 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h
@@ -104,6 +104,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( PrefixRankedPattern < > ) == typeid ( PrefixRankedPattern < SymbolType, RankType > ) )
+			return this;
+
 		std::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( this->template accessElement < SubtreeWildcard > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::vector < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > content = alphabet::SymbolNormalize::normalizeRankedSymbols ( std::move ( m_Data ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h
index 4b45896935..fb766abb05 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.h
@@ -96,6 +96,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( PrefixRankedTree < > ) == typeid ( PrefixRankedTree < SymbolType, RankType > ) )
+			return this;
+
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::vector < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > content = alphabet::SymbolNormalize::normalizeRankedSymbols ( std::move ( m_Data ) );
 
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
index def29fc920..6204c48989 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
@@ -121,6 +121,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( RankedNonlinearPattern < > ) == typeid ( RankedNonlinearPattern < SymbolType, RankType > ) )
+			return this;
+
 		std::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( this->template accessElement < SubtreeWildcard > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > nonlinearAlphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < NonlinearAlphabet > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h
index 1f3c9788b1..f2191f1e0e 100644
--- a/alib2data/src/tree/ranked/RankedPattern.h
+++ b/alib2data/src/tree/ranked/RankedPattern.h
@@ -115,6 +115,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( RankedPattern < > ) == typeid ( RankedPattern < SymbolType, RankType > ) )
+			return this;
+
 		std::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( this->template accessElement < SubtreeWildcard > ( ).get ( ) ) );
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::tree < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > content = TreeNormalize::normalizeRankedTree ( std::move ( m_content ) );
diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h
index d72fdbf9ce..dfe2035007 100644
--- a/alib2data/src/tree/ranked/RankedTree.h
+++ b/alib2data/src/tree/ranked/RankedTree.h
@@ -111,6 +111,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual RankedTreeBase * normalize ( ) && {
+		if ( typeid ( RankedTree < > ) == typeid ( RankedTree < SymbolType, RankType > ) )
+			return this;
+
 		std::set < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::tree < std::ranked_symbol < DefaultSymbolType, DefaultRankType > > content = TreeNormalize::normalizeRankedTree ( std::move ( m_content ) );
 
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.h b/alib2data/src/tree/unranked/PrefixBarTree.h
index 3c7b27078b..bb465edfd4 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.h
+++ b/alib2data/src/tree/unranked/PrefixBarTree.h
@@ -102,6 +102,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual UnrankedTreeBase * normalize ( ) && {
+		if ( typeid ( PrefixBarTree < > ) == typeid ( PrefixBarTree < SymbolType > ) )
+			return this;
+
 		DefaultSymbolType bar = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < BarSymbol > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::vector < DefaultSymbolType > content = alphabet::SymbolNormalize::normalizeSymbols ( std::move ( m_Data ) );
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
index ecbe5f2c0c..7cbb4d6a73 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
@@ -125,6 +125,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual UnrankedTreeBase * normalize ( ) && {
+		if ( typeid ( UnrankedNonlinearPattern < > ) == typeid ( UnrankedNonlinearPattern < SymbolType > ) )
+			return this;
+
 		DefaultSymbolType wildcard = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < SubtreeWildcard > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > nonlinearAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < NonlinearAlphabet > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h
index 97f754b23c..712d8ed194 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedPattern.h
@@ -113,6 +113,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual UnrankedTreeBase * normalize ( ) && {
+		if ( typeid ( UnrankedPattern < > ) == typeid ( UnrankedPattern < SymbolType > ) )
+			return this;
+
 		DefaultSymbolType wildcard = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( this->template accessElement < SubtreeWildcard > ( ).get ( ) ) );
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::tree < DefaultSymbolType > content = TreeNormalize::normalizeTree ( std::move ( m_content ) );
diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h
index 66973126a5..ef7a640e4a 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnrankedTree.h
@@ -108,6 +108,9 @@ public:
 	virtual alib::ObjectBase * inc ( ) &&;
 
 	virtual UnrankedTreeBase * normalize ( ) && {
+		if ( typeid ( UnrankedTree < > ) == typeid ( UnrankedTree < SymbolType > ) )
+			return this;
+
 		std::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( this->template accessComponent < GeneralAlphabet > ( ).get ( ) ) );
 		std::tree < DefaultSymbolType > content = TreeNormalize::normalizeTree ( std::move ( m_content ) );
 
-- 
GitLab