diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index 94e50b868ece17c351d5aae5a291a385fa55152f..2c5e86d18f4a29bbe82099b6ec8be6dcc0638f9c 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -209,8 +209,8 @@ std::vector<std::unique_ptr<MeshLib::Mesh>> readMeshes(
     return meshes;
 }
 
-boost::optional<ParameterLib::CoordinateSystem> parseLocalCoordinateSystem(
-    boost::optional<BaseLib::ConfigTree> const& config,
+std::optional<ParameterLib::CoordinateSystem> parseLocalCoordinateSystem(
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
     if (!config)
@@ -436,7 +436,7 @@ std::vector<std::string> ProjectData::parseParameters(
 }
 
 void ProjectData::parseMedia(
-    boost::optional<BaseLib::ConfigTree> const& media_config)
+    std::optional<BaseLib::ConfigTree> const& media_config)
 {
     if (!media_config)
     {
@@ -516,7 +516,7 @@ void ProjectData::parseMedia(
 
 std::unique_ptr<ChemistryLib::ChemicalSolverInterface>
 ProjectData::parseChemicalSolverInterface(
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::string const& output_directory)
 {
     if (!config)
@@ -1123,8 +1123,7 @@ void ProjectData::parseNonlinearSolvers(BaseLib::ConfigTree const& config)
     }
 }
 
-void ProjectData::parseCurves(
-    boost::optional<BaseLib::ConfigTree> const& config)
+void ProjectData::parseCurves(std::optional<BaseLib::ConfigTree> const& config)
 {
     if (!config)
     {
diff --git a/Applications/ApplicationsLib/ProjectData.h b/Applications/ApplicationsLib/ProjectData.h
index 9a10ed39a0da670c768b8364f741af84b922b87a..3382051ecdc680d7f2c825bcabc9b691df7e52f2 100644
--- a/Applications/ApplicationsLib/ProjectData.h
+++ b/Applications/ApplicationsLib/ProjectData.h
@@ -94,7 +94,7 @@ private:
         BaseLib::ConfigTree const& parameters_config);
 
     /// Parses media configuration and saves them in an object.
-    void parseMedia(boost::optional<BaseLib::ConfigTree> const& media_config);
+    void parseMedia(std::optional<BaseLib::ConfigTree> const& media_config);
 
     /// Parses the processes configuration and creates new processes for each
     /// process entry passing the corresponding subtree to the process
@@ -113,11 +113,11 @@ private:
 
     void parseNonlinearSolvers(BaseLib::ConfigTree const& config);
 
-    void parseCurves(boost::optional<BaseLib::ConfigTree> const& config);
+    void parseCurves(std::optional<BaseLib::ConfigTree> const& config);
 
     std::unique_ptr<ChemistryLib::ChemicalSolverInterface>
     parseChemicalSolverInterface(
-        boost::optional<BaseLib::ConfigTree> const& config,
+        std::optional<BaseLib::ConfigTree> const& config,
         const std::string& output_directory);
 
     std::vector<std::unique_ptr<MeshLib::Mesh>> _mesh_vec;
@@ -127,7 +127,7 @@ private:
     /// Buffer for each parameter config passed to the process.
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> _parameters;
 
-    boost::optional<ParameterLib::CoordinateSystem> _local_coordinate_system;
+    std::optional<ParameterLib::CoordinateSystem> _local_coordinate_system;
 
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> _media;
 
diff --git a/Applications/FileIO/AsciiRasterInterface.cpp b/Applications/FileIO/AsciiRasterInterface.cpp
index 3ec7d32af034f8a7fcb1ef6d5d4634eceff5d111..ea001828e8cefa598d1ec8bccf5d61b20bd5ceb8 100644
--- a/Applications/FileIO/AsciiRasterInterface.cpp
+++ b/Applications/FileIO/AsciiRasterInterface.cpp
@@ -282,7 +282,7 @@ static bool allRastersExist(std::vector<std::string> const& raster_paths)
     return true;
 }
 
-boost::optional<std::vector<GeoLib::Raster const*>> readRasters(
+std::optional<std::vector<GeoLib::Raster const*>> readRasters(
     std::vector<std::string> const& raster_paths)
 {
     if (!allRastersExist(raster_paths))
diff --git a/Applications/FileIO/AsciiRasterInterface.h b/Applications/FileIO/AsciiRasterInterface.h
index 31e53f1a5031338667ea7d0a397a2eb6928dc669..4420d88c894ba5ba3f5427112f32ea2055d1e33a 100644
--- a/Applications/FileIO/AsciiRasterInterface.h
+++ b/Applications/FileIO/AsciiRasterInterface.h
@@ -53,6 +53,6 @@ private:
 
 /// Reads a vector of rasters given by file names. On error nothing is returned,
 /// otherwise the returned vector contains pointers to the read rasters.
-boost::optional<std::vector<GeoLib::Raster const*>> readRasters(
+std::optional<std::vector<GeoLib::Raster const*>> readRasters(
     std::vector<std::string> const& raster_paths);
 } // end namespace FileIO
diff --git a/Applications/FileIO/GocadIO/GocadSGridReader.cpp b/Applications/FileIO/GocadIO/GocadSGridReader.cpp
index af78fa944e81fad425fc1d0ffb773ea5033ebbfa..90a9df3ae6e05acacb66474741114c07d2debf29 100644
--- a/Applications/FileIO/GocadIO/GocadSGridReader.cpp
+++ b/Applications/FileIO/GocadIO/GocadSGridReader.cpp
@@ -198,7 +198,7 @@ void GocadSGridReader::addGocadPropertiesToMesh(MeshLib::Mesh& mesh) const
     std::vector<std::string> const& prop_names(getPropertyNames());
     for (auto const& name : prop_names)
     {
-        boost::optional<Gocad::Property const&> prop(getProperty(name));
+        std::optional<Gocad::Property const&> prop(getProperty(name));
         if (!prop)
         {
             continue;
@@ -730,7 +730,7 @@ void GocadSGridReader::modifyElement(MeshLib::Element* hex,
     }
 }
 
-boost::optional<Gocad::Property const&> GocadSGridReader::getProperty(
+std::optional<Gocad::Property const&> GocadSGridReader::getProperty(
     std::string const& name) const
 {
     auto const it(std::find_if(_property_meta_data_vecs.begin(),
@@ -740,9 +740,9 @@ boost::optional<Gocad::Property const&> GocadSGridReader::getProperty(
                                }));
     if (it == _property_meta_data_vecs.end())
     {
-        return boost::optional<Gocad::Property const&>();
+        return std::optional<Gocad::Property const&>();
     }
-    return boost::optional<Gocad::Property const&>(*it);
+    return std::optional<Gocad::Property const&>(*it);
 }
 
 std::vector<std::string> GocadSGridReader::getPropertyNames() const
diff --git a/Applications/FileIO/GocadIO/GocadSGridReader.h b/Applications/FileIO/GocadIO/GocadSGridReader.h
index 3e2715450c8bddac0759a3ac6f69c524bcbae3a8..111f8a920732ebb6c563d86de5b2cbbe80ad8062 100644
--- a/Applications/FileIO/GocadIO/GocadSGridReader.h
+++ b/Applications/FileIO/GocadIO/GocadSGridReader.h
@@ -83,7 +83,7 @@ private:
         std::vector<MeshLib::Node*>& face_set_nodes,
         std::vector<MeshLib::Element*>& face_set_elements) const;
 
-    boost::optional<Gocad::Property const&> getProperty(
+    std::optional<Gocad::Property const&> getProperty(
         std::string const& name) const;
     void addGocadPropertiesToMesh(MeshLib::Mesh& mesh) const;
 
diff --git a/BaseLib/Algorithm.h b/BaseLib/Algorithm.h
index e1fa9f962525d24119c7097823d81e887528c1df..861dda11917fd0b991170d9ba3519335761b2139 100644
--- a/BaseLib/Algorithm.h
+++ b/BaseLib/Algorithm.h
@@ -270,7 +270,7 @@ bool containsIf(Container const& container, Predicate&& predicate)
 }
 
 template <typename Container>
-boost::optional<typename Container::value_type> findFirstNotEqualElement(
+std::optional<typename Container::value_type> findFirstNotEqualElement(
     Container const& container, typename Container::value_type const& element)
 {
     auto const it =
diff --git a/BaseLib/ConfigTree-impl.h b/BaseLib/ConfigTree-impl.h
index 25ce1ac49126488c15b4a6b6d539d8427614fdd6..54f4e610efda677c23216f069478d7120093b99e 100644
--- a/BaseLib/ConfigTree-impl.h
+++ b/BaseLib/ConfigTree-impl.h
@@ -62,7 +62,7 @@ getConfigParameter(std::string const& param, T const& default_value) const
 }
 
 template <typename T>
-boost::optional<T> ConfigTree::getConfigParameterOptional(
+std::optional<T> ConfigTree::getConfigParameterOptional(
     std::string const& param) const
 {
     checkUnique(param);
@@ -71,7 +71,7 @@ boost::optional<T> ConfigTree::getConfigParameterOptional(
 }
 
 template <typename T>
-boost::optional<T> ConfigTree::getConfigParameterOptionalImpl(
+std::optional<T> ConfigTree::getConfigParameterOptionalImpl(
     std::string const& param, T* /*unused*/) const
 {
     if (auto p = getConfigSubtreeOptional(param))
@@ -83,7 +83,7 @@ boost::optional<T> ConfigTree::getConfigParameterOptionalImpl(
 }
 
 template <typename T>
-boost::optional<std::vector<T>> ConfigTree::getConfigParameterOptionalImpl(
+std::optional<std::vector<T>> ConfigTree::getConfigParameterOptionalImpl(
     std::string const& param, std::vector<T>* /*unused*/) const
 {
     if (auto p = getConfigSubtreeOptional(param))
@@ -214,10 +214,9 @@ T ConfigTree::getConfigAttribute(std::string const& attr,
     return default_value;
 }
 
-template<typename T>
-boost::optional<T>
-ConfigTree::
-getConfigAttributeOptional(std::string const& attr) const
+template <typename T>
+std::optional<T> ConfigTree::getConfigAttributeOptional(
+    std::string const& attr) const
 {
     checkUniqueAttr(attr);
     auto& ct = markVisited<T>(attr, Attr::ATTR, true);
diff --git a/BaseLib/ConfigTree.cpp b/BaseLib/ConfigTree.cpp
index f6fd22d1a44ccf94ebfdd6a0b23ffc83ba284651..dda172e81cb6774cb9225953caa741a54aa6d7e3 100644
--- a/BaseLib/ConfigTree.cpp
+++ b/BaseLib/ConfigTree.cpp
@@ -120,9 +120,8 @@ getConfigParameter(std::string const& root) const
     return ct;
 }
 
-boost::optional<ConfigTree>
-ConfigTree::
-getConfigParameterOptional(std::string const& root) const
+std::optional<ConfigTree> ConfigTree::getConfigParameterOptional(
+    std::string const& root) const
 {
     auto ct = getConfigSubtreeOptional(root);
     if (ct && ct->hasChildren())
@@ -156,9 +155,8 @@ getConfigSubtree(std::string const& root) const
     error("Key <" + root + "> has not been found.");
 }
 
-boost::optional<ConfigTree>
-ConfigTree::
-getConfigSubtreeOptional(std::string const& root) const
+std::optional<ConfigTree> ConfigTree::getConfigSubtreeOptional(
+    std::string const& root) const
 {
     checkUnique(root);
 
diff --git a/BaseLib/ConfigTree.h b/BaseLib/ConfigTree.h
index 8b763d53c584ac58dfb6bcfa620f6f8e99fae41d..493798de2095cbeb6f8ba497dfb0f650437b7ead 100644
--- a/BaseLib/ConfigTree.h
+++ b/BaseLib/ConfigTree.h
@@ -308,8 +308,8 @@ public:
      *
      * \pre \c param must not have been read before from this ConfigTree.
      */
-    template<typename T> boost::optional<T>
-    getConfigParameterOptional(std::string const& param) const;
+    template <typename T>
+    std::optional<T> getConfigParameterOptional(std::string const& param) const;
 
     /*! Fetches all parameters with name \c param from the current level of the tree.
      *
@@ -347,7 +347,7 @@ public:
      *
      * \pre \c param must not have been read before from this ConfigTree.
      */
-    boost::optional<ConfigTree> getConfigParameterOptional(
+    std::optional<ConfigTree> getConfigParameterOptional(
         std::string const& root) const;
 
     /*! Fetches all parameters with name \c param from the current level of the tree.
@@ -398,8 +398,8 @@ public:
      *
      * \pre \c attr must not have been read before from the current parameter.
      */
-    template<typename T> boost::optional<T>
-    getConfigAttributeOptional(std::string const& attr) const;
+    template <typename T>
+    std::optional<T> getConfigAttributeOptional(std::string const& attr) const;
 
     //!\}
 
@@ -454,8 +454,8 @@ public:
      *
      * \pre \c root must not have been read before from this ConfigTree.
      */
-    boost::optional<ConfigTree>
-    getConfigSubtreeOptional(std::string const& root) const;
+    std::optional<ConfigTree> getConfigSubtreeOptional(
+        std::string const& root) const;
 
     /*! Get all subtrees that have a root \c root from the current level of the tree.
      *
@@ -520,12 +520,12 @@ public:
 private:
     //! Default implementation of reading a value of type T.
     template <typename T>
-    boost::optional<T> getConfigParameterOptionalImpl(std::string const& param,
-                                                      T* /*unused*/) const;
+    std::optional<T> getConfigParameterOptionalImpl(std::string const& param,
+                                                    T* /*unused*/) const;
 
     //! Implementation of reading a vector of values of type T.
     template <typename T>
-    boost::optional<std::vector<T>> getConfigParameterOptionalImpl(
+    std::optional<std::vector<T>> getConfigParameterOptionalImpl(
         std::string const& param, std::vector<T>* /*unused*/) const;
 
     struct CountType
diff --git a/ChemistryLib/Common/CreateReactionRate.cpp b/ChemistryLib/Common/CreateReactionRate.cpp
index cd1baec444a303105b12d95abc91f63639410f0f..a32b049b129b30f5e003f29d665bf6186e580969 100644
--- a/ChemistryLib/Common/CreateReactionRate.cpp
+++ b/ChemistryLib/Common/CreateReactionRate.cpp
@@ -18,7 +18,7 @@ namespace ChemistryLib
 {
 template <typename ReactionRate>
 std::vector<ReactionRate> createReactionRates(
-    boost::optional<BaseLib::ConfigTree> const& config)
+    std::optional<BaseLib::ConfigTree> const& config)
 {
     if (!config)
     {
@@ -56,9 +56,9 @@ std::vector<ReactionRate> createReactionRates(
 
 template std::vector<PhreeqcIOData::ReactionRate>
 createReactionRates<PhreeqcIOData::ReactionRate>(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 
 template std::vector<PhreeqcKernelData::ReactionRate>
 createReactionRates<PhreeqcKernelData::ReactionRate>(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/Common/CreateReactionRate.h b/ChemistryLib/Common/CreateReactionRate.h
index c38211d87a70fb30353b106403263d343ec3a9df..4b590cf88caa4049386b852f18b9a22ba0d0c9c8 100644
--- a/ChemistryLib/Common/CreateReactionRate.h
+++ b/ChemistryLib/Common/CreateReactionRate.h
@@ -22,5 +22,5 @@ namespace ChemistryLib
 {
 template <typename ReactionRate>
 std::vector<ReactionRate> createReactionRates(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.cpp b/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.cpp
index 8455a6f23a95b11aeae478540dba07185a1b77b0..e4f90c513a413b782f2a89ef456fb751ac2f4a54 100644
--- a/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.cpp
+++ b/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.cpp
@@ -20,7 +20,7 @@ namespace ChemistryLib
 namespace PhreeqcIOData
 {
 std::vector<EquilibriumReactant> createEquilibriumReactants(
-    boost::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.h b/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.h
index c90e3f0a562a5d8f4fb04276458497cc83dd1fd8..beb4567e53d300ffeb752b5609a2ae8043581c8f 100644
--- a/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.h
+++ b/ChemistryLib/PhreeqcIOData/CreateEquilibriumReactants.h
@@ -33,6 +33,6 @@ namespace PhreeqcIOData
 struct EquilibriumReactant;
 
 std::vector<EquilibriumReactant> createEquilibriumReactants(
-    boost::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh);
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh);
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/CreateKineticReactant.cpp b/ChemistryLib/PhreeqcIOData/CreateKineticReactant.cpp
index 8ab72618334ff9349f37e8023baa4f29e1c42e16..3e1efb03e2ec43b56292021450b9bf6886c1b7e1 100644
--- a/ChemistryLib/PhreeqcIOData/CreateKineticReactant.cpp
+++ b/ChemistryLib/PhreeqcIOData/CreateKineticReactant.cpp
@@ -20,7 +20,7 @@ namespace ChemistryLib
 namespace PhreeqcIOData
 {
 std::vector<KineticReactant> createKineticReactants(
-    boost::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcIOData/CreateKineticReactant.h b/ChemistryLib/PhreeqcIOData/CreateKineticReactant.h
index ae953e8eb0325854a50865d6294f513364215ecc..e1a1ffaaba88df6a4d72b25645505d60276d0c3f 100644
--- a/ChemistryLib/PhreeqcIOData/CreateKineticReactant.h
+++ b/ChemistryLib/PhreeqcIOData/CreateKineticReactant.h
@@ -33,6 +33,6 @@ namespace PhreeqcIOData
 struct KineticReactant;
 
 std::vector<KineticReactant> createKineticReactants(
-    boost::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh);
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh& mesh);
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/CreateSurface.cpp b/ChemistryLib/PhreeqcIOData/CreateSurface.cpp
index 4d92b2c167a3abfd3668c2e085ee1f59ce4b18b3..320ce8718fb135d3350a9c41479ea45ea66286a6 100644
--- a/ChemistryLib/PhreeqcIOData/CreateSurface.cpp
+++ b/ChemistryLib/PhreeqcIOData/CreateSurface.cpp
@@ -18,7 +18,7 @@ namespace ChemistryLib
 namespace PhreeqcIOData
 {
 std::vector<SurfaceSite> createSurface(
-    boost::optional<BaseLib::ConfigTree> const& config)
+    std::optional<BaseLib::ConfigTree> const& config)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcIOData/CreateSurface.h b/ChemistryLib/PhreeqcIOData/CreateSurface.h
index bf591dd8e738da574a6665ca083a473cf9c87b68..aa09e67c7d032a491efcc3f8b8d38bc9481c0b62 100644
--- a/ChemistryLib/PhreeqcIOData/CreateSurface.h
+++ b/ChemistryLib/PhreeqcIOData/CreateSurface.h
@@ -25,6 +25,6 @@ namespace PhreeqcIOData
 struct SurfaceSite;
 
 std::vector<SurfaceSite> createSurface(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/CreateUserPunch.cpp b/ChemistryLib/PhreeqcIOData/CreateUserPunch.cpp
index 37a3a14689145a49b19787e292da3a3d4c939781..d67764f5d42c86f8af32b2e558a355c20bf68a2b 100644
--- a/ChemistryLib/PhreeqcIOData/CreateUserPunch.cpp
+++ b/ChemistryLib/PhreeqcIOData/CreateUserPunch.cpp
@@ -19,8 +19,7 @@ namespace ChemistryLib
 namespace PhreeqcIOData
 {
 std::unique_ptr<UserPunch> createUserPunch(
-    boost::optional<BaseLib::ConfigTree> const& config,
-    MeshLib::Mesh const& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh const& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcIOData/CreateUserPunch.h b/ChemistryLib/PhreeqcIOData/CreateUserPunch.h
index 4ae80827778254145e44f2e3a40830f473d1592c..337e80b4a786ef6da7996460cad26c98dc5e1b4a 100644
--- a/ChemistryLib/PhreeqcIOData/CreateUserPunch.h
+++ b/ChemistryLib/PhreeqcIOData/CreateUserPunch.h
@@ -30,7 +30,7 @@ namespace PhreeqcIOData
 struct UserPunch;
 
 std::unique_ptr<UserPunch> createUserPunch(
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     MeshLib::Mesh const& mesh);
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.cpp b/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.cpp
index be017ff526c4f81eefc1bed2ff828ad0d7907f66..4e395334b3fa3a3deefdbc51a93719fd7e3036f2 100644
--- a/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.cpp
+++ b/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.cpp
@@ -21,8 +21,7 @@ namespace ChemistryLib
 namespace PhreeqcKernelData
 {
 std::unique_ptr<EquilibriumReactants> createEquilibriumReactants(
-    boost::optional<BaseLib::ConfigTree> const& config,
-    MeshLib::Mesh const& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh const& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.h b/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.h
index 25fc42fb05518265b7909de53a6283e8283a893a..ff9b224b709329ae01e1b2582d547887988d9f07 100644
--- a/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.h
+++ b/ChemistryLib/PhreeqcKernelData/CreateEquilibriumReactants.h
@@ -30,7 +30,7 @@ namespace ChemistryLib
 namespace PhreeqcKernelData
 {
 std::unique_ptr<EquilibriumReactants> createEquilibriumReactants(
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     MeshLib::Mesh const& mesh);
 }
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.cpp b/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.cpp
index 979813c43d636a5394ae10ea4a8c8d2a06030b18..9e62e56b73525e6271b43de47c46845b206edea8 100644
--- a/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.cpp
+++ b/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.cpp
@@ -21,8 +21,7 @@ namespace ChemistryLib
 namespace PhreeqcKernelData
 {
 std::unique_ptr<Kinetics> createKineticReactants(
-    boost::optional<BaseLib::ConfigTree> const& config,
-    MeshLib::Mesh const& mesh)
+    std::optional<BaseLib::ConfigTree> const& config, MeshLib::Mesh const& mesh)
 {
     if (!config)
     {
diff --git a/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.h b/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.h
index 34742f30c579dd522b07800df5996dbd70f425ee..12da8a28813594f28e505625f34f1bea8aa5b96e 100644
--- a/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.h
+++ b/ChemistryLib/PhreeqcKernelData/CreateKineticReactant.h
@@ -30,7 +30,7 @@ namespace ChemistryLib
 namespace PhreeqcKernelData
 {
 std::unique_ptr<Kinetics> createKineticReactants(
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     MeshLib::Mesh const& mesh);
 }
 }  // namespace ChemistryLib
diff --git a/GeoLib/SurfaceGrid.cpp b/GeoLib/SurfaceGrid.cpp
index 3f66c58e6ad2f9113c395a160936924f62e56ea6..253283426b8da213d4b7aa397690dd7e5dfcd652 100644
--- a/GeoLib/SurfaceGrid.cpp
+++ b/GeoLib/SurfaceGrid.cpp
@@ -140,19 +140,19 @@ void SurfaceGrid::sortTrianglesInGridCells(Surface const*const sfc)
 bool SurfaceGrid::sortTriangleInGridCells(Triangle const*const triangle)
 {
     // compute grid coordinates for each triangle point
-    boost::optional<std::array<std::size_t, 3> const> c_p0(
+    std::optional<std::array<std::size_t, 3> const> c_p0(
         getGridCellCoordinates(*(triangle->getPoint(0))));
     if (!c_p0)
     {
         return false;
     }
-    boost::optional<std::array<std::size_t, 3> const> c_p1(
+    std::optional<std::array<std::size_t, 3> const> c_p1(
         getGridCellCoordinates(*(triangle->getPoint(1))));
     if (!c_p1)
     {
         return false;
     }
-    boost::optional<std::array<std::size_t, 3> const> c_p2(
+    std::optional<std::array<std::size_t, 3> const> c_p2(
         getGridCellCoordinates(*(triangle->getPoint(2))));
     if (!c_p2)
     {
@@ -181,8 +181,8 @@ bool SurfaceGrid::sortTriangleInGridCells(Triangle const*const triangle)
     return true;
 }
 
-boost::optional<std::array<std::size_t, 3>>
-SurfaceGrid::getGridCellCoordinates(MathLib::Point3d const& p) const
+std::optional<std::array<std::size_t, 3>> SurfaceGrid::getGridCellCoordinates(
+    MathLib::Point3d const& p) const
 {
     std::array<std::size_t, 3> coords{{
         static_cast<std::size_t>((p[0]-_min_pnt[0]) * _inverse_step_sizes[0]),
@@ -196,15 +196,15 @@ SurfaceGrid::getGridCellCoordinates(MathLib::Point3d const& p) const
             "({:d},{:d},{:d})",
             coords[0], coords[1], coords[2], _n_steps[0], _n_steps[1],
             _n_steps[2]);
-        return boost::optional<std::array<std::size_t, 3>>();
+        return std::optional<std::array<std::size_t, 3>>();
     }
-    return boost::optional<std::array<std::size_t, 3>>(coords);
+    return std::optional<std::array<std::size_t, 3>>(coords);
 }
 
 bool SurfaceGrid::isPointInSurface(MathLib::Point3d const& pnt,
                                    double eps) const
 {
-    boost::optional<std::array<std::size_t, 3>> optional_c(
+    std::optional<std::array<std::size_t, 3>> optional_c(
         getGridCellCoordinates(pnt));
     if (!optional_c) {
         return false;
diff --git a/GeoLib/SurfaceGrid.h b/GeoLib/SurfaceGrid.h
index b8cf35468dcf8dee5ae6a13b28de7cb8ce4d1491..b6de0983ab4175b92baa011a1f771a905c1e0586 100644
--- a/GeoLib/SurfaceGrid.h
+++ b/GeoLib/SurfaceGrid.h
@@ -36,8 +36,8 @@ public:
 private:
     void sortTrianglesInGridCells(GeoLib::Surface const* const sfc);
     bool sortTriangleInGridCells(GeoLib::Triangle const*const triangle);
-    boost::optional<std::array<std::size_t,3>>
-        getGridCellCoordinates(MathLib::Point3d const& p) const;
+    std::optional<std::array<std::size_t, 3>> getGridCellCoordinates(
+        MathLib::Point3d const& p) const;
     std::array<double,3> _step_sizes{};
     std::array<double,3> _inverse_step_sizes{};
     std::array<std::size_t,3> _n_steps;
diff --git a/MaterialLib/MPL/CreateComponent.cpp b/MaterialLib/MPL/CreateComponent.cpp
index 905c39f94dace374ac237d724a9800f91d20a94d..8037602afa512c430c045ab62811878f4f0e24dd 100644
--- a/MaterialLib/MPL/CreateComponent.cpp
+++ b/MaterialLib/MPL/CreateComponent.cpp
@@ -73,7 +73,7 @@ namespace MaterialPropertyLib
 {
 std::vector<std::unique_ptr<Component>> createComponents(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreateComponent.h b/MaterialLib/MPL/CreateComponent.h
index 3387454de2c1c65745e4bafa93dcc9b1f89e47d6..ad47396c493b92c1dab769acc170342fe21b84c9 100644
--- a/MaterialLib/MPL/CreateComponent.h
+++ b/MaterialLib/MPL/CreateComponent.h
@@ -45,7 +45,7 @@ namespace MaterialPropertyLib
 /// without predefined properties is created.
 std::vector<std::unique_ptr<Component>> createComponents(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreatePhase.cpp b/MaterialLib/MPL/CreatePhase.cpp
index 18b48f8fbe092c5161f8a5f404f0b70ec2f07267..42e9585846ae4c5ea4ed83d7dff4af4a2bdc5ff6 100644
--- a/MaterialLib/MPL/CreatePhase.cpp
+++ b/MaterialLib/MPL/CreatePhase.cpp
@@ -91,7 +91,7 @@ namespace MaterialPropertyLib
 {
 std::vector<std::unique_ptr<Phase>> createPhases(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreatePhase.h b/MaterialLib/MPL/CreatePhase.h
index d931e3bbd0786e7194eb568da9df473b47438456..5b50e129c895bc91101a0fea1b6fd72cb5ab4e53 100644
--- a/MaterialLib/MPL/CreatePhase.h
+++ b/MaterialLib/MPL/CreatePhase.h
@@ -49,7 +49,7 @@ namespace MaterialPropertyLib
 /// weighted by mole fraction.
 std::vector<std::unique_ptr<Phase>> createPhases(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreateProperty.cpp b/MaterialLib/MPL/CreateProperty.cpp
index 45a02994c7e37e1839cca9ffe0e16ff66d283737..8f46529d23b9200876eda5091e0b7aae9460825c 100644
--- a/MaterialLib/MPL/CreateProperty.cpp
+++ b/MaterialLib/MPL/CreateProperty.cpp
@@ -231,7 +231,7 @@ namespace MaterialPropertyLib
 {
 std::unique_ptr<PropertyArray> createProperties(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/MPL/CreateProperty.h b/MaterialLib/MPL/CreateProperty.h
index 32fe4d8c9905c5f7b26f2885e255dd8114f74c82..28b0f79bc8d876526e01dcdbcc2977407309a59e 100644
--- a/MaterialLib/MPL/CreateProperty.h
+++ b/MaterialLib/MPL/CreateProperty.h
@@ -48,7 +48,7 @@ using PropertyArray =
 /// properties array.
 std::unique_ptr<PropertyArray> createProperties(
     int const geometry_dimension,
-    boost::optional<BaseLib::ConfigTree> const& config,
+    std::optional<BaseLib::ConfigTree> const& config,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     ParameterLib::CoordinateSystem const* const local_coordinate_system,
     std::map<std::string,
diff --git a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
index 72fd437531a178f87a41fd0ba820fd9c6cce7695..147571c3f6a67faa921e5e5b7f03f6a627c0400c 100644
--- a/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
+++ b/MaterialLib/SolidModels/CreateConstitutiveRelation.cpp
@@ -35,7 +35,7 @@ template <int DisplacementDim>
 std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
 createConstitutiveRelation(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config)
 {
@@ -91,7 +91,7 @@ std::map<int,
          std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
 createConstitutiveRelations(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config)
 {
@@ -135,14 +135,14 @@ createConstitutiveRelations(
 template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
 createConstitutiveRelations<2>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 
 template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
 createConstitutiveRelations<3>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/CreateConstitutiveRelation.h b/MaterialLib/SolidModels/CreateConstitutiveRelation.h
index 3f5c51964ed371e745b86e73a5c5ace39c9a4710..926906b5d2e9d6aad6db9dbf50aaa8b88f918a63 100644
--- a/MaterialLib/SolidModels/CreateConstitutiveRelation.h
+++ b/MaterialLib/SolidModels/CreateConstitutiveRelation.h
@@ -39,7 +39,7 @@ std::map<int,
          std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
 createConstitutiveRelations(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 
@@ -47,7 +47,7 @@ extern template std::map<int,
                          std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
 createConstitutiveRelations<2>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 
@@ -55,7 +55,7 @@ extern template std::map<int,
                          std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
 createConstitutiveRelations<3>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.cpp b/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.cpp
index e6dc469ebdd32e38591a3077f4bab62337f84503..b551da47f009cacb20b91e4412dcd6a136127190 100644
--- a/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.cpp
+++ b/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.cpp
@@ -19,7 +19,7 @@ template <int DisplacementDim>
 std::unique_ptr<LinearElasticOrthotropic<DisplacementDim>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking)
 {
@@ -59,14 +59,14 @@ createLinearElasticOrthotropic(
 template std::unique_ptr<LinearElasticOrthotropic<2>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 
 template std::unique_ptr<LinearElasticOrthotropic<3>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h b/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h
index b6add0e1e633fcdd9177102d8243719ff7aff7f5..f80822e3e763af42d123116ca099c08a02981674 100644
--- a/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h
+++ b/MaterialLib/SolidModels/CreateLinearElasticOrthotropic.h
@@ -20,21 +20,21 @@ template <int DisplacementDim>
 std::unique_ptr<LinearElasticOrthotropic<DisplacementDim>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 
 extern template std::unique_ptr<LinearElasticOrthotropic<2>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 
 extern template std::unique_ptr<LinearElasticOrthotropic<3>>
 createLinearElasticOrthotropic(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config, const bool skip_type_checking);
 }  // namespace Solids
diff --git a/MaterialLib/SolidModels/LinearElasticOrthotropic.h b/MaterialLib/SolidModels/LinearElasticOrthotropic.h
index 818ff8a91d982614f02195042253c3e36e1dc405..dd721fc0a10a820b399fff3d0538e751b2e07c2a 100644
--- a/MaterialLib/SolidModels/LinearElasticOrthotropic.h
+++ b/MaterialLib/SolidModels/LinearElasticOrthotropic.h
@@ -132,7 +132,7 @@ public:
 
     LinearElasticOrthotropic(
         MaterialProperties material_properties,
-        boost::optional<ParameterLib::CoordinateSystem> const&
+        std::optional<ParameterLib::CoordinateSystem> const&
             local_coordinate_system)
         : _mp(std::move(material_properties)),
           _local_coordinate_system(local_coordinate_system)
@@ -188,7 +188,7 @@ public:
 
 protected:
     MaterialProperties _mp;
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         _local_coordinate_system;
 };
 
diff --git a/MaterialLib/SolidModels/MFront/CreateMFront.cpp b/MaterialLib/SolidModels/MFront/CreateMFront.cpp
index 4ef0a29440722dbd097799b02b992b3e20372cf8..2ada8d1e6a7e4013da35a23ace3391b8f75027b7 100644
--- a/MaterialLib/SolidModels/MFront/CreateMFront.cpp
+++ b/MaterialLib/SolidModels/MFront/CreateMFront.cpp
@@ -55,7 +55,7 @@ namespace MFront
 template <int DisplacementDim>
 std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config)
 {
@@ -208,12 +208,12 @@ namespace MFront
 {
 template std::unique_ptr<MechanicsBase<2>> createMFront<2>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 template std::unique_ptr<MechanicsBase<3>> createMFront<3>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 }  // namespace MFront
diff --git a/MaterialLib/SolidModels/MFront/CreateMFront.h b/MaterialLib/SolidModels/MFront/CreateMFront.h
index e4bf97f7c39b7734ff378ff6d0d99cb34a9eed90..5dadcc2617ac2b4da92b6961ae35b7c15b6e02a2 100644
--- a/MaterialLib/SolidModels/MFront/CreateMFront.h
+++ b/MaterialLib/SolidModels/MFront/CreateMFront.h
@@ -25,18 +25,18 @@ namespace MFront
 template <int DisplacementDim>
 std::unique_ptr<MechanicsBase<DisplacementDim>> createMFront(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 
 extern template std::unique_ptr<MechanicsBase<2>> createMFront<2>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 extern template std::unique_ptr<MechanicsBase<3>> createMFront<3>(
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     BaseLib::ConfigTree const& config);
 }  // namespace MFront
diff --git a/MaterialLib/SolidModels/MFront/MFront.cpp b/MaterialLib/SolidModels/MFront/MFront.cpp
index 6126463b2de1036b515ced293640c2845f2d3e0d..f5fb7f716e9b1349d2acc240801670a59d91fe39 100644
--- a/MaterialLib/SolidModels/MFront/MFront.cpp
+++ b/MaterialLib/SolidModels/MFront/MFront.cpp
@@ -172,7 +172,7 @@ template <int DisplacementDim>
 MFront<DisplacementDim>::MFront(
     mgis::behaviour::Behaviour&& behaviour,
     std::vector<ParameterLib::Parameter<double> const*>&& material_properties,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system)
     : _behaviour(std::move(behaviour)),
       equivalent_plastic_strain_offset_(
diff --git a/MaterialLib/SolidModels/MFront/MFront.h b/MaterialLib/SolidModels/MFront/MFront.h
index 0af729a8542db13124a4fff863bb93d6b5a809e2..12e5cf9f482cb33d9314a5c8a0f4bb5477e992a4 100644
--- a/MaterialLib/SolidModels/MFront/MFront.h
+++ b/MaterialLib/SolidModels/MFront/MFront.h
@@ -74,7 +74,7 @@ public:
     MFront(mgis::behaviour::Behaviour&& behaviour,
            std::vector<ParameterLib::Parameter<double> const*>&&
                material_properties,
-           boost::optional<ParameterLib::CoordinateSystem> const&
+           std::optional<ParameterLib::CoordinateSystem> const&
                local_coordinate_system);
 
     std::unique_ptr<
diff --git a/MeshGeoToolsLib/CreateSearchLength.cpp b/MeshGeoToolsLib/CreateSearchLength.cpp
index 2d181183dd133ba984f5d42868cb2e3501df4d0f..6115a1bf82c9bf76cb0817b4a7de3fb93efbb47b 100644
--- a/MeshGeoToolsLib/CreateSearchLength.cpp
+++ b/MeshGeoToolsLib/CreateSearchLength.cpp
@@ -20,7 +20,7 @@ namespace MeshGeoToolsLib
 std::unique_ptr<MeshGeoToolsLib::SearchLength> createSearchLengthAlgorithm(
     BaseLib::ConfigTree const& external_config, MeshLib::Mesh const& mesh)
 {
-    boost::optional<BaseLib::ConfigTree> config =
+    std::optional<BaseLib::ConfigTree> config =
         //! \ogs_file_param{prj__search_length_algorithm}
         external_config.getConfigSubtreeOptional("search_length_algorithm");
 
diff --git a/MeshLib/Elements/Element.cpp b/MeshLib/Elements/Element.cpp
index 347829b5e7b6b0546f96423d4cefc23b2a7b48e3..f73cfa6ce9523a3af2d071f1b84c3e211177441c 100644
--- a/MeshLib/Elements/Element.cpp
+++ b/MeshLib/Elements/Element.cpp
@@ -45,16 +45,16 @@ void Element::setNeighbor(Element* neighbor, unsigned const face_id)
     this->_neighbors[face_id] = neighbor;
 }
 
-boost::optional<unsigned> Element::addNeighbor(Element* e)
+std::optional<unsigned> Element::addNeighbor(Element* e)
 {
     if (e == this || e == nullptr || e->getDimension() != this->getDimension())
     {
-        return boost::optional<unsigned>();
+        return std::optional<unsigned>();
     }
 
     if (areNeighbors(this, e))
     {
-        return boost::optional<unsigned>();
+        return std::optional<unsigned>();
     }
 
     Node* face_nodes[3];
@@ -74,13 +74,13 @@ boost::optional<unsigned> Element::addNeighbor(Element* e)
                 if ((++count)>=dim)
                 {
                     _neighbors[ this->identifyFace(face_nodes) ] = e;
-                    return boost::optional<unsigned>(e->identifyFace(face_nodes));
+                    return std::optional<unsigned>(e->identifyFace(face_nodes));
                 }
             }
         }
     }
 
-    return boost::optional<unsigned>();
+    return std::optional<unsigned>();
 }
 
 const Element* Element::getNeighbor(unsigned i) const
diff --git a/MeshLib/Elements/Element.h b/MeshLib/Elements/Element.h
index 43c1120096e54d8915f87df16bf5617da10878ab..17d3ce7bbdd9e956a961308e9bab0476bb7cb52e 100644
--- a/MeshLib/Elements/Element.h
+++ b/MeshLib/Elements/Element.h
@@ -42,7 +42,7 @@ public:
      * neighbour-list and the face id of the neighbour connected to this element
      * is returned. Otherwise the maximum value of the value type is returned.
      */
-    boost::optional<unsigned> addNeighbor(Element* e);
+    std::optional<unsigned> addNeighbor(Element* e);
 
     /// Returns the length, area or volume of a 1D, 2D or 3D element
     double getContent() const { return _content; }
diff --git a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
index 814edeca2563e846e44fabdc9bff7c1aed1c4ea1..da59dafdb821f26aaa914848613ea0f9429a70f2 100644
--- a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
+++ b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.cpp
@@ -227,7 +227,7 @@ void NodePartitionedMeshReader::readProperties(
     }
     std::size_t number_of_properties = 0;
     is.read(reinterpret_cast<char*>(&number_of_properties), sizeof(std::size_t));
-    std::vector<boost::optional<MeshLib::IO::PropertyVectorMetaData>> vec_pvmd(
+    std::vector<std::optional<MeshLib::IO::PropertyVectorMetaData>> vec_pvmd(
         number_of_properties);
     for (std::size_t i(0); i < number_of_properties; ++i)
     {
@@ -250,7 +250,7 @@ void NodePartitionedMeshReader::readProperties(
         static_cast<long>(_mpi_rank *
                           sizeof(MeshLib::IO::PropertyVectorPartitionMetaData));
     is.seekg(offset);
-    boost::optional<MeshLib::IO::PropertyVectorPartitionMetaData> pvpmd(
+    std::optional<MeshLib::IO::PropertyVectorPartitionMetaData> pvpmd(
         MeshLib::IO::readPropertyVectorPartitionMetaData(is));
     bool pvpmd_read_ok = static_cast<bool>(pvpmd);
     bool all_pvpmd_read_ok;
@@ -284,7 +284,7 @@ void NodePartitionedMeshReader::readProperties(
 }
 
 void NodePartitionedMeshReader::readDomainSpecificPartOfPropertyVectors(
-    std::vector<boost::optional<MeshLib::IO::PropertyVectorMetaData>> const&
+    std::vector<std::optional<MeshLib::IO::PropertyVectorMetaData>> const&
         vec_pvmd,
     MeshLib::IO::PropertyVectorPartitionMetaData const& pvpmd,
     MeshLib::MeshItemType t,
diff --git a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h
index 0ff34d4b00587ea15bddaac5cca69777bf353ae6..4a011385151034b772a77f018e51beca8048d54d 100644
--- a/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h
+++ b/MeshLib/IO/MPI_IO/NodePartitionedMeshReader.h
@@ -174,7 +174,7 @@ private:
                               MeshLib::Properties& p) const;
 
     void readDomainSpecificPartOfPropertyVectors(
-        std::vector<boost::optional<MeshLib::IO::PropertyVectorMetaData>> const&
+        std::vector<std::optional<MeshLib::IO::PropertyVectorMetaData>> const&
             vec_pvmd,
         MeshLib::IO::PropertyVectorPartitionMetaData const& pvpmd,
         MeshLib::MeshItemType t,
diff --git a/MeshLib/IO/MPI_IO/PropertyVectorMetaData.h b/MeshLib/IO/MPI_IO/PropertyVectorMetaData.h
index c8b09769abc844f593ac29f9e106b139067e113b..4518ecaeadc7a67c2b14015c8865354c00d6488a 100644
--- a/MeshLib/IO/MPI_IO/PropertyVectorMetaData.h
+++ b/MeshLib/IO/MPI_IO/PropertyVectorMetaData.h
@@ -78,14 +78,14 @@ inline void writePropertyVectorMetaData(PropertyVectorMetaData const& pvmd)
         pvmd.number_of_tuples);
 }
 
-inline boost::optional<PropertyVectorMetaData> readPropertyVectorMetaData(
+inline std::optional<PropertyVectorMetaData> readPropertyVectorMetaData(
     std::istream& is)
 {
     // read the size of the name of the PropertyVector
     std::string::size_type s = 0;
     if (!is.read(reinterpret_cast<char*>(&s), sizeof(std::string::size_type)))
     {
-        return boost::optional<PropertyVectorMetaData>();
+        return std::optional<PropertyVectorMetaData>();
     }
 
     PropertyVectorMetaData pvmd;
@@ -110,7 +110,7 @@ inline boost::optional<PropertyVectorMetaData> readPropertyVectorMetaData(
     if(!is.read(reinterpret_cast<char*>(&pvmd.number_of_tuples),
             sizeof(unsigned long)))
         return boost::none;
-    return boost::optional<PropertyVectorMetaData>(pvmd);
+    return std::optional<PropertyVectorMetaData>(pvmd);
 }
 
 struct PropertyVectorPartitionMetaData
@@ -132,20 +132,20 @@ inline void writePropertyVectorPartitionMetaData(
              sizeof(unsigned long));
 }
 
-inline boost::optional<PropertyVectorPartitionMetaData>
+inline std::optional<PropertyVectorPartitionMetaData>
 readPropertyVectorPartitionMetaData(std::istream& is)
 {
     PropertyVectorPartitionMetaData pvpmd;
     if (!is.read(reinterpret_cast<char*>(&pvpmd.offset), sizeof(unsigned long)))
     {
-        return boost::optional<PropertyVectorPartitionMetaData>();
+        return std::optional<PropertyVectorPartitionMetaData>();
     }
     if (!is.read(reinterpret_cast<char*>(&pvpmd.number_of_tuples),
                  sizeof(unsigned long)))
     {
-        return boost::optional<PropertyVectorPartitionMetaData>();
+        return std::optional<PropertyVectorPartitionMetaData>();
     }
-    return boost::optional<PropertyVectorPartitionMetaData>(pvpmd);
+    return std::optional<PropertyVectorPartitionMetaData>(pvpmd);
 }
 }  // namespace IO
 }  // namespace MeshLib
diff --git a/MeshLib/Mesh.cpp b/MeshLib/Mesh.cpp
index 186dadc899c063ba98a2a8af2ab8f01262f734e5..141d02ea317a3394a4aeb827a54f99c84eb4199d 100644
--- a/MeshLib/Mesh.cpp
+++ b/MeshLib/Mesh.cpp
@@ -215,7 +215,8 @@ void Mesh::setElementNeighbors()
 
         for (auto neighbor = neighbors.begin(); neighbor != neighbors_new_end; ++neighbor)
         {
-            boost::optional<unsigned> const opposite_face_id = element->addNeighbor(*neighbor);
+            std::optional<unsigned> const opposite_face_id =
+                element->addNeighbor(*neighbor);
             if (opposite_face_id)
             {
                 (*neighbor)->setNeighbor(element, *opposite_face_id);
diff --git a/NumLib/NewtonRaphson.h b/NumLib/NewtonRaphson.h
index aa3930e30ecc409e2a6251bf78c8a5b1e65f553b..82a21983b1f74bcfbe1632d69a8aa872785515b8 100644
--- a/NumLib/NewtonRaphson.h
+++ b/NumLib/NewtonRaphson.h
@@ -54,7 +54,7 @@ public:
 
     /// Returns true and the iteration number if succeeded, otherwise false and
     /// an undefined value for the number of iterations.
-    boost::optional<int> solve(JacobianMatrix& jacobian) const
+    std::optional<int> solve(JacobianMatrix& jacobian) const
     {
         int iteration = 0;
         ResidualVector increment;
diff --git a/NumLib/ODESolver/ConvergenceCriterionDeltaX.cpp b/NumLib/ODESolver/ConvergenceCriterionDeltaX.cpp
index 04cddf642b85d82c1123be75cdbc7aa56787dd31..24074d10e6ac3465178cf615c9f5e4f517d38821 100644
--- a/NumLib/ODESolver/ConvergenceCriterionDeltaX.cpp
+++ b/NumLib/ODESolver/ConvergenceCriterionDeltaX.cpp
@@ -17,8 +17,8 @@
 namespace NumLib
 {
 ConvergenceCriterionDeltaX::ConvergenceCriterionDeltaX(
-    boost::optional<double>&& absolute_tolerance,
-    boost::optional<double>&& relative_tolerance,
+    std::optional<double>&& absolute_tolerance,
+    std::optional<double>&& relative_tolerance,
     const MathLib::VecNormType norm_type)
     : ConvergenceCriterion(norm_type),
       _abstol(std::move(absolute_tolerance)),
diff --git a/NumLib/ODESolver/ConvergenceCriterionDeltaX.h b/NumLib/ODESolver/ConvergenceCriterionDeltaX.h
index 28038b96f60c94a4c58fe0d9076ba9340f0f3b58..63169f1c2f854c5fb4df650944935046eb0cf808 100644
--- a/NumLib/ODESolver/ConvergenceCriterionDeltaX.h
+++ b/NumLib/ODESolver/ConvergenceCriterionDeltaX.h
@@ -25,8 +25,8 @@ namespace NumLib
 class ConvergenceCriterionDeltaX final : public ConvergenceCriterion
 {
 public:
-    ConvergenceCriterionDeltaX(boost::optional<double>&& absolute_tolerance,
-                               boost::optional<double>&& relative_tolerance,
+    ConvergenceCriterionDeltaX(std::optional<double>&& absolute_tolerance,
+                               std::optional<double>&& relative_tolerance,
                                const MathLib::VecNormType norm_type);
 
     bool hasDeltaXCheck() const override { return true; }
@@ -38,8 +38,8 @@ public:
 
     void reset() override { this->_satisfied = true; }
 private:
-    const boost::optional<double> _abstol;
-    const boost::optional<double> _reltol;
+    const std::optional<double> _abstol;
+    const std::optional<double> _reltol;
 };
 
 std::unique_ptr<ConvergenceCriterionDeltaX> createConvergenceCriterionDeltaX(
diff --git a/NumLib/ODESolver/ConvergenceCriterionResidual.cpp b/NumLib/ODESolver/ConvergenceCriterionResidual.cpp
index 8e3b9c7ce9fb02d9f36572e8b50558f4bcf149c9..08de36c59ab5dd72bb8b599ec816627656a9846f 100644
--- a/NumLib/ODESolver/ConvergenceCriterionResidual.cpp
+++ b/NumLib/ODESolver/ConvergenceCriterionResidual.cpp
@@ -17,8 +17,8 @@
 namespace NumLib
 {
 ConvergenceCriterionResidual::ConvergenceCriterionResidual(
-    boost::optional<double>&& absolute_tolerance,
-    boost::optional<double>&& relative_tolerance,
+    std::optional<double>&& absolute_tolerance,
+    std::optional<double>&& relative_tolerance,
     const MathLib::VecNormType norm_type)
     : ConvergenceCriterion(norm_type),
       _abstol(std::move(absolute_tolerance)),
diff --git a/NumLib/ODESolver/ConvergenceCriterionResidual.h b/NumLib/ODESolver/ConvergenceCriterionResidual.h
index 56cd3feb67e206e70125290efff3009e46adff8f..0572681c9706d9d247819715c7b3e6d52e2357e1 100644
--- a/NumLib/ODESolver/ConvergenceCriterionResidual.h
+++ b/NumLib/ODESolver/ConvergenceCriterionResidual.h
@@ -25,8 +25,8 @@ namespace NumLib
 class ConvergenceCriterionResidual final : public ConvergenceCriterion
 {
 public:
-    ConvergenceCriterionResidual(boost::optional<double>&& absolute_tolerance,
-                                 boost::optional<double>&& relative_tolerance,
+    ConvergenceCriterionResidual(std::optional<double>&& absolute_tolerance,
+                                 std::optional<double>&& relative_tolerance,
                                  const MathLib::VecNormType norm_type);
 
     bool hasDeltaXCheck() const override { return true; }
@@ -39,8 +39,8 @@ public:
     void checkResidual(const GlobalVector& residual) override;
 
 private:
-    const boost::optional<double> _abstol;
-    const boost::optional<double> _reltol;
+    const std::optional<double> _abstol;
+    const std::optional<double> _reltol;
     double _residual_norm_0;
 };
 
diff --git a/ParameterLib/GroupBasedParameter.h b/ParameterLib/GroupBasedParameter.h
index e19ef525c5c1fb329e56d67f3e74453839815926..f18a1d820c5666737d428dc74932d39d168bc442 100644
--- a/ParameterLib/GroupBasedParameter.h
+++ b/ParameterLib/GroupBasedParameter.h
@@ -84,14 +84,14 @@ private:
     {
     };
 
-    static boost::optional<std::size_t> getMeshItemID(
+    static std::optional<std::size_t> getMeshItemID(
         SpatialPosition const& pos,
         type<MeshLib::MeshItemType::Cell> /*unused*/)
     {
         return pos.getElementID();
     }
 
-    static boost::optional<std::size_t> getMeshItemID(
+    static std::optional<std::size_t> getMeshItemID(
         SpatialPosition const& pos,
         type<MeshLib::MeshItemType::Node> /*unused*/)
     {
diff --git a/ParameterLib/Parameter.cpp b/ParameterLib/Parameter.cpp
index 67ce634e577b77f39bcf1be916c2d68a5a8d4318..0cc7332faaa583c8a8af6585f1da47ef625f9c03 100644
--- a/ParameterLib/Parameter.cpp
+++ b/ParameterLib/Parameter.cpp
@@ -95,8 +95,8 @@ std::unique_ptr<ParameterBase> createParameter(
     OGS_FATAL("Cannot construct a parameter of given type '{:s}'.", type);
 }
 
-boost::optional<std::string> isDefinedOnSameMesh(ParameterBase const& parameter,
-                                                 MeshLib::Mesh const& mesh)
+std::optional<std::string> isDefinedOnSameMesh(ParameterBase const& parameter,
+                                               MeshLib::Mesh const& mesh)
 {
     // Arbitrary domain of definition.
     if (parameter.mesh() == nullptr)
diff --git a/ParameterLib/Parameter.h b/ParameterLib/Parameter.h
index b7234fea699a340909c6cc5e9be84b0fc710c872..7262b1231ada7b73f9e7629dec243e0494cda309 100644
--- a/ParameterLib/Parameter.h
+++ b/ParameterLib/Parameter.h
@@ -124,7 +124,7 @@ protected:
     }
 
 protected:
-    boost::optional<CoordinateSystem> _coordinate_system;
+    std::optional<CoordinateSystem> _coordinate_system;
 
     /// A mesh on which the parameter is defined. Some parameters might be
     /// mesh-independent.
@@ -204,7 +204,7 @@ std::unique_ptr<ParameterBase> createParameter(
 //! to the given mesh.
 //! \returns nothing if the parameter can be used on the given mesh, or an error
 //! string otherwise.
-boost::optional<std::string> isDefinedOnSameMesh(ParameterBase const& parameter,
-                                                 MeshLib::Mesh const& mesh);
+std::optional<std::string> isDefinedOnSameMesh(ParameterBase const& parameter,
+                                               MeshLib::Mesh const& mesh);
 
 }  // namespace ParameterLib
diff --git a/ParameterLib/SpatialPosition.h b/ParameterLib/SpatialPosition.h
index 44aa5ddaddffaf470113079e04d191ea463b5255..8bae9ff01995f02e1a208dc0d77947fee4cbc7e6 100644
--- a/ParameterLib/SpatialPosition.h
+++ b/ParameterLib/SpatialPosition.h
@@ -28,10 +28,10 @@ public:
     SpatialPosition() = default;
 
     SpatialPosition(
-        boost::optional<std::size_t> const& node_id,
-        boost::optional<std::size_t> const& element_id,
-        boost::optional<unsigned> const& integration_point,
-        boost::optional<MathLib::TemplatePoint<double, 3>> const& coordinates)
+        std::optional<std::size_t> const& node_id,
+        std::optional<std::size_t> const& element_id,
+        std::optional<unsigned> const& integration_point,
+        std::optional<MathLib::TemplatePoint<double, 3>> const& coordinates)
         : _node_id(node_id),
           _element_id(element_id),
           _integration_point(integration_point),
@@ -39,13 +39,13 @@ public:
     {
     }
 
-    boost::optional<std::size_t> getNodeID() const { return _node_id; }
-    boost::optional<std::size_t> getElementID() const { return _element_id; }
-    boost::optional<unsigned> getIntegrationPoint() const
+    std::optional<std::size_t> getNodeID() const { return _node_id; }
+    std::optional<std::size_t> getElementID() const { return _element_id; }
+    std::optional<unsigned> getIntegrationPoint() const
     {
         return _integration_point;
     }
-    boost::optional<MathLib::TemplatePoint<double, 3>> const& getCoordinates()
+    std::optional<MathLib::TemplatePoint<double, 3>> const& getCoordinates()
         const
     {
         return _coordinates;
@@ -75,10 +75,10 @@ public:
     }
 
     void setAll(
-        boost::optional<std::size_t> const& node_id,
-        boost::optional<std::size_t> const& element_id,
-        boost::optional<unsigned> const& integration_point,
-        boost::optional<MathLib::TemplatePoint<double, 3>> const& coordinates)
+        std::optional<std::size_t> const& node_id,
+        std::optional<std::size_t> const& element_id,
+        std::optional<unsigned> const& integration_point,
+        std::optional<MathLib::TemplatePoint<double, 3>> const& coordinates)
     {
         _node_id = node_id;
         _element_id = element_id;
@@ -95,10 +95,10 @@ public:
     }
 
 private:
-    boost::optional<std::size_t> _node_id;
-    boost::optional<std::size_t> _element_id;
-    boost::optional<unsigned> _integration_point;
-    boost::optional<MathLib::TemplatePoint<double, 3>> _coordinates;
+    std::optional<std::size_t> _node_id;
+    std::optional<std::size_t> _element_id;
+    std::optional<unsigned> _integration_point;
+    std::optional<MathLib::TemplatePoint<double, 3>> _coordinates;
 };
 
 }  // namespace ParameterLib
diff --git a/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h b/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h
index 6360e0791a2fb4d5d8ebc9cb53410363e57e53d8..4147e9181863f0f485a017eb4912acf2cfd90aaa 100644
--- a/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h
+++ b/ProcessLib/BoundaryCondition/BoundaryConditionConfig.h
@@ -19,7 +19,7 @@ struct BoundaryConditionConfig final
 {
     BoundaryConditionConfig(BaseLib::ConfigTree&& config_,
                             MeshLib::Mesh const& mesh_,
-                            boost::optional<int> const component_id_)
+                            std::optional<int> const component_id_)
         : config(std::move(config_)),
           boundary_mesh(mesh_),
           component_id(component_id_)
@@ -30,7 +30,7 @@ struct BoundaryConditionConfig final
 
     BaseLib::ConfigTree config;
     MeshLib::Mesh const& boundary_mesh;
-    boost::optional<int> const component_id;
+    std::optional<int> const component_id;
 };
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/CreateJacobianAssembler.cpp b/ProcessLib/CreateJacobianAssembler.cpp
index 5cd909ab85a5d65bdc9f4cd838ce7023cda8643c..4dd325d39bffe8ab8497ef1751c3165d0fe95c09 100644
--- a/ProcessLib/CreateJacobianAssembler.cpp
+++ b/ProcessLib/CreateJacobianAssembler.cpp
@@ -18,7 +18,7 @@
 namespace ProcessLib
 {
 std::unique_ptr<AbstractJacobianAssembler> createJacobianAssembler(
-    boost::optional<BaseLib::ConfigTree> const& config)
+    std::optional<BaseLib::ConfigTree> const& config)
 {
     if (!config)
     {
diff --git a/ProcessLib/CreateJacobianAssembler.h b/ProcessLib/CreateJacobianAssembler.h
index 9026e23b76accdd08e6c9f48ba0d04c83160b42d..55ed5d9bef3e2e1d140e9999d595235080274e27 100644
--- a/ProcessLib/CreateJacobianAssembler.h
+++ b/ProcessLib/CreateJacobianAssembler.h
@@ -17,5 +17,5 @@ namespace ProcessLib
 class AbstractJacobianAssembler;
 
 std::unique_ptr<AbstractJacobianAssembler> createJacobianAssembler(
-    boost::optional<BaseLib::ConfigTree> const& config);
+    std::optional<BaseLib::ConfigTree> const& config);
 }  // ProcessLib
diff --git a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
index e11ec76d43f1f85926de5b615929bf5d7da0b849..015f083991f66b8d24213a8967b0c6b02538fc64 100644
--- a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
+++ b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.cpp
@@ -35,7 +35,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
@@ -197,7 +197,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -209,7 +209,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
index 3f01a2e64c6f20883d97f5810af90970303e45ff..d6b89f4d074787575becf42b08952adb37fcf458 100644
--- a/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
+++ b/ProcessLib/HydroMechanics/CreateHydroMechanicsProcess.h
@@ -50,7 +50,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -62,7 +62,7 @@ extern template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -74,7 +74,7 @@ extern template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
index 150cb134295d919a404fc7bf8640a83d2637aaf9..f799b842a7f312218cbcc17f2d55cb75c7314007 100644
--- a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
+++ b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.cpp
@@ -35,7 +35,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -357,7 +357,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -367,7 +367,7 @@ template std::unique_ptr<Process> createHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
index 6f82d702dda39b613ba61e360223eba7377f2243..9703343e8cf7b47da499cf5ab50a1104272b34c1 100644
--- a/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
+++ b/ProcessLib/LIE/HydroMechanics/CreateHydroMechanicsProcess.h
@@ -47,7 +47,7 @@ std::unique_ptr<Process> createHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
index 1154e9a4ebae20658418f475a80bd7c6e4152d48..89b644f2b78178a76d4a0079ff785ee18cb1e1fd 100644
--- a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
+++ b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.cpp
@@ -34,7 +34,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -200,7 +200,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -211,7 +211,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
index a8759460136a4d99f3dca0ff82bf27828a779e87..0b332c29fac17a0962022da96d65c05270f45b34 100644
--- a/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
+++ b/ProcessLib/LIE/SmallDeformation/CreateSmallDeformationProcess.h
@@ -47,7 +47,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp b/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
index 98c4f8d0a72d38279afc773d081b06494575a4cb..dc4ce24bf4d074d052bb808700c426b114ad06ae 100644
--- a/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
+++ b/ProcessLib/PhaseField/CreatePhaseFieldProcess.cpp
@@ -32,7 +32,7 @@ std::unique_ptr<Process> createPhaseFieldProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -215,7 +215,7 @@ template std::unique_ptr<Process> createPhaseFieldProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -226,7 +226,7 @@ template std::unique_ptr<Process> createPhaseFieldProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/PhaseField/CreatePhaseFieldProcess.h b/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
index 079a2371295fb88131473a8a8405e69c61439ca8..94148eeae9e70ac4026c57b0c11c95c1ee9d9858 100644
--- a/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
+++ b/ProcessLib/PhaseField/CreatePhaseFieldProcess.h
@@ -45,7 +45,7 @@ std::unique_ptr<Process> createPhaseFieldProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -56,7 +56,7 @@ extern template std::unique_ptr<Process> createPhaseFieldProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -67,7 +67,7 @@ extern template std::unique_ptr<Process> createPhaseFieldProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
index 98dc906828254b6bdbef7b7ac4922f861320cbc7..91b50a3c999efe77b43c64ccaf6ea0a9bee9f2df 100644
--- a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
+++ b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.cpp
@@ -59,7 +59,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -219,7 +219,7 @@ template std::unique_ptr<Process> createRichardsMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -231,7 +231,7 @@ template std::unique_ptr<Process> createRichardsMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
index 75efe7de8b94c19636b90d77709492e9039187f7..985cade3a00aa5ef1f48c5f0fbb25ed97967bf8a 100644
--- a/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
+++ b/ProcessLib/RichardsMechanics/CreateRichardsMechanicsProcess.h
@@ -54,7 +54,7 @@ std::unique_ptr<Process> createRichardsMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -66,7 +66,7 @@ extern template std::unique_ptr<Process> createRichardsMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -78,7 +78,7 @@ extern template std::unique_ptr<Process> createRichardsMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
index c8fb2d2d88eefeb008a031c8ed45e53072b8b939..bd724f9eac045cd7e6f1378bc676f391703fc010 100644
--- a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
+++ b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.cpp
@@ -31,7 +31,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -132,7 +132,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -143,7 +143,7 @@ template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
index 2d04591a65eb1a4d4ea57619a7d35f0af3192b5f..92669851db3795f265eb793bf57e152d18da5c8d 100644
--- a/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
+++ b/ProcessLib/SmallDeformation/CreateSmallDeformationProcess.h
@@ -45,7 +45,7 @@ std::unique_ptr<Process> createSmallDeformationProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -56,7 +56,7 @@ extern template std::unique_ptr<Process> createSmallDeformationProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -67,7 +67,7 @@ extern template std::unique_ptr<Process> createSmallDeformationProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
index e80230eb01deca5493f3784be9047c05d4fae213..75510a4d2d8adab1342f33b343377b017e4647bf 100644
--- a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
+++ b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.cpp
@@ -31,7 +31,7 @@ std::unique_ptr<Process> createSmallDeformationNonlocalProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -128,7 +128,7 @@ template std::unique_ptr<Process> createSmallDeformationNonlocalProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -139,7 +139,7 @@ template std::unique_ptr<Process> createSmallDeformationNonlocalProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
index 8e478af95c56e665db9660157eff94bc7d150b53..bc6f5f4f7a126c15fc225ab7f3ad489bd004a0c0 100644
--- a/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
+++ b/ProcessLib/SmallDeformationNonlocal/CreateSmallDeformationNonlocalProcess.h
@@ -45,7 +45,7 @@ std::unique_ptr<Process> createSmallDeformationNonlocalProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -57,7 +57,7 @@ createSmallDeformationNonlocalProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -69,7 +69,7 @@ createSmallDeformationNonlocalProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/SourceTerms/SourceTermConfig.h b/ProcessLib/SourceTerms/SourceTermConfig.h
index 6b24d1ef2b70ee90d9777d88a1862185017b4544..88abce3bbb9a5e33502839e460f4ccc7bf71e39d 100644
--- a/ProcessLib/SourceTerms/SourceTermConfig.h
+++ b/ProcessLib/SourceTerms/SourceTermConfig.h
@@ -19,7 +19,7 @@ struct SourceTermConfig final
 {
     SourceTermConfig(BaseLib::ConfigTree&& config_,
                      MeshLib::Mesh const& mesh_,
-                     boost::optional<int> const component_id_)
+                     std::optional<int> const component_id_)
         : config(std::move(config_)), mesh(mesh_), component_id(component_id_)
     {
     }
@@ -33,7 +33,7 @@ struct SourceTermConfig final
 
     BaseLib::ConfigTree config;
     MeshLib::Mesh const& mesh;
-    boost::optional<int> const component_id;
+    std::optional<int> const component_id;
 };
 
 }  // namespace ProcessLib
diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
index 0cf615647a298bf123c99d34db70c29252026b4d..918f079d7304b37fb9811a7336ca5e46c565fbb8 100644
--- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
+++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.cpp
@@ -34,7 +34,7 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
@@ -182,7 +182,7 @@ template std::unique_ptr<Process> createThermoHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -194,7 +194,7 @@ template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
index ea0a44a43e006c42ce211c33b03bdc009ece9572..a1491853e8c49ed28c5e89bbd13fa110eb886484 100644
--- a/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
+++ b/ProcessLib/ThermoHydroMechanics/CreateThermoHydroMechanicsProcess.h
@@ -53,7 +53,7 @@ std::unique_ptr<Process> createThermoHydroMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -64,7 +64,7 @@ extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
@@ -75,7 +75,7 @@ extern template std::unique_ptr<Process> createThermoHydroMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
index fb8fd5db6c7ffa0dc71ad112626b0c9554646995..0c20e9b7b4bc182ccb0c60ecfee600ca2bbf6adb 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
+++ b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.cpp
@@ -32,7 +32,7 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config)
@@ -250,7 +250,7 @@ template std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -261,7 +261,7 @@ template std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
index 37ee8f5f39a4fc3c1bc8a47cbdfcb7ae32c14544..961fe10a7acb659125ede5de3f590a11ec70aabb 100644
--- a/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
+++ b/ProcessLib/ThermoMechanicalPhaseField/CreateThermoMechanicalPhaseFieldProcess.h
@@ -45,7 +45,7 @@ std::unique_ptr<Process> createThermoMechanicalPhaseFieldProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -57,7 +57,7 @@ createThermoMechanicalPhaseFieldProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
@@ -69,7 +69,7 @@ createThermoMechanicalPhaseFieldProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config);
diff --git a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
index b7a2b1a349927eb57ec45f8a14700b33e7d8b0f3..b1b94a700ab16f6033779ce81fd4ff67eec77b51 100644
--- a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
+++ b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.cpp
@@ -48,7 +48,7 @@ std::unique_ptr<Process> createThermoMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media)
@@ -193,7 +193,7 @@ template std::unique_ptr<Process> createThermoMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -205,7 +205,7 @@ template std::unique_ptr<Process> createThermoMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
index 6eb48ea7b5d913e8c04da25ca9c81167e189d14f..e5df480224759f71a075d932de44a7fc8c4fb5c9 100644
--- a/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
+++ b/ProcessLib/ThermoMechanics/CreateThermoMechanicsProcess.h
@@ -51,7 +51,7 @@ std::unique_ptr<Process> createThermoMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
@@ -61,7 +61,7 @@ extern template std::unique_ptr<Process> createThermoMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
@@ -71,7 +71,7 @@ extern template std::unique_ptr<Process> createThermoMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order, BaseLib::ConfigTree const& config,
     std::map<int, std::shared_ptr<MaterialPropertyLib::Medium>> const& media);
diff --git a/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.cpp b/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.cpp
index a2c6ea7b445c76d5ceb460440634da9b7af03b5e..a5b1f2c019d3b923cbb36646f781e69bb37f0828 100644
--- a/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.cpp
+++ b/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.cpp
@@ -75,7 +75,7 @@ std::unique_ptr<Process> createThermoRichardsMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -201,7 +201,7 @@ template std::unique_ptr<Process> createThermoRichardsMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -213,7 +213,7 @@ template std::unique_ptr<Process> createThermoRichardsMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.h b/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.h
index a953378f1628c986d8d37ca8fac99722a99f43ab..9e96c7650dcfb765567b62289f31498535688705 100644
--- a/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.h
+++ b/ProcessLib/ThermoRichardsMechanics/CreateThermoRichardsMechanicsProcess.h
@@ -54,7 +54,7 @@ std::unique_ptr<Process> createThermoRichardsMechanicsProcess(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -67,7 +67,7 @@ createThermoRichardsMechanicsProcess<2>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
@@ -80,7 +80,7 @@ createThermoRichardsMechanicsProcess<3>(
     std::unique_ptr<ProcessLib::AbstractJacobianAssembler>&& jacobian_assembler,
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
-    boost::optional<ParameterLib::CoordinateSystem> const&
+    std::optional<ParameterLib::CoordinateSystem> const&
         local_coordinate_system,
     unsigned const integration_order,
     BaseLib::ConfigTree const& config,
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
index 8ed3d7990ae31014c198ac21ca158a00e852c1c2..cf706395dcd5c044f7b9f4e2a41632353dfd236e 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.cpp
@@ -32,7 +32,7 @@ namespace TwoPhaseFlowWithPrho
 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
 createTwoPhaseFlowPrhoMaterialProperties(
     BaseLib::ConfigTree const& config,
-    boost::optional<MeshLib::PropertyVector<int> const&>
+    std::optional<MeshLib::PropertyVector<int> const&>
         material_ids,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters)
 {
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
index 9fb78440a4d7d66729bb134a888d11c83dfc9936..0eb82dd0fca60f2ab824ea10b9ed22dd12dcea10 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowPrhoMaterialProperties.h
@@ -24,7 +24,7 @@ namespace TwoPhaseFlowWithPrho
 std::unique_ptr<TwoPhaseFlowWithPrhoMaterialProperties>
 createTwoPhaseFlowPrhoMaterialProperties(
     BaseLib::ConfigTree const& config,
-    boost::optional<MeshLib::PropertyVector<int> const&>
+    std::optional<MeshLib::PropertyVector<int> const&>
         material_ids,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&
         parameters);
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
index d81a8219d55d8cd5f3070a2dd3234b0b405fe3d3..36e4361c1b6ca7936de4ce9b59c66a11415fa04d 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/CreateTwoPhaseFlowWithPrhoProcess.cpp
@@ -84,7 +84,7 @@ std::unique_ptr<Process> createTwoPhaseFlowWithPrhoProcess(
     //! \ogs_file_param{prj__processes__process__TWOPHASE_FLOW_PRHO__material_property}
     auto const& mat_config = config.getConfigSubtree("material_property");
 
-    boost::optional<MeshLib::PropertyVector<int> const&> material_ids;
+    std::optional<MeshLib::PropertyVector<int> const&> material_ids;
     if (mesh.getProperties().existsPropertyVector<int>("MaterialIDs"))
     {
         INFO("The twophase flow is in heterogeneous porous media.");
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
index b15d56a9cf018b411ef64d7b781a81ba2253eef4..ab5119e383f81164054befddd3f12c6df5bae081 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
@@ -33,7 +33,7 @@ namespace ProcessLib
 namespace TwoPhaseFlowWithPrho
 {
 TwoPhaseFlowWithPrhoMaterialProperties::TwoPhaseFlowWithPrhoMaterialProperties(
-    boost::optional<MeshLib::PropertyVector<int> const&> const material_ids,
+    std::optional<MeshLib::PropertyVector<int> const&> const material_ids,
     std::unique_ptr<MaterialLib::Fluid::FluidProperty>
         liquid_density,
     std::unique_ptr<MaterialLib::Fluid::FluidProperty>
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
index 87305bac2b44eb60ffd2c588d8b81c149544ad2b..0b06035bcf113ecac5c7a5244f1b463b702658f7 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
@@ -37,7 +37,7 @@ public:
     using ArrayType = MaterialLib::Fluid::FluidProperty::ArrayType;
 
     TwoPhaseFlowWithPrhoMaterialProperties(
-        boost::optional<MeshLib::PropertyVector<int> const&> const material_ids,
+        std::optional<MeshLib::PropertyVector<int> const&> const material_ids,
         std::unique_ptr<MaterialLib::Fluid::FluidProperty>
             liquid_density,
         std::unique_ptr<MaterialLib::Fluid::FluidProperty>
@@ -112,7 +112,7 @@ protected:
     /** Use two phase models for different material zones.
     *  Material IDs must be given as mesh element properties.
     */
-    boost::optional<MeshLib::PropertyVector<int> const&> const _material_ids;
+    std::optional<MeshLib::PropertyVector<int> const&> const _material_ids;
 
     std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>>
         _intrinsic_permeability_models;
diff --git a/Tests/MeshLib/ConvertToLinearMesh.cpp b/Tests/MeshLib/ConvertToLinearMesh.cpp
index d6bd1997a4fdabb262655197ed5a6599d486697f..1eee0f7074287214e4a75fad3b2cc9ae8f5fef23 100644
--- a/Tests/MeshLib/ConvertToLinearMesh.cpp
+++ b/Tests/MeshLib/ConvertToLinearMesh.cpp
@@ -73,7 +73,7 @@ std::variant<std::vector<std::size_t>, std::string> compareNodes(
 // Two elements are equal if their corresponding node coordinates are equal up
 // to a (shift) permutation.
 // Returns a string in case of error containing a descriptive message.
-boost::optional<std::string> equal(Element const& a, Element const& b)
+std::optional<std::string> equal(Element const& a, Element const& b)
 {
     if (typeid(a) != typeid(b))  // => (a.nodes.size == b.nodes.size)
     {
@@ -126,7 +126,7 @@ std::vector<std::size_t> generateRandomPermutationVector(std::size_t const size)
 
 // Test the inverse permutation for being the inverse: p^-1(p(.)) = Id.
 // In case of failure an error message is returned.
-boost::optional<std::string> inversePermutationIdentityTest(
+std::optional<std::string> inversePermutationIdentityTest(
     std::vector<std::size_t> const& permutation,
     std::vector<std::size_t> const& inverse_permutation)
 {