diff --git a/src/scheme/DiscreteFunctionP0.hpp b/src/scheme/DiscreteFunctionP0.hpp
index 4fb0fcc980bc09a71c8668ad16e069ab8c6d0a2d..bf97079b776c80fec10e26608cfc6ff5e40a664a 100644
--- a/src/scheme/DiscreteFunctionP0.hpp
+++ b/src/scheme/DiscreteFunctionP0.hpp
@@ -22,6 +22,12 @@ class DiscreteFunctionP0 : public IDiscreteFunction
   DiscreteFunctionDescriptorP0 m_discrete_function_descriptor;
 
  public:
+  ASTNodeDataType
+  dataType() const final
+  {
+    return ast_node_data_type_from<DataType>;
+  }
+
   CellValue<DataType>
   cellValues() const
   {
@@ -51,6 +57,7 @@ class DiscreteFunctionP0 : public IDiscreteFunction
   {
     using MeshDataType      = MeshData<Dimension>;
     MeshDataType& mesh_data = MeshDataManager::instance().getMeshData(*mesh);
+
     m_cell_values =
       InterpolateItemValue<DataType(TinyVector<Dimension>)>::template interpolate<ItemType::cell>(function_id,
                                                                                                   mesh_data.xj());
diff --git a/src/scheme/IDiscreteFunction.hpp b/src/scheme/IDiscreteFunction.hpp
index 7a7deb08747f74b28e65458a54fe5a775db86b43..a8bf77f43efb48b03a8967eb16d81966fde86570 100644
--- a/src/scheme/IDiscreteFunction.hpp
+++ b/src/scheme/IDiscreteFunction.hpp
@@ -1,16 +1,18 @@
 #ifndef I_DISCRETE_FUNCTION_HPP
 #define I_DISCRETE_FUNCTION_HPP
 
-#include <memory>
-
 class IMesh;
 class IDiscreteFunctionDescriptor;
 
+#include <language/utils/ASTNodeDataTypeTraits.hpp>
+#include <memory>
+
 class IDiscreteFunction
 {
  public:
   virtual std::shared_ptr<const IMesh> mesh() const             = 0;
   virtual const IDiscreteFunctionDescriptor& descriptor() const = 0;
+  virtual ASTNodeDataType dataType() const                      = 0;
 
   IDiscreteFunction() = default;