diff --git a/dune/stuff/functions/ESV2007.hh b/dune/stuff/functions/ESV2007.hh
index 9aa5a2c7f5c75566f744025f55e07aabe1b22b72..a5dae1998ccbec0b8e9045fdc2b36c6112c0fdb7 100644
--- a/dune/stuff/functions/ESV2007.hh
+++ b/dune/stuff/functions/ESV2007.hh
@@ -244,6 +244,11 @@ public:
 
   ThisType& operator=(const ThisType& /*other*/) = delete;
 
+  virtual std::string type() const DS_OVERRIDE DS_FINAL
+  {
+    return BaseType::static_id() + ".ESV2007.testcase1.force";
+  }
+
   virtual std::string name() const DS_OVERRIDE DS_FINAL
   {
     return name_;
@@ -347,6 +352,11 @@ public:
 
   ThisType& operator=(const ThisType& /*other*/) = delete;
 
+  virtual std::string type() const DS_OVERRIDE DS_FINAL
+  {
+    return BaseType::static_id() + ".ESV2007.testcase1.exactsolution";
+  }
+
   virtual std::string name() const DS_OVERRIDE DS_FINAL
   {
     return name_;
diff --git a/dune/stuff/functions/checkerboard.hh b/dune/stuff/functions/checkerboard.hh
index 602633f492312e971d21284be00c22bcc42ccd81..29c460ef15dc24731d71593abe6a9ee5ad205027 100644
--- a/dune/stuff/functions/checkerboard.hh
+++ b/dune/stuff/functions/checkerboard.hh
@@ -199,6 +199,11 @@ public:
     return new ThisType(*this);
   }
 
+  virtual std::string type() const DS_OVERRIDE
+  {
+    return BaseType::static_id() + ".checkerboard";
+  }
+
   virtual std::string name() const DS_OVERRIDE
   {
     return name_;
diff --git a/dune/stuff/functions/combined.hh b/dune/stuff/functions/combined.hh
index 3d7de7e81606f0ae0a784cc0edea9ec8e750b461..bffa1480040cf2c13ab4d9a5eefd21121d45f211 100644
--- a/dune/stuff/functions/combined.hh
+++ b/dune/stuff/functions/combined.hh
@@ -151,6 +151,11 @@ public:
     return new ThisType(minuend_, subtrahend_);
   }
 
+  virtual std::string type() const DS_OVERRIDE
+  {
+    return "difference between '" + minuend_.type() + "' and '" + subtrahend_.type() + "'";
+  }
+
   virtual std::string name() const DS_OVERRIDE
   {
     return "difference between '" + minuend_.name() + "' and '" + subtrahend_.name() + "'";
diff --git a/dune/stuff/functions/constant.hh b/dune/stuff/functions/constant.hh
index 97cbaa607d41437c4258720f8916e9acf6ed3b10..dd7fc90f2ac3bb796a20458c5c5591904b4d864b 100644
--- a/dune/stuff/functions/constant.hh
+++ b/dune/stuff/functions/constant.hh
@@ -81,6 +81,11 @@ public:
   {
   }
 
+  virtual std::string type() const DS_OVERRIDE
+  {
+    return BaseType::static_id() + ".constant";
+  }
+
   virtual size_t order() const DS_OVERRIDE DS_FINAL
   {
     return 0;
diff --git a/dune/stuff/functions/expression.hh b/dune/stuff/functions/expression.hh
index 2202614430987a94d080c5e7fd89bc15d8ccc709..ed07dd566d21987e2bfe5a1e8aeac6da1fdaca88 100644
--- a/dune/stuff/functions/expression.hh
+++ b/dune/stuff/functions/expression.hh
@@ -156,6 +156,11 @@ public:
     return *this;
   }
 
+  virtual std::string type() const DS_OVERRIDE DS_FINAL
+  {
+    return BaseType::static_id() + ".expression";
+  }
+
   virtual std::string name() const DS_OVERRIDE
   {
     return name_;
diff --git a/dune/stuff/functions/interfaces.hh b/dune/stuff/functions/interfaces.hh
index 4a2359ac94b393e4a01fa8c47e8b2f128a63fdfb..1e6131b5fc03ee11d730379b44a5926fff8ed301 100644
--- a/dune/stuff/functions/interfaces.hh
+++ b/dune/stuff/functions/interfaces.hh
@@ -310,6 +310,11 @@ public:
 
   /** \defgroup info ´´These methods should be implemented in order to identify the function.'' */
   /* @{ */
+  virtual std::string type() const
+  {
+    return "stuff.function";
+  }
+
   virtual std::string name() const
   {
     return "stuff.function";
diff --git a/dune/stuff/functions/spe10.hh b/dune/stuff/functions/spe10.hh
index 3f6b41a81b33b764f01a833a77bab655e7b121c3..f9dabe5b2b9dd5659df181e11aa9baf317c2aa6b 100644
--- a/dune/stuff/functions/spe10.hh
+++ b/dune/stuff/functions/spe10.hh
@@ -94,22 +94,9 @@ private:
       return data;
     } else
       DUNE_THROW_COLORFULLY(Dune::IOError, "could not open '" << filename << "'!");
-  } // Spe10Model1()
+  } // ... read_values_from_file(...)
 
 public:
-  Spe10Model1(const std::string& filename, std::vector<DomainFieldType>&& lowerLeft,
-              std::vector<DomainFieldType>&& upperRight, const RangeFieldType min = minValue,
-              const RangeFieldType max = maxValue, const std::string nm = static_id())
-    : BaseType(std::move(lowerLeft), std::move(upperRight), {numXelements, numZelements},
-               read_values_from_file(filename, min, max), nm)
-  {
-  }
-
-  virtual ThisType* copy() const DS_OVERRIDE
-  {
-    return new ThisType(*this);
-  }
-
   static Common::ConfigTree default_config(const std::string sub_name = "")
   {
     Common::ConfigTree config;
@@ -143,6 +130,24 @@ public:
         cfg.get("max_val", maxValue),
         cfg.get("name", default_cfg.get<std::string>("name")));
   } // ... create(...)
+
+  Spe10Model1(const std::string& filename, std::vector<DomainFieldType>&& lowerLeft,
+              std::vector<DomainFieldType>&& upperRight, const RangeFieldType min = minValue,
+              const RangeFieldType max = maxValue, const std::string nm = static_id())
+    : BaseType(std::move(lowerLeft), std::move(upperRight), {numXelements, numZelements},
+               read_values_from_file(filename, min, max), nm)
+  {
+  }
+
+  virtual std::string type() const DS_OVERRIDE
+  {
+    return BaseType::static_id() + ".spe10.model1";
+  }
+
+  virtual ThisType* copy() const DS_OVERRIDE
+  {
+    return new ThisType(*this);
+  }
 }; // class Spe10Model1< ..., 2, ..., 1, 1 >