diff --git a/dune/xt/functions/base/visualization.hh b/dune/xt/functions/base/visualization.hh
index d411c21c106a000f8f04e3f65a49f2c1cc2fed31..75051a2f5c0bd6a566574b940ea8d296baf76a45 100644
--- a/dune/xt/functions/base/visualization.hh
+++ b/dune/xt/functions/base/visualization.hh
@@ -18,6 +18,7 @@
 #include <dune/grid/io/file/vtk/function.hh>
 
 #include <dune/xt/common/numeric_cast.hh>
+#include <dune/xt/common/memory.hh>
 #include <dune/xt/common/parameter.hh>
 
 #include <dune/xt/grid/type_traits.hh>
@@ -203,9 +204,18 @@ public:
     , param_(param)
   {}
 
+  VisualizationAdapter(const GridFunctionType& localizable_function,
+                       const std::string nm = "",
+                       const XT::Common::Parameter& param = {})
+    : local_function_(localizable_function.local_function())
+    , visualizer_(new DefaultVisualizer<range_dim, range_dim_cols, RangeField>())
+    , name_(nm.empty() ? localizable_function.name() : nm)
+    , param_(param)
+  {}
+
   int ncomps() const override final
   {
-    return visualizer_.ncomps();
+    return visualizer_.access().ncomps();
   }
 
   std::string name() const override final
@@ -217,12 +227,12 @@ public:
   {
     local_function_->bind(en);
     const auto value = local_function_->evaluate(xx, param_);
-    return visualizer_.evaluate(comp, value);
+    return visualizer_.access().evaluate(comp, value);
   }
 
 private:
   mutable std::unique_ptr<LocalFunctionType> local_function_;
-  const VisualizerInterface<range_dim, range_dim_cols, RangeField>& visualizer_;
+  const Common::ConstStorageProvider<VisualizerInterface<range_dim, range_dim_cols, RangeField>> visualizer_;
   const std::string name_;
   const XT::Common::Parameter param_;
 }; // class VisualizationAdapter