diff --git a/GUI/coregui/Models/BeamItems.cpp b/GUI/coregui/Models/BeamItems.cpp
index 8990ee82384ff93276dc0a09cac3ba30d3411536..70590c911609d19749b1833fecb6919f11ccb952 100644
--- a/GUI/coregui/Models/BeamItems.cpp
+++ b/GUI/coregui/Models/BeamItems.cpp
@@ -88,6 +88,11 @@ void BeamItem::setInclinationAngle(double value)
     item<BeamDistributionItem>(P_INCLINATION_ANGLE)->resetToValue(value);
 }
 
+BeamDistributionItem* BeamItem::inclinationAngleItem() const
+{
+    return item<BeamDistributionItem>(P_INCLINATION_ANGLE);
+}
+
 double BeamItem::getAzimuthalAngle() const
 {
     return item<BeamAzimuthalAngleItem>(P_AZIMUTHAL_ANGLE)->azimuthalAngle();
@@ -120,6 +125,14 @@ template<typename T> void BeamItem::initWavelength()
     addProperty<T>(P_WAVELENGTH);
 }
 
+template<typename T> void BeamItem::initInclinationAngle()
+{
+    static_assert(std::is_base_of<BeamDistributionItem,T>::value,
+                  "Class must be derived from BeamDistributionItem");
+
+    addProperty<T>(P_INCLINATION_ANGLE);
+}
+
 // Specular beam item
 /* ------------------------------------------------------------------------- */
 
@@ -129,7 +142,7 @@ const QString footprint_group_label("Type");
 
 SpecularBeamItem::SpecularBeamItem() : BeamItem("SpecularBeam")
 {
-    addProperty<SpecularBeamInclinationItem>(P_INCLINATION_ANGLE);
+    initInclinationAngle<SpecularBeamInclinationItem>();
     initWavelength<SpecularBeamWavelengthItem>();
 
     getItem(P_AZIMUTHAL_ANGLE)->setVisible(false);
@@ -170,7 +183,7 @@ void SpecularBeamItem::setInclinationAngle(double value)
 GroupItem* SpecularBeamItem::inclinationAxisGroup()
 {
     return dynamic_cast<GroupItem*>(
-        getItem(P_INCLINATION_ANGLE)->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS));
+        inclinationAngleItem()->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS));
 }
 
 BasicAxisItem* SpecularBeamItem::currentInclinationAxisItem()
@@ -203,7 +216,8 @@ SessionItem* SpecularBeamItem::footprintGroupItem() const
 
 void SpecularBeamItem::updateFileName(const QString& filename)
 {
-    item<SpecularBeamInclinationItem>(BeamItem::P_INCLINATION_ANGLE)->updateFileName(filename);
+    dynamic_cast<SpecularBeamInclinationItem*>(inclinationAngleItem())
+        ->updateFileName(filename);
 }
 
 void SpecularBeamItem::updateToData(const IAxis& axis, QString units)
@@ -239,7 +253,7 @@ void SpecularBeamItem::updateWavelength()
 
 GISASBeamItem::GISASBeamItem() : BeamItem("GISASBeam")
 {
-    addProperty<BeamInclinationAngleItem>(P_INCLINATION_ANGLE);
+    initInclinationAngle<BeamInclinationAngleItem>();
     initWavelength<BeamWavelengthItem>();
 }
 
@@ -247,7 +261,8 @@ GISASBeamItem::~GISASBeamItem() = default;
 
 double GISASBeamItem::getInclinationAngle() const
 {
-    return item<BeamInclinationAngleItem>(P_INCLINATION_ANGLE)->inclinationAngle();
+    return dynamic_cast<BeamInclinationAngleItem*>(inclinationAngleItem())
+        ->inclinationAngle();
 }
 
 namespace {
diff --git a/GUI/coregui/Models/BeamItems.h b/GUI/coregui/Models/BeamItems.h
index 16ea73157966ae512c4ef767764a8372de001525..c7df4a7c640d7cc690ca4aef88b41d0dfdeb2105 100644
--- a/GUI/coregui/Models/BeamItems.h
+++ b/GUI/coregui/Models/BeamItems.h
@@ -19,6 +19,7 @@
 
 class BasicAxisItem;
 class Beam;
+class BeamDistributionItem;
 class BeamWavelengthItem;
 class FootprintItem;
 class GroupItem;
@@ -28,8 +29,8 @@ class BA_CORE_API_ BeamItem : public SessionItem {
 private:
     static const QString P_INTENSITY;
     static const QString P_WAVELENGTH;
-public:
     static const QString P_INCLINATION_ANGLE;
+public:
     static const QString P_AZIMUTHAL_ANGLE;
     static const QString P_POLARIZATION;
 
@@ -45,7 +46,8 @@ public:
     
     virtual double getInclinationAngle() const = 0;
     virtual void setInclinationAngle(double value);
-
+    BeamDistributionItem* inclinationAngleItem() const;
+    
     double getAzimuthalAngle() const;
     void setAzimuthalAngle(double value);
 
@@ -55,6 +57,7 @@ protected:
     explicit BeamItem(const QString& beam_model);
 
     template<typename T> void initWavelength();
+    template<typename T> void initInclinationAngle();
 };
 
 class BA_CORE_API_ SpecularBeamItem : public BeamItem {
diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index a6a274a5d350f6af127dfc55dc73cb8d4053ab30..42ebba51ee84c1d6d97f811f816c2cc48916ce01 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -309,7 +309,7 @@ OffSpecularInstrumentItem::OffSpecularInstrumentItem() : Instrument2DItem("OffSp
     auto inclination_item = getItem(P_ALPHA_AXIS)->getItem(BasicAxisItem::P_MIN_DEG);
     auto beam_item = beamItem();
     beam_item->setInclinationAngle(inclination_item->value().toDouble());
-    beam_item->getItem(BeamItem::P_INCLINATION_ANGLE)->setEnabled(false);
+    beam_item->inclinationAngleItem()->setEnabled(false);
     inclination_item->mapper()->setOnValueChange([beam_item, inclination_item]() {
         beam_item->setInclinationAngle(inclination_item->value().toDouble());
     });
@@ -427,7 +427,7 @@ std::unique_ptr<DepthProbeSimulation> DepthProbeInstrumentItem::createSimulation
 
     TransformToDomain::setBeamDistribution(
         ParameterDistribution::BeamInclinationAngle,
-        *beamItem()->item<SpecularBeamInclinationItem>(SpecularBeamItem::P_INCLINATION_ANGLE),
+        *beamItem()->inclinationAngleItem(),
         *simulation.get());
 
     return simulation;
diff --git a/GUI/coregui/Models/InstrumentModel.cpp b/GUI/coregui/Models/InstrumentModel.cpp
index 34368ff1f2dd7bee95d42a8fb7bfd78c6603421c..1dee3986b18ff3b15bc082b63009bceef2e41364 100644
--- a/GUI/coregui/Models/InstrumentModel.cpp
+++ b/GUI/coregui/Models/InstrumentModel.cpp
@@ -40,7 +40,7 @@ QVector<SessionItem*> InstrumentModel::nonXMLItems() const
 
     for (auto instrument_item : topItems<SpecularInstrumentItem>()) {
         auto axis_group = instrument_item->beamItem()
-                              ->getItem(BeamItem::P_INCLINATION_ANGLE)
+                              ->inclinationAngleItem()
                               ->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS);
 
         if (auto pointwise_axis = axis_group->getChildOfType("PointwiseAxis"))
diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp
index d1228420e067c8112ab7811169f21ca9e9b51693..ed2c2edf30b8f0e0aeafbdc9c88ed5b48aa87202 100644
--- a/GUI/coregui/Models/TransformFromDomain.cpp
+++ b/GUI/coregui/Models/TransformFromDomain.cpp
@@ -230,7 +230,8 @@ void TransformFromDomain::setGISASBeamItem(BeamItem* beam_item, const GISASSimul
         addDistributionToBeamItem(ParameterDistribution::BeamWavelength,
                                   beam_item->wavelengthItem(), distributions[i]);
         addDistributionToBeamItem(ParameterDistribution::BeamInclinationAngle,
-                                  BeamItem::P_INCLINATION_ANGLE, distributions[i], beam_item);
+                                  beam_item->inclinationAngleItem(),
+                                  distributions[i]);
         addDistributionToBeamItem(ParameterDistribution::BeamAzimuthalAngle,
                                   BeamItem::P_AZIMUTHAL_ANGLE, distributions[i], beam_item);
     }
@@ -281,7 +282,7 @@ void TransformFromDomain::setSpecularBeamItem(SpecularBeamItem* beam_item,
     resolution = scan->angleResolution();
     if (resolution && !resolution->empty()) {
         double std_dev = resolution->stdDevs(0.0, 1).front();
-        addRangedDistributionToItem(beam_item->getItem(SpecularBeamItem::P_INCLINATION_ANGLE),
+        addRangedDistributionToItem(beam_item->inclinationAngleItem(),
                                     *resolution->distribution(), 0.0, std_dev);
     }
 }
diff --git a/GUI/coregui/Models/TransformToDomain.cpp b/GUI/coregui/Models/TransformToDomain.cpp
index 4632cc5d01fb4a845f76767266f19dedef6f3ae7..8eed27c9c761b38256a30e86c2d260f4ffeec0f6 100644
--- a/GUI/coregui/Models/TransformToDomain.cpp
+++ b/GUI/coregui/Models/TransformToDomain.cpp
@@ -147,7 +147,7 @@ void TransformToDomain::addDistributionParametersToSimulation(const BeamItem& be
         simulation);
     setParameterDistributionToSimulation<BeamInclinationAngleItem>(
         ParameterDistribution::BeamInclinationAngle,
-        beam_item.getItem(BeamItem::P_INCLINATION_ANGLE), simulation);
+        beam_item.inclinationAngleItem(), simulation);
     setParameterDistributionToSimulation<BeamAzimuthalAngleItem>(
         ParameterDistribution::BeamAzimuthalAngle, beam_item.getItem(BeamItem::P_AZIMUTHAL_ANGLE),
         simulation);
@@ -164,7 +164,7 @@ void TransformToDomain::addBeamDivergencesToScan(const BeamItem& beam_item,
     auto resolution = createScanResolution(beam_item.wavelengthItem());
     if (resolution)
         scan.setWavelengthResolution(*resolution);
-    resolution = createScanResolution(beam_item.getItem(SpecularBeamItem::P_INCLINATION_ANGLE));
+    resolution = createScanResolution(beam_item.inclinationAngleItem());
     if (resolution)
         scan.setAngleResolution(*resolution);
 }
diff --git a/GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.cpp
index a0667148ebf409d8699d16f8e688a00e6bbff907..30fccb4ee8ebfa7c1aaf2602e791146c6695334a 100644
--- a/GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.cpp
+++ b/GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.cpp
@@ -58,7 +58,7 @@ void DepthProbeInstrumentEditor::subscribeToItem()
     BeamWavelengthItem* wavelengthItem = beam_item->wavelengthItem();
     m_wavelengthEditor->setItem(wavelengthItem->getItem(BeamDistributionItem::P_DISTRIBUTION));
 
-    auto inclinationItem = beam_item->getItem(SpecularBeamItem::P_INCLINATION_ANGLE);
+    auto inclinationItem = beam_item->inclinationAngleItem();
     m_inclinationEditor->setItem(
         inclinationItem->getItem(SpecularBeamInclinationItem::P_DISTRIBUTION));
     m_inclinationEditor->addItem(
diff --git a/GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.cpp
index cd6a28d6c3b7ee827cb6cb4344b35208727d7a5f..19dd1252fa175fad072ee97571326b46734c5f76 100644
--- a/GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.cpp
+++ b/GUI/coregui/Views/InstrumentWidgets/GISASBeamEditor.cpp
@@ -67,7 +67,7 @@ void GISASBeamEditor::subscribeToItem()
     auto wavelengthItem = beamItem()->wavelengthItem();
     m_wavelengthEditor->setItem(wavelengthItem->getItem(BeamDistributionItem::P_DISTRIBUTION));
 
-    auto inclinationItem = beamItem()->getItem(BeamItem::P_INCLINATION_ANGLE);
+    auto inclinationItem = beamItem()->inclinationAngleItem();
     m_inclinationEditor->setItem(inclinationItem->getItem(BeamDistributionItem::P_DISTRIBUTION));
 
     auto azimuthalItem = beamItem()->getItem(BeamItem::P_AZIMUTHAL_ANGLE);
diff --git a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
index b261a4c96ea145c2febac976c9ccd7ac73a7e02c..6f92700505a0a276c11831bda10ea02d4ea94d59 100644
--- a/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
+++ b/GUI/coregui/Views/InstrumentWidgets/SpecularBeamEditor.cpp
@@ -70,7 +70,7 @@ void SpecularBeamEditor::subscribeToItem()
     auto wavelengthItem = beam_item->wavelengthItem();
     m_wavelengthEditor->setItem(wavelengthItem->getItem(BeamDistributionItem::P_DISTRIBUTION));
 
-    auto inclinationItem = beam_item->getItem(SpecularBeamItem::P_INCLINATION_ANGLE);
+    auto inclinationItem = beam_item->inclinationAngleItem();
     m_inclinationEditor->setItem(
         inclinationItem->getItem(SpecularBeamInclinationItem::P_DISTRIBUTION));
     m_inclinationEditor->addItem(
diff --git a/Tests/UnitTests/GUI/TestSavingSpecularData.cpp b/Tests/UnitTests/GUI/TestSavingSpecularData.cpp
index 8fd851afd25c1c0fd4225a6a9418d170d6eb32d9..2149002e811eb38acd05ded7cf9a28da340e8bae 100644
--- a/Tests/UnitTests/GUI/TestSavingSpecularData.cpp
+++ b/Tests/UnitTests/GUI/TestSavingSpecularData.cpp
@@ -51,8 +51,8 @@ PointwiseAxisItem* TestSavingSpecularData::createPointwiseAxisItem(SessionModel&
 
 GroupItem* TestSavingSpecularData::getAxisGroup(SpecularInstrumentItem* instrument)
 {
-    auto axis_item = instrument->getItem(SpecularInstrumentItem::P_BEAM)
-                         ->getItem(BeamItem::P_INCLINATION_ANGLE)
+    auto axis_item = instrument->beamItem()
+                         ->inclinationAngleItem()
                          ->getItem(SpecularBeamInclinationItem::P_ALPHA_AXIS);
     return dynamic_cast<GroupItem*>(axis_item);
 }