diff --git a/alib2algo/src/string/properties/GoodSuffixShiftTable.h b/alib2algo/src/string/properties/GoodSuffixShiftTable.h
index 90fb04c9b67bc692f5e4f7c3e9c88a2321ebb470..d1901424677823d50ca0a8a426906e3d04d2f8f3 100644
--- a/alib2algo/src/string/properties/GoodSuffixShiftTable.h
+++ b/alib2algo/src/string/properties/GoodSuffixShiftTable.h
@@ -19,7 +19,7 @@
 #include <string/properties/BorderArray.h>
 #include <automaton/determinize/Determinize.h>
 #include <automaton/simplify/EpsilonRemoverIncoming.h>
-#include <stringology/exact/ExactFactorAutomaton.h>
+#include <stringology/indexing/NondeterministicExactFactorAutomaton.h>
 
 namespace string {
 
@@ -50,7 +50,7 @@ std::vector < size_t > GoodSuffixShiftTable::gss ( const string::LinearString <
 	std::vector < unsigned > borderArray = string::properties::BorderArray::construct ( reversed );
 	size_t max = reversed.getContent ( ).size ( ) - borderArray.back ( );
 
-	automaton::DFA < DefaultSymbolType, std::set < unsigned > > factorAutomaton = automaton::determinize::Determinize::determinize ( automaton::simplify::EpsilonRemoverIncoming::remove ( stringology::exact::ExactFactorAutomaton::construct ( reversed ) ) );
+	automaton::DFA < DefaultSymbolType, std::set < unsigned > > factorAutomaton = automaton::determinize::Determinize::determinize ( automaton::simplify::EpsilonRemoverIncoming::remove ( stringology::indexing::NondeterministicExactFactorAutomaton::construct ( reversed ) ) );
 
 	std::vector < size_t > result;
 
diff --git a/alib2algo/src/stringology/exact/ExactFactorAutomaton.cpp b/alib2algo/src/stringology/exact/ExactFactorAutomaton.cpp
deleted file mode 100644
index 0193777efc121c1d74ad72252c628fe1510ddb02..0000000000000000000000000000000000000000
--- a/alib2algo/src/stringology/exact/ExactFactorAutomaton.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * ExactFactorAutomaton.cpp
- *
- *  Created on: 7. 4. 2015
- *      Author: Jan Travnicek
- */
-
-#include "ExactFactorAutomaton.h"
-#include <string/LinearString.h>
-#include <string/Epsilon.h>
-
-#include <deque>
-
-namespace stringology {
-
-namespace exact {
-
-automaton::Automaton ExactFactorAutomaton::construct(const string::String& text) {
-	return dispatch(text.getData());
-}
-
-auto ExactFactorAutomatonLinearString = ExactFactorAutomaton::RegistratorWrapper<automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned >, string::LinearString < > >(ExactFactorAutomaton::construct);
-
-} /* namespace exact */
-
-} /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.cpp b/alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.cpp
similarity index 93%
rename from alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.cpp
rename to alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.cpp
index 4ef32e4c6757675630821e17b9bd60842c77217f..6fbfed0d6915a969bf674cb9d9a760ef2956de51 100644
--- a/alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.cpp
+++ b/alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.cpp
@@ -10,12 +10,12 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 automaton::Automaton ExactMultiNondeterministicSubsequenceAutomaton::construct ( const std::set < string::String > & texts ) {
 	return automaton::Automaton ( ExactMultiNondeterministicSubsequenceAutomaton::construct ( common::ContainerConverter < std::set < string::LinearString < > >, std::set < string::String >, string::LinearString < > >::convert ( texts ) ) );
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.h b/alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.h
similarity index 97%
rename from alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.h
rename to alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.h
index cd61e16f2a1588eab50964dc86a8fec80966181f..e8adc807f203625d17feeafb6e01140c9ddaea6e 100644
--- a/alib2algo/src/stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.h
+++ b/alib2algo/src/stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.h
@@ -17,7 +17,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 class ExactMultiNondeterministicSubsequenceAutomaton {
 public:
@@ -59,7 +59,7 @@ automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, std::pair < unsigned, un
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
 
diff --git a/alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.cpp b/alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.cpp
similarity index 93%
rename from alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.cpp
rename to alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.cpp
index d479520957d5bcb3ceef86dd22d97fe5cf6fbf5f..feb46bf22cba7bd4d06b4ac22ec8222d30a7b29b 100644
--- a/alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.cpp
+++ b/alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.cpp
@@ -9,7 +9,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 automaton::Automaton ExactNondeterministicSubsequenceAutomaton::construct(const string::String& text) {
 	return dispatch(text.getData());
@@ -17,6 +17,6 @@ automaton::Automaton ExactNondeterministicSubsequenceAutomaton::construct(const
 
 auto ExactNondeterministicSubsequenceAutomatonLinearString = ExactNondeterministicSubsequenceAutomaton::RegistratorWrapper < automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned >, string::LinearString < > > ( ExactNondeterministicSubsequenceAutomaton::construct );
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.h b/alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.h
similarity index 97%
rename from alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.h
rename to alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.h
index 952da5cae87c0a380c2f1944dbbf18e251024511..8419b763755814115036969bd1f5089675c626d4 100644
--- a/alib2algo/src/stringology/exact/ExactNondeterministicSubsequenceAutomaton.h
+++ b/alib2algo/src/stringology/indexing/ExactNondeterministicSubsequenceAutomaton.h
@@ -16,7 +16,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 class ExactNondeterministicSubsequenceAutomaton : public std::SingleDispatch<ExactNondeterministicSubsequenceAutomaton, automaton::Automaton, const string::StringBase & > {
 public:
@@ -48,7 +48,7 @@ automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > ExactNondeter
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
 
diff --git a/alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.cpp b/alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.cpp
similarity index 91%
rename from alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.cpp
rename to alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.cpp
index 46cb28c63c82bd8ab4754c4cb53f34c670997dde..3da7a3dcd37ef017ed80cd3749abc8ee3b548e6e 100644
--- a/alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.cpp
+++ b/alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.cpp
@@ -9,7 +9,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 automaton::Automaton ExactSubsequenceAutomaton::construct(const string::String& text) {
 	return dispatch(text.getData());
@@ -17,6 +17,6 @@ automaton::Automaton ExactSubsequenceAutomaton::construct(const string::String&
 
 auto ExactSubsequenceAutomatonLinearString = ExactSubsequenceAutomaton::RegistratorWrapper < automaton::DFA < DefaultSymbolType, unsigned >, string::LinearString < > > ( ExactSubsequenceAutomaton::construct );
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.h b/alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.h
similarity index 97%
rename from alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.h
rename to alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.h
index c7cd07cb056055a10bc0178845653d0c979e3809..9e52895cdf9737daf0409a3f62e2269cf813a111 100644
--- a/alib2algo/src/stringology/exact/ExactSubsequenceAutomaton.h
+++ b/alib2algo/src/stringology/indexing/ExactSubsequenceAutomaton.h
@@ -16,7 +16,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
 class ExactSubsequenceAutomaton : public std::SingleDispatch<ExactSubsequenceAutomaton, automaton::Automaton, const string::StringBase & > {
 public:
@@ -56,7 +56,7 @@ automaton::DFA < SymbolType, unsigned > ExactSubsequenceAutomaton::construct ( c
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
 
diff --git a/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.cpp b/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0fa8a91dc28fc924db31b40bd0bb4534294457f4
--- /dev/null
+++ b/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.cpp
@@ -0,0 +1,26 @@
+/*
+ * NondeterministicExactFactorAutomaton.cpp
+ *
+ *  Created on: 7. 4. 2015
+ *      Author: Jan Travnicek
+ */
+
+#include "NondeterministicExactFactorAutomaton.h"
+#include <string/LinearString.h>
+#include <string/Epsilon.h>
+
+#include <deque>
+
+namespace stringology {
+
+namespace indexing {
+
+automaton::Automaton NondeterministicExactFactorAutomaton::construct(const string::String& text) {
+	return dispatch(text.getData());
+}
+
+auto ExactFactorAutomatonLinearString = NondeterministicExactFactorAutomaton::RegistratorWrapper<automaton::EpsilonNFA < DefaultSymbolType, DefaultEpsilonType, unsigned >, string::LinearString < > >(NondeterministicExactFactorAutomaton::construct);
+
+} /* namespace indexing */
+
+} /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactFactorAutomaton.h b/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.h
similarity index 68%
rename from alib2algo/src/stringology/exact/ExactFactorAutomaton.h
rename to alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.h
index db5c71caefd19463e9b0941ec763ff68afeb768a..84930fefb117246d019abb5b69067fa1e32f7328 100644
--- a/alib2algo/src/stringology/exact/ExactFactorAutomaton.h
+++ b/alib2algo/src/stringology/indexing/NondeterministicExactFactorAutomaton.h
@@ -1,12 +1,12 @@
 /*
- * ExactFactorAutomaton.h
+ * NondeterministicExactFactorAutomaton.h
  *
  *  Created on: 7. 4. 2015
  *      Author: Jan Travnicek
  */
 
-#ifndef _EXACT_FACTOR_AUTOMATON__H_
-#define _EXACT_FACTOR_AUTOMATON__H_
+#ifndef NONDETERMINISTIC_EXACT_FACTOR_AUTOMATON_H_
+#define NONDETERMINISTIC_EXACT_FACTOR_AUTOMATON_H_
 
 #include <automaton/Automaton.h>
 #include <automaton/FSM/EpsilonNFA.h>
@@ -17,9 +17,9 @@
 
 namespace stringology {
 
-namespace exact {
+namespace indexing {
 
-class ExactFactorAutomaton : public std::SingleDispatch<ExactFactorAutomaton, automaton::Automaton, const string::StringBase & > {
+class NondeterministicExactFactorAutomaton : public std::SingleDispatch<NondeterministicExactFactorAutomaton, automaton::Automaton, const string::StringBase & > {
 public:
 	/**
 	 * Performs conversion.
@@ -32,7 +32,7 @@ public:
 };
 
 template < class SymbolType >
-automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > ExactFactorAutomaton::construct(const string::LinearString < SymbolType > & text) {
+automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > NondeterministicExactFactorAutomaton::construct(const string::LinearString < SymbolType > & text) {
 	automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > res ( 0 );
 	res.addFinalState ( 0 );
 	res.setInputAlphabet(text.getAlphabet());
@@ -47,8 +47,8 @@ automaton::EpsilonNFA < SymbolType, DefaultEpsilonType, unsigned > ExactFactorAu
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace indexing */
 
 } /* namespace stringology */
 
-#endif /* _EXACT_FACTOR_AUTOMATON__H_ */
+#endif /* NONDETERMINISTIC_EXACT_FACTOR_AUTOMATON_H_ */
diff --git a/alib2algo/src/stringology/exact/ExactMatchingAutomaton.cpp b/alib2algo/src/stringology/matching/ExactMatchingAutomaton.cpp
similarity index 92%
rename from alib2algo/src/stringology/exact/ExactMatchingAutomaton.cpp
rename to alib2algo/src/stringology/matching/ExactMatchingAutomaton.cpp
index ab84e7dac5b163a2c5bde7d89c6b831295dd0fec..f7114e25c5b8a146d57338d429aab1556a58c4ea 100644
--- a/alib2algo/src/stringology/exact/ExactMatchingAutomaton.cpp
+++ b/alib2algo/src/stringology/matching/ExactMatchingAutomaton.cpp
@@ -13,7 +13,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace matching {
 
 automaton::Automaton ExactMatchingAutomaton::construct(const string::String& pattern) {
 	return dispatch(pattern.getData());
@@ -21,6 +21,6 @@ automaton::Automaton ExactMatchingAutomaton::construct(const string::String& pat
 
 auto ExactMatchingAutomatonLinearString = ExactMatchingAutomaton::RegistratorWrapper<automaton::NFA < DefaultSymbolType, unsigned > , string::LinearString < > >(ExactMatchingAutomaton::construct);
 
-} /* namespace exact */
+} /* namespace matching */
 
 } /* namespace stringology */
diff --git a/alib2algo/src/stringology/exact/ExactMatchingAutomaton.h b/alib2algo/src/stringology/matching/ExactMatchingAutomaton.h
similarity index 96%
rename from alib2algo/src/stringology/exact/ExactMatchingAutomaton.h
rename to alib2algo/src/stringology/matching/ExactMatchingAutomaton.h
index 3df4f87bc0573aa8cc8fa291be1753d7442fe787..da23f3913a213355da6dfd7ad2084685f404ed84 100644
--- a/alib2algo/src/stringology/exact/ExactMatchingAutomaton.h
+++ b/alib2algo/src/stringology/matching/ExactMatchingAutomaton.h
@@ -16,7 +16,7 @@
 
 namespace stringology {
 
-namespace exact {
+namespace matching {
 
 class ExactMatchingAutomaton : public std::SingleDispatch<ExactMatchingAutomaton, automaton::Automaton, const string::StringBase & > {
 public:
@@ -47,7 +47,7 @@ automaton::NFA < SymbolType, unsigned > ExactMatchingAutomaton::construct(const
 	return res;
 }
 
-} /* namespace exact */
+} /* namespace matching */
 
 } /* namespace stringology */
 
diff --git a/astringology2/src/astringology.cpp b/astringology2/src/astringology.cpp
index 4c770213afdf87ba0522e32138ba478e9294cd47..9100d2acfbc74d51f4c31c822fb97d5971c98f6c 100644
--- a/astringology2/src/astringology.cpp
+++ b/astringology2/src/astringology.cpp
@@ -27,11 +27,11 @@
 #include <stringology/query/BNDMOccurrences.h>
 #include <stringology/exact/BackwardOracleMatching.h>
 #include <stringology/exact/BackwardDAWGMatching.h>
-#include <stringology/exact/ExactMatchingAutomaton.h>
-#include <stringology/exact/ExactFactorAutomaton.h>
-#include <stringology/exact/ExactSubsequenceAutomaton.h>
-#include <stringology/exact/ExactNondeterministicSubsequenceAutomaton.h>
-#include <stringology/exact/ExactMultiNondeterministicSubsequenceAutomaton.h>
+#include <stringology/matching/ExactMatchingAutomaton.h>
+#include <stringology/indexing/NondeterministicExactFactorAutomaton.h>
+#include <stringology/indexing/ExactSubsequenceAutomaton.h>
+#include <stringology/indexing/ExactNondeterministicSubsequenceAutomaton.h>
+#include <stringology/indexing/ExactMultiNondeterministicSubsequenceAutomaton.h>
 #include <stringology/exact/FactorOracleAutomaton.h>
 #include <stringology/exact/SuffixAutomaton.h>
 #include <string/properties/BorderArray.h>
@@ -51,7 +51,7 @@ int main ( int argc, char * argv[] ) {
 
 		std::vector < std::string > allowed;
 		allowed.push_back ( "exactMatchingAutomaton" );
-		allowed.push_back ( "exactFactorAutomaton" );
+		allowed.push_back ( "exactNondeterministicFactorAutomaton" );
 		allowed.push_back ( "exactSubsequenceAutomaton" );
 		allowed.push_back ( "exactNondeterministicSubsequenceAutomaton" );
 		allowed.push_back ( "exactMultiNondeterministicSubsequenceAutomaton" );
@@ -212,19 +212,19 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactMatchingAutomaton::construct ( pattern );
+			automaton::Automaton automaton = stringology::matching::ExactMatchingAutomaton::construct ( pattern );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
 
 			alib::XmlDataFactory::toStdout ( automaton );
-		} else if ( algorithm.getValue ( ) == "exactFactorAutomaton" ) {
+		} else if ( algorithm.getValue ( ) == "exactNondeterministicFactorAutomaton" ) {
 			string::String subject = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, subjectInput).front ( ) ) );
 
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactFactorAutomaton::construct ( subject );
+			automaton::Automaton automaton = stringology::indexing::NondeterministicExactFactorAutomaton::construct ( subject );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
@@ -236,7 +236,7 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactSubsequenceAutomaton::construct ( subject );
+			automaton::Automaton automaton = stringology::indexing::ExactSubsequenceAutomaton::construct ( subject );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
@@ -248,7 +248,7 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactNondeterministicSubsequenceAutomaton::construct ( subject );
+			automaton::Automaton automaton = stringology::indexing::ExactNondeterministicSubsequenceAutomaton::construct ( subject );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );
@@ -265,7 +265,7 @@ int main ( int argc, char * argv[] ) {
 			measurements::end ( );
 			measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			automaton::Automaton automaton = stringology::exact::ExactMultiNondeterministicSubsequenceAutomaton::construct ( subjects );
+			automaton::Automaton automaton = stringology::indexing::ExactMultiNondeterministicSubsequenceAutomaton::construct ( subjects );
 
 			measurements::end ( );
 			measurements::start ( "Output write", measurements::Type::AUXILIARY );