diff --git a/Core/Computation/MainComputation.cpp b/Core/Computation/MainComputation.cpp
index a1f5329ab64328488d3fb1aa755e3005ffda175f..ef9ed089894cc4fc206a5afb131f5145871e5474 100644
--- a/Core/Computation/MainComputation.cpp
+++ b/Core/Computation/MainComputation.cpp
@@ -45,25 +45,22 @@ MainComputation::MainComputation(
     for (size_t i=0; i<nLayers; ++i) {
         const Layer* layer = mP_multi_layer->getLayer(i);
         for (size_t j=0; j<layer->getNumberOfLayouts(); ++j)
-            m_computation_terms.push_back(
+            m_computation_terms.emplace_back(
                         new ParticleLayoutComputation(mP_multi_layer.get(), mP_fresnel_map.get(),
                                                       layer->getLayout(j), i,
                                                       m_sim_options, polarized));
     }
     // scattering from rough surfaces in DWBA
     if (mP_multi_layer->hasRoughness())
-        m_computation_terms.push_back(new RoughMultiLayerComputation(mP_multi_layer.get(),
+        m_computation_terms.emplace_back(new RoughMultiLayerComputation(mP_multi_layer.get(),
                                                                      mP_fresnel_map.get()));
     if (m_sim_options.includeSpecular())
-        m_computation_terms.push_back(new SpecularComputation(mP_multi_layer.get(),
+        m_computation_terms.emplace_back(new SpecularComputation(mP_multi_layer.get(),
                                                               mP_fresnel_map.get()));
 }
 
 MainComputation::~MainComputation()
-{
-    for (IComputationTerm* comp: m_computation_terms)
-        delete comp;
-}
+{}
 
 void MainComputation::run()
 {
@@ -85,7 +82,7 @@ void MainComputation::run()
 void MainComputation::runProtected()
 {
     // add intensity of all IComputationTerms:
-    for (const IComputationTerm* comp: m_computation_terms) {
+    for (auto& comp: m_computation_terms) {
         if (!m_progress->alive())
             return;
         comp->eval(m_progress, m_begin_it, m_end_it );
diff --git a/Core/Computation/MainComputation.h b/Core/Computation/MainComputation.h
index 1b60f5843872b2f8efd624b48fe9940532a55707..53472e6f15b81cc9e9405a69bb63dae056c6571c 100644
--- a/Core/Computation/MainComputation.h
+++ b/Core/Computation/MainComputation.h
@@ -67,7 +67,7 @@ private:
     //! contains the information, necessary to calculate the Fresnel coefficients
     std::unique_ptr<IFresnelMap> mP_fresnel_map;
 
-    std::vector<IComputationTerm*> m_computation_terms;
+    std::vector<std::unique_ptr<IComputationTerm>> m_computation_terms;
     ComputationStatus m_status;
 };