diff --git a/alib2algo/src/measurements/MeasurementEngine.hpp b/alib2algo/src/measurements/MeasurementEngine.hpp
index 465134ef214c2c9feea1d7dd068d4dc0669324e2..85961b7eca5d1aab6dbafdff3390221549880975 100644
--- a/alib2algo/src/measurements/MeasurementEngine.hpp
+++ b/alib2algo/src/measurements/MeasurementEngine.hpp
@@ -5,11 +5,13 @@
 #ifndef MEASUREMENT_ENGINE_HPP_
 #define MEASUREMENT_ENGINE_HPP_
 
+#include "MeasurementTypes.hpp"
+
 namespace measurements {
 
 class MeasurementEngine {
 public:
-	virtual void push_measurement_frame ( std::string, unsigned ) = 0;
+	virtual void push_measurement_frame ( std::string, measurements::Type ) = 0;
 	virtual void pop_measurement_frame ( ) = 0;
 	virtual void get_results ( ) = 0;
 	virtual ~MeasurementEngine ( ) = default;
diff --git a/alib2algo/src/measurements/MeasurementTypes.hpp b/alib2algo/src/measurements/MeasurementTypes.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..a1332e8665cc276196570aac2a526035282a5e76
--- /dev/null
+++ b/alib2algo/src/measurements/MeasurementTypes.hpp
@@ -0,0 +1,16 @@
+/*
+ * Author: Radovan Cerveny
+ */
+
+#ifndef MEASUREMENT_TYPES_HPP_
+#define MEASUREMENT_TYPES_HPP_
+
+namespace measurements {
+
+enum Type {
+	OVERALL = 1, INIT = 2, FINALIZE = 4, MAIN = 8, AUXILIARY = 16
+};
+
+}
+
+#endif /* MEASUREMENT_TYPES_HPP_ */
diff --git a/alib2algo/src/measurements/Measurements.cpp b/alib2algo/src/measurements/Measurements.cpp
index a79021958f9c0d38a1f672077d48d6b6c2039a89..c0cdd8012ee1d589772f0bcf4ee57f725e815a5f 100644
--- a/alib2algo/src/measurements/Measurements.cpp
+++ b/alib2algo/src/measurements/Measurements.cpp
@@ -2,6 +2,7 @@
  * Author: Radovan Cerveny
  */
 
+#include "MeasurementTypes.hpp"
 #include "Measurements.hpp"
 #include "TimeMeasurementEngine.hpp"
 
@@ -26,7 +27,7 @@ Measurements::~Measurements ( ) {
  * creates new block on top of the measurements stack
  * @param block_name
  */
-void Measurements::start ( std::string block_name, unsigned type ) {
+void Measurements::start ( std::string block_name, measurements::Type type ) {
 	for ( auto me : INSTANCE.measurement_engines )
 		me->push_measurement_frame ( block_name, type );
 }
diff --git a/alib2algo/src/measurements/Measurements.hpp b/alib2algo/src/measurements/Measurements.hpp
index 38e35dbccb69a59bac49f7913bfb7fa71be46c2e..05b3761ededc56d8e2fbfb022b4dd4427c13274a 100644
--- a/alib2algo/src/measurements/Measurements.hpp
+++ b/alib2algo/src/measurements/Measurements.hpp
@@ -7,8 +7,10 @@
 
 #include <string>
 #include <vector>
+#include "MeasurementTypes.hpp"
 #include "MeasurementEngine.hpp"
 
+
 namespace measurements {
 
 class Measurements {
@@ -22,7 +24,7 @@ private:
 	static Measurements INSTANCE;
 
 public:
-	static void start ( std::string, unsigned );
+	static void start ( std::string, measurements::Type );
 	static void end ( );
 	static void print ( );
 };
diff --git a/alib2algo/src/measurements/TimeMeasurementEngine.cpp b/alib2algo/src/measurements/TimeMeasurementEngine.cpp
index 19bded5ad90ea4723a90e550c41988d3d7ee44bf..212db55b33570408b9f19e4dd97a9defa26ea3b2 100644
--- a/alib2algo/src/measurements/TimeMeasurementEngine.cpp
+++ b/alib2algo/src/measurements/TimeMeasurementEngine.cpp
@@ -9,8 +9,8 @@ using namespace std::chrono;
 
 namespace measurements {
 
-void TimeMeasurementEngine::push_measurement_frame ( std::string frame_name, unsigned frame_type ) {
-	TimeMeasurementFrame tmf = { std::move ( frame_name ), frame_type, std::vector < unsigned > ( ), system_clock::now ( ), microseconds ( 0 ), microseconds ( 0 ) };
+void TimeMeasurementEngine::push_measurement_frame ( std::string frame_name, measurements::Type frame_type ) {
+	TimeMeasurementFrame tmf = { std::move ( frame_name ), frame_type, std::vector < unsigned > ( ), high_resolution_clock::now ( ), microseconds ( 0 ), microseconds ( 0 ) };
 
 	frames.emplace_back ( std::move ( tmf ) );
 }
@@ -20,7 +20,7 @@ void TimeMeasurementEngine::pop_measurement_frame ( ) {
 
 	frames.pop_back ( );
 
-	current_frame.duration = duration_cast < microseconds > ( system_clock::now ( ) - current_frame.start );
+	current_frame.duration = duration_cast < microseconds > ( high_resolution_clock::now ( ) - current_frame.start );
 	current_frame.real_duration += current_frame.duration;
 
 	unsigned idx = results.size ( );
@@ -38,6 +38,7 @@ void TimeMeasurementEngine::get_results ( ) {
 	for ( auto frame : results ) {
 		std::cout << frame.frame_name << std::endl;
 		std::cout << frame.duration << ' ' << frame.real_duration << std::endl;
+
 		for ( unsigned idx : frame.sub_frames )
 			std::cout << idx << ' ';
 
diff --git a/alib2algo/src/measurements/TimeMeasurementEngine.hpp b/alib2algo/src/measurements/TimeMeasurementEngine.hpp
index 0d3dd585af7210a6651274209035ffd2fc4009c6..f15e9bda1c7be670eeb2b930c43ed2bc10b13889 100644
--- a/alib2algo/src/measurements/TimeMeasurementEngine.hpp
+++ b/alib2algo/src/measurements/TimeMeasurementEngine.hpp
@@ -14,12 +14,12 @@ namespace measurements {
 
 struct TimeMeasurementFrame {
 	std::string				 frame_name;
-	unsigned				 frame_type;
+	measurements::Type		 frame_type;
 	std::vector < unsigned > sub_frames;
 
-	std::chrono::time_point < std::chrono::system_clock > start;
-	std::chrono::microseconds							  duration;
-	std::chrono::microseconds							  real_duration;
+	std::chrono::time_point < std::chrono::high_resolution_clock > start;
+	std::chrono::microseconds									   duration;
+	std::chrono::microseconds									   real_duration;
 };
 
 class TimeMeasurementEngine : public MeasurementEngine {
@@ -28,7 +28,7 @@ private:
 	std::vector < TimeMeasurementFrame > results;
 
 public:
-	void push_measurement_frame ( std::string, unsigned );
+	void push_measurement_frame ( std::string, measurements::Type );
 	void pop_measurement_frame ( );
 	void get_results ( );
 };
diff --git a/alib2algo/test-src/measurements/MeasurementsTest.cpp b/alib2algo/test-src/measurements/MeasurementsTest.cpp
index b19efe1ed29fe281918fa1494d414844e57dbb90..6bbc1c540d8107462d92c9a5c2935deb8c2190f9 100644
--- a/alib2algo/test-src/measurements/MeasurementsTest.cpp
+++ b/alib2algo/test-src/measurements/MeasurementsTest.cpp
@@ -13,16 +13,28 @@ void MeasurementsTest::tearDown ( ) {
 }
 
 void MeasurementsTest::testMeasurements ( ) {
-
-	measurements::Measurements::start ( "test", 0 );
-	std::this_thread::sleep_for ( std::chrono::milliseconds ( 100 ) );
-
-		measurements::Measurements::start ( "test2", 0 );
+	measurements::Measurements::start ( "global", measurements::Type::OVERALL );
+		measurements::Measurements::start ( "init", measurements::Type::INIT );
 		std::this_thread::sleep_for ( std::chrono::milliseconds ( 100 ) );
 		measurements::Measurements::end ( );
-
-	std::this_thread::sleep_for ( std::chrono::milliseconds ( 50 ) );
+		measurements::Measurements::start ( "main", measurements::Type::MAIN );
+			std::this_thread::sleep_for ( std::chrono::milliseconds ( 20 ) );
+			measurements::Measurements::start ( "aux", measurements::Type::AUXILIARY );
+				std::this_thread::sleep_for ( std::chrono::milliseconds ( 40 ) );
+			measurements::Measurements::end ( );
+			std::this_thread::sleep_for ( std::chrono::milliseconds ( 80 ) );
+			measurements::Measurements::start ( "aux", measurements::Type::AUXILIARY );
+				std::this_thread::sleep_for ( std::chrono::milliseconds ( 40 ) );
+			measurements::Measurements::end ( );
+			std::this_thread::sleep_for ( std::chrono::milliseconds ( 80 ) );
+		measurements::Measurements::end ( );
+		measurements::Measurements::start ( "fin", measurements::Type::FINALIZE );
+			std::this_thread::sleep_for ( std::chrono::milliseconds ( 30 ) );
+			measurements::Measurements::start ( "aux", measurements::Type::AUXILIARY );
+				std::this_thread::sleep_for ( std::chrono::milliseconds ( 40 ) );
+			measurements::Measurements::end ( );
+			std::this_thread::sleep_for ( std::chrono::milliseconds ( 80 ) );
+		measurements::Measurements::end ( );
 	measurements::Measurements::end ( );
-
 	measurements::Measurements::print ( );
 }