diff --git a/alib2algo/src/measurements/MeasurementEngine.hpp b/alib2algo/src/measurements/MeasurementEngine.hpp
index 85961b7eca5d1aab6dbafdff3390221549880975..f9b9b815d28a953a311c1059b19d893d986c3888 100644
--- a/alib2algo/src/measurements/MeasurementEngine.hpp
+++ b/alib2algo/src/measurements/MeasurementEngine.hpp
@@ -5,6 +5,7 @@
 #ifndef MEASUREMENT_ENGINE_HPP_
 #define MEASUREMENT_ENGINE_HPP_
 
+#include <ostream>
 #include "MeasurementTypes.hpp"
 
 namespace measurements {
@@ -13,7 +14,11 @@ class MeasurementEngine {
 public:
 	virtual void push_measurement_frame ( std::string, measurements::Type ) = 0;
 	virtual void pop_measurement_frame ( ) = 0;
-	virtual void get_results ( ) = 0;
+
+	virtual void print_as_list ( std::ostream & ) = 0;
+	virtual void print_as_tree ( std::ostream & ) = 0;
+	virtual void print_as_xml ( std::ostream & )  = 0;
+
 	virtual ~MeasurementEngine ( ) = default;
 };
 
diff --git a/alib2algo/src/measurements/Measurements.cpp b/alib2algo/src/measurements/Measurements.cpp
index c0cdd8012ee1d589772f0bcf4ee57f725e815a5f..c81a45ab6fe174379209c92251a64e1748ef2c90 100644
--- a/alib2algo/src/measurements/Measurements.cpp
+++ b/alib2algo/src/measurements/Measurements.cpp
@@ -40,9 +40,9 @@ void Measurements::end ( ) {
 		me->pop_measurement_frame ( );
 }
 
-void Measurements::print ( ) {
+void Measurements::print ( std::ostream & os ) {
 	for ( auto me : INSTANCE.measurement_engines )
-		me->get_results ( );
+		me->print_as_list ( os );
 }
 
 }
diff --git a/alib2algo/src/measurements/Measurements.hpp b/alib2algo/src/measurements/Measurements.hpp
index 05b3761ededc56d8e2fbfb022b4dd4427c13274a..07b6e5885a43e4d0d7115fcc5ef0dd9bb43ce53c 100644
--- a/alib2algo/src/measurements/Measurements.hpp
+++ b/alib2algo/src/measurements/Measurements.hpp
@@ -5,12 +5,12 @@
 #ifndef MEASUREMENTS_HPP_
 #define MEASUREMENTS_HPP_
 
+#include <ostream>
 #include <string>
 #include <vector>
 #include "MeasurementTypes.hpp"
 #include "MeasurementEngine.hpp"
 
-
 namespace measurements {
 
 class Measurements {
@@ -26,7 +26,7 @@ private:
 public:
 	static void start ( std::string, measurements::Type );
 	static void end ( );
-	static void print ( );
+	static void print ( std::ostream & );
 };
 
 }
diff --git a/alib2algo/src/measurements/TimeMeasurementEngine.cpp b/alib2algo/src/measurements/TimeMeasurementEngine.cpp
index 212db55b33570408b9f19e4dd97a9defa26ea3b2..126599dfaacf277d43fcc13ef3fc5555423f2568 100644
--- a/alib2algo/src/measurements/TimeMeasurementEngine.cpp
+++ b/alib2algo/src/measurements/TimeMeasurementEngine.cpp
@@ -34,16 +34,26 @@ void TimeMeasurementEngine::pop_measurement_frame ( ) {
 	results.emplace_back ( std::move ( current_frame ) );
 }
 
-void TimeMeasurementEngine::get_results ( ) {
-	for ( auto frame : results ) {
-		std::cout << frame.frame_name << std::endl;
-		std::cout << frame.duration << ' ' << frame.real_duration << std::endl;
+void TimeMeasurementEngine::print_as_list ( std::ostream & os ) {
+	print_as_list ( os, results.size ( ) - 1 );
+	os << std::endl;
+}
 
-		for ( unsigned idx : frame.sub_frames )
-			std::cout << idx << ' ';
+void TimeMeasurementEngine::print_as_list ( std::ostream & os, unsigned idx ) {
+	TimeMeasurementFrame & tmf = results[idx];
 
-		std::cout << std::endl;
-	}
+	if ( idx != results.size ( ) - 1 ) os << ", ";
+
+	os << std::make_tuple ( idx, tmf.frame_name, ( unsigned ) tmf.frame_type, tmf.duration, tmf.real_duration, tmf.sub_frames );
+
+	for ( unsigned sub_idx : tmf.sub_frames )
+		print_as_list ( os, sub_idx );
+}
+
+void TimeMeasurementEngine::print_as_tree ( std::ostream & ) {
+}
+
+void TimeMeasurementEngine::print_as_xml ( std::ostream & ) {
 }
 
 }
diff --git a/alib2algo/src/measurements/TimeMeasurementEngine.hpp b/alib2algo/src/measurements/TimeMeasurementEngine.hpp
index f15e9bda1c7be670eeb2b930c43ed2bc10b13889..053568a1fee7b11144ee0c77744d274ab1d76678 100644
--- a/alib2algo/src/measurements/TimeMeasurementEngine.hpp
+++ b/alib2algo/src/measurements/TimeMeasurementEngine.hpp
@@ -8,6 +8,7 @@
 #include <string>
 #include <chrono>
 #include <vector>
+#include <ostream>
 #include "MeasurementEngine.hpp"
 
 namespace measurements {
@@ -27,10 +28,15 @@ private:
 	std::vector < TimeMeasurementFrame > frames;
 	std::vector < TimeMeasurementFrame > results;
 
+	void print_as_list ( std::ostream &, unsigned );
+
 public:
 	void push_measurement_frame ( std::string, measurements::Type );
 	void pop_measurement_frame ( );
-	void get_results ( );
+
+	void print_as_list ( std::ostream & );
+	void print_as_tree ( std::ostream & );
+	void print_as_xml ( std::ostream & );
 };
 
 }
diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp
index 6bbc1c540d8107462d92c9a5c2935deb8c2190f9..b42318da27b16444c6dd7c9a2b755dac02bdb0f1 100644
--- a/alib2algo/test-src/measurements/MeasurementsTest.cpp
+++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp
@@ -36,5 +36,6 @@ void MeasurementsTest::testMeasurements ( ) {
 			std::this_thread::sleep_for ( std::chrono::milliseconds ( 80 ) );
 		measurements::Measurements::end ( );
 	measurements::Measurements::end ( );
-	measurements::Measurements::print ( );
+
+	measurements::Measurements::print ( std::cout );
 }