diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js
index a81f641af2cd9bf2e73e0c4c57a8b65988df8a5a..6c8c3d7f32f905bce46e20027ba5bccc370cfe46 100644
--- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js
@@ -27,8 +27,8 @@
  * @param {Map} datasets API result with the datasets to show.
  * @param {Boolean} enableUpload If true, the button to create datasets is shown, this will require the sample to be present.
  */
-function DataSetViewerController(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, enableUpload, enableDeepUnfolding) {
-	this._datasetViewerModel = new DataSetViewerModel(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, enableUpload, enableDeepUnfolding);
+function DataSetViewerController(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, enableUpload, enableDeepUnfolding, formMode) {
+    this._datasetViewerModel = new DataSetViewerModel(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, enableUpload, enableDeepUnfolding, formMode);
 	this._datasetViewerView = new DataSetViewerView(this, this._datasetViewerModel);
 	
 	this.init = function() {
@@ -100,6 +100,9 @@ function DataSetViewerController(containerId, profile, entity, serverFacade, dat
 						ids.push(id);
 					}
 		            var fetchOptions = new DataSetFetchOptions();
+                    fetchOptions.withType();
+                    fetchOptions.withRegistrator();
+                    fetchOptions.withModifier();
 		            fetchOptions.withPhysicalData();
 		            fetchOptions.withLinkedData().withExternalDms();
 		            fetchOptions.withProperties();
diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js
index df391fec0ca188e81c479a328d5a2f3848e8a210..ff49c41aa6163af9b7bb43502a8b9a6d5719f4b6 100644
--- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js
@@ -15,7 +15,8 @@
  */
 
 function DataSetViewerModel(containerId, profile, entity, serverFacade, datastoreDownloadURL, datasets, 
-		enableUpload, enableDeepUnfolding) {
+        enableUpload, enableDeepUnfolding, formMode) {
+    this.formMode = formMode;
 	this.containerId = containerId;
 	this.containerIdTitle = containerId + "-title";
 	this.containerIdContent = containerId + "-content";
diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js
index 2908bea00ddccde55c872c4a66cc43b6cb62852e..f4c95023c467a2762af2b798f51dab9533dd0563 100644
--- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js
@@ -21,6 +21,9 @@ function DataSetViewerView(dataSetViewerController, dataSetViewerModel) {
 	this._imagePreviewIconLoader = new ImagePreviewIconLoader();
 	
 	this.repaintDatasets = function() {
+        if (this._dataSetViewerModel.formMode == FormMode.VIEW) {
+            this._paintDataSetTable();
+        }
 		var _this = this;
 		
 		// Container
@@ -76,7 +79,147 @@ function DataSetViewerView(dataSetViewerController, dataSetViewerModel) {
 		}
 		this.repaintFilesAsTree($filesContainer);
 	}
-	
+
+    this._paintDataSetTable = function() {
+        var $dataSetsSection = $("#data-sets-section");
+        var $legend = $("<legend>").append("Data Sets");
+        var $dataSetContainer = $("<div>", { 'id' : 'data-set-table' });
+        $dataSetsSection.append($legend);
+        $dataSetsSection.append($dataSetContainer);
+        $legend.prepend(FormUtil.getShowHideButton($dataSetContainer, "data-set-table"));
+
+        var _this = this;
+        var getDataList = function(callback) {
+            var data = [];
+            _this._dataSetViewerModel.v3Datasets.forEach(function(dataSet) {
+                var properties = dataSet.getProperties();
+                var name = properties[profile.propertyReplacingCode];
+                var row = {
+                    'id' : dataSet.getCode(),
+                    'name' : name ? name : "",
+                    'type' : dataSet.getType().getCode(),
+                    'properties' : properties,
+                    'parents' : dataSet.getParents().map(d => d.getCode()),
+                    'registrator' : dataSet.getRegistrator().getUserId(),
+                    'registrationDate' : Util.getFormatedDate(new Date(dataSet.getRegistrationDate())),
+                    'modifier' : dataSet.getModifier().getUserId(),
+                    'modificationDate' : Util.getFormatedDate(new Date(dataSet.getModificationDate()))
+                };
+                if (properties) {
+                    for(var propertyCode in properties) {
+                        row[propertyCode] = properties[propertyCode];
+                    }
+                }
+                data.push(row);
+            });
+            callback(data);
+        };
+        var columns = [];
+        columns.push({
+            label : 'Code',
+            property : 'id',
+            isExportable: true,
+            sortable : true,
+            filterable: true,
+            showByDefault: true,
+            render : function(data) {
+                return FormUtil.getFormLink(data.id, "DataSet", data.id);
+            },
+        });
+        columns.push({
+            label : 'Name',
+            property : '$NAME',
+            isExportable: DataGridExportOptions.EXPORTABLE_FIELD.PROPERTY("$NAME"),
+            sortable : true,
+            filterable: true,
+            showByDefault: true,
+            render : function(data) {
+                return FormUtil.getFormLink(data['name'], "DataSet", data.id);
+            },
+        });
+        columns.push({
+            label : 'Data Set Type',
+            property : 'type',
+            isExportable: true,
+            sortable : true,
+            filterable: true,
+            showByDefault: true
+        });
+        var dynamicColumnsFunc = function(dataSets) {
+            var foundPropertyCodes = {};
+            dataSets.forEach(function(dataSet) {
+                for (var propertyCode in dataSet.properties) {
+                    if (dataSet.properties[propertyCode]) {
+                        foundPropertyCodes[propertyCode] = true;
+                    }
+                }
+            });
+            var propertyColumnsToSort = SampleDataGridUtil.createPropertyColumns(foundPropertyCodes);
+            FormUtil.sortPropertyColumns(propertyColumnsToSort, dataSets.map(function(dataSet){
+                return {
+                    entityKind: "DATASET",
+                    entityType: dataSet.type
+                }
+            }))
+            return propertyColumnsToSort;
+        };
+        var columnsLast = [];
+        columnsLast.push({
+            label : '---------------',
+            property : null,
+            filterable: false,
+            sortable : false
+        });
+        columnsLast.push({
+            label : 'Parents',
+            property : 'parents',
+            filterable : true,
+            sortable : false
+        });
+        columnsLast.push({
+            label : 'Registrator',
+            property : 'registrator',
+            exportableProperty : DataGridExportOptions.EXPORTABLE_FIELD.REGISTRATOR,
+            filterable : true,
+            sortable : true
+        });
+        columnsLast.push({
+            label : 'Registration Date',
+            property : 'registrationDate',
+            exportableProperty : DataGridExportOptions.EXPORTABLE_FIELD.REGISTRATION_DATE,
+            filterable : true,
+            sortable : true,
+            renderFilter : function(params) {
+                return FormUtil.renderDateRangeGridFilter(params, "TIMESTAMP")
+            }
+        });
+        columnsLast.push({
+            label : 'Modifier',
+            property : 'modifier',
+            exportableProperty : DataGridExportOptions.EXPORTABLE_FIELD.MODIFIER,
+            filterable : true,
+            sortable : true
+        });
+        columnsLast.push({
+            label : 'Modification Date',
+            property : 'modificationDate',
+            exportableProperty : DataGridExportOptions.EXPORTABLE_FIELD.MODIFICATION_DATE,
+            filterable : true,
+            sortable : true,
+            renderFilter : function(params) {
+                return FormUtil.renderDateRangeGridFilter(params, "TIMESTAMP")
+            }
+        });
+        var dataGrid = new DataGridController(null, columns, columnsLast, dynamicColumnsFunc, getDataList, 
+                null, false, "DATA_SETS_OF_SAMPLE", false, 
+                {
+                    fileFormat: DataGridExportOptions.FILE_FORMAT.TSV,
+                    filePrefix: 'data-sets'
+                },
+                90);
+        dataGrid.init($dataSetContainer);
+    }
+
 	this._expandAll = function() {
 		var _this = this;
 		var tree = $("#filestree").fancytree("getTree");
diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
index 49bdfc87d797ad7efcd6f5171eb3889c919e99fd..78ac43ea3703abdd4c04c9b7acc85445f4c8ee69 100644
--- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js
@@ -281,6 +281,9 @@ function ExperimentFormView(experimentFormController, experimentFormModel) {
 			$formColumn.append(this._createSamplesSection(hideShowOptionsModel));
 		}
 
+        // Data sets section
+        $formColumn.append($("<div>", {'id':'data-sets-section'}))
+
 		//
 		// Identification Info on not Create
 		//
@@ -341,7 +344,8 @@ function ExperimentFormView(experimentFormController, experimentFormModel) {
                 // Dataset Viewer
                 var $dataSetViewerContainer = new $('<div>', { id : "dataSetViewerContainer", style: "overflow: scroll; margin-top: 5px; padding-top: 5px; border-top: 1px dashed #ddd; " });
                 mainController.sideMenu.addSubSideMenu($dataSetViewerContainer);
-                this._experimentFormModel.dataSetViewer = new DataSetViewerController("dataSetViewerContainer", profile, this._experimentFormModel.v3_experiment, mainController.serverFacade, profile.getDefaultDataStoreURL(), null, false, true);
+                this._experimentFormModel.dataSetViewer = new DataSetViewerController("dataSetViewerContainer", profile, this._experimentFormModel.v3_experiment, mainController.serverFacade, 
+                        profile.getDefaultDataStoreURL(), null, false, true, this._experimentFormModel.mode);
                 this._experimentFormModel.dataSetViewer.init();
             }
         }
diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js
index 1218fe7c8f01a31b7e5f88568098d5674bf73b20..fa2e86a0b1074b017b299c28cd15d8e4e672adac 100644
--- a/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js
+++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js
@@ -559,6 +559,9 @@ function SampleFormView(sampleFormController, sampleFormModel) {
 			storageListController.init(storageListContainer);
 		}
 
+        // Data sets section
+        $formColumn.append($("<div>", {'id':'data-sets-section'}))
+
 		//
 		// Extra Content
 		//
@@ -616,7 +619,8 @@ function SampleFormView(sampleFormController, sampleFormModel) {
             // Dataset Viewer
             var $dataSetViewerContainer = new $('<div>', { id : "dataSetViewerContainer", style: "overflow: scroll; margin-top: 5px; padding-top: 5px; border-top: 1px dashed #ddd; " });
             mainController.sideMenu.addSubSideMenu($dataSetViewerContainer);
-            this._sampleFormModel.dataSetViewer = new DataSetViewerController("dataSetViewerContainer", profile, this._sampleFormModel.sample, mainController.serverFacade, profile.getDefaultDataStoreURL(), this._sampleFormModel.datasets, false, true);
+            this._sampleFormModel.dataSetViewer = new DataSetViewerController("dataSetViewerContainer", profile, this._sampleFormModel.sample, mainController.serverFacade, 
+                    profile.getDefaultDataStoreURL(), this._sampleFormModel.datasets, false, true, this._sampleFormModel.mode);
             this._sampleFormModel.dataSetViewer.init();
 		}