diff --git a/include/aidge/graph/GraphView.hpp b/include/aidge/graph/GraphView.hpp
index 17bd3b1e9aeece2c80dab8c1aa1cba6498cc730f..f2789c8e5caa9ec97269ddd041bec5d85af44b2b 100644
--- a/include/aidge/graph/GraphView.hpp
+++ b/include/aidge/graph/GraphView.hpp
@@ -406,16 +406,19 @@ public:
         addChild(toOtherNode, mNodeRegistry.at(fromOutNodeName), fromTensor, toTensor);
     }
 
-    inline void updateNodeName(NodePtr nodeToRename, const std::string& newName){
-        const std::string& oldName = nodeToRename->name();
-        AIDGE_ASSERT(mNodeRegistry.find(newName) != mNodeRegistry.end(), "Name {} is already used in graph {}.", newName, name());
-
-        if (nodeToRename->name() != ""){ // Case node already had a name
-            AIDGE_ASSERT(mNodeRegistry.find(oldName) != mNodeRegistry.end(), "No node named {} in graph {}, the graph may be corrupted !", oldName, name());
-            mNodeRegistry[newName] = mNodeRegistry[oldName];
-            mNodeRegistry.erase(oldName);
-        }else{ // Case node did not had a name
-            mNodeRegistry[newName] = nodeToRename;
+    inline void updateNodeName(const std::shared_ptr<Node>& node, const std::string& newName){
+        if (!newName.empty()) {
+            auto itNew = mNodeRegistry.insert(std::make_pair(newName, node));
+            if (!itNew.second) {
+                Log::notice("Replacing existing node name in graph node name registry: {}", newName);
+                (itNew.first)->second = node;
+            }
+        }
+
+        if (!node->name().empty()) {
+            const auto it = mNodeRegistry.find(node->name());
+            AIDGE_ASSERT(it != mNodeRegistry.end(), "No node named {} in graph {}, the graph may be corrupted !", node->name(), name());
+            mNodeRegistry.erase(it);
         }
     }