diff --git a/alib2algo/src/measurements/MeasurementFrame.cpp b/alib2algo/src/measurements/MeasurementFrame.cpp
index 248034122f81850f19d1e19f3df196768f1a8d12..042ed6b06ee58a7a3aea3010165ed20d143f5535 100644
--- a/alib2algo/src/measurements/MeasurementFrame.cpp
+++ b/alib2algo/src/measurements/MeasurementFrame.cpp
@@ -10,22 +10,26 @@ namespace measurements {
 MeasurementFrame::MeasurementFrame ( measurements::stealth_string name, measurements::Type type, unsigned parent_idx ) : name ( std::move ( name ) ), type ( type ), parent_idx ( parent_idx ), time ( ), memory ( ) {
 }
 
-void MeasurementFrame::to_xml_tokens ( std::deque < sax::Token > & tokens, const measurements::stealth_vector < MeasurementFrame > & frames ) const {
+void MeasurementFrame::xml_tokens ( std::deque < sax::Token > & tokens, unsigned idx, const measurements::stealth_vector < MeasurementFrame > & frames ) {
+	const MeasurementFrame & frame = frames[idx];
+
 	tokens.emplace_back ( "MeasurementFrame", sax::Token::TokenType::START_ELEMENT );
 	tokens.emplace_back ( "Name", sax::Token::TokenType::START_ELEMENT );
-	tokens.emplace_back ( measurements::to_string ( name ), sax::Token::TokenType::CHARACTER );
+	tokens.emplace_back ( measurements::to_string ( frame.name ), sax::Token::TokenType::CHARACTER );
 	tokens.emplace_back ( "Name", sax::Token::TokenType::END_ELEMENT );
 	tokens.emplace_back ( "Type", sax::Token::TokenType::START_ELEMENT );
-	tokens.emplace_back ( measurements::to_string ( type ), sax::Token::TokenType::CHARACTER );
+	tokens.emplace_back ( measurements::to_string ( frame.type ), sax::Token::TokenType::CHARACTER );
 	tokens.emplace_back ( "Type", sax::Token::TokenType::END_ELEMENT );
 
-	time.to_xml_tokens ( tokens );
-	memory.to_xml_tokens ( tokens );
+	if ( frame.type != measurements::Type::ROOT ) {
+		TimeDataFrame::xml_tokens ( tokens, idx, frames );
+		MemoryDataFrame::xml_tokens ( tokens, idx, frames );
+	}
 
 	tokens.emplace_back ( "SubFrames", sax::Token::TokenType::START_ELEMENT );
 
-	for ( unsigned sub_idx : sub_idxs )
-		frames[sub_idx].to_xml_tokens ( tokens, frames );
+	for ( unsigned sub_idx : frame.sub_idxs )
+		xml_tokens ( tokens, sub_idx, frames );
 
 	tokens.emplace_back ( "SubFrames", sax::Token::TokenType::END_ELEMENT );
 
diff --git a/alib2algo/src/measurements/MeasurementFrames.hpp b/alib2algo/src/measurements/MeasurementFrames.hpp
index 9112432a894f9aff3ec999b0a4bcfde81f2cc108..40c869fe1eb44f1273fa24fc3e649dcaa0931ee1 100644
--- a/alib2algo/src/measurements/MeasurementFrames.hpp
+++ b/alib2algo/src/measurements/MeasurementFrames.hpp
@@ -31,11 +31,10 @@ struct MemoryDataFrame {
 
 	size_t current_heap_usage;
 
-	void to_xml_tokens ( std::deque < sax::Token > & ) const;
-
 	static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
 	static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
 	static void hint ( unsigned, measurements::stealth_vector < MeasurementFrame > &, MemoryHint );
+	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
 };
 
 std::ostream & operator <<( std::ostream &, const MemoryDataFrame & );
@@ -46,10 +45,9 @@ struct TimeDataFrame {
 	std::chrono::microseconds duration;
 	std::chrono::microseconds real_duration;
 
-	void to_xml_tokens ( std::deque < sax::Token > & ) const;
-
 	static void init ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
 	static void update ( unsigned, measurements::stealth_vector < MeasurementFrame > & );
+	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
 };
 
 std::ostream & operator <<( std::ostream &, const TimeDataFrame & );
@@ -64,9 +62,8 @@ struct MeasurementFrame {
 	TimeDataFrame	time;
 	MemoryDataFrame memory;
 
-	void to_xml_tokens ( std::deque < sax::Token > &, const measurements::stealth_vector < MeasurementFrame > & ) const;
-
 	MeasurementFrame ( measurements::stealth_string, measurements::Type, unsigned );
+	static void xml_tokens ( std::deque < sax::Token > &, unsigned, const measurements::stealth_vector < MeasurementFrame > & );
 };
 
 std::ostream & operator <<( std::ostream &, const MeasurementFrame & );
diff --git a/alib2algo/src/measurements/MeasurementResults.cpp b/alib2algo/src/measurements/MeasurementResults.cpp
index 347538dea7158485212978f94cdf6cc8e405d563..01ea0d03e5c8fe2710506ec94b5cc5705abc261f 100644
--- a/alib2algo/src/measurements/MeasurementResults.cpp
+++ b/alib2algo/src/measurements/MeasurementResults.cpp
@@ -8,14 +8,13 @@ namespace measurements {
 MeasurementResults::MeasurementResults ( const measurements::stealth_vector < MeasurementFrame > & frames ) : frames ( frames ) {
 }
 
-std::deque < sax::Token > MeasurementResults::to_xml_tokens ( ) const {
+std::deque < sax::Token > MeasurementResults::xml_tokens ( ) const {
 	std::deque < sax::Token > tokens;
 
 	tokens.emplace_back ( "MeasurementResults", sax::Token::TokenType::START_ELEMENT );
 
-	for(unsigned sub_idx : frames[0].sub_idxs) {
-		frames[sub_idx].to_xml_tokens ( tokens, frames );
-	}
+	MeasurementFrame::xml_tokens ( tokens, 0, frames );
+
 	tokens.emplace_back ( "MeasurementResults", sax::Token::TokenType::END_ELEMENT );
 	return tokens;
 }
diff --git a/alib2algo/src/measurements/MeasurementResults.hpp b/alib2algo/src/measurements/MeasurementResults.hpp
index ef38fcc1936d195149d612aa1bf328cc07fb3911..4a7dd5f4509402e9b929e92017264591ad8de909 100644
--- a/alib2algo/src/measurements/MeasurementResults.hpp
+++ b/alib2algo/src/measurements/MeasurementResults.hpp
@@ -20,7 +20,7 @@ struct MeasurementResults {
 	void print_as_list ( std::ostream & ) const;
 	void print_as_tree ( std::ostream & ) const;
 
-	std::deque < sax::Token > to_xml_tokens ( ) const;
+	std::deque < sax::Token > xml_tokens ( ) const;
 
 private:
 	void print_as_list ( std::ostream &, unsigned ) const;
diff --git a/alib2algo/src/measurements/MemoryDataFrame.cpp b/alib2algo/src/measurements/MemoryDataFrame.cpp
index 5a0659dce2e9b865ccd3cdedac845bcba481f921..b15685a496995421dc8b198710a1b74542529d00 100644
--- a/alib2algo/src/measurements/MemoryDataFrame.cpp
+++ b/alib2algo/src/measurements/MemoryDataFrame.cpp
@@ -52,16 +52,18 @@ void MemoryDataFrame::hint ( unsigned frame_idx, measurements::stealth_vector <
 	}
 }
 
-void MemoryDataFrame::to_xml_tokens ( std::deque < sax::Token > & tokens ) const {
+void MemoryDataFrame::xml_tokens ( std::deque < sax::Token > & tokens, unsigned idx, const measurements::stealth_vector < MeasurementFrame > & frames ) {
+	const MemoryDataFrame & frame = frames[idx].memory;
+
 	tokens.emplace_back ( "MemoryData", sax::Token::TokenType::START_ELEMENT );
 	tokens.emplace_back ( "StartHeapUsage", sax::Token::TokenType::START_ELEMENT );
-	tokens.emplace_back ( std::to_string ( start_heap_usage ), sax::Token::TokenType::CHARACTER );
+	tokens.emplace_back ( std::to_string ( frame.start_heap_usage ), sax::Token::TokenType::CHARACTER );
 	tokens.emplace_back ( "StartHeapUsage", sax::Token::TokenType::END_ELEMENT );
 	tokens.emplace_back ( "EndHeapUsage", sax::Token::TokenType::START_ELEMENT );
-	tokens.emplace_back ( std::to_string ( end_heap_usage ), sax::Token::TokenType::CHARACTER );
+	tokens.emplace_back ( std::to_string ( frame.end_heap_usage ), sax::Token::TokenType::CHARACTER );
 	tokens.emplace_back ( "EndHeapUsage", sax::Token::TokenType::END_ELEMENT );
 	tokens.emplace_back ( "HighWatermark", sax::Token::TokenType::START_ELEMENT );
-	tokens.emplace_back ( std::to_string ( high_watermark ), sax::Token::TokenType::CHARACTER );
+	tokens.emplace_back ( std::to_string ( frame.high_watermark ), sax::Token::TokenType::CHARACTER );
 	tokens.emplace_back ( "HighWatermark", sax::Token::TokenType::END_ELEMENT );
 	tokens.emplace_back ( "MemoryData", sax::Token::TokenType::END_ELEMENT );
 }
diff --git a/alib2algo/src/measurements/TimeDataFrame.cpp b/alib2algo/src/measurements/TimeDataFrame.cpp
index cc448d34ef335c1ef5d9d9c1585d8e26a14aaa52..6965d96b760fee294c26460e9162661d092ab2af 100644
--- a/alib2algo/src/measurements/TimeDataFrame.cpp
+++ b/alib2algo/src/measurements/TimeDataFrame.cpp
@@ -26,13 +26,15 @@ void TimeDataFrame::update ( unsigned frame_idx, measurements::stealth_vector <
 	parent_frame.time.real_duration -= current_frame.time.duration;
 }
 
-void TimeDataFrame::to_xml_tokens ( std::deque < sax::Token > & tokens ) const {
+void TimeDataFrame::xml_tokens ( std::deque < sax::Token > & tokens, unsigned idx, const measurements::stealth_vector < MeasurementFrame > & frames ) {
+	const TimeDataFrame & frame = frames[idx].time;
+
 	tokens.emplace_back ( "TimeData", sax::Token::TokenType::START_ELEMENT );
 	tokens.emplace_back ( "Duration", sax::Token::TokenType::START_ELEMENT );
-	tokens.emplace_back ( std::to_string ( duration.count ( ) ), sax::Token::TokenType::CHARACTER );
+	tokens.emplace_back ( std::to_string ( frame.duration.count ( ) ), sax::Token::TokenType::CHARACTER );
 	tokens.emplace_back ( "Duration", sax::Token::TokenType::END_ELEMENT );
 	tokens.emplace_back ( "RealDuration", sax::Token::TokenType::START_ELEMENT );
-	tokens.emplace_back ( std::to_string ( real_duration.count ( ) ), sax::Token::TokenType::CHARACTER );
+	tokens.emplace_back ( std::to_string ( frame.real_duration.count ( ) ), sax::Token::TokenType::CHARACTER );
 	tokens.emplace_back ( "RealDuration", sax::Token::TokenType::END_ELEMENT );
 	tokens.emplace_back ( "TimeData", sax::Token::TokenType::END_ELEMENT );
 }
diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp
index b9e805c9a061607d80e0c135b84da1709f929575..9bc30fc45ea4951ca9eb5090c3117e7d52d3cc55 100644
--- a/alib2algo/test-src/measurements/MeasurementsTest.cpp
+++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp
@@ -60,7 +60,7 @@ void MeasurementsTest::testTimeMeasurements ( ) {
 
 	std::cout << measurements::results ( ) << std::endl;
 
-	sax::SaxComposeInterface::printStdout ( measurements::results ( ).to_xml_tokens ( ) );
+	sax::SaxComposeInterface::printStdout ( measurements::results ( ).xml_tokens ( ) );
 }
 
 void MeasurementsTest::testMemoryMeasurements ( ) {
@@ -82,5 +82,5 @@ void MeasurementsTest::testMemoryMeasurements ( ) {
 
 	std::cout << measurements::results ( ) << std::endl;
 
-	sax::SaxComposeInterface::printStdout ( measurements::results ( ).to_xml_tokens ( ) );
+	sax::SaxComposeInterface::printStdout ( measurements::results ( ).xml_tokens ( ) );
 }