diff --git a/GUI/coregui/Models/BeamItems.cpp b/GUI/coregui/Models/BeamItems.cpp
index f617bd88b880f2ed180ba4825c8bdd7223475304..4427715e7135906be30fcf0f271a54f616e4b2a5 100644
--- a/GUI/coregui/Models/BeamItems.cpp
+++ b/GUI/coregui/Models/BeamItems.cpp
@@ -18,6 +18,7 @@
 #include "BeamDistributionItem.h"
 #include "BeamWavelengthItem.h"
 #include "BornAgainNamespace.h"
+#include "FootprintItems.h"
 #include "GUIHelpers.h"
 #include "ParameterTranslators.h"
 #include "SessionItemUtils.h"
@@ -150,6 +151,11 @@ void SpecularBeamItem::setInclinationAngle(double value)
     BeamItem::setInclinationAngle(value);
 }
 
+FootprintItem* SpecularBeamItem::currentFootprintItem() const
+{
+    return &groupItem<FootprintItem>(P_FOOPTPRINT);
+}
+
 // GISAS beam item
 /* ------------------------------------------------------------------------- */
 
diff --git a/GUI/coregui/Models/BeamItems.h b/GUI/coregui/Models/BeamItems.h
index 6b8e8ee791c03c08e171f2a798826dada94828e0..3a7a7305a56e3dfdec4d9299e9ca7b2b33cb32bd 100644
--- a/GUI/coregui/Models/BeamItems.h
+++ b/GUI/coregui/Models/BeamItems.h
@@ -18,6 +18,7 @@
 #include "SessionItem.h"
 
 class Beam;
+class FootprintItem;
 
 class BA_CORE_API_ BeamItem : public SessionItem
 {
@@ -60,6 +61,8 @@ public:
 
     double getInclinationAngle() const override;
     void setInclinationAngle(double value) override;
+
+    FootprintItem* currentFootprintItem() const;
 };
 
 class BA_CORE_API_ GISASBeamItem : public BeamItem
diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index 3cc2fd9c6980fe71d11a64c5c3ab6720a8b7eb8c..f012f48d345ae09a4e3e78ba445cad4d5189ac7f 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -102,6 +102,11 @@ SpecularInstrumentItem::SpecularInstrumentItem()
     initBeamGroup(Constants::SpecularBeamType);
 }
 
+SpecularBeamItem* SpecularInstrumentItem::beamItem() const
+{
+    return &item<SpecularBeamItem>(P_BEAM);
+}
+
 SpecularInstrumentItem::~SpecularInstrumentItem() = default;
 
 std::unique_ptr<Instrument> SpecularInstrumentItem::createInstrument() const
diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h
index f5f6ea252356e3e15ccf89b81a9567c8d8b20bef..f0dc2c31eb544b60df7445cad16be45df151b887 100644
--- a/GUI/coregui/Models/InstrumentItems.h
+++ b/GUI/coregui/Models/InstrumentItems.h
@@ -15,10 +15,9 @@
 #ifndef INSTRUMENTITEMS_H
 #define INSTRUMENTITEMS_H
 
-#include "SessionItem.h"
+#include "BeamItems.h"
 
 class BackgroundItem;
-class BeamItem;
 class DetectorItem;
 class GroupItem;
 class Instrument;
@@ -33,7 +32,7 @@ public:
 
     QStringList translateList(const QStringList& list) const override;
 
-    BeamItem* beamItem() const;
+    virtual BeamItem* beamItem() const;
     BackgroundItem* backgroundItem() const;
     GroupItem* backgroundGroup();
 
@@ -51,6 +50,8 @@ public:
     SpecularInstrumentItem();
     virtual ~SpecularInstrumentItem();
 
+    SpecularBeamItem* beamItem() const override;
+
     std::unique_ptr<Instrument> createInstrument() const override;
 };
 
diff --git a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
index 17019597ef2d03a12e4ec2efe6cedb158db5c9ce..2afd8cd3f44dbe9e89d3ccde6db6eebde2043699 100644
--- a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
+++ b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
@@ -64,7 +64,7 @@ SpecularBeamEditor::SpecularBeamEditor(ColumnResizer* columnResizer, QWidget* pa
 
 void SpecularBeamEditor::subscribeToItem()
 {
-    const auto beam_item = beamItem();
+    const auto beam_item = instrumentItem()->beamItem();
     Q_ASSERT(beam_item);
 
     m_intensityEditor->setItem(beam_item->getItem(SpecularBeamItem::P_INTENSITY));
@@ -96,11 +96,6 @@ SpecularInstrumentItem* SpecularBeamEditor::instrumentItem()
     return result;
 }
 
-BeamItem* SpecularBeamEditor::beamItem()
-{
-    return instrumentItem()->beamItem();
-}
-
 void SpecularBeamEditor::onDialogRequest(SessionItem* item, const QString& name)
 {
     if(!item)
diff --git a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h
index df8a3c33f22b6f12f5eaac2d96505851a52c672f..7d8d34cd87348142878956d3456f61e0a9f0dd72 100644
--- a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h
+++ b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.h
@@ -38,7 +38,6 @@ protected:
 
 private:
     SpecularInstrumentItem* instrumentItem();
-    BeamItem* beamItem();
     void onDialogRequest(SessionItem* item, const QString& name);
 
     ColumnResizer* m_columnResizer;