diff --git a/GUI/coregui/Models/BeamItems.cpp b/GUI/coregui/Models/BeamItems.cpp
index df83ac2aa244a9d941b98e3bb8110444695c8ade..60b028f5e682931bfbe11506661a7b34e9413720 100644
--- a/GUI/coregui/Models/BeamItems.cpp
+++ b/GUI/coregui/Models/BeamItems.cpp
@@ -28,12 +28,16 @@
 #include "SessionItemUtils.h"
 #include "SpecularBeamInclinationItem.h"
 #include "Units.h"
+#include <cmath>
 
 using SessionItemUtils::GetVectorItem;
 
 namespace
 {
 const QString polarization_tooltip = "Polarization of the beam, given as the Bloch vector";
+
+// defines wavelength limits according to given maximum q value
+RealLimits getLimits(double max_q);
 }
 
 const QString BeamItem::P_INTENSITY = QString::fromStdString(BornAgain::Intensity);
@@ -199,12 +203,18 @@ void SpecularBeamItem::updateToData(const IAxis& axis, QString units)
         inclinationAxisGroup()->setCurrentType(Constants::BasicAxisType);
         auto axis_item = currentInclinationAxisItem();
         axis_item->setItemValue(BasicAxisItem::P_NBINS, static_cast<int>(axis.size()));
+        auto wl_item = static_cast<SpecularBeamWavelengthItem*>(getItem(P_WAVELENGTH));
+        wl_item->setToRange(RealLimits::positive());
         return;
     }
 
     auto axis_group = inclinationAxisGroup();
     axis_group->setCurrentType(Constants::PointwiseAxisType);
     auto axis_item = static_cast<PointwiseAxisItem*>(axis_group->currentItem());
+    if (units == Constants::UnitsQyQz) {
+        auto wl_item = static_cast<SpecularBeamWavelengthItem*>(getItem(P_WAVELENGTH));
+        wl_item->setToRange(getLimits(axis.getMax()));
+    }
     axis_item->init(axis, units);
 }
 
@@ -226,3 +236,14 @@ double GISASBeamItem::getInclinationAngle() const
     Q_ASSERT(inclination);
     return inclination->inclinationAngle();
 }
+
+namespace
+{
+RealLimits getLimits(double max_q)
+{
+    double upper_lim = std::nextafter(4.0 * M_PI / max_q, 0.0);
+    RealLimits result = RealLimits::positive();
+    result.setUpperLimit(upper_lim);
+    return result;
+}
+}
diff --git a/GUI/coregui/Models/BeamWavelengthItem.cpp b/GUI/coregui/Models/BeamWavelengthItem.cpp
index 9ee036c185607ab4b893379ed3721ee3965ebf22..bd9d8567bd8e84f0a9d9ed0b1c1aed841adf60c4 100644
--- a/GUI/coregui/Models/BeamWavelengthItem.cpp
+++ b/GUI/coregui/Models/BeamWavelengthItem.cpp
@@ -43,3 +43,12 @@ SpecularBeamWavelengthItem::SpecularBeamWavelengthItem()
     : BeamWavelengthItem(Constants::SpecularBeamWavelengthType,
                          Constants::SymmetricDistributionGroup)
 {}
+
+void SpecularBeamWavelengthItem::setToRange(const RealLimits& limits)
+{
+    SessionItem* valueItem =
+        getGroupItem(P_DISTRIBUTION)->getItem(SymmetricDistributionItem::P_MEAN);
+    if (!limits.isInRange(wavelength()))
+        valueItem->setValue(limits.hasUpperLimit() ? limits.upperLimit() : limits.lowerLimit());
+    valueItem->setLimits(limits);
+}
diff --git a/GUI/coregui/Models/BeamWavelengthItem.h b/GUI/coregui/Models/BeamWavelengthItem.h
index 6d8a9c015805b053094e271b36d038f66b433971..687225180d96531f718a069ff4689b33355d48f3 100644
--- a/GUI/coregui/Models/BeamWavelengthItem.h
+++ b/GUI/coregui/Models/BeamWavelengthItem.h
@@ -33,6 +33,7 @@ class BA_CORE_API_ SpecularBeamWavelengthItem : public BeamWavelengthItem
 {
 public:
     SpecularBeamWavelengthItem();
+    void setToRange(const RealLimits& limits);
 };
 
 #endif // BEAMWAVELENGTHITEM_H