diff --git a/jupyter-openbis-extension/static/uploadDIalog.js b/jupyter-openbis-extension/static/uploadDIalog.js
index fe39fb7cfa0e3813ba523a2c97d01b2a6c84b3b2..2a00222631dfc246286659421db6034b59bde43d 100644
--- a/jupyter-openbis-extension/static/uploadDIalog.js
+++ b/jupyter-openbis-extension/static/uploadDIalog.js
@@ -7,6 +7,29 @@ define([
     ],
     function (dialog, utils, $, state, common) {
 
+        var errorElements = { }
+        function createErrorElement(name) {
+            var element = document.createElement("STRONG")
+            element.textContent = ""
+            element.style.marginLeft = "8px"
+            element.style.color = "red"
+            errorElements[name] = element
+            return element
+        }
+        function cleanErrors() {
+            Object.keys(errorElements).forEach(key => errorElements[key].textContent="")
+        }
+
+        var spinner = document.createElement("IMG")
+        spinner.className="openbis-feedback"
+        spinner.src=""
+        function showSpinner() {
+            spinner.src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.5.8/ajax-loader.gif"
+        }
+        function hideSpinner() {
+            spinner.src=""
+        }
+
         function getDatasetTypes(env, connection_name, dataset_types, input_fields) {
             // get all DatasetTypes of a given connection
 
@@ -19,6 +42,9 @@ define([
                                 //console.log(data.dataSetTypes)
 
                                 var change_input_fields = function () {
+                                    hideSpinner()
+                                    cleanErrors()
+
                                     // remove existing input fields
                                     while (input_fields.firstChild) {
                                         input_fields.removeChild(input_fields.firstChild)
@@ -26,14 +52,19 @@ define([
 
                                     // for every property assignment, create an input field.
                                     for (pa of dts[dataset_types.selectedIndex].propertyAssignments) {
-                                        //var input_title = document.createTextNode(pa.label + ": ")
+                                        var input_title = document.createElement("STRONG")
+                                        input_title.textContent = pa.mandatory ? pa.label + " (mandatory)" : pa.label
+                                        var input_error = createErrorElement('prop.'+pa.code)
+
                                         var input_field = document.createElement("INPUT")
                                         input_field.type = "text"
                                         input_field.name = pa.code
-                                        input_field.placeholder = pa.description ? pa.label + ": " + pa.description : pa.label
+                                        input_field.placeholder = pa.description ? pa.description : pa.label
                                         input_field.size = 90
+                                        input_field.style.width="100%"
 
-                                        //input_fields.appendChild(input_title)
+                                        input_fields.appendChild(input_title)
+                                        input_fields.appendChild(input_error)
                                         input_fields.appendChild(input_field)
                                         input_fields.appendChild(document.createElement("BR"))
                                     }
@@ -76,11 +107,14 @@ define([
             help_index: '',
             handler: function (env) {
 
+                var main_error = createErrorElement('main')
+
                 var dst_title = document.createElement("STRONG")
                 dst_title.textContent = "DataSet type"
                 var dataset_types = document.createElement("SELECT")
                 dataset_types.id = "dataset_type"
                 dataset_types.className = "form-control select-xs"
+                dataset_types.style.marginLeft = 0
 
                 var input_fields = document.createElement("DIV")
                 input_fields.setAttribute("id", "upload-input-fields");
@@ -89,12 +123,16 @@ define([
 
                 var sample_title = document.createElement("STRONG")
                 sample_title.textContent = "Sample Identifier"
+
+                var sample_error = createErrorElement('sampleIdentifier')
+
                 var sampleIdentifier = document.createElement("INPUT")
                 sampleIdentifier.type = "text"
                 sampleIdentifier.name = 'sampleIdentifier'
                 sampleIdentifier.placeholder = "Sample Identifier or permId"
                 sampleIdentifier.value = ''
                 sampleIdentifier.size = "90"
+                sampleIdentifier.style.width="100%"
 
                 var ds_title = document.createElement("STRONG")
                 ds_title.textContent = "DataSet files"
@@ -103,13 +141,18 @@ define([
                 ds_files.placeholder = "filenames"
                 ds_files.name = "ds_files"
                 ds_files.size = "90"
+                ds_files.style.width="100%"
 
                 var inputs = document.createElement("DIV")
                 inputs.style.marginTop = '10px'
+                inputs.appendChild(main_error)
+                inputs.appendChild(spinner)
+                inputs.appendChild(document.createElement("BR"))
                 inputs.appendChild(dst_title)
                 inputs.appendChild(dataset_types)
                 inputs.appendChild(input_fields)
                 inputs.appendChild(sample_title)
+                inputs.appendChild(sample_error)
                 inputs.appendChild(sampleIdentifier)
                 inputs.appendChild(ds_title)
                 inputs.appendChild(ds_files)
@@ -170,21 +213,34 @@ define([
                             if (data.permId) {
                                 notebook.metadata.openbis.permIds[data.permId] = data.statusText
                             }
-
                         },
                         error: function (data) {
+                            hideSpinner()
+
                             if ("errors" in data.responseJSON) {
                                 var errors = data.responseJSON.errors
-                                console.log("ERROR", errors)
-                                sample_title.textContent = "Sample Identifier - " + errors[0].sampleIdentifier
+
+                                for (error of errors) {
+                                    let key, value
+                                    Object.keys(error).forEach(k => {
+                                        key = k
+                                        value = error[k]
+                                    })
+
+                                    var element;
+                                    if (key in errorElements) {
+                                        element = errorElements[key]
+                                    } else {
+                                        element = errorElements['main']
+                                    }
+                                    element.textContent =  element.textContent.concat(value)
+                                }
                             }
                         }
                     }
 
-                    // display preloader during commit and push
-                    var preloader = '<img class="openbis-feedback" src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.5.8/ajax-loader.gif">'
-
-                    // commit and push
+                    showSpinner()
+                    cleanErrors()
                     utils.ajax(settings)
                     return false
                 }