diff --git a/src/app/clusters/thermostat-server/thermostat-server-presets.cpp b/src/app/clusters/thermostat-server/thermostat-server-presets.cpp
index e57c2f9c95f8fd..a56c94fa49834d 100644
--- a/src/app/clusters/thermostat-server/thermostat-server-presets.cpp
+++ b/src/app/clusters/thermostat-server/thermostat-server-presets.cpp
@@ -402,6 +402,20 @@ CHIP_ERROR ThermostatAttrAccess::AppendPendingPreset(Thermostat::Delegate * dele
         return CHIP_IM_GLOBAL_STATUS(ConstraintError);
     }
 
+    // Before adding this preset to the pending presets, if the expected length of the pending presets' list
+    // exceeds the total number of presets supported, return RESOURCE_EXHAUSTED. Note that the preset has not been appended yet.
+
+    uint8_t numberOfPendingPresets = CountNumberOfPendingPresets(delegate);
+
+    // We will be adding one more preset, so reject if the length is already at max.
+    if (numberOfPendingPresets >= delegate->GetNumberOfPresets())
+    {
+        return CHIP_IM_GLOBAL_STATUS(ResourceExhausted);
+    }
+
+    // TODO #34556 : Check if the number of presets for each presetScenario exceeds the max number of presets supported for that
+    // scenario. We plan to support only one preset for each presetScenario for our use cases so defer this for re-evaluation.
+
     return delegate->AppendToPendingPresetList(preset);
 }
 
@@ -504,25 +518,6 @@ Status ThermostatAttrAccess::PrecommitPresets(EndpointId endpoint)
         }
     }
 
-    uint8_t totalCount = CountNumberOfPendingPresets(delegate);
-
-    uint8_t numberOfPresetsSupported = delegate->GetNumberOfPresets();
-
-    if (numberOfPresetsSupported == 0)
-    {
-        ChipLogError(Zcl, "emberAfThermostatClusterCommitPresetsSchedulesRequestCallback: Failed to get NumberOfPresets");
-        return Status::InvalidInState;
-    }
-
-    // If the expected length of the presets attribute with the applied changes exceeds the total number of presets supported,
-    // return RESOURCE_EXHAUSTED. Note that the changes are not yet applied.
-    if (numberOfPresetsSupported > 0 && totalCount > numberOfPresetsSupported)
-    {
-        return Status::ResourceExhausted;
-    }
-
-    // TODO: Check if the number of presets for each presetScenario exceeds the max number of presets supported for that
-    // scenario. We plan to support only one preset for each presetScenario for our use cases so defer this for re-evaluation.
     return Status::Success;
 }