diff --git a/GUI/Model/Descriptor/PolyItem.h b/GUI/Model/Descriptor/PolyItem.h
deleted file mode 100644
index b1e56356c6ed5670e5b5d03c607fb7403229ad0b..0000000000000000000000000000000000000000
--- a/GUI/Model/Descriptor/PolyItem.h
+++ /dev/null
@@ -1,90 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      GUI/Model/Descriptor/PolyItem.h
-//! @brief     Defines and implements template class PolyItem.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2021
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#ifndef BORNAGAIN_GUI_MODEL_DESCRIPTOR_POLYITEM_H
-#define BORNAGAIN_GUI_MODEL_DESCRIPTOR_POLYITEM_H
-
-#include "GUI/Model/Util/UtilXML.h"
-
-//! Holds a polymorphous item. Possible types of the item are specified by a Catalog.
-
-template <typename Catalog> class PolyItem {
-public:
-    using BaseItem = typename Catalog::BaseItem;
-
-    void simpleInit(const QString& label, const QString& tooltip,
-                    typename Catalog::Type currentType);
-
-    BaseItem* certainItem() const { return m_item.get(); }
-
-    void setCertainItem(BaseItem* t) { m_item.reset(t); }
-
-    template <typename S> S* createCertainItem();
-
-    //! Serializes the catalog index of the currently selected type and calls
-    //! main serialization method of the selected class.
-    void writeTo(QXmlStreamWriter* w) const { XML::writeItemTo<Catalog>(m_item.get(), w); }
-
-    //! Deserializes the catalog index of the currently selected type, creates a new
-    //! object of this type and calls main deserialization method of the selected class.
-    template <typename... Args> void readFrom(QXmlStreamReader* r, Args... args)
-    {
-        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; }
-
-    void setCurrentIndex(int index) { m_item.reset(Catalog::create(m_types[index])); }
-    int currentIndex() const { return m_types.indexOf(Catalog::type(m_item.get())); }
-
-private:
-    std::unique_ptr<BaseItem> m_item; //!< Current selection
-
-    QString m_label;            //!< A label text (short, no trailing colon)
-    QString m_tooltip;          //!< Tooltip text
-    QStringList m_menu_entries; //!< List of options, usually presented as combo entries
-    QVector<typename Catalog::Type> m_types = Catalog::types();
-};
-
-
-//! Initialize by means of a catalog class and optional creation arguments.
-//!
-//! The current selection will be initialized with the first type in the catalog types. The optional
-//! arguments are the arguments which may be necessary for the creation method in the catalog.
-template <typename C>
-void PolyItem<C>::simpleInit(const QString& label, const QString& tooltip,
-                             typename C::Type currentType)
-{
-    m_label = label;
-    m_tooltip = tooltip;
-
-    m_menu_entries.clear();
-    for (const auto type : m_types)
-        m_menu_entries << C::uiInfo(type).menuEntry;
-
-    int index = C::types().indexOf(currentType);
-    setCurrentIndex(index);
-}
-
-//! Directly set the new item.
-template <typename C> template <typename S> S* PolyItem<C>::createCertainItem()
-{
-    auto* t = new S;
-    m_item.reset(t);
-    return t;
-}
-
-#endif // BORNAGAIN_GUI_MODEL_DESCRIPTOR_POLYITEM_H