diff --git a/GUI/coregui/Models/ParameterTreeUtils.cpp b/GUI/coregui/Models/ParameterTreeUtils.cpp
index 06cfe5bb42a89663c087e4eb1eb31522f2abb54f..4d1284b62cde0c56c98118306a889f4f02b79438 100644
--- a/GUI/coregui/Models/ParameterTreeUtils.cpp
+++ b/GUI/coregui/Models/ParameterTreeUtils.cpp
@@ -50,7 +50,8 @@ void ParameterTreeUtils::createParameterTree(JobItem* jobItem)
 //! Populates ParameterContainer with ParameterItem's corresponding to all properties found
 //! in a source item.
 
-void ParameterTreeUtils::populateParameterContainer(SessionItem* container, const SessionItem* source)
+void ParameterTreeUtils::populateParameterContainer(SessionItem* container,
+                                                    const SessionItem* source)
 {
     if(container->modelType() != Constants::ParameterContainerType)
         throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. "
@@ -61,14 +62,11 @@ void ParameterTreeUtils::populateParameterContainer(SessionItem* container, cons
     handleItem(sourceLabel, source);
 }
 
-//! For every ParameterItem in a container creates a link to the domain.
+//! Visit all ParameterItem in container and execute user function.
 
-void ParameterTreeUtils::populateDomainLinks(SessionItem* container)
+void ParameterTreeUtils::visitParameterContainer(SessionItem* container,
+                                                 std::function<void(ParameterItem*)> fun)
 {
-    if(container->modelType() != Constants::ParameterContainerType)
-        throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. "
-                                "Not a ParameterContainerType.");
-
     SessionItem* current(container);
     QStack<SessionItem*> stack;
     stack.push(current);
@@ -76,19 +74,31 @@ void ParameterTreeUtils::populateDomainLinks(SessionItem* container)
         current = stack.pop();
         if (current->modelType() == Constants::ParameterLabelType
             || current->modelType() == Constants::ParameterContainerType) {
-            for (SessionItem* child : current->getItems()) {
+            for (SessionItem* child : current->getItems())
                 stack.push(child);
-            }
         } else {
-            if (ParameterItem* parItem = dynamic_cast<ParameterItem*>(current)) {
-                QString translation
-                    = "*/" + ModelPath::itemPathTranslation(*parItem->linkedItem(), container);
-                parItem->setItemValue(ParameterItem::P_DOMAIN, translation);
-            }
+            if (ParameterItem* parItem = dynamic_cast<ParameterItem*>(current))
+                fun(parItem);
         }
     }
 }
 
+//! For every ParameterItem in a container creates a link to the domain.
+
+void ParameterTreeUtils::populateDomainLinks(SessionItem* container)
+{
+    if(container->modelType() != Constants::ParameterContainerType)
+        throw GUIHelpers::Error("ParameterTreeUtils::populateParameterContainer() -> Error. "
+                                "Not a ParameterContainerType.");
+
+    visitParameterContainer(container, [container](ParameterItem* parItem)
+    {
+        QString translation = "*/" + ModelPath::itemPathTranslation(*parItem->linkedItem(),
+                                                                    container->parent());
+        parItem->setItemValue(ParameterItem::P_DOMAIN, translation);
+    });
+}
+
 namespace {
 
 void handleItem(SessionItem* tree, const SessionItem* source)
@@ -151,3 +161,4 @@ void handleItem(SessionItem* tree, const SessionItem* source)
 
 } // namespace
 
+
diff --git a/GUI/coregui/Models/ParameterTreeUtils.h b/GUI/coregui/Models/ParameterTreeUtils.h
index 799de376a2c201668ed423f66c05638cb399b90b..22520fced6b09661a21ecbb8c1212aa363728ef4 100644
--- a/GUI/coregui/Models/ParameterTreeUtils.h
+++ b/GUI/coregui/Models/ParameterTreeUtils.h
@@ -18,10 +18,12 @@
 #define PARAMETERTREEUTILS_H
 
 #include "WinDllMacros.h"
+#include <functional>
 #include <QString>
 
 class JobItem;
 class SessionItem;
+class ParameterItem;
 
 //! The ParameterTreeBuilder namespace contains helper functions to create container
 //! with ParameterItems. The ParameterItem appears in RealTimeView and provides real
@@ -34,6 +36,9 @@ BA_CORE_API_ void createParameterTree(JobItem* jobItem);
 
 BA_CORE_API_ void populateParameterContainer(SessionItem* container, const SessionItem* source);
 
+BA_CORE_API_ void visitParameterContainer(SessionItem* container,
+                                          std::function<void(ParameterItem*)> fun);
+
 BA_CORE_API_ void populateDomainLinks(SessionItem* container);
 
 }
diff --git a/Tests/Functional/GUI/GUITranslationTest/GUITranslationTest.cpp b/Tests/Functional/GUI/GUITranslationTest/GUITranslationTest.cpp
index 916d88417c70f57ed1066a0db8b2761e85111bcd..64c7b07c8afe93fb9d3509047ddc38b15b0575ab 100644
--- a/Tests/Functional/GUI/GUITranslationTest/GUITranslationTest.cpp
+++ b/Tests/Functional/GUI/GUITranslationTest/GUITranslationTest.cpp
@@ -89,40 +89,24 @@ void GUITranslationTest::processParameterTree()
                 0,
                 m_models->documentModel()->getSimulationOptionsItem());
 
-    ParameterTreeUtils::populateDomainLinks(jobItem->parameterContainerItem());
+    SessionItem *container = jobItem->parameterContainerItem();
 
-    SessionItem *current = jobItem->getItem(JobItem::T_PARAMETER_TREE);
+    ParameterTreeUtils::visitParameterContainer(container, [&](ParameterItem *parItem){
+        if(parItem->isFittable()) {
+            std::string sampleParLink =
+                    parItem->getItemValue(ParameterItem::P_LINK).toString().toStdString();
 
-    QStack<SessionItem *> stack;
-    stack.push(current);
-    while (!stack.empty()) {
-        current = stack.pop();
-        if (current->modelType() == Constants::ParameterLabelType
-                || current->modelType() == Constants::ParameterContainerType) {
-            for (SessionItem *child : current->getItems())
-                stack.push(child);
+            std::string parPath = FitParameterHelper::getParameterItemPath(parItem).toStdString();
 
-        } else {
-            if (ParameterItem *parItem = dynamic_cast<ParameterItem *>(current)) {
-                if(parItem->isFittable()) {
-                    std::string sampleParLink =
-                            parItem->getItemValue(ParameterItem::P_LINK).toString().toStdString();
+            std::string domainName = std::string("*") +
+                    parItem->getItemValue(ParameterItem::P_DOMAIN).toString().toStdString();
 
-                    std::string parPath = FitParameterHelper::getParameterItemPath(parItem).toStdString();
+            QString translation = ModelPath::itemPathTranslation(*parItem->linkedItem(), jobItem);
+            domainName = std::string("*/") + translation.toStdString();
 
-                    std::string domainName = std::string("*") +
-                            parItem->getItemValue(ParameterItem::P_DOMAIN).toString().toStdString();
-
-                    // new way of translating
-                    QString translation = ModelPath::itemPathTranslation(*parItem->linkedItem(), jobItem);
-                    domainName = std::string("*/") + translation.toStdString();
-
-                    m_translations.push_back({sampleParLink, parPath, domainName});
-                }
-            }
+            m_translations.push_back({sampleParLink, parPath, domainName});
         }
-    }
-
+    });
 }
 
 //! Returns multiline string representing results of translation