diff --git a/GUI/coregui/Models/ParameterizedItem.cpp b/GUI/coregui/Models/ParameterizedItem.cpp
index b5b98d5456fec0cd70f3ec0c375cbf0888c6bea0..856dfc169d7083b12713516810fa0a68e4339f04 100644
--- a/GUI/coregui/Models/ParameterizedItem.cpp
+++ b/GUI/coregui/Models/ParameterizedItem.cpp
@@ -120,7 +120,16 @@ QString ParameterizedItem::displayName() const
         int index = mp_parent->getCopyNumberOfChild(this);
         if (index >= 0 && modelType() != Constants::PropertyType &&
                 modelType() != Constants::GroupItemType) {
-            return m_display_name + QString::number(index);
+            QString new_name = m_display_name + QString::number(index);
+            for (auto other : parent()->childItems()) {
+                if (other != this) {
+                    if (isRegisteredProperty(P_NAME) && other->itemName() == new_name) {
+                        ++ index;
+                        new_name = m_display_name + QString::number(index);
+                    }
+                }
+            }
+            return new_name;
         }
     }
     return m_display_name;
@@ -278,9 +287,9 @@ PropertyAttribute &ParameterizedItem::registerProperty(const QString &name, cons
             "ParameterizedItem::registerProperty() -> Error. Already existing property " + name);
 
     ParameterizedItem *property = ItemFactory::createItem(Constants::PropertyType);
-    property->setValue(variant);
     property->setDisplayName(name);
     insertChildItem(-1, property);
+    property->setValue(variant);
     m_property_attribute[name] = attribute;
     return m_property_attribute[name];
 }
diff --git a/GUI/coregui/Models/ParameterizedItem.h b/GUI/coregui/Models/ParameterizedItem.h
index 1bc4f4efd225e3130c27f607882afa50e5eda4ab..d2845d05b9799e2d284bcd5330398848261d722e 100644
--- a/GUI/coregui/Models/ParameterizedItem.h
+++ b/GUI/coregui/Models/ParameterizedItem.h
@@ -47,7 +47,7 @@ public:
 
     //! set data in the given column, return true when successful, notify model if present
     //! we only support one role
-    bool setData(int column, const QVariant &data);
+    virtual bool setData(int column, const QVariant &data);
 
     //! return variant stored in data column
     QVariant value() const;
diff --git a/GUI/coregui/Models/PropertyItem.cpp b/GUI/coregui/Models/PropertyItem.cpp
index 8a7340231105424f271b7e537c68f067e4f75631..8f2cf3fc0d02b4831bce25f3b9e8c7537bd4acfb 100644
--- a/GUI/coregui/Models/PropertyItem.cpp
+++ b/GUI/coregui/Models/PropertyItem.cpp
@@ -20,3 +20,20 @@ PropertyItem::PropertyItem()
 {
 
 }
+
+bool PropertyItem::setData(int column, const QVariant &data)
+{
+    if (displayName() == ParameterizedItem::P_NAME) {
+        if (data.toString().isEmpty())
+            return false;
+        if (ParameterizedItem *item = parent()) {
+            if (ParameterizedItem *item_parent = item->parent()) {
+                // forbid setting duplicate name
+                if (item_parent->getChildByName(data.toString())) {
+                    return false;
+                }
+            }
+        }
+    }
+    return ParameterizedItem::setData(column, data);
+}
diff --git a/GUI/coregui/Models/PropertyItem.h b/GUI/coregui/Models/PropertyItem.h
index c8074b4f4b9a9478fe891b665daef07d261587f4..28286657b2e144190d5e22cb40a70b3c502123fb 100644
--- a/GUI/coregui/Models/PropertyItem.h
+++ b/GUI/coregui/Models/PropertyItem.h
@@ -23,6 +23,8 @@ class BA_CORE_API_ PropertyItem : public ParameterizedItem
     Q_OBJECT
 public:
     PropertyItem();
+
+    bool setData(int column, const QVariant &data);
 };
 
 #endif