diff --git a/alib2algo/src/arbology/query/CompressedBitParallelismPatterns.cpp b/alib2algo/src/arbology/query/CompressedBitParallelismPatterns.cpp
index 0cc3588656688ed13cf491966c9d8d9d47d3d537..9990d00b197801c8eb6c0f4166dd0a5880d18dd4 100644
--- a/alib2algo/src/arbology/query/CompressedBitParallelismPatterns.cpp
+++ b/alib2algo/src/arbology/query/CompressedBitParallelismPatterns.cpp
@@ -6,20 +6,14 @@
  */
 
 #include "CompressedBitParallelismPatterns.h"
-
-#include <tree/ranked/PrefixRankedPattern.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace arbology {
 
 namespace query {
 
-ext::set < unsigned > CompressedBitParallelismPatterns::query ( const indexes::arbology::CompressedBitParallelTreeIndex < > & compressedBitParallelIndex, const tree::RankedTreeWrapper & tree ) {
-	return dispatch ( compressedBitParallelIndex, tree.getData ( ) );
-}
-
-auto CompressedBitParallelismPatternsPrefixRankedPattern = registration::OverloadRegister < CompressedBitParallelismPatterns, ext::set < unsigned >, tree::PrefixRankedPattern < > > ( CompressedBitParallelismPatterns::query );
-auto CompressedBitParallelismPatternsPrefixRankedBarPattern = registration::OverloadRegister < CompressedBitParallelismPatterns, ext::set < unsigned >, tree::PrefixRankedBarPattern < > > ( CompressedBitParallelismPatterns::query );
+auto CompressedBitParallelismPatternsPrefixRankedPattern = registration::AbstractRegister < CompressedBitParallelismPatterns, ext::set < unsigned >, const indexes::arbology::CompressedBitParallelTreeIndex < > &, const tree::PrefixRankedPattern < > & > ( CompressedBitParallelismPatterns::query );
+auto CompressedBitParallelismPatternsPrefixRankedBarPattern = registration::AbstractRegister < CompressedBitParallelismPatterns, ext::set < unsigned >, const indexes::arbology::CompressedBitParallelTreeIndex < > &, const tree::PrefixRankedBarPattern < > & > ( CompressedBitParallelismPatterns::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/arbology/query/CompressedBitParallelismPatterns.h b/alib2algo/src/arbology/query/CompressedBitParallelismPatterns.h
index faca2ce27ec77fc8eeb67fdd9fbefcbb9c71aad4..66a9f6b935f7a3699dba8416770e3186ca883731 100644
--- a/alib2algo/src/arbology/query/CompressedBitParallelismPatterns.h
+++ b/alib2algo/src/arbology/query/CompressedBitParallelismPatterns.h
@@ -9,10 +9,8 @@
 #define COMPRESSED_BIT_PARALLELISM_PATTERNS_H_
 
 #include <indexes/arbology/CompressedBitParallelTreeIndex.h>
-#include <tree/RankedTreeWrapper.h>
 #include <tree/ranked/PrefixRankedPattern.h>
 #include <tree/ranked/PrefixRankedBarPattern.h>
-#include <core/multipleDispatch.hpp>
 #include <global/GlobalData.h>
 
 namespace arbology {
@@ -24,7 +22,7 @@ namespace query {
  *
  */
 
-class CompressedBitParallelismPatterns : public alib::SingleDispatchFirstStaticParam < CompressedBitParallelismPatterns, ext::set < unsigned >, const indexes::arbology::CompressedBitParallelTreeIndex < > &, const tree::RankedTreeBase & > {
+class CompressedBitParallelismPatterns {
 
 public:
 	/**
@@ -33,8 +31,6 @@ public:
 	 * @param tree tree to query by
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::arbology::CompressedBitParallelTreeIndex < > & compressedBitParallelIndex, const tree::RankedTreeWrapper & pattern );
-
 	template < class SymbolType, class RankType >
 	static ext::set < unsigned > query ( const indexes::arbology::CompressedBitParallelTreeIndex < SymbolType, RankType > & compressedBitParallelTreeIndex, const tree::PrefixRankedPattern < SymbolType, RankType > & pattern );
 
diff --git a/alib2algo/src/arbology/query/FullAndLinearIndexPatterns.cpp b/alib2algo/src/arbology/query/FullAndLinearIndexPatterns.cpp
index d52f4b315a8618825bb22947b4670a3c029763b6..9e79e03286dc806a5715c63364482373a243f787 100644
--- a/alib2algo/src/arbology/query/FullAndLinearIndexPatterns.cpp
+++ b/alib2algo/src/arbology/query/FullAndLinearIndexPatterns.cpp
@@ -6,20 +6,14 @@
  */
 
 #include "FullAndLinearIndexPatterns.h"
-
-#include <tree/ranked/PrefixRankedPattern.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace arbology {
 
 namespace query {
 
-ext::set < unsigned > FullAndLinearIndexPatterns::query ( const indexes::arbology::FullAndLinearIndex < > & fullAndLinearIndex, const tree::RankedTreeWrapper & tree ) {
-	return dispatch ( fullAndLinearIndex, tree.getData ( ) );
-}
-
-auto fullAndLinearIndexPatternsPrefixRankedPattern = registration::OverloadRegister < FullAndLinearIndexPatterns, ext::set < unsigned >, tree::PrefixRankedPattern < > > ( FullAndLinearIndexPatterns::query );
-auto fullAndLinearIndexPatternsPrefixRankedBarPattern = registration::OverloadRegister < FullAndLinearIndexPatterns, ext::set < unsigned >, tree::PrefixRankedBarPattern < > > ( FullAndLinearIndexPatterns::query );
+auto fullAndLinearIndexPatternsPrefixRankedPattern = registration::AbstractRegister < FullAndLinearIndexPatterns, ext::set < unsigned >, const indexes::arbology::FullAndLinearIndex < > &, const tree::PrefixRankedPattern < > & > ( FullAndLinearIndexPatterns::query );
+auto fullAndLinearIndexPatternsPrefixRankedBarPattern = registration::AbstractRegister < FullAndLinearIndexPatterns, ext::set < unsigned >, const indexes::arbology::FullAndLinearIndex < > &, const tree::PrefixRankedBarPattern < > & > ( FullAndLinearIndexPatterns::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/arbology/query/FullAndLinearIndexPatterns.h b/alib2algo/src/arbology/query/FullAndLinearIndexPatterns.h
index 25ceb45059887de35b1791144414ad4784842ee4..365ed27511d2e00c03a012095afbe13fa646e341 100644
--- a/alib2algo/src/arbology/query/FullAndLinearIndexPatterns.h
+++ b/alib2algo/src/arbology/query/FullAndLinearIndexPatterns.h
@@ -9,10 +9,8 @@
 #define FULL_AND_LINEAR_INDEX_PATTERNS_H_
 
 #include <indexes/arbology/FullAndLinearIndex.h>
-#include <tree/RankedTreeWrapper.h>
 #include <tree/ranked/PrefixRankedPattern.h>
 #include <tree/ranked/PrefixRankedBarPattern.h>
-#include <core/multipleDispatch.hpp>
 #include <global/GlobalData.h>
 
 #include <stringology/query/PositionHeapFactors.h>
@@ -26,7 +24,7 @@ namespace query {
  *
  */
 
-class FullAndLinearIndexPatterns : public alib::SingleDispatchFirstStaticParam < FullAndLinearIndexPatterns, ext::set < unsigned >, const indexes::arbology::FullAndLinearIndex < > &, const tree::RankedTreeBase & > {
+class FullAndLinearIndexPatterns {
 	template < class SymbolType, class RankType >
 	static ext::vector < std::pair < unsigned, unsigned > > FindOccurrences ( const indexes::stringology::PositionHeap < common::ranked_symbol < SymbolType, RankType > > & stringIndex, const ext::vector < common::ranked_symbol < SymbolType, RankType > > & string ) {
 		ext::vector < std::pair < unsigned, unsigned > > res;
@@ -61,8 +59,6 @@ public:
 	 * @param tree tree to query by
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::arbology::FullAndLinearIndex < > & fullAndLinearIndex, const tree::RankedTreeWrapper & pattern );
-
 	template < class SymbolType, class RankType >
 	static ext::set < unsigned > query ( const indexes::arbology::FullAndLinearIndex < SymbolType, RankType > & compressedBitParallelTreeIndex, const tree::PrefixRankedPattern < SymbolType, RankType > & pattern );
 
diff --git a/alib2algo/src/arbology/query/NonlinearCompressedBitParallelismPatterns.cpp b/alib2algo/src/arbology/query/NonlinearCompressedBitParallelismPatterns.cpp
index 96cdfe379aba70f23ec4757172d1019a58478182..26328c88fa8d23f14e69e742d76237b7e4e085f5 100644
--- a/alib2algo/src/arbology/query/NonlinearCompressedBitParallelismPatterns.cpp
+++ b/alib2algo/src/arbology/query/NonlinearCompressedBitParallelismPatterns.cpp
@@ -6,19 +6,13 @@
  */
 
 #include "NonlinearCompressedBitParallelismPatterns.h"
-
-#include <tree/ranked/PrefixRankedPattern.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace arbology {
 
 namespace query {
 
-ext::set < unsigned > NonlinearCompressedBitParallelismPatterns::query ( const indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > & nonlinearCompressedBitParallelIndex, const tree::RankedTreeWrapper & tree ) {
-	return dispatch ( nonlinearCompressedBitParallelIndex, tree.getData ( ) );
-}
-
-auto NonlinearCompressedBitParallelismPatternsPrefixRankedBarPattern = registration::OverloadRegister < NonlinearCompressedBitParallelismPatterns, ext::set < unsigned >, tree::PrefixRankedBarNonlinearPattern < > > ( NonlinearCompressedBitParallelismPatterns::query );
+auto NonlinearCompressedBitParallelismPatternsPrefixRankedBarPattern = registration::AbstractRegister < NonlinearCompressedBitParallelismPatterns, ext::set < unsigned >, const indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > &, const tree::PrefixRankedBarNonlinearPattern < > & > ( NonlinearCompressedBitParallelismPatterns::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/arbology/query/NonlinearCompressedBitParallelismPatterns.h b/alib2algo/src/arbology/query/NonlinearCompressedBitParallelismPatterns.h
index 2e47e1b001987140e5b1a75b464cd2933fd28bf6..4854f7e7f80ee8d90b349367ed3fb066054d9f99 100644
--- a/alib2algo/src/arbology/query/NonlinearCompressedBitParallelismPatterns.h
+++ b/alib2algo/src/arbology/query/NonlinearCompressedBitParallelismPatterns.h
@@ -9,9 +9,7 @@
 #define NONLINEAR_COMPRESSED_BIT_PARALLELISM_PATTERNS_H_
 
 #include <indexes/arbology/NonlinearCompressedBitParallelTreeIndex.h>
-#include <tree/RankedTreeWrapper.h>
 #include <tree/ranked/PrefixRankedBarNonlinearPattern.h>
-#include <core/multipleDispatch.hpp>
 #include <global/GlobalData.h>
 
 namespace arbology {
@@ -23,7 +21,7 @@ namespace query {
  *
  */
 
-class NonlinearCompressedBitParallelismPatterns : public alib::SingleDispatchFirstStaticParam < NonlinearCompressedBitParallelismPatterns, ext::set < unsigned >, const indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > &, const tree::RankedTreeBase & > {
+class NonlinearCompressedBitParallelismPatterns {
 
 public:
 	/**
@@ -32,8 +30,6 @@ public:
 	 * @param tree tree to query by
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > & nonlinearCompressedBitParallelIndex, const tree::RankedTreeWrapper & pattern );
-
 	template < class SymbolType, class RankType >
 	static ext::set < unsigned > query ( const indexes::arbology::NonlinearCompressedBitParallelTreeIndex < SymbolType, RankType > & nonlinearCompressedBitParallelTreeIndex, const tree::PrefixRankedBarNonlinearPattern < SymbolType, RankType > & pattern );
 };
diff --git a/alib2algo/src/arbology/query/NonlinearFullAndLinearIndexPatterns.cpp b/alib2algo/src/arbology/query/NonlinearFullAndLinearIndexPatterns.cpp
index 287c4093664f34aa8ae132976789dc61ea888002..fa105a365c9d407488e8a783176eb07d24f0c53e 100644
--- a/alib2algo/src/arbology/query/NonlinearFullAndLinearIndexPatterns.cpp
+++ b/alib2algo/src/arbology/query/NonlinearFullAndLinearIndexPatterns.cpp
@@ -6,20 +6,14 @@
  */
 
 #include "NonlinearFullAndLinearIndexPatterns.h"
-
-#include <tree/ranked/PrefixRankedPattern.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace arbology {
 
 namespace query {
 
-ext::set < unsigned > NonlinearFullAndLinearIndexPatterns::query ( const indexes::arbology::NonlinearFullAndLinearIndex < > & nonlinearFullAndLinearIndex, const tree::RankedTreeWrapper & tree ) {
-	return dispatch ( nonlinearFullAndLinearIndex, tree.getData ( ) );
-}
-
-auto nonlinearFullAndLinearIndexPatternsPrefixRankedPattern = registration::OverloadRegister < NonlinearFullAndLinearIndexPatterns, ext::set < unsigned >, tree::PrefixRankedNonlinearPattern < > > ( NonlinearFullAndLinearIndexPatterns::query );
-auto nonlinearFullAndLinearIndexPatternsPrefixRankedBarPattern = registration::OverloadRegister < NonlinearFullAndLinearIndexPatterns, ext::set < unsigned >, tree::PrefixRankedBarNonlinearPattern < > > ( NonlinearFullAndLinearIndexPatterns::query );
+auto nonlinearFullAndLinearIndexPatternsPrefixRankedPattern = registration::AbstractRegister < NonlinearFullAndLinearIndexPatterns, ext::set < unsigned >, const indexes::arbology::NonlinearFullAndLinearIndex < > &, const tree::PrefixRankedNonlinearPattern < > & > ( NonlinearFullAndLinearIndexPatterns::query );
+auto nonlinearFullAndLinearIndexPatternsPrefixRankedBarPattern = registration::AbstractRegister < NonlinearFullAndLinearIndexPatterns, ext::set < unsigned >, const indexes::arbology::NonlinearFullAndLinearIndex < > &, const tree::PrefixRankedBarNonlinearPattern < > & > ( NonlinearFullAndLinearIndexPatterns::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/arbology/query/NonlinearFullAndLinearIndexPatterns.h b/alib2algo/src/arbology/query/NonlinearFullAndLinearIndexPatterns.h
index 01b2991aa4ba7ccae6e523c3627fb76efab2358c..798392eeee957dd81a01966188f1444963ef2af6 100644
--- a/alib2algo/src/arbology/query/NonlinearFullAndLinearIndexPatterns.h
+++ b/alib2algo/src/arbology/query/NonlinearFullAndLinearIndexPatterns.h
@@ -9,10 +9,8 @@
 #define NONLINEAR_FULL_AND_LINEAR_INDEX_PATTERNS_H_
 
 #include <indexes/arbology/NonlinearFullAndLinearIndex.h>
-#include <tree/RankedTreeWrapper.h>
 #include <tree/ranked/PrefixRankedNonlinearPattern.h>
 #include <tree/ranked/PrefixRankedBarNonlinearPattern.h>
-#include <core/multipleDispatch.hpp>
 #include <global/GlobalData.h>
 
 #include <stringology/query/PositionHeapFactors.h>
@@ -26,7 +24,7 @@ namespace query {
  *
  */
 
-class NonlinearFullAndLinearIndexPatterns : public alib::SingleDispatchFirstStaticParam < NonlinearFullAndLinearIndexPatterns, ext::set < unsigned >, const indexes::arbology::NonlinearFullAndLinearIndex < > &, const tree::RankedTreeBase & > {
+class NonlinearFullAndLinearIndexPatterns {
 	template < class SymbolType, class RankType >
 	static ext::vector < std::pair < unsigned, unsigned > > FindOccurrences ( const indexes::stringology::PositionHeap < common::ranked_symbol < SymbolType, RankType > > & stringIndex, const ext::vector < common::ranked_symbol < SymbolType, RankType > > & string ) {
 		ext::vector < std::pair < unsigned, unsigned > > res;
@@ -61,8 +59,6 @@ public:
 	 * @param tree tree to query by
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::arbology::NonlinearFullAndLinearIndex < > & fullAndLinearIndex, const tree::RankedTreeWrapper & pattern );
-
 	template < class SymbolType, class RankType >
 	static ext::set < unsigned > query ( const indexes::arbology::NonlinearFullAndLinearIndex < SymbolType, RankType > & compressedBitParallelTreeIndex, const tree::PrefixRankedNonlinearPattern < SymbolType, RankType > & pattern );
 
diff --git a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
index 2f6ca8e5e5850d1ea7fcdb58f0f7c5eea352ab2f..a97184d13b5f10dbd3292687f9a3e14d2970fc52 100644
--- a/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
+++ b/alib2algo/src/automaton/determinize/DeterminizeIDPDAPart.cxx
@@ -5,8 +5,6 @@
  *	  Author: Jan Vesely
  */
 
-#include <core/multipleDispatch.hpp>
-
 #include "common/NFACommon.h"
 
 #include <automaton/PDA/InputDrivenNPDA.h>
diff --git a/alib2algo/src/automaton/run/Run.h b/alib2algo/src/automaton/run/Run.h
index 8b553ae2b52c4212be7d679e2aa71b821e1a1641..b01d7b903efb8ae993192800973a6d63d7d062f0 100644
--- a/alib2algo/src/automaton/run/Run.h
+++ b/alib2algo/src/automaton/run/Run.h
@@ -8,7 +8,6 @@
 #ifndef _AUTOMATON_RUN_H__
 #define _AUTOMATON_RUN_H__
 
-#include <core/multipleDispatch.hpp>
 #include <string/LinearString.h>
 #include <tree/ranked/RankedTree.h>
 
diff --git a/alib2algo/src/stringology/query/BitParallelismFactors.cpp b/alib2algo/src/stringology/query/BitParallelismFactors.cpp
index fd45e5e87928b4abe240eb59aa6c923b9f0d2484..89e8746a8b7f552bf546ff8c80bb924e3d86f9f3 100644
--- a/alib2algo/src/stringology/query/BitParallelismFactors.cpp
+++ b/alib2algo/src/stringology/query/BitParallelismFactors.cpp
@@ -6,19 +6,13 @@
  */
 
 #include "BitParallelismFactors.h"
-
-#include <string/LinearString.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace stringology {
 
 namespace query {
 
-ext::set < unsigned > BitParallelismFactors::query ( const indexes::stringology::BitParallelIndex < DefaultSymbolType > & bitParallelIndex, const string::String & string ) {
-	return dispatch ( bitParallelIndex, string.getData ( ) );
-}
-
-auto BitParallelismFactorsLinearString = registration::OverloadRegister < BitParallelismFactors, ext::set < unsigned >, string::LinearString < > > ( BitParallelismFactors::query );
+auto BitParallelismFactorsLinearString = registration::AbstractRegister < BitParallelismFactors, ext::set < unsigned >, const indexes::stringology::BitParallelIndex < > &, const string::LinearString < > & > ( BitParallelismFactors::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/stringology/query/BitParallelismFactors.h b/alib2algo/src/stringology/query/BitParallelismFactors.h
index 9792b5206a96766bb950bfd0e6c25fbc4330e3bc..5b9576153858c597ae5031350c8ebc8fe343cf42 100644
--- a/alib2algo/src/stringology/query/BitParallelismFactors.h
+++ b/alib2algo/src/stringology/query/BitParallelismFactors.h
@@ -9,9 +9,7 @@
 #define BIT_PARALLELISM_FACTORS_H_
 
 #include <indexes/stringology/BitParallelIndex.h>
-#include <string/String.h>
 #include <string/LinearString.h>
-#include <core/multipleDispatch.hpp>
 #include <global/GlobalData.h>
 
 #include <foreach>
@@ -25,8 +23,7 @@ namespace query {
  *
  */
 
-class BitParallelismFactors : public alib::SingleDispatchFirstStaticParam < BitParallelismFactors, ext::set < unsigned >, const indexes::stringology::BitParallelIndex < DefaultSymbolType > &, const string::StringBase & > {
-
+class BitParallelismFactors {
 public:
 	/**
 	 * Query a suffix trie
@@ -34,8 +31,6 @@ public:
 	 * @param string string to query by
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::stringology::BitParallelIndex < DefaultSymbolType > & bitParallelIndex, const string::String & string );
-
 	template < class SymbolType >
 	static ext::set < unsigned > query ( const indexes::stringology::BitParallelIndex < SymbolType > & bitParallelIndex, const string::LinearString < SymbolType > & string );
 
diff --git a/alib2algo/src/stringology/query/CompressedBitParallelismFactors.cpp b/alib2algo/src/stringology/query/CompressedBitParallelismFactors.cpp
index b0a131de246228ef299bbb86d33fccf3330b37e3..b6b4a53ed504bf4d293eece1197752ed7ace3495 100644
--- a/alib2algo/src/stringology/query/CompressedBitParallelismFactors.cpp
+++ b/alib2algo/src/stringology/query/CompressedBitParallelismFactors.cpp
@@ -6,19 +6,13 @@
  */
 
 #include "CompressedBitParallelismFactors.h"
-
-#include <string/LinearString.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace stringology {
 
 namespace query {
 
-ext::set < unsigned > CompressedBitParallelismFactors::query ( const indexes::stringology::CompressedBitParallelIndex < DefaultSymbolType > & compressedBitParallelIndex, const string::String & string ) {
-	return dispatch ( compressedBitParallelIndex, string.getData ( ) );
-}
-
-auto CompressedBitParallelismFactorsLinearString = registration::OverloadRegister < CompressedBitParallelismFactors, ext::set < unsigned >, string::LinearString < > > ( CompressedBitParallelismFactors::query );
+auto CompressedBitParallelismFactorsLinearString = registration::AbstractRegister < CompressedBitParallelismFactors, ext::set < unsigned >, const indexes::stringology::CompressedBitParallelIndex < > &, const string::LinearString < > & > ( CompressedBitParallelismFactors::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/stringology/query/CompressedBitParallelismFactors.h b/alib2algo/src/stringology/query/CompressedBitParallelismFactors.h
index 16367243565efa4afa5c07441ffcebbf611fd32e..de31d9005e1534f4af2b4cea38fca70b9e192a5e 100644
--- a/alib2algo/src/stringology/query/CompressedBitParallelismFactors.h
+++ b/alib2algo/src/stringology/query/CompressedBitParallelismFactors.h
@@ -9,9 +9,7 @@
 #define COMPRESSED_BIT_PARALLELISM_FACTORS_H_
 
 #include <indexes/stringology/CompressedBitParallelIndex.h>
-#include <string/String.h>
 #include <string/LinearString.h>
-#include <core/multipleDispatch.hpp>
 #include <global/GlobalData.h>
 
 #include <foreach>
@@ -25,7 +23,7 @@ namespace query {
  *
  */
 
-class CompressedBitParallelismFactors : public alib::SingleDispatchFirstStaticParam < CompressedBitParallelismFactors, ext::set < unsigned >, const indexes::stringology::CompressedBitParallelIndex < DefaultSymbolType > &, const string::StringBase & > {
+class CompressedBitParallelismFactors {
 
 public:
 	/**
@@ -34,8 +32,6 @@ public:
 	 * @param string the string to query with
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::stringology::CompressedBitParallelIndex < DefaultSymbolType > & compressedBitParallelIndex, const string::String & string );
-
 	template < class SymbolType >
 	static ext::set < unsigned > query ( const indexes::stringology::CompressedBitParallelIndex < SymbolType > & compressedBitParallelIndex, const string::LinearString < SymbolType > & string );
 };
diff --git a/alib2algo/src/stringology/query/PositionHeapFactors.cpp b/alib2algo/src/stringology/query/PositionHeapFactors.cpp
index 4441a2af5e6e3d50c16a015402fda28b9eee3059..b173a446678827ef203cb1552632237ba9abec28 100644
--- a/alib2algo/src/stringology/query/PositionHeapFactors.cpp
+++ b/alib2algo/src/stringology/query/PositionHeapFactors.cpp
@@ -6,19 +6,13 @@
  */
 
 #include "PositionHeapFactors.h"
-
-#include <string/LinearString.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace stringology {
 
 namespace query {
 
-ext::set < unsigned > PositionHeapFactors::query ( const indexes::stringology::PositionHeap < DefaultSymbolType > & positionHeap, const string::String & string ) {
-	return dispatch ( positionHeap, string.getData ( ) );
-}
-
-auto PositionHeapFactorsLinearString = registration::OverloadRegister < PositionHeapFactors, ext::set < unsigned >, string::LinearString < > > ( PositionHeapFactors::query );
+auto PositionHeapFactorsLinearString = registration::AbstractRegister < PositionHeapFactors, ext::set < unsigned >, const indexes::stringology::PositionHeap < > &, const string::LinearString < > & > ( PositionHeapFactors::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/stringology/query/PositionHeapFactors.h b/alib2algo/src/stringology/query/PositionHeapFactors.h
index 0dda4927468f040562064050fb546104bc3ca9d0..79e43aff2598ad2f6f4faf9804f3294c233a785c 100644
--- a/alib2algo/src/stringology/query/PositionHeapFactors.h
+++ b/alib2algo/src/stringology/query/PositionHeapFactors.h
@@ -9,9 +9,7 @@
 #define POSITION_HEAP_FACTORS_H_
 
 #include <indexes/stringology/PositionHeap.h>
-#include <string/String.h>
 #include <string/LinearString.h>
-#include <core/multipleDispatch.hpp>
 #include <global/GlobalData.h>
 
 namespace stringology {
@@ -26,7 +24,7 @@ namespace query {
  *
  */
 
-class PositionHeapFactors : public alib::SingleDispatchFirstStaticParam < PositionHeapFactors, ext::set < unsigned >, const indexes::stringology::PositionHeap < DefaultSymbolType > &, const string::StringBase & > {
+class PositionHeapFactors {
 	template < class SymbolType >
 	static void accumulateResult ( const ext::trie < SymbolType, unsigned > & trie, ext::set < unsigned > & res, unsigned indexedStringSize ) {
 		res.insert ( indexedStringSize - trie.getData ( ) );
@@ -55,8 +53,6 @@ public:
 	 * @param string string to query by
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::stringology::PositionHeap < DefaultSymbolType > & positionHeap, const string::String & string );
-
 	template < class SymbolType >
 	static ext::set < unsigned > query ( const indexes::stringology::PositionHeap < SymbolType > & positionHeap, const string::LinearString < SymbolType > & string );
 
diff --git a/alib2algo/src/stringology/query/SuffixArrayFactors.cpp b/alib2algo/src/stringology/query/SuffixArrayFactors.cpp
index 93f48f83418b2dff9f296bdf8f6e0aa0e7b524a1..7cb13a0a1fb0b575fa9feb430ab3ae4afe747543 100644
--- a/alib2algo/src/stringology/query/SuffixArrayFactors.cpp
+++ b/alib2algo/src/stringology/query/SuffixArrayFactors.cpp
@@ -6,19 +6,13 @@
  */
 
 #include "SuffixArrayFactors.h"
-
-#include <string/LinearString.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace stringology {
 
 namespace query {
 
-ext::set < unsigned > SuffixArrayFactors::query ( const indexes::stringology::SuffixArray < > & suffixArray, const string::String & string ) {
-	return dispatch ( suffixArray, string.getData ( ) );
-}
-
-auto SuffixArrayFactorsLinearString = registration::OverloadRegister < SuffixArrayFactors, ext::set < unsigned >, string::LinearString < > > ( SuffixArrayFactors::query );
+auto SuffixArrayFactorsLinearString = registration::AbstractRegister < SuffixArrayFactors, ext::set < unsigned >, const indexes::stringology::SuffixArray < > &, const string::LinearString < > & > ( SuffixArrayFactors::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/stringology/query/SuffixArrayFactors.h b/alib2algo/src/stringology/query/SuffixArrayFactors.h
index 20faba1106b5e661417a8e31040240559a5ac08f..5788885d1baf9650f5de3967f041d765d21af332 100644
--- a/alib2algo/src/stringology/query/SuffixArrayFactors.h
+++ b/alib2algo/src/stringology/query/SuffixArrayFactors.h
@@ -9,10 +9,7 @@
 #define SUFFIX_ARRAY_FACTORS_H_
 
 #include <indexes/stringology/SuffixArray.h>
-#include <string/String.h>
 #include <string/LinearString.h>
-#include <core/multipleDispatch.hpp>
-
 #include <algorithm>
 
 namespace stringology {
@@ -25,7 +22,7 @@ namespace query {
  * Source: ??
  */
 
-class SuffixArrayFactors : public alib::SingleDispatchFirstStaticParam < SuffixArrayFactors, ext::set < unsigned >, const indexes::stringology::SuffixArray < DefaultSymbolType > &, const string::StringBase & > {
+class SuffixArrayFactors {
 public:
 	/**
 	 * Query a suffix array
@@ -33,8 +30,6 @@ public:
 	 * @param string string to query by
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::stringology::SuffixArray < DefaultSymbolType > & suffixArray, const string::String & string );
-
 	template < class SymbolType >
 	static ext::set < unsigned > query ( const indexes::stringology::SuffixArray < SymbolType > & suffixArray, const string::LinearString < SymbolType > & string );
 
@@ -65,11 +60,11 @@ ext::set < unsigned > SuffixArrayFactors::query ( const indexes::stringology::Su
 	} );
 
 	// The value returned by comparator indicates whether the first argument is considered to go before the second.
-	ext::vector < unsigned >::const_iterator up = std::upper_bound ( suffixArray.getData ( ).begin ( ), suffixArray.getData ( ).end ( ), string, [ & ] ( const string::LinearString < SymbolType > & str, unsigned second ) {
+	ext::vector < unsigned >::const_iterator high = std::upper_bound ( suffixArray.getData ( ).begin ( ), suffixArray.getData ( ).end ( ), string, [ & ] ( const string::LinearString < SymbolType > & str, unsigned second ) {
 			return comparator ( str.getContent ( ), 0, suffixArray.getString ( ), second, str.getContent ( ).size ( ) ) < 0;
 	} );
 
-	return ext::set < unsigned > ( low, up );
+	return ext::set < unsigned > ( low, high );
 }
 
 } /* namespace query */
diff --git a/alib2algo/src/stringology/query/SuffixTrieFactors.cpp b/alib2algo/src/stringology/query/SuffixTrieFactors.cpp
index a846243e3686656e449b4ba8a2a13833deab411e..14f2f9326cca0e6e2f19bd824eadd98f25a2d89c 100644
--- a/alib2algo/src/stringology/query/SuffixTrieFactors.cpp
+++ b/alib2algo/src/stringology/query/SuffixTrieFactors.cpp
@@ -6,19 +6,13 @@
  */
 
 #include "SuffixTrieFactors.h"
-
-#include <string/LinearString.h>
 #include <registration/AlgoRegistration.hpp>
 
 namespace stringology {
 
 namespace query {
 
-ext::set < unsigned > SuffixTrieFactors::query ( const indexes::stringology::SuffixTrie < DefaultSymbolType > & suffixTrie, const string::String & string ) {
-	return dispatch ( suffixTrie, string.getData ( ) );
-}
-
-auto SuffixTrieFactorsLinearString = registration::OverloadRegister < SuffixTrieFactors, ext::set < unsigned >, string::LinearString < > > ( SuffixTrieFactors::query );
+auto SuffixTrieFactorsLinearString = registration::AbstractRegister < SuffixTrieFactors, ext::set < unsigned >, const indexes::stringology::SuffixTrie < > &, const string::LinearString < > & > ( SuffixTrieFactors::query );
 
 } /* namespace query */
 
diff --git a/alib2algo/src/stringology/query/SuffixTrieFactors.h b/alib2algo/src/stringology/query/SuffixTrieFactors.h
index 149d9f4cfc750a4c3757dab1b7ebdcaa6cd89d25..a47b7169273665ef562c14836ba26ca978a6e592 100644
--- a/alib2algo/src/stringology/query/SuffixTrieFactors.h
+++ b/alib2algo/src/stringology/query/SuffixTrieFactors.h
@@ -9,9 +9,7 @@
 #define SUFFIX_TRIE_FACTORS_H_
 
 #include <indexes/stringology/SuffixTrie.h>
-#include <string/String.h>
 #include <string/LinearString.h>
-#include <core/multipleDispatch.hpp>
 
 namespace stringology {
 
@@ -23,7 +21,7 @@ namespace query {
  * Source: ??
  */
 
-class SuffixTrieFactors : public alib::SingleDispatchFirstStaticParam < SuffixTrieFactors, ext::set < unsigned >, const indexes::stringology::SuffixTrie < DefaultSymbolType > &, const string::StringBase & > {
+class SuffixTrieFactors {
 	template < class SymbolType >
 	static void accumulateResult ( const ext::trie < SymbolType, ext::variant < void, unsigned > > & trie, ext::set < unsigned > & res ) {
 		if ( trie.getData ( ).template is < unsigned > ( ) )
@@ -41,8 +39,6 @@ public:
 	 * @param string string to query by
 	 * @return occurences of factors
 	 */
-	static ext::set < unsigned > query ( const indexes::stringology::SuffixTrie < DefaultSymbolType > & suffixTrie, const string::String & string );
-
 	template < class SymbolType >
 	static ext::set < unsigned > query ( const indexes::stringology::SuffixTrie < SymbolType > & suffixTrie, const string::LinearString < SymbolType > & string );
 
diff --git a/aquery2/makefile.conf b/aquery2/makefile.conf
index 43220083ea43d02d8ff94fa79d3d70f3340fb42b..06e0b01dbca46182c66419819bab4ff940202971 100644
--- a/aquery2/makefile.conf
+++ b/aquery2/makefile.conf
@@ -1,4 +1,4 @@
 EXECUTABLE:=aquery2
-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/aquery2/src/aquery.cpp b/aquery2/src/aquery.cpp
index c8a9de3692868bf095549d9daeeae477751d1ee9..5325b9df478d4e9f5299ad500de93908ecf75579 100644
--- a/aquery2/src/aquery.cpp
+++ b/aquery2/src/aquery.cpp
@@ -8,22 +8,10 @@
 #include <tclap/CmdLine.h>
 #include <global/GlobalData.h>
 #include <measure>
-#include <vector>
-#include <sax/FromXMLParserHelper.h>
 
-#include <factory/XmlDataFactory.hpp>
 #include <exception/CommonException.h>
-#include <string/String.h>
-
-#include <stringology/query/SuffixTrieFactors.h>
-#include <stringology/query/SuffixArrayFactors.h>
-#include <stringology/query/PositionHeapFactors.h>
-#include <stringology/query/BitParallelismFactors.h>
-#include <stringology/query/CompressedBitParallelismFactors.h>
-#include <arbology/query/CompressedBitParallelismPatterns.h>
-#include <arbology/query/NonlinearCompressedBitParallelismPatterns.h>
-#include <arbology/query/FullAndLinearIndexPatterns.h>
-#include <arbology/query/NonlinearFullAndLinearIndexPatterns.h>
+#include <lexer/Lexer.h>
+#include <parser/Parser.h>
 
 int main ( int argc, char * argv[] ) {
 	try {
@@ -66,130 +54,73 @@ int main ( int argc, char * argv[] ) {
 		if(measure.isSet())
 			common::GlobalData::measure = true;
 
+		cli::Environment environment;
+		environment.setBinding ( "indexData", indexInput.getValue ( ) );
+		environment.setBinding ( "stdout", "-" );
+
 		measurements::start ( "Overal", measurements::Type::OVERALL );
 		measurements::start ( "Input read", measurements::Type::AUXILIARY );
 
-		if ( query.getValue ( ) == "suffixTrieFactors" ) {
-			indexes::stringology::SuffixTrie < DefaultSymbolType > suffixTrie = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			string::String pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = stringology::query::SuffixTrieFactors::query ( suffixTrie, pattern );
+		cli::Parser parser ( cli::Lexer ( "execute <#indexData > $index" ) );
+		parser.parse ( )->run ( environment );
+
+		if ( query.getValue ( ) == "suffixTrieFactors"
+		  || query.getValue ( ) == "suffixArrayFactors"
+		  || query.getValue ( ) == "positionHeapFactors"
+		  || query.getValue ( ) == "bitParallelismFactors"
+		  || query.getValue ( ) == "compressedBitParallelismFactors"
+		  || query.getValue ( ) == "compressedBitParallelismPatterns"
+		  || query.getValue ( ) == "nonlinearCompressedBitParallelismPatterns"
+		  || query.getValue ( ) == "fullAndLinearIndexPatterns"
+		  || query.getValue ( ) == "nonlinearFullAndLinearIndexPatterns" ) {
+			std::string input;
+			if ( patternInput.getValue ( ).size ( ) == 0 )
+				input = "-";
+			else if ( patternInput.getValue ( ).size ( ) == 1 )
+				input = * patternInput.getValue ( ).begin ( );
+			else
+				throw exception::CommonException("Multiple parameters when single required.");
+
+			environment.setBinding ( "patternData", input );
+			parser = cli::Parser ( cli::Lexer ( "execute <#patternData > $pattern" ) );
+			parser.parse ( )->run ( environment );
+		}
 
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
+		measurements::end ( );
+		measurements::start ( "Algorithm", measurements::Type::MAIN );
 
-			alib::XmlDataFactory::toStdout ( res );
+		std::string cliCommand;
+		if ( query.getValue ( ) == "suffixTrieFactors" ) {
+			cliCommand = "execute stringology::query::SuffixTrieFactors $index $pattern > $output";
 		} else if ( query.getValue ( ) == "suffixArrayFactors" ) {
-			indexes::stringology::SuffixArray < > suffixArray = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			string::String pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = stringology::query::SuffixArrayFactors::query ( suffixArray, pattern );
-
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-
-			alib::XmlDataFactory::toStdout ( res );
+			cliCommand = "execute stringology::query::SuffixArrayFactors $index $pattern > $output";
 		} else if ( query.getValue ( ) == "positionHeapFactors" ) {
-			indexes::stringology::PositionHeap < > positionHeap = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			string::String pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = stringology::query::PositionHeapFactors::query ( positionHeap, pattern );
-
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-
-			alib::XmlDataFactory::toStdout ( res );
+			cliCommand = "execute stringology::query::PositionHeapFactors $index $pattern > $output";
 		} else if ( query.getValue ( ) == "bitParallelismFactors" ) {
-			indexes::stringology::BitParallelIndex < > bitParallelIndex = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			string::String pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = stringology::query::BitParallelismFactors::query ( bitParallelIndex, pattern );
-
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-
-			alib::XmlDataFactory::toStdout ( res );
+			cliCommand = "execute stringology::query::BitParallelismFactors $index $pattern > $output";
 		} else if ( query.getValue ( ) == "compressedBitParallelismFactors" ) {
-			indexes::stringology::CompressedBitParallelIndex < > compressedBitParallelIndex = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			string::String pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = stringology::query::CompressedBitParallelismFactors::query ( compressedBitParallelIndex, pattern );
-
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-
-			alib::XmlDataFactory::toStdout ( res );
+			cliCommand = "execute stringology::query::CompressedBitParallelismFactors $index $pattern > $output";
 		} else if ( query.getValue ( ) == "compressedBitParallelismPatterns" ) {
-			indexes::arbology::CompressedBitParallelTreeIndex < > compressedBitParallelTreeIndex = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			tree::RankedTreeWrapper pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = arbology::query::CompressedBitParallelismPatterns::query ( compressedBitParallelTreeIndex, pattern );
-
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-
-			alib::XmlDataFactory::toStdout ( res );
+			cliCommand = "execute arbology::query::CompressedBitParallelismPatterns $index $pattern > $output";
 		} else if ( query.getValue ( ) == "nonlinearCompressedBitParallelismPatterns" ) {
-			indexes::arbology::NonlinearCompressedBitParallelTreeIndex < > nonlinearCompressedBitParallelTreeIndex = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			tree::RankedTreeWrapper pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = arbology::query::NonlinearCompressedBitParallelismPatterns::query ( nonlinearCompressedBitParallelTreeIndex, pattern );
-
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-
-			alib::XmlDataFactory::toStdout ( res );
+			cliCommand = "execute arbology::query::NonlinearCompressedBitParallelismPatterns $index $pattern > $output";
 		} else if ( query.getValue ( ) == "fullAndLinearIndexPatterns" ) {
-			indexes::arbology::FullAndLinearIndex < > fullAndLinearIndex = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			tree::RankedTreeWrapper pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = arbology::query::FullAndLinearIndexPatterns::query ( fullAndLinearIndex, pattern );
-
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-
-			alib::XmlDataFactory::toStdout ( res );
+			cliCommand = "execute arbology::query::FullAndLinearIndexPatterns $index $pattern > $output";
 		} else if ( query.getValue ( ) == "nonlinearFullAndLinearIndexPatterns" ) {
-			indexes::arbology::NonlinearFullAndLinearIndex < > nonlinearFullAndLinearIndex = alib::XmlDataFactory::fromTokens ( sax::FromXMLParserHelper::parseInput ( indexInput ) );
-			tree::RankedTreeWrapper pattern = alib::XmlDataFactory::fromTokens ( std::move ( sax::FromXMLParserHelper::parseInput(true, patternInput).front ( ) ) );
-
-			measurements::end ( );
-			measurements::start ( "Algorithm", measurements::Type::MAIN );
-
-			ext::set < unsigned > res = arbology::query::NonlinearFullAndLinearIndexPatterns::query ( nonlinearFullAndLinearIndex, pattern );
-
-			measurements::end ( );
-			measurements::start ( "Output write", measurements::Type::AUXILIARY );
-
-			alib::XmlDataFactory::toStdout ( res );
+			cliCommand = "execute arbology::query::NonlinearFullAndLinearIndexPatterns $index $pattern > $output";
 		} else {
 			throw exception::CommonException ( "Invalid algorithm" );
 		}
 
+		parser = cli::Parser ( cli::Lexer ( cliCommand ) );
+		parser.parse ( )->run ( environment );
+
+		measurements::end ( );
+		measurements::start ( "Output write", measurements::Type::AUXILIARY );
+
+		parser = cli::Parser ( cli::Lexer ( "execute $output >#stdout" ) );
+		parser.parse ( )->run ( environment );
+
 		measurements::end ( );
 		measurements::end ( );