diff --git a/GUI/Model/Material/MaterialItem.cpp b/GUI/Model/Material/MaterialItem.cpp
index 32947f389d0c37abad382e6e02ebde120a13b5e2..ee8a0a25b7dcbd340a1d499b565aefae933d168d 100644
--- a/GUI/Model/Material/MaterialItem.cpp
+++ b/GUI/Model/Material/MaterialItem.cpp
@@ -95,7 +95,7 @@ DoubleDescriptor MaterialItem::delta()
     DoubleDescriptor d(
         "Delta", "Delta of refractive index (n = 1 - delta + i*beta)", 3, RealLimits::limitless(),
         setter, [=] { return m_delta; }, Unit::unitless);
-    d.path = [=] { return GUI::Model::Path::getPathFromItem(this) + "/delta"; };
+    d.path = [=] { return uidForDescriptor("delta"); };
     return d;
 }
 
@@ -112,7 +112,7 @@ DoubleDescriptor MaterialItem::beta()
     DoubleDescriptor d(
         "Beta", "Beta of refractive index (n = 1 - delta + i*beta)", 3, RealLimits::limitless(),
         setter, [=] { return m_beta; }, Unit::unitless);
-    d.path = [=] { return GUI::Model::Path::getPathFromItem(this) + "/beta"; };
+    d.path = [=] { return uidForDescriptor("beta"); };
     return d;
 }
 
@@ -129,7 +129,7 @@ DoubleDescriptor MaterialItem::sldRe()
     DoubleDescriptor d(
         "SLD, real", "Real part of SLD (SLD = real - i*imag), AA^{-2}", 3, RealLimits::limitless(),
         setter, [=] { return m_real; }, Unit::unitless);
-    d.path = [=] { return GUI::Model::Path::getPathFromItem(this) + "/re"; };
+    d.path = [=] { return uidForDescriptor("re"); };
     return d;
 }
 
@@ -146,7 +146,7 @@ DoubleDescriptor MaterialItem::sldIm()
     DoubleDescriptor d(
         "SLD, imaginary", "Imaginary part of SLD (SLD = real - i*imag), AA^{-2}", 3,
         RealLimits::limitless(), setter, [=] { return m_imag; }, Unit::unitless);
-    d.path = [=] { return GUI::Model::Path::getPathFromItem(this) + "/im"; };
+    d.path = [=] { return uidForDescriptor("im"); };
     return d;
 }
 
@@ -161,7 +161,7 @@ VectorDescriptor MaterialItem::magnetizationVector()
         }
     };
     d.x.get = [=]() { return m_magnetization.x(); };
-    d.x.path = [=] { return GUI::Model::Path::getPathFromItem(this) + "/mx"; };
+    d.x.path = [=] { return uidForDescriptor("mx"); };
 
     d.y.set = [=](double v) {
         if (m_magnetization.y() != v) {
@@ -170,7 +170,7 @@ VectorDescriptor MaterialItem::magnetizationVector()
         }
     };
     d.y.get = [=]() { return m_magnetization.y(); };
-    d.y.path = [=] { return GUI::Model::Path::getPathFromItem(this) + "/my"; };
+    d.y.path = [=] { return uidForDescriptor("my"); };
 
     d.z.set = [=](double v) {
         if (m_magnetization.z() != v) {
@@ -179,7 +179,7 @@ VectorDescriptor MaterialItem::magnetizationVector()
         }
     };
     d.z.get = [=]() { return m_magnetization.z(); };
-    d.z.path = [=] { return GUI::Model::Path::getPathFromItem(this) + "/mz"; };
+    d.z.path = [=] { return uidForDescriptor("mz"); };
 
     return d;
 }
@@ -308,6 +308,11 @@ void MaterialItem::updateFrom(const MaterialItem& other)
     }
 }
 
+QString MaterialItem::uidForDescriptor(const QString& lastPart) const
+{
+    return "material/" + identifier() + "/" + lastPart;
+}
+
 bool MaterialItem::operator!=(const MaterialItem& other) const
 {
     return !operator==(other);
diff --git a/GUI/Model/Material/MaterialItem.h b/GUI/Model/Material/MaterialItem.h
index bd68c9622d1c176b6b6280e0dc22eec88847351d..c94074f1eadf07e5c0ab3a939aa648487654dbc8 100644
--- a/GUI/Model/Material/MaterialItem.h
+++ b/GUI/Model/Material/MaterialItem.h
@@ -88,6 +88,12 @@ public:
     //! emits dataChanged, if differences exist.
     void updateFrom(const MaterialItem& other);
 
+private:
+    //! Returns a unique identifier for descriptors.
+    //!
+    //! lastPart will be attached to identify the relevant descriptor.
+    QString uidForDescriptor(const QString& lastPart) const;
+
 signals:
     void dataChanged() const;
 
diff --git a/GUI/Model/Session/ModelPath.cpp b/GUI/Model/Session/ModelPath.cpp
index a5076ee19305b80e3a245da17580a6bd917c6dc5..9625e1e7097e623839c1b3dab1521e959db4b4a7 100644
--- a/GUI/Model/Session/ModelPath.cpp
+++ b/GUI/Model/Session/ModelPath.cpp
@@ -84,8 +84,3 @@ QString GUI::Model::Path::getPathFromItem(SessionItem* item)
     ASSERT(item->model()); // if assert, item is not completely initialized
     return getPathFromIndex(item->model()->indexOfItem(item));
 }
-
-QString GUI::Model::Path::getPathFromItem(const MaterialItem* item)
-{
-    return "material/" + item->identifier();
-}
diff --git a/GUI/Model/Session/ModelPath.h b/GUI/Model/Session/ModelPath.h
index 8aa4af76a00341e2b77cf7af32d9fc0d55503f43..fdf4a56e62fae3261fe15a921bc9bd93a2e8b22e 100644
--- a/GUI/Model/Session/ModelPath.h
+++ b/GUI/Model/Session/ModelPath.h
@@ -30,8 +30,6 @@ QString getPathFromIndex(const QModelIndex& index);
 
 QString getPathFromItem(SessionItem* item);
 
-QString getPathFromItem(const MaterialItem* item);
-
 QModelIndex getIndexFromPath(const SessionModel* model, const QString& path);
 
 bool isValidItem(SessionModel* model, SessionItem* item, const QModelIndex& parent);