diff --git a/GUI/coregui/Models/ComboProperty.cpp b/GUI/coregui/Models/ComboProperty.cpp
index c59c75cfbf0d788b9f83a963e8c22215e5482b69..5bb96536271e51531fc168056fbb3f1da5d19dc1 100644
--- a/GUI/coregui/Models/ComboProperty.cpp
+++ b/GUI/coregui/Models/ComboProperty.cpp
@@ -19,11 +19,10 @@
 ComboProperty::ComboProperty(const QStringList &values, const QString &current_value)
     : m_values(values)
     , m_current_value(current_value)
+    , m_cache_contains_GUI_value(true)
 {
-
 }
 
-
 void ComboProperty::setValue(const QString &name)
 {
     Q_ASSERT(m_values.contains(name));
@@ -59,4 +58,3 @@ void ComboProperty::setCachedValue(const QString &name)
 {
     m_cached_value = name;
 }
-
diff --git a/GUI/coregui/Models/ComboProperty.h b/GUI/coregui/Models/ComboProperty.h
index 5d1e2d69732b0d5f94fafe9fc1d600c25ce1ec4d..bb7245c506cde1567836645a7e6cb38670b7587f 100644
--- a/GUI/coregui/Models/ComboProperty.h
+++ b/GUI/coregui/Models/ComboProperty.h
@@ -31,45 +31,91 @@ public:
 
     ComboProperty(const QStringList &values = QStringList(),
                   const QString &current_value = QString("Undefined"));
-    virtual ~ComboProperty(){}
-    QString getValue() const { return m_current_value; }
+    virtual ~ComboProperty() {}
+    QString getValue() const;
 
     void setValue(const QString &name);
-    bool operator!=(const ComboProperty &other) {
-        return (getValue() != other.getValue());
-    }
-    bool isDefined() { return m_current_value != QStringLiteral("Undefined"); }
+    bool operator!=(const ComboProperty &other);
+    bool isDefined();
 
-    QStringList getValues() const { return m_values;}
+    QStringList getValues() const;
 
     int index() const;
     int toIndex(const QString &value) const;
     QString toString(int index) const;
 
-    inline ComboProperty &operator<<(const QString &str)
-    {
-        m_values.append(str);
-        if(m_values.size()) m_current_value=m_values.at(0);
-        return *this;
-    }
+    inline ComboProperty &operator<<(const QString &str);
 
-    QVariant getVariant() const {
-        QVariant result;
-        result.setValue(*this);
-        return result;
-    }
+    QVariant getVariant() const;
 
-    int getIndex() const { return toIndex(m_current_value); }
+    int getIndex() const;
 
-    QString getCachedValue() const { return m_cached_value; }
+    QString getCachedValue() const;
     void setCachedValue(const QString &name);
 
+    bool cacheContainsGUIValue() const;
+    void setCacheContainsGUIFlag(bool flag=true);
+
 private:
     QStringList m_values;
     QString m_current_value;
     QString m_cached_value;  // for comboboxes with dynamically generated value lists
+    bool m_cache_contains_GUI_value;
 };
 
+inline QString ComboProperty::getValue() const
+{
+    return m_current_value;
+}
+
+inline bool ComboProperty::operator!=(const ComboProperty &other)
+{
+    return (getValue() != other.getValue());
+}
+
+inline bool ComboProperty::isDefined()
+{
+    return m_current_value != QStringLiteral("Undefined");
+}
+
+inline QStringList ComboProperty::getValues() const
+{
+    return m_values;
+}
+
+inline ComboProperty &ComboProperty::operator<<(const QString &str)
+{
+    m_values.append(str);
+    if(m_values.size()) m_current_value=m_values.at(0);
+    return *this;
+}
+
+inline QVariant ComboProperty::getVariant() const {
+    QVariant result;
+    result.setValue(*this);
+    return result;
+}
+
+inline int ComboProperty::getIndex() const
+{
+    return toIndex(m_current_value);
+}
+
+inline QString ComboProperty::getCachedValue() const
+{
+    return m_cached_value;
+}
+
+inline bool ComboProperty::cacheContainsGUIValue() const
+{
+    return m_cache_contains_GUI_value;
+}
+
+inline void ComboProperty::setCacheContainsGUIFlag(bool flag)
+{
+    m_cache_contains_GUI_value = flag;
+}
+
 Q_DECLARE_METATYPE(ComboProperty)
 
 
diff --git a/GUI/coregui/Models/ParameterTranslators.cpp b/GUI/coregui/Models/ParameterTranslators.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..14f1a2285a785158702d1c38af4b77603b8f0f9c
--- /dev/null
+++ b/GUI/coregui/Models/ParameterTranslators.cpp
@@ -0,0 +1,57 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      coregui/Models/ParameterTranslators.cpp
+//! @brief     Implements subclasses of IParameterTranslator
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#include "ParameterTranslators.h"
+#include "ParticleItem.h"
+#include "VectorItem.h"
+#include "BornAgainNamespace.h"
+
+
+PositionTranslator::PositionTranslator()
+{
+}
+
+PositionTranslator *PositionTranslator::clone() const
+{
+    return new PositionTranslator();
+}
+
+QStringList PositionTranslator::split(const QString &par_name) const
+{
+    QStringList result;
+    auto position_name = translate(par_name);
+    if (!position_name.empty()) {
+        result << par_name;
+    }
+    return result;
+}
+
+std::string PositionTranslator::translate(const QString &name) const
+{
+    auto name_list = name.split(QString("/"));
+    if (name_list.size() > 2) return "";
+    if (name_list.size() > 1 && name_list[0] == ParticleItem::P_POSITION) {
+        if (name_list[1] == VectorItem::P_X) {
+            return BornAgain::PositionX;
+        }
+        if (name_list[1] == VectorItem::P_Y) {
+            return BornAgain::PositionY;
+        }
+        if (name_list[1] == VectorItem::P_Z) {
+            return BornAgain::PositionZ;
+        }
+    }
+    return "";
+}
diff --git a/GUI/coregui/Models/ParameterTranslators.h b/GUI/coregui/Models/ParameterTranslators.h
new file mode 100644
index 0000000000000000000000000000000000000000..5b5364d374f91ade2441c7505f7751564293b94a
--- /dev/null
+++ b/GUI/coregui/Models/ParameterTranslators.h
@@ -0,0 +1,43 @@
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      coregui/Models/ParameterTranslators.h
+//! @brief     Defines interface IParameterTranslator and subclasses
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#ifndef PARAMETERTRANSLATORS_H
+#define PARAMETERTRANSLATORS_H
+
+#include <string>
+#include <QStringList>
+
+class IParameterTranslator {
+public:
+    virtual ~IParameterTranslator() {}
+
+    virtual IParameterTranslator *clone() const=0;
+
+    virtual QStringList split(const QString &par_name) const=0;
+    virtual std::string translate(const QString &name) const=0;
+};
+
+class PositionTranslator : public IParameterTranslator {
+public:
+    PositionTranslator();
+    virtual ~PositionTranslator() {}
+
+    virtual PositionTranslator *clone() const;
+
+    virtual QStringList split(const QString &par_name) const;
+    virtual std::string translate(const QString &name) const;
+};
+
+#endif // PARAMETERTRANSLATORS_H
+
diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp
index 48a79949dad2e75c1fb12fe8285e5467869d83ea..93b63d21b55da69267ed090d3670c34a73e59c96 100644
--- a/GUI/coregui/Models/ParameterizedItem.cpp
+++ b/GUI/coregui/Models/ParameterizedItem.cpp
@@ -506,6 +506,12 @@ void ParameterizedItem::swapChildren(int first, int second)
 QStringList ParameterizedItem::splitParameterName(const QString &par_name) const
 {
     QStringList result;
+    for (auto& translator : m_special_translators) {
+        result = translator->split(par_name);
+        if (result.size() > 0) {
+            return result;
+        }
+    }
     result << getFirstField(par_name);
     QString remainder = stripFirstField(par_name);
     if (!remainder.isEmpty()) {
@@ -531,9 +537,20 @@ QString ParameterizedItem::stripFirstField(const QString &par_name) const
 
 std::string ParameterizedItem::translateSingleName(const QString &name) const
 {
+    for (auto& translator : m_special_translators) {
+        auto result = translator->translate(name);
+        if (!result.empty()) {
+            return result;
+        }
+    }
     return name.toStdString();
 }
 
+void ParameterizedItem::addParameterTranslator(const IParameterTranslator &translator)
+{
+    m_special_translators.emplace_back(translator.clone());
+}
+
 ParameterizedItem *ParameterizedItem::getChildByDisplayName(const QString &name) const
 {
     // look through child items:
diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h
index 38846f196da3e5bae94a43a323eb0291916762a6..1c63f1d987a82b79e2b0b1bb3934abd3d944e166 100644
--- a/GUI/coregui/Models/ParameterizedItem.h
+++ b/GUI/coregui/Models/ParameterizedItem.h
@@ -20,6 +20,9 @@
 #include "item_constants.h"
 #include "PropertyAttribute.h"
 #include "MaterialProperty.h"
+#include "ParameterTranslators.h"
+
+#include <memory>
 #include <QStandardItem>
 #include <QStringList>
 #include <QList>
@@ -165,7 +168,7 @@ protected:
     //! use this to enforce a specific order when this matters
     void swapChildren(int first, int second);
 
-    virtual QStringList splitParameterName(const QString& par_name) const;
+    QStringList splitParameterName(const QString& par_name) const;
 
     QString getFirstField(const QString &par_name) const;
 
@@ -173,6 +176,8 @@ protected:
 
     virtual std::string translateSingleName(const QString &name) const;
 
+    void addParameterTranslator(const IParameterTranslator &translator);
+
     ParameterizedItem* getChildByDisplayName(const QString &name) const;
 
     QStringList m_registered_properties;
@@ -190,6 +195,7 @@ private:
     ParameterizedItem *mp_parent;
     QList<ParameterizedItem *> m_children;
     QMap<QString, ParameterizedItem *> m_sub_items;
+    std::vector<std::unique_ptr<IParameterTranslator>> m_special_translators;
 };
 
 #endif /* PARAMETERIZEDITEM_H_ */
diff --git a/GUI/coregui/Models/ParticleCompositionItem.cpp b/GUI/coregui/Models/ParticleCompositionItem.cpp
index ce2feb25588c05ea4db5823ce0148eacb3bc262a..c3e9ebb94f9602539f93291b58ec21fec00617a1 100644
--- a/GUI/coregui/Models/ParticleCompositionItem.cpp
+++ b/GUI/coregui/Models/ParticleCompositionItem.cpp
@@ -27,6 +27,8 @@ ParticleCompositionItem::ParticleCompositionItem(ParameterizedItem *parent)
     registerProperty(ParticleItem::P_ABUNDANCE, 1.0,
                      PropertyAttribute(AttLimits::limited(0.0, 1.0), 3));
     registerGroupProperty(ParticleItem::P_POSITION, Constants::VectorType);
+    PositionTranslator position_translator;
+    addParameterTranslator(position_translator);
 
     addToValidChildren(Constants::ParticleType, PortInfo::PORT_0);
     addToValidChildren(Constants::ParticleCoreShellType, PortInfo::PORT_0);
diff --git a/GUI/coregui/Models/ParticleCoreShellItem.cpp b/GUI/coregui/Models/ParticleCoreShellItem.cpp
index 8bb3c186cf5dd22f4269025bfa248c3d9e87d6c4..3eca0879ba8fd3aa6756ec03147e2d050e25f9df 100644
--- a/GUI/coregui/Models/ParticleCoreShellItem.cpp
+++ b/GUI/coregui/Models/ParticleCoreShellItem.cpp
@@ -28,6 +28,8 @@ ParticleCoreShellItem::ParticleCoreShellItem(ParameterizedItem *parent)
     registerProperty(ParticleItem::P_ABUNDANCE, 1.0,
                      PropertyAttribute(AttLimits::limited(0.0, 1.0), 3));
     registerGroupProperty(ParticleItem::P_POSITION, Constants::VectorType);
+    PositionTranslator position_translator;
+    addParameterTranslator(position_translator);
 
     addToValidChildren(Constants::ParticleType, PortInfo::PORT_0, 1); // Core particle
     addToValidChildren(Constants::ParticleType, PortInfo::PORT_1, 1); // Shell particle
diff --git a/GUI/coregui/Models/ParticleCoreShellItem.h b/GUI/coregui/Models/ParticleCoreShellItem.h
index aad1e6f8c48e1899637e781ab55592caa79e8225..a670e83a41f6268421e6405b7d485e07e4053d1b 100644
--- a/GUI/coregui/Models/ParticleCoreShellItem.h
+++ b/GUI/coregui/Models/ParticleCoreShellItem.h
@@ -34,6 +34,7 @@ public:
     std::unique_ptr<ParticleCoreShell> createParticleCoreShell() const;
 
     void notifyChildParticlePortChanged();
+
 private:
     PortInfo::EPorts getFirstAvailableParticlePort() const;
 };
diff --git a/GUI/coregui/Models/ParticleDistributionItem.cpp b/GUI/coregui/Models/ParticleDistributionItem.cpp
index 55d1994a94ab4018dfac02757abbb23d3c3766ac..41da2b492ac8e99dd75d55ff50dd696a860ae8ad 100644
--- a/GUI/coregui/Models/ParticleDistributionItem.cpp
+++ b/GUI/coregui/Models/ParticleDistributionItem.cpp
@@ -20,6 +20,7 @@
 #include "ParticleCoreShell.h"
 #include "DomainObjectBuilder.h"
 #include "TransformToDomain.h"
+#include "TransformFromDomain.h"
 #include "DistributionItem.h"
 #include "Distributions.h"
 #include "ComboProperty.h"
@@ -111,13 +112,22 @@ void ParticleDistributionItem::updateParameterList()
     if (!isRegisteredProperty(P_DISTRIBUTED_PARAMETER))
         return;
     QVariant par_prop = getRegisteredProperty(P_DISTRIBUTED_PARAMETER);
-    QString selected_par = par_prop.value<ComboProperty>().getValue();
-    QString cached_par = par_prop.value<ComboProperty>().getCachedValue();
-    ComboProperty updated_prop;
+    auto combo_prop = par_prop.value<ComboProperty>();
+    QString cached_par = combo_prop.getCachedValue();
+    if (!combo_prop.cacheContainsGUIValue()) {
+        auto gui_name = TransformFromDomain::translateParameterNameToGUI(this, cached_par);
+        if (!gui_name.isEmpty()) {
+            cached_par = gui_name;
+            combo_prop.setCachedValue(cached_par);
+            combo_prop.setCacheContainsGUIFlag();
+        }
+    }
+    QString selected_par = combo_prop.getValue();
     QStringList par_names = getChildParameterNames();
     par_names.removeAll(ParticleItem::P_ABUNDANCE);
-    updated_prop = ComboProperty(par_names);
+    auto updated_prop = ComboProperty(par_names);
     updated_prop.setCachedValue(cached_par);
+    updated_prop.setCacheContainsGUIFlag(combo_prop.cacheContainsGUIValue());
     if (updated_prop.getValues().contains(cached_par) ) {
         updated_prop.setValue(cached_par);
     } else if (updated_prop.getValues().contains(selected_par)) {
diff --git a/GUI/coregui/Models/ParticleItem.cpp b/GUI/coregui/Models/ParticleItem.cpp
index 892110f532e62d40af6038b414ec9e22d8e1c932..b2f9ca1fc0350ed1e3653e977dd45b5c492c79cc 100644
--- a/GUI/coregui/Models/ParticleItem.cpp
+++ b/GUI/coregui/Models/ParticleItem.cpp
@@ -39,6 +39,8 @@ ParticleItem::ParticleItem(ParameterizedItem *parent)
     registerProperty(P_ABUNDANCE, 1.0,
                      PropertyAttribute(AttLimits::limited(0.0, 1.0),3));
     registerGroupProperty(P_POSITION, Constants::VectorType);
+    PositionTranslator position_translator;
+    addParameterTranslator(position_translator);
 
     addToValidChildren(Constants::TransformationType, PortInfo::PORT_0, 1);
     setPropertyAppearance(ParameterizedItem::P_NAME,
diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp
index bfd4553126a05178597c3ef22001f2da7b0d31e5..f73097b432b2f23f5e00aa2238f351071acc500a 100644
--- a/GUI/coregui/Models/TransformFromDomain.cpp
+++ b/GUI/coregui/Models/TransformFromDomain.cpp
@@ -347,6 +347,7 @@ void TransformFromDomain::setItemFromSample(ParameterizedItem *item,
         = item->getRegisteredProperty(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER)
               .value<ComboProperty>();
     combo_property.setCachedValue(main_distr_par_name);
+    combo_property.setCacheContainsGUIFlag(false);
     item->setRegisteredProperty(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER,
                                 combo_property.getVariant());
 
@@ -581,3 +582,16 @@ void TransformFromDomain::setItemFromSample(BeamDistributionItem *beamDistributi
         distributionItem->setRegisteredProperty(DistributionItem::P_SIGMA_FACTOR, sigma_factor);
     }
 }
+
+QString TransformFromDomain::translateParameterNameToGUI(ParameterizedItem *item,
+                                                         const QString &par_name)
+{
+    auto gui_par_list = item->getParameterTreeList();
+    for (auto gui_par_name : gui_par_list) {
+        auto domain_par_name = QString::fromStdString(item->translateParameterName(gui_par_name));
+        if (domain_par_name == par_name) {
+            return gui_par_name;
+        }
+    }
+    return QString();
+}
diff --git a/GUI/coregui/Models/TransformFromDomain.h b/GUI/coregui/Models/TransformFromDomain.h
index 934e4d072601671556c66133ff5b443b92cf6a90..cf2c57e083b4c2f79c5f3804a8b14899fb635eb4 100644
--- a/GUI/coregui/Models/TransformFromDomain.h
+++ b/GUI/coregui/Models/TransformFromDomain.h
@@ -40,17 +40,16 @@ class IDistribution1D;
 
 namespace TransformFromDomain
 {
-BA_CORE_API_ void setItemFromSample(ParameterizedItem *item,
-                       const FormFactorAnisoPyramid *sample);
+BA_CORE_API_ void setItemFromSample(ParameterizedItem *item, const FormFactorAnisoPyramid *sample);
 
 BA_CORE_API_ void setItemFromSample(ParameterizedItem *item,
-                       const InterferenceFunctionRadialParaCrystal *sample);
+                                    const InterferenceFunctionRadialParaCrystal *sample);
 
 BA_CORE_API_ void setItemFromSample(ParameterizedItem *item,
-                       const InterferenceFunction2DParaCrystal *sample);
+                                    const InterferenceFunction2DParaCrystal *sample);
 
 BA_CORE_API_ void setItemFromSample(ParameterizedItem *item,
-                       const InterferenceFunction2DLattice *sample);
+                                    const InterferenceFunction2DLattice *sample);
 
 BA_CORE_API_ void setItemFromSample(ParameterizedItem *layerItem,
                                     const Layer *layer,
@@ -68,10 +67,13 @@ BA_CORE_API_ bool isHexagonalLattice(double length1, double length2, double angl
 
 BA_CORE_API_ void setItemFromSample(BeamItem *beamItem, const GISASSimulation &simulation);
 
-BA_CORE_API_ void setItemFromSample(PhiAlphaDetectorItem *detectorItem, const GISASSimulation &simulation);
+BA_CORE_API_ void setItemFromSample(PhiAlphaDetectorItem *detectorItem,
+                                    const GISASSimulation &simulation);
 
-BA_CORE_API_ void setItemFromSample(BeamDistributionItem *beamDistributionItem, const ParameterDistribution &parameterDistribution);
+BA_CORE_API_ void setItemFromSample(BeamDistributionItem *beamDistributionItem,
+                                    const ParameterDistribution &parameterDistribution);
 
+BA_CORE_API_ QString translateParameterNameToGUI(ParameterizedItem *item, const QString &par_name);
 }
 
 #endif