diff --git a/src/graph/GraphView.cpp b/src/graph/GraphView.cpp
index 72a499d18907610f07d193f4fb31707a7e01946f..98644c5bd36e2d47572d73a81bf7c80bc378a17e 100644
--- a/src/graph/GraphView.cpp
+++ b/src/graph/GraphView.cpp
@@ -531,68 +531,7 @@ void Aidge::GraphView::insertParent(NodePtr childNode,
 
 
 bool Aidge::GraphView::replaceWith(std::set<std::shared_ptr<Node>> newNodes) {
-  // TODO : only supports one input/output node for now
-  assert(mNodes.size()>0 && "There must be at least one Node to replace");
-
-  bool replacable;
-  std::shared_ptr<Node> previousInputNode = (*inputNodes().begin());
-  std::shared_ptr<Node> previousOutputNode = (*outputNodes().begin());
-  std::shared_ptr<Node> newOutputNode;
-
-  auto gNew = std::make_shared<GraphView>();
-  gNew->add(newNodes, false);
-
-  if (newNodes.empty()) {
-    replacable = (outputNodes().size() == 1) &&
-                 (inputNodes().size() == 1) &&
-                 ((*outputNodes().begin())->nbOutputs() == 1) &&
-                 ((*inputNodes().begin())->nbDataInputs() == 1);
-    newOutputNode = previousInputNode->input(0).first;
-  } else {
-    newOutputNode = (*gNew->outputNodes().begin());
-    replacable = (outputNodes().size() == gNew->outputNodes().size()) &&
-                 (outputNodes().size() == 1) &&
-                 (previousOutputNode->nbOutputs() == newOutputNode->nbOutputs());
-  }
-
-  if (replacable) {
-    auto copyOutputs = previousOutputNode->outputs();
-
-    // manage Views for newNodes
-    // only keep common views to each node for the new set
-    std::set<std::shared_ptr<GraphView>> commonGraphViews =  (*mNodes.begin())->views();
-    for (const auto& nodePtr : mNodes) {
-      const auto nodeView = nodePtr->views();
-      std::set<std::shared_ptr<GraphView>> intersection;
-      std::set_intersection(commonGraphViews.begin(), commonGraphViews.end(),
-                          nodeView.begin(), nodeView.end(),
-                          std::inserter(intersection, intersection.begin()));
-      commonGraphViews = intersection;
-    }
-
-    // clean Nodes to replace
-    std::set<std::shared_ptr<Node>> copyNode = mNodes;
-    for (auto& nodePtr : copyNode) { nodePtr->resetConnections(true); }
-
-    // copy output connections
-    if (newOutputNode) {
-      for (IOIndex_t o = 0; o < previousOutputNode->nbOutputs(); ++o) {
-        auto outputPairs = copyOutputs[o];
-        for (const auto& onePair : outputPairs) {
-          newOutputNode->addChild(onePair.first, o, onePair.second);
-        }
-      }
-    }
-    // insert new Nodes in the right GraphViews
-    for (auto& graphPtr : commonGraphViews) {
-      graphPtr->add(newNodes, false);
-      if (newNodes.empty()) {
-        graphPtr->updateInputNodes();
-        graphPtr->updateOutputNodes();
-      }
-    }
-  }
-  return replacable;
+  return GraphView::replace(mNodes, newNodes);
 }
 
 bool Aidge::GraphView::replace(const std::set<Aidge::NodePtr>& oldNodes, const std::set<Aidge::NodePtr>& newNodes) {