diff --git a/DependencyInjection/IrsteaFileUploadExtension.php b/DependencyInjection/IrsteaFileUploadExtension.php
index 5e64c37458f254607c5a4db8c94b78026e6782f5..d84b81ae8563a999dd30b92afc161b36140fd454 100644
--- a/DependencyInjection/IrsteaFileUploadExtension.php
+++ b/DependencyInjection/IrsteaFileUploadExtension.php
@@ -22,6 +22,12 @@ class IrsteaFileUploadExtension extends Extension implements PrependExtensionInt
         $loader->load('services.yml');
 
         $container->setParameter('irstea_file_upload.max_chunk_size', $config['max_chunk_size']);
+
+        $bundles = $container->getParameter('kernel.bundles');
+        if(!isset($bundles['CLTissueBundle'])) {
+            // On a pas le CLTissueBundle => pas d'antivirus
+            $container->removeDefinition('irstea_file_upload.virus_scanner');
+        }
     }
 
     /**
diff --git a/Listener/VirusScannerListener.php b/Listener/VirusScannerListener.php
new file mode 100644
index 0000000000000000000000000000000000000000..d9f37c1789e4ff6388460365656f28852dbe0ace
--- /dev/null
+++ b/Listener/VirusScannerListener.php
@@ -0,0 +1,65 @@
+<?php
+
+/*
+ * Copyright (C) 2015 IRSTEA
+ * All rights reserved.
+ */
+
+namespace Irstea\FileUploadBundle\Listener;
+
+use CL\Tissue\Adapter\AdapterInterface;
+use CL\Tissue\Model\Detection;
+use CL\Tissue\Model\ScanResult;
+use Irstea\FileUploadBundle\Event\FileUploadCompleteEvent;
+use Irstea\FileUploadBundle\Exception\RejectedFileException;
+
+/**
+ * Description of AntivirusListener
+ *
+ * @author Guillaume Perréal <guillaume.perreal@irstea.fr>
+ */
+class VirusScannerListener
+{
+    /**
+     *
+     * @var AdapterInterface
+     */
+    private $scanner;
+
+    /**
+     *
+     * @param AdapterInterface $scanner
+     */
+    public function __construct(AdapterInterface $scanner)
+    {
+        $this->scanner = $scanner;
+    }
+
+    /**
+     *
+     * @param FileUploadCompleteEvent $event
+     */
+    public function onFileUploadCompleted(FileUploadCompleteEvent $event)
+    {
+        $file = $event->getUploadedFile();
+        $path = $file->getLocalPath();
+
+        $result = $this->scanner->scan([$path]);
+
+        $meta = $file->getMetadata();
+
+        $meta['virus_scanner'] = ['has_virus' => $result->hasVirus()];
+
+        if($result->hasVirus()) {
+            if(null !== $desc = $result->getDetections()[0]->getDescription()) {
+                $meta['virus_scanner']['detected'] = $desc;
+            }
+        }
+
+        $file->setMetadata($meta);
+
+        if($result->hasVirus()) {
+            throw new RejectedFileException($file, "Found a virus !");
+        }
+    }
+}
diff --git a/Resources/config/services.yml b/Resources/config/services.yml
index 14b63a7084162e1b112188dc80d4041319c50d0d..38b58f0b0ee33cf1aaa716584b9637a61d2c862a 100644
--- a/Resources/config/services.yml
+++ b/Resources/config/services.yml
@@ -57,3 +57,11 @@ services:
         factory: [ @knp_gaufrette.filesystem_map, get ]
         arguments:
             - %irstea_file_upload.filesystem.name%
+
+    # Scanner anti-virus
+    irstea_file_upload.virus_scanner:
+        class: Irstea\FileUploadBundle\Listener\VirusScannerListener
+        arguments:
+            - @cl_tissue.scanner
+        tags:
+            - { name: kernel.event_listener, event: file_upload.complete, method: onFileUploadCompleted }