diff --git a/multi-pathogen-sampling.R b/multi-pathogen-sampling.R
index c1ca4a5b87914c1fafe98f301be637803f14966c..11fc350292d9b0f69e79730fe1c5cc5e947de472 100644
--- a/multi-pathogen-sampling.R
+++ b/multi-pathogen-sampling.R
@@ -77,7 +77,7 @@ matches <- function(requirement, action) {
 
   equivalent_matrices <- FALSE
 
-  if (action$pest == "Xanthomonas citri" || action$pest == "Aleurocanthus citriperdus") {
+  if (!same_matrix && (action$pest == "Xanthomonas citri" || action$pest == "Aleurocanthus citriperdus")) {
     if (action$matrix_ == "shoots" || action$matrix_ == "fruits") {
       if (requirement$matrix_ == "shoots" || requirement$matrix_ == "fruits") {
         equivalent_matrices <- TRUE
@@ -87,7 +87,7 @@ matches <- function(requirement, action) {
 
   reusable_sample <- FALSE
 
-  if (action$matrix_ == "shoots" || action$matrix_ == "fruits") {
+  if (!same_pest && (action$matrix_ == "shoots" || action$matrix_ == "fruits")) {
     if (action$pest == "Trioza erytreae" || action$pest == "Citrus leprosis") {
       if (requirement$pest == "Trioza erytreae" || requirement$pest == "Citrus leprosis") {
         reusable_sample <- TRUE
diff --git a/src/main.rs b/src/main.rs
index bcaafbfbd6a1f848baaa15e4363a257945dd9f82..7a436133c57be6374b08cf4dc1cbf1f1b3164580 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -252,8 +252,8 @@ fn matches(
             let same_matrix = requirement.matrix == action.matrix;
 
             // Does the pest implied by the action have equivalent matrices matching the requirement?
-            let equivalent_matrices =
-                problem
+            let equivalent_matrices = !same_matrix
+                && problem
                     .equivalent_matrices
                     .iter()
                     .any(|equivalent_matrices| {
@@ -263,11 +263,12 @@ fn matches(
                     });
 
             // Is the matrix implied by the action resuable for sampling a pest matching the requirement?
-            let reusable_sample = problem.reusable_samples.iter().any(|reusable_sample| {
-                reusable_sample.matrix.contains(action.matrix.0)
-                    && reusable_sample.pests.contains(action.pest.0)
-                    && reusable_sample.pests.contains(requirement.pest.0)
-            });
+            let reusable_sample = !same_pest
+                && problem.reusable_samples.iter().any(|reusable_sample| {
+                    reusable_sample.matrix.contains(action.matrix.0)
+                        && reusable_sample.pests.contains(action.pest.0)
+                        && reusable_sample.pests.contains(requirement.pest.0)
+                });
 
             let matches = (same_pest || reusable_sample) && (same_matrix || equivalent_matrices);