diff --git a/alib2/src/automaton/FSM/CompactNFA.h b/alib2/src/automaton/FSM/CompactNFA.h
index 8646067567c28b7f0037d3dcfb130d1ad031ac66..601043ce762f42685c40ec3df3b849ddc6e5eea3 100644
--- a/alib2/src/automaton/FSM/CompactNFA.h
+++ b/alib2/src/automaton/FSM/CompactNFA.h
@@ -9,7 +9,7 @@
 #define COMPACT_DFA_H_
 
 #include <map>
-#include "../NondeterministicAutomaton.h"
+#include "../MultiInitialStateAutomaton.h"
 #include "../InputAlphabet.h"
 #include "../State.h"
 #include "../../string/String.h"
@@ -20,7 +20,7 @@ namespace automaton {
  * Represents Finite Automaton.
  * Can store nondeterministic finite automaton without epsilon transitions.
  */
-class CompactNFA : public NondeterministicAutomaton, public InputAlphabet {
+class CompactNFA : public MultiInitialStateAutomaton, public InputAlphabet {
 protected:
 	std::map<std::pair<State, string::String>, std::set<State> > transitions;
 public:
diff --git a/alib2/src/automaton/FSM/DFA.cpp b/alib2/src/automaton/FSM/DFA.cpp
index 1f9c0b1abbb8c3ad3064a1158394dcd6e9909bd4..340672ad4317da27d49cd2f91ca63cdab0ba8873 100644
--- a/alib2/src/automaton/FSM/DFA.cpp
+++ b/alib2/src/automaton/FSM/DFA.cpp
@@ -11,7 +11,7 @@
 
 namespace automaton {
 
-DFA::DFA(const State& initialState) : DeterministicAutomaton(initialState) {
+DFA::DFA(const State& initialState) : SingleInitialStateAutomaton(initialState) {
 
 }
 
diff --git a/alib2/src/automaton/FSM/DFA.h b/alib2/src/automaton/FSM/DFA.h
index c78d931f45804492064152e14ef2f6f48337387c..0e235078c6423359334a1e3f8e49710820479d02 100644
--- a/alib2/src/automaton/FSM/DFA.h
+++ b/alib2/src/automaton/FSM/DFA.h
@@ -9,7 +9,7 @@
 #define DFA_H_
 
 #include <map>
-#include "../DeterministicAutomaton.h"
+#include "../SingleInitialStateAutomaton.h"
 #include "../InputAlphabet.h"
 #include "../State.h"
 #include "../../alphabet/Symbol.h"
@@ -20,7 +20,7 @@ namespace automaton {
  * Represents Finite Automaton.
  * Can store nondeterministic finite automaton without epsilon transitions.
  */
-class DFA : public DeterministicAutomaton, public InputAlphabet {
+class DFA : public SingleInitialStateAutomaton, public InputAlphabet {
 protected:
 	std::map<std::pair<State, alphabet::Symbol>, State> transitions;
 public:
diff --git a/alib2/src/automaton/FSM/EpsilonNFA.h b/alib2/src/automaton/FSM/EpsilonNFA.h
index 01f667d17787781dec50448cb98465ec966282a3..31463446041836337bfb20f355b951f7485a21e3 100644
--- a/alib2/src/automaton/FSM/EpsilonNFA.h
+++ b/alib2/src/automaton/FSM/EpsilonNFA.h
@@ -10,7 +10,7 @@
 
 #include <map>
 #include "../../std/variant.hpp"
-#include "../NondeterministicAutomaton.h"
+#include "../MultiInitialStateAutomaton.h"
 #include "../InputAlphabet.h"
 #include "../State.h"
 #include "../../alphabet/Symbol.h"
@@ -22,7 +22,7 @@ namespace automaton {
  * Represents Finite Automaton.
  * Can store nondeterministic finite automaton with epsilon transitions.
  */
-class EpsilonNFA : public NondeterministicAutomaton, public InputAlphabet {
+class EpsilonNFA : public MultiInitialStateAutomaton, public InputAlphabet {
 protected:
 	std::map<std::pair<State, std::variant<string::Epsilon, alphabet::Symbol> >, std::set<State> > transitions;
 public:
diff --git a/alib2/src/automaton/FSM/ExtendedNFA.h b/alib2/src/automaton/FSM/ExtendedNFA.h
index e9cc2712e7d0818458ba36c91401b5ce27c7ffb4..56e9d04829f3f5d4c5f7c779dc4d266d8586943d 100644
--- a/alib2/src/automaton/FSM/ExtendedNFA.h
+++ b/alib2/src/automaton/FSM/ExtendedNFA.h
@@ -9,7 +9,7 @@
 #define EXTENDED_NFA_H_
 
 #include <map>
-#include "../NondeterministicAutomaton.h"
+#include "../MultiInitialStateAutomaton.h"
 #include "../InputAlphabet.h"
 #include "../State.h"
 #include "../../regexp/RegExp.h"
@@ -20,7 +20,7 @@ namespace automaton {
  * Represents Finite Automaton.
  * Can store nondeterministic finite automaton without epsilon transitions.
  */
-class ExtendedNFA : public NondeterministicAutomaton, public InputAlphabet {
+class ExtendedNFA : public MultiInitialStateAutomaton, public InputAlphabet {
 protected:
 	std::map<std::pair<State, regexp::RegExp>, std::set<State> > transitions;
 public:
diff --git a/alib2/src/automaton/FSM/NFA.h b/alib2/src/automaton/FSM/NFA.h
index a223709dcd9eaa69f95714207da96a077e668318..47b9b9bd322706f6d19aaeea82c5430572fc425b 100644
--- a/alib2/src/automaton/FSM/NFA.h
+++ b/alib2/src/automaton/FSM/NFA.h
@@ -9,7 +9,7 @@
 #define NFA_H_
 
 #include <map>
-#include "../NondeterministicAutomaton.h"
+#include "../MultiInitialStateAutomaton.h"
 #include "../InputAlphabet.h"
 #include "../State.h"
 #include "../../alphabet/Symbol.h"
@@ -20,7 +20,7 @@ namespace automaton {
  * Represents Finite Automaton.
  * Can store nondeterministic finite automaton without epsilon transitions.
  */
-class NFA : public NondeterministicAutomaton, public InputAlphabet {
+class NFA : public MultiInitialStateAutomaton, public InputAlphabet {
 protected:
 	std::map<std::pair<State, alphabet::Symbol>, std::set<State> > transitions;
 public:
diff --git a/alib2/src/automaton/NondeterministicAutomaton.cpp b/alib2/src/automaton/MultiInitialStateAutomaton.cpp
similarity index 71%
rename from alib2/src/automaton/NondeterministicAutomaton.cpp
rename to alib2/src/automaton/MultiInitialStateAutomaton.cpp
index c6a0daf38f21b707d984337677f5cb43a78e028f..c3fc15a366cccb88371d09bc8f9ecc9fc6aa57a7 100644
--- a/alib2/src/automaton/NondeterministicAutomaton.cpp
+++ b/alib2/src/automaton/MultiInitialStateAutomaton.cpp
@@ -1,11 +1,11 @@
 /*
- * NondeterministicAutomaton.cpp
+ * MultiInitialStateAutomaton.cpp
  *
  *  Created on: Apr 16, 2013
  *      Author: Jan Travnicek
  */
 
-#include "NondeterministicAutomaton.h"
+#include "MultiInitialStateAutomaton.h"
 
 #include <set>
 #include <algorithm>
@@ -13,7 +13,7 @@
 
 namespace automaton {
 
-bool NondeterministicAutomaton::addInitialState(const State& state) {
+bool MultiInitialStateAutomaton::addInitialState(const State& state) {
 	if (states.find(state) == states.end()) {
 		throw AutomatonException("State cannot be set as initial state. It is not present in the automaton.");
 	}
@@ -21,7 +21,7 @@ bool NondeterministicAutomaton::addInitialState(const State& state) {
 	return initialStates.insert(state).second;
 }
 
-void NondeterministicAutomaton::setInitialStates(const std::set<State>& newStates) {
+void MultiInitialStateAutomaton::setInitialStates(const std::set<State>& newStates) {
 	std::set<State> removed;
 	std::set_symmetric_difference(initialStates.begin(), initialStates.end(), newStates.begin(), newStates.end(), std::inserter(removed, removed.end()));
 
@@ -37,11 +37,11 @@ void NondeterministicAutomaton::setInitialStates(const std::set<State>& newState
 	}
 }
 
-bool NondeterministicAutomaton::removeInitialState(const State& state) {
+bool MultiInitialStateAutomaton::removeInitialState(const State& state) {
 	return initialStates.erase(state);
 }
 
-const std::set<State>& NondeterministicAutomaton::getInitialStates() const {
+const std::set<State>& MultiInitialStateAutomaton::getInitialStates() const {
 	return initialStates;
 }
 
diff --git a/alib2/src/automaton/NondeterministicAutomaton.h b/alib2/src/automaton/MultiInitialStateAutomaton.h
similarity index 85%
rename from alib2/src/automaton/NondeterministicAutomaton.h
rename to alib2/src/automaton/MultiInitialStateAutomaton.h
index 47517b958f0263b90cf4d573ff25d60d44983f57..8af674112706af9d8e5fbbf61c328cfa209f00b4 100644
--- a/alib2/src/automaton/NondeterministicAutomaton.h
+++ b/alib2/src/automaton/MultiInitialStateAutomaton.h
@@ -5,8 +5,8 @@
  *      Author: Jan Travnicek
  */
 
-#ifndef NONDETERMINISTIC_AUTOMATON_H_
-#define NONDETERMINISTIC_AUTOMATON_H_
+#ifndef MULTI_INITIAL_STATE_AUTOMATON_H_
+#define MULTI_INITIAL_STATE_AUTOMATON_H_
 
 #include "Automaton.h"
 #include <set>
@@ -17,7 +17,7 @@ namespace automaton {
 /**
  * Base class for nondeterministic automata.
  */
-class NondeterministicAutomaton : public Automaton {
+class MultiInitialStateAutomaton : public Automaton {
 protected:
 	std::set<State> initialStates;
 public:
@@ -52,5 +52,5 @@ public:
 
 } /* namespace automaton */
 
-#endif /* NONDETERMINISTIC_AUTOMATON_H_ */
+#endif /* MULTI_INITIAL_STATE_AUTOMATON_H_ */
 
diff --git a/alib2/src/automaton/PDA/PDA.h b/alib2/src/automaton/PDA/PDA.h
index 472873d97738e396018c1c01b38d744ecc94afe0..b56eb2850b0b7e50d274910bc9491a2d8bfef274 100644
--- a/alib2/src/automaton/PDA/PDA.h
+++ b/alib2/src/automaton/PDA/PDA.h
@@ -12,7 +12,7 @@
 #include <map>
 #include <vector>
 #include "../../std/variant.hpp"
-#include "../NondeterministicAutomaton.h"
+#include "../MultiInitialStateAutomaton.h"
 #include "../InputAlphabet.h"
 #include "../State.h"
 #include "../../alphabet/Symbol.h"
@@ -23,7 +23,7 @@ namespace automaton {
 /**
  * Push Down Automaton
  */
-class PDA: public NondeterministicAutomaton, public InputAlphabet {
+class PDA: public MultiInitialStateAutomaton, public InputAlphabet {
 protected:
 	std::set<alphabet::Symbol> stackAlphabet;
 	std::map<std::tuple<State, std::variant<string::Epsilon, alphabet::Symbol>, std::vector<alphabet::Symbol> >, std::set<std::pair<State, std::vector<alphabet::Symbol> > > > transitions;
diff --git a/alib2/src/automaton/DeterministicAutomaton.cpp b/alib2/src/automaton/SingleInitialStateAutomaton.cpp
similarity index 53%
rename from alib2/src/automaton/DeterministicAutomaton.cpp
rename to alib2/src/automaton/SingleInitialStateAutomaton.cpp
index 2cd693a2199d8fdb6f39ac357f860be071300eae..398fcb3ede111b54fb64368a2b74a05dee11d482 100644
--- a/alib2/src/automaton/DeterministicAutomaton.cpp
+++ b/alib2/src/automaton/SingleInitialStateAutomaton.cpp
@@ -1,21 +1,21 @@
 /*
- * DeterministicAutomaton.cpp
+ * SingleInitialStateAutomaton.cpp
  *
  *  Created on: Apr 16, 2013
  *      Author: Jan Travnicek
  */
 
-#include "DeterministicAutomaton.h"
+#include "SingleInitialStateAutomaton.h"
 
 #include "AutomatonException.h"
 
 namespace automaton {
 
-DeterministicAutomaton::DeterministicAutomaton(const State& initialState) : initialState(initialState) {
+SingleInitialStateAutomaton::SingleInitialStateAutomaton(const State& initialState) : initialState(initialState) {
 	addState(initialState);
 }
 
-void DeterministicAutomaton::setInitialState(const State& state) {
+void SingleInitialStateAutomaton::setInitialState(const State& state) {
 	if (states.find(state) == states.end()) {
 		throw AutomatonException("State cannot be set as initial state. It is not present in the automaton.");
 	}
@@ -23,7 +23,7 @@ void DeterministicAutomaton::setInitialState(const State& state) {
 	initialState = state;
 }
 
-const State& DeterministicAutomaton::getInitialState() const {
+const State& SingleInitialStateAutomaton::getInitialState() const {
 	return initialState;
 }
 
diff --git a/alib2/src/automaton/DeterministicAutomaton.h b/alib2/src/automaton/SingleInitialStateAutomaton.h
similarity index 67%
rename from alib2/src/automaton/DeterministicAutomaton.h
rename to alib2/src/automaton/SingleInitialStateAutomaton.h
index 6eebaa481c961fb94df8ac1f3c1dff53732b0d6a..c08b3b456f9460726c03de2aa9da177345cbfb0a 100644
--- a/alib2/src/automaton/DeterministicAutomaton.h
+++ b/alib2/src/automaton/SingleInitialStateAutomaton.h
@@ -1,12 +1,12 @@
 /*
- * DeterministicAutomaton.h
+ * SingleInitialStateAutomaton.h
  *
  *  Created on: Apr 10, 2013
  *      Author: Jan Travnicek
  */
 
-#ifndef DETERMINISTIC_AUTOMATON_H_
-#define DETERMINISTIC_AUTOMATON_H_
+#ifndef SINGLE_INITIAL_STATE_AUTOMATON_H_
+#define SINGLE_INITIAL_STATE_AUTOMATON_H_
 
 #include "Automaton.h"
 #include "State.h"
@@ -16,11 +16,11 @@ namespace automaton {
 /**
  * Base class for deterministic automata. Contains common elements of automata.
  */
-class DeterministicAutomaton : public Automaton {
+class SingleInitialStateAutomaton : public Automaton {
 protected:
 	State initialState;
 public:
-	DeterministicAutomaton(const State& initialState);
+	SingleInitialStateAutomaton(const State& initialState);
 
 	/**
 	 * Set the initial state.
@@ -38,5 +38,5 @@ public:
 
 } /* namespace automaton */
 
-#endif /* DETERMINISTIC_AUTOMATON_H_ */
+#endif /* SINGLE_INITIAL_STATE_AUTOMATON_H_ */
 
diff --git a/alib2/src/automaton/TM/OneTapeDTM.cpp b/alib2/src/automaton/TM/OneTapeDTM.cpp
index d52df57d50eb7abd992d7378a3ea131c9dfdaa3a..66b25334da45e3c03b90824ce8b91419810eeca4 100644
--- a/alib2/src/automaton/TM/OneTapeDTM.cpp
+++ b/alib2/src/automaton/TM/OneTapeDTM.cpp
@@ -14,7 +14,7 @@ namespace automaton {
 using namespace std;
 using namespace alphabet;
 
-OneTapeDTM::OneTapeDTM(const State& initialState, const alphabet::Symbol& blank) : DeterministicAutomaton(initialState), BlankSymbolInputTapeAlphabet(blank) {
+OneTapeDTM::OneTapeDTM(const State& initialState, const alphabet::Symbol& blank) : SingleInitialStateAutomaton(initialState), BlankSymbolInputTapeAlphabet(blank) {
 }
 
 bool OneTapeDTM::removeState(const State& state) {
diff --git a/alib2/src/automaton/TM/OneTapeDTM.h b/alib2/src/automaton/TM/OneTapeDTM.h
index 3403c24ec104eb37d3e8df13cc81c3c05479489d..390e9740002aff116e67a1e1c5bdcc53d7e70d77 100644
--- a/alib2/src/automaton/TM/OneTapeDTM.h
+++ b/alib2/src/automaton/TM/OneTapeDTM.h
@@ -8,7 +8,7 @@
 #ifndef ONE_TAPE_DTM_H_
 #define ONE_TAPE_DTM_H_
 
-#include "../DeterministicAutomaton.h"
+#include "../SingleInitialStateAutomaton.h"
 #include "../BlankSymbolInputTapeAlphabet.h"
 #include "../Shift.h"
 
@@ -21,7 +21,7 @@ namespace automaton {
 /**
  * One tape turing machine
  */
-class OneTapeDTM : public DeterministicAutomaton, public BlankSymbolInputTapeAlphabet {
+class OneTapeDTM : public SingleInitialStateAutomaton, public BlankSymbolInputTapeAlphabet {
 protected:
 	std::map<std::pair<State, alphabet::Symbol>, std::tuple<State, alphabet::Symbol, Shift> > transitions;