diff --git a/alib2algo/src/measurements/Measurements.cpp b/alib2algo/src/measurements/Measurements.cpp
index 43f776a541cfa6dc44b347d6481c2ae5d3635913..29bb56e0d98a9ccb08b45a90d2190d39815c23a0 100644
--- a/alib2algo/src/measurements/Measurements.cpp
+++ b/alib2algo/src/measurements/Measurements.cpp
@@ -5,6 +5,7 @@
 #include "MeasurementTypes.hpp"
 #include "Measurements.hpp"
 #include "TimeMeasurementEngine.hpp"
+#include "MemoryMeasurementEngine.hpp"
 
 namespace measurements {
 
@@ -15,6 +16,7 @@ Measurements Measurements::INSTANCE;
  */
 Measurements::Measurements ( ) {
 	measurement_engines.emplace_back ( measurements::make_unique < TimeMeasurementEngine > ( ) );
+	measurement_engines.emplace_back ( measurements::make_unique < MemoryMeasurementEngine > ( ) );
 }
 
 /**
diff --git a/alib2algo/src/measurements/MemoryMeasurementEngine.cpp b/alib2algo/src/measurements/MemoryMeasurementEngine.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..eca8859da8e1fe5774d653bc9c699e89c4f669db
--- /dev/null
+++ b/alib2algo/src/measurements/MemoryMeasurementEngine.cpp
@@ -0,0 +1,58 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#include <iostream>
+#include "MemoryMeasurementEngine.hpp"
+
+namespace measurements {
+
+void MemoryMeasurementEngine::push_measurement_frame ( std::string frame_name, measurements::Type frame_type ) {
+	MemoryMeasurementFrame mmf = { std::move ( frame_name ), frame_type, std::vector < unsigned > ( ), 0, 0 };
+
+	frames.emplace_back ( std::move ( mmf ) );
+}
+
+void MemoryMeasurementEngine::pop_measurement_frame ( ) {
+	MemoryMeasurementFrame current_frame = std::move ( frames.back ( ) );
+
+	frames.pop_back ( );
+
+	// current_frame.duration = duration_cast < microseconds > ( high_resolution_clock::now ( ) - current_frame.start );
+	// current_frame.real_duration += current_frame.duration;
+
+	unsigned idx = results.size ( );
+
+	if ( !frames.empty ( ) ) {
+		MemoryMeasurementFrame & parent_frame = frames.back ( );
+		parent_frame.sub_frames.push_back ( idx );
+
+		// parent_frame.real_duration -= current_frame.duration;
+	}
+
+	results.emplace_back ( std::move ( current_frame ) );
+}
+
+void MemoryMeasurementEngine::print_as_list ( std::ostream & os ) {
+	print_as_list ( os, results.size ( ) - 1 );
+	os << std::endl;
+}
+
+void MemoryMeasurementEngine::print_as_list ( std::ostream & os, unsigned idx ) {
+	MemoryMeasurementFrame & mmf = results[idx];
+
+	if ( idx != results.size ( ) - 1 ) os << ", ";
+
+	os << std::make_tuple ( idx, mmf.frame_name, ( unsigned ) mmf.frame_type, mmf.current_heap_usage, mmf.high_watermark, mmf.sub_frames );
+
+	for ( unsigned sub_idx : mmf.sub_frames )
+		print_as_list ( os, sub_idx );
+}
+
+void MemoryMeasurementEngine::print_as_tree ( std::ostream & ) {
+}
+
+void MemoryMeasurementEngine::print_as_xml ( std::ostream & ) {
+}
+
+}
diff --git a/alib2algo/src/measurements/MemoryMeasurementEngine.hpp b/alib2algo/src/measurements/MemoryMeasurementEngine.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..7522db82aa8c6ec598df790084433e4342025e2d
--- /dev/null
+++ b/alib2algo/src/measurements/MemoryMeasurementEngine.hpp
@@ -0,0 +1,42 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#ifndef MEMORY_MEASUREMENT_ENGINE_HPP_
+#define MEMORY_MEASUREMENT_ENGINE_HPP_
+
+#include <string>
+#include <vector>
+#include <ostream>
+#include "MeasurementEngine.hpp"
+
+namespace measurements {
+
+struct MemoryMeasurementFrame {
+	std::string				 frame_name;
+	measurements::Type		 frame_type;
+	std::vector < unsigned > sub_frames;
+
+	unsigned current_heap_usage;
+	unsigned high_watermark;
+};
+
+class MemoryMeasurementEngine : public MeasurementEngine {
+private:
+	std::vector < MemoryMeasurementFrame > frames;
+	std::vector < MemoryMeasurementFrame > results;
+
+	void print_as_list ( std::ostream &, unsigned );
+
+public:
+	void push_measurement_frame ( std::string, measurements::Type );
+	void pop_measurement_frame ( );
+
+	void print_as_list ( std::ostream & );
+	void print_as_tree ( std::ostream & );
+	void print_as_xml ( std::ostream & );
+};
+
+}
+
+#endif /* MEMORY_MEASUREMENT_ENGINE_HPP_ */