diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp
index 2be7f51..e96cf81 100644
--- a/audio/aidl/default/Module.cpp
+++ b/audio/aidl/default/Module.cpp
@@ -1049,23 +1049,6 @@
         return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
     }
 
-    auto& patches = getConfig().patches;
-    auto existing = patches.end();
-    if (in_requested.id != 0) {
-        existing = findById<AudioPatch>(patches, in_requested.id);
-        if (existing == patches.end()) {
-            LOG(ERROR) << __func__ << ": " << mType << ": not found existing patch id "
-                       << in_requested.id;
-            return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
-        }
-        if (in_requested == *existing) {
-            LOG(INFO) << __func__ << ": " << mType
-                      << ": requested patch has no changes compared to already existing one, id "
-                      << in_requested.id;
-            return ndk::ScopedAStatus::ok();
-        }
-    }
-
     auto& configs = getConfig().portConfigs;
     std::vector<int32_t> missingIds;
     auto sources =
@@ -1105,12 +1088,20 @@
     }
     RETURN_STATUS_IF_ERROR(checkAudioPatchEndpointsMatch(sources, sinks));
 
+    auto& patches = getConfig().patches;
+    auto existing = patches.end();
     std::optional<decltype(mPatches)> patchesBackup;
-    if (existing != patches.end()) {
-        patchesBackup = mPatches;
-        cleanUpPatch(existing->id);
+    if (in_requested.id != 0) {
+        existing = findById<AudioPatch>(patches, in_requested.id);
+        if (existing != patches.end()) {
+            patchesBackup = mPatches;
+            cleanUpPatch(existing->id);
+        } else {
+            LOG(ERROR) << __func__ << ": " << mType << ": not found existing patch id "
+                       << in_requested.id;
+            return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+        }
     }
-
     // Validate the requested patch.
     for (const auto& [sinkPortId, nonExclusive] : allowedSinkPorts) {
         if (!nonExclusive && mPatches.count(sinkPortId) != 0) {
