diff --git a/GUI/Models/DistributionItems.cpp b/GUI/Models/DistributionItems.cpp
index 22b710b61ec7fbbb5489007566f0ad6c31790942..119fe7ea59d2a5bb2aa95174e5b2738032071e8e 100644
--- a/GUI/Models/DistributionItems.cpp
+++ b/GUI/Models/DistributionItems.cpp
@@ -201,7 +201,9 @@ void DistributionNoneItem::init_distribution(double value)
 const QString DistributionGateItem::P_MIN = QString::fromStdString("Min");
 const QString DistributionGateItem::P_MAX = QString::fromStdString("Max");
 
-DistributionGateItem::DistributionGateItem() : DistributionItem("DistributionGate")
+const QString DistributionGateItem::M_TYPE = "DistributionGate";
+
+DistributionGateItem::DistributionGateItem() : DistributionItem(M_TYPE)
 {
     addProperty(P_MIN, 0.0)->setLimits(RealLimits::limitless());
     addProperty(P_MAX, 1.0)->setLimits(RealLimits::limitless());
@@ -230,8 +232,10 @@ void DistributionGateItem::init_distribution(double value)
 
 const QString DistributionLorentzItem::P_HWHM = QString::fromStdString("HWHM");
 
+const QString DistributionLorentzItem::M_TYPE = "DistributionLorentz";
+
 DistributionLorentzItem::DistributionLorentzItem()
-    : SymmetricDistributionItem("DistributionLorentz", 1.0)
+    : SymmetricDistributionItem(M_TYPE, 1.0)
 {
     addProperty(P_HWHM, 1.0);
     register_number_of_samples();
@@ -272,8 +276,10 @@ void DistributionLorentzItem::init_distribution(double value)
 
 const QString DistributionGaussianItem::P_STD_DEV = QString::fromStdString("StdDev");
 
+const QString DistributionGaussianItem::M_TYPE = "DistributionGaussian";
+
 DistributionGaussianItem::DistributionGaussianItem()
-    : SymmetricDistributionItem("DistributionGaussian", 1.0)
+    : SymmetricDistributionItem(M_TYPE, 1.0)
 {
     addProperty(P_STD_DEV, 1.0);
     register_number_of_samples();
@@ -315,7 +321,9 @@ void DistributionGaussianItem::init_distribution(double value)
 const QString DistributionLogNormalItem::P_MEDIAN = QString::fromStdString("Median");
 const QString DistributionLogNormalItem::P_SCALE_PAR = QString::fromStdString("ScaleParameter");
 
-DistributionLogNormalItem::DistributionLogNormalItem() : DistributionItem("DistributionLogNormal")
+const QString DistributionLogNormalItem::M_TYPE = "DistributionLogNormal";
+
+DistributionLogNormalItem::DistributionLogNormalItem() : DistributionItem(M_TYPE)
 {
     addProperty(P_MEDIAN, 1.0);
     addProperty(P_SCALE_PAR, 1.0);
@@ -351,8 +359,10 @@ void DistributionLogNormalItem::showMean(bool flag)
 
 const QString DistributionCosineItem::P_SIGMA = QString::fromStdString("Sigma");
 
+const QString DistributionCosineItem::M_TYPE = "DistributionCosine";
+
 DistributionCosineItem::DistributionCosineItem()
-    : SymmetricDistributionItem("DistributionCosine", 1.0)
+    : SymmetricDistributionItem(M_TYPE, 1.0)
 {
     addProperty(P_SIGMA, 1.0);
     register_number_of_samples();
@@ -396,7 +406,9 @@ const QString DistributionTrapezoidItem::P_LEFTWIDTH = QString::fromStdString("L
 const QString DistributionTrapezoidItem::P_MIDDLEWIDTH = QString::fromStdString("MiddleWidth");
 const QString DistributionTrapezoidItem::P_RIGHTWIDTH = QString::fromStdString("RightWidth");
 
-DistributionTrapezoidItem::DistributionTrapezoidItem() : DistributionItem("DistributionTrapezoid")
+const QString DistributionTrapezoidItem::M_TYPE = "DistributionTrapezoid";
+
+DistributionTrapezoidItem::DistributionTrapezoidItem() : DistributionItem(M_TYPE)
 {
     addProperty(P_CENTER, 1.0)->setLimits(RealLimits::limitless());
     addProperty(P_LEFTWIDTH, 1.0);
diff --git a/GUI/Models/DistributionItems.h b/GUI/Models/DistributionItems.h
index 6e0e59ead9832a114ddd8fc8dc031064293e2ccc..8f80904f1d8640593483f4ecdd12fc7956fc2601 100644
--- a/GUI/Models/DistributionItems.h
+++ b/GUI/Models/DistributionItems.h
@@ -88,6 +88,9 @@ class BA_CORE_API_ DistributionGateItem : public DistributionItem {
 public:
     static const QString P_MIN;
     static const QString P_MAX;
+
+    static const QString M_TYPE;
+
     DistributionGateItem();
 
     std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
@@ -98,6 +101,9 @@ public:
 class BA_CORE_API_ DistributionLorentzItem : public SymmetricDistributionItem {
 public:
     static const QString P_HWHM;
+
+    static const QString M_TYPE;
+
     DistributionLorentzItem();
 
     std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
@@ -109,6 +115,9 @@ public:
 class BA_CORE_API_ DistributionGaussianItem : public SymmetricDistributionItem {
 public:
     static const QString P_STD_DEV;
+
+    static const QString M_TYPE;
+
     DistributionGaussianItem();
 
     std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
@@ -122,6 +131,9 @@ class BA_CORE_API_ DistributionLogNormalItem : public DistributionItem {
 public:
     static const QString P_MEDIAN;
     static const QString P_SCALE_PAR;
+
+    static const QString M_TYPE;    
+
     DistributionLogNormalItem();
 
     std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
@@ -132,6 +144,9 @@ public:
 class BA_CORE_API_ DistributionCosineItem : public SymmetricDistributionItem {
 public:
     static const QString P_SIGMA;
+
+    static const QString M_TYPE;
+
     DistributionCosineItem();
 
     std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
@@ -146,6 +161,9 @@ public:
     static const QString P_LEFTWIDTH;
     static const QString P_MIDDLEWIDTH;
     static const QString P_RIGHTWIDTH;
+
+    static const QString M_TYPE;
+
     DistributionTrapezoidItem();
 
     std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
diff --git a/GUI/Models/GroupInfoCatalog.cpp b/GUI/Models/GroupInfoCatalog.cpp
index 0663602edda33044e5cad71f9ab29624c3488b17..ce4843cd630d33a11308972ecf8ea7c3428e46ac 100644
--- a/GUI/Models/GroupInfoCatalog.cpp
+++ b/GUI/Models/GroupInfoCatalog.cpp
@@ -74,31 +74,31 @@ GroupInfoCatalog::GroupInfoCatalog()
     addInfo(info);
 
     info = GroupInfo("Distribution group");
-    info.add("DistributionGate", "Gate distribution");
-    info.add("DistributionLorentz", "Lorentz distribution");
-    info.add("DistributionGaussian", "Gaussian distribution");
-    info.add("DistributionLogNormal", "Log Normal distribution");
-    info.add("DistributionCosine", "Cosine distribution");
-    info.add("DistributionTrapezoid", "Trapezoid distribution");
-    info.setDefaultType("DistributionGaussian");
+    info.add(DistributionGateItem::M_TYPE, "Gate distribution");
+    info.add(DistributionLorentzItem::M_TYPE, "Lorentz distribution");
+    info.add(DistributionGaussianItem::M_TYPE, "Gaussian distribution");
+    info.add(DistributionLogNormalItem::M_TYPE, "Log Normal distribution");
+    info.add(DistributionCosineItem::M_TYPE, "Cosine distribution");
+    info.add(DistributionTrapezoidItem::M_TYPE, "Trapezoid distribution");
+    info.setDefaultType(DistributionGaussianItem::M_TYPE);
     addInfo(info);
 
     info = GroupInfo("Distribution extended group");
     info.add(DistributionNoneItem::M_TYPE, "None");
-    info.add("DistributionGate", "Gate");
-    info.add("DistributionLorentz", "Lorentz");
-    info.add("DistributionGaussian", "Gaussian");
-    info.add("DistributionLogNormal", "Log Normal");
-    info.add("DistributionCosine", "Cosine");
-    info.add("DistributionTrapezoid", "Trapezoid");
+    info.add(DistributionGateItem::M_TYPE, "Gate");
+    info.add(DistributionLorentzItem::M_TYPE, "Lorentz");
+    info.add(DistributionGaussianItem::M_TYPE, "Gaussian");
+    info.add(DistributionLogNormalItem::M_TYPE, "Log Normal");
+    info.add(DistributionCosineItem::M_TYPE, "Cosine");
+    info.add(DistributionTrapezoidItem::M_TYPE, "Trapezoid");
     info.setDefaultType(DistributionNoneItem::M_TYPE);
     addInfo(info);
 
     info = GroupInfo("Symmetric distribution group");
     info.add(DistributionNoneItem::M_TYPE, "None");
-    info.add("DistributionLorentz", "Lorentz");
-    info.add("DistributionGaussian", "Gaussian");
-    info.add("DistributionCosine", "Cosine");
+    info.add(DistributionLorentzItem::M_TYPE, "Lorentz");
+    info.add(DistributionGaussianItem::M_TYPE, "Gaussian");
+    info.add(DistributionCosineItem::M_TYPE, "Cosine");
     info.setDefaultType(DistributionNoneItem::M_TYPE);
     addInfo(info);
 
diff --git a/GUI/Models/ItemCatalog.cpp b/GUI/Models/ItemCatalog.cpp
index d94403654f7fc6b4320b403f108d1d36774fe1e9..c8ddfdfbfbd9b6b0ac1c3f4b60d0e0492d94d17d 100644
--- a/GUI/Models/ItemCatalog.cpp
+++ b/GUI/Models/ItemCatalog.cpp
@@ -132,12 +132,12 @@ ItemCatalog::ItemCatalog()
     add("RectangularDetector", create_new<RectangularDetectorItem>);
 
     addItem<DistributionNoneItem>();
-    add("DistributionGate", create_new<DistributionGateItem>);
-    add("DistributionLorentz", create_new<DistributionLorentzItem>);
-    add("DistributionGaussian", create_new<DistributionGaussianItem>);
-    add("DistributionLogNormal", create_new<DistributionLogNormalItem>);
-    add("DistributionCosine", create_new<DistributionCosineItem>);
-    add("DistributionTrapezoid", create_new<DistributionTrapezoidItem>);
+    addItem<DistributionGateItem>();
+    addItem<DistributionLorentzItem>();
+    addItem<DistributionGaussianItem>();
+    addItem<DistributionLogNormalItem>();
+    addItem<DistributionCosineItem>();
+    addItem<DistributionTrapezoidItem>();
 
     add("FTDistribution1DCauchy", create_new<FTDistribution1DCauchyItem>);
     add("FTDistribution1DGauss", create_new<FTDistribution1DGaussItem>);
diff --git a/GUI/Models/TransformFromDomain.cpp b/GUI/Models/TransformFromDomain.cpp
index c6c59bc073e167cf18a761241a006f441fab0233..d74793fec0d78f82876ad0c5860d2e6bac47fd58 100644
--- a/GUI/Models/TransformFromDomain.cpp
+++ b/GUI/Models/TransformFromDomain.cpp
@@ -749,14 +749,14 @@ void setDistribution(BeamDistributionItem* part_distr_item, ParameterDistributio
 
     SessionItem* item = nullptr;
     if (const DistributionGate* distr = dynamic_cast<const DistributionGate*>(p_distribution)) {
-        item = part_distr_item->setDistributionGroupItem("DistributionGate");
+        item = part_distr_item->setDistributionGroupItem(DistributionGateItem::M_TYPE);
         item->setItemValue(DistributionGateItem::P_MIN, factor * distr->lowerBound());
         item->setItemValue(DistributionGateItem::P_MAX, factor * distr->upperBound());
     } else if (const DistributionLorentz* distr =
                    dynamic_cast<const DistributionLorentz*>(p_distribution)) {
         DistributionLorentzItem* distr_lorentz_item =
             dynamic_cast<DistributionLorentzItem*>
-            (part_distr_item->setDistributionGroupItem("DistributionLorentz"));
+            (part_distr_item->setDistributionGroupItem(DistributionLorentzItem::M_TYPE));
         distr_lorentz_item->setMeanValue(factor * distr->getMean());
         distr_lorentz_item->setItemValue(DistributionLorentzItem::P_HWHM,
                                          factor * distr->getHWHM());
@@ -765,27 +765,27 @@ void setDistribution(BeamDistributionItem* part_distr_item, ParameterDistributio
                    dynamic_cast<const DistributionGaussian*>(p_distribution)) {
         DistributionGaussianItem* distr_gauss_item =
             dynamic_cast<DistributionGaussianItem*>
-            (part_distr_item->setDistributionGroupItem("DistributionGaussian"));
+            (part_distr_item->setDistributionGroupItem(DistributionGaussianItem::M_TYPE));
         distr_gauss_item->setMeanValue(factor * distr->getMean());
         distr_gauss_item->setItemValue(DistributionGaussianItem::P_STD_DEV,
                                        factor * distr->getStdDev());
         item = distr_gauss_item;
     } else if (const DistributionLogNormal* distr =
                    dynamic_cast<const DistributionLogNormal*>(p_distribution)) {
-        item = part_distr_item->setDistributionGroupItem("DistributionLogNormal");
+        item = part_distr_item->setDistributionGroupItem(DistributionLogNormalItem::M_TYPE);
         item->setItemValue(DistributionLogNormalItem::P_MEDIAN, factor * distr->getMedian());
         item->setItemValue(DistributionLogNormalItem::P_SCALE_PAR, distr->getScalePar());
     } else if (const DistributionCosine* distr =
                    dynamic_cast<const DistributionCosine*>(p_distribution)) {
         DistributionCosineItem* distr_cos_item =
             dynamic_cast<DistributionCosineItem*>
-            (part_distr_item->setDistributionGroupItem("DistributionCosine"));
+            (part_distr_item->setDistributionGroupItem(DistributionCosineItem::M_TYPE));
         distr_cos_item->setMeanValue(factor * distr->getMean());
         distr_cos_item->setItemValue(DistributionCosineItem::P_SIGMA, factor * distr->getSigma());
         item = distr_cos_item;
     } else if (const DistributionTrapezoid* distr =
                    dynamic_cast<const DistributionTrapezoid*>(p_distribution)) {
-        item = part_distr_item->setDistributionGroupItem("DistributionTrapezoid");
+        item = part_distr_item->setDistributionGroupItem(DistributionTrapezoidItem::M_TYPE);
         item->setItemValue(DistributionTrapezoidItem::P_CENTER, factor * distr->getMean());
         item->setItemValue(DistributionTrapezoidItem::P_LEFTWIDTH, factor * distr->getLeftWidth());
         item->setItemValue(DistributionTrapezoidItem::P_MIDDLEWIDTH,