diff --git a/aconversions2/src/ConversionHandler.cpp b/aconversions2/src/ConversionHandler.cpp
index 064a18fa3f840e7ad55b4874107b507f5bee1029..99955d0f316c62077b76c6e3c9623520b97b8a31 100644
--- a/aconversions2/src/ConversionHandler.cpp
+++ b/aconversions2/src/ConversionHandler.cpp
@@ -9,22 +9,22 @@
 
 #include "automaton/convert/ToRegExpStateElimination.h"
 #include "automaton/convert/ToRegExpAlgebraic.h"
-#include "automaton/convert/ToLeftRG.h"
-#include "automaton/convert/ToRightRG.h"
+#include "automaton/convert/ToGrammarLeftRG.h"
+#include "automaton/convert/ToGrammarRightRG.h"
 
-#include "regexp/toAutomaton/GlushkovNFA.h"
-#include "regexp/toAutomaton/Thompson.h"
-#include "regexp/toAutomaton/BrzozowskiDerivation.h"
+#include "regexp/convert/ToAutomatonGlushkov.h"
+#include "regexp/convert/ToAutomatonThompson.h"
+#include "regexp/convert/ToAutomatonDerivation.h"
 
-#include "grammar/toAutomaton/RGtoFA.h"
+#include "grammar/convert/ToAutomaton.h"
 
-#include "grammar/toRegexp/Algebraic.h"
+#include "grammar/convert/ToRegExpAlgebraic.h"
 
-#include "regexp/toGrammar/toRightRG/GlushkovNFA.h"
-#include "regexp/toGrammar/toRightRG/BrzozowskiDerivation.h"
+#include "regexp/convert/ToGrammarRightRGGlushkov.h"
+#include "regexp/convert/ToGrammarRightRGDerivation.h"
 
-#include "grammar/toGrammar/LeftToRightRegularGrammar.h"
-#include "grammar/toGrammar/RightToLeftRegularGrammar.h"
+#include "grammar/convert/ToGrammarRightRG.h"
+#include "grammar/convert/ToGrammarLeftRG.h"
 
 
 using namespace alib;
@@ -142,7 +142,7 @@ void ConversionHandler::convertFSMtoRRG( void )
 	switch( m_algorithm )
 	{
 	default: {
-			alib::DataFactory::toStdout(automaton::convert::ToRightRG::convert(fsm));
+			alib::DataFactory::toStdout(automaton::convert::ToGrammarRightRG::convert(fsm));
 			break;
 		}
 	}
@@ -155,7 +155,7 @@ void ConversionHandler::convertFSMtoLRG( void )
 	switch( m_algorithm )
 	{
 	default: {
-			alib::DataFactory::toStdout(automaton::convert::ToLeftRG::convert(fsm));
+			alib::DataFactory::toStdout(automaton::convert::ToGrammarLeftRG::convert(fsm));
 			break;
 		}
 	}
@@ -170,16 +170,16 @@ void ConversionHandler::convertREtoFSM( void )
 	switch( m_algorithm )
 	{
 	case BRZOZOWSKI_DERIVATION: {
-			alib::DataFactory::toStdout(conversions::re2fa::BrzozowskiDerivation::convert(regexp));
+			alib::DataFactory::toStdout(regexp::convert::ToAutomatonDerivation::convert(regexp));
 			break;
 		}
 	case THOMPSON_NFA: {
-			alib::DataFactory::toStdout(conversions::re2fa::Thompson::convert(regexp));
+			alib::DataFactory::toStdout(regexp::convert::ToAutomatonThompson::convert(regexp));
 			break;
 		}
 	case GLUSHKOV_NFA:
 	default: {
-			alib::DataFactory::toStdout(conversions::re2fa::GlushkovNFA::convert(regexp));
+			alib::DataFactory::toStdout(regexp::convert::ToAutomatonGlushkov::convert(regexp));
 			break;
 		}
 	}
@@ -202,11 +202,11 @@ void ConversionHandler::convertREtoRRG( void )
 	switch(m_algorithm)
 	{
 	case BRZOZOWSKI_DERIVATION: {
-			alib::DataFactory::toStdout(conversions::re2rg::BrzozowskiDerivation::convert(regexp));
+			alib::DataFactory::toStdout(regexp::convert::ToGrammarRightRGDerivation::convert(regexp));
 			break;
 		}
 	default: {
-			alib::DataFactory::toStdout(conversions::re2rg::GlushkovNFA::convert(regexp));
+			alib::DataFactory::toStdout(regexp::convert::ToGrammarRightRGGlushkov::convert(regexp));
 			break;
 		}
 	}
@@ -217,7 +217,7 @@ void ConversionHandler::convertREtoRRG( void )
 void ConversionHandler::convertRGtoFSM( void )
 {
 	const grammar::Grammar grammar = alib::DataFactory::fromTokens<grammar::Grammar>(m_tokens);
-    alib::DataFactory::toStdout(conversions::rg2fa::RGtoFA::convert(grammar));
+    alib::DataFactory::toStdout(grammar::convert::ToAutomaton::convert(grammar));
 }
 
 void ConversionHandler::convertRGtoRG( void )
@@ -242,7 +242,7 @@ void ConversionHandler::convertRGtoRE( void )
 	{
 	case BRZOZOWSKI_ALGEBRAIC:
 	default:
-		alib::DataFactory::toStdout(conversions::rg2re::Algebraic::convert(grammar));
+		alib::DataFactory::toStdout(grammar::convert::ToRegExpAlgebraic::convert(grammar));
         break;
 	}
 }
@@ -254,7 +254,7 @@ void ConversionHandler::convertLRGtoRRG( void )
 	switch( m_algorithm )
 	{
 	default:
-		alib::DataFactory::toStdout(conversions::rg2rg::LeftToRightRegularGrammar::convert(lrg));
+		alib::DataFactory::toStdout(grammar::convert::ToGrammarRightRG::convert(lrg));
 		break;
 	}
 }
@@ -266,7 +266,7 @@ void ConversionHandler::convertRRGtoLRG( void )
 	switch( m_algorithm )
 	{
 	default:
-		alib::DataFactory::toStdout(conversions::rg2rg::RightToLeftRegularGrammar::convert(rrg));
+		alib::DataFactory::toStdout(grammar::convert::ToGrammarLeftRG::convert(rrg));
 		break;
 	}
 }
diff --git a/alib2algo/src/automaton/convert/ToLeftRG.cpp b/alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp
similarity index 80%
rename from alib2algo/src/automaton/convert/ToLeftRG.cpp
rename to alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp
index aa2672d61f70c94433e7bb7705e420c6eeeb3cba..ba2a7336d6550b5879d8203311a3423587331a4c 100644
--- a/alib2algo/src/automaton/convert/ToLeftRG.cpp
+++ b/alib2algo/src/automaton/convert/ToGrammarLeftRG.cpp
@@ -1,11 +1,11 @@
 /*
- * ToLeftRG.h
+ * ToGrammarLeftRG.h
  *
  *  Created on: 9. 2. 2014
- *      Author: Tomas Pecka
+ *      Author: ToGrammarmas Pecka
  */
 
-#include "ToLeftRG.h"
+#include "ToGrammarLeftRG.h"
 #include <map>
 
 #include <alphabet/LabeledSymbol.h>
@@ -16,7 +16,7 @@ namespace automaton {
 
 namespace convert {
 
-grammar::LeftRG ToLeftRG::convert(const automaton::NFA& automaton)
+grammar::LeftRG ToGrammarLeftRG::convert(const automaton::NFA& automaton)
 {
 	std::map<automaton::State, alphabet::Symbol> nonterminalMap;
 	// step 2
@@ -64,7 +64,7 @@ grammar::LeftRG ToLeftRG::convert(const automaton::NFA& automaton)
 	return grammar;
 }
 
-grammar::LeftRG ToLeftRG::convert(const automaton::DFA& automaton)
+grammar::LeftRG ToGrammarLeftRG::convert(const automaton::DFA& automaton)
 {
 	std::map<automaton::State, alphabet::Symbol> nonterminalMap;
 	// step 2
@@ -110,41 +110,41 @@ grammar::LeftRG ToLeftRG::convert(const automaton::DFA& automaton)
 	return grammar;
 }
 
-grammar::Grammar ToLeftRG::convert(const automaton::Automaton& automaton) {
+grammar::Grammar ToGrammarLeftRG::convert(const automaton::Automaton& automaton) {
 	grammar::Grammar* out = NULL;
-	automaton.getData().Accept((void*) &out, ToLeftRG::TO_LEFT_RG);
+	automaton.getData().Accept((void*) &out, ToGrammarLeftRG::TO_GRAMMAR_LEFT_RG);
 	grammar::Grammar res = std::move(*out);
 	delete out;
 	return res;
 }
 
-void ToLeftRG::Visit(void*, const automaton::EpsilonNFA& ) const {
+void ToGrammarLeftRG::Visit(void*, const automaton::EpsilonNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
 
-void ToLeftRG::Visit(void*, const automaton::MultiInitialStateNFA& ) const {
+void ToGrammarLeftRG::Visit(void*, const automaton::MultiInitialStateNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type MultiInitialStateNFA");
 }
 
-void ToLeftRG::Visit(void* data, const automaton::NFA& automaton) const {
+void ToGrammarLeftRG::Visit(void* data, const automaton::NFA& automaton) const {
 	grammar::Grammar* & out = *((grammar::Grammar**) data);
 	out = new grammar::Grammar(this->convert(automaton));
 }
 
-void ToLeftRG::Visit(void* data, const automaton::DFA& automaton) const {
+void ToGrammarLeftRG::Visit(void* data, const automaton::DFA& automaton) const {
 	grammar::Grammar* & out = *((grammar::Grammar**) data);
 	out = new grammar::Grammar(this->convert(automaton));
 }
 
-void ToLeftRG::Visit(void*, const automaton::ExtendedNFA& ) const {
+void ToGrammarLeftRG::Visit(void*, const automaton::ExtendedNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type ExtendedNFA");
 }
 
-void ToLeftRG::Visit(void*, const automaton::CompactNFA& ) const {
+void ToGrammarLeftRG::Visit(void*, const automaton::CompactNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type CompactNFA");
 }
 
-const ToLeftRG ToLeftRG::TO_LEFT_RG;
+const ToGrammarLeftRG ToGrammarLeftRG::TO_GRAMMAR_LEFT_RG;
 
 } /* namespace convert */
 
diff --git a/alib2algo/src/automaton/convert/ToLeftRG.h b/alib2algo/src/automaton/convert/ToGrammarLeftRG.h
similarity index 80%
rename from alib2algo/src/automaton/convert/ToLeftRG.h
rename to alib2algo/src/automaton/convert/ToGrammarLeftRG.h
index 881e35f73f9e6a6cded110a8ebb25663b754d338..7ac91177ceec66ecced6abdfab889a1273d79a4e 100644
--- a/alib2algo/src/automaton/convert/ToLeftRG.h
+++ b/alib2algo/src/automaton/convert/ToGrammarLeftRG.h
@@ -1,12 +1,12 @@
 /*
- * ToLeftRG.h
+ * ToGrammarLeftRG.h
  *
  *  Created on: 9. 2. 2014
- *      Author: Tomas Pecka
+ *      Author: ToGrammarmas Pecka
  */
 
-#ifndef __TO_LEFT_RG_H__
-#define __TO_LEFT_RG_H__
+#ifndef __TO_GRAMMAR_LEFT_RG_H__
+#define __TO_GRAMMAR_LEFT_RG_H__
 
 #include <grammar/Regular/LeftRG.h>
 #include <automaton/FSM/NFA.h>
@@ -23,7 +23,7 @@ namespace convert {
  * Finite automaton to right regular grammar converter.
  * Source: My own :)
  */
-class ToLeftRG : public automaton::VisitableConstFSMBase {
+class ToGrammarLeftRG : public automaton::VisitableConstFSMBase {
 public:
 	/**
 	 * Performs conversion.
@@ -42,11 +42,11 @@ private:
 	void Visit(void*, const automaton::ExtendedNFA& automaton) const;
 	void Visit(void*, const automaton::CompactNFA& automaton) const;
 
-	static const ToLeftRG TO_LEFT_RG;
+	static const ToGrammarLeftRG TO_GRAMMAR_LEFT_RG;
 };
 
 } /* namespace convert */
 
 } /* namespace automaton */
 
-#endif /* __TO_LEFT_RG_H__ */
+#endif /* __TO_GRAMMAR_LEFT_RG_H__ */
diff --git a/alib2algo/src/automaton/convert/ToRightRG.cpp b/alib2algo/src/automaton/convert/ToGrammarRightRG.cpp
similarity index 80%
rename from alib2algo/src/automaton/convert/ToRightRG.cpp
rename to alib2algo/src/automaton/convert/ToGrammarRightRG.cpp
index e08935f2f50ccc1067b13f5b758a6272098b0da9..d3f3e8223be8df215e40fc9f5b39c1b8d30c5b65 100644
--- a/alib2algo/src/automaton/convert/ToRightRG.cpp
+++ b/alib2algo/src/automaton/convert/ToGrammarRightRG.cpp
@@ -1,11 +1,11 @@
 /*
- * ToRightRG.cpp
+ * ToGrammarRightRG.cpp
  *
  *  Created on: 9. 2. 2014
- *      Author: Tomas Pecka
+ *      Author: ToGrammarmas Pecka
  */
 
-#include "ToRightRG.h"
+#include "ToGrammarRightRG.h"
 #include <alphabet/LabeledSymbol.h>
 #include <exception/AlibException.h>
 
@@ -13,7 +13,7 @@ namespace automaton {
 
 namespace convert {
 
-grammar::RightRG ToRightRG::convert(const automaton::NFA& automaton)
+grammar::RightRG ToGrammarRightRG::convert(const automaton::NFA& automaton)
 {
 	std::map<automaton::State, alphabet::Symbol> nonterminalMap;
 
@@ -58,7 +58,7 @@ grammar::RightRG ToRightRG::convert(const automaton::NFA& automaton)
 	return grammar;
 }
 
-grammar::RightRG ToRightRG::convert(const automaton::DFA& automaton)
+grammar::RightRG ToGrammarRightRG::convert(const automaton::DFA& automaton)
 {
 	std::map<automaton::State, alphabet::Symbol> nonterminalMap;
 
@@ -102,40 +102,40 @@ grammar::RightRG ToRightRG::convert(const automaton::DFA& automaton)
 	return grammar;
 }
 
-grammar::Grammar ToRightRG::convert(const automaton::Automaton& automaton) {
+grammar::Grammar ToGrammarRightRG::convert(const automaton::Automaton& automaton) {
 	grammar::Grammar* out = NULL;
-	automaton.getData().Accept((void*) &out, ToRightRG::TO_RIGHT_RG);
+	automaton.getData().Accept((void*) &out, ToGrammarRightRG::TO_GRAMMAR_RIGHT_RG);
 	grammar::Grammar res = std::move(*out);
 	delete out;
 	return res;
 }
 
-void ToRightRG::Visit(void*, const automaton::EpsilonNFA& ) const {
+void ToGrammarRightRG::Visit(void*, const automaton::EpsilonNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type EpsilonNFA");
 }
 
-void ToRightRG::Visit(void*, const automaton::MultiInitialStateNFA& ) const {
+void ToGrammarRightRG::Visit(void*, const automaton::MultiInitialStateNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type MultiInitialStateNFA");
 }
 
-void ToRightRG::Visit(void* data, const automaton::NFA& automaton) const {
+void ToGrammarRightRG::Visit(void* data, const automaton::NFA& automaton) const {
 	grammar::Grammar* & out = *((grammar::Grammar**) data);
 	out = new grammar::Grammar(this->convert(automaton));
 }
 
-void ToRightRG::Visit(void* data, const automaton::DFA& automaton) const {
+void ToGrammarRightRG::Visit(void* data, const automaton::DFA& automaton) const {
 	grammar::Grammar* & out = *((grammar::Grammar**) data);
 	out = new grammar::Grammar(this->convert(automaton));
 }
-void ToRightRG::Visit(void*, const automaton::ExtendedNFA& ) const {
+void ToGrammarRightRG::Visit(void*, const automaton::ExtendedNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type ExtendedNFA");
 }
 
-void ToRightRG::Visit(void*, const automaton::CompactNFA& ) const {
+void ToGrammarRightRG::Visit(void*, const automaton::CompactNFA& ) const {
 	throw exception::AlibException("Unsupported automaton type CompactNFA");
 }
 
-const ToRightRG ToRightRG::TO_RIGHT_RG;
+const ToGrammarRightRG ToGrammarRightRG::TO_GRAMMAR_RIGHT_RG;
 
 } /* namespace convert */
 
diff --git a/alib2algo/src/automaton/convert/ToRightRG.h b/alib2algo/src/automaton/convert/ToGrammarRightRG.h
similarity index 82%
rename from alib2algo/src/automaton/convert/ToRightRG.h
rename to alib2algo/src/automaton/convert/ToGrammarRightRG.h
index c29795825dc149e94060fbc84f5ac3b0b0ae8f52..448e32e38cb9f9282e733e859da2a37484020b57 100644
--- a/alib2algo/src/automaton/convert/ToRightRG.h
+++ b/alib2algo/src/automaton/convert/ToGrammarRightRG.h
@@ -1,12 +1,12 @@
 /*
- * ToRightRG.h
+ * ToGrammarRightRG.h
  *
  *  Created on: 9. 2. 2014
  *      Author: Tomas Pecka
  */
 
-#ifndef __TO_RIGHT_RG_H__
-#define __TO_RIGHT_RG_H__
+#ifndef __TO_GRAMMAR_RIGHT_RG_H__
+#define __TO_GRAMMAR_RIGHT_RG_H__
 
 #include <grammar/Regular/RightRG.h>
 #include <automaton/FSM/NFA.h>
@@ -23,7 +23,7 @@ namespace convert {
  * Finite automaton to right regular grammar converter.
  * Source: Melichar 2.104
  */
-class ToRightRG : public automaton::VisitableConstFSMBase {
+class ToGrammarRightRG : public automaton::VisitableConstFSMBase {
 public:
 	/**
 	 * Performs conversion.
@@ -42,11 +42,11 @@ private:
 	void Visit(void*, const automaton::ExtendedNFA& automaton) const;
 	void Visit(void*, const automaton::CompactNFA& automaton) const;
 
-	static const ToRightRG TO_RIGHT_RG;
+	static const ToGrammarRightRG TO_GRAMMAR_RIGHT_RG;
 };
 
 } /* namespace convert */
 
 } /* namespace automaton */
 
-#endif /* __TO_RIGHT_RG_H__ */
+#endif /* __TO_GRAMMAR_RIGHT_RG_H__ */
diff --git a/alib2algo/src/automaton/convert/ToRegExpAlgebraic.h b/alib2algo/src/automaton/convert/ToRegExpAlgebraic.h
index 86ac929536a9a5ece30a2291aa3669addfe67338..54d1f89f7bf7c424d2b0d1033c7dc49c4b6b408b 100644
--- a/alib2algo/src/automaton/convert/ToRegExpAlgebraic.h
+++ b/alib2algo/src/automaton/convert/ToRegExpAlgebraic.h
@@ -5,8 +5,8 @@
  *	  Author: Tomas Pecka
  */
 
-#ifndef TO_REG_EXP_ALGEBRAIC_H_
-#define TO_REG_EXP_ALGEBRAIC_H_
+#ifndef AUTOMATON_TO_REG_EXP_ALGEBRAIC_H_
+#define AUTOMATON_TO_REG_EXP_ALGEBRAIC_H_
 
 #include <deque>
 #include <map>
@@ -55,4 +55,4 @@ private:
 
 } /* namespace automaton */
 
-#endif /* TO_REG_EXP_ALGEBRAIC_H_ */
+#endif /* AUTOMATON_TO_REG_EXP_ALGEBRAIC_H_ */
diff --git a/alib2algo/src/automaton/properties/EpsilonClosure.cpp b/alib2algo/src/automaton/properties/EpsilonClosure.cpp
index 91758e4f8672d6bb2779d31e3c4f467a3f4333da..b91b08d470cf3b64a12d9acc6b2334f9a435ef98 100644
--- a/alib2algo/src/automaton/properties/EpsilonClosure.cpp
+++ b/alib2algo/src/automaton/properties/EpsilonClosure.cpp
@@ -96,7 +96,7 @@ std::set<automaton::State> EpsilonClosure::epsilonClosure( const automaton::Exte
 		closure.insert( p );
 
 		for( const auto & transition : fsm.getTransitions( ) )
-			if( transition.first.first == p && regexp::RegExpEpsilon::languageContainsEpsilon( transition.first.second ) )
+			if( transition.first.first == p && regexp::properties::RegExpEpsilon::languageContainsEpsilon( transition.first.second ) )
 				for (const auto & to : transition.second )
 					if( visited [ to ] == false )
 						queue.push( to );
diff --git a/alib2algo/src/grammar/toAutomaton/RGtoFA.cpp b/alib2algo/src/grammar/convert/ToAutomaton.cpp
similarity index 84%
rename from alib2algo/src/grammar/toAutomaton/RGtoFA.cpp
rename to alib2algo/src/grammar/convert/ToAutomaton.cpp
index d18ffdada6efff06b9ad9acbe39cf27fbb07ca60..e7c6938db3695bb8da8b91328c2dc97959763877 100644
--- a/alib2algo/src/grammar/toAutomaton/RGtoFA.cpp
+++ b/alib2algo/src/grammar/convert/ToAutomaton.cpp
@@ -1,30 +1,28 @@
 /*
- * RGtoFA.cpp
+ * ToAutomaton.cpp
  *
  * Created on: 1. 11. 2013
  * Author: Tomas Pecka
  */
-#include "RGtoFA.h"
+#include "ToAutomaton.h"
 
 #include <alphabet/LabeledSymbol.h>
 #include <exception/AlibException.h>
 
-namespace conversions
-{
+namespace grammar {
 
-namespace rg2fa
-{
+namespace convert {
 
-automaton::Automaton RGtoFA::convert(const grammar::Grammar& grammar)
+automaton::Automaton ToAutomaton::convert(const grammar::Grammar& grammar)
 {
      automaton::Automaton* out = NULL;
-     grammar.getData().Accept((void*) &out, RGtoFA::RG_TO_FA_CONVERSION);
+     grammar.getData().Accept((void*) &out, ToAutomaton::TO_AUTOMATON);
      automaton::Automaton res = std::move(*out);
      delete out;
      return res;
 }
 
-automaton::NFA RGtoFA::convert(const grammar::LeftRG& grammar)
+automaton::NFA ToAutomaton::convert(const grammar::LeftRG& grammar)
 {
     std::map<alphabet::Symbol, automaton::State> stateMap;
     std::set<automaton::State> states;
@@ -71,7 +69,7 @@ automaton::NFA RGtoFA::convert(const grammar::LeftRG& grammar)
     return automaton;
 }
 
-automaton::NFA RGtoFA::convert(const grammar::RightRG& grammar)
+automaton::NFA ToAutomaton::convert(const grammar::RightRG& grammar)
 {
     std::map<alphabet::Symbol, automaton::State> stateMap;
     std::set<automaton::State> states;
@@ -119,30 +117,30 @@ automaton::NFA RGtoFA::convert(const grammar::RightRG& grammar)
     return automaton;
 }
 
-void RGtoFA::Visit(void* userData, const grammar::RightRG& grammar) const
+void ToAutomaton::Visit(void* userData, const grammar::RightRG& grammar) const
 {
     automaton::Automaton* & out = *((automaton::Automaton**) userData);
     out = new automaton::Automaton(this->convert(grammar));
 }
 
-void RGtoFA::Visit(void* userData, const grammar::LeftRG& grammar) const
+void ToAutomaton::Visit(void* userData, const grammar::LeftRG& grammar) const
 {
     automaton::Automaton* & out = *((automaton::Automaton**) userData);
     out = new automaton::Automaton(this->convert(grammar));
 }
 
-void RGtoFA::Visit(void*, const grammar::RightLG&) const
+void ToAutomaton::Visit(void*, const grammar::RightLG&) const
 {
     throw exception::AlibException("Unsupported grammar type RightLG");
 }
 
-void RGtoFA::Visit(void*, const grammar::LeftLG&) const
+void ToAutomaton::Visit(void*, const grammar::LeftLG&) const
 {
     throw exception::AlibException("Unsupported grammar type LeftLG");
 }
 
-const RGtoFA RGtoFA::RG_TO_FA_CONVERSION;
+const ToAutomaton ToAutomaton::TO_AUTOMATON;
 
-} /* namespace rg2fa */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace grammar */
diff --git a/alib2algo/src/grammar/toAutomaton/RGtoFA.h b/alib2algo/src/grammar/convert/ToAutomaton.h
similarity index 77%
rename from alib2algo/src/grammar/toAutomaton/RGtoFA.h
rename to alib2algo/src/grammar/convert/ToAutomaton.h
index d88359532b2862ca676e46e988f4aa43e9dab1dc..2f069ef9e6c84b6ed0785b13aea7fbacde2c032e 100644
--- a/alib2algo/src/grammar/toAutomaton/RGtoFA.h
+++ b/alib2algo/src/grammar/convert/ToAutomaton.h
@@ -1,12 +1,12 @@
 /*
- * RGtoFA.h
+ * ToAutomaton.h
  *
  * Created on: 1. 11. 2013
  * Author: Tomas Pecka
  */
 
-#ifndef __RGTOFA_H__
-#define __RGTOFA_H__
+#ifndef _TO_AUTOMATON_H_
+#define _TO_AUTOMATON_H_
 
 #include <grammar/Grammar.h>
 #include <grammar/Regular/LeftRG.h>
@@ -15,17 +15,15 @@
 #include <automaton/Automaton.h>
 #include <automaton/FSM/NFA.h>
 
-namespace conversions
-{
+namespace grammar {
 
-namespace rg2fa
-{
+namespace convert {
 
 /**
  * Converts regular grammar to nondeterministic finite automaton.
  * Sources: Melichar 2.98 (RightRG -> NFA) and 2.102 (LeftRG -> NFA).
  */
-class RGtoFA : public grammar::VisitableConstRGBase
+class ToAutomaton : public grammar::VisitableConstRGBase
 {
 public:
     /**
@@ -44,11 +42,11 @@ private:
     void Visit(void*, const grammar::RightLG& grammar) const;
     void Visit(void*, const grammar::LeftLG& grammar) const;
 
-    static const RGtoFA RG_TO_FA_CONVERSION;
+    static const ToAutomaton TO_AUTOMATON;
 };
 
-} /* namespace rg2fa */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace grammar */
 
-#endif /* __RGTOFA_H__ */
+#endif /* _TO_AUTOMATON_H_ */
diff --git a/alib2algo/src/grammar/toGrammar/RightToLeftRegularGrammar.cpp b/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp
similarity index 72%
rename from alib2algo/src/grammar/toGrammar/RightToLeftRegularGrammar.cpp
rename to alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp
index 71bbf621fc4a4eed164601a6e0303c0b38db0645..e0eaa76cc0562710eb82fc113ee8680d30d336c3 100644
--- a/alib2algo/src/grammar/toGrammar/RightToLeftRegularGrammar.cpp
+++ b/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp
@@ -1,30 +1,28 @@
 /*
- * RightToLeftRegularGrammar.cpp
+ * ToGrammarLeftRG.cpp
  *
  *  Created on: 8. 3. 2014
  *      Author: Tomas Pecka
  */
 
-#include "RightToLeftRegularGrammar.h"
+#include "ToGrammarLeftRG.h"
 
 #include <exception/AlibException.h>
 
-namespace conversions
-{
+namespace grammar {
 
-namespace rg2rg
-{
+namespace convert {
 
-grammar::LeftRG RightToLeftRegularGrammar::convert(const grammar::Grammar& grammar)
+grammar::LeftRG ToGrammarLeftRG::convert(const grammar::Grammar& grammar)
 {
 	grammar::LeftRG* out = NULL;
-	grammar.getData().Accept((void*) &out, RightToLeftRegularGrammar::RIGHT_TO_LEFT_REGULAR_GRAMMAR);
+	grammar.getData().Accept((void*) &out, ToGrammarLeftRG::TO_GRAMMAR_LEFT_RG);
 	grammar::LeftRG res = std::move(*out);
 	delete out;
 	return res;
 }
 
-grammar::LeftRG RightToLeftRegularGrammar::convert(const grammar::RightRG& grammar)
+grammar::LeftRG ToGrammarLeftRG::convert(const grammar::RightRG& grammar)
 {
 	// 1.
 	alphabet::Symbol s = alphabet::createUniqueSymbol( grammar.getInitialSymbol( ), grammar.getNonterminalAlphabet(), grammar.getTerminalAlphabet() );
@@ -73,30 +71,30 @@ grammar::LeftRG RightToLeftRegularGrammar::convert(const grammar::RightRG& gramm
 	return lrg;
 }
 
-void RightToLeftRegularGrammar::Visit(void* userData, const grammar::RightRG& grammar) const
+void ToGrammarLeftRG::Visit(void* userData, const grammar::RightRG& grammar) const
 {
 	grammar::LeftRG* & out = *((grammar::LeftRG**) userData);
 	out = new grammar::LeftRG(this->convert(grammar));
 }
 
-void RightToLeftRegularGrammar::Visit(void*, const grammar::LeftRG&) const
+void ToGrammarLeftRG::Visit(void*, const grammar::LeftRG&) const
 {
 	throw exception::AlibException("Unsupported grammar type RightRG");
 }
 
-void RightToLeftRegularGrammar::Visit(void*, const grammar::RightLG&) const
+void ToGrammarLeftRG::Visit(void*, const grammar::RightLG&) const
 {
 	throw exception::AlibException("Unsupported grammar type RightLG");
 }
 
-void RightToLeftRegularGrammar::Visit(void*, const grammar::LeftLG&) const
+void ToGrammarLeftRG::Visit(void*, const grammar::LeftLG&) const
 {
 	throw exception::AlibException("Unsupported grammar type LeftLG");
 }
 
-const RightToLeftRegularGrammar RightToLeftRegularGrammar::RIGHT_TO_LEFT_REGULAR_GRAMMAR;
+const ToGrammarLeftRG ToGrammarLeftRG::TO_GRAMMAR_LEFT_RG;
 
 
-} /* namespace rg2rg */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace grammar */
diff --git a/alib2algo/src/grammar/toGrammar/RightToLeftRegularGrammar.h b/alib2algo/src/grammar/convert/ToGrammarLeftRG.h
similarity index 67%
rename from alib2algo/src/grammar/toGrammar/RightToLeftRegularGrammar.h
rename to alib2algo/src/grammar/convert/ToGrammarLeftRG.h
index a965dc3926751e910b2a6efe2749e59512b254fe..58648f091a7eb5a12177d5a430586a270cc6a96b 100644
--- a/alib2algo/src/grammar/toGrammar/RightToLeftRegularGrammar.h
+++ b/alib2algo/src/grammar/convert/ToGrammarLeftRG.h
@@ -1,27 +1,25 @@
 /*
- * RightToLeftRegularGrammar.h
+ * ToGrammarLeftRG.h
  *
  *  Created on: 8. 3. 2014
  *      Author: Tomas Pecka
  */
 
-#ifndef RIGHT_TO_LEFT_REGULAR_GRAMMAR_H_
-#define RIGHT_TO_LEFT_REGULAR_GRAMMAR_H_
+#ifndef TO_GRAMMAR_LEFT_RG_H_
+#define TO_GRAMMAR_LEFT_RG_H_
 
 #include <grammar/Grammar.h>
 #include <grammar/Regular/LeftRG.h>
 #include <grammar/Regular/RightRG.h>
 
-namespace conversions
-{
+namespace grammar {
 
-namespace rg2rg
-{
+namespace convert {
 
 /**
  * Converts right regular grammar to left regular grammar.
  */
-class RightToLeftRegularGrammar : public grammar::VisitableConstRGBase
+class ToGrammarLeftRG : public grammar::VisitableConstRGBase
 {
 public:
     /**
@@ -38,11 +36,11 @@ private:
     void Visit(void*, const grammar::RightLG& grammar) const;
     void Visit(void*, const grammar::LeftLG& grammar) const;
 
-    static const RightToLeftRegularGrammar RIGHT_TO_LEFT_REGULAR_GRAMMAR;
+    static const ToGrammarLeftRG TO_GRAMMAR_LEFT_RG;
 };
 
-} /* namespace rg2rg */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace grammar */
 
-#endif /* RIGHT_TO_LEFT_REGULAR_GRAMMAR_H_ */
+#endif /* TO_GRAMMAR_LEFT_RG_H_ */
diff --git a/alib2algo/src/grammar/toGrammar/LeftToRightRegularGrammar.cpp b/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp
similarity index 72%
rename from alib2algo/src/grammar/toGrammar/LeftToRightRegularGrammar.cpp
rename to alib2algo/src/grammar/convert/ToGrammarRightRG.cpp
index b784f0e5c03890be0b380aa067aeda5303706257..ae81d66fb1c4aa033c50964d9ecd8414199d9a24 100644
--- a/alib2algo/src/grammar/toGrammar/LeftToRightRegularGrammar.cpp
+++ b/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp
@@ -1,28 +1,28 @@
 /*
- * LeftToRightRegularGrammar.cpp
+ * ToGrammarRightRG.cpp
  *
  *  Created on: 8. 3. 2014
  *      Author: Tomas Pecka
  */
 
-#include "LeftToRightRegularGrammar.h"
+#include "ToGrammarRightRG.h"
 
 #include <exception/AlibException.h>
 
-namespace conversions {
+namespace grammar {
 
-namespace rg2rg {
+namespace convert {
 
-grammar::RightRG LeftToRightRegularGrammar::convert(const grammar::Grammar& grammar)
+grammar::RightRG ToGrammarRightRG::convert(const grammar::Grammar& grammar)
 {
 	grammar::RightRG* out = NULL;
-	grammar.getData().Accept((void*) &out, LeftToRightRegularGrammar::LEFT_TO_RIGHT_REGULAR_GRAMMAR);
+	grammar.getData().Accept((void*) &out, ToGrammarRightRG::TO_GRAMMAR_RIGHT_RG);
 	grammar::RightRG res = std::move(*out);
 	delete out;
 	return res;
 }
 
-grammar::RightRG LeftToRightRegularGrammar::convert(const grammar::LeftRG& grammar)
+grammar::RightRG ToGrammarRightRG::convert(const grammar::LeftRG& grammar)
 {
 	// 1.
 	alphabet::Symbol s = alphabet::createUniqueSymbol( grammar.getInitialSymbol( ), grammar.getNonterminalAlphabet(), grammar.getTerminalAlphabet() );
@@ -71,29 +71,29 @@ grammar::RightRG LeftToRightRegularGrammar::convert(const grammar::LeftRG& gramm
 	return rrg;
 }
 
-void LeftToRightRegularGrammar::Visit(void*, const grammar::RightRG&) const
+void ToGrammarRightRG::Visit(void*, const grammar::RightRG&) const
 {
 	throw exception::AlibException("Unsupported grammar type RightRG");
 }
 
-void LeftToRightRegularGrammar::Visit(void* userData, const grammar::LeftRG& grammar) const
+void ToGrammarRightRG::Visit(void* userData, const grammar::LeftRG& grammar) const
 {
 	grammar::RightRG* & out = *((grammar::RightRG**) userData);
 	out = new grammar::RightRG(this->convert(grammar));
 }
 
-void LeftToRightRegularGrammar::Visit(void*, const grammar::RightLG&) const
+void ToGrammarRightRG::Visit(void*, const grammar::RightLG&) const
 {
 	throw exception::AlibException("Unsupported grammar type RightLG");
 }
 
-void LeftToRightRegularGrammar::Visit(void*, const grammar::LeftLG&) const
+void ToGrammarRightRG::Visit(void*, const grammar::LeftLG&) const
 {
 	throw exception::AlibException("Unsupported grammar type LeftLG");
 }
 
-const LeftToRightRegularGrammar LeftToRightRegularGrammar::LEFT_TO_RIGHT_REGULAR_GRAMMAR;
+const ToGrammarRightRG ToGrammarRightRG::TO_GRAMMAR_RIGHT_RG;
 
-} /* namespace rg2rg */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace grammar */
diff --git a/alib2algo/src/grammar/toGrammar/LeftToRightRegularGrammar.h b/alib2algo/src/grammar/convert/ToGrammarRightRG.h
similarity index 67%
rename from alib2algo/src/grammar/toGrammar/LeftToRightRegularGrammar.h
rename to alib2algo/src/grammar/convert/ToGrammarRightRG.h
index 350eef77aa296b3291b26245aed3e4399bd156c9..468b72aa3a8fac45598d0d68ce16fafce45ab5af 100644
--- a/alib2algo/src/grammar/toGrammar/LeftToRightRegularGrammar.h
+++ b/alib2algo/src/grammar/convert/ToGrammarRightRG.h
@@ -1,26 +1,25 @@
 /*
- * LeftToRightRegularGrammar.h
+ * ToGrammarRightRG.h
  *
  *  Created on: 8. 3. 2014
  *      Author: Tomas Pecka
  */
 
-#ifndef LEFT_TORIGHT_REGULAR_GRAMMAR_H_
-#define LEFT_TORIGHT_REGULAR_GRAMMAR_H_
+#ifndef TO_GRAMMAR_RIGHT_RG_H_
+#define TO_GRAMMAR_RIGHT_RG_H_
 
 #include <grammar/Grammar.h>
 #include <grammar/Regular/LeftRG.h>
 #include <grammar/Regular/RightRG.h>
 
-namespace conversions{
+namespace grammar {
 
-namespace rg2rg
-{
+namespace convert {
 
 /**
  * Converts left regular grammar to right regular grammar.
  */
-class LeftToRightRegularGrammar : public grammar::VisitableConstRGBase
+class ToGrammarRightRG : public grammar::VisitableConstRGBase
 {
 public:
    /**
@@ -37,11 +36,11 @@ private:
     void Visit(void*, const grammar::RightLG& grammar) const;
     void Visit(void*, const grammar::LeftLG& grammar) const;
 
-    static const LeftToRightRegularGrammar LEFT_TO_RIGHT_REGULAR_GRAMMAR;
+    static const ToGrammarRightRG TO_GRAMMAR_RIGHT_RG;
 };
 
-} /* namespace rg2rg */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace grammar */
 
-#endif /* LEFT_TO_RIGHT_REGULAR_GRAMMAR_H_ */
+#endif /* TO_GRAMMAR_RIGHT_RG_H_ */
diff --git a/alib2algo/src/grammar/toRegexp/Algebraic.cpp b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.cpp
similarity index 77%
rename from alib2algo/src/grammar/toRegexp/Algebraic.cpp
rename to alib2algo/src/grammar/convert/ToRegExpAlgebraic.cpp
index cdef84a2159881e4153bc58198207787efdb4982..5deb9296f085beec26595d62bf97aa986aac94c4 100644
--- a/alib2algo/src/grammar/toRegexp/Algebraic.cpp
+++ b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.cpp
@@ -1,11 +1,11 @@
 /*
- * Algebraic.cpp
+ * ToRegExpAlgebraic.cpp
  *
  *  Created on: 4. 3. 2014
  *      Author: Tomas Pecka
  */
 
-#include "Algebraic.h"
+#include "ToRegExpAlgebraic.h"
 
 #include "../../equations/LeftRegularEquationSolver.h"
 #include "../../equations/RightRegularEquationSolver.h"
@@ -13,22 +13,20 @@
 #include <exception/AlibException.h>
 #include <regexp/unbounded/UnboundedRegExpElements.h>
 
-namespace conversions
-{
+namespace grammar {
 
-namespace rg2re
-{
+namespace convert {
 
-regexp::RegExp Algebraic::convert(const grammar::Grammar& grammar)
+regexp::RegExp ToRegExpAlgebraic::convert(const grammar::Grammar& grammar)
 {
     regexp::RegExp* out = NULL;
-    grammar.getData().Accept((void*) &out, Algebraic::RG_TO_RE_ALGEBRAIC);
+    grammar.getData().Accept((void*) &out, ToRegExpAlgebraic::TO_REG_EXP_ALGEBRAIC);
     regexp::RegExp res = std::move(*out);
     delete out;
     return res;
 }
 
-regexp::RegExp Algebraic::convert(const grammar::LeftRG& grammar)
+regexp::RegExp ToRegExpAlgebraic::convert(const grammar::LeftRG& grammar)
 {
     equations::LeftRegularEquationSolver solver;
 
@@ -58,7 +56,7 @@ regexp::RegExp Algebraic::convert(const grammar::LeftRG& grammar)
 
     return regexp::RegExp{solver.solve(grammar.getInitialSymbol())};
 }
-regexp::RegExp Algebraic::convert(const grammar::RightRG& grammar)
+regexp::RegExp ToRegExpAlgebraic::convert(const grammar::RightRG& grammar)
 {
     equations::RightRegularEquationSolver solver;
 
@@ -89,30 +87,30 @@ regexp::RegExp Algebraic::convert(const grammar::RightRG& grammar)
     return regexp::RegExp{solver.solve(grammar.getInitialSymbol())};
 }
 
-void Algebraic::Visit(void* userData, const grammar::RightRG& grammar) const
+void ToRegExpAlgebraic::Visit(void* userData, const grammar::RightRG& grammar) const
 {
     regexp::RegExp* & out = *((regexp::RegExp**) userData);
     out = new regexp::RegExp(this->convert(grammar));
 }
 
-void Algebraic::Visit(void* userData, const grammar::LeftRG& grammar) const
+void ToRegExpAlgebraic::Visit(void* userData, const grammar::LeftRG& grammar) const
 {
     regexp::RegExp* & out = *((regexp::RegExp**) userData);
     out = new regexp::RegExp(this->convert(grammar));
 }
 
-void Algebraic::Visit(void*, const grammar::RightLG&) const
+void ToRegExpAlgebraic::Visit(void*, const grammar::RightLG&) const
 {
     throw exception::AlibException("Unsupported grammar type RightLG");
 }
 
-void Algebraic::Visit(void*, const grammar::LeftLG&) const
+void ToRegExpAlgebraic::Visit(void*, const grammar::LeftLG&) const
 {
     throw exception::AlibException("Unsupported grammar type LeftLG");
 }
 
-const Algebraic Algebraic::RG_TO_RE_ALGEBRAIC;
+const ToRegExpAlgebraic ToRegExpAlgebraic::TO_REG_EXP_ALGEBRAIC;
 
-} /* namespace rg2re */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace grammar */
diff --git a/alib2algo/src/grammar/toRegexp/Algebraic.h b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h
similarity index 69%
rename from alib2algo/src/grammar/toRegexp/Algebraic.h
rename to alib2algo/src/grammar/convert/ToRegExpAlgebraic.h
index bd4741d891fc06927fcda73a3a6b229978bc165f..3370fc3dfd51c874edf9cefb109710e21294ab74 100644
--- a/alib2algo/src/grammar/toRegexp/Algebraic.h
+++ b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h
@@ -1,12 +1,12 @@
 /*
- * Algebraic.h
+ * ToRegExpAlgebraic.h
  *
  *  Created on: 4. 3. 2014
  *      Author: Tomas Pecka
  */
 
-#ifndef RG2RE_ALGEBRAIC_H_
-#define RG2RE_ALGEBRAIC_H_
+#ifndef GRAMMAR_TO_REG_EXP_ALGEBRAIC_H_
+#define GRAMMAR_TO_REG_EXP_ALGEBRAIC_H_
 
 #include <grammar/Grammar.h>
 #include <grammar/Regular/RightRG.h>
@@ -14,13 +14,11 @@
 
 #include <regexp/RegExp.h>
 
-namespace conversions
-{
+namespace grammar {
 
-namespace rg2re
-{
+namespace convert {
 
-class Algebraic : public grammar::VisitableConstRGBase
+class ToRegExpAlgebraic : public grammar::VisitableConstRGBase
 {
 public:
     /**
@@ -38,11 +36,11 @@ protected:
     void Visit(void*, const grammar::RightLG& grammar) const;
     void Visit(void*, const grammar::LeftLG& grammar) const;
 
-    static const Algebraic RG_TO_RE_ALGEBRAIC;
+    static const ToRegExpAlgebraic TO_REG_EXP_ALGEBRAIC;
 };
 
-} /* namespace rg2re */
+} /* namespace covert */
 
-} /* namespace conversions */
+} /* namespace grammar */
 
-#endif /* RG2RE_ALGEBRAIC_H_ */
+#endif /* GRAMMAR_TO_REG_EXP_ALGEBRAIC_H_ */
diff --git a/alib2algo/src/regexp/GlushkovTraversal.cpp b/alib2algo/src/regexp/GlushkovTraversal.cpp
index 453d059bb88a87467e4afa33e44421e6c757572d..b622ed1a01b315c4cd03eac7e3ade2fd37d101bb 100644
--- a/alib2algo/src/regexp/GlushkovTraversal.cpp
+++ b/alib2algo/src/regexp/GlushkovTraversal.cpp
@@ -112,7 +112,7 @@ set<regexp::UnboundedRegExpSymbol const *> GlushkovTraversal::first( regexp::Unb
         tmp = first( element );
         ret.insert( tmp.begin( ), tmp.end( ) );
 
-        if(! regexp::RegExpEpsilon::languageContainsEpsilon(*element)) // If regexp of this subtree can match epsilon, then we need to add next subtree
+        if(! regexp::properties::RegExpEpsilon::languageContainsEpsilon(*element)) // If regexp of this subtree can match epsilon, then we need to add next subtree
             break;
     }
 
@@ -188,7 +188,7 @@ set<regexp::UnboundedRegExpSymbol const *> GlushkovTraversal::last( regexp::Unbo
         tmp = last( *it );
         ret.insert( tmp.begin( ), tmp.end( ) );
 
-        if( ! regexp::RegExpEpsilon::languageContainsEpsilon(**it) )
+        if( ! regexp::properties::RegExpEpsilon::languageContainsEpsilon(**it) )
             break;
     }
 
@@ -276,7 +276,7 @@ set<regexp::UnboundedRegExpSymbol const *> GlushkovTraversal::follow( regexp::Un
                 tmp = first( *f );
                 ret.insert( tmp.begin( ), tmp.end( ) );
 
-                if( ! regexp::RegExpEpsilon::languageContainsEpsilon( **f ) )
+                if( ! regexp::properties::RegExpEpsilon::languageContainsEpsilon( **f ) )
                     break;
             }
         }
diff --git a/alib2algo/src/regexp/toAutomaton/BrzozowskiDerivation.cpp b/alib2algo/src/regexp/convert/ToAutomatonDerivation.cpp
similarity index 74%
rename from alib2algo/src/regexp/toAutomaton/BrzozowskiDerivation.cpp
rename to alib2algo/src/regexp/convert/ToAutomatonDerivation.cpp
index 3d678c72a569da86fb1cb2ee339f4cfba8f38a95..388f7a98d1921db13fcb8a85c77a9e49ca7307e7 100644
--- a/alib2algo/src/regexp/toAutomaton/BrzozowskiDerivation.cpp
+++ b/alib2algo/src/regexp/convert/ToAutomatonDerivation.cpp
@@ -1,11 +1,11 @@
 /*
- * BrzozowskiDerivation.cpp
+ * ToAutomatonDerivation.cpp
  *
  *  Created on: 11. 1. 2014
  *	  Author: Tomas Pecka
  */
 
-#include "BrzozowskiDerivation.h"
+#include "ToAutomatonDerivation.h"
 
 #include <set>
 #include <deque>
@@ -19,23 +19,21 @@
 #include "../simplify/RegExpOptimize.h"
 #include "../properties/RegExpEpsilon.h"
 
-namespace conversions
-{
+namespace regexp {
 
-namespace re2fa
-{
+namespace convert {
 
-automaton::Automaton BrzozowskiDerivation::convert(const regexp::RegExp& regexp)
+automaton::Automaton ToAutomatonDerivation::convert(const regexp::RegExp& regexp)
 {
 	automaton::Automaton* out = NULL;
-	regexp.getData().Accept((void*) &out, BrzozowskiDerivation::BRZOZOWSKI_DERIVATION);
+	regexp.getData().Accept((void*) &out, ToAutomatonDerivation::TO_AUTOMATON_DERIVATION);
 	automaton::Automaton res = std::move(*out);
 	delete out;
 	return res;
 }
 
 template<class T>
-automaton::NFA BrzozowskiDerivation::convert(const T& regexp)
+automaton::NFA ToAutomatonDerivation::convert(const T& regexp)
 {
 	// 1.
 	regexp::RegExpOptimize opt;
@@ -111,29 +109,29 @@ automaton::NFA BrzozowskiDerivation::convert(const T& regexp)
 
 	for(const auto& r : Q)
 	{
-		if(regexp::RegExpEpsilon::languageContainsEpsilon(r))
+		if(regexp::properties::RegExpEpsilon::languageContainsEpsilon(r))
 			automaton.addFinalState(stateMap.find(r)->second);
 	}
 
 	return automaton;
 }
 
-template automaton::NFA BrzozowskiDerivation::convert(const regexp::FormalRegExp& regexp);
-template automaton::NFA BrzozowskiDerivation::convert(const regexp::UnboundedRegExp& regexp);
+template automaton::NFA ToAutomatonDerivation::convert(const regexp::FormalRegExp& regexp);
+template automaton::NFA ToAutomatonDerivation::convert(const regexp::UnboundedRegExp& regexp);
 
-void BrzozowskiDerivation::Visit(void* userData, const regexp::FormalRegExp& regexp) const
+void ToAutomatonDerivation::Visit(void* userData, const regexp::FormalRegExp& regexp) const
 {
 	automaton::Automaton* &out = *((automaton::Automaton**) userData);
 	out = new automaton::Automaton(this->convert(regexp));
 }
-void BrzozowskiDerivation::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
+void ToAutomatonDerivation::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
 {
 	automaton::Automaton* &out = *((automaton::Automaton**) userData);
 	out = new automaton::Automaton(this->convert(regexp));
 }
 
-const BrzozowskiDerivation BrzozowskiDerivation::BRZOZOWSKI_DERIVATION;
+const ToAutomatonDerivation ToAutomatonDerivation::TO_AUTOMATON_DERIVATION;
 
-} /* namespace re2fa */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
diff --git a/alib2algo/src/regexp/toAutomaton/BrzozowskiDerivation.h b/alib2algo/src/regexp/convert/ToAutomatonDerivation.h
similarity index 67%
rename from alib2algo/src/regexp/toAutomaton/BrzozowskiDerivation.h
rename to alib2algo/src/regexp/convert/ToAutomatonDerivation.h
index a3c249dfe7ab5465b2547b4100af12c1139a50f6..7b26ff65f4d23332521b1e7e02b05748d756bf71 100644
--- a/alib2algo/src/regexp/toAutomaton/BrzozowskiDerivation.h
+++ b/alib2algo/src/regexp/convert/ToAutomatonDerivation.h
@@ -1,12 +1,12 @@
 /*
- * BrzozowskiDerivation.h
+ * ToAutomatonDerivation.h
  *
  *  Created on: 11. 1. 2014
  *	  Author: Tomas Pecka
  */
 
-#ifndef RE2FA_BRZOZOWSKIDERIVATION_H_
-#define RE2FA_BRZOZOWSKIDERIVATION_H_
+#ifndef TO_AUTOMATON_DERIVATION_H_
+#define TO_AUTOMATON_DERIVATION_H_
 
 #include <regexp/RegExp.h>
 #include <regexp/formal/FormalRegExp.h>
@@ -15,17 +15,15 @@
 #include <automaton/Automaton.h>
 #include <automaton/FSM/NFA.h>
 
-namespace conversions
-{
+namespace regexp {
 
-namespace re2fa
-{
+namespace convert {
 
 /**
  * Converts regular expression to finite automaton using BrzozowskiDerivation algorithm (derivations of regular expressions).
  * Source: Melichar 2.110
  */
-class BrzozowskiDerivation : public regexp::VisitableRegExpBase::const_visitor_type
+class ToAutomatonDerivation : public regexp::VisitableRegExpBase::const_visitor_type
 {
 public:
 	/**
@@ -41,11 +39,11 @@ private:
 	void Visit(void* , const regexp::FormalRegExp& regexp) const;
 	void Visit(void* , const regexp::UnboundedRegExp& regexp) const;
 
-	static const BrzozowskiDerivation BRZOZOWSKI_DERIVATION;
+	static const ToAutomatonDerivation TO_AUTOMATON_DERIVATION;
 };
 
-} /* namespace re2fa */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
 
-#endif /* RE2FA_BRZOZOWSKIDERIVATION_H_ */
+#endif /* TO_AUTOMATON_DERIVATION_H_ */
diff --git a/alib2algo/src/regexp/toAutomaton/GlushkovNFA.cpp b/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
similarity index 68%
rename from alib2algo/src/regexp/toAutomaton/GlushkovNFA.cpp
rename to alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
index 56c73aa1e3fbaffe56dd46ee4e8f59810e66918a..7f25196efdb89151e60ddb879ce93df8f3136763 100644
--- a/alib2algo/src/regexp/toAutomaton/GlushkovNFA.cpp
+++ b/alib2algo/src/regexp/convert/ToAutomatonGlushkov.cpp
@@ -1,11 +1,11 @@
 /*
- * GlushkovNFA.cpp
+ * ToAutomatonGlushkov.cpp
  *
  *  Created on: 11. 1. 2014
  *	  Author: Tomas Pecka
  */
 
-#include "GlushkovNFA.h"
+#include "ToAutomatonGlushkov.h"
 
 #include "label/Label.h"
 #include "label/LabelPairLabel.h"
@@ -16,19 +16,19 @@
 
 #include "../properties/RegExpEpsilon.h"
 
-namespace conversions{
+namespace regexp {
 
-namespace re2fa {
+namespace convert {
 
-automaton::NFA GlushkovNFA::convert(const regexp::RegExp& regexp) {
+automaton::NFA ToAutomatonGlushkov::convert(const regexp::RegExp& regexp) {
 	automaton::NFA* out = nullptr;
-	regexp.getData().Accept((void*) &out, GlushkovNFA::GLUSHKOV_NFA);
+	regexp.getData().Accept((void*) &out, ToAutomatonGlushkov::TO_AUTOMATON_GLUSHKOV);
 	automaton::NFA res = std::move(*out);
 	delete out;
 	return res;
 }
 
-automaton::NFA GlushkovNFA::convert(const regexp::UnboundedRegExp& regexp)
+automaton::NFA ToAutomatonGlushkov::convert(const regexp::UnboundedRegExp& regexp)
 {
 	automaton::State q0( label::Label( label::LabelPairLabel( std::make_pair( label::labelFrom( 'q' ), label::labelFrom( 0 ) ) ) ) );
 	automaton::NFA automaton( q0 );
@@ -38,9 +38,9 @@ automaton::NFA GlushkovNFA::convert(const regexp::UnboundedRegExp& regexp)
 		automaton.addInputSymbol( symbol );
 
 	// steps 2, 3, 4
-    std::set<regexp::GlushkovPair> pairs;
-    const std::set<regexp::GlushkovSymbol> first = regexp::GlushkovTraversal::first(regexp);
-    const std::set<regexp::GlushkovSymbol> last = regexp::GlushkovTraversal::last(regexp);
+	std::set<regexp::GlushkovPair> pairs;
+	const std::set<regexp::GlushkovSymbol> first = regexp::GlushkovTraversal::first(regexp);
+	const std::set<regexp::GlushkovSymbol> last = regexp::GlushkovTraversal::last(regexp);
 	for( auto const& x : regexp::GlushkovTraversal::getSymbols( regexp ) )
 		for( auto const& f : regexp::GlushkovTraversal::follow( regexp, x ) ) {
 			pairs.insert( regexp::GlushkovPair( x, f ) );
@@ -48,7 +48,7 @@ automaton::NFA GlushkovNFA::convert(const regexp::UnboundedRegExp& regexp)
 	// \e in q0 check is in step 7
 
 	// step 5
-    std::map<regexp::GlushkovSymbol, automaton::State> stateMap;
+	std::map<regexp::GlushkovSymbol, automaton::State> stateMap;
 
 	for( auto const& symbol : regexp::GlushkovTraversal::getSymbols( regexp ) ) {
 		automaton::State q( label::Label( label::LabelPairLabel( std::make_pair( label::labelFrom( symbol.getInputSymbol( ) ), label::labelFrom( symbol.getId( ) ) ) ) ) );
@@ -77,13 +77,13 @@ automaton::NFA GlushkovNFA::convert(const regexp::UnboundedRegExp& regexp)
 		automaton.addFinalState( q );
 	}
 
-	if(regexp::RegExpEpsilon::languageContainsEpsilon(regexp))
+	if(regexp::properties::RegExpEpsilon::languageContainsEpsilon(regexp))
 		automaton.addFinalState( q0 );
 
 	return automaton;
 }
 
-void GlushkovNFA::Visit(void* userData, const regexp::FormalRegExp& regexp) const
+void ToAutomatonGlushkov::Visit(void* userData, const regexp::FormalRegExp& regexp) const
 {
 	/*
 	automaton::NFA* & out = *((automaton::NFA**) userData);
@@ -92,14 +92,14 @@ void GlushkovNFA::Visit(void* userData, const regexp::FormalRegExp& regexp) cons
 	throw exception::AlibException("Glushkov: Converting FormalRegExp NYI"); // TODO
 }
 
-void GlushkovNFA::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
+void ToAutomatonGlushkov::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
 {
 	automaton::NFA* & out = *((automaton::NFA**) userData);
 	out = new automaton::NFA(this->convert(regexp));
 }
 
-const GlushkovNFA GlushkovNFA::GLUSHKOV_NFA;
+const ToAutomatonGlushkov ToAutomatonGlushkov::TO_AUTOMATON_GLUSHKOV;
 
-} /* namespace fa2re */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
diff --git a/alib2algo/src/regexp/convert/ToAutomatonGlushkov.h b/alib2algo/src/regexp/convert/ToAutomatonGlushkov.h
new file mode 100644
index 0000000000000000000000000000000000000000..edf737ad00edd4ba0ca3f0793c44b56a6eb5cdf3
--- /dev/null
+++ b/alib2algo/src/regexp/convert/ToAutomatonGlushkov.h
@@ -0,0 +1,50 @@
+/*
+ * ToAutomatonGlushkov.h
+ *
+ *  Created on: 11. 1. 2014
+ *	  Author: Tomas Pecka
+ */
+
+#ifndef TO_AUTOMATON_GLUSHKOV_H_
+#define TO_AUTOMATON_GLUSHKOV_H_
+
+#include <map>
+
+#include <automaton/FSM/NFA.h>
+#include <regexp/RegExp.h>
+#include <regexp/formal/FormalRegExp.h>
+#include <regexp/unbounded/UnboundedRegExp.h>
+
+namespace regexp {
+
+namespace convert {
+
+/**
+ * Converts regular expression to finite automaton using Glushkov's NFA construction algorithm.
+ * Source: Melichar 2.107
+ */
+class ToAutomatonGlushkov : public regexp::VisitableRegExpBase::const_visitor_type
+{
+public:
+	/**
+	 * Performs conversion.
+	 * @param re Original regular expression.
+	 * @return NFA equivalent to original regular expression.
+	 */
+	static automaton::NFA convert(const regexp::RegExp& re);
+
+	static automaton::NFA convert(const regexp::UnboundedRegExp& re);
+	static automaton::NFA convert(const regexp::FormalRegExp& re);
+
+private:
+	void Visit(void*, const regexp::FormalRegExp& regexp) const;
+	void Visit(void*, const regexp::UnboundedRegExp& regexp) const;
+
+	static const ToAutomatonGlushkov TO_AUTOMATON_GLUSHKOV;
+};
+
+} /* namespace convert */
+
+} /* namespace regexp */
+
+#endif /* TO_AUTOMATON_GLUSHKOV_H_ */
diff --git a/alib2algo/src/regexp/toAutomaton/Thompson.cpp b/alib2algo/src/regexp/convert/ToAutomatonThompson.cpp
similarity index 84%
rename from alib2algo/src/regexp/toAutomaton/Thompson.cpp
rename to alib2algo/src/regexp/convert/ToAutomatonThompson.cpp
index b3fe522f0f88b5101de8432cfa56b841dd040145..a2b2611735233efccf2102e05f220a63527a234e 100644
--- a/alib2algo/src/regexp/toAutomaton/Thompson.cpp
+++ b/alib2algo/src/regexp/convert/ToAutomatonThompson.cpp
@@ -1,36 +1,34 @@
 /*
- * Thompson.cpp
+ * ToAutomatonThompson.cpp
  *
  *  Created on: 11. 1. 2014
  *	  Author: Tomas Pecka
  */
-#include "Thompson.h"
+#include "ToAutomatonThompson.h"
 #include <tuple>
 
-namespace conversions
-{
+namespace regexp {
 
-namespace re2fa
-{
+namespace convert {
 
-automaton::Automaton Thompson::convert(const regexp::RegExp& regexp)
+automaton::Automaton ToAutomatonThompson::convert(const regexp::RegExp& regexp)
 {
 	automaton::Automaton* out = NULL;
-	regexp.getData().Accept((void*) &out, Thompson::THOMPSON);
+	regexp.getData().Accept((void*) &out, ToAutomatonThompson::TO_AUTOMATON_THOMPSON);
 	automaton::Automaton res = std::move(*out);
 	delete out;
 	return res;
 }
 
 template<class T>
-automaton::EpsilonNFA Thompson::convert(const T& regexp)
+automaton::EpsilonNFA ToAutomatonThompson::convert(const T& regexp)
 {	//FIXME use actual algorithms that implement product alternation and iteration of re over automata and remove terrible TERRIBLE hack with dummy initial state
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> out(automaton::EpsilonNFA(automaton::State(0)), 1, nullptr, nullptr);
 
 	automaton::EpsilonNFA& automaton = std::get<0>(out);
 	automaton.setInputSymbols(regexp.getAlphabet());
 
-	regexp.getRegExp().Accept((void*) &out, Thompson::THOMPSON);
+	regexp.getRegExp().Accept((void*) &out, ToAutomatonThompson::TO_AUTOMATON_THOMPSON);
 
 	automaton.setInitialState(*std::get<2>(out));
 	automaton.setFinalStates(std::set<automaton::State>{*std::get<3>(out)});
@@ -42,13 +40,13 @@ automaton::EpsilonNFA Thompson::convert(const T& regexp)
 
 // ----------------------------------------------------------------------------
 
-void Thompson::Visit(void* userData, const regexp::FormalRegExp& regexp) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::FormalRegExp& regexp) const
 {
 	automaton::Automaton* & out = *((automaton::Automaton**) userData);
 	out = new automaton::Automaton(this->convert(regexp));
 }
 
-void Thompson::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
 {
 	automaton::Automaton* & out = *((automaton::Automaton**) userData);
 	out = new automaton::Automaton(this->convert(regexp));
@@ -56,7 +54,7 @@ void Thompson::Visit(void* userData, const regexp::UnboundedRegExp& regexp) cons
 
 // ----------------------------------------------------------------------------
 
-void Thompson::Visit(void* userData, const regexp::FormalRegExpAlternation& alternation) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::FormalRegExpAlternation& alternation) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 	automaton::EpsilonNFA& automaton = std::get<0>(out);
@@ -78,7 +76,7 @@ void Thompson::Visit(void* userData, const regexp::FormalRegExpAlternation& alte
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-void Thompson::Visit(void* userData, const regexp::FormalRegExpConcatenation& concatenation) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::FormalRegExpConcatenation& concatenation) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 
@@ -95,7 +93,7 @@ void Thompson::Visit(void* userData, const regexp::FormalRegExpConcatenation& co
 	// std::get<3>(out) = std::get<3>(out);
 }
 
-void Thompson::Visit(void* userData, const regexp::FormalRegExpIteration& iteration) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::FormalRegExpIteration& iteration) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 
@@ -116,7 +114,7 @@ void Thompson::Visit(void* userData, const regexp::FormalRegExpIteration& iterat
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-void Thompson::Visit(void* userData, const regexp::FormalRegExpSymbol& symbol) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::FormalRegExpSymbol& symbol) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 
@@ -132,7 +130,7 @@ void Thompson::Visit(void* userData, const regexp::FormalRegExpSymbol& symbol) c
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-void Thompson::Visit(void* userData, const regexp::FormalRegExpEpsilon&) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::FormalRegExpEpsilon&) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 
@@ -148,7 +146,7 @@ void Thompson::Visit(void* userData, const regexp::FormalRegExpEpsilon&) const
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-void Thompson::Visit(void* userData, const regexp::FormalRegExpEmpty&) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::FormalRegExpEmpty&) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 
@@ -166,7 +164,7 @@ void Thompson::Visit(void* userData, const regexp::FormalRegExpEmpty&) const
 
 // ----------------------------------------------------------------------------
 
-void Thompson::Visit(void* userData, const regexp::UnboundedRegExpAlternation& alternation) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::UnboundedRegExpAlternation& alternation) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 	automaton::EpsilonNFA& automaton = std::get<0>(out);
@@ -187,7 +185,7 @@ void Thompson::Visit(void* userData, const regexp::UnboundedRegExpAlternation& a
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-void Thompson::Visit(void* userData, const regexp::UnboundedRegExpConcatenation& concatenation) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::UnboundedRegExpConcatenation& concatenation) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 	automaton::EpsilonNFA& automaton = std::get<0>(out);
@@ -206,7 +204,7 @@ void Thompson::Visit(void* userData, const regexp::UnboundedRegExpConcatenation&
 	std::get<3>(out) = tails[tails.size()-1].second;
 }
 
-void Thompson::Visit(void* userData, const regexp::UnboundedRegExpIteration& iteration) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::UnboundedRegExpIteration& iteration) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 	automaton::EpsilonNFA& automaton = std::get<0>(out);
@@ -226,7 +224,7 @@ void Thompson::Visit(void* userData, const regexp::UnboundedRegExpIteration& ite
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-void Thompson::Visit(void* userData, const regexp::UnboundedRegExpSymbol& symbol) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::UnboundedRegExpSymbol& symbol) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 	automaton::EpsilonNFA& automaton = std::get<0>(out);
@@ -241,7 +239,7 @@ void Thompson::Visit(void* userData, const regexp::UnboundedRegExpSymbol& symbol
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-void Thompson::Visit(void* userData, const regexp::UnboundedRegExpEpsilon&) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::UnboundedRegExpEpsilon&) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 	automaton::EpsilonNFA& automaton = std::get<0>(out);
@@ -256,7 +254,7 @@ void Thompson::Visit(void* userData, const regexp::UnboundedRegExpEpsilon&) cons
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-void Thompson::Visit(void* userData, const regexp::UnboundedRegExpEmpty&) const
+void ToAutomatonThompson::Visit(void* userData, const regexp::UnboundedRegExpEmpty&) const
 {
 	std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*> &out = *(std::tuple<automaton::EpsilonNFA, int, const automaton::State*, const automaton::State*>*) userData;
 	automaton::EpsilonNFA& automaton = std::get<0>(out);
@@ -270,8 +268,8 @@ void Thompson::Visit(void* userData, const regexp::UnboundedRegExpEmpty&) const
 	std::get<3>(out) = &(*automaton.getStates().find(tail));
 }
 
-const Thompson Thompson::THOMPSON;
+const ToAutomatonThompson ToAutomatonThompson::TO_AUTOMATON_THOMPSON;
 
-} /* namespace re2fa */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
diff --git a/alib2algo/src/regexp/toAutomaton/Thompson.h b/alib2algo/src/regexp/convert/ToAutomatonThompson.h
similarity index 81%
rename from alib2algo/src/regexp/toAutomaton/Thompson.h
rename to alib2algo/src/regexp/convert/ToAutomatonThompson.h
index e127f07f54e53f48e9691986e9f04e6d0af0f312..e2608c9b1c12adccb75c390ac621a93fe5aa92a3 100644
--- a/alib2algo/src/regexp/toAutomaton/Thompson.h
+++ b/alib2algo/src/regexp/convert/ToAutomatonThompson.h
@@ -1,12 +1,12 @@
 /*
- * Thompson.h
+ * ToAutomatonThompson.h
  *
  *  Created on: 11. 1. 2014
  *	  Author: Tomas Pecka
  */
 
-#ifndef THOMPSON_H_
-#define THOMPSON_H_
+#ifndef TO_AUTOMATON_THOMPSON_H_
+#define TO_AUTOMATON_THOMPSON_H_
 
 #include <regexp/RegExp.h>
 #include <regexp/formal/FormalRegExpElements.h>
@@ -14,11 +14,9 @@
 #include <automaton/Automaton.h>
 #include <automaton/FSM/EpsilonNFA.h>
 
-namespace conversions
-{
+namespace regexp {
 
-namespace re2fa
-{
+namespace convert {
 
 /**
  * Converts regular expression to finite automaton using Thompson's Construction Algorithm (TCA).
@@ -28,7 +26,7 @@ namespace re2fa
  *  http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.21.7450&rep=rep1&type=ps
  *  Melichar 2.112
  */
-class Thompson : public regexp::VisitableRegExpBase::const_visitor_type, regexp::FormalRegExpElement::const_visitor_type, regexp::UnboundedRegExpElement::const_visitor_type
+class ToAutomatonThompson : public regexp::VisitableRegExpBase::const_visitor_type, regexp::FormalRegExpElement::const_visitor_type, regexp::UnboundedRegExpElement::const_visitor_type
 {
 public:
 	/**
@@ -59,11 +57,11 @@ private:
 	 void Visit(void*, const regexp::FormalRegExpEpsilon& epsilon) const;
 	 void Visit(void*, const regexp::FormalRegExpEmpty& empty) const;
 
-	 static const Thompson THOMPSON;
+	 static const ToAutomatonThompson TO_AUTOMATON_THOMPSON;
 };
 
-} /* namespace re2fa */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
 
-#endif /* THOMPSON_H_ */
+#endif /* TO_AUTOMATON_THOMPSON_H_ */
diff --git a/alib2algo/src/regexp/toGrammar/toRightRG/BrzozowskiDerivation.cpp b/alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.cpp
similarity index 74%
rename from alib2algo/src/regexp/toGrammar/toRightRG/BrzozowskiDerivation.cpp
rename to alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.cpp
index 0f3f27d84b21543c752efd470ef3f4f2fa17e093..666183c10f3d736836cf0e51adf18305ff687fd2 100644
--- a/alib2algo/src/regexp/toGrammar/toRightRG/BrzozowskiDerivation.cpp
+++ b/alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.cpp
@@ -1,11 +1,11 @@
 /*
- * BrzozowskiDerivation.cpp
+ * ToGrammarRightRGDerivation.cpp
  *
  *  Created on: 6. 3. 2014
  *	  Author: tomas
  */
 
-#include "BrzozowskiDerivation.h"
+#include "ToGrammarRightRGDerivation.h"
 
 #include <set>
 #include <deque>
@@ -14,27 +14,25 @@
 
 #include <std/hexavigesimal.h>
 
-#include "../../simplify/RegExpOptimize.h"
-#include "../../transform/RegExpDerivation.h"
-#include "../../properties/RegExpEpsilon.h"
+#include "../simplify/RegExpOptimize.h"
+#include "../transform/RegExpDerivation.h"
+#include "../properties/RegExpEpsilon.h"
 
-namespace conversions
-{
+namespace regexp {
 
-namespace re2rg
-{
+namespace convert {
 
-grammar::RightRG BrzozowskiDerivation::convert(const regexp::RegExp& regexp)
+grammar::RightRG ToGrammarRightRGDerivation::convert(const regexp::RegExp& regexp)
 {
 	grammar::RightRG* out = NULL;
-	regexp.getData().Accept((void*) &out, BrzozowskiDerivation::BRZOZOWSKI_DERIVATION);
+	regexp.getData().Accept((void*) &out, ToGrammarRightRGDerivation::TO_GRAMMAR_RIGHT_RG_DERIVATION);
 	grammar::RightRG res = std::move(*out);
 	delete out;
 	return res;
 }
 
 template<class T>
-grammar::RightRG BrzozowskiDerivation::convert(const T& regexp)
+grammar::RightRG ToGrammarRightRGDerivation::convert(const T& regexp)
 {
 	// 1.
 	regexp::RegExp V = regexp::RegExp{regexp::RegExpOptimize::optimize(regexp)};
@@ -105,33 +103,33 @@ grammar::RightRG BrzozowskiDerivation::convert(const T& regexp)
 
 			grammar.addRule(nonterminalMap.find(r)->second, std::make_pair(a, nonterminalMap.find(derived)->second));
 
-			if(regexp::RegExpEpsilon::languageContainsEpsilon(derived))
+			if(regexp::properties::RegExpEpsilon::languageContainsEpsilon(derived))
 				grammar.addRule(nonterminalMap.find(r)->second, a);
 		}
 	}
 
 	grammar.setInitialSymbol(nonterminalMap.find(V)->second);
 
-	if(regexp::RegExpEpsilon::languageContainsEpsilon(V))
+	if(regexp::properties::RegExpEpsilon::languageContainsEpsilon(V))
 		grammar.setGeneratesEpsilon(true); // okay, because of this feature we do not have to bother with extending the grammar with new rules and nonterminals. YAY!
 
 	return grammar;
 }
 
-void BrzozowskiDerivation::Visit(void* userData, const regexp::FormalRegExp& regexp) const
+void ToGrammarRightRGDerivation::Visit(void* userData, const regexp::FormalRegExp& regexp) const
 {
 	grammar::RightRG* &out = *((grammar::RightRG**) userData);
 	out = new grammar::RightRG(this->convert(regexp));
 }
 
-void BrzozowskiDerivation::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
+void ToGrammarRightRGDerivation::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
 {
 	grammar::RightRG* &out = *((grammar::RightRG**) userData);
 	out = new grammar::RightRG(this->convert(regexp));
 }
 
-const BrzozowskiDerivation BrzozowskiDerivation::BRZOZOWSKI_DERIVATION;
+const ToGrammarRightRGDerivation ToGrammarRightRGDerivation::TO_GRAMMAR_RIGHT_RG_DERIVATION;
 
-} /* namespace re2rg */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
diff --git a/alib2algo/src/regexp/toGrammar/toRightRG/BrzozowskiDerivation.h b/alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.h
similarity index 63%
rename from alib2algo/src/regexp/toGrammar/toRightRG/BrzozowskiDerivation.h
rename to alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.h
index 7a5814ad9ab02a7e4c166b5301f4582f6f676ad3..4027f7169173a6f70cfdfa406e9e8f70e2b14818 100644
--- a/alib2algo/src/regexp/toGrammar/toRightRG/BrzozowskiDerivation.h
+++ b/alib2algo/src/regexp/convert/ToGrammarRightRGDerivation.h
@@ -1,29 +1,27 @@
 /*
- * BrzozowskiDerivation.h
+ * ToGrammarRightRGDerivation.h
  *
  *  Created on: 6. 3. 2014
  *	  Author: Tomas Pecka
  */
 
-#ifndef RE2RG_BRZOZOWSKIDERIVATION_H_
-#define RE2RG_BRZOZOWSKIDERIVATION_H_
+#ifndef TO_GRAMMAR_RIGHT_RG_DERIVATION_H_
+#define TO_GRAMMAR_RIGHT_RG_DERIVATION_H_
 
 #include <grammar/Regular/RightRG.h>
 #include <regexp/RegExp.h>
 #include <regexp/formal/FormalRegExp.h>
 #include <regexp/unbounded/UnboundedRegExp.h>
 
-namespace conversions
-{
+namespace regexp {
 
-namespace re2rg
-{
+namespace convert {
 
 /**
  * Converts reg. expression to right regular grammar using brzozowski derivation algorithm.
  * Source: Melichar 2.137
  */
-class BrzozowskiDerivation : public regexp::VisitableRegExpBase::const_visitor_type
+class ToGrammarRightRGDerivation : public regexp::VisitableRegExpBase::const_visitor_type
 {
 public:
 	/**
@@ -39,11 +37,11 @@ private:
 	void Visit(void*, const regexp::FormalRegExp& regexp) const;
 	void Visit(void*, const regexp::UnboundedRegExp& regexp) const;
 
-	static const BrzozowskiDerivation BRZOZOWSKI_DERIVATION;
+	static const ToGrammarRightRGDerivation TO_GRAMMAR_RIGHT_RG_DERIVATION;
 };
 
-} /* namespace re2rg */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
 
-#endif /* RE2RG_BRZOZOWSKIDERIVATION_H_ */
+#endif /* TO_GRAMMAR_RIGHT_RG_DERIVATION_H_ */
diff --git a/alib2algo/src/regexp/toGrammar/toRightRG/GlushkovNFA.cpp b/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
similarity index 75%
rename from alib2algo/src/regexp/toGrammar/toRightRG/GlushkovNFA.cpp
rename to alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
index 1a1dbafa8f39c169aa82564466db64331000fe35..d60fa098d14aa782e308996db0d636ddbd8f8951 100644
--- a/alib2algo/src/regexp/toGrammar/toRightRG/GlushkovNFA.cpp
+++ b/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.cpp
@@ -1,11 +1,11 @@
 /*
- * Glushkov.cpp
+ * ToGrammarRightRGGlushkov.cpp
  *
  *  Created on: 11. 1. 2014
  *      Author: Tomas Pecka
  */
 
-#include "GlushkovNFA.h"
+#include "ToGrammarRightRGGlushkov.h"
 
 #include <algorithm>
 
@@ -13,28 +13,26 @@
 
 #include <label/LabelPairLabel.h>
 
-#include "../../GlushkovTraversal.h"
-#include "../../GlushkovPair.h"
-#include "../../GlushkovSymbol.h"
+#include "../GlushkovTraversal.h"
+#include "../GlushkovPair.h"
+#include "../GlushkovSymbol.h"
 
-#include "../../properties/RegExpEpsilon.h"
+#include "../properties/RegExpEpsilon.h"
 
-namespace conversions
-{
+namespace regexp {
 
-namespace re2rg
-{
+namespace convert {
 
-grammar::Grammar GlushkovNFA::convert(const regexp::RegExp& regexp)
+grammar::Grammar ToGrammarRightRGGlushkov::convert(const regexp::RegExp& regexp)
 {
     grammar::Grammar* out = NULL;
-    regexp.getData().Accept((void*) &out, GlushkovNFA::GLUSHKOV_NFA);
+    regexp.getData().Accept((void*) &out, ToGrammarRightRGGlushkov::TO_GRAMMAR_RIGHT_RG_GLUSHKOV);
     grammar::Grammar res = std::move(*out);
     delete out;
     return res;
 }
 
-grammar::RightRG GlushkovNFA::convert(const regexp::UnboundedRegExp& regexp)
+grammar::RightRG ToGrammarRightRGGlushkov::convert(const regexp::UnboundedRegExp& regexp)
 {
     alphabet::Symbol S = alphabet::symbolFrom("S");
     grammar::RightRG grammar(S);
@@ -89,14 +87,14 @@ grammar::RightRG GlushkovNFA::convert(const regexp::UnboundedRegExp& regexp)
                     grammar.addRule(rule.first, rhs.at(0));
     }
 
-    if(regexp::RegExpEpsilon::languageContainsEpsilon(regexp))
+    if(regexp::properties::RegExpEpsilon::languageContainsEpsilon(regexp))
         grammar.setGeneratesEpsilon(true);
 
     return grammar;
 }
 
 
-void GlushkovNFA::Visit(void* userData, const regexp::FormalRegExp& regexp) const
+void ToGrammarRightRGGlushkov::Visit(void* userData, const regexp::FormalRegExp& regexp) const
 {
     /*
     grammar::Grammar* & out = *((grammar::Grammar**) userData);
@@ -105,14 +103,14 @@ void GlushkovNFA::Visit(void* userData, const regexp::FormalRegExp& regexp) cons
     throw exception::AlibException("Glushkov: Converting FormalRegExp NYI"); // TODO
 }
 
-void GlushkovNFA::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
+void ToGrammarRightRGGlushkov::Visit(void* userData, const regexp::UnboundedRegExp& regexp) const
 {
     grammar::Grammar* & out = *((grammar::Grammar**) userData);
     out = new grammar::Grammar(this->convert(regexp));
 }
 
-const GlushkovNFA GlushkovNFA::GLUSHKOV_NFA;
+const ToGrammarRightRGGlushkov ToGrammarRightRGGlushkov::TO_GRAMMAR_RIGHT_RG_GLUSHKOV;
 
-} /* namespace re2rg */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
diff --git a/alib2algo/src/regexp/toGrammar/toRightRG/GlushkovNFA.h b/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.h
similarity index 68%
rename from alib2algo/src/regexp/toGrammar/toRightRG/GlushkovNFA.h
rename to alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.h
index 32de94e8b020907573114155fb9c1c8b33bea075..42a9cb9e82f76a6c94e63c5cd75a9763672e1957 100644
--- a/alib2algo/src/regexp/toGrammar/toRightRG/GlushkovNFA.h
+++ b/alib2algo/src/regexp/convert/ToGrammarRightRGGlushkov.h
@@ -1,12 +1,12 @@
 /*
- * Glushkov.h
+ * ToGrammarRightRGGlushkov.h
  *
  *  Created on: 11. 1. 2014
  *      Author: Tomas Pecka
  */
 
-#ifndef RE2RG_GLUSHKOVNFA_H_
-#define RE2RG_GLUSHKOVNFA_H_
+#ifndef TO_GRAMMAR_RIGHT_RG_GLUSHKOV_H_
+#define TO_GRAMMAR_RIGHT_RG_GLUSHKOV_H_
 
 #include <grammar/Grammar.h>
 #include <grammar/Regular/RightRG.h>
@@ -15,17 +15,15 @@
 #include <regexp/formal/FormalRegExp.h>
 #include <regexp/unbounded/UnboundedRegExp.h>
 
-namespace conversions
-{
+namespace regexp {
 
-namespace re2rg
-{
+namespace convert {
 
 /**
  * Converts regular expression to right regular grammar using Glushkov algorithm.
  * Source: None yet.
  */
-class GlushkovNFA : public regexp::VisitableRegExpBase::const_visitor_type
+class ToGrammarRightRGGlushkov : public regexp::VisitableRegExpBase::const_visitor_type
 {
 public:
     /**
@@ -42,11 +40,11 @@ private:
     void Visit(void*, const regexp::FormalRegExp& regexp) const;
     void Visit(void*, const regexp::UnboundedRegExp& regexp) const;
 
-    static const GlushkovNFA GLUSHKOV_NFA;
+    static const ToGrammarRightRGGlushkov TO_GRAMMAR_RIGHT_RG_GLUSHKOV;
 };
 
-} /* namespace re2rg */
+} /* namespace convert */
 
-} /* namespace conversions */
+} /* namespace regexp */
 
-#endif /* RE2RG_GLUSHKOVNFA_H_ */
+#endif /* TO_GRAMMAR_RIGHT_RG_GLUSHKOV_H_ */
diff --git a/alib2algo/src/regexp/generate/RandomRegExpFactory.cpp b/alib2algo/src/regexp/generate/RandomRegExpFactory.cpp
index 7dfd8eca9ecdbbcf29aa6bab8ef28d4dece83278..196802377d61ebe9fc9e4d690c0756b4090d4837 100644
--- a/alib2algo/src/regexp/generate/RandomRegExpFactory.cpp
+++ b/alib2algo/src/regexp/generate/RandomRegExpFactory.cpp
@@ -9,7 +9,9 @@
 
 #include <algorithm>
 
-namespace generator {
+namespace regexp {
+
+namespace generate {
 
 regexp::UnboundedRegExp RandomRegExpFactory::generateUnboundedRegExp( size_t leafNodes, size_t height, size_t alphabetSize ) {
 	srand( time( NULL ) );
@@ -142,4 +144,6 @@ const regexp::UnboundedRegExpElement* RandomRegExpFactory::SimpleUnboundedRegExp
 	}
 }
 
-}
+} /* namespace generate */
+
+} /* namespace regexp */
diff --git a/alib2algo/src/regexp/generate/RandomRegExpFactory.h b/alib2algo/src/regexp/generate/RandomRegExpFactory.h
index 0459faf3acffa1f6d7308dd508a4fe17b6f92179..eaee929c6c09017ebf1921415077a29dc98fe290 100644
--- a/alib2algo/src/regexp/generate/RandomRegExpFactory.h
+++ b/alib2algo/src/regexp/generate/RandomRegExpFactory.h
@@ -15,7 +15,9 @@
 #include <regexp/unbounded/UnboundedRegExp.h>
 #include <regexp/unbounded/UnboundedRegExpElements.h>
 
-namespace generator {
+namespace regexp {
+
+namespace generate {
 
 class RandomRegExpFactory {
 public:
@@ -27,6 +29,8 @@ private:
 	static const regexp::UnboundedRegExpElement* SimpleUnboundedRegExpElement(size_t n, size_t h, const std::vector<const regexp::UnboundedRegExpElement*> & elems);
 };
 
-}
+} /* namespace generate */
+
+} /* namespace regexp */
 
 #endif /* RANDOM_REG_EXP_FACTORY_H_ */
diff --git a/alib2algo/src/regexp/properties/RegExpEmpty.cpp b/alib2algo/src/regexp/properties/RegExpEmpty.cpp
index 16247f9328df4c77308a87236084275b3f58f622..eae0d1262feea3bd2b7c561eda283fede9a3af34 100644
--- a/alib2algo/src/regexp/properties/RegExpEmpty.cpp
+++ b/alib2algo/src/regexp/properties/RegExpEmpty.cpp
@@ -7,8 +7,9 @@
 
 #include "RegExpEmpty.h"
 
-namespace regexp
-{
+namespace regexp {
+
+namespace properties {
 
 bool RegExpEmpty::languageIsEmpty(const regexp::RegExp& regexp)
 {
@@ -157,4 +158,6 @@ void RegExpEmpty::Visit(void* data, const regexp::UnboundedRegExp& regexp) const
 
 const RegExpEmpty RegExpEmpty::REG_EXP_EMPTY;
 
+} /* namespace properties */
+
 } /* namespace regexp */
diff --git a/alib2algo/src/regexp/properties/RegExpEmpty.h b/alib2algo/src/regexp/properties/RegExpEmpty.h
index 8b2958e121a1cf60d0ee7035768d100262684711..d76fa5fac364d1b933b73f399832cf47fc14f20e 100644
--- a/alib2algo/src/regexp/properties/RegExpEmpty.h
+++ b/alib2algo/src/regexp/properties/RegExpEmpty.h
@@ -12,8 +12,9 @@
 #include <regexp/formal/FormalRegExpElements.h>
 #include <regexp/unbounded/UnboundedRegExpElements.h>
 
-namespace regexp
-{
+namespace regexp {
+
+namespace properties {
 
 /**
  * Determines whether regular expression is empty (regexp == \0)
@@ -48,6 +49,8 @@ private:
 	static const RegExpEmpty REG_EXP_EMPTY;
 };
 
+} /* namespace properties */
+
 } /* namespace regexp */
 
 #endif /* REG_EXP_EMPTY_H_ */
diff --git a/alib2algo/src/regexp/properties/RegExpEpsilon.cpp b/alib2algo/src/regexp/properties/RegExpEpsilon.cpp
index c697cbbdd16061eb579353d0eec35df5bbb9e96a..58c9ed6497bf7235d1c71695143cf1ab1004481f 100644
--- a/alib2algo/src/regexp/properties/RegExpEpsilon.cpp
+++ b/alib2algo/src/regexp/properties/RegExpEpsilon.cpp
@@ -7,8 +7,9 @@
 
 #include "RegExpEpsilon.h"
 
-namespace regexp
-{
+namespace regexp {
+
+namespace properties {
 
 bool RegExpEpsilon::languageContainsEpsilon(const regexp::RegExp& regexp)
 {
@@ -174,4 +175,6 @@ void RegExpEpsilon::Visit(void* data, const regexp::UnboundedRegExp& regexp) con
 
 const RegExpEpsilon RegExpEpsilon::REG_EXP_EPSILON;
 
+} /* namespace properties */
+
 } /* namespace regexp */
diff --git a/alib2algo/src/regexp/properties/RegExpEpsilon.h b/alib2algo/src/regexp/properties/RegExpEpsilon.h
index 4472068c2c856e87ecb974eedb962b284915b797..58d2518919684da699a1d26048048ac3d0e72198 100644
--- a/alib2algo/src/regexp/properties/RegExpEpsilon.h
+++ b/alib2algo/src/regexp/properties/RegExpEpsilon.h
@@ -12,8 +12,9 @@
 #include <regexp/formal/FormalRegExpElements.h>
 #include <regexp/unbounded/UnboundedRegExpElements.h>
 
-namespace regexp
-{
+namespace regexp {
+
+namespace properties {
 
 /**
  * Checks, whether regexp (or its subtree) describes epsilon (empty string).
@@ -53,6 +54,8 @@ private:
     static const RegExpEpsilon REG_EXP_EPSILON;
 };
 
+} /* namespace properties */
+
 } /* namespace regexp */
 
 #endif /* REG_EXP_EPSILON_H_ */
diff --git a/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx b/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx
index 95f668405c83e2e049b28433eabb50babf150b8a..053e0c5c8ca883e05bf61ab0647f3f18d40be569 100644
--- a/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx
+++ b/alib2algo/src/regexp/simplify/RegExpOptimizeUnboundedPart.cxx
@@ -999,7 +999,7 @@ bool RegExpOptimize::V8( UnboundedRegExpConcatenation * const & node ) const
 			auto it2 = it;
 			advance( it2, - (int)concat->elements.size( ) );
 
-			if( regexp::RegExpEpsilon::languageContainsEpsilon(*concat) &&
+			if( regexp::properties::RegExpEpsilon::languageContainsEpsilon(*concat) &&
 				distance( concat->elements.begin( ), concat->elements.end( )) == distance ( it2, node->elements.end( ) ) &&
 				equal( concat->elements.begin( ), concat->elements.end( ), it2, [] ( UnboundedRegExpElement const * const & a, UnboundedRegExpElement const * const & b ) -> bool { return *a == *b; } ) )
 			{
@@ -1025,7 +1025,7 @@ bool RegExpOptimize::V8( UnboundedRegExpConcatenation * const & node ) const
 
 			auto prev = std::prev( it );
 
-			if( regexp::RegExpEpsilon::languageContainsEpsilon(*(iter->element)) && *( iter->element ) == **prev )
+			if( regexp::properties::RegExpEpsilon::languageContainsEpsilon(*(iter->element)) && *( iter->element ) == **prev )
 			{
 				delete * prev;
 				it = node->elements.erase( prev );
diff --git a/alib2algo/src/regexp/toAutomaton/GlushkovNFA.h b/alib2algo/src/regexp/toAutomaton/GlushkovNFA.h
deleted file mode 100644
index 1cb1c806b7aa9859135c1a9841ee8b22664fb6fe..0000000000000000000000000000000000000000
--- a/alib2algo/src/regexp/toAutomaton/GlushkovNFA.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * GlushkovNFA.h
- *
- *  Created on: 11. 1. 2014
- *      Author: Tomas Pecka
- */
-
-#ifndef FA2RE_GLUSHKOVNFA_H_
-#define FA2RE_GLUSHKOVNFA_H_
-
-#include <map>
-
-#include <automaton/FSM/NFA.h>
-#include <regexp/RegExp.h>
-#include <regexp/formal/FormalRegExp.h>
-#include <regexp/unbounded/UnboundedRegExp.h>
-
-namespace conversions {
-
-namespace re2fa {
-
-/**
- * Converts regular expression to finite automaton using Glushkov's NFA construction algorithm.
- * Source: Melichar 2.107
- */
-class GlushkovNFA : public regexp::VisitableRegExpBase::const_visitor_type
-{
-public:
-    /**
-     * Performs conversion.
-     * @param re Original regular expression.
-     * @return NFA equivalent to original regular expression.
-     */
-	static automaton::NFA convert(const regexp::RegExp& re);
-
-    static automaton::NFA convert(const regexp::UnboundedRegExp& re);
-    static automaton::NFA convert(const regexp::FormalRegExp& re);
-
-private:
-    void Visit(void*, const regexp::FormalRegExp& regexp) const;
-    void Visit(void*, const regexp::UnboundedRegExp& regexp) const;
-
-	static const GlushkovNFA GLUSHKOV_NFA;
-};
-
-} /* namespace re2fa */
-
-} /* namespace conversions */
-
-#endif /* FA2RE_GLUSHKOV_H_ */
diff --git a/alib2algo/src/regexp/transform/RegExpDerivation.cpp b/alib2algo/src/regexp/transform/RegExpDerivation.cpp
index 089c19818401bd86bd998d7efe1791f56d5fdbea..cbf0f3a744251b1c9541e9cdca6735b6ef92a87f 100644
--- a/alib2algo/src/regexp/transform/RegExpDerivation.cpp
+++ b/alib2algo/src/regexp/transform/RegExpDerivation.cpp
@@ -97,7 +97,7 @@ void RegExpDerivation::Visit(void* userData, const regexp::FormalRegExpConcatena
     delete leftDerivative;
     delete rightElement;
 
-    if(regexp::RegExpEpsilon::languageContainsEpsilon(concatenation.getLeftElement()))
+    if(regexp::properties::RegExpEpsilon::languageContainsEpsilon(concatenation.getLeftElement()))
     {
         const regexp::FormalRegExpElement *alternation = out.second, *rightDerivative = nullptr;
         static_cast<const regexp::FormalRegExpElement&>(concatenation.getRightElement()).Accept(userData, *this);
@@ -186,7 +186,7 @@ void RegExpDerivation::Visit(void* userData, const regexp::UnboundedRegExpConcat
         ret->appendElement(std::move(*concat));
         delete concat;
 
-        if(regexp::RegExpEpsilon::languageContainsEpsilon(**child))
+        if(regexp::properties::RegExpEpsilon::languageContainsEpsilon(**child))
             continue; // this IF construct is intentional "to match algorithm"
         break;
     }
diff --git a/alib2algo/src/string/compare/CyclicStringCompare.cpp b/alib2algo/src/string/compare/CyclicStringCompare.cpp
index 0e8fc8b879a6c37df39f19602558af4bf8d20191..0e33dfbe2a59f8bc0255e2ee2d8f28346597dc13 100644
--- a/alib2algo/src/string/compare/CyclicStringCompare.cpp
+++ b/alib2algo/src/string/compare/CyclicStringCompare.cpp
@@ -6,8 +6,10 @@
 
 #include "CyclicStringCompare.h"
 
+namespace string {
+
 namespace compare {
-	
+
 bool CyclicStringCompare::equals(const string::LinearString& u, const string::LinearString& v) {
     int n = (int)u.getContent().size();
     int i = -1, j = -1, k;
@@ -39,4 +41,6 @@ int CyclicStringCompare::compare(const string::LinearString& u, const string::Li
     return last ? 1 : - 1;
 }
 
-}
+} /* namespace compare */
+
+} /* namespace string */
diff --git a/alib2algo/src/string/compare/CyclicStringCompare.h b/alib2algo/src/string/compare/CyclicStringCompare.h
index 18e062432185332ba40c38737496ee25aea62d60..267a791376918e9f287bb714706e58e1163ce2ca 100644
--- a/alib2algo/src/string/compare/CyclicStringCompare.h
+++ b/alib2algo/src/string/compare/CyclicStringCompare.h
@@ -10,6 +10,8 @@
 
 #include "string/LinearString.h" 
 
+namespace string {
+
 namespace compare {
 
 class CyclicStringCompare {
@@ -19,6 +21,8 @@ public:
 
 };
 
-}
+} /* namespace compare */
+
+} /* namespace string */
 
 #endif /* CYCLIC_STRING_COMPARE_H_ */
diff --git a/alib2algo/test-src/grammar/toGrammar/rg2rgTest.cpp b/alib2algo/test-src/grammar/toGrammar/rg2rgTest.cpp
index 80633bd7a3285a84c8f0cba8bacb24c620b9c5e3..ebf7a14df0cd2755058c0f973ce4c4e695c6cac5 100644
--- a/alib2algo/test-src/grammar/toGrammar/rg2rgTest.cpp
+++ b/alib2algo/test-src/grammar/toGrammar/rg2rgTest.cpp
@@ -1,8 +1,8 @@
 #include <list>
 #include "rg2rgTest.h"
 
-#include "grammar/toGrammar/RightToLeftRegularGrammar.h"
-#include "grammar/toGrammar/LeftToRightRegularGrammar.h"
+#include "grammar/convert/ToGrammarLeftRG.h"
+#include "grammar/convert/ToGrammarRightRG.h"
 
 #define CPPUNIT_IMPLY(x, y) CPPUNIT_ASSERT(!(x) || (y))
 
@@ -27,7 +27,7 @@ void rg2rgTest::testConversion() {
   rrGrammar.addRule(alphabet::symbolFrom(2), std::make_pair(alphabet::symbolFrom("b"), alphabet::symbolFrom(3)));
   rrGrammar.addRule(alphabet::symbolFrom(3), alphabet::symbolFrom("a"));
 
-  grammar::LeftRG lrGrammar = conversions::rg2rg::RightToLeftRegularGrammar::convert(rrGrammar);
+  grammar::LeftRG lrGrammar = grammar::convert::ToGrammarLeftRG::convert(rrGrammar);
 
   grammar::LeftRG lrGrammarRef(alphabet::symbolFrom(4));
 
@@ -58,7 +58,7 @@ void rg2rgTest::testConversion2() {
   lrGrammar.addRule(alphabet::symbolFrom(3), std::make_pair(alphabet::symbolFrom(2), alphabet::symbolFrom("b")));
   lrGrammar.addRule(alphabet::symbolFrom(4), std::make_pair(alphabet::symbolFrom(3), alphabet::symbolFrom("a")));
 
-  grammar::RightRG rrGrammar = conversions::rg2rg::LeftToRightRegularGrammar::convert(lrGrammar);
+  grammar::RightRG rrGrammar = grammar::convert::ToGrammarRightRG::convert(lrGrammar);
 
   grammar::RightRG rrGrammarRef(alphabet::symbolFrom(5));
 
diff --git a/alib2algo/test-src/regexp/properties/RegExpEmptyTest.cpp b/alib2algo/test-src/regexp/properties/RegExpEmptyTest.cpp
index 43ccaad97463e3e49c8dd9a1bbf7c8ab97d95aac..bf5dfdb0d2eb2d29e33bed488af62e7c972d2633 100644
--- a/alib2algo/test-src/regexp/properties/RegExpEmptyTest.cpp
+++ b/alib2algo/test-src/regexp/properties/RegExpEmptyTest.cpp
@@ -21,7 +21,7 @@ void RegExpEmptyTest::testRegExpEmpty() {
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(regexp::RegExpEmpty::languageIsEmpty(re));
+		CPPUNIT_ASSERT(regexp::properties::RegExpEmpty::languageIsEmpty(re));
 	}
 	{
 		std::string input = "(#E + a ) + ( #0 a + (b ( #0 (a*) ) ) )";
@@ -29,6 +29,6 @@ void RegExpEmptyTest::testRegExpEmpty() {
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(! regexp::RegExpEmpty::languageIsEmpty(re));
+		CPPUNIT_ASSERT(! regexp::properties::RegExpEmpty::languageIsEmpty(re));
 	}
 }
diff --git a/alib2algo/test-src/regexp/properties/RegExpEpsilonTest.cpp b/alib2algo/test-src/regexp/properties/RegExpEpsilonTest.cpp
index d7406a30cb47d468908094f34701b4d9bee914b2..05c2af2065968df9099cdaed0aa53ef92ca67c56 100644
--- a/alib2algo/test-src/regexp/properties/RegExpEpsilonTest.cpp
+++ b/alib2algo/test-src/regexp/properties/RegExpEpsilonTest.cpp
@@ -20,54 +20,54 @@ void RegExpEpsilonTest::testRegExpEpsilon() {
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(regexp::RegExpEpsilon::languageContainsEpsilon(re));
-	}	
+		CPPUNIT_ASSERT(regexp::properties::RegExpEpsilon::languageContainsEpsilon(re));
+	}
 	{
 		std::string input = "( a* )( a* )";
 		std::stringstream inputs(input);
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(regexp::RegExpEpsilon::languageContainsEpsilon(re));
-	}	
+		CPPUNIT_ASSERT(regexp::properties::RegExpEpsilon::languageContainsEpsilon(re));
+	}
 	{
 		std::string input = "a + #0";
 		std::stringstream inputs(input);
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(! regexp::RegExpEpsilon::languageContainsEpsilon(re));
-	}	
+		CPPUNIT_ASSERT(! regexp::properties::RegExpEpsilon::languageContainsEpsilon(re));
+	}
 	{
 		std::string input = "#E + a #E + a*";
 		std::stringstream inputs(input);
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(regexp::RegExpEpsilon::languageContainsEpsilon(re));
-	}	
+		CPPUNIT_ASSERT(regexp::properties::RegExpEpsilon::languageContainsEpsilon(re));
+	}
 	{
 		std::string input = "a* a*";
 		std::stringstream inputs(input);
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(regexp::RegExpEpsilon::languageContainsEpsilon(re));
-	}	
+		CPPUNIT_ASSERT(regexp::properties::RegExpEpsilon::languageContainsEpsilon(re));
+	}
 	{
 		std::string input = "a s d #E + #E #0";
 		std::stringstream inputs(input);
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(! regexp::RegExpEpsilon::languageContainsEpsilon(re));
-	}	
+		CPPUNIT_ASSERT(! regexp::properties::RegExpEpsilon::languageContainsEpsilon(re));
+	}
 	{
 		std::string input = "a + #0";
 		std::stringstream inputs(input);
 		regexp::RegExpFromStringParser parser(inputs);
 		regexp::RegExp re = parser.parseValue();
 
-		CPPUNIT_ASSERT(! regexp::RegExpEpsilon::languageContainsEpsilon(re));
-	}	
+		CPPUNIT_ASSERT(! regexp::properties::RegExpEpsilon::languageContainsEpsilon(re));
+	}
 }
diff --git a/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp b/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp
index d24b039525c921e57b097cd85f1f240108bbcc29..8be6ccb6e2129abe6506e73d73f056e55fe63c2f 100644
--- a/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp
+++ b/alib2algo/test-src/regexp/toAutomaton/re2faTest.cpp
@@ -1,9 +1,9 @@
 #include <list>
 #include "re2faTest.h"
 
-#include "regexp/toAutomaton/BrzozowskiDerivation.h"
-#include "regexp/toAutomaton/GlushkovNFA.h"
-#include "regexp/toAutomaton/Thompson.h"
+#include "regexp/convert/ToAutomatonDerivation.h"
+#include "regexp/convert/ToAutomatonGlushkov.h"
+#include "regexp/convert/ToAutomatonThompson.h"
 #include "automaton/convert/ToRegExpAlgebraic.h"
 #include "automaton/determinize/nfa/NFADeterminizer.h"
 #include "automaton/simplify/Minimize.h"
@@ -31,11 +31,11 @@ void re2faTest::testThompson() {
 	regexp::RegExpFromStringParser parser(inputs);
 	regexp::RegExp regexp1( parser.parseValue() );
 
-	automaton::Automaton enfa1 = conversions::re2fa::Thompson::convert(regexp1);
+	automaton::Automaton enfa1 = regexp::convert::ToAutomatonThompson::convert(regexp1);
 
 	regexp::RegExp regexp2( automaton::convert::ToRegExpAlgebraic::convert(enfa1) );
 
-	automaton::Automaton enfa2 = conversions::re2fa::Thompson::convert(regexp2);
+	automaton::Automaton enfa2 = regexp::convert::ToAutomatonThompson::convert(regexp2);
 
 	automaton::Automaton nfa1 = automaton::simplify::EpsilonRemover::remove(enfa1);
 	automaton::Automaton nfa2 = automaton::simplify::EpsilonRemover::remove(enfa2);
@@ -56,13 +56,11 @@ void re2faTest::testGlushkov() {
 	regexp::RegExpFromStringParser parser(inputs);
 	regexp::UnboundedRegExp regexp1( static_cast<const regexp::UnboundedRegExp &>( parser.parseValue().getData() ) );
 
-	conversions::re2fa::GlushkovNFA glushkov1;
-	automaton::NFA nfa1 = glushkov1.convert(regexp1);
+	automaton::NFA nfa1 = regexp::convert::ToAutomatonGlushkov::convert(regexp1);
 
 	regexp::UnboundedRegExp regexp2( static_cast<const regexp::UnboundedRegExp &>( automaton::convert::ToRegExpAlgebraic::convert(nfa1) ) );
 
-	conversions::re2fa::GlushkovNFA glushkov2;
-	automaton::NFA nfa2 = glushkov2.convert(regexp2);
+	automaton::NFA nfa2 = regexp::convert::ToAutomatonGlushkov::convert(regexp2);
 
 	automaton::DFA dfa1 = determinize::NFADeterminizer::determinize(nfa1);
 	automaton::DFA dfa2 = determinize::NFADeterminizer::determinize(nfa2);
@@ -80,11 +78,11 @@ void re2faTest::testBrzozowski() {
 	regexp::RegExpFromStringParser parser(inputs);
 	regexp::RegExp regexp1( parser.parseValue() );
 
-	automaton::Automaton nfa1 = conversions::re2fa::BrzozowskiDerivation::convert(regexp1);
+	automaton::Automaton nfa1 = regexp::convert::ToAutomatonDerivation::convert(regexp1);
 
 	regexp::RegExp regexp2( automaton::convert::ToRegExpAlgebraic::convert(static_cast<const automaton::NFA&>(nfa1.getData())) );
 
-	automaton::Automaton nfa2 = conversions::re2fa::BrzozowskiDerivation::convert(regexp2);
+	automaton::Automaton nfa2 = regexp::convert::ToAutomatonDerivation::convert(regexp2);
 
 	automaton::DFA mdfa1_1 = determinize::NFADeterminizer::determinize(static_cast<const automaton::NFA&>(nfa1.getData()));
 	automaton::DFA mdfa1_2 = automaton::simplify::Minimize::minimize(mdfa1_1);
diff --git a/alib2algo/test-src/string/compare/compareTest.cpp b/alib2algo/test-src/string/compare/compareTest.cpp
index 79481b73b3c73d7197fc5e2e42a01c89c2cf1d83..d75ef51ca8a3414a4b7b5eea6e901d5e1c099851 100644
--- a/alib2algo/test-src/string/compare/compareTest.cpp
+++ b/alib2algo/test-src/string/compare/compareTest.cpp
@@ -15,19 +15,19 @@ void compareTest::tearDown() {
 }
 
 void compareTest::testCyclicStringCompareBoolean() {
-  string::LinearString str1("alfa");
-  string::LinearString str2("aalf");
-  str2.addSymbolsToAlphabet(str1.getAlphabet());
-  str1.addSymbolsToAlphabet(str2.getAlphabet());
-  
-  CPPUNIT_ASSERT(compare::CyclicStringCompare::equals(str1, str2));
+	string::LinearString str1("alfa");
+	string::LinearString str2("aalf");
+	str2.addSymbolsToAlphabet(str1.getAlphabet());
+	str1.addSymbolsToAlphabet(str2.getAlphabet());
+
+	CPPUNIT_ASSERT(string::compare::CyclicStringCompare::equals(str1, str2));
 }
 
 void compareTest::testCyclicStringCompareInt() {
-  string::LinearString str1("alfa");
-  string::LinearString str2("aalf");
-  str2.addSymbolsToAlphabet(str1.getAlphabet());
-  str1.addSymbolsToAlphabet(str2.getAlphabet());
-  
-  CPPUNIT_ASSERT(compare::CyclicStringCompare::compare(str1, str2) == 0);
+	string::LinearString str1("alfa");
+	string::LinearString str2("aalf");
+	str2.addSymbolsToAlphabet(str1.getAlphabet());
+	str1.addSymbolsToAlphabet(str2.getAlphabet());
+	
+	CPPUNIT_ASSERT(string::compare::CyclicStringCompare::compare(str1, str2) == 0);
 }
diff --git a/arand2/src/arand.cpp b/arand2/src/arand.cpp
index 81bc884f1e1468e047fcb89e51fb4ebb4c360e85..316e99a031900f7404b8576b6f79940a6cfa2b56 100644
--- a/arand2/src/arand.cpp
+++ b/arand2/src/arand.cpp
@@ -139,7 +139,7 @@ int main(int argc, char* argv[])
 			return 1;
 		}
 
-		regexp::UnboundedRegExp res = generator::RandomRegExpFactory::generateUnboundedRegExp(leafNodes, height, alphabetSize );
+		regexp::UnboundedRegExp res = regexp::generate::RandomRegExpFactory::generateUnboundedRegExp(leafNodes, height, alphabetSize );
 		alib::DataFactory::toStdout(res);
 	}