diff --git a/nbextension/openbis/main.js b/nbextension/openbis/main.js
index 796eea6df4dfcb725956505dfab0c65a28153726..c6bf7738ac775ec85f9c41361a7cf9505f0af90b 100644
--- a/nbextension/openbis/main.js
+++ b/nbextension/openbis/main.js
@@ -6,33 +6,16 @@ define([
     ],
     function(IPython, dialog, utils, $, mc) {
         var currentConnection = ''
-        var checkOpenBisConnection = function(env, url, verify_certificates, username, password){
-            var payload = {
-                 'url' : url,
-                 'verify_certificates' : verify_certificates,
-                 'username': username,
-                 'password': password
-             }
-             var downloadUrl = env.notebook.base_url + 'openbis/conn'
-             var settings = {
-                 url: downloadUrl,
-                 processData: false,
-                 type: 'POST',
-                 dataType: 'json',
-                 data: JSON.stringify(payload),
-                 contentType: 'application/json',
-                 success: function (data) {
-                     alert(data.statusText)
-                 },
-                 error: function (data) {
-                     alert(data.statusText)
-                 }
-             }
-             utils.ajax(settings)
-        }
+        var selectedPermId = null
+        var currentSampleIdentifier = null
+        var currentDownloadPath = null
+
+        function show_available_connections (data, conn_table) {
+            if (!currentDownloadPath) {
+                currentDownloadPath = data.cwd
+            }
 
-        var show_available_connections = function(data, conn_table){
-            var table = $('<table>').addClass('table-bordered').addClass('table-condensed');
+            var table = $('<table>').addClass('table-bordered table-striped table-condensed')
             var thead = $('<thead>')
             var title_row = $('<tr>')
                  .append($('<th>')
@@ -44,11 +27,16 @@ define([
                  .append($('<th>')
                      .text('URL')
                  )
+                .append($('<th>')
+                    .text('Status')
+                )
             title_row.appendTo(thead)
             thead.appendTo(table)
 
             data.connections.forEach( function(item, index, arr) {
-                var conn = $('<input type="radio" name="connection_name">').attr("value", item.name)
+                var conn = $('<input type="radio" name="connection_name">')
+                    .attr("value", item.name)
+                    .attr("url", item.url)
                 conn.change( function() {
                     currentConnection = item.name
                 })
@@ -69,28 +57,85 @@ define([
                     .append($('<td>')
                         .text(item.url)
                     )
+                    .append($('<td>')
+                        .text(item.status)
+                    )
+
+                table.append(row)
+            })
+
+            conn_table.empty().append($('<strong>').text('Please choose a connection')).append(table)
+        }
+
+        function show_datasets_table( data, datasets_table) {
+            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 = $('<input type="radio" name="permId">').attr("value", item.permId)
+                permId.change(function() {
+                    if ($(this).is(':checked')) {
+                        selectedPermId = this.value
+                    }
+                })
+
+                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)
             })
 
-            conn_table.empty().append('<p><b>Please choose a connection</b></p>').append(table)
+            datasets_table.empty().append(table)
+
         }
 
-        var getOpenBisConnections = function(env, conn_table) {
+        function getOpenBisConnections(env, conn_table) {
              var connectionsUrl = env.notebook.base_url + 'openbis/conn'
              var settings = {
                  url: connectionsUrl,
                  processData: false,
                  type: 'GET',
                  dataType: 'json',
-                 contentType: 'application/json',
-                 success: function (data) {
-                     show_available_connections(data, conn_table)
-                 },
-                 error: function (data) {
-                     alert(data.status)
-                 }
+                 contentType: 'application/json'
              }
-             utils.ajax(settings)
+             return utils.ajax(settings)
         }
 
         var fetchDatasetFromOpenBis = {
@@ -100,130 +145,178 @@ define([
             handler: function (env) {
                 var conn_table = $('<div id="openbis_connections"/>')
                 getOpenBisConnections(env, conn_table)
+                    .done(function (data) {
+                        show_available_connections(data, conn_table)
+                    })
+                    .fail(function (data) {
+                        alert(data.status)
+                    })
+                    .always(function () {
+                        showDownloadDialog()
+                    })
 
-                var sample = $('<p>').append($('<b>').text('Sample identifier/permId: '))
-                var sampleIdentifier = $('<input type="text" name="sampleIdentifier" size=40>')
-                var show_datasets_btn = $('<button type="button" class="btn-info btn-xs">show datasets</button>')
-                var datasets_table = $('<div id="dataset_table">')
-                show_datasets_btn.click( function() {
-                    var connection = $('input[name="connection_name"]:checked').val()
-                    var settings = {
-                        url: env.notebook.base_url + 'openbis/sample/' + connection + '/' + encodeURIComponent(sampleIdentifier.val()),
-                        processData: false,
-                        type: 'GET',
-                        dataType: 'json',
-                        contentType: 'application/json',
-                    }
-                    utils.ajax(settings)
-                        .done(function(data) {
-                            alert('success')
-                            console.log(data);
-                        })
-                        .fail(function(data) {
-                            alert('failed')
-                            console.log(data);
-                        })
-                })
-                sample.append(sampleIdentifier).append(show_datasets_btn).append(datasets_table)
-
-                var dataset = $('<p>').append($('<b>').text('DataSet permId: '))
-                var datasetPermId = $('<input type="text" name="datasetPermId" size=40>')
-                dataset.append(datasetPermId)
-
-                var div = $('<div/>')
-                div.append(conn_table).append(sample).append(dataset)
-
-                // get the canvas for user feedback
-                var container = $('#notebook-container')
+                function showDownloadDialog() {
+                    // This function gets called after loading the openBIS connections
+                    // to make sure we can display the download path provided by the server.
+
+                    // show DataSets for Sample identifier/permid
+                    var sample = $("<div>")
+                    sample.append($('<strong>').text('Sample identfier/permId: '))
+                    sample.css('margin-top', '10px')
+                    var sampleIdentifier = $('<input type="text" name="sampleIdentifier" size=40 placeholder="sample identifier">')
+                        .val(currentSampleIdentifier)
+                    var show_datasets_btn = $('<button type="button" class="btn-info btn-xs">show datasets</button>')
+                    var datasets_table = $('<div id="dataset_table">')
+                        .addClass("output output_scroll")
+                        .css('max-height', '10em')
+                    show_datasets_btn.click(function () {
+                        var connection_name = $('input[name="connection_name"]:checked').val()
+                        currentConnection = connection_name
+                        currentSampleIdentifier = sampleIdentifier.val()
+                        if (!connection_name) {
+                            alert('Please choose a connection')
+                            return false
+                        }
+                        if (!currentSampleIdentifier) {
+                            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',
+                            success: function(data) {
+                                show_datasets_table(data, datasets_table)
+                            },
+                            error: function(data) {
+                                console.log(data);
+
+                                console.log(data.statusText);
+                                alert('Error: ' + data.statusText)
+                            }
 
+                        }
+                        utils.ajax(settings)
 
-                function downloadDataset () {
-                    var notebook = IPython.notebook
-                    var re = /\/notebooks(.*?)$/
-                    var connection = $('input[name="connection_name"]:checked').val()
-                    var downloadUrl = env.notebook.base_url + 'openbis/dataset/' + connection + '/' + datasetPermId.val()
+                    })
+                    sample.append(sampleIdentifier).append(show_datasets_btn).append(datasets_table)
+
+                    // dataSetPermId only
+                    var dataset = $('<p>')
+                        .css('margin-top', '10px')
+                        .append($('<b>').text('... or enter DataSet permId directly: '))
+                    var datasetPermId = $('<input type="text" name="datasetPermId" size=40 placeholder="dataset permId">')
+                    dataset.append(datasetPermId)
+
+                    // download path
+                    var downloadPath =$('<input type="text" name="downloadPath" size=100>')
+                        .val(currentDownloadPath)
+                    var path = $('<div>')
+                        .append($('<strong>').text('download data to path: '))
+                        .append(downloadPath)
+
+                    var download_dialog_box = $('<div/>')
+                    download_dialog_box.append(conn_table).append(sample).append(dataset).append(path)
+
+                    function downloadDataset(permId, path) {
+                        var notebook = IPython.notebook
+                        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 settings = {
+                            url: downloadUrl,
+                            processData: false,
+                            type: 'GET',
+                            dataType: 'json',
+                            contentType: 'application/json'
+                        }
 
-                    var settings = {
-                        url: downloadUrl,
-                        processData: false,
-                        type: 'GET',
-                        dataType: 'json',
-                        contentType: 'application/json'
+                        // download the dataset files
+                        utils.ajax(settings)
+                            .done(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)
+
+                                // 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 = path
+                            })
+                            .fail(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>Error: </strong>Dataset was not downloaded.<div>' + data.statusText + '</div></div>'
+
+                                // display feedback
+                                $('.openbis-feedback').remove()
+                                container.prepend(feedback)
+                            })
                     }
-                    //console.log(IPython.notebook)
 
-                    // 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">'
-                    container.prepend(preloader)
-                    $('.openbis-feedback').remove()
+                    function onDownloadClick() {
+                        connection_name = $('input[name="connection_name"]:checked').val()
+                        if (typeof connection_name === "undefined") {
+                            alert('please choose a connection')
+                            return false
+                        }
 
-                    // download the dataset files
-                    utils.ajax(settings)
-                        .done( function (data) {
-                            console.log(data);
-                            // display feedback to user
-                            var container = $('#notebook-container')
-                            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 (!selectedPermId) {
+                            selectedPermId = datasetPermId.val()
+                        }
 
-                            // display feedback
-                            $('.openbis-feedback').remove()
-                            container.prepend(feedback)
+                        if (!selectedPermId) {
+                            alert('please select a dataset or provide a permId')
+                            return false
+                        }
+                        downloadDataset(selectedPermId, downloadPath.val())
+                    }
 
-                            // write statusText from returned data to notebooks metadata
-                            if ( typeof notebook.metadata.openbis === 'undefined') {
-                                notebook.metadata.openbis = {}
-                            }
-                            if ( typeof notebook.metadata.openbis.permIds === 'undefined' ) {
-                                notebook.metadata.openbis.permIds = {}
-                            }
-                            if ( data.permId ) {
-                                notebook.metadata.openbis.permIds[data.permId] = data.statusText
+                    dialog.modal({
+                        body: download_dialog_box,
+                        title: 'Download openBIS DataSet',
+                        buttons: {
+                            'Cancel': {},
+                            'Download': {
+                                class: 'btn-primary btn-large',
+                                click: onDownloadClick,
                             }
-                        })
-                        .fail( 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>Error: </strong>Dataset was not downloaded.<div>' + data.statusText + '</div></div>'
-                            console.log(data);
-
-                            // display feedback
-                            $('.openbis-feedback').remove()
-                            container.prepend(feedback)
-                        })
-                }
-
-                function onDownloadClick () {
-                    connection_name = $('input[name="connection_name"]:checked').val()
-                    if (typeof connection_name === "undefined") {
-                        alert('please choose a connection')
-                        return false
-                    }
-                    if (!datasetPermId.val()) {
-                        alert('please provide a permId')
-                        return false
-                    }
-                    downloadDataset()
+                        },
+                        notebook: env.notebook,
+                        keyboard_manager: env.notebook.keyboard_manager
+                    })
                 }
-
-                dialog.modal({
-                    body: div,
-                    title: 'Download openBIS DataSet',
-                    buttons: {
-                        'Cancel': {},
-                        'Download': {
-                            class: 'btn-primary btn-large',
-                            click: onDownloadClick,
-                        }
-                    },
-                    notebook: env.notebook,
-                    keyboard_manager: env.notebook.keyboard_manager
-                })
             }
         }
 
@@ -232,33 +325,66 @@ define([
             icon: 'fa-cloud-upload',
             help_index: '',
             handler: function (env) {
-                var p = $('<p/>').text('Please enter a Sample or DataSet identifier/permId')
-                var input = $('<textarea rows="4" cols="72"></textarea>')
-                var div = $('<div/>')
-                var uploadUrl = env.notebook.base_url + 'openbis/dataset'
+                var conn_table = $('<div id="openbis_connections"/>')
+                getOpenBisConnections(env, conn_table)
+                    .done(function (data) {
+                        show_available_connections(data, conn_table)
+                    })
+                    .fail(function (data) {
+                        alert(data.status)
+                    })
+                var ds_name = $('<input type="text" name="ds_name" size=40 placeholder="name">')
+                var ds_description = $('<input type="text" name="ds_description" size=40 placeholder="description">')
+                var ds_type = $('<input type="text" name="ds_type" size=40 placeholder="type">')
+                var sampleIdentifier = $('<input type="text" name="sampleIdentifier" size=40 placeholder="sample identifier">')
+                    .val(currentSampleIdentifier)
+                var ds_files = $('<input type="text" name="files" size=40 placeholder="filenames">')
+
 
-                div.append(p).append(input)
+                var inputs = $('<div>')
+                    .css('margin-top', '10px')
+                    .append($('<p>').text('Name: ').append(ds_name))
+                    .append($('<p>').text('Description: ').append(ds_description))
+                    .append($('<p>').text('Type: ').append(ds_type))
+                    .append($('<p>').text('Sample: ').append(sampleIdentifier))
+                    .append($('<p>').text('Files: ').append(ds_files))
+
+                var uploadDialogBox = $('<div/>').append(conn_table).append(inputs)
 
                 // get the canvas for user feedback
                 var container = $('#notebook-container')
 
                 function onOk () {
+                    var connection_name = $('input[name="connection_name"]:checked').val()
+                    var uploadUrl = env.notebook.base_url + 'openbis/dataset/' + connection_name
+
                     var notebook = IPython.notebook
-                    var re = /\/notebooks(.*?)$/
+                    var re = /\/notebooks\/(.*?)$/
+                    var files = []
                     var filepath = window.location.pathname.match(re)[1]
-                    //var payload = {'filename': filepath, 'msg': input.val()}
+                    files.push(filepath)
+                    if (ds_files.val()) {
+                        files.push(ds_files.val())
+                    }
+
+                    var dataSetInfo = {
+                        "name"            : ds_name.val(),
+                        "description"     : ds_description.val(),
+                        "type"            : ds_type.val(),
+                        "files"           : files,
+                        "sampleIdentifier": sampleIdentifier.val()
+                    }
+                    console.log(dataSetInfo);
 
-                    payload = JSON.stringify(input.val())
                     var settings = {
-                        url: commitUrl,
+                        url: uploadUrl,
                         processData: false,
-                        type: 'PUT',
+                        type: 'POST',
                         dataType: 'json',
-                        data: payload,
+                        data: JSON.stringify(dataSetInfo),
                         contentType: 'application/json',
                         success: function (data) {
                             // display feedback to user
-                            var container = $('#notebook-container')
                             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>' +
@@ -293,7 +419,6 @@ define([
                             container.prepend(feedback)
                         }
                     }
-                    //console.log(IPython.notebook)
 
                     // 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">'
@@ -306,8 +431,8 @@ define([
 
                 if (IPython.notebook.dirty === true) {
                     dialog.modal({
-                        body: 'Please, save the notebook before registering in openBIS.',
-                        title: 'Action required',
+                        body: 'Please save the notebook before uploading it to openBIS.',
+                        title: 'Save notebook first',
                         buttons: {
                             'Back': {}
                         },
@@ -317,7 +442,7 @@ define([
                 }
                 else {
                     dialog.modal({
-                        body: div,
+                        body: uploadDialogBox,
                         title: 'Upload openBIS DataSet',
                         buttons: {
                             'Cancel': {},
@@ -334,8 +459,6 @@ define([
         }
 
         function _onLoad () {
-            // log to console
-            //console.info('Loaded Jupyter extension: openbis-jupyter-extension')
             // register new action
             var download_datasets = IPython.keyboard_manager.actions.register(
                 fetchDatasetFromOpenBis, 'openbis-dataset-download', 'jupyter-openBIS')
@@ -343,8 +466,6 @@ define([
             var upload_datasets = IPython.keyboard_manager.actions.register(
                 uploadDatasetsToOpenBis, 'openbis-dataset-upload', 'jupyter-openBIS')
 
-            console.info(download_datasets)
-            console.info(upload_datasets)
             // add button for new action
             IPython.toolbar.add_buttons_group([download_datasets, upload_datasets])
         }
diff --git a/openbis-connections.yaml-example b/openbis-connections.yaml-example
new file mode 100644
index 0000000000000000000000000000000000000000..d8dfe123d941fe08f38a9d924b335ab678a30832
--- /dev/null
+++ b/openbis-connections.yaml-example
@@ -0,0 +1,11 @@
+connections:
+    - name                : local test openBIS instance
+      url                 : localhost:8443
+      verify_certificates : false
+      username            : username
+      password            : password
+    - name                : productive openBIS instance
+      url                 : openbis.example.com
+      verify_certificates : true
+      username            : username
+      password            : password