diff --git a/GUI/Model/Beam/BeamDistributionItem.h b/GUI/Model/Beam/BeamDistributionItem.h
index faa043b65d86a4f6ed6df62659a429101fa165ab..f4862706b5159b5965856a5a6af1d27df5321155 100644
--- a/GUI/Model/Beam/BeamDistributionItem.h
+++ b/GUI/Model/Beam/BeamDistributionItem.h
@@ -36,7 +36,10 @@ public:
 
     virtual double scaleFactor() const;
 
-    template <typename T> T* setDistributionItemType();
+    template <typename T> T* setDistributionItemType()
+        {
+            return m_distribution.createCertainItem<T>();
+        }
     DistributionItem* distributionItem() const { return m_distribution.certainItem(); }
     PolyItem<DistributionsCatalog>& distributionSelection() { return m_distribution; }
 
@@ -46,10 +49,4 @@ protected:
     PolyItem<DistributionsCatalog> m_distribution;
 };
 
-template <typename T> T* BeamDistributionItem::setDistributionItemType()
-{
-    m_distribution.createCertainItem<T>();
-    return dynamic_cast<T*>(m_distribution.certainItem());
-}
-
 #endif // BORNAGAIN_GUI_MODEL_BEAM_BEAMDISTRIBUTIONITEM_H
diff --git a/GUI/Model/Detector/DetectorItem.h b/GUI/Model/Detector/DetectorItem.h
index dc7869e488b1e770b60d4750eb335b060b575066..1027d33551e3089732134c7a0064f61132722570 100644
--- a/GUI/Model/Detector/DetectorItem.h
+++ b/GUI/Model/Detector/DetectorItem.h
@@ -38,7 +38,10 @@ public:
         return m_resolution_function;
     }
 
-    template <typename T> T* setResolutionFunctionType();
+    template <typename T> T* setResolutionFunctionType()
+        {
+            return m_resolution_function.createCertainItem<T>();
+        }
 
     void writeTo(QXmlStreamWriter* w) const;
     void readFrom(QXmlStreamReader* r);
@@ -63,10 +66,4 @@ private:
     std::unique_ptr<MasksSet> m_prjns; //!< projections
 };
 
-template <typename T> T* DetectorItem::setResolutionFunctionType()
-{
-    m_resolution_function.createCertainItem<T>();
-    return dynamic_cast<T*>(m_resolution_function.certainItem());
-}
-
 #endif // BORNAGAIN_GUI_MODEL_DETECTOR_DETECTORITEM_H
diff --git a/GUI/Model/Sim/InstrumentItems.h b/GUI/Model/Sim/InstrumentItems.h
index abe8900b0a2483e723ae84d8c5fb3e00529207db..b391b2a9cef150485c82138604a51a7964b26ed0 100644
--- a/GUI/Model/Sim/InstrumentItems.h
+++ b/GUI/Model/Sim/InstrumentItems.h
@@ -66,7 +66,11 @@ public:
 
     template <typename T> bool is() const { return dynamic_cast<const T*>(this) != nullptr; }
 
-    template <typename T> T* setBackgroundItemType();
+    template <typename T> T* setBackgroundItemType()
+        {
+            return m_background.createCertainItem<T>();
+        }
+
     PolyItem<BackgroundItemCatalog>& backgroundSelection() { return m_background; }
     BackgroundItem* backgroundItem() const { return m_background.certainItem(); }
 
@@ -197,14 +201,4 @@ private:
     AxisProperty m_z_axis;
 };
 
-
-//  ************************************************************************************************
-//  templated functions implementation
-//  ************************************************************************************************
-
-template <typename T> T* InstrumentItem::setBackgroundItemType()
-{
-    return m_background.createCertainItem<T>();
-}
-
 #endif // BORNAGAIN_GUI_MODEL_SIM_INSTRUMENTITEMS_H