diff --git a/alib2data/src/regexp/formal/FormalRegExpAlternation.h b/alib2data/src/regexp/formal/FormalRegExpAlternation.h
index 3bbb48af99bb44aaa9982483b89fcb5730ac3943..b85a7b4fff01e21af0bd79f558f29965faab51ba 100644
--- a/alib2data/src/regexp/formal/FormalRegExpAlternation.h
+++ b/alib2data/src/regexp/formal/FormalRegExpAlternation.h
@@ -35,12 +35,12 @@ public:
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
 	 */
-	FormalRegExpElement < SymbolType > * clone ( ) const override;
+	FormalRegExpAlternation < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc FormalRegExpElement::plunder() const
 	 */
-	FormalRegExpElement < SymbolType > * plunder ( ) && override;
+	FormalRegExpAlternation < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
@@ -157,12 +157,12 @@ void FormalRegExpAlternation < SymbolType >::setRightElement ( const FormalRegEx
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpAlternation < SymbolType >::clone ( ) const {
+FormalRegExpAlternation < SymbolType > * FormalRegExpAlternation < SymbolType >::clone ( ) const {
 	return new FormalRegExpAlternation ( * this );
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpAlternation < SymbolType >::plunder ( ) && {
+FormalRegExpAlternation < SymbolType > * FormalRegExpAlternation < SymbolType >::plunder ( ) && {
 	return new FormalRegExpAlternation ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/formal/FormalRegExpConcatenation.h b/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
index 06b17b62b1d33b552f919cebb8df7148d885c3fc..9e701f36b8ec9e26b620481719bb239f832359b3 100644
--- a/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
+++ b/alib2data/src/regexp/formal/FormalRegExpConcatenation.h
@@ -34,12 +34,12 @@ public:
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
 	 */
-	FormalRegExpElement < SymbolType > * clone ( ) const override;
+	FormalRegExpConcatenation < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc FormalRegExpElement::plunder() const
 	 */
-	FormalRegExpElement < SymbolType > * plunder ( ) && override;
+	FormalRegExpConcatenation < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
@@ -153,10 +153,15 @@ void FormalRegExpConcatenation < SymbolType >::setRightElement ( const FormalReg
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpConcatenation < SymbolType >::clone ( ) const {
+FormalRegExpConcatenation < SymbolType > * FormalRegExpConcatenation < SymbolType >::clone ( ) const {
 	return new FormalRegExpConcatenation ( * this );
 }
 
+template < class SymbolType >
+FormalRegExpConcatenation < SymbolType > * FormalRegExpConcatenation < SymbolType >::plunder ( ) && {
+	return new FormalRegExpConcatenation ( std::move ( * this ) );
+}
+
 template < class SymbolType >
 std::smart_ptr < UnboundedRegExpElement < SymbolType > > FormalRegExpConcatenation < SymbolType >::asUnbounded ( ) const {
 	UnboundedRegExpConcatenation < SymbolType > * res = new UnboundedRegExpConcatenation < SymbolType > ( );
@@ -167,11 +172,6 @@ std::smart_ptr < UnboundedRegExpElement < SymbolType > > FormalRegExpConcatenati
 	return std::smart_ptr < UnboundedRegExpElement < SymbolType > > ( res );
 }
 
-template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpConcatenation < SymbolType >::plunder ( ) && {
-	return new FormalRegExpConcatenation ( std::move ( * this ) );
-}
-
 template < class SymbolType >
 int FormalRegExpConcatenation < SymbolType >::compare ( const FormalRegExpConcatenation < SymbolType > & other ) const {
 	int res = getLeftElement ( ).compare ( other.getLeftElement ( ) );
diff --git a/alib2data/src/regexp/formal/FormalRegExpEmpty.h b/alib2data/src/regexp/formal/FormalRegExpEmpty.h
index 8f340badda933d17fba8d6a23aae1a307c4145e2..0b946e8d31aa8b7f15d71aa2432b50ccec9084e5 100644
--- a/alib2data/src/regexp/formal/FormalRegExpEmpty.h
+++ b/alib2data/src/regexp/formal/FormalRegExpEmpty.h
@@ -29,12 +29,12 @@ public:
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
 	 */
-	FormalRegExpElement < SymbolType > * clone ( ) const override;
+	FormalRegExpEmpty < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc FormalRegExpElement::plunder() const
 	 */
-	FormalRegExpElement < SymbolType > * plunder ( ) && override;
+	FormalRegExpEmpty < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
@@ -84,12 +84,12 @@ FormalRegExpEmpty < SymbolType >::FormalRegExpEmpty ( ) {
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpEmpty < SymbolType >::clone ( ) const {
+FormalRegExpEmpty < SymbolType > * FormalRegExpEmpty < SymbolType >::clone ( ) const {
 	return new FormalRegExpEmpty ( * this );
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpEmpty < SymbolType >::plunder ( ) && {
+FormalRegExpEmpty < SymbolType > * FormalRegExpEmpty < SymbolType >::plunder ( ) && {
 	return new FormalRegExpEmpty ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/formal/FormalRegExpEpsilon.h b/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
index a1aac2390f407bb5b5221c3b8074d75b31d3db35..2122949d6346b2daa1bb72a46ad6ef0c1c01f94c 100644
--- a/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
+++ b/alib2data/src/regexp/formal/FormalRegExpEpsilon.h
@@ -29,12 +29,12 @@ public:
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
 	 */
-	FormalRegExpElement < SymbolType > * clone ( ) const override;
+	FormalRegExpEpsilon < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc FormalRegExpElement::plunder() const
 	 */
-	FormalRegExpElement < SymbolType > * plunder ( ) && override;
+	FormalRegExpEpsilon < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
@@ -84,12 +84,12 @@ FormalRegExpEpsilon < SymbolType >::FormalRegExpEpsilon ( ) {
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpEpsilon < SymbolType >::clone ( ) const {
+FormalRegExpEpsilon < SymbolType > * FormalRegExpEpsilon < SymbolType >::clone ( ) const {
 	return new FormalRegExpEpsilon ( * this );
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpEpsilon < SymbolType >::plunder ( ) && {
+FormalRegExpEpsilon < SymbolType > * FormalRegExpEpsilon < SymbolType >::plunder ( ) && {
 	return new FormalRegExpEpsilon ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/formal/FormalRegExpIteration.h b/alib2data/src/regexp/formal/FormalRegExpIteration.h
index 8566166aace8d23f8d5bf92135ff5dfc17b6b71d..f911dc75e2f2e2a850a983da67f3e21ddc33ad52 100644
--- a/alib2data/src/regexp/formal/FormalRegExpIteration.h
+++ b/alib2data/src/regexp/formal/FormalRegExpIteration.h
@@ -33,12 +33,12 @@ public:
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
 	 */
-	FormalRegExpElement < SymbolType > * clone ( ) const override;
+	FormalRegExpIteration < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc FormalRegExpElement::plunder() const
 	 */
-	FormalRegExpElement < SymbolType > * plunder ( ) && override;
+	FormalRegExpIteration < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
@@ -128,12 +128,12 @@ void FormalRegExpIteration < SymbolType >::setElement ( const FormalRegExpElemen
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpIteration < SymbolType >::clone ( ) const {
+FormalRegExpIteration < SymbolType > * FormalRegExpIteration < SymbolType >::clone ( ) const {
 	return new FormalRegExpIteration ( * this );
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpIteration < SymbolType >::plunder ( ) && {
+FormalRegExpIteration < SymbolType > * FormalRegExpIteration < SymbolType >::plunder ( ) && {
 	return new FormalRegExpIteration ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/formal/FormalRegExpSymbol.h b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
index 738a3cb8c712b10b2a27b4a8fa427934416d39aa..fa8c727aedf6a3a754d801acf7371d8bd23e99c1 100644
--- a/alib2data/src/regexp/formal/FormalRegExpSymbol.h
+++ b/alib2data/src/regexp/formal/FormalRegExpSymbol.h
@@ -35,12 +35,12 @@ public:
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
 	 */
-	FormalRegExpElement < SymbolType > * clone ( ) const override;
+	FormalRegExpSymbol < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc FormalRegExpElement::plunder() const
 	 */
-	FormalRegExpElement < SymbolType > * plunder ( ) && override;
+	FormalRegExpSymbol < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc FormalRegExpElement::clone() const
@@ -106,12 +106,12 @@ FormalRegExpSymbol < SymbolType >::FormalRegExpSymbol ( SymbolType symbol ) : sy
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpSymbol < SymbolType >::clone ( ) const {
+FormalRegExpSymbol < SymbolType > * FormalRegExpSymbol < SymbolType >::clone ( ) const {
 	return new FormalRegExpSymbol ( * this );
 }
 
 template < class SymbolType >
-FormalRegExpElement < SymbolType > * FormalRegExpSymbol < SymbolType >::plunder ( ) && {
+FormalRegExpSymbol < SymbolType > * FormalRegExpSymbol < SymbolType >::plunder ( ) && {
 	return new FormalRegExpSymbol ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h b/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
index 91be2c2f31d6137d221fc30b2d4b6cf75aedda51..f4d4e611012d137ea461a38546e41e47fd43852d 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpAlternation.h
@@ -33,12 +33,12 @@ public:
 	/**
 	 * @copydoc UnboundedRegExpElement::clone() const
 	 */
-	UnboundedRegExpElement < SymbolType > * clone ( ) const override;
+	UnboundedRegExpAlternation < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::plunder() const
 	 */
-	UnboundedRegExpElement < SymbolType > * plunder ( ) && override;
+	UnboundedRegExpAlternation < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::cloneAsFormal() const
@@ -124,12 +124,12 @@ void UnboundedRegExpAlternation < SymbolType >::appendElement ( const UnboundedR
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpAlternation < SymbolType >::clone ( ) const {
+UnboundedRegExpAlternation < SymbolType > * UnboundedRegExpAlternation < SymbolType >::clone ( ) const {
 	return new UnboundedRegExpAlternation ( * this );
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpAlternation < SymbolType >::plunder ( ) && {
+UnboundedRegExpAlternation < SymbolType > * UnboundedRegExpAlternation < SymbolType >::plunder ( ) && {
 	return new UnboundedRegExpAlternation ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h b/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
index f3ef801e1abdc2278a99a43d89ba12f1eda18048..eaa21a085d81437f3f36618e2fb853c920f4aec9 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpConcatenation.h
@@ -33,12 +33,12 @@ public:
 	/**
 	 * @copydoc UnboundedRegExpElement::clone() const
 	 */
-	UnboundedRegExpElement < SymbolType > * clone ( ) const override;
+	UnboundedRegExpConcatenation < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::plunder() const
 	 */
-	UnboundedRegExpElement < SymbolType > * plunder ( ) && override;
+	UnboundedRegExpConcatenation < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::cloneAsFormal() const
@@ -124,12 +124,12 @@ void UnboundedRegExpConcatenation < SymbolType >::appendElement ( const Unbounde
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpConcatenation < SymbolType >::clone ( ) const {
+UnboundedRegExpConcatenation < SymbolType > * UnboundedRegExpConcatenation < SymbolType >::clone ( ) const {
 	return new UnboundedRegExpConcatenation ( * this );
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpConcatenation < SymbolType >::plunder ( ) && {
+UnboundedRegExpConcatenation < SymbolType > * UnboundedRegExpConcatenation < SymbolType >::plunder ( ) && {
 	return new UnboundedRegExpConcatenation ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h b/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
index 015e3d6b9577da3405bea1fd3dec88d2a2b45237..79fa0e3391f2d9f3a04949dc1170e8f6d9d2044b 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpEmpty.h
@@ -29,12 +29,12 @@ public:
 	/**
 	 * @copydoc UnboundedRegExpElement::clone() const
 	 */
-	UnboundedRegExpElement < SymbolType > * clone ( ) const override;
+	UnboundedRegExpEmpty < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::plunder() const
 	 */
-	UnboundedRegExpElement < SymbolType > * plunder ( ) && override;
+	UnboundedRegExpEmpty < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::cloneAsFormal() const
@@ -84,12 +84,12 @@ UnboundedRegExpEmpty < SymbolType >::UnboundedRegExpEmpty ( ) {
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpEmpty < SymbolType >::clone ( ) const {
+UnboundedRegExpEmpty < SymbolType > * UnboundedRegExpEmpty < SymbolType >::clone ( ) const {
 	return new UnboundedRegExpEmpty ( * this );
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpEmpty < SymbolType >::plunder ( ) && {
+UnboundedRegExpEmpty < SymbolType > * UnboundedRegExpEmpty < SymbolType >::plunder ( ) && {
 	return new UnboundedRegExpEmpty ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h b/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
index d52576a293922a3971b8d5c109f47fbe97d44c81..6d254b9301eac46adfc293beec6300f2d377951e 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpEpsilon.h
@@ -29,12 +29,12 @@ public:
 	/**
 	 * @copydoc UnboundedRegExpElement::clone() const
 	 */
-	UnboundedRegExpElement < SymbolType > * clone ( ) const override;
+	UnboundedRegExpEpsilon < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::plunder() const
 	 */
-	UnboundedRegExpElement < SymbolType > * plunder ( ) && override;
+	UnboundedRegExpEpsilon < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::cloneAsFormal() const
@@ -84,12 +84,12 @@ UnboundedRegExpEpsilon < SymbolType >::UnboundedRegExpEpsilon ( ) {
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpEpsilon < SymbolType >::clone ( ) const {
+UnboundedRegExpEpsilon < SymbolType > * UnboundedRegExpEpsilon < SymbolType >::clone ( ) const {
 	return new UnboundedRegExpEpsilon ( * this );
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpEpsilon < SymbolType >::plunder ( ) && {
+UnboundedRegExpEpsilon < SymbolType > * UnboundedRegExpEpsilon < SymbolType >::plunder ( ) && {
 	return new UnboundedRegExpEpsilon ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h b/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
index 1d7455f6ef60958c8d793d4a8e6e9b7100f8dff3..31383679cf15d1efff26f9fe96c5d468d9903aa9 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpIteration.h
@@ -33,12 +33,12 @@ public:
 	/**
 	 * @copydoc UnboundedRegExpElement::clone() const
 	 */
-	UnboundedRegExpElement < SymbolType > * clone ( ) const override;
+	UnboundedRegExpIteration < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::plunder() const
 	 */
-	UnboundedRegExpElement < SymbolType > * plunder ( ) && override;
+	UnboundedRegExpIteration < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::cloneAsFormal() const
@@ -128,12 +128,12 @@ void UnboundedRegExpIteration < SymbolType >::setElement ( const UnboundedRegExp
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpIteration < SymbolType >::clone ( ) const {
+UnboundedRegExpIteration < SymbolType > * UnboundedRegExpIteration < SymbolType >::clone ( ) const {
 	return new UnboundedRegExpIteration ( * this );
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpIteration < SymbolType >::plunder ( ) && {
+UnboundedRegExpIteration < SymbolType > * UnboundedRegExpIteration < SymbolType >::plunder ( ) && {
 	return new UnboundedRegExpIteration ( std::move ( * this ) );
 }
 
diff --git a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
index 564e8c2fc5038a02ad963b3d9461b16900f2d982..a261dbed133674f36becbe82df05a96a15317860 100644
--- a/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
+++ b/alib2data/src/regexp/unbounded/UnboundedRegExpSymbol.h
@@ -35,12 +35,12 @@ public:
 	/**
 	 * @copydoc UnboundedRegExpElement::clone() const
 	 */
-	UnboundedRegExpElement < SymbolType > * clone ( ) const override;
+	UnboundedRegExpSymbol < SymbolType > * clone ( ) const override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::plunder() const
 	 */
-	UnboundedRegExpElement < SymbolType > * plunder ( ) && override;
+	UnboundedRegExpSymbol < SymbolType > * plunder ( ) && override;
 
 	/**
 	 * @copydoc UnboundedRegExpElement::cloneAsFormal() const
@@ -108,12 +108,12 @@ UnboundedRegExpSymbol < SymbolType >::UnboundedRegExpSymbol ( SymbolType symbol
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpSymbol < SymbolType >::clone ( ) const {
+UnboundedRegExpSymbol < SymbolType > * UnboundedRegExpSymbol < SymbolType >::clone ( ) const {
 	return new UnboundedRegExpSymbol ( * this );
 }
 
 template < class SymbolType >
-UnboundedRegExpElement < SymbolType > * UnboundedRegExpSymbol < SymbolType >::plunder ( ) && {
+UnboundedRegExpSymbol < SymbolType > * UnboundedRegExpSymbol < SymbolType >::plunder ( ) && {
 	return new UnboundedRegExpSymbol ( std::move ( * this ) );
 }