diff --git a/dune/xt/functions.hh b/dune/xt/functions.hh
index 5c5458c5c12aa4596de83caa49cf56477ee1739f..57c9e5521dbebf1895d193890b6940c361b3de3c 100644
--- a/dune/xt/functions.hh
+++ b/dune/xt/functions.hh
@@ -28,7 +28,7 @@
 
 namespace Dune {
 namespace XT {
-
+namespace Functions {
 /**
  * \note If you want to add a new function FooBar, do the following: provide a definition that is available for all
  *       template arguments, like:
@@ -144,14 +144,14 @@ private:
     return ret;
   } // ... available_as_str(...)
 
-  typedef Functions::Checkerboard<E, D, d, R, r, rC> CheckerboardType;
-  typedef Functions::Constant<E, D, d, R, r, rC> ConstantType;
-  typedef Functions::Expression<E, D, d, R, r, rC> ExpressionType;
-  typedef Functions::FlatTop<E, D, d, R, r, rC> FlattopType;
+  typedef Functions::CheckerboardFunction<E, D, d, R, r, rC> CheckerboardType;
+  typedef Functions::ConstantFunction<E, D, d, R, r, rC> ConstantType;
+  typedef Functions::ExpressionFunction<E, D, d, R, r, rC> ExpressionType;
+  typedef Functions::FlatTopFunction<E, D, d, R, r, rC> FlattopType;
   typedef Functions::ESV2007::Testcase1Force<E, D, d, R, r, rC> ESV2007Testcase1ForceType;
   typedef Functions::ESV2007::Testcase1ExactSolution<E, D, d, R, r, rC> ESV2007Testcase1ExactSolutionType;
-  typedef Functions::Indicator<E, D, d, R, r, rC> IndicatorType;
-  typedef Functions::Spe10::Model1<E, D, d, R, r, rC> Spe10Model1Type;
+  typedef Functions::IndicatorFunction<E, D, d, R, r, rC> IndicatorType;
+  typedef Functions::Spe10::Model1Function<E, D, d, R, r, rC> Spe10Model1Type;
 
 public:
   static std::vector<std::string> available()
@@ -247,6 +247,7 @@ public:
   }
 }; // class FunctionsProvider
 
+} // namespace Functions {
 } // namespace XT
 } // namespace Dune
 
diff --git a/dune/xt/functions/ESV2007.hh b/dune/xt/functions/ESV2007.hh
index d2967d86fc9bf1f9914bcefd89534314d096d199..2df374a376cbd82f1da975ef83a32060f347e627 100644
--- a/dune/xt/functions/ESV2007.hh
+++ b/dune/xt/functions/ESV2007.hh
@@ -244,21 +244,21 @@ private:
 }; // class Testcase1ExactSolution
 
 template <class DiffusionFactorType, class DiffusionTensorType = void>
-class Cutoff;
+class CutoffFunction;
 
 template <class DiffusionType>
-class Cutoff<DiffusionType, void>
+class CutoffFunction<DiffusionType, void>
     : public LocalizableFunctionInterface<typename DiffusionType::EntityType, typename DiffusionType::DomainFieldType,
                                           DiffusionType::dimDomain, typename DiffusionType::RangeFieldType, 1, 1>
 {
-  static_assert(std::is_base_of<Tags::LocalizableFunction, DiffusionType>::value,
+  static_assert(is_localizable_function<DiffusionType>::value,
                 "DiffusionType has to be tagged as a LocalizableFunction!");
   typedef typename DiffusionType::EntityType E_;
   typedef typename DiffusionType::DomainFieldType D_;
   static const size_t d_ = DiffusionType::dimDomain;
   typedef typename DiffusionType::RangeFieldType R_;
   typedef LocalizableFunctionInterface<E_, D_, d_, R_, 1> BaseType;
-  typedef Cutoff<DiffusionType> ThisType;
+  typedef CutoffFunction<DiffusionType> ThisType;
 
   class Localfunction : public LocalfunctionInterface<E_, D_, d_, R_, 1, 1>
   {
@@ -359,7 +359,7 @@ public:
     return BaseType::static_id() + ".ESV2007.cutoff";
   }
 
-  Cutoff(const DiffusionType& diffusion, const RangeFieldType poincare_constant = 1.0 / (M_PIl * M_PIl),
+  CutoffFunction(const DiffusionType& diffusion, const RangeFieldType poincare_constant = 1.0 / (M_PIl * M_PIl),
          const std::string nm = static_id())
     : diffusion_(diffusion)
     , poincare_constant_(poincare_constant)
@@ -367,7 +367,7 @@ public:
   {
   }
 
-  Cutoff(const ThisType& other) = default;
+  CutoffFunction(const ThisType& other) = default;
 
   ThisType& operator=(const ThisType& other) = delete;
 
@@ -388,21 +388,21 @@ private:
 }; // class Cutoff
 
 template <class DiffusionFactorType, class DiffusionTensorType>
-class Cutoff
+class CutoffFunction
     : public LocalizableFunctionInterface<typename DiffusionFactorType::EntityType,
                                           typename DiffusionFactorType::DomainFieldType, DiffusionFactorType::dimDomain,
                                           typename DiffusionFactorType::RangeFieldType, 1, 1>
 {
-  static_assert(std::is_base_of<Tags::LocalizableFunction, DiffusionFactorType>::value,
+  static_assert(is_localizable_function<DiffusionFactorType>::value,
                 "DiffusionFactorType has to be tagged as a LocalizableFunction!");
-  static_assert(std::is_base_of<Tags::LocalizableFunction, DiffusionTensorType>::value,
+  static_assert(is_localizable_function<DiffusionTensorType>::value,
                 "DiffusionTensorType has to be tagged as a LocalizableFunction!");
   typedef typename DiffusionFactorType::EntityType E_;
   typedef typename DiffusionFactorType::DomainFieldType D_;
   static const size_t d_ = DiffusionFactorType::dimDomain;
   typedef typename DiffusionFactorType::RangeFieldType R_;
   typedef LocalizableFunctionInterface<E_, D_, d_, R_, 1> BaseType;
-  typedef Cutoff<DiffusionFactorType, DiffusionTensorType> ThisType;
+  typedef CutoffFunction<DiffusionFactorType, DiffusionTensorType> ThisType;
 
   static_assert(DiffusionFactorType::dimRange == 1, "The diffusion factor has to be scalar!");
   static_assert(DiffusionFactorType::dimRangeCols == 1, "The diffusion factor has to be scalar!");
@@ -581,7 +581,7 @@ public:
     return BaseType::static_id() + ".ESV2007.cutoff";
   }
 
-  Cutoff(const DiffusionFactorType& diffusion_factor, const DiffusionTensorType& diffusion_tensor,
+  CutoffFunction(const DiffusionFactorType& diffusion_factor, const DiffusionTensorType& diffusion_tensor,
          const RangeFieldType poincare_constant = 1.0 / (M_PIl * M_PIl), const std::string nm = static_id())
     : diffusion_factor_(diffusion_factor)
     , diffusion_tensor_(diffusion_tensor)
@@ -590,7 +590,7 @@ public:
   {
   }
 
-  Cutoff(const ThisType& other) = default;
+  CutoffFunction(const ThisType& other) = default;
 
   ThisType& operator=(const ThisType& other) = delete;
 
diff --git a/dune/xt/functions/affine.hh b/dune/xt/functions/affine.hh
index 28a08f9a3dc58fd5f6b8fad83b3a3697fc9e482a..ebe03b9a4d136e9f24998f8a6ef6c507ae5bed96 100644
--- a/dune/xt/functions/affine.hh
+++ b/dune/xt/functions/affine.hh
@@ -28,20 +28,20 @@ namespace Functions {
  */
 template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
           size_t rangeDimCols = 1>
-class Affine
+class AffineFunction
 {
-  Affine()
+  AffineFunction()
   {
     static_assert(AlwaysFalse<EntityImp>::value, "Not available for rangeDimCols > 1!");
   }
 };
 
 template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim>
-class Affine<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1>
+class AffineFunction<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1>
     : public GlobalFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1>
 {
   typedef GlobalFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1> BaseType;
-  typedef Affine<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1> ThisType;
+  typedef AffineFunction<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, 1> ThisType;
 
 public:
   typedef typename BaseType::DomainType DomainType;
@@ -84,7 +84,7 @@ public:
                                          cfg.get("name", default_cfg.get<std::string>("name")));
   } // ... create(...)
 
-  explicit Affine(const MatrixType& matrix, const RangeType& vector = RangeType(0),
+  explicit AffineFunction(const MatrixType& matrix, const RangeType& vector = RangeType(0),
                   const std::string name_in = static_id())
     : A_(matrix)
     , b_(vector)
@@ -92,7 +92,7 @@ public:
   {
   }
 
-  Affine(const ThisType& other) = default;
+  AffineFunction(const ThisType& other) = default;
 
   virtual std::string type() const override final
   {
diff --git a/dune/xt/functions/checkerboard.hh b/dune/xt/functions/checkerboard.hh
index 6e3519cb7e77d9dbf7d99a4ed115cb4afd997061..83fd04946ca03e24dfdb80118dde22e2ca47ed60 100644
--- a/dune/xt/functions/checkerboard.hh
+++ b/dune/xt/functions/checkerboard.hh
@@ -28,12 +28,12 @@ namespace Functions {
 
 template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
           size_t rangeDimCols = 1>
-class Checkerboard
+class CheckerboardFunction
     : public LocalizableFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols>
 {
   typedef LocalizableFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols>
       BaseType;
-  typedef Checkerboard<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> ThisType;
+  typedef CheckerboardFunction<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> ThisType;
 
   class Localfunction
       : public LocalfunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols>
@@ -153,7 +153,7 @@ public:
         cfg.get("name", default_cfg.get<std::string>("name")));
   } // ... create(...)
 
-  Checkerboard(const Common::FieldVector<DomainFieldType, dimDomain>& lowerLeft,
+  CheckerboardFunction(const Common::FieldVector<DomainFieldType, dimDomain>& lowerLeft,
                const Common::FieldVector<DomainFieldType, dimDomain>& upperRight,
                const Common::FieldVector<size_t, dimDomain>& numElements, const std::vector<RangeType>& values,
                const std::string nm = static_id())
@@ -178,7 +178,7 @@ public:
                  "values too small (is " << values_->size() << ", should be " << totalSubdomains << ")");
   } // Checkerboard(...)
 
-  Checkerboard(const ThisType& other) = default;
+  CheckerboardFunction(const ThisType& other) = default;
 
   ThisType& operator=(const ThisType& other) = delete;
 
@@ -225,7 +225,7 @@ private:
   std::shared_ptr<const Common::FieldVector<size_t, dimDomain>> numElements_;
   std::shared_ptr<const std::vector<RangeType>> values_;
   std::string name_;
-}; // class Checkerboard
+}; // class CheckerboardFunction
 
 } // namespace Functions
 } // namespace XT
diff --git a/dune/xt/functions/combined.hh b/dune/xt/functions/combined.hh
index 02639298d27e0ac4e332b4eb7f6ca2f929f87e9a..dcdf7f539635c9e428f8cfbcee15fa2f8766c219 100644
--- a/dune/xt/functions/combined.hh
+++ b/dune/xt/functions/combined.hh
@@ -39,9 +39,9 @@ enum class Combination
 template <class LeftType, class RightType, Combination comb>
 class SelectCombined
 {
-  static_assert(std::is_base_of<Tags::LocalizableFunction, LeftType>::value,
+  static_assert(is_localizable_function<LeftType>::value,
                 "LeftType has to be a LocalizableFunction!");
-  static_assert(std::is_base_of<Tags::LocalizableFunction, RightType>::value,
+  static_assert(is_localizable_function<RightType>::value,
                 "RightType has to be a LocalizableFunction!");
 
 public:
@@ -413,17 +413,17 @@ private:
  * \see internal::Combined
  */
 template <class MinuendType, class SubtrahendType>
-class Difference : public internal::Combined<MinuendType, SubtrahendType, internal::Combination::difference>
+class DifferenceFunction : public internal::Combined<MinuendType, SubtrahendType, internal::Combination::difference>
 {
   typedef internal::Combined<MinuendType, SubtrahendType, internal::Combination::difference> BaseType;
 
 public:
   template <class... Args>
-  Difference(Args&&... args)
+  DifferenceFunction(Args&&... args)
     : BaseType(std::forward<Args>(args)...)
   {
   }
-}; // class Difference
+}; // class DifferenceFunction
 
 /**
  * \brief Function representing the sum of two functions.
@@ -431,17 +431,17 @@ public:
  * \see internal::Combined
  */
 template <class LeftSummandType, class RightSummandType>
-class Sum : public internal::Combined<LeftSummandType, RightSummandType, internal::Combination::sum>
+class SumFunction : public internal::Combined<LeftSummandType, RightSummandType, internal::Combination::sum>
 {
   typedef internal::Combined<LeftSummandType, RightSummandType, internal::Combination::sum> BaseType;
 
 public:
   template <class... Args>
-  Sum(Args&&... args)
+  SumFunction(Args&&... args)
     : BaseType(std::forward<Args>(args)...)
   {
   }
-}; // class Sum
+}; // class SumFunction
 
 /**
  * \brief Function representing the product of two functions.
@@ -449,52 +449,52 @@ public:
  * \see internal::Combined
  */
 template <class LeftSummandType, class RightSummandType>
-class Product : public internal::Combined<LeftSummandType, RightSummandType, internal::Combination::product>
+class ProductFunction : public internal::Combined<LeftSummandType, RightSummandType, internal::Combination::product>
 {
   typedef internal::Combined<LeftSummandType, RightSummandType, internal::Combination::product> BaseType;
 
 public:
   template <class... Args>
-  Product(Args&&... args)
+  ProductFunction(Args&&... args)
     : BaseType(std::forward<Args>(args)...)
   {
   }
-}; // class Product
+}; // class ProductFunction
 
 template <class T1, class T2, class... Args>
-std::shared_ptr<Difference<T1, T2>> make_difference(const T1& left, const T2& right, Args&&... args)
+std::shared_ptr<DifferenceFunction<T1, T2>> make_difference(const T1& left, const T2& right, Args&&... args)
 {
-  return std::make_shared<Difference<T1, T2>>(left, right, std::forward<Args>(args)...);
+  return std::make_shared<DifferenceFunction<T1, T2>>(left, right, std::forward<Args>(args)...);
 }
 
 template <class T1, class T2, class... Args>
-std::shared_ptr<Difference<T1, T2>> make_difference(std::shared_ptr<T1> left, std::shared_ptr<T2> right, Args&&... args)
+std::shared_ptr<DifferenceFunction<T1, T2>> make_difference(std::shared_ptr<T1> left, std::shared_ptr<T2> right, Args&&... args)
 {
-  return std::make_shared<Difference<T1, T2>>(left, right, std::forward<Args>(args)...);
+  return std::make_shared<DifferenceFunction<T1, T2>>(left, right, std::forward<Args>(args)...);
 }
 
 template <class T1, class T2, class... Args>
-std::shared_ptr<Sum<T1, T2>> make_sum(const T1& left, const T2& right, Args&&... args)
+std::shared_ptr<SumFunction<T1, T2>> make_sum(const T1& left, const T2& right, Args&&... args)
 {
-  return std::make_shared<Sum<T1, T2>>(left, right, std::forward<Args>(args)...);
+  return std::make_shared<SumFunction<T1, T2>>(left, right, std::forward<Args>(args)...);
 }
 
 template <class T1, class T2, class... Args>
-std::shared_ptr<Sum<T1, T2>> make_sum(std::shared_ptr<T1> left, std::shared_ptr<T2> right, Args&&... args)
+std::shared_ptr<SumFunction<T1, T2>> make_sum(std::shared_ptr<T1> left, std::shared_ptr<T2> right, Args&&... args)
 {
-  return std::make_shared<Sum<T1, T2>>(left, right, std::forward<Args>(args)...);
+  return std::make_shared<SumFunction<T1, T2>>(left, right, std::forward<Args>(args)...);
 }
 
 template <class T1, class T2, class... Args>
-std::shared_ptr<Product<T1, T2>> make_product(const T1& left, const T2& right, Args&&... args)
+std::shared_ptr<ProductFunction<T1, T2>> make_product(const T1& left, const T2& right, Args&&... args)
 {
-  return std::make_shared<Product<T1, T2>>(left, right, std::forward<Args>(args)...);
+  return std::make_shared<ProductFunction<T1, T2>>(left, right, std::forward<Args>(args)...);
 }
 
 template <class T1, class T2, class... Args>
-std::shared_ptr<Product<T1, T2>> make_product(std::shared_ptr<T1> left, std::shared_ptr<T2> right, Args&&... args)
+std::shared_ptr<ProductFunction<T1, T2>> make_product(std::shared_ptr<T1> left, std::shared_ptr<T2> right, Args&&... args)
 {
-  return std::make_shared<Product<T1, T2>>(left, right, std::forward<Args>(args)...);
+  return std::make_shared<ProductFunction<T1, T2>>(left, right, std::forward<Args>(args)...);
 }
 
 } // namespace Functions
diff --git a/dune/xt/functions/constant.hh b/dune/xt/functions/constant.hh
index a2e777bfa9ea2e00a6cd8b1df9902971d493692c..59051e72b8a6e7826f1361404fd9616bbb18ed51 100644
--- a/dune/xt/functions/constant.hh
+++ b/dune/xt/functions/constant.hh
@@ -114,11 +114,11 @@ struct Get<R, 1, 1>
 
 template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
           size_t rangeDimCols = 1>
-class Constant
+class ConstantFunction
     : public GlobalFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols>
 {
   typedef GlobalFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> BaseType;
-  typedef Constant<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> ThisType;
+  typedef ConstantFunction<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> ThisType;
 
 public:
   typedef typename BaseType::DomainType DomainType;
@@ -162,19 +162,19 @@ public:
                                          cfg.get("name", default_cfg.get<std::string>("name")));
   } // ... create(...)
 
-  explicit Constant(const RangeType& constant, const std::string name_in = static_id())
+  explicit ConstantFunction(const RangeType& constant, const std::string name_in = static_id())
     : constant_(constant)
     , name_(name_in)
   {
   }
 
-  explicit Constant(const RangeFieldImp& constant, const std::string name_in = static_id())
+  explicit ConstantFunction(const RangeFieldImp& constant, const std::string name_in = static_id())
     : constant_(constant)
     , name_(name_in)
   {
   }
 
-  Constant(const ThisType& other) = default;
+  ConstantFunction(const ThisType& other) = default;
 
   virtual std::string type() const override final
   {
diff --git a/dune/xt/functions/default.hh b/dune/xt/functions/default.hh
index 63a779b219db8b62412cb1a76a1fc94fac8ad73d..0127e16df66f21439051fc51750cfb74443d9a05 100644
--- a/dune/xt/functions/default.hh
+++ b/dune/xt/functions/default.hh
@@ -24,7 +24,7 @@ namespace Functions {
 
 
 template <class GridViewType, size_t dimRange, size_t dimRangeCols>
-class VisualizationAdapter : public VTKFunction<GridViewType>
+class VisualizationAdapterFunction : public VTKFunction<GridViewType>
 {
 public:
   typedef typename GridViewType::template Codim<0>::Entity EntityType;
@@ -36,7 +36,7 @@ public:
   typedef LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, double, dimRange, dimRangeCols>
       FunctionType;
 
-  VisualizationAdapter(const FunctionType& function, const std::string nm = "")
+  VisualizationAdapterFunction(const FunctionType& function, const std::string nm = "")
     : function_(function)
     , tmp_value_(0)
     , name_(nm)
@@ -101,7 +101,7 @@ private:
   const FunctionType& function_;
   mutable typename FunctionType::RangeType tmp_value_;
   const std::string name_;
-}; // class VisualizationAdapter
+}; // class VisualizationAdapterFunction
 
 
 } // namespace Functions
diff --git a/dune/xt/functions/derived.hh b/dune/xt/functions/derived.hh
index ef0cf2a1a8759eb1ee65c271358edc7e6f5f74df..5e26a13920bbc4848158d0ac59035e61dfcc2006 100644
--- a/dune/xt/functions/derived.hh
+++ b/dune/xt/functions/derived.hh
@@ -246,28 +246,28 @@ private:
 } // namespace internal
 
 template <class FunctionType>
-class Divergence : public internal::Derived<FunctionType, internal::Derivative::divergence>
+class DivergenceFunction : public internal::Derived<FunctionType, internal::Derivative::divergence>
 {
   typedef internal::Derived<FunctionType, internal::Derivative::divergence> BaseType;
 
 public:
   template <class... Args>
-  Divergence(Args&&... args)
+  DivergenceFunction(Args&&... args)
     : BaseType(std::forward<Args>(args)...)
   {
   }
-}; // class Divergence
+}; // class DivergenceFunction
 
 template <class T, class... Args>
-std::shared_ptr<Divergence<T>> make_divergence(const T& func, Args&&... args)
+std::shared_ptr<DivergenceFunction<T>> make_divergence(const T& func, Args&&... args)
 {
-  return std::make_shared<Divergence<T>>(func, std::forward<Args>(args)...);
+  return std::make_shared<DivergenceFunction<T>>(func, std::forward<Args>(args)...);
 }
 
 template <class T, class... Args>
-std::shared_ptr<Divergence<T>> make_divergence(std::shared_ptr<T> func, Args&&... args)
+std::shared_ptr<DivergenceFunction<T>> make_divergence(std::shared_ptr<T> func, Args&&... args)
 {
-  return std::make_shared<Divergence<T>>(func, std::forward<Args>(args)...);
+  return std::make_shared<DivergenceFunction<T>>(func, std::forward<Args>(args)...);
 }
 
 } // namespace Functions
diff --git a/dune/xt/functions/expression.hh b/dune/xt/functions/expression.hh
index f4b6bd1f6d7d953e634829aee82d2e6c36437a45..8d99fac21a79c262407d7f1117cb51a7f87a04f3 100644
--- a/dune/xt/functions/expression.hh
+++ b/dune/xt/functions/expression.hh
@@ -31,12 +31,12 @@ namespace Functions {
 
 template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
           size_t rangeDimCols = 1>
-class Expression
+class ExpressionFunction
     : public GlobalFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols>
 {
   typedef LocalizableFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols>
       BaseType;
-  typedef Expression<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> ThisType;
+  typedef ExpressionFunction<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols> ThisType;
   typedef MathExpressionBase<DomainFieldImp, domainDim, RangeFieldImp, rangeDim * rangeDimCols>
       MathExpressionFunctionType;
   typedef MathExpressionBase<DomainFieldImp, domainDim, RangeFieldImp, domainDim> MathExpressionGradientType;
@@ -118,7 +118,7 @@ public:
    * ["x[1]" "x[0]"]. Then the resulting function is [x[0]*x[1] x[0]*x[1]; x[0]*x[1] x[0]*x[1]] and the gradient is
    * [[x[1] x[0]; x[1] x[0]] [x[1] x[0] x[1] x[0]].
    */
-  Expression(const std::string variable, const std::string expression, const size_t ord = 0,
+  ExpressionFunction(const std::string variable, const std::string expression, const size_t ord = 0,
              const std::string nm = static_id(), const std::vector<std::string> gradient = std::vector<std::string>())
     : order_(ord)
     , name_(nm)
@@ -145,7 +145,7 @@ public:
    * This constructor just expands expressions and gradient_expressions from a std::vector< std::string > and
    * std::vector< std::vector< std::string > to ExpressionStringVectorType and GradientStringVectorType, respectively.
    */
-  Expression(const std::string variable, const std::vector<std::string> expressions,
+  ExpressionFunction(const std::string variable, const std::vector<std::string> expressions,
              const size_t ord = default_config().get<size_t>("order"), const std::string nm = static_id(),
              const std::vector<std::vector<std::string>> gradient_expressions = std::vector<std::vector<std::string>>())
     : function_(new MathExpressionFunctionType(variable, expressions))
@@ -173,7 +173,7 @@ public:
    *  [[[0 0] [2 0]] [[cos(x[0]) 0] [0 1]]] would be the gradient_expression corresponding to the expression above (if
    *  dimDomain = dimRange = dimRangeCols = 2)
    */
-  Expression(const std::string variable, const ExpressionStringVectorType expressions, const size_t ord = 0,
+  ExpressionFunction(const std::string variable, const ExpressionStringVectorType expressions, const size_t ord = 0,
              const std::string nm                                = static_id(),
              const GradientStringVectorType gradient_expressions = GradientStringVectorType())
     : order_(ord)
@@ -183,7 +183,7 @@ public:
     build_gradients(variable, gradient_expressions);
   }
 
-  Expression(const ThisType& other) = default;
+  ExpressionFunction(const ThisType& other) = default;
 
   ThisType& operator=(const ThisType& other)
   {
@@ -388,7 +388,7 @@ private:
   mutable typename Common::PerThreadValue<FieldVector<RangeFieldType, dimRange * dimRangeCols>> tmp_vector_;
   mutable typename Common::PerThreadValue<FieldVector<RangeFieldType, dimRangeCols>> tmp_row_;
   std::vector<std::vector<std::shared_ptr<const MathExpressionGradientType>>> gradients_;
-}; // class Expression
+}; // class ExpressionFunction
 
 } // namespace Functions
 } // namespace XT
diff --git a/dune/xt/functions/expression/base.hh b/dune/xt/functions/expression/base.hh
index 30ded9e14f6d624432f58591f9c4aa5fb8d2a749..148652f36d2b970620bc1b59a989e6fcf4ba4755 100644
--- a/dune/xt/functions/expression/base.hh
+++ b/dune/xt/functions/expression/base.hh
@@ -31,7 +31,7 @@ namespace Functions {
 
 /**
  *  \brief base class that makes a function out of the from mathexpr.hh
- *  \attention  Most surely you do not want to use this class directly, but Functions::Expression!
+ *  \attention  Most surely you do not want to use this class directly, but Functions::ExpressionFunction!
  */
 template <class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim>
 class MathExpressionBase
diff --git a/dune/xt/functions/femadapter.hh b/dune/xt/functions/femadapter.hh
index b35eb4cc2369d8cd8698fd5362797aaa291f7b64..d9e67199ab7d4e4159a5ac48e1d456e3e8da79ba 100644
--- a/dune/xt/functions/femadapter.hh
+++ b/dune/xt/functions/femadapter.hh
@@ -21,7 +21,7 @@ namespace XT {
 namespace Functions {
 
 template <class DiscreteFunctionType>
-class FemAdapter
+class FemAdapterFunction
     : public LocalizableFunctionInterface<
           typename DiscreteFunctionType::EntityType, typename DiscreteFunctionType::DomainFieldType,
           DiscreteFunctionType::DiscreteFunctionSpaceType::dimDomain, typename DiscreteFunctionType::RangeFieldType,
@@ -31,7 +31,7 @@ class FemAdapter
       typename DiscreteFunctionType::EntityType, typename DiscreteFunctionType::DomainFieldType,
       DiscreteFunctionType::DiscreteFunctionSpaceType::dimDomain, typename DiscreteFunctionType::RangeFieldType,
       DiscreteFunctionType::DiscreteFunctionSpaceType::dimRange, 1> BaseType;
-  typedef FemAdapter<DiscreteFunctionType> ThisType;
+  typedef FemAdapterFunction<DiscreteFunctionType> ThisType;
 
   class Localfunction
       : public LocalfunctionInterface<
@@ -85,7 +85,7 @@ public:
   typedef typename BaseType::EntityType EntityType;
   typedef typename BaseType::LocalfunctionType LocalfunctionType;
 
-  FemAdapter(const DiscreteFunctionType& df)
+  FemAdapterFunction(const DiscreteFunctionType& df)
     : df_(df)
   {
   }
@@ -118,7 +118,7 @@ public:
 
 private:
   const DiscreteFunctionType& df_;
-}; // class Checkerboard
+}; // class CheckerboardFunction
 
 } // namespace Functions
 } // namespace XT
diff --git a/dune/xt/functions/flattop.hh b/dune/xt/functions/flattop.hh
index 437db29931971b0380814fbb1da7ce917bcf851f..06b68a7d7e81af18085f7a74488cd803ca9cdc09 100644
--- a/dune/xt/functions/flattop.hh
+++ b/dune/xt/functions/flattop.hh
@@ -29,19 +29,19 @@ namespace Functions {
  *           Subsection 2.1.1
  */
 template <class E, class D, size_t d, class R, size_t r, size_t rC = 1>
-class FlatTop : public LocalizableFunctionInterface<E, D, d, R, r, rC>
+class FlatTopFunction : public LocalizableFunctionInterface<E, D, d, R, r, rC>
 {
-  FlatTop()
+  FlatTopFunction()
   {
     static_assert(AlwaysFalse<E>::value, "Not available for these dimensions!");
   }
 };
 
 template <class E, class D, size_t d, class R>
-class FlatTop<E, D, d, R, 1, 1> : public GlobalFunctionInterface<E, D, d, R, 1, 1>
+class FlatTopFunction<E, D, d, R, 1, 1> : public GlobalFunctionInterface<E, D, d, R, 1, 1>
 {
   typedef GlobalFunctionInterface<E, D, d, R, 1, 1> BaseType;
-  typedef FlatTop<E, D, d, R, 1, 1> ThisType;
+  typedef FlatTopFunction<E, D, d, R, 1, 1> ThisType;
 
 public:
   typedef typename BaseType::EntityType EntityType;
@@ -92,7 +92,7 @@ public:
                                          cfg.get("name", default_cfg.get<std::string>("name")));
   } // ... create(...)
 
-  FlatTop(const StuffDomainType& lower_left, const StuffDomainType& upper_right, const StuffDomainType& boundary_layer,
+  FlatTopFunction(const StuffDomainType& lower_left, const StuffDomainType& upper_right, const StuffDomainType& boundary_layer,
           const StuffRangeType& value = default_config().get<StuffRangeType>("value"),
           const std::string name_in = default_config().get<std::string>("name"))
     : lower_left_(lower_left)
@@ -104,11 +104,11 @@ public:
     check_input();
   }
 
-  FlatTop(const ThisType& other) = default;
+  FlatTopFunction(const ThisType& other) = default;
 
   ThisType& operator=(const ThisType& other) = delete;
 
-  virtual ~FlatTop()
+  virtual ~FlatTopFunction()
   {
   }
 
@@ -210,7 +210,7 @@ private:
   const StuffDomainType boundary_layer_;
   const StuffRangeType value_;
   const std::string name_;
-}; // class FlatTop< ..., 1, 1 >
+}; // class FlatTopFunction< ..., 1, 1 >
 
 } // namespace Functions
 } // namespace XT
diff --git a/dune/xt/functions/global.hh b/dune/xt/functions/global.hh
index 6392334cb19e145ee61ac2a12d5064a5e7e55a54..30a3f4e2cd33d681f0e05a54dadb9d81bf73e56b 100644
--- a/dune/xt/functions/global.hh
+++ b/dune/xt/functions/global.hh
@@ -19,6 +19,7 @@
 
 namespace Dune {
 namespace XT {
+namespace Functions {
 
 /**
  * Global-valued function you can pass a lambda expression to that gets evaluated
@@ -77,6 +78,7 @@ private:
   const std::string name_;
 };
 
+} // namespace Functions
 } // namespace XT
 } // namespace Dune
 
diff --git a/dune/xt/functions/indicator.hh b/dune/xt/functions/indicator.hh
index 9f1d2738e687b5ef65186e892714e9df807dca12..ec09db33b50dbe1a8fe31a8b9c68e9c8653737f8 100644
--- a/dune/xt/functions/indicator.hh
+++ b/dune/xt/functions/indicator.hh
@@ -26,19 +26,19 @@ namespace XT {
 namespace Functions {
 
 template <class E, class D, size_t d, class R, size_t r, size_t rC = 1>
-class Indicator : public LocalizableFunctionInterface<E, D, d, R, r, rC>
+class IndicatorFunction : public LocalizableFunctionInterface<E, D, d, R, r, rC>
 {
-  Indicator()
+  IndicatorFunction()
   {
     static_assert(AlwaysFalse<E>::value, "Not available for these dimensions!");
   }
 };
 
 template <class E, class D, size_t d, class R>
-class Indicator<E, D, d, R, 1> : public LocalizableFunctionInterface<E, D, d, R, 1>
+class IndicatorFunction<E, D, d, R, 1> : public LocalizableFunctionInterface<E, D, d, R, 1>
 {
   typedef LocalizableFunctionInterface<E, D, d, R, 1> BaseType;
-  typedef Indicator<E, D, d, R, 1> ThisType;
+  typedef IndicatorFunction<E, D, d, R, 1> ThisType;
 
   class Localfunction : public LocalfunctionInterface<E, D, d, R, 1>
   {
@@ -140,20 +140,20 @@ public:
     return Common::make_unique<ThisType>(values, cfg.get("name", def_cfg.get<std::string>("name")));
   } // ... create(...)
 
-  Indicator(const std::vector<std::tuple<DomainType, DomainType, R>>& values, const std::string name_in = "indicator")
+  IndicatorFunction(const std::vector<std::tuple<DomainType, DomainType, R>>& values, const std::string name_in = "indicator")
     : values_(values)
     , name_(name_in)
   {
   }
 
-  Indicator(const std::vector<std::pair<std::pair<Common::FieldVector<D, d>, Common::FieldVector<D, d>>, R>>& values,
+  IndicatorFunction(const std::vector<std::pair<std::pair<Common::FieldVector<D, d>, Common::FieldVector<D, d>>, R>>& values,
             const std::string name_in = "indicator")
     : values_(convert(values))
     , name_(name_in)
   {
   }
 
-  virtual ~Indicator()
+  virtual ~IndicatorFunction()
   {
   }
 
@@ -183,7 +183,7 @@ private:
 
   const std::vector<std::tuple<DomainType, DomainType, R>> values_;
   const std::string name_;
-}; // class Indicator
+}; // class IndicatorFunction
 
 } // namespace Functions
 } // namespace XT
diff --git a/dune/xt/functions/interfaces.hh b/dune/xt/functions/interfaces.hh
index 59d88a18703af7ce70fc4161716a8be3e2197867..0484e59275080fd37bd9ce829e7a82411312f4a2 100644
--- a/dune/xt/functions/interfaces.hh
+++ b/dune/xt/functions/interfaces.hh
@@ -46,6 +46,7 @@
 
 namespace Dune {
 namespace XT {
+namespace Functions {
 namespace internal {
 
 template <class F>
@@ -70,7 +71,6 @@ struct is_localizable_function_helper
 template <class F, bool candidate = internal::is_localizable_function_helper<F>::is_candidate>
 struct is_localizable_function;
 
-namespace Functions {
 namespace internal {
 
 // additional argument for member functions to differentiate between dimRangeCols = 1 and dimRangeCols > 1 by
@@ -84,29 +84,21 @@ struct ChooseVariant
 
 
 template <class GridViewType, size_t dimRange, size_t dimRangeCols = 1>
-class VisualizationAdapter;
+class VisualizationAdapterFunction;
 
 
 template <class MinuendType, class SubtrahendType>
-class Difference;
+class DifferenceFunction;
 
 template <class LeftSummandType, class RightSummandType>
-class Sum;
+class SumFunction;
 
 template <class LeftSummandType, class RightSummandType>
-class Product;
+class ProductFunction;
 
 template <class FunctionImp>
-class Divergence;
-
-} // namespace Functions
-namespace Tags {
+class DivergenceFunction;
 
-class LocalizableFunction
-{
-};
-
-} // namespace Tags
 
 /**
  *  \brief Interface for a set of globalvalued functions, which can be evaluated locally on one Entity.
@@ -327,7 +319,7 @@ class IsLocalizableFunction
  */
 template <class EntityImp, class DomainFieldImp, size_t domainDim, class RangeFieldImp, size_t rangeDim,
           size_t rangeDimCols = 1>
-class LocalizableFunctionInterface : public IsLocalizableFunction, public Tags::LocalizableFunction
+class LocalizableFunctionInterface : public IsLocalizableFunction
 {
   typedef LocalizableFunctionInterface<EntityImp, DomainFieldImp, domainDim, RangeFieldImp, rangeDim, rangeDimCols>
       ThisType;
@@ -351,9 +343,9 @@ public:
 
   static const bool available = false;
 
-  typedef Functions::Difference<ThisType, ThisType> DifferenceType;
-  typedef Functions::Sum<ThisType, ThisType> SumType;
-  typedef Functions::Divergence<ThisType> DivergenceType;
+  typedef Functions::DifferenceFunction<ThisType, ThisType> DifferenceType;
+  typedef Functions::SumFunction<ThisType, ThisType> SumType;
+  typedef Functions::DivergenceFunction<ThisType> DivergenceType;
 
   virtual ~LocalizableFunctionInterface()
   {
@@ -395,10 +387,10 @@ public:
   }
 
   template <class OtherType>
-  typename std::enable_if<is_localizable_function<OtherType>::value, Functions::Product<ThisType, OtherType>>::type
+  typename std::enable_if<is_localizable_function<OtherType>::value, Functions::ProductFunction<ThisType, OtherType>>::type
   operator*(const OtherType& other) const
   {
-    return Functions::Product<ThisType, OtherType>(*this, other);
+    return Functions::ProductFunction<ThisType, OtherType>(*this, other);
   }
 
   DivergenceType divergence() const
@@ -418,7 +410,7 @@ public:
       DUNE_THROW(RangeError, "Empty path given!");
     const auto directory = Common::directory_only(path);
     const auto filename  = Common::filename_only(path);
-    auto adapter = std::make_shared<Functions::VisualizationAdapter<GridViewType, dimRange, dimRangeCols>>(*this);
+    const auto adapter = std::make_shared<VisualizationAdapterFunction<GridViewType, dimRange, dimRangeCols>>(*this);
     std::unique_ptr<VTKWriter<GridViewType>> vtk_writer =
         subsampling ? Common::make_unique<SubsamplingVTKWriter<GridViewType>>(grid_view, VTK::nonconforming)
                     : Common::make_unique<VTKWriter<GridViewType>>(grid_view, VTK::nonconforming);
@@ -749,6 +741,7 @@ struct is_localizable_function<F, false> : public std::false_type
 {
 };
 
+} // namespace Functions
 } // namespace XT
 } // namespace Dune
 
diff --git a/dune/xt/functions/spe10/model1.hh b/dune/xt/functions/spe10/model1.hh
index 785302afd4bce803f8bf890f83fbaf69eda4139c..553862061b51efaa547c01b1b5af538816175109 100644
--- a/dune/xt/functions/spe10/model1.hh
+++ b/dune/xt/functions/spe10/model1.hh
@@ -46,9 +46,9 @@ static const double model1_min_value     = 0.001;
 static const double model1_max_value     = 998.915;
 
 template <class EntityImp, class DomainFieldImp, class RangeFieldImp, size_t r, size_t rC>
-class Model1Base : public Checkerboard<EntityImp, DomainFieldImp, 2, RangeFieldImp, r, rC>
+class Model1Base : public CheckerboardFunction<EntityImp, DomainFieldImp, 2, RangeFieldImp, r, rC>
 {
-  typedef Checkerboard<EntityImp, DomainFieldImp, 2, RangeFieldImp, r, rC> BaseType;
+  typedef CheckerboardFunction<EntityImp, DomainFieldImp, 2, RangeFieldImp, r, rC> BaseType;
 
 public:
   typedef typename BaseType::EntityType EntityType;
@@ -147,9 +147,9 @@ public:
 
 // default, to allow for specialization
 template <class E, class D, size_t d, class R, size_t r, size_t rC = 1>
-class Model1 : public LocalizableFunctionInterface<E, D, d, R, r, rC>
+class Model1Function : public LocalizableFunctionInterface<E, D, d, R, r, rC>
 {
-  Model1()
+  Model1Function()
   {
     static_assert(AlwaysFalse<E>::value, "Not available for these dimensions!");
   }
@@ -159,11 +159,11 @@ class Model1 : public LocalizableFunctionInterface<E, D, d, R, r, rC>
  * We read only the Kx values from file and scale the unit matrix atm.
  */
 template <class EntityImp, class DomainFieldImp, class RangeFieldImp, size_t r>
-class Model1<EntityImp, DomainFieldImp, 2, RangeFieldImp, r, r>
+class Model1Function<EntityImp, DomainFieldImp, 2, RangeFieldImp, r, r>
     : public internal::Model1Base<EntityImp, DomainFieldImp, RangeFieldImp, r, r>
 {
   typedef internal::Model1Base<EntityImp, DomainFieldImp, RangeFieldImp, r, r> BaseType;
-  typedef Model1<EntityImp, DomainFieldImp, 2, RangeFieldImp, r, r> ThisType;
+  typedef Model1Function<EntityImp, DomainFieldImp, 2, RangeFieldImp, r, r> ThisType;
 
 public:
   using typename BaseType::DomainFieldType;
@@ -177,7 +177,7 @@ public:
     return BaseType::template create_derived<ThisType>(config, sub_name);
   } // ... create(...)
 
-  Model1(const std::string& filename, const Common::FieldVector<DomainFieldType, dimDomain>& lower_left,
+  Model1Function(const std::string& filename, const Common::FieldVector<DomainFieldType, dimDomain>& lower_left,
          const Common::FieldVector<DomainFieldType, dimDomain>& upper_right,
          const RangeFieldType min = internal::model1_min_value, const RangeFieldType max = internal::model1_max_value,
          const std::string nm = BaseType::static_id())
diff --git a/dune/xt/functions/spe10/model2.hh b/dune/xt/functions/spe10/model2.hh
index b39f668f68dd275557f592a0b5c6c5f0a0ee30fb..69cddec6fbbbaf5e55d31d791303d6b3fd76d02d 100644
--- a/dune/xt/functions/spe10/model2.hh
+++ b/dune/xt/functions/spe10/model2.hh
@@ -31,7 +31,7 @@ namespace Spe10 {
  *
  */
 template <class EntityImp, class DomainFieldImp, size_t dim_domain, class RangeFieldImp, size_t r, size_t rC>
-class Model2 : public GlobalFunctionInterface<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC>
+class Model2Function : public GlobalFunctionInterface<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC>
 {
   static_assert(r == rC, "");
   static_assert(dim_domain == rC, "");
@@ -39,7 +39,7 @@ class Model2 : public GlobalFunctionInterface<EntityImp, DomainFieldImp, dim_dom
   typedef GlobalFunctionInterface<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC> BaseType;
 
 public:
-  Model2(std::string data_filename = "perm_case2a.dat",
+  Model2Function(std::string data_filename = "perm_case2a.dat",
          Common::FieldVector<double, dim_domain> upper_right = default_upper_right)
     : deltas_{{upper_right[0] / num_elements[0], upper_right[1] / num_elements[1], upper_right[2] / num_elements[2]}}
     , permeability_(nullptr)
@@ -53,7 +53,7 @@ public:
   // unsigned int mandated by CubeGrid provider
   static const Common::FieldVector<unsigned int, dim_domain> num_elements;
 
-  virtual ~Model2()
+  virtual ~Model2Function()
   {
     delete permeability_;
     permeability_ = nullptr;
@@ -119,10 +119,10 @@ private:
 
 template <class EntityImp, class DomainFieldImp, size_t dim_domain, class RangeFieldImp, size_t r, size_t rC>
 const Common::FieldVector<unsigned int, dim_domain>
-    Model2<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC>::num_elements{{60, 220, 85}};
+    Model2Function<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC>::num_elements{{60, 220, 85}};
 template <class EntityImp, class DomainFieldImp, size_t dim_domain, class RangeFieldImp, size_t r, size_t rC>
 const Common::FieldVector<double, dim_domain>
-    Model2<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC>::default_upper_right{{1, 3.667, 1.417}};
+    Model2Function<EntityImp, DomainFieldImp, dim_domain, RangeFieldImp, r, rC>::default_upper_right{{1, 3.667, 1.417}};
 } // namespace Spe10
 } // namespace Functions
 } // namespace XT
diff --git a/dune/xt/functions/test/checkerboard.mini b/dune/xt/functions/test/checkerboard.mini
index 2604e7572103b0305110309b95c0d47d90731ba0..c7cd2fde081e27c51ed02554032791cafa265075 100644
--- a/dune/xt/functions/test/checkerboard.mini
+++ b/dune/xt/functions/test/checkerboard.mini
@@ -3,4 +3,4 @@ include functions.mini
 __name = checkerboard
 
 [__static]
-TESTFUNCTIONTYPE = Dune::XT::Functions::Checkerboard<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
+TESTFUNCTIONTYPE = Dune::XT::Functions::CheckerboardFunction<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
diff --git a/dune/xt/functions/test/combined.cc b/dune/xt/functions/test/combined.cc
index a64f6d6b2fa53db2e1ce93c780a0bbdbe25cddb9..0f33be561d3e81c5f2968b66dda21407b32a4050 100644
--- a/dune/xt/functions/test/combined.cc
+++ b/dune/xt/functions/test/combined.cc
@@ -40,8 +40,8 @@ class DifferenceFunctionType
   static const size_t rC = 1;
 
 public:
-  typedef Functions::Constant<E, D, d, R, r, rC> ConstantFunctionType;
-  typedef Functions::Difference<ConstantFunctionType, ConstantFunctionType> value;
+  typedef Functions::ConstantFunction<E, D, d, R, r, rC> ConstantFunctionType;
+  typedef Functions::DifferenceFunction<ConstantFunctionType, ConstantFunctionType> value;
 }; // struct DifferenceFunctionType
 
 template <class DimDomain>
diff --git a/dune/xt/functions/test/constant.mini b/dune/xt/functions/test/constant.mini
index 65beee4cbe4cbcb781e601f8831ddc21e1b02dff..6651fea48cb31c9dce86f179544163157c9112a4 100644
--- a/dune/xt/functions/test/constant.mini
+++ b/dune/xt/functions/test/constant.mini
@@ -3,4 +3,4 @@ include functions.mini
 __name = constant
 
 [__static]
-TESTFUNCTIONTYPE = Dune::XT::Functions::Constant<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
+TESTFUNCTIONTYPE = Dune::XT::Functions::ConstantFunction<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
diff --git a/dune/xt/functions/test/expression.mini b/dune/xt/functions/test/expression.mini
index e998ce32eff505c4563b1a5a637dbba58a859829..b5abbaa09474784b47dc2cfba2ad9733e08b1730 100644
--- a/dune/xt/functions/test/expression.mini
+++ b/dune/xt/functions/test/expression.mini
@@ -3,4 +3,4 @@ include functions.mini
 __name = expression
 
 [__static]
-TESTFUNCTIONTYPE = Dune::XT::Functions::Expression<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
+TESTFUNCTIONTYPE = Dune::XT::Functions::ExpressionFunction<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
diff --git a/dune/xt/functions/test/flattop.cc b/dune/xt/functions/test/flattop.cc
index 0679d258a2638f41de58bffcdc12697b39fe853d..02f5820b15a7813c7cd0d93c4993403624f79540 100644
--- a/dune/xt/functions/test/flattop.cc
+++ b/dune/xt/functions/test/flattop.cc
@@ -45,7 +45,7 @@ class FlatTopFunctionType
   static const size_t rC = 1;
 
 public:
-  typedef Functions::FlatTop<E, D, d, R, r, rC> value;
+  typedef Functions::FlatTopFunction<E, D, d, R, r, rC> value;
 }; // struct FlatTopFunctionType
 
 template <class DimDomain>
diff --git a/dune/xt/functions/test/functions.cc b/dune/xt/functions/test/functions.cc
index 8a4a79bc4f2a0fc411294a15b4a9ea551cfd3b29..ebc36e1e33499b44f49a401f877c98fb9800a9d4 100644
--- a/dune/xt/functions/test/functions.cc
+++ b/dune/xt/functions/test/functions.cc
@@ -24,6 +24,7 @@
 
 using namespace Dune;
 using namespace Dune::XT;
+using namespace Dune::XT::Functions;
 
 /* we just take the constant function as a container for the types we need */
 /* since this one always exists for all combinations */
diff --git a/dune/xt/functions/test/functions.hh b/dune/xt/functions/test/functions.hh
index eebb8de0970e7caf36b2420b6bc4149eb0570798..e58db24fa76627ce1abcd77456eff88d0b2cff68 100644
--- a/dune/xt/functions/test/functions.hh
+++ b/dune/xt/functions/test/functions.hh
@@ -41,7 +41,7 @@ protected:
   typedef typename FunctionImp::DomainType DomainType;
   typedef typename FunctionImp::RangeType RangeType;
   typedef typename FunctionImp::JacobianRangeType JacobianRangeType;
-  typedef LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange, dimRangeCols>
+  typedef Functions::LocalizableFunctionInterface<EntityType, DomainFieldType, dimDomain, RangeFieldType, dimRange, dimRangeCols>
       InterfaceType;
 
   static void static_interface_check()
diff --git a/dune/xt/functions/test/functions.mini b/dune/xt/functions/test/functions.mini
index 2272c696b98449c0701ebae487d5537d54dfde93..1fe84c4ae491b3d380f767e8e8f3d8bd8db31a1c 100644
--- a/dune/xt/functions/test/functions.mini
+++ b/dune/xt/functions/test/functions.mini
@@ -7,4 +7,4 @@ dimRangeCols = 1, 2, 3 | expand
 include grids.mini
 
 [__static]
-TESTFUNCTIONTYPE = Dune::XT::Functions::Constant<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
+TESTFUNCTIONTYPE = Dune::XT::Functions::ConstantFunction<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
diff --git a/dune/xt/functions/test/global.mini b/dune/xt/functions/test/global.mini
index c3071a247f827f7e56a52557ed04bdd7de99b767..2bdf84e116e3f3763586282a6b845442049d5d9d 100644
--- a/dune/xt/functions/test/global.mini
+++ b/dune/xt/functions/test/global.mini
@@ -3,4 +3,4 @@ include functions.mini
 __name = global
 
 [__static]
-TESTFUNCTIONTYPE = Dune::XT::GlobalLambdaFunction<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
+TESTFUNCTIONTYPE = Dune::XT::Functions::GlobalLambdaFunction<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
diff --git a/dune/xt/functions/test/indicator.mini b/dune/xt/functions/test/indicator.mini
index 33c91b30193a6d6377cf4fec9100a889b9b7a444..d8eae519746c3796ecdf8b6293ffc874cc5ca6da 100644
--- a/dune/xt/functions/test/indicator.mini
+++ b/dune/xt/functions/test/indicator.mini
@@ -7,4 +7,4 @@ dimRangeCols = 1
 include grids.mini
 
 [__static]
-TESTFUNCTIONTYPE = Dune::XT::Functions::Indicator<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
+TESTFUNCTIONTYPE = Dune::XT::Functions::IndicatorFunction<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
diff --git a/dune/xt/functions/test/spe10.mini b/dune/xt/functions/test/spe10.mini
index 783f548e880e332afcffc4e1c180a21b77cf6663..12350b99c82b4be9a054a250cf6a091ebc8f51d6 100644
--- a/dune/xt/functions/test/spe10.mini
+++ b/dune/xt/functions/test/spe10.mini
@@ -7,4 +7,4 @@ dimRange = 3
 dimRangeCols = 3
 
 [__static]
-TESTFUNCTIONTYPE = Dune::XT::Functions::Spe10::Model2<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>
+TESTFUNCTIONTYPE = Dune::XT::Functions::Spe10::Model2Function<{entity_type}, double, {dimDomain}, double, {dimRange}, {dimRangeCols}>