diff --git a/python_binding/graph/pybind_GraphView.cpp b/python_binding/graph/pybind_GraphView.cpp
index d1eec290741ac6477f3d75ffb4457ea4d21421cd..31e3a009953c8d5b938dfe6fb888d911bef1e066 100644
--- a/python_binding/graph/pybind_GraphView.cpp
+++ b/python_binding/graph/pybind_GraphView.cpp
@@ -30,6 +30,7 @@ void init_GraphView(py::module& m) {
           :param path: save location
           :type path: str
           )mydelimiter")
+          .def("set_name", &GraphView::setName, py::arg("name"))
           .def("inputs", (std::vector<std::pair<NodePtr, IOIndex_t>> (GraphView::*)() const) &GraphView::inputs)
           .def("outputs", (std::vector<std::vector<std::pair<NodePtr, IOIndex_t>>> (GraphView::*)() const) &GraphView::outputs)
           .def("in_view", (bool (GraphView::*)(const NodePtr&) const) &GraphView::inView)
diff --git a/src/graph/GraphView.cpp b/src/graph/GraphView.cpp
index d0b539182fc308c87f0fac11ab8fcdf15793c1f2..37c4e57422b6457e3c507f85ed129ad379fe0fff 100644
--- a/src/graph/GraphView.cpp
+++ b/src/graph/GraphView.cpp
@@ -808,18 +808,19 @@ bool Aidge::GraphView::add(std::set<std::shared_ptr<Node>> otherNodes, bool incl
   }
 
   bool orderUnicity = true;
-
   // List only the nodes that are not already present in current graph
   std::set<NodePtr> nodesToAdd;
   std::set_difference(otherNodes.begin(), otherNodes.end(), mNodes.begin(), mNodes.end(), std::inserter(nodesToAdd, nodesToAdd.begin()));
 
   // Check no name is common with the name in the current Graph
   for (auto node : nodesToAdd) {
-    if (mNodeRegistry.find(node->name()) != mNodeRegistry.end()){
-      std::string newName = node->createUniqueName(node->name());
-      fmt::print("Warning: node name \"{}\" is a duplicate, renaming to {}.\n", node->name(), newName);
-      node->setName(newName);
-
+    if (mNodeRegistry.find(node->name()) != mNodeRegistry.end()) {
+        std::string newName = node->createUniqueName(node->name());
+        while (mNodeRegistry.find(newName) != mNodeRegistry.end()) {
+            newName = node->createUniqueName(newName + "_1"); 
+        }
+        Log::notice("node name \"{}\" is a duplicate, renaming to {}.\n", node->name(), newName);
+        node->setName(newName);
     }
   }
   // List the nodes to rank, initially all the nodes in the GraphView
diff --git a/src/graph/Node.cpp b/src/graph/Node.cpp
index 0dec30c2f2f2ffcb0f83740c863d46d7169d2f06..f791ab31ceb61b496382bf5e43e729e186257164 100644
--- a/src/graph/Node.cpp
+++ b/src/graph/Node.cpp
@@ -93,6 +93,7 @@ std::string Aidge::Node::createUniqueName(std::string baseName)
         nameAlreadyUsed = false;
         for (auto graphView : views()) {
             if (graphView->inView(newName)) {
+                Log::info("Node::createUniqueName(): name '{}' already used in graph '{}'", newName, graphView->name());
                 nameAlreadyUsed = true;
                 break;
             }