diff --git a/src/libRender/CMakeLists.txt b/src/libRender/CMakeLists.txt
index 0eb4180b0078d41a6f4c177364766fde95151d21..6130d3769d71586c3067442c57199275bd92c114 100644
--- a/src/libRender/CMakeLists.txt
+++ b/src/libRender/CMakeLists.txt
@@ -318,7 +318,7 @@ set(gui_public_headers
     )
 
 set(gui_headers
-
+    RadiumNBR/Gui/RenderGraphEditor/NodeAdapterTemplateInstanciations.hpp
     )
 
 set(gui_inlines
diff --git a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.cpp b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.cpp
index 588f50e3b6374363d54cafb400b22dbe1b140157..52c5bd360e1ec65bfe8b083813088d31da472a64 100644
--- a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.cpp
+++ b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.cpp
@@ -2,16 +2,14 @@
 
 #include <RadiumNBR/Gui/RenderGraphEditor/WidgetFactory.hpp>
 
+#include <RadiumNBR/Gui/PowerSlider.hpp>
+#include <RadiumNBR/Gui/RendererPanel.hpp>
+
 #include <QCheckBox>
 #include <QColorDialog>
 #include <QJsonArray>
-#include <QLabel>
 #include <QObject>
 
-#include <RadiumNBR/Gui/PowerSlider.hpp>
-#include <RadiumNBR/Gui/RendererPanel.hpp>
-#include <RadiumNBR/NodeGraph/PremadeNodes/Sources/SourceNode.hpp>
-
 #include <filesystem>
 
 namespace NodeDataModelTools {
@@ -172,44 +170,3 @@ void NlohmannObjectToQJsonObject(const nlohmann::json& data, QJsonObject& p) {
 }
 
 } // namespace NodeDataModelTools
-
-/** Node adapter methods */
-template <>
-void NodeAdapterModel<DataNode<NodeTypeRenderObject>>::init() {
-    m_node = m_renderGraph->getDataNode<NodeTypeRenderObject>();
-    m_inputsConnected.resize( m_node->getInputs().size() );
-    checkConnections();
-}
-
-template <>
-void NodeAdapterModel<DataNode<NodeTypeLight>>::init() {
-    m_node = m_renderGraph->getDataNode<NodeTypeLight>();
-    m_inputsConnected.resize( m_node->getInputs().size() );
-    checkConnections();
-}
-
-template <>
-void NodeAdapterModel<DataNode<NodeTypeCamera>>::init() {
-    m_node = m_renderGraph->getDataNode<NodeTypeCamera>();
-    m_inputsConnected.resize( m_node->getInputs().size() );
-    checkConnections();
-}
-
-template <>
-void NodeAdapterModel<DisplaySinkNode>::init() {
-    m_node = m_renderGraph->getDisplayNode();
-    m_inputsConnected.resize( m_node->getInputs().size() );
-    checkConnections();
-}
-
-template <>
-void NodeAdapterModel<DataNode<NodeTypeRenderObject>>::destroy() {}
-
-template <>
-void NodeAdapterModel<DataNode<NodeTypeLight>>::destroy() {}
-
-template <>
-void NodeAdapterModel<DataNode<NodeTypeCamera>>::destroy() {}
-
-template <>
-void NodeAdapterModel<DisplaySinkNode>::destroy() {}
diff --git a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp
index c0067d379835c2f7e2fc72e620f69a0b35c6d584..2cf10da0ee14cc4a2b0a228b84226ae51418bea6 100644
--- a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp
+++ b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp
@@ -1,12 +1,12 @@
 #pragma once
 #include <RadiumNBR/NodeBasedRendererMacro.hpp>
 
-#include <nodes/NodeDataModel>
-
 #include <RadiumNBR/Gui/RenderGraphEditor/ConnectionStatusData.hpp>
 
 #include <RadiumNBR/NodeGraph/RenderGraph.hpp>
 
+#include <nodes/NodeDataModel>
+
 #include <iostream>
 
 namespace NodeDataModelTools {
diff --git a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterTemplateInstanciations.hpp b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterTemplateInstanciations.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..745f17918dcc8eb348717424f7eb6761ae403781
--- /dev/null
+++ b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/NodeAdapterTemplateInstanciations.hpp
@@ -0,0 +1,50 @@
+#pragma once
+
+
+#include <RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp>
+
+/** Node adapter specialized methods */
+template <>
+void NodeAdapterModel<DataNode<NodeTypeRenderObject>>::init() {
+    m_node = m_renderGraph->getDataNode<NodeTypeRenderObject>();
+    m_inputsConnected.resize( m_node->getInputs().size() );
+    checkConnections();
+}
+
+template <>
+void NodeAdapterModel<DataNode<NodeTypeLight>>::init() {
+    m_node = m_renderGraph->getDataNode<NodeTypeLight>();
+    m_inputsConnected.resize( m_node->getInputs().size() );
+    checkConnections();
+}
+
+template <>
+void NodeAdapterModel<DataNode<NodeTypeCamera>>::init() {
+    m_node = m_renderGraph->getDataNode<NodeTypeCamera>();
+    m_inputsConnected.resize( m_node->getInputs().size() );
+    checkConnections();
+}
+
+template <>
+void NodeAdapterModel<DataNode<NodeTypeRenderObject>>::destroy() {}
+
+template <>
+void NodeAdapterModel<DataNode<NodeTypeLight>>::destroy() {}
+
+template <>
+void NodeAdapterModel<DataNode<NodeTypeCamera>>::destroy() {}
+
+#if 1
+// TODO : understand why ?????
+// gcc does not find this is a template partial specialization for DisplaySinkNode :(
+// code moved to RenderGraphEditorView.cpp
+template <>
+void NodeAdapterModel<DisplaySinkNode>::init() {
+    m_node = m_renderGraph->getDisplayNode();
+    m_inputsConnected.resize( m_node->getInputs().size() );
+    checkConnections();
+}
+
+template <>
+void NodeAdapterModel<DisplaySinkNode>::destroy() {}
+#endif
diff --git a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.cpp b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.cpp
index 8f275c9dc64b3e2a3cae2d435191326c2bb29a64..d691df57a39be3dd367b083a4c0e7d7ee1953a9c 100644
--- a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.cpp
+++ b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.cpp
@@ -7,6 +7,7 @@
 #include <nodes/NodeData>
 
 #include <RadiumNBR/NodeBasedRenderer.hpp>
+#include <RadiumNBR/NodeGraph/RenderGraph.hpp>
 
 #include <RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp>
 #include <RadiumNBR/Gui/RenderGraphEditor/SourceColorTextureModel.hpp>
@@ -15,6 +16,8 @@
 
 #include <RadiumNBR/NodeGraph/PremadeNodes/PremadeNodesIncludes.hpp>
 
+#include <RadiumNBR/Gui/RenderGraphEditor/NodeAdapterTemplateInstanciations.hpp>
+
 RenderGraphEditorView::RenderGraphEditorView( QWidget* parent ) : QWidget( parent, Qt::Window ) {
     QtNodes::ConnectionStyle::setConnectionStyle(
         R"(
@@ -70,6 +73,67 @@ RenderGraphEditorView::RenderGraphEditorView( QWidget* parent ) : QWidget( paren
     connectAll();
 }
 
+void RenderGraphEditorView::disconnectAll() {
+    for ( size_t i = 0; i < connections.size(); i++ )
+    { QObject::disconnect( connections[i] ); }
+    connections.clear();
+}
+
+void RenderGraphEditorView::connectAll() {
+
+    /*
+        // This connection is not needed
+        //connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::nodeHoverLeft,
+       this, &RenderGraphEditorView::needUpdate));
+
+        connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::nodeDeleted, this,
+       &RenderGraphEditorView::needUpdate)); connections.push_back(QObject::connect(scene,
+       &QtNodes::FlowScene::connectionCreated, this, &RenderGraphEditorView::needUpdate));
+        connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::connectionDeleted,
+       this, &RenderGraphEditorView::needUpdate));
+    */
+    connections.push_back(
+        QObject::connect( scene, &QtNodes::FlowScene::nodeHoverLeft, [this]() {
+            std::cout << "QtNodes::FlowScene::nodeHoverLeft\n";
+            emit needUpdate();
+        } ) );
+
+    connections.push_back( QObject::connect( scene, &QtNodes::FlowScene::nodeDeleted, [this]() {
+        std::cout << "QtNodes::FlowScene::nodeDeleted\n";
+        emit needUpdate();
+    } ) );
+    connections.push_back(
+        QObject::connect( scene, &QtNodes::FlowScene::connectionCreated, [this]() {
+            std::cout << "QtNodes::FlowScene::connectionCreated\n";
+            emit needUpdate();
+        } ) );
+    connections.push_back(
+        QObject::connect( scene, &QtNodes::FlowScene::connectionDeleted, [this]() {
+            std::cout << "QtNodes::FlowScene::connectionDeleted\n";
+            emit needUpdate();
+        } ) );
+}
+
+void RenderGraphEditorView::setGraph( RenderGraph* rg) {
+    currentGraph = rg;
+    auto editorRegistry = NodeGraphQtEditor::initializeNodeRegistry( currentGraph );
+    scene->setRegistry( editorRegistry );
+}
+
+#if 0
+// TODO : understand why this is problematic with gcc (and not with clang)
+// Moved here from NodeAdapterModel.cpp
+template <>
+void NodeAdapterModel<DisplaySinkNode>::init() {
+    m_node = m_renderGraph->getDisplayNode();
+    m_inputsConnected.resize( m_node->getInputs().size() );
+    checkConnections();
+}
+
+template <>
+void NodeAdapterModel<DisplaySinkNode>::destroy() {}
+#endif
+
 namespace NodeGraphQtEditor {
 
 template <typename T>
@@ -78,7 +142,9 @@ class NodeCreator
   public:
     explicit NodeCreator( RenderGraph* renderGraph ) : m_renderGraph( renderGraph ) {}
 
-    std::unique_ptr<T> operator()() { return std::make_unique<T>( m_renderGraph ); }
+    std::unique_ptr<T> operator()() {
+        return std::make_unique<T>( m_renderGraph );
+    }
 
   private:
     RenderGraph* m_renderGraph;
@@ -94,6 +160,9 @@ std::shared_ptr<DataModelRegistry> initializeNodeRegistry( RenderGraph* renderGr
     ret->registerModel<NodeAdapterModel<DataNode<NodeTypeCamera>>>(
         NodeCreator<NodeAdapterModel<DataNode<NodeTypeCamera>>>( renderGraph ), "Data" );
 
+    ret->registerModel<NodeAdapterModel<DisplaySinkNode>>(
+        NodeCreator<NodeAdapterModel<DisplaySinkNode>>( renderGraph ), "Sinks" );
+
     ret->registerModel<NodeAdapterModel<FilterROByTypeNode>>(
         NodeCreator<NodeAdapterModel<FilterROByTypeNode>>( renderGraph ), "Filters" );
     ret->registerModel<NodeAdapterModel<FilterROByNameNode>>(
@@ -145,10 +214,6 @@ std::shared_ptr<DataModelRegistry> initializeNodeRegistry( RenderGraph* renderGr
     ret->registerModel<NodeAdapterModel<DepthTextureNode>>(
         NodeCreator<NodeAdapterModel<DepthTextureNode>>( renderGraph ), "Sources" );
 
-
-    ret->registerModel<NodeAdapterModel<DisplaySinkNode>>(
-        NodeCreator<NodeAdapterModel<DisplaySinkNode>>( renderGraph ), "Sinks" );
-
     ret->registerModel<NodeAdapterModel<DifferenceNode>>(
         NodeCreator<NodeAdapterModel<DifferenceNode>>( renderGraph ), "Compositing" );
     ret->registerModel<NodeAdapterModel<SumNode>>(
diff --git a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.hpp b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.hpp
index 72473c09e9018e0bf77272b5223f5a36b6683b17..4f859017d370dc701db011328e10fb38c73ff38a 100644
--- a/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.hpp
+++ b/src/libRender/RadiumNBR/Gui/RenderGraphEditor/RenderGraphEditorView.hpp
@@ -10,8 +10,8 @@
 
 namespace RadiumNBR {
 class NodeBasedRenderer;
-
 }
+
 // TODO, why is this class outside of any namespace ?
 class RenderGraph;
 
@@ -25,46 +25,10 @@ class NodeBasedRenderer_LIBRARY_API RenderGraphEditorView : public QWidget
   public:
     explicit RenderGraphEditorView( QWidget* parent );
 
-    void disconnectAll() {
-        for ( size_t i = 0; i < connections.size(); i++ )
-        { QObject::disconnect( connections[i] ); }
-        connections.clear();
-    }
-
-    void connectAll() {
-
-        /*
-            // This connection is not needed
-            //connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::nodeHoverLeft,
-           this, &RenderGraphEditorView::needUpdate));
-
-            connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::nodeDeleted, this,
-           &RenderGraphEditorView::needUpdate)); connections.push_back(QObject::connect(scene,
-           &QtNodes::FlowScene::connectionCreated, this, &RenderGraphEditorView::needUpdate));
-            connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::connectionDeleted,
-           this, &RenderGraphEditorView::needUpdate));
-        */
-        connections.push_back(
-            QObject::connect( scene, &QtNodes::FlowScene::nodeHoverLeft, [this]() {
-                std::cout << "QtNodes::FlowScene::nodeHoverLeft\n";
-                emit needUpdate();
-            } ) );
-
-        connections.push_back( QObject::connect( scene, &QtNodes::FlowScene::nodeDeleted, [this]() {
-            std::cout << "QtNodes::FlowScene::nodeDeleted\n";
-            emit needUpdate();
-        } ) );
-        connections.push_back(
-            QObject::connect( scene, &QtNodes::FlowScene::connectionCreated, [this]() {
-                std::cout << "QtNodes::FlowScene::connectionCreated\n";
-                emit needUpdate();
-            } ) );
-        connections.push_back(
-            QObject::connect( scene, &QtNodes::FlowScene::connectionDeleted, [this]() {
-                std::cout << "QtNodes::FlowScene::connectionDeleted\n";
-                emit needUpdate();
-            } ) );
-    }
+    void disconnectAll();
+    void connectAll();
+
+    void setGraph( RenderGraph* rg);
 
   public slots:
     bool eventFilter( QObject* object, QEvent* event ) {
@@ -77,16 +41,20 @@ class NodeBasedRenderer_LIBRARY_API RenderGraphEditorView : public QWidget
     void needUpdate();
 
   public:
+
     QMenuBar* menuBar{ nullptr };
     QAction* newAction{ nullptr };
     QAction* openAction{ nullptr };
     QAction* saveAction{ nullptr };
     QAction* saveAsAction{ nullptr };
 
+
+    std::vector<QMetaObject::Connection> connections;
+
+    // TODO, put all these as private data
     QtNodes::FlowScene* scene{ nullptr };
     QtNodes::FlowView* view{ nullptr };
 
-    RadiumNBR::NodeBasedRenderer* current{ nullptr };
-
-    std::vector<QMetaObject::Connection> connections;
+  private:
+    RenderGraph* currentGraph{ nullptr };
 };