diff --git a/Form/DataTranformer/UploadedFileTransformer.php b/Form/DataTranformer/UploadedFileTransformer.php
index 5acd5fdf1c14d7b3c05e84cfe2bf077e4df0c62c..415ee3b4ef19501c2da12992497015aab095bdec 100644
--- a/Form/DataTranformer/UploadedFileTransformer.php
+++ b/Form/DataTranformer/UploadedFileTransformer.php
@@ -11,7 +11,7 @@ use Irstea\FileUploadBundle\Entity\UploadedFile;
 use Irstea\FileUploadBundle\Service\FileManagerInterface;
 use Rhumsaa\Uuid\Uuid;
 use Symfony\Component\Form\DataTransformerInterface;
-use Traversable;
+use Symfony\Component\Form\Exception\TransformationFailedException;
 
 /**
  * Description of UploadedFileTransformer
@@ -44,13 +44,22 @@ class UploadedFileTransformer implements DataTransformerInterface
         if(!$this->multiple) {
             return $this->reverseTransformFile($value);
         }
+
+        if(null === $value || '' === $value) {
+            return [];
+        }
+
+        if(!is_array($value) && !$value instanceof \Traversable) {
+            throw new TransformationFailedException('Expected an array or a \Traversable.');
+        }
+
         $result = [];
-        if(is_array($value) || $value instanceof Traversable) {
-            foreach($value as $index => $file) {
-                $result[$index] = $this->reverseTransformFile($file);
+        foreach($value as $index => $identifier) {
+            if(null !== $file = $this->reverseTransformFile($identifier)) {
+                $result[$index] = $file;
             }
         }
-        return array_filter($result);
+        return $result;
     }
 
     /**
@@ -61,13 +70,22 @@ class UploadedFileTransformer implements DataTransformerInterface
         if(!$this->multiple) {
             return $this->transformFile($value);
         }
+
+        if(empty($value)) {
+            return [];
+        }
+
+        if(!is_array($value) && !$value instanceof \Traversable) {
+            throw new TransformationFailedException('Expected an array or a \Traversable.');
+        }
+
         $result = [];
-        if(is_array($value) || $value instanceof Traversable) {
-            foreach($value as $index => $file) {
-                $result[$index] = $this->transformFile($file);
+        foreach($value as $index => $file) {
+            if(null !== $item = $this->transformFile($file)) {
+                $result[$index] = $item;
             }
         }
-        return array_filter($result);
+        return $result;
     }
 
     /**
@@ -77,7 +95,15 @@ class UploadedFileTransformer implements DataTransformerInterface
      */
     protected function transformFile($value)
     {
-        return $value instanceof UploadedFile ? $value : null;
+        if(null === $value) {
+            return null;
+        }
+
+        if(!$value instanceof UploadedFile) {
+            throw new TransformationFailedException('Expected an UploadedFile.');
+        }
+
+        return $value;
     }
 
     /**
@@ -90,12 +116,18 @@ class UploadedFileTransformer implements DataTransformerInterface
         if(is_string($value) && Uuid::isValid($value)) {
             $value = $this->fileManager->get($value);
         }
+
+        if(null === $value || '' === $value) {
+            return null;
+        }
+
         if($value instanceof UploadedFile) {
             if($value->isOrphelin()) {
                 $value->setEtat(UploadedFile::ETAT_NORMAL);
             }
             return $value;
         }
-        return null;
+
+        throw new TransformationFailedException('Expected an UploadedFile or a valid file UUID.');
     }
 }