diff --git a/alib2algo/src/automaton/transform/Reverse.cpp b/alib2algo/src/automaton/transform/Reverse.cpp
index 1c64a2bfb81913b7bda5236e5c7cc8a7b52e5841..e7e4e1f10403bbc70d19075159f77dfb6c629b04 100644
--- a/alib2algo/src/automaton/transform/Reverse.cpp
+++ b/alib2algo/src/automaton/transform/Reverse.cpp
@@ -12,14 +12,6 @@ namespace automaton {
 
 namespace transform {
 
-automaton::Automaton Reverse::convert(const Automaton& automaton) {
-	return dispatch(automaton.getData());
-}
-
-auto ReverseDFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::DFA < > > ( Reverse::convert );
-auto ReverseNFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::NFA < > > ( Reverse::convert );
-auto ReverseMultiInitialStateNFA = registration::OverloadRegister < Reverse, automaton::MultiInitialStateNFA < >, automaton::MultiInitialStateNFA < > > ( Reverse::convert );
-
 auto ReverseDFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::DFA < > & > ( Reverse::convert );
 auto ReverseNFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::NFA < > & > ( Reverse::convert );
 auto ReverseMultiInitialStateNFA2 = registration::AbstractRegister < Reverse, automaton::MultiInitialStateNFA < >, const automaton::MultiInitialStateNFA < > & > ( Reverse::convert );
diff --git a/alib2algo/src/automaton/transform/Reverse.h b/alib2algo/src/automaton/transform/Reverse.h
index 03777eb560e1a9e81412e6dd167a77479b806ce1..4773c4094490f5e5d2de71f329d0b2dab8bd0ca4 100644
--- a/alib2algo/src/automaton/transform/Reverse.h
+++ b/alib2algo/src/automaton/transform/Reverse.h
@@ -11,17 +11,15 @@
 #include <vector>
 #include <algorithm>
 
-#include <core/multipleDispatch.hpp>
-
-#include <automaton/Automaton.h>
-#include <automaton/AutomatonFeatures.h>
 #include <automaton/FSM/MultiInitialStateNFA.h>
+#include <automaton/FSM/NFA.h>
+#include <automaton/FSM/DFA.h>
 
 namespace automaton {
 
 namespace transform {
 
-class Reverse : public alib::SingleDispatch<Reverse, automaton::Automaton, const automaton::AutomatonBase &> {
+class Reverse {
 public:
 	template < class SymbolType, class StateType >
 	static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::DFA < SymbolType, StateType > & automaton);
@@ -29,13 +27,6 @@ public:
 	static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::NFA < SymbolType, StateType > & automaton);
 	template < class SymbolType, class StateType >
 	static automaton::MultiInitialStateNFA < SymbolType, StateType > convert(const automaton::MultiInitialStateNFA < SymbolType, StateType > & automaton);
-
-	/**
-	 * Creates finite automaton accepting reverse language of given automaton
-	 * @param automaton FSM
-	 * @return Automaton reverse automaton
-	 */
-	static automaton::Automaton convert( const automaton::Automaton & automaton );
 };
 
 template < class SymbolType, class StateType >
diff --git a/areverse2/makefile.conf b/areverse2/makefile.conf
index 3731eca9c9b1047504b1635f11db89094070f7c2..963a354de8bd0883375eec0b9886576d9da8d160 100644
--- a/areverse2/makefile.conf
+++ b/areverse2/makefile.conf
@@ -1,4 +1,4 @@
 EXECUTABLE:=areverse2
-LINK_PATHS=../alib2elgo/ ../alib2algo/ ../alib2data/ ../alib2common/ ../alib2std/
-LINK_LIBRARIES=alib2elgo alib2algo alib2data alib2common alib2std xml2
-INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2elgo/src/ \$$(SOURCES_BASE_DIR)/../../alib2algo/src/ \$$(SOURCES_BASE_DIR)/../../alib2data/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/
+LINK_PATHS=../alib2cli/ ../alib2elgo/ ../alib2algo/ ../alib2data/ ../alib2common/ ../alib2std/
+LINK_LIBRARIES=alib2cli alib2elgo alib2algo alib2data alib2common alib2std xml2
+INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2cli/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/
diff --git a/areverse2/src/areverse.cpp b/areverse2/src/areverse.cpp
index 8cd69faeaa7fc2213590483e731d652bd8510319..98206c807a0ce2cd385d5a57423bd843a227aee0 100644
--- a/areverse2/src/areverse.cpp
+++ b/areverse2/src/areverse.cpp
@@ -8,11 +8,10 @@
 #include <tclap/CmdLine.h>
 #include <global/GlobalData.h>
 #include <measure>
-#include <sax/FromXMLParserHelper.h>
 
-#include "exception/CommonException.h"
-#include "factory/XmlDataFactory.hpp"
-#include "automaton/transform/Reverse.h"
+#include <exception/CommonException.h>
+#include <lexer/Lexer.h>
+#include <parser/Parser.h>
 
 int main(int argc, char** argv) {
 	try {
@@ -37,20 +36,27 @@ int main(int argc, char** argv) {
 		if(measure.isSet())
 			common::GlobalData::measure = true;
 
-		measurements::start("Overal", measurements::Type::OVERALL);
-		measurements::start("Input read", measurements::Type::AUXILIARY);
+		cli::Environment environment;
+		environment.setBinding ( "stdin", input.getValue ( ) );
+		environment.setBinding ( "stdout", "-" );
 
-		automaton::Automaton automaton = alib::XmlDataFactory::fromTokens (sax::FromXMLParserHelper::parseInput(input));
+		measurements::start ( "Overal", measurements::Type::OVERALL );
+		measurements::start ( "Input read", measurements::Type::AUXILIARY );
 
-		measurements::end();
-		measurements::start("Algorithm", measurements::Type::MAIN);
+		cli::Parser parser ( cli::Lexer ( "execute <#stdin > $inputAutomaton" ) );
+		parser.parse ( )->run ( environment );
 
-		automaton::Automaton res = automaton::transform::Reverse::convert(automaton);
+		measurements::end ( );
+		measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-		measurements::end();
-		measurements::start("Output write", measurements::Type::AUXILIARY);
+		parser = cli::Parser ( cli::Lexer ( "execute automaton::transform::Reverse $inputAutomaton > $outputAutomaton" ) );
+		parser.parse ( )->run ( environment );
+
+		measurements::end ( );
+		measurements::start ( "Output write", measurements::Type::AUXILIARY );
 
-		alib::XmlDataFactory::toStdout(res);
+		parser = cli::Parser ( cli::Lexer ( "execute $outputAutomaton >#stdout" ) );
+		parser.parse ( )->run ( environment );
 
 		measurements::end();
 		measurements::end();