diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp
index 40f838d0a98051b9aa4d7c7cc9af6394cbb62265..7116a1a1db271c9be135f7cc55e0fe0aef500480 100644
--- a/aarbology2/src/aarbology.cpp
+++ b/aarbology2/src/aarbology.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/acast2/src/acast.cpp b/acast2/src/acast.cpp
index 357c92b93a921044d1ddc60aac1025da7b3b2496..c680c3807925f10ef3a7b016cb6f7c3244df0437 100644
--- a/acast2/src/acast.cpp
+++ b/acast2/src/acast.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 // -----------------------------------------------------------------------------------------
 
 int main(int argc, char** argv) {
diff --git a/acompaction2/src/acompaction.cpp b/acompaction2/src/acompaction.cpp
index a6b397d5756c1c64911bcf862e281e91c79c15dd..7988e0e8419a376da7a531d25f9f5756e0843575 100644
--- a/acompaction2/src/acompaction.cpp
+++ b/acompaction2/src/acompaction.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aconversions2/src/aconversion.cpp b/aconversions2/src/aconversion.cpp
index ddf86ad29660e4a4898c002d7c08b280e478c69e..ae63ccebd3f2d36b37fd8e839a26c46914e4f345 100644
--- a/aconversions2/src/aconversion.cpp
+++ b/aconversions2/src/aconversion.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 #include "ConversionHandler.h"
 
 int main ( int argc, char * argv[] ) {
diff --git a/aderivation2/src/aderivation.cpp b/aderivation2/src/aderivation.cpp
index b6dd82e440c966f6be40440353896c30856c8f2b..658e249cdc7fdb255a0e1e49638759acd42489b5 100644
--- a/aderivation2/src/aderivation.cpp
+++ b/aderivation2/src/aderivation.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/adeterminize2/src/adeterminize.cpp b/adeterminize2/src/adeterminize.cpp
index d03e68036754c2e37c65f0fd4b873d5be7ac0458..aa2be2e2b45d5b522ff0005259d2be3719495616 100644
--- a/adeterminize2/src/adeterminize.cpp
+++ b/adeterminize2/src/adeterminize.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * * argv ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aecho2/src/aecho.cpp b/aecho2/src/aecho.cpp
index 935b7a3e8e554e975a1c9b1bb1e1f3999183645b..2acb4b3520efdffc83c572bfec503cdeb06ba15f 100644
--- a/aecho2/src/aecho.cpp
+++ b/aecho2/src/aecho.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aepsilon2/src/aepsilon.cpp b/aepsilon2/src/aepsilon.cpp
index bafcd33ce9f7b66c57fd779fba90825781bc8ffd..6757f8c1b0606f0c826e9c91b20714f75e5ca1b7 100644
--- a/aepsilon2/src/aepsilon.cpp
+++ b/aepsilon2/src/aepsilon.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/agenerate2/src/agenerate.cpp b/agenerate2/src/agenerate.cpp
index d0e8271b9cd1e4fda68ffe1742eea1cc0fc3428e..633a890458332b91ddf5b7fa4dbe579c659fbf5a 100644
--- a/agenerate2/src/agenerate.cpp
+++ b/agenerate2/src/agenerate.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aintegral2/src/aintegral.cpp b/aintegral2/src/aintegral.cpp
index fae81777ecf3a8e7ce1bb545b77ec04d1b2030af..bda22e659fa59cf27b25f96dbdbf126572ad03ed 100644
--- a/aintegral2/src/aintegral.cpp
+++ b/aintegral2/src/aintegral.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/alangop2/src/alangop.cpp b/alangop2/src/alangop.cpp
index a60085a6e407b7900380e6db5509217aa4bf2d15..ad6f226ae6239a0a19f919e9dbcbabf11fec176c 100644
--- a/alangop2/src/alangop.cpp
+++ b/alangop2/src/alangop.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char* argv[]) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/alib2cli/src/ast/params/FileParam.h b/alib2cli/src/ast/params/FileParam.h
index 4c50a5e387941533682d30197669866e130c0a30..4a83ee066c073254e49a7aec35cfdccb4e2ffb26 100644
--- a/alib2cli/src/ast/params/FileParam.h
+++ b/alib2cli/src/ast/params/FileParam.h
@@ -16,7 +16,9 @@ public:
 	virtual std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > &, Environment & environment ) const override {
 		ext::deque < sax::Token > tokens = sax::FromXMLParserHelper::parseInput ( m_arg->eval ( environment ) );
 		std::string type = tokens [ 0 ].getData ( );
-		return abstraction::Registry::getXmlParserAbstraction ( type, tokens );
+		std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getXmlParserAbstraction ( type, tokens );
+		res->eval ( );
+		return res;
 	}
 };
 
diff --git a/alib2cli/src/ast/statements/FileStatement.cpp b/alib2cli/src/ast/statements/FileStatement.cpp
index 98a0ad940d18370dcebd53977bac4e8edcd782a0..15920e32ee0928ead1bd10082593652c7ec87a16 100644
--- a/alib2cli/src/ast/statements/FileStatement.cpp
+++ b/alib2cli/src/ast/statements/FileStatement.cpp
@@ -18,7 +18,9 @@ std::shared_ptr < abstraction::OperationAbstraction > FileStatement::translateAn
 	if ( type == "" )
 		type = tokens [ 0 ].getData ( );
 
-	return abstraction::Registry::getXmlParserAbstraction ( type, tokens );
+	std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::Registry::getXmlParserAbstraction ( type, std::move ( tokens ) );
+	res->eval ( );
+	return res;
 }
 
 } /* namespace cli */
diff --git a/alib2common/src/abstraction/CastRegistry.hpp b/alib2common/src/abstraction/CastRegistry.hpp
index b685188769f823959a99a2f21253dd0909d4727f..ab4b03720b866b783e518eb511251325a6b2ae04 100644
--- a/alib2common/src/abstraction/CastRegistry.hpp
+++ b/alib2common/src/abstraction/CastRegistry.hpp
@@ -11,6 +11,7 @@
 #include <memory>
 #include <string>
 #include <set>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/DowncastRegistry.hpp b/alib2common/src/abstraction/DowncastRegistry.hpp
index 331f477e699a5a25063e343fd28991820290bfaa..a073e5788aad07655134f141c622345834eeeefb 100644
--- a/alib2common/src/abstraction/DowncastRegistry.hpp
+++ b/alib2common/src/abstraction/DowncastRegistry.hpp
@@ -10,6 +10,7 @@
 
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/ImmediateRegistry.hpp b/alib2common/src/abstraction/ImmediateRegistry.hpp
index 369995e00170859c4a54a23afd92355eabe736d1..a4e1d273fc4597d7e929c39994c48ed64dc1015c 100644
--- a/alib2common/src/abstraction/ImmediateRegistry.hpp
+++ b/alib2common/src/abstraction/ImmediateRegistry.hpp
@@ -8,10 +8,9 @@
 #ifndef _IMMEDIATE_REGISTRY_HPP_
 #define _IMMEDIATE_REGISTRY_HPP_
 
-#include <factory/XmlDataFactory.hpp>
-
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
@@ -43,7 +42,7 @@ public:
 	template < class ResultType >
 	static void registerImmediate ( std::string result ) {
 		if ( ! getEntries ( ).insert ( std::make_pair ( result, std::unique_ptr < Entry > ( new EntryImpl < ResultType > ( ) ) ) ).second )
-			throw ::exception::CommonException ( "Entry " + result + " already registered." );
+			throw exception::CommonException ( "Entry " + result + " already registered." );
 	}
 
 	template < class ResultType >
diff --git a/alib2common/src/abstraction/NormalizeRegistry.hpp b/alib2common/src/abstraction/NormalizeRegistry.hpp
index a5791d6d000991d4bcf78a1b0cc2644eda553be9..fc5e768ff835318641d2cec761c1d119f5800334 100644
--- a/alib2common/src/abstraction/NormalizeRegistry.hpp
+++ b/alib2common/src/abstraction/NormalizeRegistry.hpp
@@ -10,6 +10,7 @@
 
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/OperationAbstraction.hpp b/alib2common/src/abstraction/OperationAbstraction.hpp
index 258d42e38feabecefbe9a066cc1fa625a33896fb..d37e9f12b2dc0ab14c2d2c6bfed83493b372bc5b 100644
--- a/alib2common/src/abstraction/OperationAbstraction.hpp
+++ b/alib2common/src/abstraction/OperationAbstraction.hpp
@@ -14,7 +14,6 @@
 #include <functional>
 
 #include <exception/CommonException.h>
-#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
diff --git a/alib2common/src/abstraction/ValuePrinterRegistry.hpp b/alib2common/src/abstraction/ValuePrinterRegistry.hpp
index 8d797d1ec74337ec0386f11ec4315fe6e226e0a6..d3851708e77fc9d59cb5d9191f0adeafd981daf7 100644
--- a/alib2common/src/abstraction/ValuePrinterRegistry.hpp
+++ b/alib2common/src/abstraction/ValuePrinterRegistry.hpp
@@ -10,6 +10,7 @@
 
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/XmlComposerAbstraction.hpp b/alib2common/src/abstraction/XmlComposerAbstraction.hpp
index da4003dbccf15281d4369fa7f03302f5562fa988..d3cd659e2d01d9ceb78212704c038cb645c49ea2 100644
--- a/alib2common/src/abstraction/XmlComposerAbstraction.hpp
+++ b/alib2common/src/abstraction/XmlComposerAbstraction.hpp
@@ -10,6 +10,7 @@
 
 #include <abstraction/UnaryOperationAbstraction.hpp>
 #include <tuple>
+#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
diff --git a/alib2common/src/abstraction/XmlComposerRegistry.hpp b/alib2common/src/abstraction/XmlComposerRegistry.hpp
index 7b85af772d2413b73d653baf1db6cb8b0cced7e6..89b4ed56d5fe14150c24d20ef80e22761ef43cdc 100644
--- a/alib2common/src/abstraction/XmlComposerRegistry.hpp
+++ b/alib2common/src/abstraction/XmlComposerRegistry.hpp
@@ -11,6 +11,7 @@
 #include <memory>
 #include <string>
 #include <set>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/XmlFileWriterAbstraction.hpp b/alib2common/src/abstraction/XmlFileWriterAbstraction.hpp
index c4283495b8389c9452c33cf2496fe1fc5d36db30..07a4f47f9a43595a4c71d55a762dbb914f6557ef 100644
--- a/alib2common/src/abstraction/XmlFileWriterAbstraction.hpp
+++ b/alib2common/src/abstraction/XmlFileWriterAbstraction.hpp
@@ -10,6 +10,7 @@
 
 #include <abstraction/UnaryOperationAbstraction.hpp>
 #include <tuple>
+#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
diff --git a/alib2common/src/abstraction/XmlFileWriterRegistry.hpp b/alib2common/src/abstraction/XmlFileWriterRegistry.hpp
index bca003992ab765d5e867c41609c6a865963126d1..3bf2a054069c02f8d572378fde059f5d4308f49e 100644
--- a/alib2common/src/abstraction/XmlFileWriterRegistry.hpp
+++ b/alib2common/src/abstraction/XmlFileWriterRegistry.hpp
@@ -11,6 +11,7 @@
 #include <memory>
 #include <string>
 #include <set>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
diff --git a/alib2common/src/abstraction/XmlParserAbstraction.hpp b/alib2common/src/abstraction/XmlParserAbstraction.hpp
index 5011921ef84a5519f35d57468ebf7f86e4949a4b..90db4e526398542aa28003461f28abaea8345367 100644
--- a/alib2common/src/abstraction/XmlParserAbstraction.hpp
+++ b/alib2common/src/abstraction/XmlParserAbstraction.hpp
@@ -10,6 +10,8 @@
 
 #include <abstraction/NullaryOperationAbstraction.hpp>
 #include <tuple>
+#include <exception/CommonException.h>
+#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
@@ -31,6 +33,12 @@ public:
 	}
 };
 
+template < >
+inline bool XmlParserAbstraction < exception::CommonException >::run ( ) {
+	exception::CommonException ex = alib::XmlDataFactory::fromTokens ( std::move ( m_tokens ) );
+	throw ex;
+}
+
 } /* namespace abstraction */
 
 #endif /* _XML_PARSER_ABSTRACTION_HPP_ */
diff --git a/alib2common/src/abstraction/XmlParserRegistry.hpp b/alib2common/src/abstraction/XmlParserRegistry.hpp
index eef86abb62647fd8f3e7775df2feb8f24d815745..cce9aaf60bf02bd10dd7c488163fb7d5d19e5a74 100644
--- a/alib2common/src/abstraction/XmlParserRegistry.hpp
+++ b/alib2common/src/abstraction/XmlParserRegistry.hpp
@@ -10,9 +10,11 @@
 
 #include <memory>
 #include <string>
+#include <map>
 
 #include <exception/CommonException.h>
 #include <abstraction/OperationAbstraction.hpp>
+#include <factory/XmlDataFactory.hpp>
 
 namespace abstraction {
 
diff --git a/aminimize2/src/aminimize.cpp b/aminimize2/src/aminimize.cpp
index f9686bfce8977bd1e53c5d189c2728f38d8f4942..80994a095edce7a6960fc84b48fbad9b3456003f 100644
--- a/aminimize2/src/aminimize.cpp
+++ b/aminimize2/src/aminimize.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/anormalize2/src/anormalize.cpp b/anormalize2/src/anormalize.cpp
index 2afa35add081377d2c1876a1ecc429d7a231e520..f340f745c2bee91ab47dc9b7e9b7ca6740a81319 100644
--- a/anormalize2/src/anormalize.cpp
+++ b/anormalize2/src/anormalize.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * * argv ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/aql2/src/aql.cpp b/aql2/src/aql.cpp
index c5de390dc37620e1e5f1cdf42b43b4c400a413cf..1b7403027fdab4a6bb74faacfcf0e4feb053e7ee 100644
--- a/aql2/src/aql.cpp
+++ b/aql2/src/aql.cpp
@@ -34,6 +34,8 @@ std::istream& operator>> ( std::istream & in, std::pair < T, U > & value ) {
 
 #include "prompt/Prompt.h"
 
+#include <factory/XmlDataFactory.hpp>
+
 namespace TCLAP {
 
 template < class T, class U >
diff --git a/aql2/src/prompt/Prompt.cpp b/aql2/src/prompt/Prompt.cpp
index 144bdfc8323e9673230f85029f5480d1bccb41fc..5a4507b9bad0751264f728f99518b02e66e49053 100644
--- a/aql2/src/prompt/Prompt.cpp
+++ b/aql2/src/prompt/Prompt.cpp
@@ -17,6 +17,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 char * Prompt::stripwhite ( char * begin ) {
 	while ( isspace ( * begin ) )
 		++ begin;
diff --git a/aquery2/src/aquery.cpp b/aquery2/src/aquery.cpp
index 5dec9ad18a061ec239e388c809d4edd32608c644..ca1733ebfd7aa4b9aa3188c633d0e82fa3fb9b11 100644
--- a/aquery2/src/aquery.cpp
+++ b/aquery2/src/aquery.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/arand2/src/arand.cpp b/arand2/src/arand.cpp
index 039b02d4432e171d35ea8e0af251ec278005e359..810466a114476adc4984b6bf46b6e4b6af96b947 100644
--- a/arand2/src/arand.cpp
+++ b/arand2/src/arand.cpp
@@ -14,6 +14,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/arename2/src/arename.cpp b/arename2/src/arename.cpp
index 18384e979d22c8ac3d447541d8635bb2cfc9ce8d..29da8c7f1d01a825331fd6dad8b8ce0d7bf62f2f 100644
--- a/arename2/src/arename.cpp
+++ b/arename2/src/arename.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * * argv ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/areverse2/src/areverse.cpp b/areverse2/src/areverse.cpp
index d2f39fe7c55fca2f17642bb449aff542a6d1987b..9d3249e0ac750c517652758afc9757932cdf3016 100644
--- a/areverse2/src/areverse.cpp
+++ b/areverse2/src/areverse.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char** argv) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/arun2/src/arun.cpp b/arun2/src/arun.cpp
index 2b2d7f24be3a9156a6e9e5ae7f4241e78ae6a115..be4785f26027c1da063a4e0f80d975955ea75717 100644
--- a/arun2/src/arun.cpp
+++ b/arun2/src/arun.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main(int argc, char* argv[]) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/astringology2/src/astringology.cpp b/astringology2/src/astringology.cpp
index 7e9ff82c57574dd1305d00b8bff679335bccf045..4a05c94f1c1edb972c4d6cb7cae11568d920932c 100644
--- a/astringology2/src/astringology.cpp
+++ b/astringology2/src/astringology.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 int main ( int argc, char * argv[] ) {
 	try {
 		common::GlobalData::argc = argc;
diff --git a/atrim2/src/atrim.cpp b/atrim2/src/atrim.cpp
index 694eb4d140fea65f3afe913dbf1d5e264638449a..29c65c1e20e78c575c51ee0494c395079cf48769 100644
--- a/atrim2/src/atrim.cpp
+++ b/atrim2/src/atrim.cpp
@@ -13,6 +13,8 @@
 #include <lexer/Lexer.h>
 #include <parser/Parser.h>
 
+#include <factory/XmlDataFactory.hpp>
+
 std::string trimGrammar ( bool del_unreachable, bool del_unproductive ) {
 	if( del_unreachable && del_unproductive )
 		return "execute grammar::simplify::Trim $input > $output";