diff --git a/include/aidge/graph/OpArgs.hpp b/include/aidge/graph/OpArgs.hpp
index bf14d39af34c2e14d98906a663edf335c30c6f12..70a431b5621270a6b6083a436aba145ce9dafbf3 100644
--- a/include/aidge/graph/OpArgs.hpp
+++ b/include/aidge/graph/OpArgs.hpp
@@ -12,8 +12,10 @@
 #ifndef AIDGE_CORE_GRAPH_OPARGS_H_
 #define AIDGE_CORE_GRAPH_OPARGS_H_
 
-#include <memory>
 #include <cassert>
+#include <memory>
+#include <string>
+#include <vector>
 
 namespace Aidge {
 class Node;
@@ -56,20 +58,22 @@ public:
  * one in a sequential way. Nodes linked with the Sequential graph
  * generation instructions must have a single output.
  * Sequential(A, B, C) returns A-->B-->C.
- * @param inputs List of Node and GraphView to link sequentially.
+ * @param[in] inputs List of Node and GraphView to link sequentially.
+ * @param[in] name : name of the graphview to return
  * @return std::shared_ptr<GraphView> Pointer to the generated view.
  */
-std::shared_ptr<GraphView> Sequential(std::vector<OpArgs> inputs);
+std::shared_ptr<GraphView> Sequential(std::vector<OpArgs> inputs, std::string name = "");
 
 /////////////////////////////
 // Parallel
 
 /**
  * @brief Creates a GraphView with provided Nodes without linking them.
- * @param inputs List of Node and GraphView to link sequentially.
+ * @param[in] inputs List of Node and GraphView to link sequentially.
+ * @param[in] name : name of the graphview to return
  * @return std::shared_ptr<GraphView> pointer to the generated view.
  */
-std::shared_ptr<GraphView> Parallel(std::vector<OpArgs> inputs);
+std::shared_ptr<GraphView> Parallel(std::vector<OpArgs> inputs, std::string name = "");
 
 /////////////////////////////
 // Residual
@@ -81,9 +85,10 @@ std::shared_ptr<GraphView> Parallel(std::vector<OpArgs> inputs);
  * generation instructions must have a single output.
  * Recursive(A, B, C) returns A-->B-->C , A-->C.
  * @param inputs List of Node and GraphView to link sequentially.
+ * @param[in] name : name of the graphview to return
  * @return std::shared_ptr<GraphView> pointer to the generated view.
  */
-std::shared_ptr<GraphView> Residual(std::vector<OpArgs> inputs);
+std::shared_ptr<GraphView> Residual(std::vector<OpArgs> inputs, std::string name = "");
 
 }
 
diff --git a/python_binding/graph/pybind_OpArgs.cpp b/python_binding/graph/pybind_OpArgs.cpp
index 6ea89f91945ac44f2142c5b9e8440b11ec6a1663..a129ca51c27367ceb1f7518ca85afe134e98cc4a 100644
--- a/python_binding/graph/pybind_OpArgs.cpp
+++ b/python_binding/graph/pybind_OpArgs.cpp
@@ -31,9 +31,9 @@ void init_OpArgs(py::module& m){
     py::implicitly_convertible<Node, OpArgs>();
     py::implicitly_convertible<GraphView, OpArgs>();
 
-    m.def("sequential", &Sequential, py::arg("inputs"));
-    m.def("parallel", &Parallel, py::arg("inputs"));
-    m.def("residual", &Residual, py::arg("inputs"));
+    m.def("sequential", &Sequential, py::arg("inputs"), py::arg("name") =  "");
+    m.def("parallel", &Parallel, py::arg("inputs"), py::arg("name") =  "");
+    m.def("residual", &Residual, py::arg("inputs"), py::arg("name") =  "");
 
 }
 }
diff --git a/src/graph/OpArgs.cpp b/src/graph/OpArgs.cpp
index cffd14c35a0fe11055198236eba6e344c0ff782c..6fe2320ea0ed6a71b6c4fad6a3fab4e1b6472abf 100644
--- a/src/graph/OpArgs.cpp
+++ b/src/graph/OpArgs.cpp
@@ -9,16 +9,20 @@
  *
  ********************************************************************************/
 
-#include "aidge/graph/Node.hpp"
-#include "aidge/graph/GraphView.hpp"
 #include "aidge/graph/OpArgs.hpp"
 
+#include <memory>
+#include <string>
+
+#include "aidge/graph/GraphView.hpp"
+#include "aidge/graph/Node.hpp"
+
 Aidge::OpArgs::OpArgs(const OpArgs&) = default;
 Aidge::OpArgs& Aidge::OpArgs::operator=(const OpArgs&) = default;
 Aidge::OpArgs::~OpArgs() noexcept = default;
 
-std::shared_ptr<Aidge::GraphView> Aidge::Sequential(std::vector<OpArgs> inputs) {
-    std::shared_ptr<GraphView> gv = std::make_shared<GraphView>();
+std::shared_ptr<Aidge::GraphView> Aidge::Sequential(std::vector<OpArgs> inputs, std::string name) {
+    std::shared_ptr<GraphView> gv = std::make_shared<GraphView>(name);
     for (const OpArgs& elt : inputs) {
         if(elt.node() != nullptr) {
             // Connect the first output (ordered) of each output node (ordered)
@@ -61,8 +65,8 @@ std::shared_ptr<Aidge::GraphView> Aidge::Sequential(std::vector<OpArgs> inputs)
 }
 
 
-std::shared_ptr<Aidge::GraphView> Aidge::Parallel(std::vector<OpArgs> inputs) {
-    std::shared_ptr<GraphView> gv = std::make_shared<GraphView>();
+std::shared_ptr<Aidge::GraphView> Aidge::Parallel(std::vector<OpArgs> inputs, std::string name) {
+    std::shared_ptr<GraphView> gv = std::make_shared<GraphView>(name);
     for(const OpArgs& elt : inputs) {
         if (elt.node()!=nullptr)
             gv->add(elt.node());
@@ -73,8 +77,8 @@ std::shared_ptr<Aidge::GraphView> Aidge::Parallel(std::vector<OpArgs> inputs) {
 }
 
 
-std::shared_ptr<Aidge::GraphView> Aidge::Residual(std::vector<OpArgs> inputs) {
-    std::shared_ptr<GraphView> gv = Sequential(inputs);
+std::shared_ptr<Aidge::GraphView> Aidge::Residual(std::vector<OpArgs> inputs, std::string name) {
+    std::shared_ptr<GraphView> gv = Sequential(inputs,name);
     AIDGE_ASSERT(gv->outputNodes().size() == 1U,
         "Residual(): Zero or more than one output Node for the GraphView, don't know which one to choose from for the residual connection");
     std::shared_ptr<Node> lastNode = *gv->outputNodes().begin();