diff --git a/python/dune/xt/functions/CMakeLists.txt b/python/dune/xt/functions/CMakeLists.txt
index 582af31a094178d6eab8e1700332d5e65ecea955..623d805ee14a3785ad5656463c4b5ce1ec20ae67 100644
--- a/python/dune/xt/functions/CMakeLists.txt
+++ b/python/dune/xt/functions/CMakeLists.txt
@@ -14,6 +14,7 @@
 
 dune_pybindxi_add_module(_functions_checkerboard EXCLUDE_FROM_ALL checkerboard.cc)
 dune_pybindxi_add_module(_functions_constant EXCLUDE_FROM_ALL constant.cc)
+dune_pybindxi_add_module(_functions_elementwise_minimum EXCLUDE_FROM_ALL elementwise-minimum.cc)
 dune_pybindxi_add_module(_functions_expression EXCLUDE_FROM_ALL expression.cc)
 dune_pybindxi_add_module(_functions_divergence EXCLUDE_FROM_ALL divergence.cc)
 dune_pybindxi_add_module(_functions_function_as_grid_function EXCLUDE_FROM_ALL function-as-grid-function.cc)
diff --git a/python/dune/xt/functions/__init__.py b/python/dune/xt/functions/__init__.py
index cf3e152248505dbc7207dcd72434f167973c4dc7..25bd34ecc6b518b10363cca2a5dc6642a34381e0 100644
--- a/python/dune/xt/functions/__init__.py
+++ b/python/dune/xt/functions/__init__.py
@@ -22,6 +22,7 @@ for mod_name in (
         '_functions_function_interface_2d',
         '_functions_checkerboard',
         '_functions_constant',
+        '_functions_elementwise_minimum',
         '_functions_expression',
         '_functions_divergence',
         '_functions_function_as_grid_function',
diff --git a/python/dune/xt/functions/elementwise-minimum.cc b/python/dune/xt/functions/elementwise-minimum.cc
new file mode 100644
index 0000000000000000000000000000000000000000..57b48e342db02c45541abdf412a5d974b51dd22c
--- /dev/null
+++ b/python/dune/xt/functions/elementwise-minimum.cc
@@ -0,0 +1,145 @@
+// This file is part of the dune-xt project:
+//   https://github.com/dune-community/dune-xt
+// Copyright 2009-2018 dune-xt developers and contributors. All rights reserved.
+// License: Dual licensed as BSD 2-Clause License (http://opensource.org/licenses/BSD-2-Clause)
+//      or  GPL-2.0+ (http://opensource.org/licenses/gpl-license)
+//          with "runtime exception" (http://www.dune-project.org/license.html)
+// Authors:
+//   Felix Schindler (2019)
+
+#include "config.h"
+
+#include <string>
+#include <vector>
+
+#include <dune/common/parallel/mpihelper.hh>
+
+#include <dune/pybindxi/pybind11.h>
+#include <dune/pybindxi/functional.h>
+#include <dune/pybindxi/stl.h>
+
+#include <dune/xt/common/string.hh>
+#include <dune/xt/grid/gridprovider/provider.hh>
+#include <dune/xt/grid/type_traits.hh>
+#include <dune/xt/functions/elementwise-minimum.hh>
+
+#include <python/dune/xt/common/parameter.hh>
+#include <python/dune/xt/common/fvector.hh>
+#include <python/dune/xt/common/fmatrix.hh>
+#include <python/dune/xt/common/bindings.hh>
+#include <python/dune/xt/grid/traits.hh>
+#include <python/dune/xt/common/exceptions.bindings.hh>
+
+namespace Dune {
+namespace XT {
+namespace Functions {
+namespace bindings {
+
+
+template <class G, class E, size_t r = 1, size_t rC = 1>
+class ElementwiseMinimumFunction
+{
+  using GP = XT::Grid::GridProvider<G>;
+  using GF = Functions::GridFunction<E, r, rC>;
+  static const size_t d = G::dimension;
+
+public:
+  using type = Functions::ElementwiseMinimumFunction<Functions::GridFunctionInterface<E, r, rC>>;
+  using base_type = Functions::GridFunctionInterface<E>;
+  using bound_type = pybind11::class_<type, base_type>;
+
+public:
+  static bound_type bind(pybind11::module& m,
+                         const std::string& grid_id = Grid::bindings::grid_name<G>::value(),
+                         const std::string& layer_id = "",
+                         const std::string& class_id = "elementwise_minimum_function")
+  {
+    namespace py = pybind11;
+    using namespace pybind11::literals;
+
+    std::string class_name = class_id;
+    class_name += "_" + grid_id;
+    if (!layer_id.empty())
+      class_name += "_" + layer_id;
+    class_name += "_to_" + Common::to_string(r);
+    if (rC > 1)
+      class_name += "x" + Common::to_string(rC);
+    class_name += "d";
+    const auto ClassName = Common::to_camel_case(class_name);
+    bound_type c(m, ClassName.c_str(), Common::to_camel_case(class_id).c_str());
+    c.def(py::init<GF, const int, const std::string&>(),
+          "grid_function"_a,
+          "search_quadrature_order"_a,
+          "name"_a = "ElementwiseMinimumFunction");
+
+    const auto FactoryName = Common::to_camel_case(class_id);
+    m.def(
+        FactoryName.c_str(),
+        [](GF grid_function, const int search_quadrature_order, const std::string& name) {
+          return new type(grid_function, search_quadrature_order, name);
+        },
+        "grid_function"_a,
+        "search_quadrature_order"_a,
+        "name"_a = "ElementwiseMinimumFunction");
+    m.def(
+        FactoryName.c_str(),
+        [](const Functions::GridFunction<E, r, rC>& grid_function,
+           const int search_quadrature_order,
+           const std::string& name) { return new type(grid_function, search_quadrature_order, name); },
+        "grid_function"_a,
+        "search_quadrature_order"_a,
+        "name"_a = "ElementwiseMinimumFunction",
+        py::keep_alive<0, 1>());
+
+    return c;
+  }
+}; // class GridFunction
+
+
+} // namespace bindings
+} // namespace Functions
+} // namespace XT
+} // namespace Dune
+
+
+template <class GridTypes = Dune::XT::Grid::AvailableGridTypes>
+struct ElementwiseMinimumFunction_for_all_grids
+{
+  using G = typename GridTypes::head_type;
+  using GV = typename G::LeafGridView;
+  using E = Dune::XT::Grid::extract_entity_t<GV>;
+
+  static void bind(pybind11::module& m)
+  {
+    using Dune::XT::Functions::bindings::ElementwiseMinimumFunction;
+    using Dune::XT::Grid::bindings::grid_name;
+
+    ElementwiseMinimumFunction<G, E, 1, 1>::bind(m, grid_name<G>::value());
+    ElementwiseMinimumFunction<G, E, 2, 2>::bind(m, grid_name<G>::value());
+    ElementwiseMinimumFunction<G, E, 3, 3>::bind(m, grid_name<G>::value());
+
+    ElementwiseMinimumFunction_for_all_grids<typename GridTypes::tail_type>::bind(m);
+  }
+};
+
+template <>
+struct ElementwiseMinimumFunction_for_all_grids<boost::tuples::null_type>
+{
+  static void bind(pybind11::module& /*m*/) {}
+};
+
+
+PYBIND11_MODULE(_functions_elementwise_minimum, m)
+{
+  namespace py = pybind11;
+
+  py::module::import("dune.xt.common");
+  py::module::import("dune.xt.grid");
+  py::module::import("dune.xt.la");
+  py::module::import("dune.xt.functions._functions_interfaces_grid_function_1d");
+  py::module::import("dune.xt.functions._functions_interfaces_grid_function_2d");
+  py::module::import("dune.xt.functions._functions_interfaces_grid_function_3d");
+  py::module::import("dune.xt.functions._functions_gridfunction");
+
+  ElementwiseMinimumFunction_for_all_grids<>::bind(m);
+} // PYBIND11_MODULE(...)