diff --git a/jupyter-openbis-extension/static/dialog.js b/jupyter-openbis-extension/static/dialog.js
index a64f341490772260ca96fd9c9507025176b2afac..b122f0c2304ddc05a4aaf286b124c6d02806a49b 100644
--- a/jupyter-openbis-extension/static/dialog.js
+++ b/jupyter-openbis-extension/static/dialog.js
@@ -6,7 +6,6 @@ define([
     ],
     function(IPython, dialog, utils, $, mc) {
         var currentConnection = ''
-        var selectedPermId = null
         var currentSampleIdentifier = null
         var currentDownloadPath = null
         var ds_type = document.createElement("SELECT")
@@ -23,9 +22,12 @@ define([
             var thead = table.createTHead()
             var thead_row = thead.insertRow(0)
             var titles = ['', 'Name', 'URL', 'Status']
-            titles.forEach( function(item, index) {
-                thead_row.insertCell().textContent = item
-            })
+            for (title of titles) {
+                thead_row.insertCell().textContent = title
+            }
+            //titles.forEach( function(item, index) {
+            //    thead_row.insertCell().textContent = item
+            //})
 
             tbody = table.createTBody()
             data.connections.forEach( function(item, index, arr) {
@@ -74,95 +76,36 @@ define([
 
         function show_datasets_table( data, datasets_table) {
             var table = document.createElement("TABLE")
+            table.className = "table-bordered table-striped table-condensed text-nowrap"
             var thead = table.createTHead()
             var t_row = thead.insertRow()
-            var titles = ['permId', 'Type', 'Experiment', 'Registration Date', 'Status', 'Size']
+            var titles = ['', 'permId', 'Type', 'Experiment', 'Registration Date', 'Status', 'Size']
             titles.forEach( function(title) {
                 t_row.insertCell().textContent = title
             })
+            var tbody = table.createTBody()
+
+            for (dataSet of data.dataSets) {
 
-            //var table = $('<table>').addClass('table-bordered table-striped table-condensed text-nowrap')
-            //var thead = $('<thead>')
-            //var title_row = $('<tr>')
-            //    .append($('<th>')
-            //        .text('permId')
-            //    )
-            //    .append($('<th>')
-            //        .text('Type')
-            //    )
-            //    .append($('<th>')
-            //        .text('Experiment')
-            //    )
-            //    .append($('<th>')
-            //        .text('Registration Date')
-            //    )
-            //    .append($('<th>')
-            //        .text('Status')
-            //    )
-            //    .append($('<th>')
-            //        .text('Size')
-            //    )
-            //title_row.appendTo(thead)
-            //thead.appendTo(table)
-
-            data.dataSets.forEach( function(item, index, arr) {
                 var permId = document.createElement("INPUT")
-                permId.type = "radio"
+                permId.type = "checkbox"
                 permId.name = "permId"
-                permId.value = item.permId
-
-                //var permId = $('<input type="radio" name="permId">').attr("value", item.permId)
-                permId.onchange = function() {
-                    if (this.checked) {
-                        selectedPermId = this.value
-                    }
-                }
-                //permId.change(function() {
-                //    if ($(this).is(':checked')) {
-                //        selectedPermId = this.value
-                //    }
-                //})
+                permId.value = dataSet.permId
 
-                var tbody = table.createTBody()
                 var row = tbody.insertRow()
                 row.insertCell().appendChild(permId)
-                row.insertCell().textContent = item.type
-                row.insertCell().textContent = item.experiment
-                row.insertCell().textContent = item.registrationDate
-                row.insertCell().textContent = item.status
-                row.insertCell().textContent = item.size
-
-                //var row = $('<tr>')
-                //    .append(
-                //        $('<td>').append(permId).append(' ' + item.permId)
-                //    )
-                //    .append($('<td>')
-                //        .text(item.type)
-                //    )
-                //    .append($('<td>')
-                //        .text(item.experiment)
-                //    )
-                //    .append($('<td>')
-                //        .text(item.registrationDate)
-                //    )
-                //    .append($('<td>')
-                //        .text(item.status)
-                //    )
-                //    .append($('<td>')
-                //        .text(item.size)
-                //    )
-                //table.append(row)
-            })
+                row.insertCell().textContent = dataSet.permId
+                row.insertCell().textContent = dataSet.type
+                row.insertCell().textContent = dataSet.experiment
+                row.insertCell().textContent = dataSet.registrationDate
+                row.insertCell().textContent = dataSet.status
+                row.insertCell().textContent = dataSet.size
+            }
 
             while (datasets_table.firstChild) {
                 datasets_table.removeChild(datasets_table.firstChild);
             }
             datasets_table.appendChild(table)
-
-            //datasets_table.innerHTML = ''
-            //datasets_table.innerHTML = table
-            //datasets_table.empty().append(table)
-
         }
 
         function getOpenBisConnections(env, conn_table) {
@@ -177,6 +120,26 @@ define([
              return utils.ajax(settings)
         }
 
+        function createFeedback(type, content) {
+            var close = document.createElement("BUTTON")
+            close.className = "close"
+            close.setAttribute("data-dismiss", "alert")
+            close.setAttribute("aria-label", "Close")
+            var x = document.createElement("SPAN")
+            x.setAttribute("aria-hidden", true)
+            x.innerHTML = "&times;"
+            close.appendChild(x)
+
+            var feedbackBox = document.createElement( "DIV" )
+            feedbackBox.className = "openbis-feedback alert alert-dismissible alert-" + type
+            feedbackBox.setAttribute("role","alert")
+            feedbackBox.innerHTML = content
+            feedbackBox.prepend(close)
+
+            var nb_container = document.getElementById('notebook-container')
+            nb_container.prepend(feedbackBox)
+        }
+
         var fetchDatasetFromOpenBis = {
             help: 'Download a openBIS dataset to your local harddrive',
             icon: 'fa-download',
@@ -201,11 +164,11 @@ define([
                     // to make sure we can display the download path provided by the server.
 
                     // show DataSets for Sample identifier/permid
-                    var sample = document.createElement("DIV")
+                    var showDataSets = document.createElement("DIV")
                     var title = document.createElement("STRONG")
                     title.textContent = "Sample identfier/permId: "
-                    sample.appendChild(title)
-                    sample.style.marginTop = '10px'
+                    showDataSets.appendChild(title)
+                    showDataSets.style.marginTop = '10px'
 
                     var sampleIdentifier = document.createElement("INPUT")
                     sampleIdentifier.type = "text"
@@ -237,40 +200,63 @@ define([
                             alert('Please specify a sample identifier/permId')
                             return false
                         }
-                        //var settings = {
-                        //    url: env.notebook.base_url + 'openbis/sample/' + connection_name + '/' + encodeURIComponent(currentSampleIdentifier),
-                        //    processData: false,
-                        //    type: 'GET',
-                        //    dataType: 'json',
-                        //    contentType: 'application/json'
-                        //}
                         var url = env.notebook.base_url + 'openbis/sample/' + connection_name + '/' + encodeURIComponent(currentSampleIdentifier)
 
-                        var xhttp = new XMLHttpRequest()
-                        xhttp.onreadystatechange = function() {
-                            var data = JSON.parse(this.responseText)
-                            //if (this.readyState == 4 && this.status == 200) {
-                            if (this.status == 200) {
-                                show_datasets_table(data, datasets_table)
-                            }
-                            else {
-                                alert("Error:" + data.statusText)
-                            }
-                        };
-                        xhttp.open("GET", url, true);
-                        xhttp.send();
-
-                        //utils.ajax(settings)
-                        //    .done(function(data) {
+                        fetch(url)
+                            .then( function(response) {
+                                if (response.ok) {
+                                    response.json()
+                                        .then( function(data) {
+                                            show_datasets_table(data, datasets_table)
+                                        })
+                                }
+                                else {
+                                    response.json()
+                                        .then( function(error) {
+                                            console.log(error.reason)
+                                            alert("Error: " + error.reason)
+                                        })
+                                }
+                            })
+                            .catch( function(error) {
+                                console.error('A serious network problem occured:', error)
+                            })
+                            //.then( function(response) {
+                            //    if (response.ok) {
+                            //        return response.json()
+                            //    }
+                            //    //throw new Error('Error fetching datasets.');
+                            //    response.text().then( function(errorMsg)  {
+                            //        throw new Error(errorMsg);
+                            //    })
+                            //})
+                            //.then( function(data) {
+                            //    show_datasets_table(data, datasets_table)
+                            //})
+                            //.catch( function(error) {
+                            //    console.error(error)
+                            //    alert("Error: " + error.message )
+                            //})
+
+                        //var xhttp = new XMLHttpRequest()
+                        //xhttp.onreadystatechange = function() {
+                        //    //var data = JSON.parse(this.responseText)
+                        //    //if (this.readyState == 4 && this.status == 200) {
+                        //    if (this.readyState === 4 && this.status >= 200 && this.status < 300) {
+                        //        var data = JSON.parse(this.response)
                         //        show_datasets_table(data, datasets_table)
-                        //    })
-                        //    .fail(function(data) {
-                        //        alert('Error:' + data.statusText)
-                        //    })
+                        //    }
+                        //    else if (this.readyState === 4 && this.status >= 400) {
+                        //        alert("Error:" + this.statusText)
+                        //    }
+                        //};
+                        //xhttp.open("GET", url, true);
+                        //xhttp.send();
+
                     }
-                    sample.appendChild(sampleIdentifier)
-                    sample.appendChild(show_datasets_btn)
-                    //sample.appendChild(datasets_table)
+                    showDataSets.appendChild(sampleIdentifier)
+                    showDataSets.appendChild(show_datasets_btn)
+                    showDataSets.appendChild(datasets_table)
 
                     // dataSetPermId only
                     var dataset_direct = document.createElement("P")
@@ -300,127 +286,105 @@ define([
 
                     var download_dialog_box = document.createElement("DIV")
                     download_dialog_box.appendChild(conn_table)
+                    download_dialog_box.appendChild(showDataSets)
                     download_dialog_box.appendChild(dataset_direct)
                     download_dialog_box.appendChild(path)
 
-                    function downloadDataset(selected_conn, permId, path) {
+                    function downloadDataset(selected_conn, selectedPermIds, downloadPath) {
                         var notebook = IPython.notebook
-                        var connection_name = selected_conn.value()
+                        var connection_name = selected_conn.value
                         var connection_url  = selected_conn.getAttribute("url")
-                        //var connection_name = $('input[name="connection_name"]:checked').val()
-                        //var connection_url = $('input[name="connection_name"]:checked').attr('url')
-                        var downloadUrl = env.notebook.base_url + 'openbis/dataset/'
-                            + connection_name + '/' + permId + '/' + encodeURIComponent(path)
-
-                        // get the canvas for user feedback
-                        //var container = $('#notebook-container')
-                        var container = document.getElementById('notebook-container')
-
-                        var settings = {
-                            url: downloadUrl,
-                            processData: false,
-                            type: 'GET',
-                            dataType: 'json',
-                            contentType: 'application/json'
-                        }
+                        var nb_container = document.getElementById('notebook-container')
 
-                        var close = document.createElement("BUTTON")
-                        close.className = "close"
-                        close.setAttribute("data-dismiss", "alert")
-                        close.setAttribute("aria-label", "Close")
 
-                        var x = document.createElement("SPAN")
-                        x.setAttribute("aria-hidden", true)
-                        x.textContent = "&times;"
+                        for (permId of selectedPermIds) {
 
-                        // remove existing feedbacks
-                        for (element in document.getElementsByClassName("openbis-feedback")) {
-                            element.remove()
-                        }
+                            var downloadUrl = env.notebook.base_url + 'openbis/dataset/'
+                                + connection_name + '/' + permId + '/' + encodeURIComponent(downloadPath)
 
-                        // download the dataset files
-                        utils.ajax(settings)
-                            .done(function (data) {
-                                // display feedback to user
-                                var feedback = document.createElement( "DIV" )
-                                feedback.className = "openbis-feedback alert alert-success alert-dismissible"
-                                feedback.setAttribute("role","alert")
-                                feedback.append(data.statusText)
+                            var xhttp = new XMLHttpRequest()
+                            xhttp.onreadystatechange = function() {
 
+                                // feedback elements
+                                var close = document.createElement("BUTTON")
+                                close.className = "close"
+                                close.setAttribute("data-dismiss", "alert")
+                                close.setAttribute("aria-label", "Close")
+                                var x = document.createElement("SPAN")
+                                x.setAttribute("aria-hidden", true)
+                                x.innerHTML = "&times;"
                                 close.appendChild(x)
-                                feedback.appendChild(close)
-
 
-                                //var feedback = '<div class="openbis-feedback alert alert-success alert-dismissible" role="alert">' +
-                                //    '<button type="button" class="close" data-dismiss="alert" aria-label="Close">' +
-                                //    '<span aria-hidden="true">&times;</span></button>' +
-                                //    data.statusText +
-                                //    '</div>'
+                                if (this.readyState === 4 && this.status >= 200 && this.status < 300) {
+                                    var data = JSON.parse(this.response)
 
-                                // display feedback
-                                //$('.openbis-feedback').remove()
+                                    createFeedback('success', data.statusText)
 
-                                container.prepend(feedback)
-
-                                // write statusText from returned data to notebooks metadata
-                                if (typeof notebook.metadata.openbis_connections === 'undefined') {
-                                    notebook.metadata.openbis_connections = {}
-                                }
-                                if (typeof notebook.metadata.openbis_connections[connection_url] === 'undefined') {
-                                    notebook.metadata.openbis_connections[connection_url] = {}
-                                }
-                                // store metadata about the downloaded files into the notebook-metadata
-                                if (data.permId) {
-                                    notebook.metadata.openbis_connections[connection_url][data.permId] = {
-                                        "permId": data.permId,
-                                        "path": data.path,
-                                        "dataStore": data.dataStore,
-                                        "location": data.location,
-                                        "size": data.size,
-                                        "status": data.statusText
+                                    // successful download:
+                                    // write statusText from returned data to notebooks metadata
+                                    if (typeof notebook.metadata.openbis_connections === 'undefined') {
+                                        notebook.metadata.openbis_connections = {}
                                     }
+                                    if (typeof notebook.metadata.openbis_connections[connection_url] === 'undefined') {
+                                        notebook.metadata.openbis_connections[connection_url] = {}
+                                    }
+                                    // store metadata about the downloaded files into the notebook-metadata
+                                    if (data.permId) {
+                                        notebook.metadata.openbis_connections[connection_url][data.permId] = {
+                                            "permId": data.permId,
+                                            "path": data.path,
+                                            "dataStore": data.dataStore,
+                                            "location": data.location,
+                                            "size": data.size,
+                                            "status": data.statusText
+                                        }
+                                    }
+                                    currentDownloadPath = downloadPath
                                 }
-                                currentDownloadPath = path
-                            })
-                            .fail(function (data) {
-                                // display feedback to user
-                                var feedback = document.createElement( "DIV" )
-                                feedback.className = "openbis-feedback alert alert-danger alert-dismissible"
-                                feedback.setAttribute("role","alert")
-                                feedback.innerHTML = "<strong>Error: </strong>Dataset was not downloaded.<div>"
-                                                   + data.statusText
-                                                   + "</div>"
-
-                                //var feedback =
-                                //    '<div class="openbis-feedback alert alert-danger alert-dismissible" role="alert">' +
-                                //    '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>' +
-                                //    '<strong>Error: </strong>Dataset was not downloaded.<div>' + data.statusText + '</div></div>'
+                                else if (this.readyState === 4 && this.status >= 400) {
+                                    // download failed:
+                                    // display feedback to user
+                                    var feedback = "<strong>Error: </strong>Dataset was not downloaded.<div>"
+                                        + this.statusText
+                                        + "</div>"
+                                    createFeedback("danger", feedback)
+                                    //var feedbackBox = document.createElement( "DIV" )
+                                    //feedbackBox.className = "openbis-feedback alert alert-danger alert-dismissible"
+                                    //feedbackBox.setAttribute("role","alert")
+                                    //feedbackBox.prepend(close)
+                                    //nb_container.prepend(feedbackBox)
+                                }
+                            };
+                            xhttp.open("GET", downloadUrl, true);
+                            xhttp.send();
 
-                                close.appendChild(x)
-                                feedback.appendChild(close)
-                                container.prepend(feedback)
-                            })
+                        }
                     }
 
                     function onDownloadClick() {
                         var selected_conn = document.querySelector('input[name=connection_name]:checked')
-                        //connection_name = $('input[name="connection_name"]:checked').val()
                         if (! selected_conn) {
-                            alert('Please choose a connection')
+                            alert('please choose a connection')
                             return false
                         }
 
-                        if (!selectedPermId) {
-                            selectedPermId = datasetPermId.val()
+                        selectedPermIds = []
+                        for (row of document.querySelectorAll('input[name=permId]:checked') ) {
+                            selectedPermIds.push(row.value)
                         }
-
-                        if (!selectedPermId) {
+                        if (datasetPermId.value) {
+                            selectedPermIds.push(datasetPermId.value)
+                        }
+                        if (!selectedPermIds) {
                             alert('please select a dataset or provide a permId')
                             return false
                         }
 
-                        if (!downloadPath.value)
-                        downloadDataset(selected_conn, selectedPermId, downloadPath.val())
+                        if (!downloadPath.value) {
+                            alert('Please specify where you would like to download your files!')
+                            return false
+                        }
+                        downloadDataset(selected_conn, selectedPermIds, downloadPath.value)
                     }
 
                     dialog.modal({
@@ -476,7 +440,14 @@ define([
                 var container = $('#notebook-container')
 
                 function onOk () {
-                    var connection_name = $('input[name="connection_name"]:checked').val()
+                    //var connection_name = $('input[name="connection_name"]:checked').val()
+                    var selected_connection = document.querySelector('input[name=connection_name]:checked')
+                    if (!selected_connection) {
+                        alert("No connection selected")
+                        return false
+                    }
+                    var connection_name = selected_connection.value
+
                     var uploadUrl = env.notebook.base_url + 'openbis/dataset/' + connection_name
 
                     var notebook = IPython.notebook
@@ -506,15 +477,7 @@ define([
                         contentType: 'application/json',
                         success: function (data) {
                             // display feedback to user
-                            var feedback = '<div class="openbis-feedback alert alert-success alert-dismissible" role="alert">' +
-                                '<button type="button" class="close" data-dismiss="alert" aria-label="Close">' +
-                                '<span aria-hidden="true">&times;</span></button>' +
-                                data.statusText +
-                                '</div>'
-
-                            // display feedback
-                            $('.openbis-feedback').remove()
-                            container.prepend(feedback)
+                            createFeedback('success', data.statusText)
 
                             // write statusText from returned data to notebooks metadata
                             if ( typeof notebook.metadata.openbis === 'undefined') {
@@ -530,14 +493,10 @@ define([
                         },
                         error: function (data) {
                             // display feedback to user
-                            var feedback =
-                                '<div class="openbis-feedback alert alert-danger alert-dismissible" role="alert">' +
-                                '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>' +
-                                '<strong>Warning!</strong> Something went wrong.<div>' + data.statusText + '</div></div>'
-
-                            // display feedback
-                            $('.openbis-feedback').remove()
-                            container.prepend(feedback)
+                            var feedback = "<strong>Error: </strong>Dataset was not uploaded.<div>"
+                                + data.statusText
+                                + "</div>"
+                            createFeedback('danger', feedback)
                         }
                     }