diff --git a/alib2algo/src/measurements/MeasurementEngine.cpp b/alib2algo/src/measurements/MeasurementEngine.cpp
index 9b9dd2f53a3c3c0d8f77c9d75edf830393a39b7c..c805f779834a2c550d35354961644ad11913463e 100644
--- a/alib2algo/src/measurements/MeasurementEngine.cpp
+++ b/alib2algo/src/measurements/MeasurementEngine.cpp
@@ -2,7 +2,6 @@
  * Author: Radovan Cerveny
  */
 
-#include <iostream>
 #include "MeasurementEngine.hpp"
 
 namespace measurements {
@@ -38,6 +37,8 @@ void MeasurementEngine::pop_measurement_frame ( ) {
 }
 
 void MeasurementEngine::memory_hint ( MemoryHint mh ) {
+	if ( ( frame_idx_stack.size ( ) == 0 ) || ( frames[frame_idx_stack.back ( )].type == measurements::Type::ROOT ) ) return;
+
 	MemoryDataFrame::hint ( frame_idx_stack.back ( ), frames, std::move ( mh ) );
 }
 
diff --git a/alib2algo/src/measurements/MeasurementNew.cpp b/alib2algo/src/measurements/MeasurementNew.cpp
index dc0ca509cb66e32745d2df7e76ffc79dc4176382..c1c24dbf352ef8179b19c24e7df16b4e03354d73 100644
--- a/alib2algo/src/measurements/MeasurementNew.cpp
+++ b/alib2algo/src/measurements/MeasurementNew.cpp
@@ -4,14 +4,26 @@
 
 #include <cstdlib>
 #include <new>
+#include "measurements.hpp"
 
 void * operator new( std::size_t n ) {
 	void * ptr = nullptr;
 
 	for ( ; ; ) {
-		ptr = std::malloc ( n );
+		 // allocate little more for extra info
+		ptr = std::malloc ( n + sizeof ( std::size_t ) );
 
-		if ( ptr != nullptr ) return ptr;
+		if ( ptr != nullptr ) {
+			 // store requested size before the block
+			std::size_t * sptr = static_cast < std::size_t * > ( ptr );
+			* sptr = n;
+			sptr++;
+
+			 // send it to the engine
+			measurements::memory_hint ( { measurements::MemoryHint::Type::NEW, n } );
+
+			return static_cast < void * > ( sptr );
+		}
 
 		auto cur_handler = std::set_new_handler ( 0 );
 		std::set_new_handler ( cur_handler );
@@ -23,6 +35,14 @@ void * operator new( std::size_t n ) {
 	}
 }
 
-void operator delete( void * p ) noexcept {
-	std::free ( p );
+void operator delete( void * ptr ) noexcept {
+
+	std::size_t * sptr = static_cast < std::size_t * > ( ptr );
+
+	sptr--;
+
+	 // read the block size and send it to the engine
+	measurements::memory_hint ( { measurements::MemoryHint::Type::DELETE, * sptr } );
+
+	std::free ( sptr );
 }
diff --git a/alib2algo/src/measurements/MemoryDataFrame.cpp b/alib2algo/src/measurements/MemoryDataFrame.cpp
index dab0cf0404c372c79d5c974e7056858d8176c686..d45f20f861db57b6aa7ae327271c56e3252a264b 100644
--- a/alib2algo/src/measurements/MemoryDataFrame.cpp
+++ b/alib2algo/src/measurements/MemoryDataFrame.cpp
@@ -12,17 +12,21 @@ void MemoryDataFrame::init ( unsigned frame_idx, std::vector < MeasurementFrame
 	MeasurementFrame & current_frame = frames[frame_idx];
 	MeasurementFrame & parent_frame	 = frames[current_frame.parent_idx];
 
-	current_frame.memory.start_heap_usage = current_frame.memory.current_heap_usage = parent_frame.memory.current_heap_usage;
+	current_frame.memory.start_heap_usage = parent_frame.memory.current_heap_usage;
+	current_frame.memory.current_heap_usage = parent_frame.memory.current_heap_usage;
+	current_frame.memory.high_watermark = parent_frame.memory.current_heap_usage;
 }
 
 void MemoryDataFrame::update ( unsigned frame_idx, std::vector < MeasurementFrame > & frames ) {
 	MeasurementFrame & current_frame = frames[frame_idx];
 	MeasurementFrame & parent_frame	 = frames[current_frame.parent_idx];
 
-	parent_frame.memory.current_heap_usage = current_frame.memory.end_heap_usage = current_frame.memory.current_heap_usage;
+	parent_frame.memory.current_heap_usage = current_frame.memory.current_heap_usage;
+	current_frame.memory.end_heap_usage = current_frame.memory.current_heap_usage;
 }
 
 void MemoryDataFrame::hint ( unsigned frame_idx, std::vector < MeasurementFrame > & frames, MemoryHint hint ) {
+
 	MeasurementFrame & current_frame = frames[frame_idx];
 
 	switch ( hint.type ) {
@@ -40,7 +44,7 @@ void MemoryDataFrame::hint ( unsigned frame_idx, std::vector < MeasurementFrame
 std::string MemoryDataFrame::to_string ( ) {
 	std::stringstream ss;
 
-	ss << start_heap_usage << ", " << end_heap_usage << ", " << high_watermark;
+	ss << start_heap_usage << "shu, " << end_heap_usage << "ehu, " << high_watermark << "hw";
 	return ss.str ( );
 }