diff --git a/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java b/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java
index 71b8cc09fc5275608352bd9b8de370b61da1fe38..e1c2d30a92da9012f5d8bf4acd60c313a93c0e46 100644
--- a/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java
+++ b/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorMediaConchPlugin.java
@@ -63,6 +63,9 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract
     private final List<String> validationLog = new ArrayList<>();
     private boolean isvalid = false;
     private boolean iswellformed = false;
+    private String md5CurrentProfile;
+    private String md5UpcomingProfile;
+    private boolean isDifferentProfile = true;
     private final Map<String,String> attributes = new HashMap<>();
     //static final ExLogger log = ExLogger.getExLogger(SLUBTechnicalMetadataExtractorMediaConchPlugin.class, ExLogger.VALIDATIONSTACK);
 
@@ -87,6 +90,9 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract
             checkFileExists(this.xsltproc_binary_path);
             checkFileExists(this.mediaconch_current_profile_path);
             checkFileExists(this.mediaconch_upcoming_profile_path);
+            this.md5CurrentProfile = md5SumOfFile( this.mediaconch_current_profile_path);
+            this.md5UpcomingProfile = md5SumOfFile( this.mediaconch_upcoming_profile_path);
+            this.isDifferentProfile = ! this.md5UpcomingProfile.equals(this.md5CurrentProfile);
             System.out.println("SLUBTechnicalMetadataExtractorMediaConchPlugin instantiated with "
                     + " mediaconch_binary_path=" + mediaconch_binary_path
                     + " mediaconch_current_profile_path=" + mediaconch_current_profile_path
@@ -102,19 +108,17 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract
     @Override
     // TODO: Pfadstring, Prüfsumme, modification date für beide Profile
     public String getProfile () {
-        String md5_current = md5SumOfFile( this.mediaconch_current_profile_path);
         String modified_current = modificationDateOfFile( this.mediaconch_current_profile_path);
-        String md5_upcoming = md5SumOfFile( this.mediaconch_upcoming_profile_path);
         String modified_upcoming = modificationDateOfFile( this.mediaconch_upcoming_profile_path);
         /* there is no documentation in ExL API, therefore we use it to document the profile versions in a light way */
         return (
                   "current profile:\n"
                 + "  path=" + this.mediaconch_current_profile_path + "\n"
-                + "  md5sum=" + md5_current + "\n"
+                + "  md5sum=" + this.md5CurrentProfile + "\n"
                 + "  modification date=" + modified_current + "\n"
                 + "upcoming profile:\n"
                 + "  path=" + this.mediaconch_upcoming_profile_path + "\n"
-                + "  md5sum=" + md5_upcoming + "\n"
+                + "  md5sum=" + this.md5UpcomingProfile + "\n"
                 + "  modification date=" +modified_upcoming + "\n"
         );
     }
@@ -133,9 +137,12 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract
         checkFileExists(this.mediaconch_binary_path);
         checkFileExists(this.mediaconch_current_profile_path);
         checkFileExists(this.mediainfo_binary_path);
-        //checkFileExists(xsltproc_binary_path);
-        // mediaconch validation
-        callMediaconch(filePath);
+        checkFileExists(this.xsltproc_binary_path);
+        // mediaconch validation, first using upcoming profile, if invalid then retry with current profile
+        callMediaconch(filePath, this.mediaconch_upcoming_profile_path);
+        if (isDifferentProfile && !isvalid) {
+            callMediaconch(filePath, this.mediaconch_current_profile_path);
+        }
         // mediainfo metadata extraction
         callMediainfoAndResultProcessing(filePath);
     }
@@ -254,8 +261,8 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract
         }
     }
 
-    private void callMediaconch(String filePath) throws Exception {
-        String execstring = this.mediaconch_binary_path + " " + filePath + " -p " + this.mediaconch_current_profile_path;
+    private void callMediaconch(String filePath, String profilePath) throws Exception {
+        String execstring = this.mediaconch_binary_path + " " + filePath + " -p " + profilePath;
         System.out.println("executing: " + execstring);
         InputStreamReader process_out;
         try {
@@ -479,7 +486,7 @@ public class SLUBTechnicalMetadataExtractorMediaConchPlugin implements MDExtract
                 e.printStackTrace();
                 return;
             }
-            System.out.println("RESULT: " + plugin.isValid());
+            System.out.println("Validation RESULT: " + plugin.isValid());
             System.out.println("ERRORMESSAGE: " + plugin.getExtractionErrors());
         }
         System.out.println("----------------------------------");