diff --git a/PLUGIN-INF/metadata_SLUBVirusCheckClamAVPlugin.xml b/PLUGIN-INF/metadata_SLUBVirusCheckClamAVPlugin.xml
index 9a9891bda624099e4f088a79307eca6b3e6abb51..db866068f376db70d577c267f83e841e15f982e8 100644
--- a/PLUGIN-INF/metadata_SLUBVirusCheckClamAVPlugin.xml
+++ b/PLUGIN-INF/metadata_SLUBVirusCheckClamAVPlugin.xml
@@ -1,5 +1,5 @@
 <pl:metadata-config xmlns:pl="http://www.exlibrisgroup.com/Plugins/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-	<pl:pluginTypeName>VirusCheckPlugin</pl:pluginTypeName>
+	<pl:pluginTypeName>VirusCheckPluginV2</pl:pluginTypeName>
 	<pl:deployName>SLUBVirusCheckClamAVPlugin</pl:deployName>
 	<pl:className>org.slub.rosetta.dps.repository.plugin.SLUBVirusCheckClamAVPlugin</pl:className>
 	<pl:initParameters>
@@ -49,7 +49,7 @@
 		</fr:x_form>
 	</pl:initParameters>
 	<pl:description>SLUB Virus Check Plugin using installed ClamAV daemon via tcp-sockets</pl:description>
-	<pl:version>1.9</pl:version>
+	<pl:version>2.0</pl:version>
 	<pl:materialType>DIGITAL</pl:materialType>
 	<pl:module>Repository</pl:module>
 	<pl:generalType>TASK</pl:generalType>
diff --git a/java/org/slub/rosetta/dps/repository/plugin/SLUBVirusCheckClamAVPlugin.java b/java/org/slub/rosetta/dps/repository/plugin/SLUBVirusCheckClamAVPlugin.java
index 2c04872c445b19dc5eb9d4e9fe7617629503a60f..5a33de473fe172b26c584326696cfbdd00516408 100644
--- a/java/org/slub/rosetta/dps/repository/plugin/SLUBVirusCheckClamAVPlugin.java
+++ b/java/org/slub/rosetta/dps/repository/plugin/SLUBVirusCheckClamAVPlugin.java
@@ -24,7 +24,7 @@ package org.slub.rosetta.dps.repository.plugin;
 
 
 import com.exlibris.core.infra.common.exceptions.logging.ExLogger;
-import com.exlibris.dps.repository.plugin.virusChcek.VirusCheckPlugin;
+import com.exlibris.dps.repository.plugin.virusChcek.VirusCheckPluginV2;
 
 import java.io.DataOutputStream;
 import java.io.FileInputStream;
@@ -47,9 +47,9 @@ import java.util.Map;
  * code could also be copied from https://code.google.com/p/clamavj/source/browse/trunk/src/main/java/com/philvarner/clamavj/ClamScan.java?r=2
  *
  * @author andreas.romeyke@slub-dresden.de (Andreas Romeyke)
- * @see com.exlibris.dps.repository.plugin.virusChcek.VirusCheckPlugin 
+ * @see com.exlibris.dps.repository.plugin.virusChcek.VirusCheckPluginV2
  */
-public class SLUBVirusCheckClamAVPlugin implements VirusCheckPlugin {
+public class SLUBVirusCheckClamAVPlugin implements VirusCheckPluginV2 {
     //private static final ExLogger log = ExLogger.getExLogger(SLUBVirusCheckClamAVPlugin.class);
     private static final int DEFAULT_CHUNK_SIZE = 4096;
     private static final byte[] INSTREAM = "zINSTREAM\0".getBytes();
@@ -63,9 +63,14 @@ public class SLUBVirusCheckClamAVPlugin implements VirusCheckPlugin {
     private String host;
     private int port;
     private String response;
-    private Status status = Status.FAILED;
+    /* Status:
+     * @return 0 if last scan passed (means: virus free) -> PASSED
+     * @return 1 if last scan found a virus              -> FAILED
+     * @return >1 if last scan result is undetermined    -> UNDETERMINED
+     */
+    private enum Status {PASSED, FAILED, UNDETERMINED}; /* order is important, because we use .ordinal() in return code */
+    private Status status = Status.UNDETERMINED;
     private String signature = "";
-    private enum Status {PASSED, FAILED};
     /** constructor */
     public SLUBVirusCheckClamAVPlugin() {
         //log.info("SLUBVirusCheckPlugin instantiated with host=" + host + " port=" + port + " timeout=" + timeout);
@@ -85,6 +90,7 @@ public class SLUBVirusCheckClamAVPlugin implements VirusCheckPlugin {
      * @param args list of files which should be scanned
      */
     public static void main(String[] args) {
+
         SLUBVirusCheckClamAVPlugin plugin = new SLUBVirusCheckClamAVPlugin();
         Map<String, String> initp = new HashMap<String, String>();
         initp.put( "host", "127.0.0.1");
@@ -294,18 +300,26 @@ public class SLUBVirusCheckClamAVPlugin implements VirusCheckPlugin {
                 setStatus(Status.PASSED);
                 log.info("scan of file '" + fileFullPath + "' passed");
             } else if (result.endsWith(FOUND_SUFFIX)) {
-                setStatus(Status.FAILED);
+                if (result.contains(".Exploit.CVE")) { // we want to ignore CVE results
+                    setStatus(Status.UNDETERMINED);
+                    log.info("scan of file '" + fileFullPath + "' possibly failed, check manually if should be ignored!");
+                } else if (result.contains("eicar")) { // we want to ignore EICAR
+                    setStatus(Status.UNDETERMINED);
+                    log.info("scan of file '" + fileFullPath + "' possibly failed, because EICAR sequence detected, check manually if should be ignored!");
+                } else {
+                    setStatus(Status.FAILED);
+                    log.info("scan of file '" + fileFullPath + "' failed");
+                }
                 setSignature(result.substring(STREAM_PREFIX.length(), result.lastIndexOf(FOUND_SUFFIX) - 1));
-                log.info("scan of file '" + fileFullPath + "' failed");
             } else {
-                setStatus(Status.FAILED);
+                setStatus(Status.UNDETERMINED);
                 log.warn("clamd protocol not fully implemented, result='" + result + "'");
                 //System.out.println("clamd protocol not fully implemented");
             }
         } catch (IOException e) {
             log.error("exception creation socket in scan(), clamd not available at host=" + host + "port=" + port, e);
             //System.out.println("exception creation socket, clamd not available at host=" + host + "port=" + port + " " + e);
-            setStatus(Status.FAILED);
+            setStatus(Status.UNDETERMINED);
             setSignature("ERROR: clamd not available");
         }
     }
@@ -341,11 +355,11 @@ public class SLUBVirusCheckClamAVPlugin implements VirusCheckPlugin {
 
     /** result of last scan
      *
-     * @return true if last scan passed (means: virus free)
+     * @return 0 if last scan passed (means: virus free)
+     * @return 1 if last scan found a virus
+     * @return >1 if last scan result is undetermined
      */
-    public boolean isVirusFree() {
-        //return true; // dummy
-        return (Status.PASSED == getStatus());
+    public int isVirusFree() {
+        return (getStatus().ordinal());
     }
 }
-