diff --git a/ProcessLib/BoundaryCondition/BHEBottomDirichletBoundaryCondition.cpp b/ProcessLib/HeatTransportBHE/BoundaryConditions/BHEBottomDirichletBoundaryCondition.cpp
similarity index 95%
rename from ProcessLib/BoundaryCondition/BHEBottomDirichletBoundaryCondition.cpp
rename to ProcessLib/HeatTransportBHE/BoundaryConditions/BHEBottomDirichletBoundaryCondition.cpp
index 591a3fe5d50caa703e7fcd966a8abd4c205ecba1..a5fe40e840bf3093a0ac2960ed1f27b3b4d547e7 100644
--- a/ProcessLib/BoundaryCondition/BHEBottomDirichletBoundaryCondition.cpp
+++ b/ProcessLib/HeatTransportBHE/BoundaryConditions/BHEBottomDirichletBoundaryCondition.cpp
@@ -1,4 +1,5 @@
 /**
+ * \file
  * \copyright
  * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
  *            Distributed under a Modified BSD License.
@@ -10,7 +11,7 @@
 #include "BHEBottomDirichletBoundaryCondition.h"
 #include "BaseLib/Error.h"
 
-namespace ProcessLib
+namespace ProcessLib::HeatTransportBHE
 {
 void BHEBottomDirichletBoundaryCondition::getEssentialBCValues(
     const double /*t*/, GlobalVector const& x,
@@ -54,4 +55,4 @@ createBHEBottomDirichletBoundaryCondition(
     return std::make_unique<BHEBottomDirichletBoundaryCondition>(
         std::move(in_out_global_indices));
 }
-}  // namespace ProcessLib
+}  // namespace ProcessLib::HeatTransportBHE
diff --git a/ProcessLib/BoundaryCondition/BHEBottomDirichletBoundaryCondition.h b/ProcessLib/HeatTransportBHE/BoundaryConditions/BHEBottomDirichletBoundaryCondition.h
similarity index 87%
rename from ProcessLib/BoundaryCondition/BHEBottomDirichletBoundaryCondition.h
rename to ProcessLib/HeatTransportBHE/BoundaryConditions/BHEBottomDirichletBoundaryCondition.h
index 73c8edde3a53cde50073ed1a5365a52b17ad11cc..ec4667f225652e8182dec3297a384ae391d04754 100644
--- a/ProcessLib/BoundaryCondition/BHEBottomDirichletBoundaryCondition.h
+++ b/ProcessLib/HeatTransportBHE/BoundaryConditions/BHEBottomDirichletBoundaryCondition.h
@@ -1,4 +1,5 @@
 /**
+ * \file
  * \copyright
  * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
  *            Distributed under a Modified BSD License.
@@ -9,10 +10,10 @@
 
 #pragma once
 
-#include "BoundaryCondition.h"
 #include "NumLib/IndexValueVector.h"
+#include "ProcessLib/BoundaryCondition/BoundaryCondition.h"
 
-namespace ProcessLib
+namespace ProcessLib::HeatTransportBHE
 {
 class BHEBottomDirichletBoundaryCondition final : public BoundaryCondition
 {
@@ -34,4 +35,4 @@ private:
 std::unique_ptr<BHEBottomDirichletBoundaryCondition>
 createBHEBottomDirichletBoundaryCondition(
     std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices);
-}  // namespace ProcessLib
+}  // namespace ProcessLib::HeatTransportBHE
diff --git a/ProcessLib/BoundaryCondition/BHEInflowDirichletBoundaryCondition.h b/ProcessLib/HeatTransportBHE/BoundaryConditions/BHEInflowDirichletBoundaryCondition.h
similarity index 73%
rename from ProcessLib/BoundaryCondition/BHEInflowDirichletBoundaryCondition.h
rename to ProcessLib/HeatTransportBHE/BoundaryConditions/BHEInflowDirichletBoundaryCondition.h
index 8a2a1bffe4af339ce9f7f76e7f2c50089cffc41b..a45bc0b9e38acf32d288cabde27d0fc2dbaa7db4 100644
--- a/ProcessLib/BoundaryCondition/BHEInflowDirichletBoundaryCondition.h
+++ b/ProcessLib/HeatTransportBHE/BoundaryConditions/BHEInflowDirichletBoundaryCondition.h
@@ -1,4 +1,5 @@
 /**
+ * \file
  * \copyright
  * Copyright (c) 2012-2019, OpenGeoSys Community (http://www.opengeosys.org)
  *            Distributed under a Modified BSD License.
@@ -9,20 +10,20 @@
 
 #pragma once
 
-#include "BoundaryCondition.h"
 #include "NumLib/IndexValueVector.h"
-#include "ProcessLib/HeatTransportBHE/BHE/BHETypes.h"
+#include "ProcessLib/BoundaryCondition/BoundaryCondition.h"
 
-namespace ProcessLib
+namespace ProcessLib::HeatTransportBHE
 {
-template <typename BHEType>
+template <typename BHEUpdateCallback>
 class BHEInflowDirichletBoundaryCondition final : public BoundaryCondition
 {
 public:
     BHEInflowDirichletBoundaryCondition(
         std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices,
-        BHEType& bhe)
-        : _in_out_global_indices(std::move(in_out_global_indices)), _bhe(bhe)
+        BHEUpdateCallback bhe_update_callback)
+        : _in_out_global_indices(std::move(in_out_global_indices)),
+          _bhe_update_callback(bhe_update_callback)
     {
     }
 
@@ -36,19 +37,19 @@ public:
         bc_values.ids[0] = _in_out_global_indices.first;
         // here call the corresponding BHE functions
         auto const T_out = x[_in_out_global_indices.second];
-        bc_values.values[0] = _bhe.updateFlowRateAndTemperature(T_out, t);
+        bc_values.values[0] = _bhe_update_callback(T_out, t);
     }
 
 private:
     std::pair<GlobalIndexType, GlobalIndexType> const _in_out_global_indices;
-    BHEType& _bhe;
+    BHEUpdateCallback _bhe_update_callback;
 };
 
-template <typename BHEType>
-std::unique_ptr<BHEInflowDirichletBoundaryCondition<BHEType>>
+template <typename BHEUpdateCallback>
+std::unique_ptr<BHEInflowDirichletBoundaryCondition<BHEUpdateCallback>>
 createBHEInflowDirichletBoundaryCondition(
     std::pair<GlobalIndexType, GlobalIndexType>&& in_out_global_indices,
-    BHEType& bhe)
+    BHEUpdateCallback bhe_update_callback)
 {
     DBUG("Constructing BHEInflowDirichletBoundaryCondition.");
 
@@ -71,7 +72,8 @@ createBHEInflowDirichletBoundaryCondition(
     }
 #endif  // USE_PETSC
 
-    return std::make_unique<BHEInflowDirichletBoundaryCondition<BHEType>>(
-        std::move(in_out_global_indices), bhe);
+    return std::make_unique<
+        BHEInflowDirichletBoundaryCondition<BHEUpdateCallback>>(
+        std::move(in_out_global_indices), bhe_update_callback);
 }
-}  // namespace ProcessLib
+}  // namespace ProcessLib::HeatTransportBHE
diff --git a/ProcessLib/HeatTransportBHE/CMakeLists.txt b/ProcessLib/HeatTransportBHE/CMakeLists.txt
index 76f61d448c91b312dccc5c228465d434d5938611..b9501a6007a31edcd395b0d12684469f30141ee9 100644
--- a/ProcessLib/HeatTransportBHE/CMakeLists.txt
+++ b/ProcessLib/HeatTransportBHE/CMakeLists.txt
@@ -1,5 +1,6 @@
 APPEND_SOURCE_FILES(SOURCES)
 APPEND_SOURCE_FILES(SOURCES BHE)
+APPEND_SOURCE_FILES(SOURCES BoundaryConditions)
 APPEND_SOURCE_FILES(SOURCES LocalAssemblers)
 
 add_library(HeatTransportBHE ${SOURCES})
diff --git a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
index c1269c7d28e485112b28a8bc44cd580627b37246..c5ec1b9ef0e71656b0ebe3ae64447af069d39e8b 100644
--- a/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
+++ b/ProcessLib/HeatTransportBHE/HeatTransportBHEProcess.cpp
@@ -16,8 +16,8 @@
 #include "ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerBHE.h"
 #include "ProcessLib/HeatTransportBHE/LocalAssemblers/HeatTransportBHELocalAssemblerSoil.h"
 
-#include "ProcessLib/BoundaryCondition/BHEBottomDirichletBoundaryCondition.h"
-#include "ProcessLib/BoundaryCondition/BHEInflowDirichletBoundaryCondition.h"
+#include "BoundaryConditions/BHEBottomDirichletBoundaryCondition.h"
+#include "BoundaryConditions/BHEInflowDirichletBoundaryCondition.h"
 
 namespace ProcessLib
 {
@@ -241,14 +241,16 @@ void HeatTransportBHEProcess::createBHEBoundaryConditionTopBottom(
             {
                 // Top, inflow.
                 bcs.addBoundaryCondition(
-                    ProcessLib::createBHEInflowDirichletBoundaryCondition(
+                    createBHEInflowDirichletBoundaryCondition(
                         get_global_bhe_bc_indices(bc_top_node_id,
                                                   in_out_component_id),
-                        bhe));
+                        [&bhe](double const T, double const t) {
+                            return bhe.updateFlowRateAndTemperature(T, t);
+                        }));
 
                 // Bottom, outflow.
                 bcs.addBoundaryCondition(
-                    ProcessLib::createBHEBottomDirichletBoundaryCondition(
+                    createBHEBottomDirichletBoundaryCondition(
                         get_global_bhe_bc_indices(bc_bottom_node_id,
                                                   in_out_component_id)));
             }