diff --git a/ameasure2/src/ameasure.cpp b/ameasure2/src/ameasure.cpp
index 092a51eeb5fa4556bef70e9c31f717d31c6f7770..3bae884909cd12b021ddc21929b979c03b208f0a 100644
--- a/ameasure2/src/ameasure.cpp
+++ b/ameasure2/src/ameasure.cpp
@@ -4,6 +4,7 @@
 
 #include <tclap/CmdLine.h>
 #include "factory/XmlDataFactory.hpp"
+#include "provisioner/MeasurementProvisionerXmlFactory.hpp"
 #include "provisioner/MeasurementProvisioner.hpp"
 
 int main ( int argc, char * * argv ) {
@@ -23,10 +24,11 @@ int main ( int argc, char * * argv ) {
 		else
 			sax::SaxParseInterface::parseFile ( input.getValue ( ), tokens );
 
-		auto configuration = provisioner::MeasurementProvisioner::parse_configuration ( tokens );
-		auto results = provisioner::MeasurementProvisioner::run_configuration ( configuration );
+		auto configuration = provisioner::MeasurementProvisionerXmlFactory::configurationFromTokens ( tokens );
+		provisioner::MeasurementProvisioner::runConfiguration ( configuration );
 
-		std::cout << results << std::endl;
+		// auto results =
+		// std::cout << results << std::endl;
 
 		return 0;
 
diff --git a/ameasure2/src/provisioner/MeasurementProvisioner.cpp b/ameasure2/src/provisioner/MeasurementProvisioner.cpp
index 9b0aba985799f4a90988fb4e36088b12024686af..a96bda47122aafee6a2bf312f9650e9e041fe608 100644
--- a/ameasure2/src/provisioner/MeasurementProvisioner.cpp
+++ b/ameasure2/src/provisioner/MeasurementProvisioner.cpp
@@ -6,13 +6,7 @@
 
 namespace provisioner {
 
-MeasurementProvisionerConfiguration MeasurementProvisioner::parse_configuration ( std::deque < sax::Token > ) {
-	MeasurementProvisionerConfiguration configuration;
-
-	return configuration;
-}
-
-MeasurementProvisionerResults MeasurementProvisioner::run_configuration ( const MeasurementProvisionerConfiguration & ) {
+MeasurementProvisionerResults MeasurementProvisioner::runConfiguration ( const MeasurementProvisionerConfiguration & ) {
 	MeasurementProvisionerResults results;
 
 	return results;
diff --git a/ameasure2/src/provisioner/MeasurementProvisioner.hpp b/ameasure2/src/provisioner/MeasurementProvisioner.hpp
index 28c9c01cc7f7b8523583e83877be3c3100ba690f..f76a3a9b9dd994a4f4a2d0153bcad07080f92de4 100644
--- a/ameasure2/src/provisioner/MeasurementProvisioner.hpp
+++ b/ameasure2/src/provisioner/MeasurementProvisioner.hpp
@@ -5,18 +5,14 @@
 #ifndef MEASUREMENT_PROVISIONER_HPP_
 #define MEASUREMENT_PROVISIONER_HPP_
 
-#include "sax/Token.h"
-#include <deque>
 #include "MeasurementProvisionerConfiguration.hpp"
 #include "MeasurementProvisionerResults.hpp"
 
 namespace provisioner {
 
 class MeasurementProvisioner {
-
 public:
-	static MeasurementProvisionerConfiguration parse_configuration ( std::deque < sax::Token > );
-	static MeasurementProvisionerResults run_configuration ( const MeasurementProvisionerConfiguration & );
+	static MeasurementProvisionerResults runConfiguration ( const MeasurementProvisionerConfiguration & );
 };
 
 }
diff --git a/ameasure2/src/provisioner/MeasurementProvisionerConfiguration.hpp b/ameasure2/src/provisioner/MeasurementProvisionerConfiguration.hpp
index 45f2b57ff63c0275dfb42c63e541548b81fa200d..497b4e2315c655ca12098f5640e802579837aad8 100644
--- a/ameasure2/src/provisioner/MeasurementProvisionerConfiguration.hpp
+++ b/ameasure2/src/provisioner/MeasurementProvisionerConfiguration.hpp
@@ -5,9 +5,27 @@
 #ifndef MEASUREMENT_PROVISIONER_CONFIGURATION_HPP_
 #define MEASUREMENT_PROVISIONER_CONFIGURATION_HPP_
 
+#include <vector>
+#include <string>
+
 namespace provisioner {
 
+struct MeasurementConfiguration {
+	std::vector < std::string > engines;
+};
+
+struct MeasurementProvision {
+	std::vector < std::string > inputDataFiles;
+	std::vector < std::string > pipeCommands;
+	MeasurementConfiguration	measurementConfiguration;
+};
+
 struct MeasurementProvisionerConfiguration {
+	std::string workingDirectory;
+	std::string binariesDirectory;
+	std::string inputDataDirectory;
+
+	std::vector < MeasurementProvision > measurementProvisions;
 };
 
 }
diff --git a/ameasure2/src/provisioner/MeasurementProvisionerXmlFactory.cpp b/ameasure2/src/provisioner/MeasurementProvisionerXmlFactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b082042a0c757ad69bfbf2d1b1b0bb172acc64fb
--- /dev/null
+++ b/ameasure2/src/provisioner/MeasurementProvisionerXmlFactory.cpp
@@ -0,0 +1,183 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#include "sax/FromXMLParserHelper.h"
+#include "MeasurementProvisionerXmlFactory.hpp"
+#include "exception/AlibException.h"
+
+using namespace std;
+using namespace sax;
+
+namespace provisioner {
+
+MeasurementProvisionerConfiguration MeasurementProvisionerXmlFactory::configurationFromTokens ( deque < Token > & tokens ) {
+	MeasurementProvisionerConfiguration configuration;
+
+	deque < Token >::iterator iter = tokens.begin ( );
+
+	if ( iter == tokens.end ( ) ) throw exception::AlibException ( "Empty tokens list" );
+
+	parseMeasurementProvisioner ( configuration, iter );
+
+	if ( iter != tokens.end ( ) ) throw exception::AlibException ( "Unexpeted tokens at the end of the xml" );
+
+	return configuration;
+}
+
+void MeasurementProvisionerXmlFactory::parseMeasurementProvisioner ( MeasurementProvisionerConfiguration & mpc, std::deque < sax::Token >::iterator & iter ) {
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, MEASUREMENT_PROVISIONER_TAG );
+
+	for ( ; ; ) {
+		if ( !FromXMLParserHelper::isTokenType ( iter, Token::TokenType::START_ELEMENT ) ) break;
+
+		string data = FromXMLParserHelper::getTokenData ( iter, Token::TokenType::START_ELEMENT );
+
+		if ( data == DIRECTORIES_TAG )
+			parseDirectories ( mpc, iter );
+		else if ( data == MEASUREMENT_PROVISIONS_TAG )
+			parseMeasurementProvisions ( mpc, iter );
+		else
+			break;
+	}
+
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, MEASUREMENT_PROVISIONER_TAG );
+}
+
+void MeasurementProvisionerXmlFactory::parseDirectories ( MeasurementProvisionerConfiguration & mpc, std::deque < sax::Token >::iterator & iter ) {
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, DIRECTORIES_TAG );
+
+	for ( ; ; ) {
+		if ( !FromXMLParserHelper::isTokenType ( iter, Token::TokenType::START_ELEMENT ) ) break;
+
+		string data = FromXMLParserHelper::getTokenData ( iter, Token::TokenType::START_ELEMENT );
+
+		if ( data == WORKING_DIRECTORY_TAG ) {
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, WORKING_DIRECTORY_TAG );
+			mpc.workingDirectory = FromXMLParserHelper::popTokenData ( iter, Token::TokenType::CHARACTER );
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, WORKING_DIRECTORY_TAG );
+		} else if ( data == BINARIES_DIRECTORY_TAG ) {
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, BINARIES_DIRECTORY_TAG );
+			mpc.workingDirectory = FromXMLParserHelper::popTokenData ( iter, Token::TokenType::CHARACTER );
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, BINARIES_DIRECTORY_TAG );
+		} else if ( data == INPUT_DATA_DIRECTORY_TAG ) {
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, INPUT_DATA_DIRECTORY_TAG );
+			mpc.workingDirectory = FromXMLParserHelper::popTokenData ( iter, Token::TokenType::CHARACTER );
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, INPUT_DATA_DIRECTORY_TAG );
+		} else {
+			break;
+		}
+	}
+
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, DIRECTORIES_TAG );
+}
+
+void MeasurementProvisionerXmlFactory::parseMeasurementProvisions ( MeasurementProvisionerConfiguration & mpc, std::deque < sax::Token >::iterator & iter ) {
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, MEASUREMENT_PROVISIONS_TAG );
+
+	for ( ; ; ) {
+		if ( !FromXMLParserHelper::isTokenType ( iter, Token::TokenType::START_ELEMENT ) ) break;
+
+		string data = FromXMLParserHelper::getTokenData ( iter, Token::TokenType::START_ELEMENT );
+
+		if ( data == MEASUREMENT_PROVISION_TAG )
+			parseMeasurementProvision ( mpc, iter );
+		else
+			break;
+	}
+
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, MEASUREMENT_PROVISIONS_TAG );
+}
+
+void MeasurementProvisionerXmlFactory::parseMeasurementProvision ( MeasurementProvisionerConfiguration & mpc, std::deque < sax::Token >::iterator & iter ) {
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, MEASUREMENT_PROVISION_TAG );
+
+	MeasurementProvision mp;
+
+	for ( ; ; ) {
+		if ( !FromXMLParserHelper::isTokenType ( iter, Token::TokenType::START_ELEMENT ) ) break;
+
+		string data = FromXMLParserHelper::getTokenData ( iter, Token::TokenType::START_ELEMENT );
+
+		if ( data == INPUT_DATA_FILES_TAG )
+			parseInputDataFiles ( mp, iter );
+		else if ( data == PIPE_COMMANDS_TAG )
+			parsePipeCommands ( mp, iter );
+		else if ( data == MEASUREMENT_CONFIGURATION_TAG )
+			parseMeasurementConfiguration ( mp, iter );
+		else
+			break;
+	}
+
+	mpc.measurementProvisions.emplace_back ( std::move ( mp ) );
+
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, MEASUREMENT_PROVISION_TAG );
+}
+
+void MeasurementProvisionerXmlFactory::parseInputDataFiles ( MeasurementProvision & mp, std::deque < sax::Token >::iterator & iter ) {
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, INPUT_DATA_FILES_TAG );
+
+	for ( ; ; ) {
+		if ( !FromXMLParserHelper::isTokenType ( iter, Token::TokenType::START_ELEMENT ) ) break;
+
+		string data = FromXMLParserHelper::getTokenData ( iter, Token::TokenType::START_ELEMENT );
+
+		if ( data == INPUT_DATA_FILE_TAG ) {
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, INPUT_DATA_FILE_TAG );
+			mp.inputDataFiles.emplace_back ( FromXMLParserHelper::popTokenData ( iter, Token::TokenType::CHARACTER ) );
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, INPUT_DATA_FILE_TAG );
+		} else {
+			break;
+		}
+	}
+
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, INPUT_DATA_FILES_TAG );
+}
+
+void MeasurementProvisionerXmlFactory::parsePipeCommands ( MeasurementProvision & mp, std::deque < sax::Token >::iterator & iter ) {
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, PIPE_COMMANDS_TAG );
+
+	for ( ; ; ) {
+		if ( !FromXMLParserHelper::isTokenType ( iter, Token::TokenType::START_ELEMENT ) ) break;
+
+		string data = FromXMLParserHelper::getTokenData ( iter, Token::TokenType::START_ELEMENT );
+
+		if ( data == PIPE_COMMAND_TAG ) {
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, PIPE_COMMAND_TAG );
+			mp.pipeCommands.emplace_back ( FromXMLParserHelper::popTokenData ( iter, Token::TokenType::CHARACTER ) );
+			FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, PIPE_COMMAND_TAG );
+		} else {
+			break;
+		}
+	}
+
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, PIPE_COMMANDS_TAG );
+}
+
+void MeasurementProvisionerXmlFactory::parseMeasurementConfiguration ( MeasurementProvision &, std::deque < sax::Token >::iterator & iter ) {
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::START_ELEMENT, MEASUREMENT_CONFIGURATION_TAG );
+
+	 // skip everything for now
+	while ( !FromXMLParserHelper::isTokenType ( iter, Token::TokenType::END_ELEMENT ) || FromXMLParserHelper::getTokenData ( iter, Token::TokenType::END_ELEMENT ) != MEASUREMENT_CONFIGURATION_TAG ) ++iter;
+
+	FromXMLParserHelper::popToken ( iter, Token::TokenType::END_ELEMENT, MEASUREMENT_CONFIGURATION_TAG );
+}
+
+string MeasurementProvisionerXmlFactory::MEASUREMENT_PROVISIONER_TAG = "MeasurementProvisioner";
+
+string MeasurementProvisionerXmlFactory::DIRECTORIES_TAG = "Directories";
+string MeasurementProvisionerXmlFactory::WORKING_DIRECTORY_TAG	= "WorkingDirectory";
+string MeasurementProvisionerXmlFactory::BINARIES_DIRECTORY_TAG = "BinariesDirectory";
+string MeasurementProvisionerXmlFactory::INPUT_DATA_DIRECTORY_TAG = "InputDataDirectory";
+
+string MeasurementProvisionerXmlFactory::MEASUREMENT_PROVISIONS_TAG = "MeasurementProvisions";
+string MeasurementProvisionerXmlFactory::MEASUREMENT_PROVISION_TAG	= "MeasurementProvision";
+
+string MeasurementProvisionerXmlFactory::INPUT_DATA_FILES_TAG = "InputDataFiles";
+string MeasurementProvisionerXmlFactory::INPUT_DATA_FILE_TAG  = "InputDataFile";
+
+string MeasurementProvisionerXmlFactory::PIPE_COMMANDS_TAG = "PipeCommands";
+string MeasurementProvisionerXmlFactory::PIPE_COMMAND_TAG  = "PipeCommand";
+
+string MeasurementProvisionerXmlFactory::MEASUREMENT_CONFIGURATION_TAG = "MeasurementConfiguration";
+}
diff --git a/ameasure2/src/provisioner/MeasurementProvisionerXmlFactory.hpp b/ameasure2/src/provisioner/MeasurementProvisionerXmlFactory.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..5402443ed62f95b41d92622cb4d063d2e98542e7
--- /dev/null
+++ b/ameasure2/src/provisioner/MeasurementProvisionerXmlFactory.hpp
@@ -0,0 +1,48 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#ifndef MEASUREMENT_PROVISIONER_XML_FACTORY_HPP_
+#define MEASUREMENT_PROVISIONER_XML_FACTORY_HPP_
+
+#include <deque>
+#include "sax/Token.h"
+#include "MeasurementProvisionerConfiguration.hpp"
+
+namespace provisioner {
+
+class MeasurementProvisionerXmlFactory {
+	static std::string MEASUREMENT_PROVISIONER_TAG;
+
+	static std::string DIRECTORIES_TAG;
+	static std::string WORKING_DIRECTORY_TAG;
+	static std::string BINARIES_DIRECTORY_TAG;
+	static std::string INPUT_DATA_DIRECTORY_TAG;
+
+	static std::string MEASUREMENT_PROVISIONS_TAG;
+	static std::string MEASUREMENT_PROVISION_TAG;
+
+	static std::string INPUT_DATA_FILES_TAG;
+	static std::string INPUT_DATA_FILE_TAG;
+
+	static std::string PIPE_COMMANDS_TAG;
+	static std::string PIPE_COMMAND_TAG;
+
+	static std::string MEASUREMENT_CONFIGURATION_TAG;
+
+	static void parseMeasurementProvisioner ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & );
+	static void parseDirectories ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & );
+	static void parseMeasurementProvisions ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & );
+
+	static void parseMeasurementProvision ( MeasurementProvisionerConfiguration &, std::deque < sax::Token >::iterator & );
+	static void parseInputDataFiles ( MeasurementProvision &, std::deque < sax::Token >::iterator & );
+	static void parsePipeCommands ( MeasurementProvision &, std::deque < sax::Token >::iterator & );
+	static void parseMeasurementConfiguration ( MeasurementProvision &, std::deque < sax::Token >::iterator & );
+
+public:
+	static MeasurementProvisionerConfiguration configurationFromTokens ( std::deque < sax::Token > & );
+};
+
+}
+
+#endif /* MEASUREMENT_PROVISIONER_XML_FACTORY_HPP_ */
diff --git a/examples2/measurements/ameasure.xml b/examples2/measurements/ameasure.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1b76c4c10a75e58c9953fb9cd3d17c80f6e1e068
--- /dev/null
+++ b/examples2/measurements/ameasure.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<MeasurementProvisioner>
+	<Directories>
+		<WorkingDirectory>~/repositories/automata-library</WorkingDirectory>
+		<BinariesDirectory>bin-debug/</BinariesDirectory>
+		<InputDataDirectory>examples2/</InputDataDirectory>
+	</Directories>
+
+	<MeasurementProvisions>
+		<MeasurementProvision>
+			<InputDataFiles>
+				<InputDataFile>../examples2/automaton/NFSM1.xml</InputDataFile>
+				<InputDataFile>../examples2/automaton/NFSM2.xml</InputDataFile>
+			</InputDataFiles>
+			<PipeCommands>
+				<PipeCommand>./adeterminize2</PipeCommand>
+				<PipeCommand>./aminimize2</PipeCommand>
+				<PipeCommand>./astat2 --automaton states -p print</PipeCommand>
+			</PipeCommands>
+			<MeasurementConfiguration>
+				<Engines>
+					<Engine>TIME</Engine>
+					<Engine>MEMORY</Engine>
+					<Engine>COUNTER</Engine>
+				</Engines>
+			</MeasurementConfiguration>
+		</MeasurementProvision>
+	</MeasurementProvisions>
+</MeasurementProvisioner>
\ No newline at end of file