diff --git a/acompaction2/makefile.conf b/acompaction2/makefile.conf
index 813ae435ef96d4c4454c8a3ee6ba44d2f1067dfd..9981fe67f386a34811eea4befef55eb031909889 100644
--- a/acompaction2/makefile.conf
+++ b/acompaction2/makefile.conf
@@ -1,4 +1,4 @@
 EXECUTABLE:=acompaction2
-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/acompaction2/src/acompaction.cpp b/acompaction2/src/acompaction.cpp
index ca424e4d40fec644c409af58bb45a4829c177f5d..9aa03cad07cfc602e0526c9c73c7186a050a4005 100644
--- a/acompaction2/src/acompaction.cpp
+++ b/acompaction2/src/acompaction.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/Compaction.h"
+#include <exception/CommonException.h>
+#include <lexer/Lexer.h>
+#include <parser/Parser.h>
 
 int main(int argc, char** argv) {
 	try {
@@ -37,23 +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::Compaction::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::Compaction $inputAutomaton > $outputAutomaton" ) );
+		parser.parse ( )->run ( environment );
 
-		alib::XmlDataFactory::toStdout(res);
+		measurements::end ( );
+		measurements::start ( "Output write", measurements::Type::AUXILIARY );
 
-		measurements::end();
-		measurements::end();
+		parser = cli::Parser ( cli::Lexer ( "execute $outputAutomaton >#stdout" ) );
+		parser.parse ( )->run ( environment );
 
 		if(measure.getValue()) ext::cmeasure << measurements::results() << std::endl;
 
diff --git a/alib2algo/src/automaton/transform/Compaction.cpp b/alib2algo/src/automaton/transform/Compaction.cpp
index abca9417efb5f47e09fcec79fbbf0c0eb32b0107..afdb807474d9a20841ab7e109d4616f71421c254 100644
--- a/alib2algo/src/automaton/transform/Compaction.cpp
+++ b/alib2algo/src/automaton/transform/Compaction.cpp
@@ -12,17 +12,9 @@ namespace automaton {
 
 namespace transform {
 
-automaton::Automaton Compaction::convert(const automaton::Automaton& automaton) {
-	return dispatch(automaton.getData());
-}
-
-auto CompactionCompactNFA = registration::OverloadRegister < Compaction, automaton::CompactNFA < >, automaton::CompactNFA < > > ( Compaction::convert );
-auto CompactionDFA = registration::OverloadRegister < Compaction, automaton::CompactNFA < >, automaton::DFA < > > ( Compaction::convert );
-auto CompactionNFA = registration::OverloadRegister < Compaction, automaton::CompactNFA < >, automaton::NFA < > > ( Compaction::convert );
-
-auto CompactionCompactNFA2 = registration::AbstractRegister < Compaction, automaton::CompactNFA < >, const automaton::CompactNFA < > & > ( Compaction::convert );
-auto CompactionDFA2 = registration::AbstractRegister < Compaction, automaton::CompactNFA < >, const automaton::DFA < > & > ( Compaction::convert );
-auto CompactionNFA2 = registration::AbstractRegister < Compaction, automaton::CompactNFA < >, const automaton::NFA < > & > ( Compaction::convert );
+auto CompactionCompactNFA = registration::AbstractRegister < Compaction, automaton::CompactNFA < >, const automaton::CompactNFA < > & > ( Compaction::convert );
+auto CompactionDFA = registration::AbstractRegister < Compaction, automaton::CompactNFA < >, const automaton::DFA < > & > ( Compaction::convert );
+auto CompactionNFA = registration::AbstractRegister < Compaction, automaton::CompactNFA < >, const automaton::NFA < > & > ( Compaction::convert );
 
 } /* namespace transform */
 
diff --git a/alib2algo/src/automaton/transform/Compaction.h b/alib2algo/src/automaton/transform/Compaction.h
index 1e299bd6970b2eb0a5ed07e659221ebcd2a8685f..3a3a75abfd979a286b5293fdcd2755eb67ed0f59 100644
--- a/alib2algo/src/automaton/transform/Compaction.h
+++ b/alib2algo/src/automaton/transform/Compaction.h
@@ -11,9 +11,6 @@
 #include <stack>
 #include <tuple>
 
-#include <core/multipleDispatch.hpp>
-
-#include "automaton/Automaton.h"
 #include "automaton/AutomatonFeatures.h"
 #include <automaton/FSM/CompactNFA.h>
 #include <automaton/FSM/DFA.h>
@@ -25,7 +22,7 @@ namespace transform {
 /**
  * Transforms FSM to CompactNFA
  */
-class Compaction : public alib::SingleDispatch<Compaction, automaton::Automaton, const automaton::AutomatonBase &> {
+class Compaction {
 public:
 	template < class SymbolType, class StateType >
 	static automaton::CompactNFA < SymbolType, StateType > convert( const automaton::DFA < SymbolType, StateType > & automaton);
@@ -33,13 +30,6 @@ public:
 	static automaton::CompactNFA < SymbolType, StateType > convert( const automaton::NFA < SymbolType, StateType > & automaton);
 	template < class SymbolType, class StateType >
 	static automaton::CompactNFA < SymbolType, StateType > convert( const automaton::CompactNFA < SymbolType, StateType > & automaton);
-
-	/**
-	 * Transforms
-	 * @param automaton FSM to transform
-	 * @return CompactNFA equivalent to given automaton
-	 */
-	static automaton::Automaton convert( const automaton::Automaton & automaton );
 };
 
 template < class SymbolType, class StateType >