diff --git a/Device/Histo/Histogram2D.cpp b/Device/Histo/Histogram2D.cpp
index 1f6185da9aa130033921826eb6e08135c47f4598..d407d8dd2647349c1c2a7b5c51f48c7b5819a28d 100644
--- a/Device/Histo/Histogram2D.cpp
+++ b/Device/Histo/Histogram2D.cpp
@@ -44,6 +44,20 @@ Histogram2D::Histogram2D(std::vector<std::vector<double>> data)
     this->setContent(data);
 }
 
+void Histogram2D::initFromShape(const std::vector<std::vector<double>>& data)
+{
+    auto shape = DataUtils::Array::getShape(data);
+    const size_t nrows = shape.first;
+    const size_t ncols = shape.second;
+
+    if (nrows == 0 || ncols == 0)
+        throw std::runtime_error("Histogram2D::Histogram2D() -> Error. "
+                                 "Not a two-dimensional numpy array");
+
+    m_data.addAxis(FixedBinAxis("x-axis", ncols, 0.0, static_cast<double>(ncols)));
+    m_data.addAxis(FixedBinAxis("y-axis", nrows, 0.0, static_cast<double>(nrows)));
+}
+
 Histogram2D* Histogram2D::clone() const
 {
     return new Histogram2D(*this);
diff --git a/Device/Histo/Histogram2D.h b/Device/Histo/Histogram2D.h
index 667ed67989979ddc704530258561d607dd67d4d4..a21833ae79fe29ac1b1b5c23ed4f459b21f75249 100644
--- a/Device/Histo/Histogram2D.h
+++ b/Device/Histo/Histogram2D.h
@@ -100,7 +100,7 @@ public:
     void addContent(const std::vector<std::vector<double>>& data);
 
 protected:
-    template <typename T> void initFromShape(const T& data);
+    void initFromShape(const std::vector<std::vector<double>>& data);
 
     //! Creates projection along X. The projections is made by collecting the data in the range
     //! between [ybinlow, ybinup].
@@ -111,18 +111,4 @@ protected:
     Histogram1D* create_projectionY(int xbinlow, int xbinup);
 };
 
-template <typename T> void Histogram2D::initFromShape(const T& data)
-{
-    auto shape = DataUtils::Array::getShape(data);
-    const size_t nrows = shape.first;
-    const size_t ncols = shape.second;
-
-    if (nrows == 0 || ncols == 0)
-        throw std::runtime_error("Histogram2D::Histogram2D() -> Error. "
-                                 "Not a two-dimensional numpy array");
-
-    m_data.addAxis(FixedBinAxis("x-axis", ncols, 0.0, static_cast<double>(ncols)));
-    m_data.addAxis(FixedBinAxis("y-axis", nrows, 0.0, static_cast<double>(nrows)));
-}
-
 #endif // BORNAGAIN_DEVICE_HISTO_HISTOGRAM2D_H