diff --git a/Entity/UploadedFile.php b/Entity/UploadedFile.php
index c6cc87160bdeb25e1b9c892d250204398115feba..e4926bcc46e37fd6a0983661a6fca24d3d4d6aa8 100644
--- a/Entity/UploadedFile.php
+++ b/Entity/UploadedFile.php
@@ -80,6 +80,11 @@ class UploadedFile implements UploadedFileInterface
      * @var array
      */
     private $metadata;
+    /**
+     * @ORM\Column(type="string", length=256, nullable=true)
+     * @var string
+     */
+    private $description = null;
 
     /**
      * @var Filesystem
@@ -541,6 +546,25 @@ class UploadedFile implements UploadedFileInterface
         return true;
     }
 
+    /**
+     * @return string
+     */
+    public function getDescription()
+    {
+        return $this->description;
+    }
+
+    /**
+     *
+     * @param string $description
+     * @return UploadedFileInterface
+     */
+    public function setDescription($description = null)
+    {
+        $this->description = $description;
+        return $this;
+    }
+
     /**
      * @return array
      */
@@ -552,6 +576,7 @@ class UploadedFile implements UploadedFileInterface
             'size'        => $this->getSize(),
             'type'        => $this->getMimeType(),
             'etat'        => $this->getEtat(),
+            'description' => $this->getDescription(),
             'checksum'    => $this->getChecksum(),
             'icon'        => MimeTypeIcon::getMimeTypeIcon($this->getMimeType())
         ];
diff --git a/Model/UploadedFileInterface.php b/Model/UploadedFileInterface.php
index 89604ec8381eb8ef255ee60fe91472a97cc72d9b..567eb6dbf6eebf0252e402409888ca5f1f621b64 100644
--- a/Model/UploadedFileInterface.php
+++ b/Model/UploadedFileInterface.php
@@ -44,6 +44,17 @@ interface UploadedFileInterface
      */
     public function getDisplayName();
 
+    /**
+     * @param string $description
+     * @return UploadedFileInterface
+     */
+    public function setDescription($description = null);
+
+    /**
+     * @return string
+     */
+    public function getDescription();
+
     /**
      * Get path
      *
diff --git a/Resources/js/widget/file_upload.js b/Resources/js/widget/file_upload.js
index 2fcefee14e20ba7cbdf9efb0f1282f195bd4d287..41dfb0acd81b67c852f9294c652ff611aa50a764 100644
--- a/Resources/js/widget/file_upload.js
+++ b/Resources/js/widget/file_upload.js
@@ -33,6 +33,7 @@
         var $this             = $(this),
             $button           = $this.find('.fileinput-button'),
             $entries          = $this.find('.fileinput-entries'),
+            nextIndex         = $entries.find('.fileinput-entry').length,
             createUrl         = options.createUrl,
             uploadPrototype   = options.uploadPrototype,
             downloadPrototype = options.downloadPrototype,
@@ -104,7 +105,7 @@
                 downloadTemplate: function(data) {
                     var rows = $();
                     $.each(data.files, function (index, file) {
-                        var row = $(downloadPrototype);
+                        var row = $(downloadPrototype.replace(/__index__/g, nextIndex++));
                         row.find('.size').text(formatFileSize(file.size));
                         if (file.error) {
                             row.find('.name').text(file.name);
@@ -116,7 +117,7 @@
                             row.find('.delete')
                                 .attr('data-type', file.delete_type)
                                 .attr('data-url', file.delete_url + csrfQuery);
-                            row.find('input:hidden')
+                            row.find('input.id')
                                 .val(file.id);
                             if(file.icon && file.icon !== 'file') {
                                 row.find('.icon')
diff --git a/Resources/less/file_upload.less b/Resources/less/file_upload.less
index b7820928bcfc58affcedf896ea4abb63c95579c1..f6c643181ccc0e048d29b318325607c7dbe67b92 100644
--- a/Resources/less/file_upload.less
+++ b/Resources/less/file_upload.less
@@ -10,6 +10,13 @@ All rights reserved.
     .cancel, .delete {
         margin-left: 0.5em;
     }
+    .description {
+        display: inline;
+        width: auto;
+        height: auto;
+        padding: @padding-xs-vertical @padding-xs-horizontal;
+        margin: 0;
+    }
     .progress {
         height: (@line-height-computed / 2);
         margin: (@line-height-computed / 4) 0;
diff --git a/Resources/views/Form/file_upload.html.twig b/Resources/views/Form/file_upload.html.twig
index dd575032815296874ed6a62802ea1f084a6cfa21..5340baa7e1839e4da660fa42d31a588e9664908d 100644
--- a/Resources/views/Form/file_upload.html.twig
+++ b/Resources/views/Form/file_upload.html.twig
@@ -16,13 +16,14 @@
 {%- block file_upload_entry_prototype %}
     {%- set file = file|default([]) %}
     <div class="template-download fileinput-entry">
-        <input type="hidden" name="{{ full_name }}{% if multiple %}[]{% endif %}" value="{{ file.id|default }}"/>
+        <input class="id" type="hidden" name="{{ full_name }}{% if multiple %}[{{index|default('__index__')}}]{% endif %}[id]" value="{{ file.id|default }}"/>
         <i class="fa fa-file{% if file.icon|default(false) %}-{{ file.icon }}{% endif %}-o icon"></i>&nbsp;<span class="name">
             <a{% if file %} href="{{ path('file_upload_get_content', {id: file.id, token: csrf_token}) }}"{% endif %}>{{ file.name|default }}</a>
     </span>
         (<span class="size">
             {{- file.size|default -}}
         </span>)
+        <input class="form-control description" type="text" placeholder="{% trans %}form.file_upload.description.placeholder{% endtrans %}" name="{{ full_name }}{% if multiple %}[{{index|default('__index__')}}]{% endif %}[description]" value="{{ file.description|default }}"/>
         <span class="error danger" style="display: none">ERROR</span>
         <a href="#" class="danger delete {%- if disabled or read_only %} disabled{% endif -%}" title="{% trans %}button.delete{% endtrans %}">
             {{- irstea_icon('remove') -}}
@@ -41,7 +42,7 @@
         <div class="fileinput-entries">
             {%- if value is not empty %}
                 {%- if multiple %}
-                    {% for file in value %}
+                    {% for index, file in value %}
                         {{ block('file_upload_entry_prototype') }}
                     {% endfor %}
                 {%- else %}