diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
index 87a599a82936aa48e55632e3095ceca675b2ec47..0310df4a857ac242106c8d7cca2e84e4dfc3a765 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/client/api/v1/DataSet.java
@@ -32,6 +32,7 @@ import ch.systemsx.cisd.common.api.retry.RetryProxyFactory;
 import ch.systemsx.cisd.common.exceptions.InvalidSessionException;
 import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.Connections;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem;
 
 /**
  * A class that provides uniform access to data set metadata (from the openBIS AS) and data (from
@@ -195,6 +196,15 @@ public class DataSet
         return getMetadata().getExternalDataSetLink();
     }
 
+    /**
+     * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet#getExternalDataManagementSystem()
+     */
+    @Retry
+    public ExternalDataManagementSystem getExternalDataManagementSystem()
+    {
+        return getMetadata().getExternalDataManagementSystem();
+    }
+
     /**
      * @see ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet#getContainedDataSets()
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
index 16fc8cf5dc0c3493f4553ba7090bd1c64ef8f825..c20d0ae5c3cb123ddaebc1861979d5b9c390c492 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
@@ -669,8 +669,16 @@ public abstract class Dict
 
     public static final String LINKED_DATA_SET = "linked_data_set";
 
-    public static final String LINKED_DATA_SET_URL_NOT_AVAILABLE_MSG =
-            "linked_data_set_url_not_available";
+    public static final String LINKED_DATA_SET_INFO = "linked_data_set_info";
+
+    public static final String LINKED_DATA_SET_CODE = "linked_data_set_code";
+
+    public static final String LINKED_DATA_SET_DMS = "linked_data_set_dms";
+
+    public static final String LINKED_DATA_SET_LINK = "linked_data_set_link";
+
+    public static final String LINKED_DATA_SET_LINK_NOT_AVAILABLE_MSG =
+            "linked_data_set_link_not_available";
 
     //
     // Sample Registration
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
index 490f842d6de80f52297f1b61a9957e9361c4afb4..70b7d822a77be16d798a8c3688d876481eb0be68 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java
@@ -34,9 +34,10 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFetchOption;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFetchOptions;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.EntityRegistrationDetails;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.EntityRegistrationDetails.EntityRegistrationDetailsInitializer;
-import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
-import ch.systemsx.cisd.openbis.generic.shared.basic.BasicURLEncoder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSetUrl;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper;
@@ -175,10 +176,24 @@ public class DataSetLister implements IDataSetLister
         if (initializer.isLinkDataSet())
         {
             initializer.setExternalDataSetCode(dataSet.ld_external_code);
-            initializer.setExternalDataSetLink(dataSet.edms_url_template == null ? null
-                    : dataSet.edms_url_template.replaceAll(
-                            BasicConstant.EXTERNAL_DMS_URL_TEMPLATE_CODE_PATTERN,
-                            BasicURLEncoder.encode(dataSet.ld_external_code)));
+            LinkDataSetUrl linkDataSetUrl =
+                    new LinkDataSetUrl(dataSet.ld_external_code, dataSet.edms_url_template);
+            initializer.setExternalDataSetLink(linkDataSetUrl.toString());
+
+            DatabaseInstance db = new DatabaseInstance();
+            db.setId(dataSet.die_id);
+            db.setCode(dataSet.die_code);
+            db.setUuid(dataSet.die_uuid);
+            db.setHomeDatabase(dataSet.die_is_original_source);
+
+            ExternalDataManagementSystem edms = new ExternalDataManagementSystem();
+            edms.setId(dataSet.edms_id);
+            edms.setCode(dataSet.edms_code);
+            edms.setLabel(dataSet.edms_label);
+            edms.setUrlTemplate(dataSet.edms_url_template);
+            edms.setDatabaseInstance(db);
+            edms.setOpenBIS(dataSet.edms_is_openbis);
+            initializer.setExternalDataManagementSystem(edms);
         }
         initializer.setRegistrationDetails(createDataSetRegistrationDetails(dataSet));
         initializer.setExperimentIdentifier(experimentIdentifier.toString());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java
index 9c8ceef58f8640dffd86bfe88b822a7fcfcfe15a..ed9c22a20cd3b40f3716818c36710c3c4f2f4992 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java
@@ -66,12 +66,24 @@ public class DataSetRecord
 
     public String sps_code;
 
+    public Long die_id;
+
     public String die_code;
 
+    public String die_uuid;
+
     public Boolean die_is_original_source;
 
     public String ld_external_code;
 
+    public Long edms_id;
+
+    public String edms_code;
+
+    public String edms_label;
+
     public String edms_url_template;
 
+    public Boolean edms_is_openbis;
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java
index 33b81614895aff4dc896188cecfd5906819e6f5b..67ee0e2aab01cb06af97d7a4be1061ddeed3b9fd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java
@@ -41,8 +41,8 @@ public interface IDataSetListingQuery extends BaseQuery
             + " pe.first_name as pe_first_name, pe.last_name as pe_last_name, pe.email as pe_email, pe.user_id as pe_user_id,"
             + " mod.first_name as mod_first_name, mod.last_name as mod_last_name, mod.email as mod_email, mod.user_id as mod_user_id,"
             + " pre.code as pre_code, spe.code as spe_code, sps.code as sps_code,"
-            + " die.code as die_code, die.is_original_source as die_is_original_source,"
-            + " ld.external_code as ld_external_code, edms.url_template as edms_url_template"
+            + " die.id as die_id, die.code as die_code, die.uuid as die_uuid, die.is_original_source as die_is_original_source,"
+            + " ld.external_code as ld_external_code, edms.id as edms_id, edms.code as edms_code, edms.label as edms_label, edms.url_template as edms_url_template, edms.is_openbis as edms_is_openbis"
             + " from data ds inner join data_set_types dt on ds.dsty_id = dt.id"
             + " inner join experiments ex on ds.expe_id = ex.id"
             + " left outer join link_data ld on ds.id = ld.data_id"
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java
index 4936515df4613ffab48988c46bfda01f82e1dc80..9e9984bf20bef4f28c3f8592d868ee29e3576086 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java
@@ -53,8 +53,6 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleFetchOption;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Vocabulary.VocabularyInitializer;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.VocabularyTerm;
-import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
-import ch.systemsx.cisd.openbis.generic.shared.basic.BasicURLEncoder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeWithRegistration;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeWithRegistrationAndModificationDate;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ContainerDataSet;
@@ -62,6 +60,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSetUrl;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleLevel;
@@ -367,12 +366,10 @@ public class Translator
         {
             LinkDataSet linkDataSet = externalDatum.tryGetAsLinkDataSet();
             initializer.setExternalDataSetCode(linkDataSet.getExternalCode());
-            initializer.setExternalDataSetLink(linkDataSet.getExternalDataManagementSystem()
-                    .getUrlTemplate() == null ? null : linkDataSet
-                    .getExternalDataManagementSystem()
-                    .getUrlTemplate()
-                    .replaceAll(BasicConstant.EXTERNAL_DMS_URL_TEMPLATE_CODE_PATTERN,
-                            BasicURLEncoder.encode(linkDataSet.getExternalCode())));
+            LinkDataSetUrl linkDataSetUrl = new LinkDataSetUrl(linkDataSet);
+            initializer.setExternalDataSetLink(linkDataSetUrl.toString());
+            initializer.setExternalDataManagementSystem(linkDataSet
+                    .getExternalDataManagementSystem());
         }
 
         initializer.setRetrievedConnections(connectionsToGet);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkDataSetUrl.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkDataSetUrl.java
index 7357f1a5690136d1249ca9c2a907c61373431384..cf7930580003aadc3d10b20511a14c3c840a0542 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkDataSetUrl.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/LinkDataSetUrl.java
@@ -25,11 +25,27 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.BasicURLEncoder;
 public class LinkDataSetUrl
 {
 
-    private LinkDataSet dataset;
+    private String externalCode;
+
+    private String urlTemplate;
+
+    public LinkDataSetUrl(String externalCode, String urlTemplate)
+    {
+        this.externalCode = externalCode;
+        this.urlTemplate = urlTemplate;
+    }
 
     public LinkDataSetUrl(LinkDataSet dataset)
     {
-        this.dataset = dataset;
+        if (dataset == null)
+        {
+            throw new IllegalArgumentException("Dataset cannot be null");
+        }
+        externalCode = dataset.getExternalCode();
+        if (dataset.getExternalDataManagementSystem() != null)
+        {
+            urlTemplate = dataset.getExternalDataManagementSystem().getUrlTemplate();
+        }
     }
 
     protected String maybeUnescape(String str)
@@ -40,15 +56,13 @@ public class LinkDataSetUrl
     @Override
     public String toString()
     {
-        if (dataset.getExternalCode() != null && dataset.getExternalDataManagementSystem() != null
-                && dataset.getExternalDataManagementSystem().getUrlTemplate() != null)
+        if (externalCode != null && urlTemplate != null)
         {
-            String externalCode = maybeUnescape(dataset.getExternalCode());
-            String urlTemplate =
-                    maybeUnescape(dataset.getExternalDataManagementSystem().getUrlTemplate());
+            String anExternalCode = maybeUnescape(externalCode);
+            String aUrlTemplate = maybeUnescape(urlTemplate);
 
-            return urlTemplate.replaceAll(BasicConstant.EXTERNAL_DMS_URL_TEMPLATE_CODE_PATTERN,
-                    BasicURLEncoder.encode(externalCode));
+            return aUrlTemplate.replaceAll(BasicConstant.EXTERNAL_DMS_URL_TEMPLATE_CODE_PATTERN,
+                    BasicURLEncoder.encode(anExternalCode));
         } else
         {
             return null;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java
index 64827ab52c56b381a1ca6b660f9125355ba4c3b0..8942d729b5f1c0e20c093368566fda872aa11921 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetPropertiesPanel.java
@@ -86,11 +86,11 @@ public class DataSetPropertiesPanel extends ContentPanel
 
         if (dataset.isLinkData())
         {
-            LinkDataSetAnchor anchor =
-                    LinkDataSetAnchor.tryCreateWithExternalCodeAsText(dataset.tryGetAsLinkDataSet());
+            LinkDataSetAnchor anchor = LinkDataSetAnchor.tryCreate(dataset.tryGetAsLinkDataSet());
 
             if (anchor != null)
             {
+                anchor.setHTML(dataset.tryGetAsLinkDataSet().getExternalCode());
                 properties.put(messageProvider.getMessage(Dict.LINKED_DATA_SET), anchor);
             } else
             {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataSetAnchor.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataSetAnchor.java
index bb020a8f31b40176003854e72c966e94dd057ea9..ef6e11a4caee1299e34612ec3626adc9f376c50d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataSetAnchor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataSetAnchor.java
@@ -34,21 +34,7 @@ public class LinkDataSetAnchor extends Anchor
         setTarget("_blank");
     }
 
-    public static final LinkDataSetAnchor tryCreateWithExternalCodeAsText(LinkDataSet dataset)
-    {
-        String url = new UnescapingLinkDataSetUrl(dataset).toString();
-
-        if (url != null)
-        {
-            return new LinkDataSetAnchor(StringEscapeUtils.unescapeHtml(dataset.getExternalCode()),
-                    url);
-        } else
-        {
-            return null;
-        }
-    }
-
-    public static final LinkDataSetAnchor tryCreateWithUrlAsText(LinkDataSet dataset)
+    public static final LinkDataSetAnchor tryCreate(LinkDataSet dataset)
     {
         String url = new UnescapingLinkDataSetUrl(dataset).toString();
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataViewSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataViewSection.java
index 1a360f7f0ee6c557ecca01421c413370aff1066c..eddac440412aa9a7797879088aabf5979954240e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataViewSection.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/LinkDataViewSection.java
@@ -16,14 +16,17 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset;
 
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.TabContent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkDataSet;
 
 /**
@@ -43,20 +46,68 @@ public class LinkDataViewSection extends TabContent
     @Override
     protected void showContent()
     {
-        Panel content = new SimplePanel();
+        Panel content = new FlowPanel();
         content.setStyleName("linkDataViewContent");
+        content.add(createInfoWidget());
+        content.add(createCodeWidget());
+        content.add(createDmsWidget());
+        content.add(createLinkWidget());
+        add(content);
+
+    }
+
+    private Widget createInfoWidget()
+    {
+        Label label = new Label(viewContext.getMessage(Dict.LINKED_DATA_SET_INFO));
+        label.addStyleName("linkDataViewInfo");
+        return label;
+    }
+
+    private Widget createCodeWidget()
+    {
+        Label label = new Label(viewContext.getMessage(Dict.LINKED_DATA_SET_CODE));
+        label.addStyleName("linkDataViewLabel");
+        Label value = new Label(StringEscapeUtils.unescapeHtml(dataset.getExternalCode()));
+
+        Panel panel = new HorizontalPanel();
+        panel.add(label);
+        panel.add(value);
+        return panel;
+    }
 
-        LinkDataSetAnchor anchor = LinkDataSetAnchor.tryCreateWithUrlAsText(dataset);
+    private Widget createDmsWidget()
+    {
+        Label label = new Label(viewContext.getMessage(Dict.LINKED_DATA_SET_DMS));
+        label.addStyleName("linkDataViewLabel");
+        Label value =
+                new Label(StringEscapeUtils.unescapeHtml(dataset.getExternalDataManagementSystem()
+                        .getLabel())
+                        + " ("
+                        + StringEscapeUtils.unescapeHtml(dataset.getExternalDataManagementSystem()
+                                .getCode()) + ")");
+
+        Panel panel = new HorizontalPanel();
+        panel.add(label);
+        panel.add(value);
+        return panel;
+    }
+
+    private Widget createLinkWidget()
+    {
+        LinkDataSetAnchor anchor = LinkDataSetAnchor.tryCreate(dataset);
 
         if (anchor != null)
         {
-            content.add(anchor);
+            Label label = new Label(viewContext.getMessage(Dict.LINKED_DATA_SET_LINK));
+            label.addStyleName("linkDataViewLabel");
+
+            Panel panel = new HorizontalPanel();
+            panel.add(label);
+            panel.add(anchor);
+            return panel;
         } else
         {
-            content.add(new Label(viewContext
-                    .getMessage(Dict.LINKED_DATA_SET_URL_NOT_AVAILABLE_MSG)));
+            return new Label(viewContext.getMessage(Dict.LINKED_DATA_SET_LINK_NOT_AVAILABLE_MSG));
         }
-
-        add(content);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
index 79c67b3f7fe041da76bd61905cf5e64aa6a0d7d4..c86cdd3df4300c4443b17364fd6fe69ee1e6a2d2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
@@ -744,7 +744,11 @@ var common = {
  processing_info_msg: "'{0}' has been scheduled successfully. Email will be send to you when it is finished.",
  dataset_not_available_msg: "Data Set {0} is {1}. You can not perform any operation using its data.",
  linked_data_set: "Linked Data Set",
- linked_data_set_url_not_available: "A link to an external DMS is not available.",
+ linked_data_set_info: "This is a linked data set",
+ linked_data_set_code: "External Code: ",
+ linked_data_set_dms: "External DMS: ",
+ linked_data_set_link: "Link: ",
+ linked_data_set_link_not_available: "Link: not available",
  
  //
  // Material Browser
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css b/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css
index a3797d82eab0400d2a27a4c889cf0de65f1c9a7b..cdaf17cfa8e0e422f60271bad4b417d4e0d8563a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css
@@ -305,3 +305,12 @@ body,div,td,.default-text {
 .linkDataViewContent {
 	margin: 10px;	
 }
+
+.linkDataViewInfo {
+	font-weight: bold;
+	margin-bottom: 5px;	
+}
+
+.linkDataViewLabel {
+	margin-right: 5px;	
+}
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetListerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetListerTest.java
index 7595e78cae9001a89d86e3eb1bfdfafb2d5c8fb8..aa7e866f37b2c2b7f20eefd8c9fe655980e40f01 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetListerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetListerTest.java
@@ -43,6 +43,8 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFetchOption;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFetchOptions;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.EntityRegistrationDetails;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem;
 
 /**
  * Test cases for {@link IDataSetListingQuery}.
@@ -175,6 +177,32 @@ public class DataSetListerTest extends AbstractDAOTest
         assertEquals("http://example.edms.pl/code=CODE1", results.get(0).getExternalDataSetLink());
         assertEquals("http://example.edms.pl/code=CODE2", results.get(1).getExternalDataSetLink());
         assertEquals("http://www.openbis.ch/perm_id=CODE3", results.get(2).getExternalDataSetLink());
+
+        DatabaseInstance db = new DatabaseInstance();
+        db.setId(1L);
+        db.setCode("CISD");
+        db.setUuid("57F0FA8F-80AC-42AB-9C6A-AAADBCC37A3E");
+        db.setHomeDatabase(true);
+
+        ExternalDataManagementSystem dms1 = new ExternalDataManagementSystem();
+        dms1.setId(1L);
+        dms1.setCode("DMS_1");
+        dms1.setLabel("Test EDMS");
+        dms1.setOpenBIS(false);
+        dms1.setUrlTemplate("http://example.edms.pl/code=$code$");
+        dms1.setDatabaseInstance(db);
+
+        ExternalDataManagementSystem dms2 = new ExternalDataManagementSystem();
+        dms2.setId(2L);
+        dms2.setCode("DMS_2");
+        dms2.setLabel("Test External openBIS instance");
+        dms2.setOpenBIS(true);
+        dms2.setUrlTemplate("http://www.openbis.ch/perm_id=$code$");
+        dms2.setDatabaseInstance(db);
+
+        assertEqualsToExternalDMS(dms1, results.get(0).getExternalDataManagementSystem());
+        assertEqualsToExternalDMS(dms1, results.get(1).getExternalDataManagementSystem());
+        assertEqualsToExternalDMS(dms2, results.get(2).getExternalDataManagementSystem());
     }
 
     private static void sortDataSetsByCode(List<DataSet> dataSets)
@@ -266,4 +294,35 @@ public class DataSetListerTest extends AbstractDAOTest
         }
 
     }
+
+    private void assertEqualsToExternalDMS(ExternalDataManagementSystem expected,
+            ExternalDataManagementSystem actual)
+    {
+        assertFalse(expected == null ^ actual == null);
+
+        if (expected != null && actual != null)
+        {
+            assertEquals(expected.getId(), actual.getId());
+            assertEquals(expected.getCode(), actual.getCode());
+            assertEquals(expected.getLabel(), actual.getLabel());
+            assertEquals(expected.getUrlTemplate(), actual.getUrlTemplate());
+            assertEquals(expected.isOpenBIS(), actual.isOpenBIS());
+            assertEqualsToDatabaseInstance(expected.getDatabaseInstance(),
+                    actual.getDatabaseInstance());
+        }
+    }
+
+    private void assertEqualsToDatabaseInstance(DatabaseInstance expected, DatabaseInstance actual)
+    {
+        assertFalse(expected == null ^ actual == null);
+
+        if (expected != null && actual != null)
+        {
+            assertEquals(expected.getId(), actual.getId());
+            assertEquals(expected.getCode(), actual.getCode());
+            assertEquals(expected.getIdentifier(), actual.getIdentifier());
+            assertEquals(expected.getUuid(), actual.getUuid());
+        }
+    }
+
 }
\ No newline at end of file
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/TranslatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/TranslatorTest.java
index 1a278005778a5187de5ef6bec0a8dd2c58f00d96..54f76f7dda73db112919b50b25a593a454bf10ff 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/TranslatorTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/TranslatorTest.java
@@ -233,6 +233,7 @@ public class TranslatorTest extends AssertJUnit
         assertTrue(translated.isLinkDataSet());
         assertEquals(dsLink.getLinkDataSet().getExternalCode(), translated.getExternalDataSetCode());
         assertEquals("http://www.EX_CODE.ch", translated.getExternalDataSetLink());
+        assertEquals(edms, translated.getExternalDataManagementSystem());
     }
 
     private void assertBasicAttributes(
diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java
index b4051badc50c096d95de5da342e4e8d9e7db5038..9e988cd819148844921399f95b21d16d48cc43ea 100644
--- a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java
+++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/dto/DataSet.java
@@ -33,6 +33,7 @@ import org.apache.commons.lang.builder.ToStringStyle;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 
 import ch.systemsx.cisd.base.annotation.JsonObject;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem;
 
 /**
  * Immutable value object representing a data set.
@@ -75,6 +76,8 @@ public final class DataSet implements Serializable
 
         private String externalDataSetLink;
 
+        private ExternalDataManagementSystem externalDataManagementSystem;
+
         private EnumSet<Connections> retrievedConnections = EnumSet.noneOf(Connections.class);
 
         private List<String> parentCodes = Collections.emptyList();
@@ -229,6 +232,17 @@ public final class DataSet implements Serializable
         {
             this.externalDataSetLink = externalDataSetLink;
         }
+
+        public ExternalDataManagementSystem getExternalDataManagementSystem()
+        {
+            return externalDataManagementSystem;
+        }
+
+        public void setExternalDataManagementSystem(
+                ExternalDataManagementSystem externalDataManagementSystem)
+        {
+            this.externalDataManagementSystem = externalDataManagementSystem;
+        }
     }
 
     private String code;
@@ -247,6 +261,8 @@ public final class DataSet implements Serializable
 
     private String externalDataSetLink;
 
+    private ExternalDataManagementSystem externalDataManagementSystem;
+
     private HashMap<String, String> properties;
 
     // For handling connections to entities
@@ -294,7 +310,7 @@ public final class DataSet implements Serializable
         this.linkDataSet = initializer.isLinkDataSet();
         this.externalDataSetCode = initializer.getExternalDataSetCode();
         this.externalDataSetLink = initializer.getExternalDataSetLink();
-
+        this.externalDataManagementSystem = initializer.getExternalDataManagementSystem();
     }
 
     /**
@@ -417,6 +433,11 @@ public final class DataSet implements Serializable
         return externalDataSetLink;
     }
 
+    public ExternalDataManagementSystem getExternalDataManagementSystem()
+    {
+        return externalDataManagementSystem;
+    }
+
     public List<DataSet> getContainedDataSets()
     {
         return containedDataSets;
@@ -535,6 +556,12 @@ public final class DataSet implements Serializable
         this.externalDataSetLink = externalDataSetLink;
     }
 
+    private void setExternalDataManagementSystem(
+            ExternalDataManagementSystem externalDataManagementSystem)
+    {
+        this.externalDataManagementSystem = externalDataManagementSystem;
+    }
+
     private void setContainedDataSets(List<DataSet> containedDataSets)
     {
         this.containedDataSets = containedDataSets;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataManagementSystem.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataManagementSystem.java
similarity index 95%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataManagementSystem.java
rename to openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataManagementSystem.java
index 57d71ca4f4fe2e3c9b312474ab8f58b5dcecf6b8..372be096d712175f7aace78e816f7d3bb084a67f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataManagementSystem.java
+++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ExternalDataManagementSystem.java
@@ -18,9 +18,12 @@ package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
 import java.io.Serializable;
 
+import ch.systemsx.cisd.base.annotation.JsonObject;
+
 /**
  * @author Pawel Glyzewski
  */
+@JsonObject("ExternalDataManagementSystem")
 public class ExternalDataManagementSystem extends Code<ExternalDataManagementSystem> implements
         Serializable
 {