From 35ffd24fdde2d6fcb9394881b696d2f3684e7d9c Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 2 May 2018 16:05:23 +0200
Subject: [PATCH] redesign normalization

---
 .../src/abstraction/NormalizeAbstraction.hpp  |  7 ++-
 alib2abstraction/src/core/normalize.hpp       | 10 ++--
 .../src/factory/NormalizeFactory.hpp          | 48 +++++++++++++++++++
 .../NormalizationRegistration.hpp             |  2 +-
 .../src/registry/NormalizeRegistry.hpp        |  4 +-
 alib2common/src/container/ObjectsDeque.h      | 15 ++----
 alib2common/src/container/ObjectsList.h       | 15 ++----
 alib2common/src/container/ObjectsMap.h        | 14 ++----
 alib2common/src/container/ObjectsPair.h       | 24 ++--------
 alib2common/src/container/ObjectsSet.h        | 15 ++----
 alib2common/src/container/ObjectsTree.h       | 15 ++----
 alib2common/src/container/ObjectsTrie.h       | 17 ++-----
 alib2common/src/container/ObjectsVector.h     | 15 ++----
 .../test-src/container/ContainerTest.cpp      | 20 ++++++++
 alib2data/src/alphabet/BarSymbol.h            |  2 -
 alib2data/src/alphabet/BlankSymbol.h          |  2 -
 .../src/alphabet/BottomOfTheStackSymbol.h     |  2 -
 alib2data/src/alphabet/EndSymbol.h            |  2 -
 alib2data/src/alphabet/InitialSymbol.h        |  2 -
 alib2data/src/alphabet/LabeledSymbol.h        |  2 -
 .../src/alphabet/NonlinearVariableSymbol.h    |  4 +-
 alib2data/src/alphabet/RankedSymbol.h         | 13 +----
 alib2data/src/alphabet/StartSymbol.h          |  2 -
 .../src/alphabet/SubtreeWildcardSymbol.h      |  2 -
 alib2data/src/alphabet/UniqueSymbol.h         |  2 -
 alib2data/src/alphabet/VariablesBarSymbol.h   |  2 -
 alib2data/src/automaton/FSM/CompactNFA.h      |  7 +--
 alib2data/src/automaton/FSM/DFA.h             |  7 +--
 alib2data/src/automaton/FSM/EpsilonNFA.h      |  7 +--
 alib2data/src/automaton/FSM/ExtendedNFA.h     |  7 +--
 .../src/automaton/FSM/MultiInitialStateNFA.h  |  7 +--
 alib2data/src/automaton/FSM/NFA.h             |  7 +--
 alib2data/src/automaton/PDA/DPDA.h            |  7 +--
 alib2data/src/automaton/PDA/InputDrivenDPDA.h |  7 +--
 alib2data/src/automaton/PDA/InputDrivenNPDA.h |  7 +--
 alib2data/src/automaton/PDA/NPDA.h            |  7 +--
 alib2data/src/automaton/PDA/NPDTA.h           |  7 +--
 .../PDA/RealTimeHeightDeterministicDPDA.h     |  7 +--
 .../PDA/RealTimeHeightDeterministicNPDA.h     |  7 +--
 alib2data/src/automaton/PDA/SinglePopDPDA.h   |  7 +--
 alib2data/src/automaton/PDA/SinglePopNPDA.h   |  7 +--
 .../src/automaton/PDA/VisiblyPushdownDPDA.h   |  7 +--
 .../src/automaton/PDA/VisiblyPushdownNPDA.h   |  7 +--
 alib2data/src/automaton/TA/DFTA.h             |  7 +--
 alib2data/src/automaton/TA/NFTA.h             |  7 +--
 alib2data/src/automaton/TM/OneTapeDTM.h       |  7 +--
 alib2data/src/grammar/ContextFree/CFG.h       |  7 +--
 alib2data/src/grammar/ContextFree/CNF.h       |  7 +--
 .../src/grammar/ContextFree/EpsilonFreeCFG.h  |  7 +--
 alib2data/src/grammar/ContextFree/GNF.h       |  7 +--
 alib2data/src/grammar/ContextFree/LG.h        |  7 +--
 alib2data/src/grammar/ContextSensitive/CSG.h  |  7 +--
 .../ContextSensitive/NonContractingGrammar.h  |  7 +--
 alib2data/src/grammar/Regular/LeftLG.h        |  7 +--
 alib2data/src/grammar/Regular/LeftRG.h        |  7 +--
 alib2data/src/grammar/Regular/RightLG.h       |  7 +--
 alib2data/src/grammar/Regular/RightRG.h       |  7 +--
 .../ContextPreservingUnrestrictedGrammar.h    |  7 +--
 .../Unrestricted/UnrestrictedGrammar.h        |  7 +--
 .../arbology/CompressedBitParallelTreeIndex.h |  4 +-
 .../src/indexes/arbology/FullAndLinearIndex.h |  4 +-
 .../NonlinearCompressedBitParallelTreeIndex.h |  4 +-
 .../arbology/NonlinearFullAndLinearIndex.h    |  4 +-
 .../src/indexes/stringology/BNDMMatcher.h     | 11 +----
 .../indexes/stringology/BitParallelIndex.h    |  4 +-
 .../stringology/CompressedBitParallelIndex.h  |  4 +-
 .../stringology/FactorOracleAutomaton.h       |  4 +-
 .../src/indexes/stringology/PositionHeap.h    | 11 +----
 .../src/indexes/stringology/SuffixArray.h     |  7 +--
 .../src/indexes/stringology/SuffixAutomaton.h |  7 +--
 .../src/indexes/stringology/SuffixTrie.h      |  7 +--
 alib2data/src/label/FailStateLabel.h          |  2 -
 alib2data/src/label/FinalStateLabel.h         |  2 -
 alib2data/src/label/HexavigesimalLabel.h      |  2 -
 alib2data/src/label/InitialStateLabel.h       |  2 -
 alib2data/src/label/ObjectLabel.h             |  2 -
 alib2data/src/label/PrimitiveLabel.h          |  2 -
 alib2data/src/label/UniqueLabel.h             |  2 -
 alib2data/src/regexp/formal/FormalRegExp.h    |  7 +--
 .../src/regexp/unbounded/UnboundedRegExp.h    |  7 +--
 alib2data/src/rte/formal/FormalRTE.h          |  7 +--
 alib2data/src/string/CyclicString.h           |  7 +--
 alib2data/src/string/Epsilon.h                |  7 +--
 alib2data/src/string/LinearString.h           |  7 +--
 alib2data/src/tree/ranked/PostfixRankedTree.h |  7 +--
 .../ranked/PrefixRankedBarNonlinearPattern.h  |  7 +--
 .../src/tree/ranked/PrefixRankedBarPattern.h  |  7 +--
 .../src/tree/ranked/PrefixRankedBarTree.h     |  7 +--
 .../ranked/PrefixRankedNonlinearPattern.h     |  7 +--
 .../src/tree/ranked/PrefixRankedPattern.h     |  7 +--
 alib2data/src/tree/ranked/PrefixRankedTree.h  |  7 +--
 .../src/tree/ranked/RankedNonlinearPattern.h  |  7 +--
 alib2data/src/tree/ranked/RankedPattern.h     |  7 +--
 alib2data/src/tree/ranked/RankedTree.h        |  7 +--
 alib2data/src/tree/unranked/PrefixBarTree.h   |  7 +--
 .../tree/unranked/UnrankedNonlinearPattern.h  |  7 +--
 alib2data/src/tree/unranked/UnrankedPattern.h |  7 +--
 alib2data/src/tree/unranked/UnrankedTree.h    |  7 +--
 .../directed/AdjacencyListDirectedGraph.h     |  2 -
 .../directed/AdjacencyMatrixDirectedGraph.h   |  2 -
 .../undirected/AdjacencyListUndirectedGraph.h |  2 -
 .../AdjacencyMatrixUndirectedGraph.h          |  2 -
 .../CompactSuffixAutomatonTerminatingSymbol.h |  4 +-
 .../stringology/SuffixTrieTerminatingSymbol.h |  2 -
 .../string/LinearStringTerminatingSymbol.h    |  2 -
 105 files changed, 175 insertions(+), 555 deletions(-)
 create mode 100644 alib2abstraction/src/factory/NormalizeFactory.hpp

diff --git a/alib2abstraction/src/abstraction/NormalizeAbstraction.hpp b/alib2abstraction/src/abstraction/NormalizeAbstraction.hpp
index a007a0a43e..e81156b1d5 100644
--- a/alib2abstraction/src/abstraction/NormalizeAbstraction.hpp
+++ b/alib2abstraction/src/abstraction/NormalizeAbstraction.hpp
@@ -10,7 +10,7 @@
 
 #include <abstraction/UnaryOperationAbstraction.hpp>
 
-#include <core/normalize.hpp>
+#include <factory/NormalizeFactory.hpp>
 
 namespace abstraction {
 
@@ -24,7 +24,10 @@ public:
 		if ( this->cached ( ) )
 			return true;
 
-		this->m_data = core::normalize < ParamType >::eval ( std::get < 0 > ( this->m_params )->getValue ( std::get < 0 > ( this->m_moves ) ) );
+		ParamType && param = std::get < 0 > ( this->m_params )->getValue ( std::get < 0 > ( this->m_moves ) );
+		ReturnType res = factory::NormalizeFactory::normalize ( std::move ( param ) );
+
+		this->m_data = std::move ( res );
 
 		return true;
 	}
diff --git a/alib2abstraction/src/core/normalize.hpp b/alib2abstraction/src/core/normalize.hpp
index 29b83061cb..3e56351d05 100644
--- a/alib2abstraction/src/core/normalize.hpp
+++ b/alib2abstraction/src/core/normalize.hpp
@@ -10,15 +10,11 @@
 
 namespace core {
 
-template < typename T, typename Enable = void >
+template < typename T >
 struct normalize { };
 
-template < typename Type >
-struct normalize < Type, typename std::enable_if < std::is_same < Type, typename Type::normalized_type >::value >::type > {
-	static Type && eval ( Type && value ) {
-		return std::move ( value );
-	}
-};
+template < class ReturnType >
+using normalizationResult = typename std::decay < typename std::result_of < decltype ( & core::normalize < ReturnType >::eval ) ( ReturnType && ) >::type >::type;
 
 } /* namespace core */
 
diff --git a/alib2abstraction/src/factory/NormalizeFactory.hpp b/alib2abstraction/src/factory/NormalizeFactory.hpp
new file mode 100644
index 0000000000..f4be5e06b3
--- /dev/null
+++ b/alib2abstraction/src/factory/NormalizeFactory.hpp
@@ -0,0 +1,48 @@
+/*
+ * NormalizeFactory.hpp
+ *
+ *  Created on: Jan 1, 2014
+ *      Author: Jan Travnicek
+ */
+
+#ifndef NORMALIZE_FACTORY_HPP
+#define NORMALIZE_FACTORY_HPP
+
+#include <alib/type_traits>
+#include <utility>
+
+#include <core/normalize.hpp>
+
+namespace factory {
+
+class NormalizeFactory {
+public:
+	template < class SourceType >
+	class normalizer {
+		SourceType && m_source;
+
+	public:
+		normalizer ( SourceType && source ) : m_source ( std::move ( source ) ) {
+		}
+
+		template < class TargetType, typename std::enable_if < std::is_same < TargetType, SourceType >::value >::type * = nullptr >
+		operator TargetType ( ) {
+			return TargetType ( std::move ( m_source ) );
+		}
+
+		template < class TargetType, typename std::enable_if < ! std::is_same < TargetType, SourceType >::value >::type * = nullptr >
+		operator TargetType ( ) {
+			return core::normalize < SourceType >::eval ( std::move ( m_source ) );
+		}
+	};
+
+	template < class SourceType >
+	static normalizer < SourceType > normalize ( SourceType && source ) {
+		return normalizer < SourceType > ( std::move ( source ) );
+	}
+
+};
+
+} /* namespace factory */
+
+#endif /* NORMALIZE_FACTORY_HPP */
diff --git a/alib2abstraction/src/registration/NormalizationRegistration.hpp b/alib2abstraction/src/registration/NormalizationRegistration.hpp
index c15c027716..78a4144222 100644
--- a/alib2abstraction/src/registration/NormalizationRegistration.hpp
+++ b/alib2abstraction/src/registration/NormalizationRegistration.hpp
@@ -17,7 +17,7 @@ public:
 };
 
 template < class ReturnType >
-class NormalizationRegister < ReturnType, typename std::enable_if < ! std::is_same < ReturnType, typename ReturnType::normalized_type >::value >::type > {
+class NormalizationRegister < ReturnType, typename std::enable_if < ! std::is_same < ReturnType, core::normalizationResult < ReturnType > >::value >::type > {
 public:
 	NormalizationRegister ( ) {
 		abstraction::NormalizeRegistry::registerNormalize < ReturnType > ( );
diff --git a/alib2abstraction/src/registry/NormalizeRegistry.hpp b/alib2abstraction/src/registry/NormalizeRegistry.hpp
index bd545349b5..33e2e963db 100644
--- a/alib2abstraction/src/registry/NormalizeRegistry.hpp
+++ b/alib2abstraction/src/registry/NormalizeRegistry.hpp
@@ -14,6 +14,8 @@
 
 #include <abstraction/OperationAbstraction.hpp>
 
+#include <core/normalize.hpp>
+
 namespace abstraction {
 
 class NormalizeRegistry {
@@ -68,7 +70,7 @@ namespace abstraction {
 
 template < class Param >
 std::shared_ptr < abstraction::OperationAbstraction > NormalizeRegistry::EntryImpl < Param >::getAbstraction ( ) const {
-	return std::make_shared < NormalizeAbstraction < typename Param::normalized_type, Param > > ( );
+	return std::make_shared < NormalizeAbstraction < core::normalizationResult < Param >, Param > > ( );
 }
 
 } /* namespace abstraction */
diff --git a/alib2common/src/container/ObjectsDeque.h b/alib2common/src/container/ObjectsDeque.h
index fa84ce3d97..aa421c50ec 100644
--- a/alib2common/src/container/ObjectsDeque.h
+++ b/alib2common/src/container/ObjectsDeque.h
@@ -16,7 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <object/UniqueObject.h>
-#include <object/AnyObject.h>
+#include <object/ObjectFactory.h>
 
 #include <core/normalize.hpp>
 
@@ -49,8 +49,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef ObjectsDeque < > normalized_type;
 };
 
 template < class ElementType >
@@ -99,27 +97,20 @@ object::ObjectBase* ObjectsDeque < ElementType >::inc() && {
 
 namespace core {
 
-template < >
-struct normalize < ext::deque < object::Object > > {
-	static ext::deque < object::Object > && eval ( ext::deque < object::Object > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class ElementType >
 struct normalize < ext::deque < ElementType > > {
 	static ext::deque < object::Object > eval ( ext::deque < ElementType > && source ) {
 		ext::deque < object::Object > res;
 
 		for ( ElementType & element : source )
-			res.push_back ( object::Object ( object::AnyObject < ElementType > ( std::move ( element ) ) ) );
+			res.push_back ( object::ObjectFactory::make ( std::move ( element ) ) );
 
 		return res;
 	}
 };
 
 template < class ElementType >
-struct normalize < container::ObjectsDeque < ElementType >, typename std::enable_if < ! std::is_same < container::ObjectsDeque < ElementType >, container::ObjectsDeque < > >::value >::type > {
+struct normalize < container::ObjectsDeque < ElementType > > {
 	static container::ObjectsDeque < > eval ( container::ObjectsDeque < ElementType > && value ) {
 		return container::ObjectsDeque < > ( normalize < ext::deque < ElementType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2common/src/container/ObjectsList.h b/alib2common/src/container/ObjectsList.h
index e01f4be008..693dbc2a8e 100644
--- a/alib2common/src/container/ObjectsList.h
+++ b/alib2common/src/container/ObjectsList.h
@@ -16,7 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <object/UniqueObject.h>
-#include <object/AnyObject.h>
+#include <object/ObjectFactory.h>
 
 #include <core/normalize.hpp>
 
@@ -49,8 +49,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef ObjectsList < > normalized_type;
 };
 
 template < class ElementType >
@@ -99,27 +97,20 @@ object::ObjectBase* ObjectsList < ElementType >::inc() && {
 
 namespace core {
 
-template < >
-struct normalize < ext::list < object::Object > > {
-	static ext::list < object::Object > && eval ( ext::list < object::Object > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class ElementType >
 struct normalize < ext::list < ElementType > > {
 	static ext::list < object::Object > eval ( ext::list < ElementType > && source ) {
 		ext::list < object::Object > res;
 
 		for ( ElementType & element : source )
-			res.push_back ( object::Object ( object::AnyObject < ElementType > ( std::move ( element ) ) ) );
+			res.push_back ( object::ObjectFactory::make ( std::move ( element ) ) );
 
 		return res;
 	}
 };
 
 template < class ElementType >
-struct normalize < container::ObjectsList < ElementType >, typename std::enable_if < ! std::is_same < container::ObjectsList < ElementType >, container::ObjectsList < > >::value >::type > {
+struct normalize < container::ObjectsList < ElementType > > {
 	static container::ObjectsList < > eval ( container::ObjectsList < ElementType > && value ) {
 		return container::ObjectsList < > ( normalize < ext::list < ElementType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2common/src/container/ObjectsMap.h b/alib2common/src/container/ObjectsMap.h
index dbb006dfab..5f07f1c730 100644
--- a/alib2common/src/container/ObjectsMap.h
+++ b/alib2common/src/container/ObjectsMap.h
@@ -16,9 +16,10 @@
 #include "ContainerFeatures.h"
 
 #include <object/UniqueObject.h>
-#include <object/AnyObject.h>
+#include <object/ObjectFactory.h>
 
 #include <core/normalize.hpp>
+#include <container/ObjectsPair.h>
 
 namespace container {
 
@@ -49,8 +50,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef ObjectsMap < > normalized_type;
 };
 
 template < class KeyType, class ValueType >
@@ -100,13 +99,6 @@ object::ObjectBase* ObjectsMap < KeyType, ValueType >::inc() && {
 
 namespace core {
 
-template < >
-struct normalize < ext::map < object::Object, object::Object > > {
-	static ext::map < object::Object, object::Object > && eval ( ext::map < object::Object, object::Object > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class KeyType, class ValueType >
 struct normalize < ext::map < KeyType, ValueType > > {
 	static ext::map < object::Object, object::Object > eval ( ext::map < KeyType, ValueType > && source ) {
@@ -120,7 +112,7 @@ struct normalize < ext::map < KeyType, ValueType > > {
 };
 
 template < class KeyType, class ValueType >
-struct normalize < container::ObjectsMap < KeyType, ValueType >, typename std::enable_if < ! std::is_same < container::ObjectsMap < KeyType, ValueType >, container::ObjectsMap < > >::value >::type > {
+struct normalize < container::ObjectsMap < KeyType, ValueType > > {
 	static container::ObjectsMap < > eval ( container::ObjectsMap < KeyType, ValueType > && value ) {
 		return container::ObjectsMap < > ( normalize < ext::map < KeyType, ValueType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2common/src/container/ObjectsPair.h b/alib2common/src/container/ObjectsPair.h
index a33f7b3976..138bd26edb 100644
--- a/alib2common/src/container/ObjectsPair.h
+++ b/alib2common/src/container/ObjectsPair.h
@@ -16,7 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <object/UniqueObject.h>
-#include <object/AnyObject.h>
+#include <object/ObjectFactory.h>
 
 #include <core/normalize.hpp>
 
@@ -49,8 +49,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef ObjectsPair < > normalized_type;
 };
 
 template < class FirstType, class SecondType >
@@ -100,36 +98,22 @@ object::ObjectBase* ObjectsPair < FirstType, SecondType >::inc() && {
 
 namespace core {
 
-template < >
-struct normalize < std::pair < object::Object, object::Object > > {
-	static std::pair < object::Object, object::Object > && eval ( std::pair < object::Object, object::Object > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class FirstType, class SecondType >
 struct normalize < std::pair < FirstType, SecondType > > {
 	static std::pair < object::Object, object::Object > eval ( std::pair < FirstType, SecondType > && source ) {
-		return std::make_pair ( object::Object ( object::AnyObject < FirstType > ( std::move ( source.first ) ) ), object::Object ( object::AnyObject < SecondType > ( std::move ( source.second ) ) ) );
-	}
-};
-
-template < >
-struct normalize < ext::pair < object::Object, object::Object > > {
-	static ext::pair < object::Object, object::Object > && eval ( ext::pair < object::Object, object::Object > && source ) {
-		return std::move ( source );
+		return std::make_pair ( object::ObjectFactory::make ( std::move ( source.first ) ), object::ObjectFactory::make ( std::move ( source.second ) ) );
 	}
 };
 
 template < class FirstType, class SecondType >
 struct normalize < ext::pair < FirstType, SecondType > > {
 	static ext::pair < object::Object, object::Object > eval ( ext::pair < FirstType, SecondType > && source ) {
-		return ext::make_pair ( object::Object ( object::AnyObject < FirstType > ( std::move ( source.first ) ) ), object::Object ( object::AnyObject < SecondType > ( std::move ( source.second ) ) ) );
+		return ext::make_pair ( object::ObjectFactory::make ( std::move ( source.first ) ), object::ObjectFactory::make ( std::move ( source.second ) ) );
 	}
 };
 
 template < class FirstType, class SecondType >
-struct normalize < container::ObjectsPair < FirstType, SecondType >, typename std::enable_if < ! std::is_same < container::ObjectsPair < FirstType, SecondType >, container::ObjectsPair < > >::value >::type > {
+struct normalize < container::ObjectsPair < FirstType, SecondType > > {
 	static container::ObjectsPair < > eval ( container::ObjectsPair < FirstType, SecondType > && value ) {
 		return container::ObjectsPair < > ( normalize < ext::pair < FirstType, SecondType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2common/src/container/ObjectsSet.h b/alib2common/src/container/ObjectsSet.h
index b885f931d9..0bddd728dd 100644
--- a/alib2common/src/container/ObjectsSet.h
+++ b/alib2common/src/container/ObjectsSet.h
@@ -16,7 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <object/UniqueObject.h>
-#include <object/AnyObject.h>
+#include <object/ObjectFactory.h>
 
 #include <core/normalize.hpp>
 
@@ -49,8 +49,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef ObjectsSet < > normalized_type;
 };
 
 template < class ElementType >
@@ -100,27 +98,20 @@ object::ObjectBase* ObjectsSet < ElementType >::inc() && {
 
 namespace core {
 
-template < >
-struct normalize < ext::set < object::Object > > {
-	static ext::set < object::Object > && eval ( ext::set < object::Object > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class ElementType >
 struct normalize < ext::set < ElementType > > {
 	static ext::set < object::Object > eval ( ext::set < ElementType > && source ) {
 		ext::set < object::Object > res;
 
 		for ( ElementType && element : ext::make_moveable_set ( source ) )
-			res.insert ( object::Object ( object::AnyObject < ElementType > ( std::move ( element ) ) ) );
+			res.insert ( object::ObjectFactory::make ( std::move ( element ) ) );
 
 		return res;
 	}
 };
 
 template < class ElementType >
-struct normalize < container::ObjectsSet < ElementType >, typename std::enable_if < ! std::is_same < container::ObjectsSet < ElementType >, container::ObjectsSet < > >::value >::type > {
+struct normalize < container::ObjectsSet < ElementType > > {
 	static container::ObjectsSet < > eval ( container::ObjectsSet < ElementType > && value ) {
 		return container::ObjectsSet < > ( normalize < ext::set < ElementType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2common/src/container/ObjectsTree.h b/alib2common/src/container/ObjectsTree.h
index a5d3fb3ffa..09a2b7d2af 100644
--- a/alib2common/src/container/ObjectsTree.h
+++ b/alib2common/src/container/ObjectsTree.h
@@ -16,7 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <object/UniqueObject.h>
-#include <object/AnyObject.h>
+#include <object/ObjectFactory.h>
 
 #include <core/normalize.hpp>
 
@@ -48,8 +48,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef ObjectsTree < > normalized_type;
 };
 
 template < class ElementType >
@@ -94,13 +92,6 @@ object::ObjectBase* ObjectsTree < ElementType >::inc() && {
 
 namespace core {
 
-template < >
-struct normalize < ext::tree < object::Object > > {
-	static ext::tree < object::Object > && eval ( ext::tree < object::Object > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class ElementType >
 struct normalize < ext::tree < ElementType > > {
 	static ext::tree < object::Object > eval ( ext::tree < ElementType > && source ) {
@@ -110,12 +101,12 @@ struct normalize < ext::tree < ElementType > > {
 			children.push_back ( normalize < ext::tree < ElementType > >::eval ( std::move ( child ) ) );
 		}
 
-		return ext::tree < object::Object > ( object::Object ( object::AnyObject < ElementType > ( std::move ( source.getData ( ) ) ) ), std::move ( children ) );
+		return ext::tree < object::Object > ( object::ObjectFactory::make ( std::move ( source.getData ( ) ) ), std::move ( children ) );
 	}
 };
 
 template < class ElementType >
-struct normalize < container::ObjectsTree < ElementType >, typename std::enable_if < ! std::is_same < container::ObjectsTree < ElementType >, container::ObjectsTree < > >::value >::type > {
+struct normalize < container::ObjectsTree < ElementType > > {
 	static container::ObjectsTree < > eval ( container::ObjectsTree < ElementType > && value ) {
 		return container::ObjectsTree < > ( normalize < ext::tree < ElementType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2common/src/container/ObjectsTrie.h b/alib2common/src/container/ObjectsTrie.h
index 0242a19212..6c0c81d57e 100644
--- a/alib2common/src/container/ObjectsTrie.h
+++ b/alib2common/src/container/ObjectsTrie.h
@@ -16,7 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <object/UniqueObject.h>
-#include <object/AnyObject.h>
+#include <object/ObjectFactory.h>
 
 #include <core/normalize.hpp>
 
@@ -48,8 +48,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef ObjectsTrie < > normalized_type;
 };
 
 template < class KeyType, class ValueType >
@@ -94,28 +92,21 @@ object::ObjectBase* ObjectsTrie < KeyType, ValueType >::inc() && {
 
 namespace core {
 
-template < >
-struct normalize < ext::trie < object::Object, object::Object > > {
-	static ext::trie < object::Object, object::Object > && eval ( ext::trie < object::Object, object::Object > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class KeyType, class ValueType >
 struct normalize < ext::trie < KeyType, ValueType > > {
 	static ext::trie < object::Object, object::Object > eval ( ext::trie < KeyType, ValueType > && source ) {
 		ext::map < object::Object, ext::trie < object::Object, object::Object > > children;
 
 		for ( std::pair < KeyType, ext::trie < KeyType, ValueType > > && child : ext::make_moveable_map ( source.getChildren ( ) ) ) {
-			children.insert ( std::make_pair ( object::Object ( object::AnyObject < KeyType > ( std::move ( child.first ) ) ), normalizeRaw ( std::move ( child.second ) ) ) );
+			children.insert ( std::make_pair ( object::ObjectFactory::make ( std::move ( child.first ) ), normalize < ext::trie < KeyType, ValueType > >::eval ( std::move ( child.second ) ) ) );
 		}
 
-		return ext::trie < object::Object, object::Object > ( object::Object ( object::AnyObject < ValueType > ( std::move ( source.getData ( ) ) ) ), std::move ( children ) );
+		return ext::trie < object::Object, object::Object > ( object::ObjectFactory::make ( std::move ( source.getData ( ) ) ), std::move ( children ) );
 	}
 };
 
 template < class KeyType, class ValueType >
-struct normalize < container::ObjectsTrie < KeyType, ValueType >, typename std::enable_if < ! std::is_same < container::ObjectsTrie < KeyType, ValueType >, container::ObjectsTrie < > >::value >::type > {
+struct normalize < container::ObjectsTrie < KeyType, ValueType > > {
 	static container::ObjectsTrie < > eval ( container::ObjectsTrie < KeyType, ValueType > && value ) {
 		return container::ObjectsTrie < > ( normalize < ext::trie < KeyType, ValueType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2common/src/container/ObjectsVector.h b/alib2common/src/container/ObjectsVector.h
index 2ca9f779d7..dc96857165 100644
--- a/alib2common/src/container/ObjectsVector.h
+++ b/alib2common/src/container/ObjectsVector.h
@@ -16,7 +16,7 @@
 #include "ContainerFeatures.h"
 
 #include <object/UniqueObject.h>
-#include <object/AnyObject.h>
+#include <object/ObjectFactory.h>
 
 #include <core/normalize.hpp>
 
@@ -49,8 +49,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef ObjectsVector < > normalized_type;
 };
 
 template < class ElementType >
@@ -99,27 +97,20 @@ object::ObjectBase* ObjectsVector < ElementType >::inc() && {
 
 namespace core {
 
-template < >
-struct normalize < ext::vector < object::Object > > {
-	static ext::vector < object::Object > && eval ( ext::vector < object::Object > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class ElementType >
 struct normalize < ext::vector < ElementType > > {
 	static ext::vector < object::Object > eval ( ext::vector < ElementType > && source ) {
 		ext::vector < object::Object > res;
 
 		for ( ElementType & element : source )
-			res.push_back ( object::Object ( object::AnyObject < ElementType > ( std::move ( element ) ) ) );
+			res.push_back ( object::ObjectFactory::make ( std::move ( element ) ) );
 
 		return res;
 	}
 };
 
 template < class ElementType >
-struct normalize < container::ObjectsVector < ElementType >, typename std::enable_if < ! std::is_same < container::ObjectsVector < ElementType >, container::ObjectsVector < > >::value >::type > {
+struct normalize < container::ObjectsVector < ElementType > > {
 	static container::ObjectsVector < > eval ( container::ObjectsVector < ElementType > && value ) {
 		return container::ObjectsVector < > ( normalize < ext::vector < ElementType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2common/test-src/container/ContainerTest.cpp b/alib2common/test-src/container/ContainerTest.cpp
index d51f6ee45d..f06c5aee22 100644
--- a/alib2common/test-src/container/ContainerTest.cpp
+++ b/alib2common/test-src/container/ContainerTest.cpp
@@ -3,6 +3,10 @@
 #include "object/Object.h"
 #include "container/ObjectsSet.h"
 #include "container/ObjectsDeque.h"
+#include "container/ObjectsVector.h"
+#include "container/ObjectsMap.h"
+#include "container/ObjectsTree.h"
+#include "container/ObjectsTrie.h"
 
 #include <alib/type_traits>
 
@@ -27,4 +31,20 @@ void ContainerTest::testNormalize ( ) {
 	container::ObjectsDeque < int > Dint;
 	container::ObjectsDeque < object::Object > Dnor = core::normalize < container::ObjectsDeque < int > >::eval ( std::move ( Dint ) );
 	container::ObjectsDeque < object::Object > Dnor2 = core::normalize < container::ObjectsDeque < object::Object > >::eval ( std::move ( Dnor ) );
+
+	container::ObjectsVector < int > Vint;
+	container::ObjectsVector < object::Object > Vnor = core::normalize < container::ObjectsVector < int > >::eval ( std::move ( Vint ) );
+	container::ObjectsVector < object::Object > Vnor2 = core::normalize < container::ObjectsVector < object::Object > >::eval ( std::move ( Vnor ) );
+
+	container::ObjectsMap < int, int > Mintint;
+	container::ObjectsMap < object::Object, object::Object > Mnor = core::normalize < container::ObjectsMap < int, int > >::eval ( std::move ( Mintint ) );
+	container::ObjectsMap < object::Object, object::Object > Mnor2 = core::normalize < container::ObjectsMap < object::Object, object::Object > >::eval ( std::move ( Mnor ) );
+
+	container::ObjectsTree < int > Tint ( 1 );
+	container::ObjectsTree < object::Object > Tnor = core::normalize < container::ObjectsTree < int > >::eval ( std::move ( Tint ) );
+	container::ObjectsTree < object::Object > Tnor2 = core::normalize < container::ObjectsTree < object::Object > >::eval ( std::move ( Tnor ) );
+
+	container::ObjectsTrie < int, int > Rintint ( 1 );
+	container::ObjectsTrie < object::Object, object::Object > Rnor = core::normalize < container::ObjectsTrie < int, int > >::eval ( std::move ( Rintint ) );
+	container::ObjectsTrie < object::Object, object::Object > Rnor2 = core::normalize < container::ObjectsTrie < object::Object, object::Object > >::eval ( std::move ( Rnor ) );
 }
diff --git a/alib2data/src/alphabet/BarSymbol.h b/alib2data/src/alphabet/BarSymbol.h
index 0c8de693ae..1c76552091 100644
--- a/alib2data/src/alphabet/BarSymbol.h
+++ b/alib2data/src/alphabet/BarSymbol.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef BarSymbol normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/alphabet/BlankSymbol.h b/alib2data/src/alphabet/BlankSymbol.h
index b60dbb8477..8872d0ceb0 100644
--- a/alib2data/src/alphabet/BlankSymbol.h
+++ b/alib2data/src/alphabet/BlankSymbol.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef BlankSymbol normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/alphabet/BottomOfTheStackSymbol.h b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
index 18ed29a634..17f79e95d5 100644
--- a/alib2data/src/alphabet/BottomOfTheStackSymbol.h
+++ b/alib2data/src/alphabet/BottomOfTheStackSymbol.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef BottomOfTheStackSymbol normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/alphabet/EndSymbol.h b/alib2data/src/alphabet/EndSymbol.h
index 217abbe51b..88ec81d296 100644
--- a/alib2data/src/alphabet/EndSymbol.h
+++ b/alib2data/src/alphabet/EndSymbol.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef EndSymbol normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/alphabet/InitialSymbol.h b/alib2data/src/alphabet/InitialSymbol.h
index a31721e961..1e4bf6665e 100644
--- a/alib2data/src/alphabet/InitialSymbol.h
+++ b/alib2data/src/alphabet/InitialSymbol.h
@@ -48,8 +48,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef InitialSymbol normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/alphabet/LabeledSymbol.h b/alib2data/src/alphabet/LabeledSymbol.h
index f9f8ebf8b6..e4f9593545 100644
--- a/alib2data/src/alphabet/LabeledSymbol.h
+++ b/alib2data/src/alphabet/LabeledSymbol.h
@@ -54,8 +54,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef LabeledSymbol normalized_type;
 };
 
 } /* namespace alphabet */
diff --git a/alib2data/src/alphabet/NonlinearVariableSymbol.h b/alib2data/src/alphabet/NonlinearVariableSymbol.h
index ddaf8179ca..e454590ab4 100644
--- a/alib2data/src/alphabet/NonlinearVariableSymbol.h
+++ b/alib2data/src/alphabet/NonlinearVariableSymbol.h
@@ -54,8 +54,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef NonlinearVariableSymbol < > normalized_type;
 };
 
 template < class SymbolType >
@@ -109,7 +107,7 @@ SymbolBase * NonlinearVariableSymbol < SymbolType >::inc ( ) && {
 namespace core {
 
 template < class SymbolType >
-struct normalize < alphabet::NonlinearVariableSymbol < SymbolType >, typename std::enable_if < ! std::is_same < alphabet::NonlinearVariableSymbol < SymbolType >, alphabet::NonlinearVariableSymbol < > >::value >::type > {
+struct normalize < alphabet::NonlinearVariableSymbol < SymbolType > > {
 	static alphabet::NonlinearVariableSymbol < > eval ( alphabet::NonlinearVariableSymbol < SymbolType > && value ) {
 		return alphabet::NonlinearVariableSymbol < > ( alphabet::SymbolNormalize::normalizeSymbol ( std::move ( value ).getSymbol ( ) ) );
 	}
diff --git a/alib2data/src/alphabet/RankedSymbol.h b/alib2data/src/alphabet/RankedSymbol.h
index 3f9ad024ea..59eddd8af3 100644
--- a/alib2data/src/alphabet/RankedSymbol.h
+++ b/alib2data/src/alphabet/RankedSymbol.h
@@ -52,8 +52,6 @@ public:
 	using SymbolBase::operator >=;
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef RankedSymbol < > normalized_type;
 };
 
 template < class SymbolType, class RankType >
@@ -92,21 +90,14 @@ SymbolBase* RankedSymbol < SymbolType, RankType >::inc() && {
 namespace core {
 
 template < class SymbolType, class RankType >
-struct normalize < common::ranked_symbol < SymbolType, RankType >, typename std::enable_if < std::is_same < common::ranked_symbol < SymbolType, RankType >, common::ranked_symbol < > >::value >::type > {
-	static common::ranked_symbol < > && eval ( common::ranked_symbol < SymbolType, RankType > && value ) {
-		return std::move ( value );
-	}
-};
-
-template < class SymbolType, class RankType >
-struct normalize < common::ranked_symbol < SymbolType, RankType >, typename std::enable_if < ! std::is_same < common::ranked_symbol < SymbolType, RankType >, common::ranked_symbol < > >::value >::type > {
+struct normalize < common::ranked_symbol < SymbolType, RankType > > {
 	static common::ranked_symbol < > eval ( common::ranked_symbol < SymbolType, RankType > && value ) {
 		return alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ) );
 	}
 };
 
 template < class SymbolType, class RankType >
-struct normalize < alphabet::RankedSymbol < SymbolType, RankType >, typename std::enable_if < ! std::is_same < alphabet::RankedSymbol < SymbolType, RankType >, alphabet::RankedSymbol < > >::value >::type > {
+struct normalize < alphabet::RankedSymbol < SymbolType, RankType > > {
 	static alphabet::RankedSymbol < > eval ( alphabet::RankedSymbol < SymbolType, RankType > && value ) {
 		return alphabet::RankedSymbol < > ( normalize < common::ranked_symbol < SymbolType, RankType > >::eval ( std::move ( value ) ) );
 	}
diff --git a/alib2data/src/alphabet/StartSymbol.h b/alib2data/src/alphabet/StartSymbol.h
index aea90e3d75..8b8546f313 100644
--- a/alib2data/src/alphabet/StartSymbol.h
+++ b/alib2data/src/alphabet/StartSymbol.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef StartSymbol normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/alphabet/SubtreeWildcardSymbol.h b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
index 863ee307a6..ecd47bd2e1 100644
--- a/alib2data/src/alphabet/SubtreeWildcardSymbol.h
+++ b/alib2data/src/alphabet/SubtreeWildcardSymbol.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef SubtreeWildcardSymbol normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/alphabet/UniqueSymbol.h b/alib2data/src/alphabet/UniqueSymbol.h
index f11e48bc57..50a9a00b2b 100644
--- a/alib2data/src/alphabet/UniqueSymbol.h
+++ b/alib2data/src/alphabet/UniqueSymbol.h
@@ -56,8 +56,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef UniqueSymbol normalized_type;
 };
 
 } /* namespace alphabet */
diff --git a/alib2data/src/alphabet/VariablesBarSymbol.h b/alib2data/src/alphabet/VariablesBarSymbol.h
index 0a7e28065e..8e8cc58c15 100644
--- a/alib2data/src/alphabet/VariablesBarSymbol.h
+++ b/alib2data/src/alphabet/VariablesBarSymbol.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual SymbolBase * inc ( ) &&;
-
-	typedef VariablesBarSymbol normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/automaton/FSM/CompactNFA.h b/alib2data/src/automaton/FSM/CompactNFA.h
index 5c9e96b7d3..4af5b115c3 100644
--- a/alib2data/src/automaton/FSM/CompactNFA.h
+++ b/alib2data/src/automaton/FSM/CompactNFA.h
@@ -472,11 +472,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef CompactNFA < > normalized_type;
 };
 
 } /* namespace automaton */
@@ -912,7 +907,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType, class StateType >
-struct normalize < automaton::CompactNFA < SymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::CompactNFA < SymbolType, StateType >, automaton::CompactNFA < > >::value >::type > {
+struct normalize < automaton::CompactNFA < SymbolType, StateType > > {
 	static automaton::CompactNFA < > eval ( automaton::CompactNFA < SymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultStateType > states = automaton::AutomatonNormalize::normalizeStates ( std::move ( value ).getStates ( ) );
diff --git a/alib2data/src/automaton/FSM/DFA.h b/alib2data/src/automaton/FSM/DFA.h
index f3faccea40..8d36ad3742 100644
--- a/alib2data/src/automaton/FSM/DFA.h
+++ b/alib2data/src/automaton/FSM/DFA.h
@@ -438,11 +438,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef DFA < > normalized_type;
 };
 
 template<class SymbolType, class StateType >
@@ -845,7 +840,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType, class StateType >
-struct normalize < automaton::DFA < SymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::DFA < SymbolType, StateType >, automaton::DFA < > >::value >::type > {
+struct normalize < automaton::DFA < SymbolType, StateType > > {
 	static automaton::DFA < > eval ( automaton::DFA < SymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultStateType > states = automaton::AutomatonNormalize::normalizeStates ( std::move ( value ).getStates ( ) );
diff --git a/alib2data/src/automaton/FSM/EpsilonNFA.h b/alib2data/src/automaton/FSM/EpsilonNFA.h
index b726c90fd4..74a60ce6c3 100644
--- a/alib2data/src/automaton/FSM/EpsilonNFA.h
+++ b/alib2data/src/automaton/FSM/EpsilonNFA.h
@@ -608,11 +608,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef EpsilonNFA < > normalized_type;
 };
 
 } /* namespace automaton */
@@ -1171,7 +1166,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template<class SymbolType, class EpsilonType, class StateType >
-struct normalize < automaton::EpsilonNFA < SymbolType, EpsilonType, StateType >, typename std::enable_if < ! std::is_same < automaton::EpsilonNFA < SymbolType, EpsilonType, StateType >, automaton::EpsilonNFA < > >::value >::type > {
+struct normalize < automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > > {
 	static automaton::EpsilonNFA < > eval ( automaton::EpsilonNFA < SymbolType, EpsilonType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultStateType > states = automaton::AutomatonNormalize::normalizeStates ( std::move ( value ).getStates ( ) );
diff --git a/alib2data/src/automaton/FSM/ExtendedNFA.h b/alib2data/src/automaton/FSM/ExtendedNFA.h
index e690f7a97b..3b6d9aec56 100644
--- a/alib2data/src/automaton/FSM/ExtendedNFA.h
+++ b/alib2data/src/automaton/FSM/ExtendedNFA.h
@@ -483,11 +483,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef ExtendedNFA < > normalized_type;
 };
 
 } /* namespace automaton */
@@ -937,7 +932,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType, class StateType >
-struct normalize < automaton::ExtendedNFA < SymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::ExtendedNFA < SymbolType, StateType >, automaton::ExtendedNFA < > >::value >::type > {
+struct normalize < automaton::ExtendedNFA < SymbolType, StateType > > {
 	static automaton::ExtendedNFA < > eval ( automaton::ExtendedNFA < SymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultStateType > states = automaton::AutomatonNormalize::normalizeStates ( std::move ( value ).getStates ( ) );
diff --git a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
index 33cf090d4b..b65397f975 100644
--- a/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
+++ b/alib2data/src/automaton/FSM/MultiInitialStateNFA.h
@@ -500,11 +500,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef MultiInitialStateNFA < > normalized_type;
 };
 
 } /* namespace automaton */
@@ -938,7 +933,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType, class StateType >
-struct normalize < automaton::MultiInitialStateNFA < SymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::MultiInitialStateNFA < SymbolType, StateType >, automaton::MultiInitialStateNFA < > >::value >::type > {
+struct normalize < automaton::MultiInitialStateNFA < SymbolType, StateType > > {
 	static automaton::MultiInitialStateNFA < > eval ( automaton::MultiInitialStateNFA < SymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultStateType > states = automaton::AutomatonNormalize::normalizeStates ( std::move ( value ).getStates ( ) );
diff --git a/alib2data/src/automaton/FSM/NFA.h b/alib2data/src/automaton/FSM/NFA.h
index c6f7f3107a..3124a0aac1 100644
--- a/alib2data/src/automaton/FSM/NFA.h
+++ b/alib2data/src/automaton/FSM/NFA.h
@@ -470,11 +470,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef NFA < > normalized_type;
 };
 
 } /* namespace automaton */
@@ -888,7 +883,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType, class StateType >
-struct normalize < automaton::NFA < SymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::NFA < SymbolType, StateType >, automaton::NFA < > >::value >::type > {
+struct normalize < automaton::NFA < SymbolType, StateType > > {
 	static automaton::NFA < > eval ( automaton::NFA < SymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultStateType > states = automaton::AutomatonNormalize::normalizeStates ( std::move ( value ).getStates ( ) );
diff --git a/alib2data/src/automaton/PDA/DPDA.h b/alib2data/src/automaton/PDA/DPDA.h
index f9f8d002f3..3a7cd9fe80 100644
--- a/alib2data/src/automaton/PDA/DPDA.h
+++ b/alib2data/src/automaton/PDA/DPDA.h
@@ -600,11 +600,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef DPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
@@ -1163,7 +1158,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::DPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::DPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, automaton::DPDA < > >::value >::type > {
+struct normalize < automaton::DPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > > {
 	static automaton::DPDA < > eval ( automaton::DPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getPushdownStoreAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.h b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
index 41e0beb8e4..1d6075278a 100644
--- a/alib2data/src/automaton/PDA/InputDrivenDPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.h
@@ -582,11 +582,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef InputDrivenDPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class PushdownStoreSymbolType, class StateType >
@@ -1125,7 +1120,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::InputDrivenDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::InputDrivenDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, automaton::InputDrivenDPDA < > >::value >::type > {
+struct normalize < automaton::InputDrivenDPDA < InputSymbolType, PushdownStoreSymbolType, StateType > > {
 	static automaton::InputDrivenDPDA < > eval ( automaton::InputDrivenDPDA < InputSymbolType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getPushdownStoreAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.h b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
index 8d00e94a80..8ffe633afe 100644
--- a/alib2data/src/automaton/PDA/InputDrivenNPDA.h
+++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.h
@@ -607,11 +607,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef InputDrivenNPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class PushdownStoreSymbolType, class StateType >
@@ -1166,7 +1161,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::InputDrivenNPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::InputDrivenNPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, automaton::InputDrivenNPDA < > >::value >::type > {
+struct normalize < automaton::InputDrivenNPDA < InputSymbolType, PushdownStoreSymbolType, StateType > > {
 	static automaton::InputDrivenNPDA < > eval ( automaton::InputDrivenNPDA < InputSymbolType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getPushdownStoreAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/NPDA.h b/alib2data/src/automaton/PDA/NPDA.h
index 9d5526a930..d66240510b 100644
--- a/alib2data/src/automaton/PDA/NPDA.h
+++ b/alib2data/src/automaton/PDA/NPDA.h
@@ -616,11 +616,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef NPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
@@ -1138,7 +1133,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::NPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::NPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, automaton::NPDA < > >::value >::type > {
+struct normalize < automaton::NPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > > {
 	static automaton::NPDA < > eval ( automaton::NPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getPushdownStoreAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/NPDTA.h b/alib2data/src/automaton/PDA/NPDTA.h
index f426e4500b..25d9d954fb 100644
--- a/alib2data/src/automaton/PDA/NPDTA.h
+++ b/alib2data/src/automaton/PDA/NPDTA.h
@@ -693,11 +693,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef NPDTA < > normalized_type;
 };
 
 template < class InputSymbolType, class OutputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
@@ -1313,7 +1308,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class OutputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::NPDTA < InputSymbolType, OutputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::NPDTA < InputSymbolType, OutputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, automaton::NPDTA < > >::value >::type > {
+struct normalize < automaton::NPDTA < InputSymbolType, OutputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > > {
 	static automaton::NPDTA < > eval ( automaton::NPDTA < InputSymbolType, OutputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > outputAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getOutputAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
index 4b81eac714..96db4d6cba 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicDPDA.h
@@ -819,11 +819,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef RealTimeHeightDeterministicDPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
@@ -1585,7 +1580,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::RealTimeHeightDeterministicDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::RealTimeHeightDeterministicDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, automaton::RealTimeHeightDeterministicDPDA < > >::value >::type > {
+struct normalize < automaton::RealTimeHeightDeterministicDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > > {
 	static automaton::RealTimeHeightDeterministicDPDA < > eval ( automaton::RealTimeHeightDeterministicDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getPushdownStoreAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
index b5bd6acd02..8ca9dab84d 100644
--- a/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
+++ b/alib2data/src/automaton/PDA/RealTimeHeightDeterministicNPDA.h
@@ -939,11 +939,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef RealTimeHeightDeterministicNPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
@@ -1715,7 +1710,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::RealTimeHeightDeterministicNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::RealTimeHeightDeterministicNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, automaton::RealTimeHeightDeterministicNPDA < > >::value >::type > {
+struct normalize < automaton::RealTimeHeightDeterministicNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > > {
 	static automaton::RealTimeHeightDeterministicNPDA < > eval ( automaton::RealTimeHeightDeterministicNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getPushdownStoreAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/SinglePopDPDA.h b/alib2data/src/automaton/PDA/SinglePopDPDA.h
index 4846de42de..a132f4e616 100644
--- a/alib2data/src/automaton/PDA/SinglePopDPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopDPDA.h
@@ -582,11 +582,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef SinglePopDPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
@@ -1087,7 +1082,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::SinglePopDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::SinglePopDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, automaton::SinglePopDPDA < > >::value >::type > {
+struct normalize < automaton::SinglePopDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > > {
 	static automaton::SinglePopDPDA < > eval ( automaton::SinglePopDPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getPushdownStoreAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/SinglePopNPDA.h b/alib2data/src/automaton/PDA/SinglePopNPDA.h
index bb783d9863..41a213f6b2 100644
--- a/alib2data/src/automaton/PDA/SinglePopNPDA.h
+++ b/alib2data/src/automaton/PDA/SinglePopNPDA.h
@@ -617,11 +617,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef SinglePopNPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
@@ -1142,7 +1137,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class EpsilonType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::SinglePopNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::SinglePopNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType >, automaton::SinglePopNPDA < > >::value >::type > {
+struct normalize < automaton::SinglePopNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > > {
 	static automaton::SinglePopNPDA < > eval ( automaton::SinglePopNPDA < InputSymbolType, EpsilonType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > pushdownAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getPushdownStoreAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
index 3506764f01..35cbaf99e2 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownDPDA.h
@@ -759,11 +759,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef VisiblyPushdownDPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class PushdownStoreSymbolType, class StateType >
@@ -1510,7 +1505,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, automaton::VisiblyPushdownDPDA < > >::value >::type > {
+struct normalize < automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType > > {
 	static automaton::VisiblyPushdownDPDA < > eval ( automaton::VisiblyPushdownDPDA < InputSymbolType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > call_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getCallInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > return_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getReturnInputAlphabet ( ) );
diff --git a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
index 5b42fe9fa6..b0ba6e5dfc 100644
--- a/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
+++ b/alib2data/src/automaton/PDA/VisiblyPushdownNPDA.h
@@ -811,11 +811,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef VisiblyPushdownNPDA < > normalized_type;
 };
 
 template < class InputSymbolType, class PushdownStoreSymbolType, class StateType >
@@ -1581,7 +1576,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class InputSymbolType, class PushdownStoreSymbolType, class StateType >
-struct normalize < automaton::VisiblyPushdownNPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::VisiblyPushdownNPDA < InputSymbolType, PushdownStoreSymbolType, StateType >, automaton::VisiblyPushdownNPDA < > >::value >::type > {
+struct normalize < automaton::VisiblyPushdownNPDA < InputSymbolType, PushdownStoreSymbolType, StateType > > {
 	static automaton::VisiblyPushdownNPDA < > eval ( automaton::VisiblyPushdownNPDA < InputSymbolType, PushdownStoreSymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > call_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getCallInputAlphabet ( ) );
 		ext::set < DefaultSymbolType > return_alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getReturnInputAlphabet ( ) );
diff --git a/alib2data/src/automaton/TA/DFTA.h b/alib2data/src/automaton/TA/DFTA.h
index b0fc842a48..bbeea2d6d2 100644
--- a/alib2data/src/automaton/TA/DFTA.h
+++ b/alib2data/src/automaton/TA/DFTA.h
@@ -403,11 +403,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef DFTA < > normalized_type;
 };
 
 } /* namespace automaton */
@@ -716,7 +711,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType, class RankType, class StateType >
-struct normalize < automaton::DFTA < SymbolType, RankType, StateType >, typename std::enable_if < ! std::is_same < automaton::DFTA < SymbolType, RankType, StateType >, automaton::DFTA < > >::value >::type > {
+struct normalize < automaton::DFTA < SymbolType, RankType, StateType > > {
 	static automaton::DFTA < > eval ( automaton::DFTA < SymbolType, RankType, StateType > && value ) {
 		ext::set < common::ranked_symbol < > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultStateType > states = automaton::AutomatonNormalize::normalizeStates ( std::move ( value ).getStates ( ) );
diff --git a/alib2data/src/automaton/TA/NFTA.h b/alib2data/src/automaton/TA/NFTA.h
index 6f80c89718..95f210d6cd 100644
--- a/alib2data/src/automaton/TA/NFTA.h
+++ b/alib2data/src/automaton/TA/NFTA.h
@@ -428,11 +428,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef NFTA < > normalized_type;
 };
 
 } /* namespace automaton */
@@ -775,7 +770,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType, class RankType, class StateType >
-struct normalize < automaton::NFTA < SymbolType, RankType, StateType >, typename std::enable_if < ! std::is_same < automaton::NFTA < SymbolType, RankType, StateType >, automaton::NFTA < > >::value >::type > {
+struct normalize < automaton::NFTA < SymbolType, RankType, StateType > > {
 	static automaton::NFTA < > eval ( automaton::NFTA < SymbolType, RankType, StateType > && value ) {
 		ext::set < common::ranked_symbol < > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getInputAlphabet ( ) );
 		ext::set < DefaultStateType > states = automaton::AutomatonNormalize::normalizeStates ( std::move ( value ).getStates ( ) );
diff --git a/alib2data/src/automaton/TM/OneTapeDTM.h b/alib2data/src/automaton/TM/OneTapeDTM.h
index cfe73173a0..0d08a931e7 100644
--- a/alib2data/src/automaton/TM/OneTapeDTM.h
+++ b/alib2data/src/automaton/TM/OneTapeDTM.h
@@ -506,11 +506,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized automaton.
-	 */
-	typedef OneTapeDTM < > normalized_type;
 };
 
 template<class SymbolType, class StateType >
@@ -969,7 +964,7 @@ public:
  * \returns new instance of the automaton with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template<class SymbolType, class StateType >
-struct normalize < automaton::OneTapeDTM < SymbolType, StateType >, typename std::enable_if < ! std::is_same < automaton::OneTapeDTM < SymbolType, StateType >, automaton::OneTapeDTM < > >::value >::type > {
+struct normalize < automaton::OneTapeDTM < SymbolType, StateType > > {
 	static automaton::OneTapeDTM < > eval ( automaton::OneTapeDTM < SymbolType, StateType > && value ) {
 		ext::set < DefaultSymbolType > tapeAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTapeAlphabet ( ) );
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getInputAlphabet ( ) );
diff --git a/alib2data/src/grammar/ContextFree/CFG.h b/alib2data/src/grammar/ContextFree/CFG.h
index 82fa06447b..ac1facbaea 100644
--- a/alib2data/src/grammar/ContextFree/CFG.h
+++ b/alib2data/src/grammar/ContextFree/CFG.h
@@ -358,11 +358,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef CFG < > normalized_type;
 };
 
 } /* namespace grammar */
@@ -692,7 +687,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::CFG < SymbolType >, typename std::enable_if < ! std::is_same < grammar::CFG < SymbolType >, grammar::CFG < > >::value >::type > {
+struct normalize < grammar::CFG < SymbolType > > {
 	static grammar::CFG < > eval ( grammar::CFG < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/ContextFree/CNF.h b/alib2data/src/grammar/ContextFree/CNF.h
index 35f36e746a..1a3615fbf8 100644
--- a/alib2data/src/grammar/ContextFree/CNF.h
+++ b/alib2data/src/grammar/ContextFree/CNF.h
@@ -415,11 +415,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef CNF < > normalized_type;
 };
 
 template < class SymbolType >
@@ -836,7 +831,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::CNF < SymbolType >, typename std::enable_if < ! std::is_same < grammar::CNF < SymbolType >, grammar::CNF < > >::value >::type > {
+struct normalize < grammar::CNF < SymbolType > > {
 	static grammar::CNF < > eval ( grammar::CNF < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
index 53a5d45e71..c84748d463 100644
--- a/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
+++ b/alib2data/src/grammar/ContextFree/EpsilonFreeCFG.h
@@ -370,11 +370,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef EpsilonFreeCFG < > normalized_type;
 };
 
 template < class SymbolType >
@@ -731,7 +726,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::EpsilonFreeCFG < SymbolType >, typename std::enable_if < ! std::is_same < grammar::EpsilonFreeCFG < SymbolType >, grammar::EpsilonFreeCFG < > >::value >::type > {
+struct normalize < grammar::EpsilonFreeCFG < SymbolType > > {
 	static grammar::EpsilonFreeCFG < > eval ( grammar::EpsilonFreeCFG < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/ContextFree/GNF.h b/alib2data/src/grammar/ContextFree/GNF.h
index 7d23c8ef9c..bde1d647b1 100644
--- a/alib2data/src/grammar/ContextFree/GNF.h
+++ b/alib2data/src/grammar/ContextFree/GNF.h
@@ -370,11 +370,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef GNF < > normalized_type;
 };
 
 template < class SymbolType >
@@ -740,7 +735,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::GNF < SymbolType >, typename std::enable_if < ! std::is_same < grammar::GNF < SymbolType >, grammar::GNF < > >::value >::type > {
+struct normalize < grammar::GNF < SymbolType > > {
 	static grammar::GNF < > eval ( grammar::GNF < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/ContextFree/LG.h b/alib2data/src/grammar/ContextFree/LG.h
index 23a671e5d9..0c13d64711 100644
--- a/alib2data/src/grammar/ContextFree/LG.h
+++ b/alib2data/src/grammar/ContextFree/LG.h
@@ -397,11 +397,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef LG < > normalized_type;
 };
 
 template < class SymbolType >
@@ -831,7 +826,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::LG < SymbolType >, typename std::enable_if < ! std::is_same < grammar::LG < SymbolType >, grammar::LG < > >::value >::type > {
+struct normalize < grammar::LG < SymbolType > > {
 	static grammar::LG < > eval ( grammar::LG < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/ContextSensitive/CSG.h b/alib2data/src/grammar/ContextSensitive/CSG.h
index e64c136b7a..3c62718d7f 100644
--- a/alib2data/src/grammar/ContextSensitive/CSG.h
+++ b/alib2data/src/grammar/ContextSensitive/CSG.h
@@ -352,11 +352,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef CSG < > normalized_type;
 };
 
 template < class SymbolType >
@@ -717,7 +712,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::CSG < SymbolType >, typename std::enable_if < ! std::is_same < grammar::CSG < SymbolType >, grammar::CSG < > >::value >::type > {
+struct normalize < grammar::CSG < SymbolType > > {
 	static grammar::CSG < > eval ( grammar::CSG < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
index 5055d03bdd..4dc6577763 100644
--- a/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
+++ b/alib2data/src/grammar/ContextSensitive/NonContractingGrammar.h
@@ -346,11 +346,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef NonContractingGrammar < > normalized_type;
 };
 
 template < class SymbolType >
@@ -697,7 +692,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::NonContractingGrammar < SymbolType >, typename std::enable_if < ! std::is_same < grammar::NonContractingGrammar < SymbolType >, grammar::NonContractingGrammar < > >::value >::type > {
+struct normalize < grammar::NonContractingGrammar < SymbolType > > {
 	static grammar::NonContractingGrammar < > eval ( grammar::NonContractingGrammar < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/Regular/LeftLG.h b/alib2data/src/grammar/Regular/LeftLG.h
index 7a60d0ba8a..753b3c35f6 100644
--- a/alib2data/src/grammar/Regular/LeftLG.h
+++ b/alib2data/src/grammar/Regular/LeftLG.h
@@ -396,11 +396,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef LeftLG < > normalized_type;
 };
 
 template < class SymbolType >
@@ -806,7 +801,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::LeftLG < SymbolType >, typename std::enable_if < ! std::is_same < grammar::LeftLG < SymbolType >, grammar::LeftLG < > >::value >::type > {
+struct normalize < grammar::LeftLG < SymbolType > > {
 	static grammar::LeftLG < > eval ( grammar::LeftLG < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/Regular/LeftRG.h b/alib2data/src/grammar/Regular/LeftRG.h
index e3fad94bef..baf22c45b6 100644
--- a/alib2data/src/grammar/Regular/LeftRG.h
+++ b/alib2data/src/grammar/Regular/LeftRG.h
@@ -419,11 +419,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef LeftRG < > normalized_type;
 };
 
 template < class SymbolType >
@@ -839,7 +834,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::LeftRG < SymbolType >, typename std::enable_if < ! std::is_same < grammar::LeftRG < SymbolType >, grammar::LeftRG < > >::value >::type > {
+struct normalize < grammar::LeftRG < SymbolType > > {
 	static grammar::LeftRG < > eval ( grammar::LeftRG < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/Regular/RightLG.h b/alib2data/src/grammar/Regular/RightLG.h
index f81eedb97d..991fb82025 100644
--- a/alib2data/src/grammar/Regular/RightLG.h
+++ b/alib2data/src/grammar/Regular/RightLG.h
@@ -396,11 +396,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef RightLG < > normalized_type;
 };
 
 template < class SymbolType >
@@ -804,7 +799,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::RightLG < SymbolType >, typename std::enable_if < ! std::is_same < grammar::RightLG < SymbolType >, grammar::RightLG < > >::value >::type > {
+struct normalize < grammar::RightLG < SymbolType > > {
 	static grammar::RightLG < > eval ( grammar::RightLG < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/Regular/RightRG.h b/alib2data/src/grammar/Regular/RightRG.h
index c7a74ecde6..0bb59280d0 100644
--- a/alib2data/src/grammar/Regular/RightRG.h
+++ b/alib2data/src/grammar/Regular/RightRG.h
@@ -419,11 +419,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef RightRG < > normalized_type;
 };
 
 template < class SymbolType >
@@ -836,7 +831,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::RightRG < SymbolType >, typename std::enable_if < ! std::is_same < grammar::RightRG < SymbolType >, grammar::RightRG < > >::value >::type > {
+struct normalize < grammar::RightRG < SymbolType > > {
 	static grammar::RightRG < > eval ( grammar::RightRG < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
index eee1525da3..d39c94c124 100644
--- a/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/ContextPreservingUnrestrictedGrammar.h
@@ -333,11 +333,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef ContextPreservingUnrestrictedGrammar < > normalized_type;
 };
 
 template < class SymbolType >
@@ -674,7 +669,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::ContextPreservingUnrestrictedGrammar < SymbolType >, typename std::enable_if < ! std::is_same < grammar::ContextPreservingUnrestrictedGrammar < SymbolType >, grammar::ContextPreservingUnrestrictedGrammar < > >::value >::type > {
+struct normalize < grammar::ContextPreservingUnrestrictedGrammar < SymbolType > > {
 	static grammar::ContextPreservingUnrestrictedGrammar < > eval ( grammar::ContextPreservingUnrestrictedGrammar < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
index b9c226e618..f5fde89328 100644
--- a/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
+++ b/alib2data/src/grammar/Unrestricted/UnrestrictedGrammar.h
@@ -333,11 +333,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized grammar.
-	 */
-	typedef UnrestrictedGrammar < > normalized_type;
 };
 
 template < class SymbolType >
@@ -653,7 +648,7 @@ public:
  * \returns new instance of the grammar with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < grammar::UnrestrictedGrammar < SymbolType >, typename std::enable_if < ! std::is_same < grammar::UnrestrictedGrammar < SymbolType >, grammar::UnrestrictedGrammar < > >::value >::type > {
+struct normalize < grammar::UnrestrictedGrammar < SymbolType > > {
 	static grammar::UnrestrictedGrammar < > eval ( grammar::UnrestrictedGrammar < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > nonterminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonterminalAlphabet ( ) );
 		ext::set < DefaultSymbolType > terminals = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getTerminalAlphabet ( ) );
diff --git a/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.h b/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.h
index 041d72cf6f..5355c73794 100644
--- a/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.h
+++ b/alib2data/src/indexes/arbology/CompressedBitParallelTreeIndex.h
@@ -125,8 +125,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef CompressedBitParallelTreeIndex < > normalized_type;
 };
 
 } /* namespace arbology */
@@ -246,7 +244,7 @@ public:
 };
 
 template < class SymbolType, class RankType >
-struct normalize < indexes::arbology::CompressedBitParallelTreeIndex < SymbolType, RankType >, typename std::enable_if < ! std::is_same < indexes::arbology::CompressedBitParallelTreeIndex < SymbolType, RankType >, indexes::arbology::CompressedBitParallelTreeIndex < > >::value >::type > {
+struct normalize < indexes::arbology::CompressedBitParallelTreeIndex < SymbolType, RankType > > {
 	static indexes::arbology::CompressedBitParallelTreeIndex < > eval ( indexes::arbology::CompressedBitParallelTreeIndex < SymbolType, RankType > && value ) {
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
 
diff --git a/alib2data/src/indexes/arbology/FullAndLinearIndex.h b/alib2data/src/indexes/arbology/FullAndLinearIndex.h
index c8ac3ff477..e7d3bac7a0 100644
--- a/alib2data/src/indexes/arbology/FullAndLinearIndex.h
+++ b/alib2data/src/indexes/arbology/FullAndLinearIndex.h
@@ -112,8 +112,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef FullAndLinearIndex < > normalized_type;
 };
 
 } /* namespace arbology */
@@ -197,7 +195,7 @@ object::ObjectBase * FullAndLinearIndex < SymbolType, RankType, StringIndex >::i
 namespace core {
 
 template < class SymbolType, class RankType, template < typename > class StringIndex >
-struct normalize < indexes::arbology::FullAndLinearIndex < SymbolType, RankType, StringIndex >, typename std::enable_if < ! std::is_same < indexes::arbology::FullAndLinearIndex < SymbolType, RankType, StringIndex >, indexes::arbology::FullAndLinearIndex < > >::value >::type > {
+struct normalize < indexes::arbology::FullAndLinearIndex < SymbolType, RankType, StringIndex > > {
 	static indexes::arbology::FullAndLinearIndex < > eval ( indexes::arbology::FullAndLinearIndex < SymbolType, RankType, StringIndex > && value ) {
 		StringIndex < common::ranked_symbol < > > stringIndex = core::normalize < StringIndex < common::ranked_symbol < SymbolType, RankType > > >::eval ( std::move ( value ).getStringIndex ( ) );
 
diff --git a/alib2data/src/indexes/arbology/NonlinearCompressedBitParallelTreeIndex.h b/alib2data/src/indexes/arbology/NonlinearCompressedBitParallelTreeIndex.h
index a181209043..6e4d798c15 100644
--- a/alib2data/src/indexes/arbology/NonlinearCompressedBitParallelTreeIndex.h
+++ b/alib2data/src/indexes/arbology/NonlinearCompressedBitParallelTreeIndex.h
@@ -128,8 +128,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef NonlinearCompressedBitParallelTreeIndex < > normalized_type;
 };
 
 } /* namespace arbology */
@@ -259,7 +257,7 @@ public:
 };
 
 template < class SymbolType, class RankType >
-struct normalize < indexes::arbology::NonlinearCompressedBitParallelTreeIndex < SymbolType, RankType >, typename std::enable_if < ! std::is_same < indexes::arbology::NonlinearCompressedBitParallelTreeIndex < SymbolType, RankType >, indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > >::value >::type > {
+struct normalize < indexes::arbology::NonlinearCompressedBitParallelTreeIndex < SymbolType, RankType > > {
 	static indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > eval ( indexes::arbology::NonlinearCompressedBitParallelTreeIndex < SymbolType, RankType > && value ) {
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
 
diff --git a/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.h b/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.h
index 206c2de109..29ec200435 100644
--- a/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.h
+++ b/alib2data/src/indexes/arbology/NonlinearFullAndLinearIndex.h
@@ -120,8 +120,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef NonlinearFullAndLinearIndex < > normalized_type;
 };
 
 } /* namespace arbology */
@@ -215,7 +213,7 @@ object::ObjectBase * NonlinearFullAndLinearIndex < SymbolType, RankType, StringI
 namespace core {
 
 template < class SymbolType, class RankType, template < typename > class StringIndex >
-struct normalize < indexes::arbology::NonlinearFullAndLinearIndex < SymbolType, RankType, StringIndex >, typename std::enable_if < ! std::is_same < indexes::arbology::NonlinearFullAndLinearIndex < SymbolType, RankType, StringIndex >, indexes::arbology::NonlinearFullAndLinearIndex < > >::value >::type > {
+struct normalize < indexes::arbology::NonlinearFullAndLinearIndex < SymbolType, RankType, StringIndex > > {
 	static indexes::arbology::NonlinearFullAndLinearIndex < > eval ( indexes::arbology::NonlinearFullAndLinearIndex < SymbolType, RankType, StringIndex > && value ) {
 		StringIndex < common::ranked_symbol < > > stringIndex = core::normalize < StringIndex < common::ranked_symbol < SymbolType, RankType > > >::eval ( std::move ( value ).getStringIndex ( ) );
 
diff --git a/alib2data/src/indexes/stringology/BNDMMatcher.h b/alib2data/src/indexes/stringology/BNDMMatcher.h
index 660bebdf81..ce579acb8d 100644
--- a/alib2data/src/indexes/stringology/BNDMMatcher.h
+++ b/alib2data/src/indexes/stringology/BNDMMatcher.h
@@ -119,8 +119,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef BNDMMatcher < > normalized_type;
 };
 
 } /* namespace stringology */
@@ -220,14 +218,7 @@ public:
 };
 
 template < class SymbolType, size_t BitmaskBitCount >
-struct normalize < indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount >, typename std::enable_if < ! std::is_same < indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount >, indexes::stringology::BNDMMatcher < > >::value && std::is_same < indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount >, indexes::stringology::BNDMMatcher < DefaultSymbolType, BitmaskBitCount > >::value >::type > {
-	static indexes::stringology::BNDMMatcher < DefaultSymbolType, BitmaskBitCount > && eval ( indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount > && value ) {
-		return std::move ( value );
-	}
-};
-
-template < class SymbolType, size_t BitmaskBitCount >
-struct normalize < indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount >, typename std::enable_if < ! std::is_same < indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount >, indexes::stringology::BNDMMatcher < DefaultSymbolType, BitmaskBitCount > >::value && ! std::is_same < indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount >, indexes::stringology::BNDMMatcher < DefaultSymbolType, BitmaskBitCount > >::value >::type > {
+struct normalize < indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount > > {
 	static indexes::stringology::BNDMMatcher < DefaultSymbolType, BitmaskBitCount > eval ( indexes::stringology::BNDMMatcher < SymbolType, BitmaskBitCount > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 
diff --git a/alib2data/src/indexes/stringology/BitParallelIndex.h b/alib2data/src/indexes/stringology/BitParallelIndex.h
index abcc647a9b..013f7738b6 100644
--- a/alib2data/src/indexes/stringology/BitParallelIndex.h
+++ b/alib2data/src/indexes/stringology/BitParallelIndex.h
@@ -114,8 +114,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef BitParallelIndex < > normalized_type;
 };
 
 } /* namespace stringology */
@@ -222,7 +220,7 @@ public:
 };
 
 template < class SymbolType >
-struct normalize < indexes::stringology::BitParallelIndex < SymbolType >, typename std::enable_if < ! std::is_same < indexes::stringology::BitParallelIndex < SymbolType >, indexes::stringology::BitParallelIndex < > >::value >::type > {
+struct normalize < indexes::stringology::BitParallelIndex < SymbolType > > {
 	static indexes::stringology::BitParallelIndex < > eval ( indexes::stringology::BitParallelIndex < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 
diff --git a/alib2data/src/indexes/stringology/CompressedBitParallelIndex.h b/alib2data/src/indexes/stringology/CompressedBitParallelIndex.h
index 8f6096c959..99e4cf8481 100644
--- a/alib2data/src/indexes/stringology/CompressedBitParallelIndex.h
+++ b/alib2data/src/indexes/stringology/CompressedBitParallelIndex.h
@@ -114,8 +114,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef CompressedBitParallelIndex < > normalized_type;
 };
 
 } /* namespace stringology */
@@ -222,7 +220,7 @@ public:
 };
 
 template < class SymbolType >
-struct normalize < indexes::stringology::CompressedBitParallelIndex < SymbolType >, typename std::enable_if < ! std::is_same < indexes::stringology::CompressedBitParallelIndex < SymbolType >, indexes::stringology::CompressedBitParallelIndex < > >::value >::type > {
+struct normalize < indexes::stringology::CompressedBitParallelIndex < SymbolType > > {
 	static indexes::stringology::CompressedBitParallelIndex < > eval ( indexes::stringology::CompressedBitParallelIndex < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 
diff --git a/alib2data/src/indexes/stringology/FactorOracleAutomaton.h b/alib2data/src/indexes/stringology/FactorOracleAutomaton.h
index f8ae660d42..c6ecbd8740 100644
--- a/alib2data/src/indexes/stringology/FactorOracleAutomaton.h
+++ b/alib2data/src/indexes/stringology/FactorOracleAutomaton.h
@@ -102,8 +102,6 @@ public:
 	explicit operator automaton::DFA < SymbolType, unsigned > ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef FactorOracleAutomaton < > normalized_type;
 };
 
 } /* namespace stringology */
@@ -177,7 +175,7 @@ object::ObjectBase* FactorOracleAutomaton < SymbolType >::inc() && {
 namespace core {
 
 template < class SymbolType >
-struct normalize < indexes::stringology::FactorOracleAutomaton < SymbolType >, typename std::enable_if < ! std::is_same < indexes::stringology::FactorOracleAutomaton < SymbolType >, indexes::stringology::FactorOracleAutomaton < > >::value >::type > {
+struct normalize < indexes::stringology::FactorOracleAutomaton < SymbolType > > {
 	static indexes::stringology::FactorOracleAutomaton < > eval ( indexes::stringology::FactorOracleAutomaton < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( std::move ( value ).getAutomaton ( ) ).getInputAlphabet ( ) );
 		ext::set < unsigned > states = std::move ( std::move ( value ).getAutomaton ( ) ).getStates ( );
diff --git a/alib2data/src/indexes/stringology/PositionHeap.h b/alib2data/src/indexes/stringology/PositionHeap.h
index a3720e30c4..eb9a8a0725 100644
--- a/alib2data/src/indexes/stringology/PositionHeap.h
+++ b/alib2data/src/indexes/stringology/PositionHeap.h
@@ -124,8 +124,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef PositionHeap < > normalized_type;
 };
 
 } /* namespace stringology */
@@ -249,13 +247,6 @@ public:
 	}
 };
 
-template < >
-struct normalize < indexes::stringology::PositionHeap < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > > {
-	static indexes::stringology::PositionHeap < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > && eval ( indexes::stringology::PositionHeap < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > && source ) {
-		return std::move ( source );
-	}
-};
-
 template < class SymbolType, class RankType >
 struct normalize < indexes::stringology::PositionHeap < common::ranked_symbol < SymbolType, RankType > > > {
 	static indexes::stringology::PositionHeap < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > eval ( indexes::stringology::PositionHeap < common::ranked_symbol < SymbolType, RankType > > && source ) {
@@ -268,7 +259,7 @@ struct normalize < indexes::stringology::PositionHeap < common::ranked_symbol <
 };
 
 template < class SymbolType >
-struct normalize < indexes::stringology::PositionHeap < SymbolType >, typename std::enable_if < ! std::is_same < indexes::stringology::PositionHeap < SymbolType >, indexes::stringology::PositionHeap < > >::value >::type > {
+struct normalize < indexes::stringology::PositionHeap < SymbolType > > {
 	static indexes::stringology::PositionHeap < > eval ( indexes::stringology::PositionHeap < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 		ext::trie < DefaultSymbolType, unsigned > trie = indexes::IndexesNormalize::normalizeTrie ( std::move ( value ).getRoot ( ) );
diff --git a/alib2data/src/indexes/stringology/SuffixArray.h b/alib2data/src/indexes/stringology/SuffixArray.h
index 567923f061..e596666215 100644
--- a/alib2data/src/indexes/stringology/SuffixArray.h
+++ b/alib2data/src/indexes/stringology/SuffixArray.h
@@ -186,11 +186,6 @@ public:
 	 * @copydoc alib::ObjectBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized index.
-	 */
-	typedef SuffixArray < > normalized_type;
 };
 
 } /* namespace stringology */
@@ -279,7 +274,7 @@ namespace core {
  * \returns new instance of the index with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType >
-struct normalize < indexes::stringology::SuffixArray < SymbolType >, typename std::enable_if < ! std::is_same < indexes::stringology::SuffixArray < SymbolType >, indexes::stringology::SuffixArray < > >::value >::type > {
+struct normalize < indexes::stringology::SuffixArray < SymbolType > > {
 	static indexes::stringology::SuffixArray < > eval ( indexes::stringology::SuffixArray < SymbolType > && value ) {
 		string::LinearString < DefaultSymbolType > string = normalize < string::LinearString < SymbolType > >::eval ( std::move ( value ).getString ( ) );
 
diff --git a/alib2data/src/indexes/stringology/SuffixAutomaton.h b/alib2data/src/indexes/stringology/SuffixAutomaton.h
index 7f28b6d8b7..a5c67c9b76 100644
--- a/alib2data/src/indexes/stringology/SuffixAutomaton.h
+++ b/alib2data/src/indexes/stringology/SuffixAutomaton.h
@@ -175,11 +175,6 @@ public:
 	 * @copydoc alib::ObjectBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized index.
-	 */
-	typedef SuffixAutomaton < > normalized_type;
 };
 
 } /* namespace stringology */
@@ -258,7 +253,7 @@ namespace core {
  * \returns new instance of the index with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType >
-struct normalize < indexes::stringology::SuffixAutomaton < SymbolType >, typename std::enable_if < ! std::is_same < indexes::stringology::SuffixAutomaton < SymbolType >, indexes::stringology::SuffixAutomaton < > >::value >::type > {
+struct normalize < indexes::stringology::SuffixAutomaton < SymbolType > > {
 	static indexes::stringology::SuffixAutomaton < > eval ( indexes::stringology::SuffixAutomaton < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( std::move ( value ).getAutomaton ( ) ).getInputAlphabet ( ) );
 		ext::set < unsigned > states = std::move ( std::move ( value ).getAutomaton ( ) ).getStates ( );
diff --git a/alib2data/src/indexes/stringology/SuffixTrie.h b/alib2data/src/indexes/stringology/SuffixTrie.h
index f635c3f5ff..dca3531c74 100644
--- a/alib2data/src/indexes/stringology/SuffixTrie.h
+++ b/alib2data/src/indexes/stringology/SuffixTrie.h
@@ -197,11 +197,6 @@ public:
 	 * @copydoc alib::ObjectBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized index.
-	 */
-	typedef SuffixTrie < > normalized_type;
 };
 
 } /* namespace stringology */
@@ -358,7 +353,7 @@ public:
  * \returns new instance of the index with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType >
-struct normalize < indexes::stringology::SuffixTrie < SymbolType >, typename std::enable_if < ! std::is_same < indexes::stringology::SuffixTrie < SymbolType >, indexes::stringology::SuffixTrie < > >::value >::type > {
+struct normalize < indexes::stringology::SuffixTrie < SymbolType > > {
 	static indexes::stringology::SuffixTrie < > eval ( indexes::stringology::SuffixTrie < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlpahet ( ) );
 		ext::trie < DefaultSymbolType, ext::variant < void, unsigned > > trie = indexes::IndexesNormalize::normalizeTrie ( std::move ( value ).getRoot ( ) );
diff --git a/alib2data/src/label/FailStateLabel.h b/alib2data/src/label/FailStateLabel.h
index 56e23f9598..2cef0752ba 100644
--- a/alib2data/src/label/FailStateLabel.h
+++ b/alib2data/src/label/FailStateLabel.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual LabelBase * inc ( ) &&;
-
-	typedef FailStateLabel normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/label/FinalStateLabel.h b/alib2data/src/label/FinalStateLabel.h
index adbb34cc93..73cdc01852 100644
--- a/alib2data/src/label/FinalStateLabel.h
+++ b/alib2data/src/label/FinalStateLabel.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual LabelBase * inc ( ) &&;
-
-	typedef FinalStateLabel normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/label/HexavigesimalLabel.h b/alib2data/src/label/HexavigesimalLabel.h
index 2f59d87ab9..e581e7fd4f 100644
--- a/alib2data/src/label/HexavigesimalLabel.h
+++ b/alib2data/src/label/HexavigesimalLabel.h
@@ -52,8 +52,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual LabelBase * inc ( ) &&;
-
-	typedef HexavigesimalLabel normalized_type;
 };
 
 } /* namespace label */
diff --git a/alib2data/src/label/InitialStateLabel.h b/alib2data/src/label/InitialStateLabel.h
index 54cc254cf7..c1978b93c9 100644
--- a/alib2data/src/label/InitialStateLabel.h
+++ b/alib2data/src/label/InitialStateLabel.h
@@ -47,8 +47,6 @@ public:
 	static inline typename std::enable_if < ! std::is_integral < Base >::value, Base >::type instance ( );
 
 	virtual LabelBase * inc ( ) &&;
-
-	typedef InitialStateLabel normalized_type;
 };
 
 template < typename Base >
diff --git a/alib2data/src/label/ObjectLabel.h b/alib2data/src/label/ObjectLabel.h
index f07fcbd40d..aba4eeee15 100644
--- a/alib2data/src/label/ObjectLabel.h
+++ b/alib2data/src/label/ObjectLabel.h
@@ -49,8 +49,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual LabelBase * inc ( ) &&;
-
-	typedef ObjectLabel normalized_type;
 };
 
 } /* namespace label */
diff --git a/alib2data/src/label/PrimitiveLabel.h b/alib2data/src/label/PrimitiveLabel.h
index 8da5811861..e3452a5299 100644
--- a/alib2data/src/label/PrimitiveLabel.h
+++ b/alib2data/src/label/PrimitiveLabel.h
@@ -51,8 +51,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual LabelBase * inc ( ) &&;
-
-	typedef PrimitiveLabel normalized_type;
 };
 
 } /* namespace label */
diff --git a/alib2data/src/label/UniqueLabel.h b/alib2data/src/label/UniqueLabel.h
index bda4e39196..94ea914cf3 100644
--- a/alib2data/src/label/UniqueLabel.h
+++ b/alib2data/src/label/UniqueLabel.h
@@ -54,8 +54,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual LabelBase * inc ( ) &&;
-
-	typedef UniqueLabel normalized_type;
 };
 
 } /* namespace label */
diff --git a/alib2data/src/regexp/formal/FormalRegExp.h b/alib2data/src/regexp/formal/FormalRegExp.h
index bf7d257a9c..29e94935eb 100644
--- a/alib2data/src/regexp/formal/FormalRegExp.h
+++ b/alib2data/src/regexp/formal/FormalRegExp.h
@@ -182,11 +182,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized expression.
-	 */
-	typedef FormalRegExp < > normalized_type;
 };
 
 } /* namespace regexp */
@@ -320,7 +315,7 @@ public:
  * \returns new instance of the expression with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType >
-struct normalize < regexp::FormalRegExp < SymbolType >, typename std::enable_if < ! std::is_same < regexp::FormalRegExp < SymbolType >, regexp::FormalRegExp < > >::value >::type > {
+struct normalize < regexp::FormalRegExp < SymbolType > > {
 	static regexp::FormalRegExp < > eval ( regexp::FormalRegExp < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExp.h b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
index 3b3c6354e8..786455f205 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExp.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExp.h
@@ -184,11 +184,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized expression.
-	 */
-	typedef UnboundedRegExp < > normalized_type;
 };
 
 } /* namespace regexp */
@@ -322,7 +317,7 @@ public:
  * \returns new instance of the expression with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType >
-struct normalize < regexp::UnboundedRegExp < SymbolType >, typename std::enable_if < ! std::is_same < regexp::UnboundedRegExp < SymbolType >, regexp::UnboundedRegExp < > >::value >::type > {
+struct normalize < regexp::UnboundedRegExp < SymbolType > > {
 	static regexp::UnboundedRegExp < > eval ( regexp::UnboundedRegExp < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 
diff --git a/alib2data/src/rte/formal/FormalRTE.h b/alib2data/src/rte/formal/FormalRTE.h
index 93896b967b..b2f22dbe25 100644
--- a/alib2data/src/rte/formal/FormalRTE.h
+++ b/alib2data/src/rte/formal/FormalRTE.h
@@ -286,11 +286,6 @@ public:
 	 * @copydoc alib::GrammarBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized expression.
-	 */
-	typedef FormalRTE < > normalized_type;
 };
 
 template < class SymbolType, class RankType >
@@ -466,7 +461,7 @@ public:
  * \returns new instance of the expression with default template parameters or unmodified instance if the template parameters were already the default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < rte::FormalRTE < SymbolType, RankType >, typename std::enable_if < ! std::is_same < rte::FormalRTE < SymbolType, RankType >, rte::FormalRTE < > >::value >::type > {
+struct normalize < rte::FormalRTE < SymbolType, RankType > > {
 	static rte::FormalRTE < > eval ( rte::FormalRTE < SymbolType, RankType > && value ) {
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > constants = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getSubstitutionAlphabet ( ) );
diff --git a/alib2data/src/string/CyclicString.h b/alib2data/src/string/CyclicString.h
index a9da922e63..17b2acbb03 100644
--- a/alib2data/src/string/CyclicString.h
+++ b/alib2data/src/string/CyclicString.h
@@ -205,11 +205,6 @@ public:
 	 * @copydoc alib::ObjectBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized string.
-	 */
-	typedef CyclicString < > normalized_type;
 };
 
 } /* namespace string */
@@ -366,7 +361,7 @@ public:
  * \returns new instance of the string with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < string::CyclicString < SymbolType >, typename std::enable_if < ! std::is_same < string::CyclicString < SymbolType >, string::CyclicString < > >::value >::type > {
+struct normalize < string::CyclicString < SymbolType > > {
 	static string::CyclicString < > eval ( string::CyclicString < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 		ext::vector < DefaultSymbolType > content = alphabet::SymbolNormalize::normalizeSymbols ( std::move ( value ).getContent ( ) );
diff --git a/alib2data/src/string/Epsilon.h b/alib2data/src/string/Epsilon.h
index 8c5b2b128f..a63d0f7c7b 100644
--- a/alib2data/src/string/Epsilon.h
+++ b/alib2data/src/string/Epsilon.h
@@ -160,11 +160,6 @@ public:
 	 * @copydoc alib::ObjectBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized string.
-	 */
-	typedef Epsilon < > normalized_type;
 };
 
 template < class SymbolType >
@@ -274,7 +269,7 @@ public:
  * \returns new instance of the string with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < string::Epsilon < SymbolType >, typename std::enable_if < ! std::is_same < string::Epsilon < SymbolType >, string::Epsilon < > >::value >::type > {
+struct normalize < string::Epsilon < SymbolType > > {
 	static string::Epsilon < > eval ( string::Epsilon < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 		return string::Epsilon < > ( std::move ( alphabet ) );
diff --git a/alib2data/src/string/LinearString.h b/alib2data/src/string/LinearString.h
index 38ce038ff8..6e38d9c5a3 100644
--- a/alib2data/src/string/LinearString.h
+++ b/alib2data/src/string/LinearString.h
@@ -209,11 +209,6 @@ public:
 	 * @copydoc alib::ObjectBase::inc()
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
-
-	/**
-	 * Type of normalized string.
-	 */
-	typedef LinearString < > normalized_type;
 };
 
 } /* namespace string */
@@ -382,7 +377,7 @@ public:
  * \returns new instance of the string with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < string::LinearString < SymbolType >, typename std::enable_if < ! std::is_same < string::LinearString < SymbolType >, string::LinearString < > >::value >::type > {
+struct normalize < string::LinearString < SymbolType > > {
 	static string::LinearString < > eval ( string::LinearString < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 		ext::vector < DefaultSymbolType > content = alphabet::SymbolNormalize::normalizeSymbols ( std::move ( value ).getContent ( ) );
diff --git a/alib2data/src/tree/ranked/PostfixRankedTree.h b/alib2data/src/tree/ranked/PostfixRankedTree.h
index e399d4d13b..f574d49560 100644
--- a/alib2data/src/tree/ranked/PostfixRankedTree.h
+++ b/alib2data/src/tree/ranked/PostfixRankedTree.h
@@ -230,11 +230,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized tree.
-	 */
-	typedef PostfixRankedTree < > normalized_type;
-
 	/**
 	 * \brief Creates a new instance of the string from a linear representation of a tree
 	 *
@@ -426,7 +421,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::PostfixRankedTree < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::PostfixRankedTree < SymbolType, RankType >, tree::PostfixRankedTree < > >::value >::type > {
+struct normalize < tree::PostfixRankedTree < SymbolType, RankType > > {
 	static tree::PostfixRankedTree < > eval ( tree::PostfixRankedTree < SymbolType, RankType > && value ) {
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
 		ext::vector < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > content = alphabet::SymbolNormalize::normalizeRankedSymbols ( std::move ( value ).getContent ( ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
index 01af867737..6768c945d7 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarNonlinearPattern.h
@@ -398,11 +398,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef PrefixRankedBarNonlinearPattern < > normalized_type;
-
 	/**
 	 * \brief Creates a new instance of the string from a linear representation of a tree
 	 *
@@ -823,7 +818,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType >, tree::PrefixRankedBarNonlinearPattern < > >::value >::type > {
+struct normalize < tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > > {
 	static tree::PrefixRankedBarNonlinearPattern < > eval ( tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > && value ) {
 		common::ranked_symbol < DefaultSymbolType, DefaultRankType > variablesBars = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ).getVariablesBar ( ) );
 		common::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ).getSubtreeWildcard ( ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
index 4889772538..038f9add79 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarPattern.h
@@ -327,11 +327,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef PrefixRankedBarPattern < > normalized_type;
-
 	/**
 	 * \brief Creates a new instance of the string from a linear representation of a tree
 	 *
@@ -666,7 +661,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::PrefixRankedBarPattern < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::PrefixRankedBarPattern < SymbolType, RankType >, tree::PrefixRankedBarPattern < > >::value >::type > {
+struct normalize < tree::PrefixRankedBarPattern < SymbolType, RankType > > {
 	static tree::PrefixRankedBarPattern < > eval ( tree::PrefixRankedBarPattern < SymbolType, RankType > && value ) {
 		common::ranked_symbol < DefaultSymbolType, DefaultRankType > variablesBars = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ).getVariablesBar ( ) );
 		common::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ).getSubtreeWildcard ( ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedBarTree.h b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
index 7891e11549..6ac150c1e5 100644
--- a/alib2data/src/tree/ranked/PrefixRankedBarTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedBarTree.h
@@ -273,11 +273,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized tree.
-	 */
-	typedef PrefixRankedBarTree < > normalized_type;
-
 	/**
 	 * \brief Creates a new instance of the string from a linear representation of a tree
 	 *
@@ -528,7 +523,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::PrefixRankedBarTree < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::PrefixRankedBarTree < SymbolType, RankType >, tree::PrefixRankedBarTree < > >::value >::type > {
+struct normalize < tree::PrefixRankedBarTree < SymbolType, RankType > > {
 	static tree::PrefixRankedBarTree < > eval ( tree::PrefixRankedBarTree < SymbolType, RankType > && value ) {
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > bars = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getBars ( ) );
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
index 023dcb6873..733509e17f 100644
--- a/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedNonlinearPattern.h
@@ -312,11 +312,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef PrefixRankedNonlinearPattern < > normalized_type;
-
 	/**
 	 * \brief Creates a new instance of the string from a linear representation of a tree
 	 *
@@ -623,7 +618,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::PrefixRankedNonlinearPattern < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::PrefixRankedNonlinearPattern < SymbolType, RankType >, tree::PrefixRankedNonlinearPattern < > >::value >::type > {
+struct normalize < tree::PrefixRankedNonlinearPattern < SymbolType, RankType > > {
 	static tree::PrefixRankedNonlinearPattern < > eval ( tree::PrefixRankedNonlinearPattern < SymbolType, RankType > && value ) {
 		common::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ).getSubtreeWildcard ( ) );
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > nonlinearAlphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getNonlinearVariables ( ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedPattern.h b/alib2data/src/tree/ranked/PrefixRankedPattern.h
index 73676d3057..5837d5b12c 100644
--- a/alib2data/src/tree/ranked/PrefixRankedPattern.h
+++ b/alib2data/src/tree/ranked/PrefixRankedPattern.h
@@ -261,11 +261,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef PrefixRankedPattern < > normalized_type;
-
 	/**
 	 * \brief Creates a new instance of the string from a linear representation of a tree
 	 *
@@ -498,7 +493,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::PrefixRankedPattern < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::PrefixRankedPattern < SymbolType, RankType >, tree::PrefixRankedPattern < > >::value >::type > {
+struct normalize < tree::PrefixRankedPattern < SymbolType, RankType > > {
 	static tree::PrefixRankedPattern < > eval ( tree::PrefixRankedPattern < SymbolType, RankType > && value ) {
 		common::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ).getSubtreeWildcard ( ) );
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
diff --git a/alib2data/src/tree/ranked/PrefixRankedTree.h b/alib2data/src/tree/ranked/PrefixRankedTree.h
index 568e402f0c..c55f72c1ec 100644
--- a/alib2data/src/tree/ranked/PrefixRankedTree.h
+++ b/alib2data/src/tree/ranked/PrefixRankedTree.h
@@ -236,11 +236,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized tree.
-	 */
-	typedef PrefixRankedTree < > normalized_type;
-
 	/**
 	 * \brief Creates a new instance of the string from a linear representation of a tree
 	 *
@@ -435,7 +430,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::PrefixRankedTree < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::PrefixRankedTree < SymbolType, RankType >, tree::PrefixRankedTree < > >::value >::type > {
+struct normalize < tree::PrefixRankedTree < SymbolType, RankType > > {
 	static tree::PrefixRankedTree < > eval ( tree::PrefixRankedTree < SymbolType, RankType > && value ) {
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
 		ext::vector < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > content = alphabet::SymbolNormalize::normalizeRankedSymbols ( std::move ( value ).getContent ( ) );
diff --git a/alib2data/src/tree/ranked/RankedNonlinearPattern.h b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
index 3917aab71c..5e876de085 100644
--- a/alib2data/src/tree/ranked/RankedNonlinearPattern.h
+++ b/alib2data/src/tree/ranked/RankedNonlinearPattern.h
@@ -286,11 +286,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef RankedNonlinearPattern < > normalized_type;
-
 	/**
 	 * Nice printer of the tree natural representation
 	 *
@@ -567,7 +562,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::RankedNonlinearPattern < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::RankedNonlinearPattern < SymbolType, RankType >, tree::RankedNonlinearPattern < > >::value >::type > {
+struct normalize < tree::RankedNonlinearPattern < SymbolType, RankType > > {
 	static tree::RankedNonlinearPattern < > eval ( tree::RankedNonlinearPattern < SymbolType, RankType > && value ) {
 		common::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ).getSubtreeWildcard ( ) );
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > nonlinearAlphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getNonlinearVariables ( ) );
diff --git a/alib2data/src/tree/ranked/RankedPattern.h b/alib2data/src/tree/ranked/RankedPattern.h
index c6ccde7ebe..e07942433f 100644
--- a/alib2data/src/tree/ranked/RankedPattern.h
+++ b/alib2data/src/tree/ranked/RankedPattern.h
@@ -256,11 +256,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef RankedPattern < > normalized_type;
-
 	/**
 	 * Nice printer of the tree natural representation
 	 *
@@ -478,7 +473,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::RankedPattern < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::RankedPattern < SymbolType, RankType >, tree::RankedPattern < > >::value >::type > {
+struct normalize < tree::RankedPattern < SymbolType, RankType > > {
 	static tree::RankedPattern < > eval ( tree::RankedPattern < SymbolType, RankType > && value ) {
 		common::ranked_symbol < DefaultSymbolType, DefaultRankType > wildcard = alphabet::SymbolNormalize::normalizeRankedSymbol ( std::move ( value ).getSubtreeWildcard ( ) );
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
diff --git a/alib2data/src/tree/ranked/RankedTree.h b/alib2data/src/tree/ranked/RankedTree.h
index 9a86c2be34..e88a222db9 100644
--- a/alib2data/src/tree/ranked/RankedTree.h
+++ b/alib2data/src/tree/ranked/RankedTree.h
@@ -242,11 +242,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized tree.
-	 */
-	typedef RankedTree < > normalized_type;
-
 	/**
 	 * Hierarchical printer of the tree.
 	 *
@@ -432,7 +427,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType, class RankType >
-struct normalize < tree::RankedTree < SymbolType, RankType >, typename std::enable_if < ! std::is_same < tree::RankedTree < SymbolType, RankType >, tree::RankedTree < > >::value >::type > {
+struct normalize < tree::RankedTree < SymbolType, RankType > > {
 	static tree::RankedTree < > eval ( tree::RankedTree < SymbolType, RankType > && value ) {
 		ext::set < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > alphabet = alphabet::SymbolNormalize::normalizeRankedAlphabet ( std::move ( value ).getAlphabet ( ) );
 		ext::tree < common::ranked_symbol < DefaultSymbolType, DefaultRankType > > content = tree::TreeNormalize::normalizeRankedTree ( std::move ( value ).getContent ( ) );
diff --git a/alib2data/src/tree/unranked/PrefixBarTree.h b/alib2data/src/tree/unranked/PrefixBarTree.h
index 0c1a55f986..dcc4a7042b 100644
--- a/alib2data/src/tree/unranked/PrefixBarTree.h
+++ b/alib2data/src/tree/unranked/PrefixBarTree.h
@@ -261,11 +261,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized tree.
-	 */
-	typedef PrefixBarTree < > normalized_type;
-
 	/**
 	 * \brief Creates a new instance of the string from a linear representation of a tree
 	 *
@@ -493,7 +488,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < tree::PrefixBarTree < SymbolType >, typename std::enable_if < ! std::is_same < tree::PrefixBarTree < SymbolType >, tree::PrefixBarTree < > >::value >::type > {
+struct normalize < tree::PrefixBarTree < SymbolType > > {
 	static tree::PrefixBarTree < > eval ( tree::PrefixBarTree < SymbolType > && value ) {
 		DefaultSymbolType bar = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( value ).getBar ( ) );
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
diff --git a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
index f6f2a92aef..610807f8ed 100644
--- a/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedNonlinearPattern.h
@@ -275,11 +275,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef UnrankedNonlinearPattern < > normalized_type;
-
 	/**
 	 * Nice printer of the tree natural representation
 	 *
@@ -537,7 +532,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < tree::UnrankedNonlinearPattern < SymbolType >, typename std::enable_if < ! std::is_same < tree::UnrankedNonlinearPattern < SymbolType >, tree::UnrankedNonlinearPattern < > >::value >::type > {
+struct normalize < tree::UnrankedNonlinearPattern < SymbolType > > {
 	static tree::UnrankedNonlinearPattern < > eval ( tree::UnrankedNonlinearPattern < SymbolType > && value ) {
 		DefaultSymbolType wildcard = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( value ).getSubtreeWildcard ( ) );
 		ext::set < DefaultSymbolType > nonlinearAlphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getNonlinearVariables ( ) );
diff --git a/alib2data/src/tree/unranked/UnrankedPattern.h b/alib2data/src/tree/unranked/UnrankedPattern.h
index 5303511294..f1e85f9ec6 100644
--- a/alib2data/src/tree/unranked/UnrankedPattern.h
+++ b/alib2data/src/tree/unranked/UnrankedPattern.h
@@ -246,11 +246,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef UnrankedPattern < > normalized_type;
-
 	/**
 	 * Nice printer of the tree natural representation
 	 *
@@ -454,7 +449,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < tree::UnrankedPattern < SymbolType >, typename std::enable_if < ! std::is_same < tree::UnrankedPattern < SymbolType >, tree::UnrankedPattern < > >::value >::type > {
+struct normalize < tree::UnrankedPattern < SymbolType > > {
 	static tree::UnrankedPattern < > eval ( tree::UnrankedPattern < SymbolType > && value ) {
 		DefaultSymbolType wildcard = alphabet::SymbolNormalize::normalizeSymbol ( std::move ( value ).getSubtreeWildcard ( ) );
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
diff --git a/alib2data/src/tree/unranked/UnrankedTree.h b/alib2data/src/tree/unranked/UnrankedTree.h
index d3742c9145..566dd64f2e 100644
--- a/alib2data/src/tree/unranked/UnrankedTree.h
+++ b/alib2data/src/tree/unranked/UnrankedTree.h
@@ -224,11 +224,6 @@ public:
 	 */
 	virtual object::ObjectBase * inc ( ) && override;
 
-	/**
-	 * Type of normalized pattern.
-	 */
-	typedef UnrankedTree < > normalized_type;
-
 	/**
 	 * Nice printer of the tree natural representation
 	 *
@@ -398,7 +393,7 @@ public:
  * \returns new instance of the tree with default template parameters or unmodified instance if the template parameters were already default ones
  */
 template < class SymbolType >
-struct normalize < tree::UnrankedTree < SymbolType >, typename std::enable_if < ! std::is_same < tree::UnrankedTree < SymbolType >, tree::UnrankedTree < > >::value >::type > {
+struct normalize < tree::UnrankedTree < SymbolType > > {
 	static tree::UnrankedTree < > eval ( tree::UnrankedTree < SymbolType > && value ) {
 		ext::set < DefaultSymbolType > alphabet = alphabet::SymbolNormalize::normalizeAlphabet ( std::move ( value ).getAlphabet ( ) );
 		ext::tree < DefaultSymbolType > content = tree::TreeNormalize::normalizeTree ( std::move ( value ).getContent ( ) );
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.h b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.h
index 2bbc688bc8..8a0928bac2 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.h
+++ b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.h
@@ -90,8 +90,6 @@ public:
 	}
 
 	object::ObjectBase * inc ( ) && override;
-
-	typedef AdjacencyListDirectedGraph normalized_type;
 };
 
 } // namespace graph
diff --git a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.h b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.h
index 4a344aebb0..14f62480b9 100644
--- a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.h
+++ b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.h
@@ -93,8 +93,6 @@ public:
 	}
 
 	object::ObjectBase * inc ( ) && override;
-
-	typedef AdjacencyMatrixDirectedGraph normalized_type;
 };
 
 } // namespace graph
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.h b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.h
index 70cc934bf2..bc81187a94 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.h
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.h
@@ -87,8 +87,6 @@ public:
 	}
 
 	object::ObjectBase * inc ( ) && override;
-
-	typedef AdjacencyListUndirectedGraph normalized_type;
 };
 
 } // namespace graph
diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.h b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.h
index a8b56cf1ac..528d4d7279 100644
--- a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.h
+++ b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.h
@@ -90,8 +90,6 @@ public:
 	}
 
 	object::ObjectBase * inc ( ) && override;
-
-	typedef AdjacencyMatrixUndirectedGraph normalized_type;
 };
 
 } // namespace graph
diff --git a/alib2data_experimental/src/indexes/stringology/CompactSuffixAutomatonTerminatingSymbol.h b/alib2data_experimental/src/indexes/stringology/CompactSuffixAutomatonTerminatingSymbol.h
index 7a2ec0d3df..c6ca7cfce6 100644
--- a/alib2data_experimental/src/indexes/stringology/CompactSuffixAutomatonTerminatingSymbol.h
+++ b/alib2data_experimental/src/indexes/stringology/CompactSuffixAutomatonTerminatingSymbol.h
@@ -156,8 +156,6 @@ public:
 
 	virtual object::ObjectBase * inc ( ) &&;
 
-	typedef CompactSuffixAutomatonTerminatingSymbol < > normalized_type;
-
 };
 
 template < class SymbolType >
@@ -223,7 +221,7 @@ object::ObjectBase* CompactSuffixAutomatonTerminatingSymbol < SymbolType >::inc(
 namespace core {
 
 template < class SymbolType >
-struct normalize < indexes::stringology::CompactSuffixAutomatonTerminatingSymbol < SymbolType >, typename std::enable_if < ! std::is_same < indexes::stringology::CompactSuffixAutomatonTerminatingSymbol < SymbolType >, indexes::stringology::CompactSuffixAutomatonTerminatingSymbol < > >::value >::type > {
+struct normalize < indexes::stringology::CompactSuffixAutomatonTerminatingSymbol < SymbolType > > {
 	static indexes::stringology::CompactSuffixAutomatonTerminatingSymbol < > eval ( indexes::stringology::CompactSuffixAutomatonTerminatingSymbol < SymbolType > && value ) {
 		indexes::stringology::CompactSuffixAutomatonTerminatingSymbol < DefaultStateType > res;
 		res.setString ( alphabet::SymbolNormalize::normalizeSymbols ( std::move ( value ).getString ( ) ) );
diff --git a/alib2data_experimental/src/indexes/stringology/SuffixTrieTerminatingSymbol.h b/alib2data_experimental/src/indexes/stringology/SuffixTrieTerminatingSymbol.h
index e645650589..43c087946f 100644
--- a/alib2data_experimental/src/indexes/stringology/SuffixTrieTerminatingSymbol.h
+++ b/alib2data_experimental/src/indexes/stringology/SuffixTrieTerminatingSymbol.h
@@ -98,8 +98,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef SuffixTrieTerminatingSymbol normalized_type;
 };
 
 } /* namespace tree */
diff --git a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.h b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.h
index 25f652a9eb..5947d522e6 100644
--- a/alib2data_experimental/src/string/LinearStringTerminatingSymbol.h
+++ b/alib2data_experimental/src/string/LinearStringTerminatingSymbol.h
@@ -85,8 +85,6 @@ public:
 	virtual explicit operator std::string ( ) const;
 
 	virtual object::ObjectBase * inc ( ) &&;
-
-	typedef LinearStringTerminatingSymbol normalized_type;
 };
 
 } /* namespace string */
-- 
GitLab