diff --git a/alib2data/src/rte/common/RTEToXMLComposer.cpp b/alib2data/src/rte/common/RTEToXMLComposer.cpp
index a743c030f3584b6dfba2724ad62ab1cd0b023648..5cc08d09b81258ee28fe7338ae66d1639d7ef96f 100644
--- a/alib2data/src/rte/common/RTEToXMLComposer.cpp
+++ b/alib2data/src/rte/common/RTEToXMLComposer.cpp
@@ -9,7 +9,7 @@
 
 namespace rte {
 
-void RTEToXMLComposer::Visit ( void * userData, const FormalRTEAlternation & alternation ) const {
+void RTEToXMLComposer::Formal::Visit ( void * userData, const FormalRTEAlternation & alternation ) const {
 	std::deque < sax::Token > & out = * ( ( std::deque < sax::Token > * )userData );
 
 	out.emplace_back ( "alternation", sax::Token::TokenType::START_ELEMENT );
@@ -18,7 +18,7 @@ void RTEToXMLComposer::Visit ( void * userData, const FormalRTEAlternation & alt
 	out.emplace_back ( "alternation", sax::Token::TokenType::END_ELEMENT );
 }
 
-void RTEToXMLComposer::Visit ( void * userData, const FormalRTESubstitution & substitution ) const {
+void RTEToXMLComposer::Formal::Visit ( void * userData, const FormalRTESubstitution & substitution ) const {
 	std::deque < sax::Token > & out = * ( ( std::deque < sax::Token > * )userData );
 
 	out.emplace_back ( "substitution", sax::Token::TokenType::START_ELEMENT );
@@ -30,7 +30,7 @@ void RTEToXMLComposer::Visit ( void * userData, const FormalRTESubstitution & su
 	out.emplace_back ( "substitution", sax::Token::TokenType::END_ELEMENT );
 }
 
-void RTEToXMLComposer::Visit ( void * userData, const FormalRTEIteration & iteration ) const {
+void RTEToXMLComposer::Formal::Visit ( void * userData, const FormalRTEIteration & iteration ) const {
 	std::deque < sax::Token > & out = * ( ( std::deque < sax::Token > * )userData );
 
 	out.emplace_back ( "iteration", sax::Token::TokenType::START_ELEMENT );
@@ -41,7 +41,7 @@ void RTEToXMLComposer::Visit ( void * userData, const FormalRTEIteration & itera
 	out.emplace_back ( "iteration", sax::Token::TokenType::END_ELEMENT );
 }
 
-void RTEToXMLComposer::Visit ( void * userData, const FormalRTESymbolAlphabet & symbol ) const {
+void RTEToXMLComposer::Formal::Visit ( void * userData, const FormalRTESymbolAlphabet & symbol ) const {
 	std::deque < sax::Token > & out = * ( ( std::deque < sax::Token > * )userData );
 
 	out.emplace_back ( sax::Token ( "symbol", sax::Token::TokenType::START_ELEMENT ) );
@@ -53,7 +53,7 @@ void RTEToXMLComposer::Visit ( void * userData, const FormalRTESymbolAlphabet &
 	out.emplace_back ( sax::Token ( "symbol", sax::Token::TokenType::END_ELEMENT ) );
 }
 
-void RTEToXMLComposer::Visit ( void * userData, const FormalRTESymbolSubst & symbol ) const {
+void RTEToXMLComposer::Formal::Visit ( void * userData, const FormalRTESymbolSubst & symbol ) const {
 	std::deque < sax::Token > & out = * ( ( std::deque < sax::Token > * )userData );
 
 	out.emplace_back ( sax::Token ( "substSymbol", sax::Token::TokenType::START_ELEMENT ) );
@@ -62,7 +62,7 @@ void RTEToXMLComposer::Visit ( void * userData, const FormalRTESymbolSubst & sym
 	out.emplace_back ( sax::Token ( "substSymbol", sax::Token::TokenType::END_ELEMENT ) );
 }
 
-void RTEToXMLComposer::Visit ( void * userData, const FormalRTEEmpty & ) const {
+void RTEToXMLComposer::Formal::Visit ( void * userData, const FormalRTEEmpty & ) const {
 	std::deque < sax::Token > & out = * ( ( std::deque < sax::Token > * )userData );
 
 	out.emplace_back ( "empty", sax::Token::TokenType::START_ELEMENT );
@@ -85,6 +85,6 @@ void RTEToXMLComposer::composeAlphabet ( std::deque < sax::Token > & out, const
 	out.emplace_back ( "substSymbolAlphabet", sax::Token::TokenType::END_ELEMENT );
 }
 
-RTEToXMLComposer RTEToXMLComposer::RTE_TO_XML_COMPOSER;
+const RTEToXMLComposer::Formal RTEToXMLComposer::Formal::FORMAL;
 
 } /* namespace rte */
diff --git a/alib2data/src/rte/common/RTEToXMLComposer.h b/alib2data/src/rte/common/RTEToXMLComposer.h
index 07651493437857351f3fe2c4b6613568619ec1b1..344bf553223fda35425e3947130a2db0062f0a45 100644
--- a/alib2data/src/rte/common/RTEToXMLComposer.h
+++ b/alib2data/src/rte/common/RTEToXMLComposer.h
@@ -13,21 +13,23 @@ namespace rte {
 /**
  * This class contains methods to print XML representation of regular tree expression to the output stream.
  */
-class RTEToXMLComposer : public FormalRTEElementVisitor {
+class RTEToXMLComposer {
 public:
-	RTEToXMLComposer ( ) { }
-
-	static RTEToXMLComposer RTE_TO_XML_COMPOSER;
-
 	static void composeAlphabet ( std::deque < sax::Token > & out, const std::set < std::ranked_symbol < > > & alphabetF, const std::set < std::ranked_symbol < > > & alphabetK );
 
-private:
-	void Visit ( void *, const FormalRTEAlternation & alternation ) const;
-	void Visit ( void *, const FormalRTEIteration & iteration ) const;
-	void Visit ( void *, const FormalRTESubstitution & concatenation ) const;
-	void Visit ( void *, const FormalRTESymbolAlphabet & symbol ) const;
-	void Visit ( void *, const FormalRTESymbolSubst & symbol ) const;
-	void Visit ( void *, const FormalRTEEmpty & empty ) const;
+	class Formal : public FormalRTEElement::Visitor {
+	public:
+		Formal ( ) { }
+
+		static const Formal FORMAL;
+	private:
+		void Visit ( void *, const FormalRTEAlternation & alternation ) const;
+		void Visit ( void *, const FormalRTEIteration & iteration ) const;
+		void Visit ( void *, const FormalRTESubstitution & concatenation ) const;
+		void Visit ( void *, const FormalRTESymbolAlphabet & symbol ) const;
+		void Visit ( void *, const FormalRTESymbolSubst & symbol ) const;
+		void Visit ( void *, const FormalRTEEmpty & empty ) const;
+	};
 };
 
 } /* namespace rte */
diff --git a/alib2data/src/rte/formal/FormalRTEAlternation.h b/alib2data/src/rte/formal/FormalRTEAlternation.h
index 4c60d35a41ae694c86d49cc51f2da6102e0efb0b..1dcbcdf88046a10e56274423b50f9ac74853ac5d 100644
--- a/alib2data/src/rte/formal/FormalRTEAlternation.h
+++ b/alib2data/src/rte/formal/FormalRTEAlternation.h
@@ -11,7 +11,7 @@ namespace rte {
  */
 class FormalRTEAlternation : public FormalRTEElement, public std::BinaryNode < std::smart_ptr < FormalRTEElement >, std::smart_ptr < FormalRTEElement >, FormalRTEAlternation > {
 public:
-	void Accept ( void * userData, const FormalRTEElementVisitor & visitor ) const {
+	void Accept ( void * userData, const FormalRTEElement::Visitor & visitor ) const {
 		visitor.Visit ( userData, * this );
 	}
 
diff --git a/alib2data/src/rte/formal/FormalRTEElement.h b/alib2data/src/rte/formal/FormalRTEElement.h
index 7a86a1e7eb569b86370c6c204faf3debceb42f94..1e46b25a5d2f870e0fed3ebce749a13396b8db9a 100644
--- a/alib2data/src/rte/formal/FormalRTEElement.h
+++ b/alib2data/src/rte/formal/FormalRTEElement.h
@@ -19,19 +19,19 @@ class FormalRTEEmpty;
 
 class FormalRTEElement;
 
-class FormalRTEElementVisitor {
-public:
-	virtual void Visit ( void *, const FormalRTEAlternation & alternation ) const = 0;
-	virtual void Visit ( void *, const FormalRTEIteration & iteration ) const = 0;
-	virtual void Visit ( void *, const FormalRTESubstitution & substitution ) const = 0;
-	virtual void Visit ( void *, const FormalRTESymbolAlphabet & symbol ) const = 0;
-	virtual void Visit ( void *, const FormalRTESymbolSubst & symbol ) const = 0;
-	virtual void Visit ( void *, const FormalRTEEmpty & empty ) const = 0;
-};
-
 class FormalRTEElement : public alib::CommonBase < FormalRTEElement >, public std::BaseNode < FormalRTEElement > {
 public:
-	virtual void Accept ( void * userData, const FormalRTEElementVisitor & visitor ) const = 0;
+	class Visitor {
+	public:
+		virtual void Visit ( void *, const FormalRTEAlternation & alternation ) const = 0;
+		virtual void Visit ( void *, const FormalRTEIteration & iteration ) const = 0;
+		virtual void Visit ( void *, const FormalRTESubstitution & substitution ) const = 0;
+		virtual void Visit ( void *, const FormalRTESymbolAlphabet & symbol ) const = 0;
+		virtual void Visit ( void *, const FormalRTESymbolSubst & symbol ) const = 0;
+		virtual void Visit ( void *, const FormalRTEEmpty & empty ) const = 0;
+	};
+
+	virtual void Accept ( void * userData, const FormalRTEElement::Visitor & visitor ) const = 0;
 
 	/**
 	 * Traverses the regexp tree looking if particular Symbol is used in the regexp.
diff --git a/alib2data/src/rte/formal/FormalRTEEmpty.h b/alib2data/src/rte/formal/FormalRTEEmpty.h
index 1fe60defba42510e6acabe4bc5f21f536dca428f..1d6135de79d81155fba2c9d3d9faceea2c43d045 100644
--- a/alib2data/src/rte/formal/FormalRTEEmpty.h
+++ b/alib2data/src/rte/formal/FormalRTEEmpty.h
@@ -11,7 +11,7 @@ namespace rte {
  */
 class FormalRTEEmpty : public FormalRTEElement {
 public:
-	void Accept ( void * userData, const FormalRTEElementVisitor & visitor ) const {
+	void Accept ( void * userData, const FormalRTEElement::Visitor & visitor ) const {
 		visitor.Visit ( userData, * this );
 	}
 
diff --git a/alib2data/src/rte/formal/FormalRTEIteration.h b/alib2data/src/rte/formal/FormalRTEIteration.h
index 18c95d1e2c264d4f50e7c1f51f29dc8a739b588c..d0d79b54fb4fd209bfcb1f339bd52506ed8fb4ac 100644
--- a/alib2data/src/rte/formal/FormalRTEIteration.h
+++ b/alib2data/src/rte/formal/FormalRTEIteration.h
@@ -22,7 +22,7 @@ protected:
 	std::smart_ptr < FormalRTESymbolSubst > substitutionSymbol;
 
 public:
-	void Accept ( void * userData, const FormalRTEElementVisitor & visitor ) const {
+	void Accept ( void * userData, const FormalRTEElement::Visitor & visitor ) const {
 		visitor.Visit ( userData, * this );
 	}
 
diff --git a/alib2data/src/rte/formal/FormalRTEStructure.cpp b/alib2data/src/rte/formal/FormalRTEStructure.cpp
index fd234379b50b579447c47e93bd409d54c561da1f..5dea6d2b6f27e9796b3a310fbefc679200630280 100644
--- a/alib2data/src/rte/formal/FormalRTEStructure.cpp
+++ b/alib2data/src/rte/formal/FormalRTEStructure.cpp
@@ -53,7 +53,7 @@ bool xmlApi < rte::FormalRTEStructure >::first ( const std::deque < sax::Token >
 }
 
 void xmlApi < rte::FormalRTEStructure >::compose ( std::deque < sax::Token > & output, const rte::FormalRTEStructure & data ) {
-	data.getStructure ( ).Accept ( ( void * ) & output, rte::RTEToXMLComposer::RTE_TO_XML_COMPOSER );
+	data.getStructure ( ).Accept ( ( void * ) & output, rte::RTEToXMLComposer::Formal::FORMAL );
 }
 
 } /* namespace alib */
diff --git a/alib2data/src/rte/formal/FormalRTESubstitution.h b/alib2data/src/rte/formal/FormalRTESubstitution.h
index 7f7a5986b1b63900fea53b10f58a61e841db7163..3bc956dda1aa221309a85128069ba4d9503f1684 100644
--- a/alib2data/src/rte/formal/FormalRTESubstitution.h
+++ b/alib2data/src/rte/formal/FormalRTESubstitution.h
@@ -16,7 +16,7 @@ protected:
 	std::smart_ptr < FormalRTESymbolSubst > substitutionSymbol; // substite this in left by right
 
 public:
-	void Accept ( void * userData, const FormalRTEElementVisitor & visitor ) const {
+	void Accept ( void * userData, const FormalRTEElement::Visitor & visitor ) const {
 		visitor.Visit ( userData, * this );
 	}
 
diff --git a/alib2data/src/rte/formal/FormalRTESymbolAlphabet.h b/alib2data/src/rte/formal/FormalRTESymbolAlphabet.h
index 12e5991bf282c9930cd95b5557818492f7f48839..24599ab104156b1212d99d047c366ab3ccf8020b 100644
--- a/alib2data/src/rte/formal/FormalRTESymbolAlphabet.h
+++ b/alib2data/src/rte/formal/FormalRTESymbolAlphabet.h
@@ -11,7 +11,7 @@ namespace rte {
  */
 class FormalRTESymbolAlphabet : public FormalRTESymbol, public std::VararyNode < std::smart_ptr < FormalRTESymbol >, std::smart_ptr < const FormalRTESymbol >, FormalRTESymbolAlphabet > {
 public:
-	void Accept ( void * userData, const FormalRTEElementVisitor & visitor ) const {
+	void Accept ( void * userData, const FormalRTEElement::Visitor & visitor ) const {
 		visitor.Visit ( userData, * this );
 	}
 
diff --git a/alib2data/src/rte/formal/FormalRTESymbolSubst.h b/alib2data/src/rte/formal/FormalRTESymbolSubst.h
index cf9de9389a10d87a8c505041ead1b359c40de6a4..4be5896ba23ec5345efc159fb94ffb2f434f245a 100644
--- a/alib2data/src/rte/formal/FormalRTESymbolSubst.h
+++ b/alib2data/src/rte/formal/FormalRTESymbolSubst.h
@@ -11,7 +11,7 @@ namespace rte {
  */
 class FormalRTESymbolSubst : public FormalRTESymbol, public std::NullaryNode < FormalRTESymbolSubst > {
 public:
-	void Accept ( void * userData, const FormalRTEElementVisitor & visitor ) const {
+	void Accept ( void * userData, const FormalRTEElement::Visitor & visitor ) const {
 		visitor.Visit ( userData, * this );
 	}