diff --git a/java/com/google/gerrit/plugins/codeowners/backend/ChangedFiles.java b/java/com/google/gerrit/plugins/codeowners/backend/ChangedFiles.java
index 1a3bb94..57e72ef 100644
--- a/java/com/google/gerrit/plugins/codeowners/backend/ChangedFiles.java
+++ b/java/com/google/gerrit/plugins/codeowners/backend/ChangedFiles.java
@@ -114,17 +114,32 @@
   public ImmutableSet<ChangedFile> compute(
       Project.NameKey project, Config repoConfig, RevWalk revWalk, RevCommit revCommit)
       throws IOException, PatchListNotAvailableException {
+    return compute(
+        project,
+        repoConfig,
+        revWalk,
+        revCommit,
+        codeOwnersPluginConfiguration.getMergeCommitStrategy(project));
+  }
+
+  public ImmutableSet<ChangedFile> compute(
+      Project.NameKey project,
+      Config repoConfig,
+      RevWalk revWalk,
+      RevCommit revCommit,
+      MergeCommitStrategy mergeCommitStrategy)
+      throws IOException, PatchListNotAvailableException {
     requireNonNull(project, "project");
     requireNonNull(repoConfig, "repoConfig");
     requireNonNull(revWalk, "revWalk");
     requireNonNull(revCommit, "revCommit");
+    requireNonNull(mergeCommitStrategy, "mergeCommitStrategy");
 
     logger.atFine().log(
         "computing changed files for revision %s in project %s", revCommit.name(), project);
 
     if (revCommit.getParentCount() > 1
-        && MergeCommitStrategy.FILES_WITH_CONFLICT_RESOLUTION.equals(
-            codeOwnersPluginConfiguration.getMergeCommitStrategy(project))) {
+        && MergeCommitStrategy.FILES_WITH_CONFLICT_RESOLUTION.equals(mergeCommitStrategy)) {
       return computeByComparingAgainstAutoMerge(project, revCommit);
     }
 
diff --git a/java/com/google/gerrit/plugins/codeowners/validation/CodeOwnerConfigValidator.java b/java/com/google/gerrit/plugins/codeowners/validation/CodeOwnerConfigValidator.java
index f0023ff..682ce27 100644
--- a/java/com/google/gerrit/plugins/codeowners/validation/CodeOwnerConfigValidator.java
+++ b/java/com/google/gerrit/plugins/codeowners/validation/CodeOwnerConfigValidator.java
@@ -30,6 +30,7 @@
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.exceptions.StorageException;
 import com.google.gerrit.plugins.codeowners.JgitPath;
+import com.google.gerrit.plugins.codeowners.api.MergeCommitStrategy;
 import com.google.gerrit.plugins.codeowners.backend.ChangedFile;
 import com.google.gerrit.plugins.codeowners.backend.ChangedFiles;
 import com.google.gerrit.plugins.codeowners.backend.CodeOwnerBackend;
@@ -264,8 +265,23 @@
     try {
       CodeOwnerBackend codeOwnerBackend = codeOwnersPluginConfiguration.getBackend(branchNameKey);
 
+      // For merge commits, always do the comparison against the destination branch
+      // (MergeCommitStrategy.ALL_CHANGED_FILES). Doing the comparison against the auto-merge
+      // (MergeCommitStrategy.FILES_WITH_CONFLICT_RESOLUTION) is not possible because the auto-merge
+      // is loaded via the PatchListCache to which we cannot pass the rev walk which should be used
+      // to load the newly created merge commit and hence trying to load it from PatchListCache
+      // would fail with a missing object exception. This is why we use
+      // MergeCommitStrategy.ALL_CHANGED_FILES here even if
+      // MergeCommitStrategy.FILES_WITH_CONFLICT_RESOLUTION is configured.
       ImmutableList<ChangedFile> modifiedCodeOwnerConfigFiles =
-          changedFiles.compute(branchNameKey.project(), repoConfig, revWalk, revCommit).stream()
+          changedFiles
+              .compute(
+                  branchNameKey.project(),
+                  repoConfig,
+                  revWalk,
+                  revCommit,
+                  MergeCommitStrategy.ALL_CHANGED_FILES)
+              .stream()
               // filter out deletions (files without new path)
               .filter(changedFile -> changedFile.newPath().isPresent())
               // filter out non code owner config files
@@ -319,7 +335,7 @@
               "failed to validate code owner config files in revision %s"
                   + " (project = %s, branch = %s)",
               revCommit.getName(), branchNameKey.project(), branchNameKey.branch());
-      logger.atSevere().log(errorMessage);
+      logger.atSevere().withCause(e).log(errorMessage);
       throw new StorageException(errorMessage, e);
     }
   }
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerConfigValidatorIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerConfigValidatorIT.java
index dcc6464..320e720 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerConfigValidatorIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerConfigValidatorIT.java
@@ -1211,6 +1211,20 @@
 
   @Test
   public void validateMergeCommitCreatedViaTheCreateChangeRestApi() throws Exception {
+    testValidateMergeCommitCreatedViaTheCreateChangeRestApi();
+  }
+
+  @Test
+  @GerritConfig(
+      name = "plugin.code-owners.mergeCommitStrategy",
+      value = "FILES_WITH_CONFLICT_RESOLUTION")
+  public void
+      validateMergeCommitCreatedViaTheCreateChangeRestApi_FilesWithConflictResolutionAsMergeCommitStrategy()
+          throws Exception {
+    testValidateMergeCommitCreatedViaTheCreateChangeRestApi();
+  }
+
+  private void testValidateMergeCommitCreatedViaTheCreateChangeRestApi() throws Exception {
     // Create another branch.
     String branchName = "stable";
     createBranch(BranchNameKey.create(project, branchName));
