diff --git a/aepsilon2/src/aepsilon.cpp b/aepsilon2/src/aepsilon.cpp
index 2a2b924d5ce621c6f1be1c37dbacb735c254e503..0c2ac5def5cbc57dd03902a53857ee47c0f64aaa 100644
--- a/aepsilon2/src/aepsilon.cpp
+++ b/aepsilon2/src/aepsilon.cpp
@@ -44,15 +44,26 @@ int main(int argc, char** argv) {
 		}
 
 		if(alib::FromXMLParsers::automatonParser.first(tokens)) {
-			automaton::EpsilonNFA automaton = alib::DataFactory::fromTokens<automaton::EpsilonNFA>(tokens);
-
-			automaton::NFA res = epsilon::EpsilonNFAEpsilonRemover::remove( automaton );
-
-			alib::DataFactory::toStdout(res);
+			std::string xmlMark = tokens.front( ).getData( );
+			if(xmlMark == "EpsilonNFA") {
+				automaton::EpsilonNFA automaton = alib::DataFactory::fromTokens<automaton::EpsilonNFA>(tokens);
+				automaton::NFA res = epsilon::EpsilonNFAEpsilonRemover::remove( automaton );
+				alib::DataFactory::toStdout(res);
+			} else if(xmlMark == "NFA") {
+				automaton::NFA automaton = alib::DataFactory::fromTokens<automaton::NFA>(tokens);
+				alib::DataFactory::toStdout(automaton);
+			} else if(xmlMark == "DFA") {
+				automaton::DFA automaton = alib::DataFactory::fromTokens<automaton::DFA>(tokens);
+				alib::DataFactory::toStdout(automaton);
+			} else {
+				automaton::EpsilonNFA automaton = alib::DataFactory::fromTokens<automaton::EpsilonNFA>(tokens);
+				automaton::NFA res = epsilon::EpsilonNFAEpsilonRemover::remove( automaton );
+				alib::DataFactory::toStdout(res);
+			}
+		} else {
+			throw exception::AlibException("Invalid argument expected Epsilon NFA.");
 		}
 
-		throw exception::AlibException("Invalid argument expected Epsilon NFA.");
-
 	} catch (const exception::AlibException& exception) {
 		alib::DataFactory::toStdout(exception);
 		return 1;