diff --git a/ChemistryLib/PhreeqcIO.cpp b/ChemistryLib/PhreeqcIO.cpp
index 66ac3d659beebc6bb2f14d06f4ebb8f90a6ea01a..d3733726b9bea6a1bf5c68773f3d023496d4d01d 100644
--- a/ChemistryLib/PhreeqcIO.cpp
+++ b/ChemistryLib/PhreeqcIO.cpp
@@ -164,20 +164,20 @@ void setReactantMolality(Reactant& reactant,
         (*reactant.molality)[chemical_system_id];
 }
 
-template <typename Exchanger>
-void initializeExchangerMolality(Exchanger& exchanger,
-                                 GlobalIndexType const& chemical_system_id,
-                                 MaterialPropertyLib::Phase const& solid_phase,
-                                 ParameterLib::SpatialPosition const& pos,
-                                 double const t)
+template <typename Site>
+void initializeSiteMolality(Site& site,
+                            GlobalIndexType const& chemical_system_id,
+                            MaterialPropertyLib::Phase const& solid_phase,
+                            ParameterLib::SpatialPosition const& pos,
+                            double const t)
 {
-    auto const& solid_constituent = solid_phase.component(exchanger.name);
+    auto const& solid_constituent = solid_phase.component(site.name);
 
     auto const molality =
         solid_constituent[MaterialPropertyLib::PropertyType::molality]
             .template initialValue<double>(pos, t);
 
-    (*exchanger.molality)[chemical_system_id] = molality;
+    (*site.molality)[chemical_system_id] = molality;
 }
 
 template <typename Reactant>
@@ -339,8 +339,18 @@ void PhreeqcIO::initializeChemicalSystemConcrete(
 
     for (auto& exchanger : _chemical_system->exchangers)
     {
-        initializeExchangerMolality(exchanger, chemical_system_id, solid_phase,
-                                    pos, t);
+        initializeSiteMolality(exchanger, chemical_system_id, solid_phase, pos,
+                               t);
+    }
+
+    for (auto& surface_site : _chemical_system->surface)
+    {
+        if (auto const surface_site_ptr =
+                std::get_if<MoleBasedSurfaceSite>(&surface_site))
+        {
+            initializeSiteMolality(*surface_site_ptr, chemical_system_id,
+                                   solid_phase, pos, t);
+        }
     }
 }
 
diff --git a/ChemistryLib/PhreeqcIOData/ChemicalSystem.cpp b/ChemistryLib/PhreeqcIOData/ChemicalSystem.cpp
index c3b704f0ee0439aa9f94147fc282fa1c9badec67..b1c4956410fba618679e4531e8ed4ed8e4075e80 100644
--- a/ChemistryLib/PhreeqcIOData/ChemicalSystem.cpp
+++ b/ChemistryLib/PhreeqcIOData/ChemicalSystem.cpp
@@ -56,6 +56,15 @@ void ChemicalSystem::initialize(std::size_t const num_chemical_systems)
     {
         exchanger.molality->resize(num_chemical_systems);
     }
+
+    for (auto& surface_site : surface)
+    {
+        if (auto const surface_site_ptr =
+                std::get_if<MoleBasedSurfaceSite>(&surface_site))
+        {
+            surface_site_ptr->molality->resize(num_chemical_systems);
+        }
+    }
 }
 }  // namespace PhreeqcIOData
 }  // namespace ChemistryLib