diff --git a/alib2algo/src/measurements/MeasurementTypes.hpp b/alib2algo/src/measurements/MeasurementTypes.hpp
index a1332e8665cc276196570aac2a526035282a5e76..4b2890eb2b4c1f60021def7cb24d6d3b12d89dc3 100644
--- a/alib2algo/src/measurements/MeasurementTypes.hpp
+++ b/alib2algo/src/measurements/MeasurementTypes.hpp
@@ -5,12 +5,19 @@
 #ifndef MEASUREMENT_TYPES_HPP_
 #define MEASUREMENT_TYPES_HPP_
 
+#include <memory>
+
 namespace measurements {
 
 enum Type {
 	OVERALL = 1, INIT = 2, FINALIZE = 4, MAIN = 8, AUXILIARY = 16
 };
 
+template < typename T, typename ... Args >
+std::unique_ptr < T > make_unique ( Args && ... args ) {
+	return std::unique_ptr < T > ( new T ( std::forward < Args > ( args ) ... ) );
+}
+
 }
 
 #endif /* MEASUREMENT_TYPES_HPP_ */
diff --git a/alib2algo/src/measurements/Measurements.cpp b/alib2algo/src/measurements/Measurements.cpp
index c81a45ab6fe174379209c92251a64e1748ef2c90..43f776a541cfa6dc44b347d6481c2ae5d3635913 100644
--- a/alib2algo/src/measurements/Measurements.cpp
+++ b/alib2algo/src/measurements/Measurements.cpp
@@ -13,14 +13,8 @@ Measurements Measurements::INSTANCE;
 /**
  * constructs all available measurement engines
  */
-Measurements::Measurements ( ) : measurement_engines ( {
-		new TimeMeasurementEngine ( )
-	} ) {
-}
-
-Measurements::~Measurements ( ) {
-	for ( auto me : measurement_engines )
-		delete me;
+Measurements::Measurements ( ) {
+	measurement_engines.emplace_back ( measurements::make_unique < TimeMeasurementEngine > ( ) );
 }
 
 /**
@@ -28,7 +22,7 @@ Measurements::~Measurements ( ) {
  * @param block_name
  */
 void Measurements::start ( std::string block_name, measurements::Type type ) {
-	for ( auto me : INSTANCE.measurement_engines )
+	for ( auto & me : INSTANCE.measurement_engines )
 		me->push_measurement_frame ( block_name, type );
 }
 
@@ -36,12 +30,12 @@ void Measurements::start ( std::string block_name, measurements::Type type ) {
  * pops the block from the measurements stack
  */
 void Measurements::end ( ) {
-	for ( auto me : INSTANCE.measurement_engines )
+	for ( auto & me : INSTANCE.measurement_engines )
 		me->pop_measurement_frame ( );
 }
 
 void Measurements::print ( std::ostream & os ) {
-	for ( auto me : INSTANCE.measurement_engines )
+	for ( auto & me : INSTANCE.measurement_engines )
 		me->print_as_list ( os );
 }
 
diff --git a/alib2algo/src/measurements/Measurements.hpp b/alib2algo/src/measurements/Measurements.hpp
index 07b6e5885a43e4d0d7115fcc5ef0dd9bb43ce53c..1542a8b92046f273c1b71f08a1b8fa65214faeca 100644
--- a/alib2algo/src/measurements/Measurements.hpp
+++ b/alib2algo/src/measurements/Measurements.hpp
@@ -15,10 +15,9 @@ namespace measurements {
 
 class Measurements {
 private:
-	std::vector < MeasurementEngine * > measurement_engines;
+	std::vector < std::unique_ptr < MeasurementEngine > > measurement_engines;
 
 	Measurements ( );
-	~Measurements ( );
 
 private:
 	static Measurements INSTANCE;