diff --git a/GUI/View/Instrument/DistributionEditor.cpp b/GUI/View/Instrument/DistributionEditor.cpp
index 5010d2c5c44e0408ca06b4264199a371674d3680..5349ab84cbd25db6403e167553ede871d592ce18 100644
--- a/GUI/View/Instrument/DistributionEditor.cpp
+++ b/GUI/View/Instrument/DistributionEditor.cpp
@@ -162,20 +162,20 @@ DistributionEditor::DistributionEditor(const QString& title,
                                        const std::optional<MeanConfig>& mean_config,
                                        GUI::ID::Distributions distributions, QWidget* parent,
                                        BeamDistributionItem* item, bool allow_distr)
-    : QGroupBox(title, parent)
+    : CollapsibleGroupBox(title, parent, item->expandGroupBox)
 {
-    auto* hLayout = new QVBoxLayout(this);
+    auto* layout = new QVBoxLayout;
+    body()->setLayout(layout);
+
     m_selector = new DistributionSelector(mean_config, distributions, this, item, allow_distr);
-    hLayout->addWidget(m_selector);
-    hLayout->setSpacing(50);
+    layout->addWidget(m_selector);
+    layout->setSpacing(50);
 
     m_plot = new DistributionPlot(this);
     m_plot->setFixedSize(280, 170);
     m_plot->setShowMouseCoords(false);
-    hLayout->addWidget(m_plot);
-    hLayout->addStretch(1);
-
-    GroupBoxCollapser::installIntoGroupBox2(this, item->expandGroupBox);
+    layout->addWidget(m_plot);
+    layout->addStretch(1);
 
     connect(m_selector, &DistributionSelector::distributionChanged, this,
             &DistributionEditor::distributionChanged);
diff --git a/GUI/View/Instrument/DistributionEditor.h b/GUI/View/Instrument/DistributionEditor.h
index 018190cd3986151cbe03eba1d5a428fe499cf90e..2ddba42563894df8156807312f9fd9b9a604e171 100644
--- a/GUI/View/Instrument/DistributionEditor.h
+++ b/GUI/View/Instrument/DistributionEditor.h
@@ -78,7 +78,7 @@ private:
 /// DistributionSelector as above but contained in a GroupBox with a title and a button
 /// to open the distribution dialog
 
-class DistributionEditor : public QGroupBox {
+class DistributionEditor : public CollapsibleGroupBox {
     Q_OBJECT
 public:
     DistributionEditor(const QString& title, const std::optional<MeanConfig>& mean_config,
diff --git a/GUI/View/Instrument/GISASBeamEditor.cpp b/GUI/View/Instrument/GISASBeamEditor.cpp
index 5c5c49ea438fca54e8273fdb85901e14598a8e59..b7098f9773b6c3b950d1d888f48c300741f85e42 100644
--- a/GUI/View/Instrument/GISASBeamEditor.cpp
+++ b/GUI/View/Instrument/GISASBeamEditor.cpp
@@ -26,8 +26,8 @@
 GISASBeamEditor::GISASBeamEditor(QWidget* parent, BeamItem* item)
     : CollapsibleGroupBox("Beam parameters", parent, item->expandBeamParameters)
 {
-    auto* vLayout = new QVBoxLayout(this);
-    vLayout->setContentsMargins(30, 8, 0, 0);
+    auto* layout = new QVBoxLayout;
+    body()->setLayout(layout);
 
     // Beam intensity row
     auto* intensityEditor = new QLineEdit(this);
@@ -55,7 +55,7 @@ GISASBeamEditor::GISASBeamEditor(QWidget* parent, BeamItem* item)
     auto* form = new QFormLayout;
     form->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
     form->addRow("Intensity:", intensityEditor);
-    vLayout->addLayout(form);
+    layout->addLayout(form);
 
     // Main row: fixed values or distributions for wavelength and angles of incidence
     auto* wavelengthEditor = new DistributionEditor(
@@ -79,11 +79,9 @@ GISASBeamEditor::GISASBeamEditor(QWidget* parent, BeamItem* item)
     mainrow->addWidget(wavelengthEditor);
     mainrow->addWidget(inclinationEditor);
     mainrow->addWidget(azimuthalEditor);
-    vLayout->addLayout(mainrow);
+    layout->addLayout(mainrow);
 
     auto* footprintEditor = new FootprintForm(this, item);
     connect(footprintEditor, &FootprintForm::dataChanged, this, &GISASBeamEditor::dataChanged);
-    vLayout->addWidget(footprintEditor);
-
-    body()->setLayout(vLayout);
+    layout->addWidget(footprintEditor);
 }
diff --git a/GUI/View/Instrument/PolarizationAnalysisEditor.cpp b/GUI/View/Instrument/PolarizationAnalysisEditor.cpp
index 60a11c030537a5162062514e8cc1e74cd4676fa0..330cfb144f7a499f6ed3c1563da719e7916615e0 100644
--- a/GUI/View/Instrument/PolarizationAnalysisEditor.cpp
+++ b/GUI/View/Instrument/PolarizationAnalysisEditor.cpp
@@ -20,12 +20,11 @@
 #include <QLabel>
 
 PolarizationAnalysisEditor::PolarizationAnalysisEditor(QWidget* parent, InstrumentItem* instrument)
-    : QGroupBox("Polarization analysis", parent)
+    : CollapsibleGroupBox("Polarization analysis", parent, instrument->expandPolarizerAlanyzer)
     , m_instrument(instrument)
 {
-    ASSERT(instrument);
-
-    auto* layout = new QVBoxLayout(this);
+    auto* layout = new QVBoxLayout;
+    body()->setLayout(layout);
 
     // polarizer
     {
@@ -70,10 +69,6 @@ PolarizationAnalysisEditor::PolarizationAnalysisEditor(QWidget* parent, Instrume
             emit dataChanged();
         });
     }
-
-    // collapser
-
-    GroupBoxCollapser::installIntoGroupBox2(this, instrument->expandPolarizerAlanyzer);
 }
 
 DoubleSpinBox* PolarizationAnalysisEditor::createSpinBox(DoubleProperty& d)
diff --git a/GUI/View/Instrument/PolarizationAnalysisEditor.h b/GUI/View/Instrument/PolarizationAnalysisEditor.h
index db583639216eb2281ed0b60e2b7c0803842d89a0..6a2a6445e183d50010aa9063dc438b485607d4b5 100644
--- a/GUI/View/Instrument/PolarizationAnalysisEditor.h
+++ b/GUI/View/Instrument/PolarizationAnalysisEditor.h
@@ -26,7 +26,7 @@ class VectorProperty;
 //! Polarization analysis editor (beam polarization, analyzer properties) for instrument editors.
 //! Operates on InstrumentItem.
 
-class PolarizationAnalysisEditor : public QGroupBox {
+class PolarizationAnalysisEditor : public CollapsibleGroupBox {
     Q_OBJECT
 public:
     PolarizationAnalysisEditor(QWidget* parent, InstrumentItem* instrument);
diff --git a/GUI/View/Instrument/ScanEditor.cpp b/GUI/View/Instrument/ScanEditor.cpp
index d8d65e024f7b3bfa367b54ab67b2a12e70dd4fee..38ec5471759e50e414bb3274e5bd421d1b282b16 100644
--- a/GUI/View/Instrument/ScanEditor.cpp
+++ b/GUI/View/Instrument/ScanEditor.cpp
@@ -25,15 +25,14 @@
 #include <QLineEdit>
 
 ScanEditor::ScanEditor(QWidget* parent, ScanItem* item, InstrumentNotifier* ec, bool allow_distr)
-    : QGroupBox("Beam and scan parameters", parent)
+    : CollapsibleGroupBox("Beam and scan parameters", parent, item->expandBeamParameters)
 {
-    ASSERT(item);
+    auto* layout = new QVBoxLayout;
+    body()->setLayout(layout);
 
-    auto* vLayout = new QVBoxLayout(this);
-    vLayout->setContentsMargins(30, 8, 0, 0);
     auto* form = new QFormLayout();
     form->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
-    vLayout->addLayout(form);
+    layout->addLayout(form);
     auto* intensityLineEdit = new QLineEdit(this);
     intensityLineEdit->setToolTip("Correction factor for normalized intensity");
     auto* validator = new FixupDoubleValidator(intensityLineEdit);
@@ -45,18 +44,16 @@ ScanEditor::ScanEditor(QWidget* parent, ScanItem* item, InstrumentNotifier* ec,
     auto* wavelengthEditor =
         new DistributionEditor("Wavelength", MeanConfig{true}, GUI::ID::Distributions::Symmetric,
                                this, item->wavelengthItem(), allow_distr);
-    vLayout->addWidget(wavelengthEditor);
+    layout->addWidget(wavelengthEditor);
 
     auto* inclinationEditor = new AlphaScanEditor(this, item->grazingScanItem(), allow_distr);
-    vLayout->addWidget(inclinationEditor);
+    layout->addWidget(inclinationEditor);
 
     auto* footprintEditor = new FootprintForm(this, item);
-    vLayout->addWidget(footprintEditor);
+    layout->addWidget(footprintEditor);
 
     intensityLineEdit->setText(QString::number(item->intensity()));
 
-    GroupBoxCollapser::installIntoGroupBox2(this, item->expandBeamParameters);
-
     // order of the next two connections is important! Indicators have to be recalculated first,
     // then updated (recalculation is done in EditController)
     connect(wavelengthEditor, &DistributionEditor::distributionChanged, ec,
diff --git a/GUI/View/Instrument/ScanEditor.h b/GUI/View/Instrument/ScanEditor.h
index 90fb64958c920ae482c3ce1ed7a49e37675dfe59..5e9b6a38083343ad2fa84bfd200d952e5818d8ba 100644
--- a/GUI/View/Instrument/ScanEditor.h
+++ b/GUI/View/Instrument/ScanEditor.h
@@ -22,7 +22,7 @@ class ScanItem;
 
 //! Specular beam editor. Operates on ScanItem.
 
-class ScanEditor : public QGroupBox {
+class ScanEditor : public CollapsibleGroupBox {
     Q_OBJECT
 public:
     ScanEditor(QWidget* parent, ScanItem* item, InstrumentNotifier* ec, bool allow_distr = true);