diff --git a/ProcessLib/NeumannBcConfig.h b/ProcessLib/NeumannBcConfig.h
index c69ff159a36f9f523c57ad87c51990ad64ac2184..e5ffe9e99cca68caac799087f7985176b4509065 100644
--- a/ProcessLib/NeumannBcConfig.h
+++ b/ProcessLib/NeumannBcConfig.h
@@ -28,14 +28,14 @@ namespace ProcessLib
 class BoundaryConditionConfig
 {
 public:
-    BoundaryConditionConfig(GeoLib::GeoObject const* const geometry)
+    BoundaryConditionConfig(GeoLib::GeoObject const& geometry)
         : _geometry(geometry)
     { }
 
     virtual ~BoundaryConditionConfig() = default;
 
 protected:
-    GeoLib::GeoObject const* const _geometry;
+    GeoLib::GeoObject const& _geometry;
 };
 
 
@@ -43,8 +43,8 @@ protected:
 class NeumannBcConfig : public BoundaryConditionConfig
 {
 public:
-    NeumannBcConfig(GeoLib::GeoObject const* const geometry,
-            BaseLib::ConfigTree const& config)
+    NeumannBcConfig(GeoLib::GeoObject const& geometry,
+                    BaseLib::ConfigTree const& config)
         : BoundaryConditionConfig(geometry)
     {
         DBUG("Constructing NeumannBcConfig from config.");
@@ -71,7 +71,8 @@ public:
     /// The elements are appended to the \c elements vector.
     void initialize(MeshGeoToolsLib::BoundaryElementsSearcher& searcher)
     {
-        std::vector<MeshLib::Element*> elems = searcher.getBoundaryElements(*_geometry);
+        std::vector<MeshLib::Element*> elems =
+            searcher.getBoundaryElements(_geometry);
 
         // deep copy because the searcher destroys the elements.
         std::transform(elems.cbegin(), elems.cend(),
diff --git a/ProcessLib/ProcessVariable.cpp b/ProcessLib/ProcessVariable.cpp
index 52a39d24565067749791ab346615c3755f5a1d59..4f76710887868658242182d030157e148c4251d6 100644
--- a/ProcessLib/ProcessVariable.cpp
+++ b/ProcessLib/ProcessVariable.cpp
@@ -73,11 +73,14 @@ ProcessVariable::ProcessVariable(BaseLib::ConfigTree const& config,
                     //! \ogs_file_param{boundary_condition__geometry}
                     bc_config.getConfigParameter<std::string>("geometry");
 
-            GeoLib::GeoObject const* const geometry =
+            GeoLib::GeoObject const* const geometry_ptr =
                 geometries.getGeoObject(geometrical_set_name, geometry_name);
+            assert(geometry_ptr != nullptr);
+            GeoLib::GeoObject const& geometry = *geometry_ptr;
+
             DBUG(
                 "Found geometry type \"%s\"",
-                GeoLib::convertGeoTypeToString(geometry->getGeoType()).c_str());
+                GeoLib::convertGeoTypeToString(geometry.getGeoType()).c_str());
 
             // Construct type dependent boundary condition
             //! \ogs_file_param{boundary_condition__type}
diff --git a/ProcessLib/UniformDirichletBoundaryCondition.cpp b/ProcessLib/UniformDirichletBoundaryCondition.cpp
index a3503ce327d4317f6b8a7c52d0b7d5ec04ababfd..686a7ce249103fdc9246b40cce8b3dccf7c5ee96 100644
--- a/ProcessLib/UniformDirichletBoundaryCondition.cpp
+++ b/ProcessLib/UniformDirichletBoundaryCondition.cpp
@@ -17,7 +17,7 @@
 namespace ProcessLib
 {
 UniformDirichletBoundaryCondition::UniformDirichletBoundaryCondition(
-    GeoLib::GeoObject const* const geometry, BaseLib::ConfigTree const& config)
+    GeoLib::GeoObject const& geometry, BaseLib::ConfigTree const& config)
     : _geometry(geometry)
 {
     DBUG("Constructing UniformDirichletBoundaryCondition from config.");
@@ -30,7 +30,7 @@ UniformDirichletBoundaryCondition::UniformDirichletBoundaryCondition(
 }
 
 UniformDirichletBoundaryCondition::UniformDirichletBoundaryCondition(
-    GeoLib::GeoObject const* const geometry, double value)
+    GeoLib::GeoObject const& geometry, double value)
     : _value(value), _geometry(geometry)
 {
     DBUG("Constructed UniformDirichletBoundaryCondition using value %g",
@@ -51,7 +51,7 @@ void UniformDirichletBoundaryCondition::initialize(
 {
     // Find nodes' ids on the given mesh on which this boundary condition
     // is defined.
-    std::vector<std::size_t> ids = searcher.getMeshNodeIDs(*_geometry);
+    std::vector<std::size_t> ids = searcher.getMeshNodeIDs(_geometry);
 
     // convert mesh node ids to global index for the given component
     bc.ids.reserve(bc.ids.size() + ids.size());
diff --git a/ProcessLib/UniformDirichletBoundaryCondition.h b/ProcessLib/UniformDirichletBoundaryCondition.h
index 30ef1fbc40f393fec2529c843c123f2a1d2c42d1..fa916628a2078f77b0d6594bc2018f200188e836 100644
--- a/ProcessLib/UniformDirichletBoundaryCondition.h
+++ b/ProcessLib/UniformDirichletBoundaryCondition.h
@@ -31,10 +31,10 @@ namespace ProcessLib
 class UniformDirichletBoundaryCondition
 {
 public:
-    UniformDirichletBoundaryCondition(GeoLib::GeoObject const* const geometry,
+    UniformDirichletBoundaryCondition(GeoLib::GeoObject const& geometry,
                                       BaseLib::ConfigTree const& config);
 
-    UniformDirichletBoundaryCondition(GeoLib::GeoObject const* const geometry,
+    UniformDirichletBoundaryCondition(GeoLib::GeoObject const& geometry,
                                       double value);
 
     /// Initialize Dirichlet type boundary conditions.
@@ -50,7 +50,7 @@ public:
 
 private:
     double _value;
-    GeoLib::GeoObject const* const _geometry;
+    GeoLib::GeoObject const& _geometry;
 };
 
 }  // namespace ProcessLib