diff --git a/GUI/Model/Descriptor/PolyPtr.h b/GUI/Model/Descriptor/PolyPtr.h
index 98bcd3c8405cdfb470559047d4e0cd29bb57a451..867922676a2bca62f2c17553eec64fe8ca54de0e 100644
--- a/GUI/Model/Descriptor/PolyPtr.h
+++ b/GUI/Model/Descriptor/PolyPtr.h
@@ -19,7 +19,16 @@
 
 //! Holds a polymorphous item. Possible types of the item are specified by a Catalog.
 
-template <typename Catalog> class PolyPtr {
+class PolyBase {
+public:
+    virtual QString piLabel() const = 0;
+    virtual QString piTooltip() const = 0;
+    virtual QStringList menuEntries() const = 0;
+    virtual void setCurrentIndex(int index) = 0;
+    virtual int currentIndex() const = 0;
+};
+
+template <typename Catalog> class PolyPtr : public PolyBase {
 public:
     using BaseItem = typename Catalog::BaseItem;
 
@@ -43,12 +52,12 @@ public:
         m_item.reset(XML::readItemFrom<Catalog>(r, args...));
     }
 
-    QString piLabel() const { return m_label; }
-    QString piTooltip() const { return m_tooltip; }
-    QStringList menuEntries() const { return m_menu_entries; }
+    QString piLabel() const override { return m_label; }
+    QString piTooltip() const override { return m_tooltip; }
+    QStringList menuEntries() const override { return m_menu_entries; }
 
-    void setCurrentIndex(int index) { m_item.reset(Catalog::create(m_types[index])); }
-    int currentIndex() const { return m_types.indexOf(Catalog::type(m_item.get())); }
+    void setCurrentIndex(int index) override { m_item.reset(Catalog::create(m_types[index])); }
+    int currentIndex() const override { return m_types.indexOf(Catalog::type(m_item.get())); }
 
 private:
     std::unique_ptr<BaseItem> m_item; //!< Current selection
diff --git a/GUI/View/Sample/ISelectionForm.h b/GUI/View/Sample/ISelectionForm.h
index fe6ff7db730bebdb1b61ab3742f05a5093dc2ed7..10d923ea7581dff2b7f99b4109beeaabf92f49e4 100644
--- a/GUI/View/Sample/ISelectionForm.h
+++ b/GUI/View/Sample/ISelectionForm.h
@@ -56,7 +56,7 @@ protected:
         m_grid_layout->addWidget(m_combo, 1, 0);
         createContent();
     }
-    template <typename T> void initUI(PolyPtr<T>& d)
+    void initUI(PolyBase& d)
     {
         m_grid_layout = new QGridLayout(this);
         m_grid_layout->setContentsMargins(0, 0, 0, 0);