diff --git a/Device/Mask/MaskStack.cpp b/Device/Mask/MaskStack.cpp
index feed2bf0d264a1af4293aab80575f5473fe5bb17..2e01ffa3d1129d19325d4aa5a1af6a07c67074c7 100644
--- a/Device/Mask/MaskStack.cpp
+++ b/Device/Mask/MaskStack.cpp
@@ -18,6 +18,16 @@
 #include "Device/Data/Datafield.h"
 #include "Device/Mask/IShape2D.h"
 
+struct MaskPattern {
+    MaskPattern(IShape2D* shape_, bool doMask_, bool in_bins_);
+    MaskPattern(const MaskPattern&) = delete;
+    ~MaskPattern();
+    MaskPattern* clone() const;
+    IShape2D* shape; // cloneable
+    bool doMask;
+    bool inBins;
+};
+
 MaskPattern::MaskPattern(IShape2D* shape_, bool doMask_, bool in_bins_)
     : shape(shape_)
     , doMask(doMask_)
@@ -36,6 +46,10 @@ MaskPattern* MaskPattern::clone() const
 }
 
 
+MaskStack::MaskStack() = default;
+MaskStack::MaskStack(const MaskStack&) = default;
+MaskStack::~MaskStack() = default;
+
 void MaskStack::maskToStack(const IShape2D& shape, bool mask_value, bool in_bins)
 {
     m_stack.emplace_back(new MaskPattern(shape.clone(), mask_value, in_bins));
diff --git a/Device/Mask/MaskStack.h b/Device/Mask/MaskStack.h
index 1208e87e35f9f729ad5371f65e3fbad98bb7d54b..093f0e8f3f9ab56d289d1b434db73c1dccd9484b 100644
--- a/Device/Mask/MaskStack.h
+++ b/Device/Mask/MaskStack.h
@@ -23,22 +23,15 @@
 
 class IShape2D;
 class Frame;
-
-class MaskPattern {
-public:
-    MaskPattern(IShape2D* shape_, bool doMask_, bool in_bins_);
-    MaskPattern(const MaskPattern&) = delete;
-    ~MaskPattern();
-    MaskPattern* clone() const;
-    IShape2D* shape; // cloneable
-    bool doMask;
-    bool inBins;
-};
+struct MaskPattern;
 
 //! Collection of detector masks.
 
 class MaskStack {
 public:
+    MaskStack();
+    MaskStack(const MaskStack&);
+    ~MaskStack();
     //! Add mask to the stack of detector masks.
     //! Argument mask_value=true means that the area will be excluded from the analysis.
     void maskToStack(const IShape2D& shape, bool mask_value, bool in_bins);