diff --git a/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorCheckItTiffPlugin.java b/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorCheckItTiffPlugin.java
index 622afc393067c398edb0f54eb9c8bab67c8d6359..e01fb281ba58c928f2d87ff6867d435d99f6a59d 100644
--- a/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorCheckItTiffPlugin.java
+++ b/java/org/slub/rosetta/dps/repository/plugin/SLUBTechnicalMetadataExtractorCheckItTiffPlugin.java
@@ -1,5 +1,5 @@
 /* 
-2014-2018 by Andreas Romeyke (SLUB Dresden)
+2014-2022 by Andreas Romeyke (SLUB Dresden)
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 
-Hint: works only with checkit_tiff version 0.3.1 or higher
+Hint: works only with checkit_tiff version 1.0.0 or higher
 */
 
 package org.slub.rosetta.dps.repository.plugin;
@@ -25,13 +25,17 @@ import com.exlibris.dps.sdk.techmd.MDExtractorPlugin;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.math.BigInteger;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.MessageDigest;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import java.nio.file.*;
 
 
 /**
@@ -43,15 +47,24 @@ import java.nio.file.*;
 /*public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtractorPlugin { */
 public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtractorPlugin {
     private static final ExLogger log = ExLogger.getExLogger(SLUBTechnicalMetadataExtractorCheckItTiffPlugin.class);
-    private Map<Checkit_tiff_versions, String> checkit_tiff_binary_path = new HashMap<Checkit_tiff_versions, String>();
-    private Map<Checkit_tiff_versions, String> checkit_tiff_config_path = new HashMap<Checkit_tiff_versions, String>();
-    private Map<Checkit_tiff_versions, Boolean> is_checkit_tiff_valid = new HashMap<Checkit_tiff_versions, Boolean>();
-    private String exiftool_binary_path;
-    private List<String> extractionErrors = new ArrayList<String>();
-    private List<String> validationLog = new ArrayList<String>();
+    private enum Checkit_tiff_versions {
+        current, upcoming
+    }
+    private final Map<Checkit_tiff_versions, String> checkit_tiff_binary_path = new HashMap<>();
+    private final Map<Checkit_tiff_versions, String> checkit_tiff_config_path = new HashMap<>();
+    private String exiftool_binary_path = null;
+    private List<String> extractionErrors = new ArrayList<>();
+    private final List<String> validationLog = new ArrayList<>();
     private Boolean isvalid = false;
     private Boolean iswellformed = false;
-    private Map<String,String> attributes = new HashMap<String, String>();
+    private final Map<String,String> attributes = new HashMap<>();
+    private final Map<Checkit_tiff_versions, String> md5Profile = new HashMap<>();
+    private final Map<Checkit_tiff_versions, String> md5CheckitTiff = new HashMap<>();
+    private boolean isDifferentProfile = true;
+    private final boolean isDifferentCheckItTiff = true;
+    private final Map<Checkit_tiff_versions, Boolean> is_checkit_tiff_valid = new HashMap<>();
+
+
     /** constructor */
     public SLUBTechnicalMetadataExtractorCheckItTiffPlugin() {
         log.info("SLUBTechnicalMetadataExtractorCheckItTiffPlugin instantiated");
@@ -60,43 +73,28 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
         }
     }
 
-    /** stand-alone check, main file to call local installed clamd
-     * @param args list of files which should be scanned
-     */
-    public static void main(String[] args) {
-        SLUBTechnicalMetadataExtractorCheckItTiffPlugin plugin = new SLUBTechnicalMetadataExtractorCheckItTiffPlugin();
-        Map<String, String> initp = new HashMap<String, String>();
-        // initp.put( "checkit_tiff", "/usr/bin/checkit_tiff");
-        // initp.put( "config_file", "/etc/checkit_tiff/slub.cfg");
-        initp.put( "current_checkit_tiff", "/home/romeyke/git/checkit_tiff/build/checkit_tiff");
-        initp.put( "current_config_file", "/home/romeyke/git/checkit_tiff/example_configs/cit_tiff6_baseline_SLUBrelaxed.cfg");
-        initp.put( "upcoming_checkit_tiff", "/home/romeyke/git/checkit_tiff/build/checkit_tiff");
-        initp.put( "upcoming_config_file", "/home/romeyke/git/checkit_tiff/example_configs/cit_tiff6_baseline_SLUBrelaxed.cfg");
-        initp.put( "exiftool", "/usr/bin/exiftool");
-        plugin.initParams( initp );
-        System.out.println("Agent: '" + plugin.getAgent() + "'");
-        System.out.println();
-        for (String file : args) {
-            try {
-                plugin.extract(file);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-            System.out.println("RESULT: " + plugin.isValid());
-            System.out.println("ERRORMESSAGE: " + plugin.getExtractionErrors());
-        }
-    }
-
     /** init params to configure the plugin via xml forms
      * @param initp parameter map
      */
-    public void initParams(Map<String, String> initp) {
+    public final void initParams(Map<String, String> initp) {
         this.checkit_tiff_binary_path.put(Checkit_tiff_versions.current, initp.get("current_checkit_tiff").trim());
         this.checkit_tiff_binary_path.put(Checkit_tiff_versions.upcoming, initp.get("upcoming_checkit_tiff").trim());
         this.checkit_tiff_config_path.put(Checkit_tiff_versions.current, initp.get("current_config_file").trim());
         this.checkit_tiff_config_path.put(Checkit_tiff_versions.upcoming, initp.get("upcoming_config_file").trim());
-
+       
         this.exiftool_binary_path = initp.get("exiftool").trim();
+        try {
+            check_path(exiftool_binary_path, "path for exiftool_binary", true);
+            for (Checkit_tiff_versions v: Checkit_tiff_versions.values()) {
+                check_path(checkit_tiff_binary_path.get(v), "path for checkit_tiff binary " + v, true);
+                check_path(checkit_tiff_config_path.get(v), "path for checkit_tiff config " + v, false);
+                md5CheckitTiff.put(v, md5SumOfFile(checkit_tiff_binary_path.get(v)));
+                md5Profile.put(v,md5SumOfFile(checkit_tiff_config_path.get(v)));
+            }
+            this.isDifferentProfile = ! this.md5Profile.get(Checkit_tiff_versions.current).equals(this.md5Profile.get(Checkit_tiff_versions.upcoming));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         log.info("SLUBTechnicalMetadataExtractorCheckItTiffPlugin instantiated with "
                 + "(current: "
                 + " checkit_tiff_binary_path=" + checkit_tiff_binary_path.get(Checkit_tiff_versions.current)
@@ -105,7 +103,8 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
                 + " checkit_tiff_binary_path=" + checkit_tiff_binary_path.get(Checkit_tiff_versions.upcoming)
                 + " cfg=" + checkit_tiff_config_path.get(Checkit_tiff_versions.upcoming)
                 + ")"
-                + " and exiftool_binary_path=" + exiftool_binary_path);
+                + " and exiftool_binary_path=" + exiftool_binary_path
+        );
     }
 
     private void parse_exiftool_output( String exiftoolxml ) {
@@ -135,17 +134,10 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
     }
 
     @Override
-    public void extract(String filePath) throws Exception {
-        for (Checkit_tiff_versions v: Checkit_tiff_versions.values()) {
-            check_path( checkit_tiff_binary_path.get(v), "path for (" + v.name() + ") checkit_tiff_binary", true);
-            check_path( checkit_tiff_config_path.get(v), "path for (" + v.name() + ") checkit_tiff_config", false);
-        }
-
-        check_path(exiftool_binary_path, "path for exiftool_binary", true);
+    public final void extract(String filePath) throws Exception {
         validate_tiff_by_upcoming_checkit_tiff(filePath);
-
         /* only check against current checkit_tiff if upcoming fails */
-        if (is_checkit_tiff_valid.get(Checkit_tiff_versions.upcoming) == false) {
+        if ((this.isDifferentCheckItTiff || isDifferentProfile) && is_checkit_tiff_valid.get(Checkit_tiff_versions.upcoming) == false) {
             validate_tiff_by_current_checkit_tiff(filePath);
         }
 
@@ -172,14 +164,14 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
             p.waitFor();
             BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
             String line=reader.readLine();
-            String response="";
+            StringBuilder response= new StringBuilder();
             while (line != null) {
                 log.debug(line);
                 parse_exiftool_output(line.trim());
-                response+=line;
+                response.append(line);
                 line = reader.readLine();
             }
-            attributes.put("exiftool-log", response.trim());
+            attributes.put("exiftool-log", response.toString().trim());
 
         } catch (IOException e) {
             log.error(e);
@@ -226,7 +218,7 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
         validate_tiff_by_checkit_tiff_version(filePath, Checkit_tiff_versions.upcoming);
     }
 
-    public String getAgentName() {
+    public final String getAgentName() {
         log.debug("getAgentName() called");
         return "checkit_tiff";
     }
@@ -235,11 +227,11 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
      *
      * @return string with version
      */
-    public String getAgent() {
+    public final String getAgent() {
         log.debug("getAgent() called");
-        String response="";
+        StringBuilder response= new StringBuilder();
         for (Checkit_tiff_versions version : Checkit_tiff_versions.values()) {
-            response += (version.name() + " checkit_tiff:\n");
+            response.append(version.name()).append(" checkit_tiff:\n");
             try {
                 String execstring = this.checkit_tiff_binary_path.get(version) + " -v";
                 Process p = Runtime.getRuntime().exec(execstring);
@@ -248,7 +240,7 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
                 String line = reader.readLine();
                 while (line != null) {
                     log.debug(line);
-                    response += line;
+                    response.append(line);
                     line = reader.readLine();
                 }
             } catch (IOException e) {
@@ -258,11 +250,11 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
                 e.printStackTrace();
             }
         }
-        return response.trim();
+        return response.toString().trim();
     }
 
     @Override
-    public String getAttributeByName(String attribute) {
+    public final String getAttributeByName(String attribute) {
       if (attributes.containsKey(attribute)) {
           return attributes.get(attribute);
       }
@@ -270,7 +262,7 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
     }
 
     @Override
-    public List<String> getExtractionErrors() {
+    public final List<String> getExtractionErrors() {
       return this.extractionErrors;
     }
     /* processed using:
@@ -286,9 +278,9 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
      *
      * */
     @Override
-    public List<String> getSupportedAttributeNames() {
+    public final List<String> getSupportedAttributeNames() {
       //return new ArrayList<String>(attributes.keySet());
-        List<String> available = new ArrayList<String>();
+        List<String> available = new ArrayList<>();
         //available.add("checkit-tiff-conf");
         available.add("checkit-tiff-log");
         //available.add("checkit-tiff-path");
@@ -1100,38 +1092,117 @@ public class SLUBTechnicalMetadataExtractorCheckItTiffPlugin implements MDExtrac
     }
 
     @Override
-    public boolean isWellFormed() {
+    public final boolean isWellFormed() {
       return this.iswellformed;
     }
 
     @Override
-    public boolean isValid() {
+    public final boolean isValid() {
         log.debug("is valid=" + this.isvalid);
         return this.isvalid;
     }
     @Override
-    public String getFormatName() {
+    public final String getFormatName() {
         return "TIFF";
     }
 
     @Override
-    public String getFormatVersion() {
+    public final String getFormatVersion() {
       return "6 (baseline + SLUB extensions)";
     }
 
     @Override
-    public Integer getImageCount() {
+    public final Integer getImageCount() {
         return 1; //baseline tiff holds exact one
     }
 
     @Override
-    public String getMimeType() {
+    public final String getMimeType() {
       return "image/tiff";
     }
 
-    private enum Checkit_tiff_versions {
-        current, upcoming
+    @Override
+    public final String getProfile() {
+        /* there is no documentation in ExL API, therefore we use it to document the profile versions in a light way */
+        StringBuilder returnvalue = new StringBuilder();
+        for (Checkit_tiff_versions v: Checkit_tiff_versions.values()) {
+            String modificationdate = modificationDateOfFile(this.checkit_tiff_config_path.get(v));
+            returnvalue.append(v).append("profile:\n").append("  path=").append(this.checkit_tiff_config_path.get(v)).append("\n").append("  md5sum=").append(this.md5CheckitTiff.get(v)).append("\n").append("  modification date=").append(modificationdate).append("\n");
+        }
+        return returnvalue.toString();
+    }
+
+    private String md5SumOfFile(String filename ) {
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] b = Files.readAllBytes(Paths.get(filename));
+            byte[] digest = md.digest(b);
+            return new BigInteger(1, digest).toString(16);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
     }
-}
 
+    private String modificationDateOfFile(String filename ) {
+        try {
+            return Files.getLastModifiedTime(Paths.get(filename)).toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
 
+
+    /** stand-alone check, main file
+     * @param args list of files which should be scanned
+     */
+    public static void main(String[] args) {
+        SLUBTechnicalMetadataExtractorCheckItTiffPlugin plugin = new SLUBTechnicalMetadataExtractorCheckItTiffPlugin();
+        Map<String, String> initp = new HashMap<>();
+        initp.put( "current_checkit_tiff", "/operational_shared/software/checkit_tiff_current");
+        initp.put( "current_config_file", "/operational_shared/software/cit_tiff6_baseline_SLUB_current.cfg");
+        initp.put( "upcoming_checkit_tiff", "/operational_shared/software/checkit_tiff_upcoming");
+        initp.put( "upcoming_config_file", "/operational_shared/software/cit_tiff6_baseline_SLUB_current.cfg");
+        initp.put( "exiftool", "/usr/bin/exiftool");
+        plugin.initParams( initp );
+        System.out.println("Agent: '" + plugin.getAgent() + "'");
+        System.out.println();
+        for (String file : args) {
+            try {
+                plugin.extract(file);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            System.out.println("RESULT: " + plugin.isValid());
+            System.out.println("ERRORMESSAGE: " + plugin.getExtractionErrors());
+        }
+        System.out.println("----------------------------------");
+        System.out.println("getAgentName:");
+        System.out.println( plugin.getAgentName());
+        System.out.println("----------------------------------");
+        System.out.println("getAgent:");
+        System.out.println( plugin.getAgent());
+        System.out.println("----------------------------------");
+        System.out.println("getSupportedAttributeNames:");
+        System.out.println( plugin.getSupportedAttributeNames());
+        System.out.println("----------------------------------");
+        System.out.println("getFormatName:");
+        System.out.println( plugin.getFormatName());
+        System.out.println("----------------------------------");
+        System.out.println("getFormatVersion:");
+        System.out.println( plugin.getFormatVersion());
+        System.out.println("----------------------------------");
+        System.out.println("getMimeType:");
+        System.out.println( plugin.getMimeType());
+        System.out.println("----------------------------------");
+        System.out.println("getProfile:");
+        System.out.println( plugin.getProfile());
+        System.out.println("----------------------------------");
+        System.out.println("getAttributeByName (summarized):");
+        for (Map.Entry<String, String> m : plugin.attributes.entrySet()) {
+            String s = m.getKey() + " -> " + m.getValue();
+            System.out.println(s);
+        }
+    }
+}
diff --git a/test.sh b/test.sh
index 1bb4f05beb5165ed2c649b5834e3c393e189bcb6..d85103c2d61977aa30160ab693fcee47757341ef 100644
--- a/test.sh
+++ b/test.sh
@@ -1,10 +1,16 @@
 #!/bin/bash
-EXL=/exlibris/dps/d4_1/system.dir/dps-sdk-7.1.0/
-java -cp \
-"${EXL}/lib/dps-sdk-7.1.0.jar:${EXL}/dps-sdk-projects/dps-sdk-deposit/lib/log4j-1.2.14.jar:\
-${EXL}/dps-sdk-projects/dps-sdk-deposit/lib/commons-codec-1.10.jar:\
-${EXL}/dps-sdk-projects/dps-sdk-deposit/lib/xmlbeans-2.3.0.jar:\
-/usr/share/java/commons-lang.jar:\
-./SLUBTechnicalMetadataExtractorCheckItTiffPlugin.jar:./SLUBTechnicalMetadataExtractorCheckItTiffPlugin.jar" \
-org.slub.rosetta.dps.repository.plugin.SLUBTechnicalMetadataExtractorCheckItTiffPlugin \
-"$1"
+
+# check arguments
+if [ "$#" -lt 1 ]; then echo "error: no media file given"; exit 1; fi
+if [ ! -f "$1" ]; then echo "error: media file '$1' does not exist"; exit 1; fi
+
+# set variables
+MEDIA_FILE="$1";
+ROSETTAVERSION="7.1.0"
+ROSETTA_SDK_DIR="/exlibris/dps/d4_1/system.dir/dps-sdk-${ROSETTAVERSION}"
+ROSETTA_SDK_JAR="${ROSETTA_SDK_DIR}/lib/dps-sdk-${ROSETTAVERSION}.jar:${ROSETTA_SDK_DIR}/dps-sdk-projects/dps-sdk-deposit/lib/log4j-1.2.14.jar"
+PLUGIN_JAR="./SLUBTechnicalMetadataExtractorCheckItTiffPlugin.jar"
+PLUGIN_NAME="org.slub.rosetta.dps.repository.plugin.SLUBTechnicalMetadataExtractorCheckItTiffPlugin"
+
+# run plugin
+java -cp "${ROSETTA_SDK_JAR}:${PLUGIN_JAR}" "${PLUGIN_NAME}" "${MEDIA_FILE}"