diff --git a/dune/vtk/filewriter.hh b/dune/vtk/filewriter.hh
index ecddbd2b0f6f72dcebb8f2f249af0e278e1ed5c0..803fe2566dc5a2bc2d93183e7145508497854ef0 100644
--- a/dune/vtk/filewriter.hh
+++ b/dune/vtk/filewriter.hh
@@ -1,8 +1,8 @@
 #pragma once
 
+#include <optional>
 #include <string>
 
-#include <dune/common/std/optional.hh>
 #include <dune/vtk/forward.hh>
 
 namespace Dune
@@ -14,7 +14,7 @@ namespace Dune
     virtual ~FileWriter () = default;
 
     /// Write to file given by `filename` and (optionally) store additional data in `dataDir`
-    virtual std::string write (std::string const& filename, Std::optional<std::string> dataDir = {}) const = 0;
+    virtual std::string write (std::string const& filename, std::optional<std::string> dataDir = {}) const = 0;
   };
 
 } // end namespace Dune
diff --git a/dune/vtk/gridcreators/lagrangegridcreator.hh b/dune/vtk/gridcreators/lagrangegridcreator.hh
index fa2a585775dc6ca50f6186ea9f42029864410169..c39750fe6be5f34fcb3fbb5d1516534668e76f65 100644
--- a/dune/vtk/gridcreators/lagrangegridcreator.hh
+++ b/dune/vtk/gridcreators/lagrangegridcreator.hh
@@ -3,11 +3,11 @@
 #include <cassert>
 #include <cstdint>
 #include <limits>
+#include <optional>
 #include <vector>
 
 #include <dune/common/exceptions.hh>
 #include <dune/common/hybridutilities.hh>
-#include <dune/common/std/optional.hh>
 #include <dune/geometry/utility/typefromvertexcount.hh>
 #include <dune/localfunctions/lagrange.hh>
 #include <dune/grid/common/gridfactory.hh>
@@ -297,7 +297,7 @@ namespace Dune
   private:
     LocalFE localFE_;
     std::vector<GlobalCoordinate> localNodes_;
-    Std::optional<LocalGeometry> localGeometry_;
+    std::optional<LocalGeometry> localGeometry_;
 
     mutable std::vector<typename LocalBasisTraits::RangeType> shapeValues_;
   };
@@ -343,7 +343,7 @@ namespace Dune
     LagrangeGridCreator const* gridCreator_;
 
     LocalContext localContext_;
-    Std::optional<LocalParametrization> localParametrization_;
+    std::optional<LocalParametrization> localParametrization_;
   };
 
 } // end namespace Dune
diff --git a/dune/vtk/pvdwriter.hh b/dune/vtk/pvdwriter.hh
index 38fef8f8055847aec5b8cf98642b8fb11b1337c6..7b256cc802e8f292219e46177a555a1f11ffa1cf 100644
--- a/dune/vtk/pvdwriter.hh
+++ b/dune/vtk/pvdwriter.hh
@@ -1,12 +1,11 @@
 #pragma once
 
 #include <iosfwd>
+#include <optional>
 #include <string>
 #include <vector>
 #include <tuple>
 
-#include <dune/common/std/optional.hh>
-
 #include <dune/vtk/vtktypes.hh>
 #include <dune/vtk/filewriter.hh>
 #include <dune/vtk/forward.hh>
@@ -42,7 +41,7 @@ namespace Dune
      * \param dir   Specifies where to write the timestep files.
      * \param writeCollection  Create a collection .pvd file directly
      **/
-    void writeTimestep (double time, std::string const& fn, Std::optional<std::string> dir = {},
+    void writeTimestep (double time, std::string const& fn, std::optional<std::string> dir = {},
                         bool writeCollection = true) const;
 
     /// \brief Writes collection of timesteps to .pvd file.
@@ -52,7 +51,7 @@ namespace Dune
      * \param dir (Ignored) Timestep files are already written and their filenames are
      *            stored in \ref timesteps_.
      **/
-    virtual std::string write (std::string const& fn, Std::optional<std::string> dir = {}) const override;
+    virtual std::string write (std::string const& fn, std::optional<std::string> dir = {}) const override;
 
     /// Attach point data to the writer, \see VtkFunction for possible arguments
     template <class Function, class... Args>
diff --git a/dune/vtk/pvdwriter.impl.hh b/dune/vtk/pvdwriter.impl.hh
index 347eaeb53c520e98962e80e8c0729367a19ec46e..7f84bd1ffdbd945fb99941010355c4eb3f410084 100644
--- a/dune/vtk/pvdwriter.impl.hh
+++ b/dune/vtk/pvdwriter.impl.hh
@@ -10,7 +10,7 @@ namespace Dune {
 
 template <class W>
 void PvdWriter<W>
-  ::writeTimestep (double time, std::string const& fn, Std::optional<std::string> dir, bool writeCollection) const
+  ::writeTimestep (double time, std::string const& fn, std::optional<std::string> dir, bool writeCollection) const
 {
   auto p = filesystem::path(fn);
   auto name = p.stem();
@@ -50,7 +50,7 @@ void PvdWriter<W>
 
 template <class W>
 std::string PvdWriter<W>
-  ::write (std::string const& fn, Std::optional<std::string> /*dir*/) const
+  ::write (std::string const& fn, std::optional<std::string> /*dir*/) const
 {
   auto p = filesystem::path(fn);
   auto name = p.stem();
diff --git a/dune/vtk/vtkfunction.hh b/dune/vtk/vtkfunction.hh
index 48444ec9d1a8b479a50756eba1f3f7ac68561869..d51f64c9af1a69c6affc6ff4481031a289fdeba9 100644
--- a/dune/vtk/vtkfunction.hh
+++ b/dune/vtk/vtkfunction.hh
@@ -1,8 +1,8 @@
 #pragma once
 
+#include <optional>
 #include <type_traits>
 
-#include <dune/common/std/optional.hh>
 #include <dune/common/std/type_traits.hh>
 
 #include "vtklocalfunction.hh"
@@ -52,7 +52,7 @@ namespace Dune
      * \param type  The VTK datatype how to write the function values to the output [Vtk::FLOAT64]
      **/
     VtkFunction (std::shared_ptr<VTKFunction<GridView> const> const& fct,
-                 Std::optional<Vtk::DataTypes> type = {})
+                 std::optional<Vtk::DataTypes> type = {})
       : localFct_(fct)
       , name_(fct->name())
       , ncomps_(fct->ncomps())
@@ -73,8 +73,8 @@ namespace Dune
     template <class F,
       class = void_t<LocalFunction<F>> >
     VtkFunction (F&& fct, std::string name,
-                 Std::optional<int> ncomps = {},
-                 Std::optional<Vtk::DataTypes> type = {})
+                 std::optional<int> ncomps = {},
+                 std::optional<Vtk::DataTypes> type = {})
       : localFct_(localFunction(std::forward<F>(fct)))
       , name_(std::move(name))
     {
@@ -88,7 +88,7 @@ namespace Dune
     template <class F,
       class = void_t<LocalFunction<F>> >
     VtkFunction (F&& fct, Vtk::FieldInfo fieldInfo,
-                 Std::optional<Vtk::DataTypes> type = {})
+                 std::optional<Vtk::DataTypes> type = {})
       : VtkFunction(std::forward<F>(fct), fieldInfo.name(), fieldInfo.ncomps(), type)
     {}
 
diff --git a/dune/vtk/vtktimeserieswriter.hh b/dune/vtk/vtktimeserieswriter.hh
index 21bcd6c20399d14e1e07bf11fb5ee437420e429f..bbac2b301ff0b4f167c0b7814b863ddee83f3a9e 100644
--- a/dune/vtk/vtktimeserieswriter.hh
+++ b/dune/vtk/vtktimeserieswriter.hh
@@ -1,12 +1,11 @@
 #pragma once
 
 #include <cassert>
+#include <optional>
 #include <string>
 #include <tuple>
 #include <vector>
 
-#include <dune/common/std/optional.hh>
-
 #include <dune/vtk/filewriter.hh>
 #include <dune/vtk/forward.hh>
 #include <dune/vtk/vtktypes.hh>
@@ -66,7 +65,7 @@ namespace Dune
      * \param writeCollection  Create a timeseries file directly
      **/
     void writeTimestep (double time, std::string const& fn,
-                        Std::optional<std::string> tmpDir = {},
+                        std::optional<std::string> tmpDir = {},
                         bool writeCollection = true) const;
 
     /// Writes all timesteps to single timeseries file.
@@ -79,7 +78,7 @@ namespace Dune
      * 
      * \returns File name of the actual written file
      **/
-    virtual std::string write (std::string const& fn, Std::optional<std::string> dir = {}) const override;
+    virtual std::string write (std::string const& fn, std::optional<std::string> dir = {}) const override;
 
     /// Attach point data to the writer, \see VtkFunction for possible arguments
     template <class Function, class... Args>
diff --git a/dune/vtk/vtktimeserieswriter.impl.hh b/dune/vtk/vtktimeserieswriter.impl.hh
index 96cacb967f83d1fd1043b8d8ef552e0ce6e5fa61..f3822daa7fc832cbe157a3e91fe71b06a55146fe 100644
--- a/dune/vtk/vtktimeserieswriter.impl.hh
+++ b/dune/vtk/vtktimeserieswriter.impl.hh
@@ -39,7 +39,7 @@ VtkTimeseriesWriter<W>::~VtkTimeseriesWriter ()
 
 template <class W>
 void VtkTimeseriesWriter<W>
-  ::writeTimestep (double time, std::string const& fn, Std::optional<std::string> tmpDir, bool writeCollection) const
+  ::writeTimestep (double time, std::string const& fn, std::optional<std::string> tmpDir, bool writeCollection) const
 {
   auto name = filesystem::path(fn).stem();
   auto tmpBase = tmpDir ? filesystem::path(*tmpDir) : tmpDir_;
@@ -75,7 +75,7 @@ void VtkTimeseriesWriter<W>
 
 template <class W>
 std::string VtkTimeseriesWriter<W>
-  ::write (std::string const& fn, Std::optional<std::string> dir) const
+  ::write (std::string const& fn, std::optional<std::string> dir) const
 {
   assert( initialized_ );
 
diff --git a/dune/vtk/vtkwriterinterface.hh b/dune/vtk/vtkwriterinterface.hh
index b379a0f6bf58f8fc260358acfe1c2df4f23f3602..8dadb0a5ed609c1c8d9af6bb7b066935fee4c12c 100644
--- a/dune/vtk/vtkwriterinterface.hh
+++ b/dune/vtk/vtkwriterinterface.hh
@@ -3,11 +3,11 @@
 #include <iosfwd>
 #include <map>
 #include <memory>
+#include <optional>
 #include <string>
 #include <vector>
 
 #include <dune/common/parallel/mpihelper.hh>
-#include <dune/common/std/optional.hh>
 #include <dune/vtk/filewriter.hh>
 #include <dune/vtk/forward.hh>
 #include <dune/vtk/vtkfunction.hh>
@@ -84,7 +84,7 @@ namespace Dune
      * 
      * \returns File name that is actually written.
      **/
-    virtual std::string write (std::string const& fn, Std::optional<std::string> dir = {}) const override;
+    virtual std::string write (std::string const& fn, std::optional<std::string> dir = {}) const override;
 
     /// \brief Attach point data to the writer
     /**
@@ -158,7 +158,7 @@ namespace Dune
                     std::vector<pos_type>& offsets,
                     VtkFunction const& fct,
                     PositionTypes type,
-                    Std::optional<std::size_t> timestep = {}) const;
+                    std::optional<std::size_t> timestep = {}) const;
 
     // Write point-data and cell-data in raw/compressed format to output stream
     void writeDataAppended (std::ofstream& out, std::vector<std::uint64_t>& blocks) const;
@@ -168,7 +168,7 @@ namespace Dune
     // vector `offsets`.
     void writePoints (std::ofstream& out,
                       std::vector<pos_type>& offsets,
-                      Std::optional<std::size_t> timestep = {}) const;
+                      std::optional<std::size_t> timestep = {}) const;
 
     // Write Appended section and fillin offset values to XML attributes
     void writeAppended (std::ofstream& out, std::vector<pos_type> const& offsets) const;
diff --git a/dune/vtk/vtkwriterinterface.impl.hh b/dune/vtk/vtkwriterinterface.impl.hh
index f0e7715b9d5f98998ad0c89a66763140945ac3ae..597774c9cbacb45aedd3269e8f6d28b7777a0e39 100644
--- a/dune/vtk/vtkwriterinterface.impl.hh
+++ b/dune/vtk/vtkwriterinterface.impl.hh
@@ -24,7 +24,7 @@ namespace Dune {
 
 template <class GV, class DC>
 std::string VtkWriterInterface<GV,DC>
-  ::write (std::string const& fn, Std::optional<std::string> dir) const
+  ::write (std::string const& fn, std::optional<std::string> dir) const
 {
   dataCollector_->update();
 
@@ -80,7 +80,7 @@ template <class GV, class DC>
 void VtkWriterInterface<GV,DC>
   ::writeData (std::ofstream& out, std::vector<pos_type>& offsets,
                VtkFunction const& fct, PositionTypes type,
-               Std::optional<std::size_t> timestep) const
+               std::optional<std::size_t> timestep) const
 {
   out << "<DataArray Name=\"" << fct.name() << "\" type=\"" << to_string(fct.type()) << "\""
       << " NumberOfComponents=\"" << fct.ncomps() << "\" format=\"" << (format_ == Vtk::ASCII ? "ascii\"" : "appended\"");
@@ -106,7 +106,7 @@ void VtkWriterInterface<GV,DC>
 template <class GV, class DC>
 void VtkWriterInterface<GV,DC>
   ::writePoints (std::ofstream& out, std::vector<pos_type>& offsets,
-                Std::optional<std::size_t> timestep) const
+                std::optional<std::size_t> timestep) const
 {
   out << "<DataArray type=\"" << to_string(datatype_) << "\""
       << " NumberOfComponents=\"3\" format=\"" << (format_ == Vtk::ASCII ? "ascii\"" : "appended\"");
diff --git a/dune/vtk/writers/vtkrectilineargridwriter.hh b/dune/vtk/writers/vtkrectilineargridwriter.hh
index 32e2e4b76c0ec11e9a8b3d0bdd94d1fcd44bdfc9..f119a0501f54adff0987b4e7112fb4d386f8300a 100644
--- a/dune/vtk/writers/vtkrectilineargridwriter.hh
+++ b/dune/vtk/writers/vtkrectilineargridwriter.hh
@@ -42,7 +42,7 @@ namespace Dune
     virtual void writeParallelFile (std::ofstream& out, std::string const& pfilename, int size) const override;
 
     void writeCoordinates (std::ofstream& out, std::vector<pos_type>& offsets,
-                           Std::optional<std::size_t> timestep = {}) const;
+                           std::optional<std::size_t> timestep = {}) const;
 
     template <class T>
     std::array<std::uint64_t, 3> writeCoordinatesAppended (std::ofstream& out) const;
diff --git a/dune/vtk/writers/vtkrectilineargridwriter.impl.hh b/dune/vtk/writers/vtkrectilineargridwriter.impl.hh
index d7be66f27493a2a9e93fe603ded13815f0e5f19c..f2c822382e96f4c5d4f0c7e4d991fbf44146e483 100644
--- a/dune/vtk/writers/vtkrectilineargridwriter.impl.hh
+++ b/dune/vtk/writers/vtkrectilineargridwriter.impl.hh
@@ -116,7 +116,7 @@ void VtkRectilinearGridWriter<GV,DC>
 template <class GV, class DC>
 void VtkRectilinearGridWriter<GV,DC>
   ::writeCoordinates (std::ofstream& out, std::vector<pos_type>& offsets,
-                      Std::optional<std::size_t> timestep) const
+                      std::optional<std::size_t> timestep) const
 {
   std::string names = "xyz";
   if (format_ == Vtk::ASCII) {
diff --git a/dune/vtk/writers/vtkunstructuredgridwriter.hh b/dune/vtk/writers/vtkunstructuredgridwriter.hh
index e1732cb7c52c0fc6c0d221e3c6acff1e12504bff..a1d557ba9a35e04c43369c123c9e257d0a598482 100644
--- a/dune/vtk/writers/vtkunstructuredgridwriter.hh
+++ b/dune/vtk/writers/vtkunstructuredgridwriter.hh
@@ -74,11 +74,11 @@ namespace Dune
     // vector `offsets`.
     void writeCells (std::ofstream& out,
                      std::vector<pos_type>& offsets,
-                     Std::optional<std::size_t> timestep = {}) const;
+                     std::optional<std::size_t> timestep = {}) const;
 
     void writePointIds (std::ofstream& out,
                         std::vector<pos_type>& offsets,
-                        Std::optional<std::size_t> timestep = {}) const;
+                        std::optional<std::size_t> timestep = {}) const;
 
   private:
     using Super::dataCollector_;
diff --git a/dune/vtk/writers/vtkunstructuredgridwriter.impl.hh b/dune/vtk/writers/vtkunstructuredgridwriter.impl.hh
index 8819e22c8a73da8b5b889f9874db71ab2f028151..7eb17d4247f9f1db17f1e26e69ef2853b14a2a33 100644
--- a/dune/vtk/writers/vtkunstructuredgridwriter.impl.hh
+++ b/dune/vtk/writers/vtkunstructuredgridwriter.impl.hh
@@ -281,7 +281,7 @@ void VtkUnstructuredGridWriter<GV,DC>
 template <class GV, class DC>
 void VtkUnstructuredGridWriter<GV,DC>
   ::writeCells (std::ofstream& out, std::vector<pos_type>& offsets,
-                Std::optional<std::size_t> timestep) const
+                std::optional<std::size_t> timestep) const
 {
   if (format_ == Vtk::ASCII) {
     auto cells = dataCollector_->cells();
@@ -337,7 +337,7 @@ template <class GV, class DC>
 void VtkUnstructuredGridWriter<GV,DC>
   ::writePointIds (std::ofstream& out,
                    std::vector<pos_type>& offsets,
-                   Std::optional<std::size_t> timestep) const
+                   std::optional<std::size_t> timestep) const
 {
   auto ids = dataCollector_->pointIds();
   if (ids.empty())