diff --git a/Base/Types/VectorWC.h b/Base/Types/VectorWC.h
index 980b4eb1128c2acf3eb47d769c95a81a0b0becfb..e7abb6409decaff9f93dc2163c8610c5f496d0f7 100644
--- a/Base/Types/VectorWC.h
+++ b/Base/Types/VectorWC.h
@@ -30,16 +30,19 @@ public:
     {
         super::push_back(e);
         m_current_index = super::size() - 1;
+        onCurrentChanged();
     }
     void insert_at(size_t i, T* e)
     {
         super::insert_at(i, e);
         m_current_index = i;
+        onCurrentChanged();
     }
     void replace_at(size_t i, T* e)
     {
         super::replace_at(i, e);
         m_current_index = i;
+        onCurrentChanged();
     }
     void delete_element(const T* e)
     {
@@ -80,7 +83,10 @@ public:
     void setCurrentIndex(size_t i)
     {
         ASSERT(i < super::size() || i == size_t(-1));
-        m_current_index = i;
+        if (i != m_current_index) {
+            m_current_index = i;
+            onCurrentChanged();
+        }
     }
     size_t currentIndex() const { return m_current_index; }
     const T* currentItem() const
@@ -95,11 +101,15 @@ public:
 private:
     void update_current()
     {
-        if (m_current_index == super::size())
+        if (m_current_index == super::size()) {
             m_current_index = super::size() - 1;
+            onCurrentChanged();
+        }
     }
 
     size_t m_current_index = -1;
+
+    virtual void onCurrentChanged() const {}
 };
 
 #endif // BORNAGAIN_BASE_TYPES_VECTORWC_H
diff --git a/GUI/Model/Device/InstrumentsSet.h b/GUI/Model/Device/InstrumentsSet.h
index 8d4ddca38af4830ede8d5acfb0585294f01c0182..1c84da9b6ddb58f72bed074477328f058cbb786f 100644
--- a/GUI/Model/Device/InstrumentsSet.h
+++ b/GUI/Model/Device/InstrumentsSet.h
@@ -61,6 +61,11 @@ signals:
     //! Signals name change of the given instrument.
     //! In addition to this, instrumentChanged() will be emitted as well.
     void instrumentNameChanged(const InstrumentItem* instrument) const;
+
+    void instrumentSelected() const;
+
+private:
+    void onCurrentChanged() const override { emit instrumentSelected(); }
 };
 
 #endif // BORNAGAIN_GUI_MODEL_DEVICE_INSTRUMENTSSET_H
diff --git a/GUI/View/List/InstrumentsQListView.h b/GUI/View/List/InstrumentsQListView.h
index 53b6400266ae2e10245ee4fb1d5c8790e413f9a1..3ab58956ad71123270aff19c1cabe714fd0a9bc5 100644
--- a/GUI/View/List/InstrumentsQListView.h
+++ b/GUI/View/List/InstrumentsQListView.h
@@ -30,9 +30,6 @@ public:
     QSize sizeHint() const override;
     QSize minimumSizeHint() const override;
 
-signals:
-    void instrumentSelected(InstrumentItem* instrument);
-
 private slots:
     void onStoreInLibrary() const;
     void onLoadFromLibrary();
diff --git a/GUI/View/Views/InstrumentView.cpp b/GUI/View/Views/InstrumentView.cpp
index ae27639812d2cd405cd6df34eaa50c046f934031..8fbd499015ebf7d48a82cc7896889d894709d926 100644
--- a/GUI/View/Views/InstrumentView.cpp
+++ b/GUI/View/Views/InstrumentView.cpp
@@ -68,7 +68,7 @@ InstrumentView::InstrumentView()
 
     //... Finalize
 
-    connect(m_listing, &InstrumentsQListView::instrumentSelected, this,
+    connect(gDoc->instruments(), &InstrumentsSet::instrumentSelected, this,
             &InstrumentView::createWidgetsForCurrentInstrument);
 
     // Initial state