diff --git a/GUI/View/Frame/AnydataFrame.h b/GUI/View/Frame/AnydataFrame.h
index 640f1e56c5358024124e1580bfab3bbeb28af679..39cc67a9a7466b668134b010fece7de2a788b6a7 100644
--- a/GUI/View/Frame/AnydataFrame.h
+++ b/GUI/View/Frame/AnydataFrame.h
@@ -27,7 +27,7 @@ public:
 
     const DataSource* dataSource() const { return m_data_source.get(); }
 
-private:
+protected:
     std::unique_ptr<DataSource> m_data_source;
 };
 
diff --git a/GUI/View/Frame/Plot2DFrame.cpp b/GUI/View/Frame/Plot2DFrame.cpp
index 84db8d2effb3fe8747e7410f2aa4458aa03ac49f..b7bc410fd980ae250aa674f66e01a3e2f39fdd39 100644
--- a/GUI/View/Frame/Plot2DFrame.cpp
+++ b/GUI/View/Frame/Plot2DFrame.cpp
@@ -105,8 +105,15 @@ Plot2DFrame::Plot2DFrame(std::unique_ptr<DataSource>&& data_source)
     connect(m_canvas1D, &ProjectedGraphsCanvas::changeActivityRequest, toolbar,
             &Data2DToolbar::onProjectionTabChange);
 
-    connect(gDoc->datafiles(), &DatafilesSet::setChanged, this, &Plot2DFrame::updateFrame);
-    connect(gDoc->jobs(), &JobsSet::jobMeritsAttention, this, &Plot2DFrame::updateFrame);
+    // subscription type depends on the context
+    if (dynamic_cast<DataFromData*>(m_data_source.get()))
+        connect(gDoc->datafiles(), &DatafilesSet::setChanged, this, &Plot2DFrame::updateFrame);
+    else if (dynamic_cast<DataFromSim*>(m_data_source.get())
+             || dynamic_cast<DataFromJob*>(m_data_source.get()))
+        connect(gDoc->jobs(), &JobsSet::jobMeritsAttention, this, &Plot2DFrame::updateFrame);
+    else
+        ASSERT_NEVER;
+
     updateFrame();
 }