diff --git a/GUI/Model/Beam/#BeamAngleItems.cpp# b/GUI/Model/Beam/#BeamAngleItems.cpp#
new file mode 100644
index 0000000000000000000000000000000000000000..e5c09ba52c0033d76ec2232d8de5f995aba18a2f
--- /dev/null
+++ b/GUI/Model/Beam/#BeamAngleItems.cpp#
@@ -0,0 +1,78 @@
+//  ************************************************************************************************
+//
+//  BornAgain: simulate and fit reflection and scattering
+//
+//! @file      GUI/Model/Beam/BeamAngleItems.cpp
+//! @brief     Implements class BeamAngleItems.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+//  ************************************************************************************************
+
+#include "GUI/Model/Beam/BeamAngleItems.h"
+#include "Base/Const/Units.h"
+#include "Base/Util/Assert.h"
+#include "GUI/Model/Beam/DistributionItems.h"
+
+BeamAzimuthalAngleItem::BeamAzimuthalAngleItem()
+{
+    m_distribution.simpleInit("Distribution", "", DistributionCatalog::types(),
+                                       initDistribution);
+}
+
+void BeamAzimuthalAngleItem::readFrom(QXmlStreamReader* r)
+{
+    BeamDistributionItem::readFrom(r);
+}
+
+void BeamAzimuthalAngleItem::initDistribution(DistributionItem* new_distribution,
+                                              const DistributionItem* old_distribution)
+{
+    ASSERT(new_distribution);
+    new_distribution->center().setDVal(old_distribution ? old_distribution->center().dVal() : 0.);
+    new_distribution->center().setDecimals(3);
+}
+
+double BeamAzimuthalAngleItem::azimuthalAngle() const
+{
+    return BeamDistributionItem::meanValue();
+}
+
+double BeamAzimuthalAngleItem::scaleFactor() const
+{
+    return Units::deg;
+}
+
+// ------------------------------------------------------------------------------------------------
+
+BeamInclinationAngleItem::BeamInclinationAngleItem()
+{
+    m_distribution.initWithInitializer("Distribution", "", DistributionCatalog::types(),
+                                       initDistribution);
+}
+
+void BeamInclinationAngleItem::readFrom(QXmlStreamReader* r)
+{
+    BeamDistributionItem::readFrom(r);
+}
+
+double BeamInclinationAngleItem::inclinationAngle() const
+{
+    return BeamDistributionItem::meanValue();
+}
+
+double BeamInclinationAngleItem::scaleFactor() const
+{
+    return Units::deg;
+}
+
+void BeamInclinationAngleItem::initDistribution(DistributionItem* new_distribution,
+                                                const DistributionItem* old_distribution)
+{
+    ASSERT(new_distribution);
+    new_distribution->center().setDVal(old_distribution ? old_distribution->center().dVal() : 0.2);
+    new_distribution->center().setDecimals(3);
+}
diff --git a/GUI/Model/Beam/BeamAngleItems.cpp b/GUI/Model/Beam/BeamAngleItems.cpp
index 49812b3eccac1c81a8501e9a17a4f922dd02c022..19a9e6ca5df79b81c5f893fdf99e5d232bb78538 100644
--- a/GUI/Model/Beam/BeamAngleItems.cpp
+++ b/GUI/Model/Beam/BeamAngleItems.cpp
@@ -19,8 +19,7 @@
 
 BeamAzimuthalAngleItem::BeamAzimuthalAngleItem()
 {
-    m_distribution.initWithInitializer("Distribution", "", DistributionCatalog::types(),
-                                       initDistribution);
+    m_distribution.simpleInit("Distribution", "", DistributionCatalog::Type::None);
 }
 
 void BeamAzimuthalAngleItem::readFrom(QXmlStreamReader* r)
@@ -28,14 +27,6 @@ void BeamAzimuthalAngleItem::readFrom(QXmlStreamReader* r)
     BeamDistributionItem::readFrom(r);
 }
 
-void BeamAzimuthalAngleItem::initDistribution(DistributionItem* new_distribution,
-                                              const DistributionItem* old_distribution)
-{
-    ASSERT(new_distribution);
-    new_distribution->center().setDVal(old_distribution ? old_distribution->center().dVal() : 0.);
-    new_distribution->center().setDecimals(3);
-}
-
 double BeamAzimuthalAngleItem::azimuthalAngle() const
 {
     return BeamDistributionItem::meanValue();
@@ -50,8 +41,7 @@ double BeamAzimuthalAngleItem::scaleFactor() const
 
 BeamInclinationAngleItem::BeamInclinationAngleItem()
 {
-    m_distribution.initWithInitializer("Distribution", "", DistributionCatalog::types(),
-                                       initDistribution);
+    m_distribution.simpleInit("Distribution", "", DistributionCatalog::Type::None);
 }
 
 void BeamInclinationAngleItem::readFrom(QXmlStreamReader* r)
@@ -68,11 +58,3 @@ double BeamInclinationAngleItem::scaleFactor() const
 {
     return Units::deg;
 }
-
-void BeamInclinationAngleItem::initDistribution(DistributionItem* new_distribution,
-                                                const DistributionItem* old_distribution)
-{
-    ASSERT(new_distribution);
-    new_distribution->center().setDVal(old_distribution ? old_distribution->center().dVal() : 0.2);
-    new_distribution->center().setDecimals(3);
-}
diff --git a/GUI/Model/Beam/BeamAngleItems.h b/GUI/Model/Beam/BeamAngleItems.h
index be238d6597c315b23c9093c06ef19b7a627afa81..e68e58d773ac0811441ccd9e3efcf39fc0b42fe4 100644
--- a/GUI/Model/Beam/BeamAngleItems.h
+++ b/GUI/Model/Beam/BeamAngleItems.h
@@ -25,10 +25,6 @@ public:
 
     double azimuthalAngle() const;
     double scaleFactor() const override;
-
-private:
-    static void initDistribution(DistributionItem* newDistribution,
-                                 const DistributionItem* currentDistribution);
 };
 
 class BeamInclinationAngleItem : public BeamDistributionItem {
@@ -39,10 +35,6 @@ public:
 
     double inclinationAngle() const;
     double scaleFactor() const override;
-
-private:
-    static void initDistribution(DistributionItem* newDistribution,
-                                 const DistributionItem* currentDistribution);
 };
 
 #endif // BORNAGAIN_GUI_MODEL_BEAM_BEAMANGLEITEMS_H
diff --git a/GUI/Model/Beam/BeamDistributionItem.cpp b/GUI/Model/Beam/BeamDistributionItem.cpp
index a6a04b6c1badf20ad6bd7926e378e96c6af3330c..442185f16208fc010a8a32f193bafe6b176c6e54 100644
--- a/GUI/Model/Beam/BeamDistributionItem.cpp
+++ b/GUI/Model/Beam/BeamDistributionItem.cpp
@@ -49,7 +49,7 @@ double BeamDistributionItem::meanValue() const
     std::unique_ptr<IDistribution1D> domainDistr = createDistribution1D();
     if (domainDistr)
         return domainDistr->mean() / scaleFactor();
-    return dynamic_cast<SymmetricResolutionItem*>(distributionItem())->mean().dVal();
+    return dynamic_cast<SymmetricDistributionItem*>(distributionItem())->mean().dVal();
 }
 
 void BeamDistributionItem::resetToValue(double value)
diff --git a/GUI/Model/Beam/BeamWavelengthItem.cpp b/GUI/Model/Beam/BeamWavelengthItem.cpp
index 0015b76ef2ee289a7b8f7d4c09b1217020f39805..cb47d67589b6967a7de8072fbf845d8ed9f64e8a 100644
--- a/GUI/Model/Beam/BeamWavelengthItem.cpp
+++ b/GUI/Model/Beam/BeamWavelengthItem.cpp
@@ -16,22 +16,9 @@
 #include "Base/Util/Assert.h"
 #include "GUI/Model/Beam/DistributionItems.h"
 
-namespace {
-
-void initDistribution(DistributionItem* new_distribution, const DistributionItem* old_distribution)
-{
-    ASSERT(new_distribution);
-    new_distribution->center().setDVal(old_distribution ? old_distribution->center().dVal() : 0.1);
-    new_distribution->center().setDecimals(4);
-    new_distribution->center().setLimits(RealLimits::positive());
-};
-
-} // namespace
-
 BeamWavelengthItem::BeamWavelengthItem()
 {
-    m_distribution.initWithInitializer("Distribution", "", DistributionCatalog::types(),
-                                       initDistribution);
+    m_distribution.simpleInit("Distribution", "", DistributionCatalog::Type::None);
 }
 
 void BeamWavelengthItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Beam/DistributionItems.cpp b/GUI/Model/Beam/DistributionItems.cpp
index 8054c535ccaf338588223ea141755863bfcb838b..11c6754a56fbfcd588ab496a43d2bbb61ed6b0fc 100644
--- a/GUI/Model/Beam/DistributionItems.cpp
+++ b/GUI/Model/Beam/DistributionItems.cpp
@@ -68,13 +68,13 @@ void DistributionItem::readFrom(QXmlStreamReader* r)
 
 // --------------------------------------------------------------------------------------------- //
 
-SymmetricResolutionItem::SymmetricResolutionItem(double mean, int decimals,
-                                                 const QString& meanLabel)
+SymmetricDistributionItem::SymmetricDistributionItem(double mean, int decimals,
+                                                     const QString& meanLabel)
 {
     m_mean.init(meanLabel, "", mean, decimals, RealLimits::limitless(), "mean");
 }
 
-void SymmetricResolutionItem::writeTo(QXmlStreamWriter* w) const
+void SymmetricDistributionItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeBaseElement<DistributionItem>(w, XML::Tag::BaseData, this);
 
@@ -82,7 +82,7 @@ void SymmetricResolutionItem::writeTo(QXmlStreamWriter* w) const
     m_mean.writeTo2(w, Tag::Mean);
 }
 
-void SymmetricResolutionItem::readFrom(QXmlStreamReader* r)
+void SymmetricDistributionItem::readFrom(QXmlStreamReader* r)
 {
     while (r->readNextStartElement()) {
         QString tag = r->name().toString();
@@ -98,7 +98,7 @@ void SymmetricResolutionItem::readFrom(QXmlStreamReader* r)
 // --------------------------------------------------------------------------------------------- //
 
 DistributionNoneItem::DistributionNoneItem()
-    : SymmetricResolutionItem(0.1, 3, "Value")
+    : SymmetricDistributionItem(0., 3, "Value")
 {
 }
 
@@ -157,7 +157,7 @@ DoubleProperties DistributionGateItem::distributionValues(bool /*withMean*/)
 // --------------------------------------------------------------------------------------------- //
 
 DistributionLorentzItem::DistributionLorentzItem()
-    : SymmetricResolutionItem(1.0)
+    : SymmetricDistributionItem(1.0)
 {
     m_hwhm.init("HWHM", "", 1.0, "hwhm");
 }
@@ -170,7 +170,7 @@ std::unique_ptr<IDistribution1D> DistributionLorentzItem::createDistribution(dou
 
 void DistributionLorentzItem::writeTo(QXmlStreamWriter* w) const
 {
-    XML::writeBaseElement<SymmetricResolutionItem>(w, XML::Tag::BaseData, this);
+    XML::writeBaseElement<SymmetricDistributionItem>(w, XML::Tag::BaseData, this);
 
     // half width at half maximum
     m_hwhm.writeTo2(w, Tag::HWHM);
@@ -181,7 +181,7 @@ void DistributionLorentzItem::readFrom(QXmlStreamReader* r)
     while (r->readNextStartElement()) {
         QString tag = r->name().toString();
         if (tag == Tag::BaseData)
-            XML::readBaseElement<SymmetricResolutionItem>(r, tag, this);
+            XML::readBaseElement<SymmetricDistributionItem>(r, tag, this);
         else if (tag == Tag::HWHM)
             m_hwhm.readFrom2(r, tag);
         else
@@ -198,7 +198,7 @@ DoubleProperties DistributionLorentzItem::distributionValues(bool withMean)
 // --------------------------------------------------------------------------------------------- //
 
 DistributionGaussianItem::DistributionGaussianItem()
-    : SymmetricResolutionItem(1.0)
+    : SymmetricDistributionItem(1.0)
 {
     m_standard_deviation.init("StdDev", "", 1.0, 3, RealLimits::lowerLimited(0.0), "stdDev");
 }
@@ -212,7 +212,7 @@ std::unique_ptr<IDistribution1D> DistributionGaussianItem::createDistribution(do
 
 void DistributionGaussianItem::writeTo(QXmlStreamWriter* w) const
 {
-    XML::writeBaseElement<SymmetricResolutionItem>(w, XML::Tag::BaseData, this);
+    XML::writeBaseElement<SymmetricDistributionItem>(w, XML::Tag::BaseData, this);
 
     // standard deviation
     m_standard_deviation.writeTo2(w, Tag::StandardDeviation);
@@ -223,7 +223,7 @@ void DistributionGaussianItem::readFrom(QXmlStreamReader* r)
     while (r->readNextStartElement()) {
         QString tag = r->name().toString();
         if (tag == Tag::BaseData)
-            XML::readBaseElement<SymmetricResolutionItem>(r, tag, this);
+            XML::readBaseElement<SymmetricDistributionItem>(r, tag, this);
         else if (tag == Tag::StandardDeviation)
             m_standard_deviation.readFrom2(r, tag);
         else
@@ -286,7 +286,7 @@ DoubleProperties DistributionLogNormalItem::distributionValues(bool /*withMean*/
 // --------------------------------------------------------------------------------------------- //
 
 DistributionCosineItem::DistributionCosineItem()
-    : SymmetricResolutionItem(1.0)
+    : SymmetricDistributionItem(1.0)
 {
     m_hwhm.init("HWHM", "", 1.0, 3, RealLimits::lowerLimited(0.0), "hwhm");
 }
@@ -299,7 +299,7 @@ std::unique_ptr<IDistribution1D> DistributionCosineItem::createDistribution(doub
 
 void DistributionCosineItem::writeTo(QXmlStreamWriter* w) const
 {
-    XML::writeBaseElement<SymmetricResolutionItem>(w, XML::Tag::BaseData, this);
+    XML::writeBaseElement<SymmetricDistributionItem>(w, XML::Tag::BaseData, this);
 
     // sigma
     m_hwhm.writeTo2(w, Tag::Sigma);
@@ -310,7 +310,7 @@ void DistributionCosineItem::readFrom(QXmlStreamReader* r)
     while (r->readNextStartElement()) {
         QString tag = r->name().toString();
         if (tag == Tag::BaseData)
-            XML::readBaseElement<SymmetricResolutionItem>(r, tag, this);
+            XML::readBaseElement<SymmetricDistributionItem>(r, tag, this);
         else if (tag == Tag::Sigma)
             m_hwhm.readFrom2(r, tag);
         else
diff --git a/GUI/Model/Beam/DistributionItems.h b/GUI/Model/Beam/DistributionItems.h
index fecfabf440a4912bbb5a2072cbae5576e3dfd4b5..773632e332a55eaec17af7706f7f3c2a0bfcd303 100644
--- a/GUI/Model/Beam/DistributionItems.h
+++ b/GUI/Model/Beam/DistributionItems.h
@@ -54,9 +54,9 @@ protected:
     DoubleProperty m_rel_sampling_width;
 };
 
-class SymmetricResolutionItem : public DistributionItem {
+class SymmetricDistributionItem : public DistributionItem {
 public:
-    SymmetricResolutionItem(double mean, int decimals = 3, const QString& meanLabel = "Mean");
+    SymmetricDistributionItem(double mean, int decimals = 3, const QString& meanLabel = "Mean");
 
     DoubleProperty& mean() { return m_mean; }
     const DoubleProperty& mean() const { return m_mean; }
@@ -71,7 +71,7 @@ protected:
     DoubleProperty m_mean;
 };
 
-class DistributionNoneItem : public SymmetricResolutionItem {
+class DistributionNoneItem : public SymmetricDistributionItem {
 public:
     DistributionNoneItem();
 
@@ -102,7 +102,7 @@ private:
     DoubleProperty m_halfwidth;
 };
 
-class DistributionLorentzItem : public SymmetricResolutionItem {
+class DistributionLorentzItem : public SymmetricDistributionItem {
 public:
     DistributionLorentzItem();
 
@@ -120,7 +120,7 @@ private:
     DoubleProperty m_hwhm;
 };
 
-class DistributionGaussianItem : public SymmetricResolutionItem {
+class DistributionGaussianItem : public SymmetricDistributionItem {
 public:
     DistributionGaussianItem();
 
@@ -163,7 +163,7 @@ private:
     DoubleProperty m_scale_parameter;
 };
 
-class DistributionCosineItem : public SymmetricResolutionItem {
+class DistributionCosineItem : public SymmetricDistributionItem {
 public:
     DistributionCosineItem();
 
diff --git a/GUI/Model/Beam/GrazingScanItem.cpp b/GUI/Model/Beam/GrazingScanItem.cpp
index 3a2b3786efc1be60d6d5ea49530bb382667f2a96..9e63956f9c82dea898ec7e81acec342a2c61e882 100644
--- a/GUI/Model/Beam/GrazingScanItem.cpp
+++ b/GUI/Model/Beam/GrazingScanItem.cpp
@@ -44,14 +44,6 @@ void setAxisPresentationDefaults(BasicAxisItem* axisItem)
     axisItem->resize(500);
 }
 
-void initDistribution(DistributionItem* new_distribution, const DistributionItem* old_distribution)
-{
-    ASSERT(new_distribution);
-    new_distribution->center().setDVal(old_distribution ? old_distribution->center().dVal() : 0.);
-    new_distribution->center().setDecimals(4);
-    new_distribution->center().setLimits(RealLimits::positive());
-};
-
 } // namespace
 
 
@@ -59,8 +51,7 @@ GrazingScanItem::GrazingScanItem()
     : BeamDistributionItem()
     , m_current_axis_is_uniform_axis(true)
 {
-    m_distribution.initWithInitializer("Distribution", "", DistributionCatalog::types(),
-                                       initDistribution);
+    m_distribution.simpleInit("Distribution", "", DistributionCatalog::Type::None);
 
     m_uniform_alpha_axis = std::make_unique<BasicAxisItem>();
     setAxisPresentationDefaults(m_uniform_alpha_axis.get());
diff --git a/GUI/Model/Descriptor/PolyItem.h b/GUI/Model/Descriptor/PolyItem.h
index 99ec86bda0958cef45bd8248da62cbaac2fdac83..ded0d48f75355954561ba2e38ed8436c8138a4c6 100644
--- a/GUI/Model/Descriptor/PolyItem.h
+++ b/GUI/Model/Descriptor/PolyItem.h
@@ -26,10 +26,6 @@ public:
     void simpleInit(const QString& label, const QString& tooltip,
                     typename Catalog::Type currentType);
 
-    void initWithInitializer(
-        const QString& label, const QString& tooltip, const QVector<typename Catalog::Type>& types,
-        std::function<void(BaseItem* newItem, const BaseItem* oldItem)> initializer);
-
     BaseItem* operator->() const { return m_item.get(); }
     BaseItem* certainItem() const { return m_item.get(); }
 
@@ -63,12 +59,6 @@ private:
     //! Reimplementable function to set currently selected option.
     std::function<void(int)> currentIndexSetter = nullptr;
 
-    //! Initializer function. Can be empty.
-    //! The first argument is the new item, the second is the old one if present; can be null.
-    //! This is intended to maybe copy values from the old to the new selection. oldItem also can be
-    //! ignored if not relevant,
-    std::function<void(BaseItem* newItem, const BaseItem* oldItem)> m_initializer;
-
     std::unique_ptr<BaseItem> m_item; //!< Current selection
 
     QString m_label;       //!< A label text (short, no trailing colon)
@@ -90,35 +80,10 @@ template <typename C> void PolyItem<C>::simpleInit(const QString& label, const Q
     setCurrentIndex(index);
 }
 
-//! Initialize by means of a catalog class, a subsection of allowed types and an initializer
-//! function.
-//!
-//! Same as before, but only a subset of types available in a catalog shall be used.
-//! The current selection will be initialized with the first type in the given types subset.
-//! Each newly created item can be initialized with the given initializer method. Note that the
-//! item creation will take place also after a call to this method, so take care that the given
-//! initializer stays valid throughout the lifetime of this PolyItem instance.
-//!
-//! The initializer function takes two arguments: The first is the new item, the second is the
-//! old one (if present; can be null). This is intended to maybe copy values from the old to the
-//! new selection. The old item also can be ignored, always according to the current needs.
-template <typename C> void PolyItem<C>::initWithInitializer(
-    const QString& label, const QString& tooltip, const QVector<typename C::Type>& types,
-    std::function<void(BaseItem* newItem, const BaseItem* oldItem)> initializer)
-{
-    m_initializer = initializer;
-    m_types = types;
-
-    initFieldsAndSetter(label, tooltip);
-    setCurrentIndex(0);
-}
-
 //! Directly set the new item.
 template <typename C> template <typename S> S* PolyItem<C>::createCertainItem()
 {
     auto* t = new S;
-    if (t != nullptr && m_initializer)
-        m_initializer(t, m_item.get());
     m_item.reset(t);
     return t;
 }
@@ -130,11 +95,8 @@ C::BaseItem* PolyItem<C>::readItemFrom(QXmlStreamReader* r, Args... args)
     const QString kind = XML::readString(r, XML::Attrib::kind);
     const auto type = static_cast<typename C::Type>(typeIndex);
     BaseItem* t = C::create(type, args...);
-    if (t) {
-        if (m_initializer)
-            m_initializer(t, m_item.get());
+    if (t)
         t->readFrom(r);
-    }
     return t;
 }
 
@@ -149,8 +111,6 @@ void PolyItem<C>::initFieldsAndSetter(const QString& label, const QString& toolt
 
     currentIndexSetter = [this](int current) {
         BaseItem* t = C::create(m_types[current]);
-        if (m_initializer)
-            m_initializer(t, m_item.get());
         m_item.reset(t);
     };
 }
diff --git a/GUI/Model/Sim/InstrumentItems.cpp b/GUI/Model/Sim/InstrumentItems.cpp
index 592d51ceb52a80693ee0b61cd92093e143ffd2b7..0d0a86399f34646235da471a3ca5014487353f4e 100644
--- a/GUI/Model/Sim/InstrumentItems.cpp
+++ b/GUI/Model/Sim/InstrumentItems.cpp
@@ -202,7 +202,7 @@ std::unique_ptr<PhysicalScan> ScanningInstrumentItem::createScan(const Scale& ax
         const BeamWavelengthItem* it = scanItem()->wavelengthItem();
         ASSERT(it);
         const auto* distr_item =
-            dynamic_cast<const SymmetricResolutionItem*>(it->distributionItem());
+            dynamic_cast<const SymmetricDistributionItem*>(it->distributionItem());
         ASSERT(distr_item);
 
         const double scale = it->scaleFactor();
@@ -214,7 +214,7 @@ std::unique_ptr<PhysicalScan> ScanningInstrumentItem::createScan(const Scale& ax
         const GrazingScanItem* it = scanItem()->grazingScanItem();
         ASSERT(it);
         const auto* distr_item =
-            dynamic_cast<const SymmetricResolutionItem*>(it->distributionItem());
+            dynamic_cast<const SymmetricDistributionItem*>(it->distributionItem());
         ASSERT(distr_item);
 
         const double scale = it->scaleFactor();
diff --git a/Tests/ReferenceData/Suite/Testing/Temporary/CTestCostData.txt b/Tests/ReferenceData/Suite/Testing/Temporary/CTestCostData.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ed97d539c095cf1413af30cc23dea272095b97dd
--- /dev/null
+++ b/Tests/ReferenceData/Suite/Testing/Temporary/CTestCostData.txt
@@ -0,0 +1 @@
+---