diff --git a/Base/Types/OwningVector.h b/Base/Types/OwningVector.h
index a9e63628631e66406799950f37c699c5b6326ea5..4d92e4fcee79179dbd385b56d786e919705325f7 100644
--- a/Base/Types/OwningVector.h
+++ b/Base/Types/OwningVector.h
@@ -49,6 +49,7 @@ public:
         for (T* e : other)
             m_v.emplace_back(e->clone());
     }
+    OwningVector(OwningVector&& other) = default;
     ~OwningVector() { clear(); }
     OwningVector& operator=(const OwningVector& other)
     {
@@ -58,6 +59,7 @@ public:
         std::swap(m_v, ret.m_v);
         return *this;
     }
+    OwningVector& operator=(OwningVector&& other) = default;
 
     void emplace_back(T* e) { m_v.emplace_back(e); }
     void clear()
diff --git a/Sim/Computation/DWBAComputation.cpp b/Sim/Computation/DWBAComputation.cpp
index eda9af78687fc8a8fe8a51649e9ee71901aa1ae0..541bb30ff7b0c6f5dacfe69e7235b91e18c40be7 100644
--- a/Sim/Computation/DWBAComputation.cpp
+++ b/Sim/Computation/DWBAComputation.cpp
@@ -26,11 +26,11 @@
 
 namespace {
 
-std::vector<std::unique_ptr<const ParticleLayoutContribution>>
+OwningVector<const ParticleLayoutContribution>
 makeLayoutComputation(const std::vector<reLayout>& layouts, const SimulationOptions& options,
                       bool polarized)
 {
-    std::vector<std::unique_ptr<const ParticleLayoutContribution>> result;
+    OwningVector<const ParticleLayoutContribution> result;
 
     for (const reLayout& layout : layouts)
         result.emplace_back(new ParticleLayoutContribution(layout, options, polarized));
diff --git a/Sim/Computation/DWBAComputation.h b/Sim/Computation/DWBAComputation.h
index c7195c1afb39cb914ce69ecbf714a798c31e95ae..d0edf7bb560902e58887de00dd1f04e0bf836944 100644
--- a/Sim/Computation/DWBAComputation.h
+++ b/Sim/Computation/DWBAComputation.h
@@ -21,6 +21,7 @@
 #define BORNAGAIN_SIM_COMPUTATION_DWBACOMPUTATION_H
 
 #include "Sim/Computation/IComputation.h"
+#include "Base/Types/OwningVector.h"
 #include <vector>
 
 class DiffuseElement;
@@ -53,7 +54,7 @@ private:
     std::vector<DiffuseElement>::iterator m_begin_it, m_end_it;
     const std::unique_ptr<const GISASSpecularContribution> m_specular_contrib;
     const std::unique_ptr<const RoughMultiLayerContribution> m_roughness_contrib;
-    const std::vector<std::unique_ptr<const ParticleLayoutContribution>> m_layout_contribs;
+    const OwningVector<const ParticleLayoutContribution> m_layout_contribs;
 };
 
 #endif // BORNAGAIN_SIM_COMPUTATION_DWBACOMPUTATION_H
diff --git a/auto/Wrap/doxygenBase.i b/auto/Wrap/doxygenBase.i
index 55d236e7eaf9c7559e3ba3551e0f95f0be54d490..612cb84e31509ac5c2ffbe773c4bff9a432c2256 100644
--- a/auto/Wrap/doxygenBase.i
+++ b/auto/Wrap/doxygenBase.i
@@ -693,6 +693,9 @@ OwningVector::OwningVector
 Constructor that clones elements in given vector. 
 ";
 
+%feature("docstring")  OwningVector::OwningVector "OwningVector< T >::OwningVector(OwningVector &&other)=default
+OwningVector::OwningVector";
+
 %feature("docstring")  OwningVector::~OwningVector "OwningVector< T >::~OwningVector()
 OwningVector::~OwningVector";