diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java
index 2f31b44ab7cb86eb451efb9576b6e0493d8c91e2..40c01c7b3e28cd107b97c126c097a956685f96b3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PropertyValueRenderers.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
 
+import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.InlineHTML;
@@ -29,12 +30,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.L
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PersonRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.LinkExtractor;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabClickListener;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.AbstractPropertyValueRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.AbstractSimplePropertyValueRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.IPropertyValueRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.ExternalHyperlink;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.MultilineHTML;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IInvalidationProvider;
@@ -50,6 +53,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Invalidation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
@@ -68,6 +72,15 @@ public final class PropertyValueRenderers
         // Can not be instantiated
     }
 
+    /**
+     * Creates a {@link IPropertyValueRenderer} implementation for rendering {@link Project}.
+     */
+    public final static IPropertyValueRenderer<Project> createProjectPropertyValueRenderer(
+            final IViewContext<?> viewContext)
+    {
+        return new ProjectPropertyValueRenderer(viewContext);
+    }
+
     /**
      * Creates a {@link IPropertyValueRenderer} implementation for rendering {@link Sample}.
      */
@@ -441,6 +454,46 @@ public final class PropertyValueRenderers
 
     }
 
+    /**
+     * Renderer for {@link Project}.
+     * 
+     * @author Piotr Buczek
+     */
+    public static class ProjectPropertyValueRenderer extends AbstractPropertyValueRenderer<Project>
+    {
+
+        private final IViewContext<?> viewContext;
+
+        public ProjectPropertyValueRenderer(final IViewContext<?> viewContext)
+        {
+            super(viewContext);
+            this.viewContext = viewContext;
+        }
+
+        //
+        // AbstractPropertyValueRenderer
+        //
+        public Widget getAsWidget(final Project project)
+        {
+            final String displayText = project.getIdentifier();
+            final ClickHandler listener = new ClickHandler()
+                {
+                    public void onClick(ClickEvent event)
+                    {
+                        OpenEntityDetailsTabHelper.open(viewContext, project, WidgetUtils
+                                .ifSpecialKeyPressed(event.getNativeEvent()));
+                    }
+                };
+            String href = LinkExtractor.tryExtract(project);
+            final Widget link =
+                    LinkRenderer.getLinkWidget(displayText, listener, false, href != null ? "#"
+                            + href : null);
+
+            return link;
+        }
+
+    }
+
     /**
      * Renderer for {@link Sample}.
      * 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/data/CommonExternalDataColDefKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/data/CommonExternalDataColDefKind.java
index 1fbd84809bc30cd6fd73bb1b8116dec9c7ee6202..0cae6413a3cc182e48fc95a08f6a01e81bef5d56 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/data/CommonExternalDataColDefKind.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/data/CommonExternalDataColDefKind.java
@@ -94,10 +94,6 @@ public enum CommonExternalDataColDefKind implements IColumnDefinitionKind<Extern
             public String tryGetValue(ExternalData entity)
             {
                 final Experiment exp = entity.getExperiment();
-                if (exp == null)
-                {
-                    return null;
-                }
                 return exp.getCode();
             }
 
@@ -115,10 +111,6 @@ public enum CommonExternalDataColDefKind implements IColumnDefinitionKind<Extern
             public String tryGetValue(ExternalData entity)
             {
                 final Experiment exp = entity.getExperiment();
-                if (exp == null)
-                {
-                    return null;
-                }
                 return exp.getIdentifier();
             }
 
@@ -143,6 +135,23 @@ public enum CommonExternalDataColDefKind implements IColumnDefinitionKind<Extern
             }
         }),
 
+    PROJECT(new AbstractColumnDefinitionKind<ExternalData>(Dict.PROJECT)
+        {
+            @Override
+            public String tryGetValue(ExternalData entity)
+            {
+                final Experiment exp = entity.getExperiment();
+                return exp.getProject().getCode();
+            }
+
+            @Override
+            public String tryGetLink(ExternalData entity)
+            {
+                final Experiment exp = entity.getExperiment();
+                return LinkExtractor.tryExtract(exp.getProject());
+            }
+        }),
+
     REGISTRATION_DATE(new AbstractColumnDefinitionKind<ExternalData>(Dict.REGISTRATION_DATE, 200,
             false)
         {
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 72c33c776139d4ccc52281d4dd2ed0cf7f43080c..c18814fae0919f9bedc146036798980cb6d12b07 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
@@ -43,6 +43,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Invalidation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialValueEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermValueEntityProperty;
@@ -81,6 +82,8 @@ public class DataSetPropertiesPanel extends ContentPanel
                 .createDataSetTypePropertyValueRenderer(viewContext));
         propertyGrid.registerPropertyValueRenderer(Invalidation.class, PropertyValueRenderers
                 .createInvalidationPropertyValueRenderer(viewContext));
+        propertyGrid.registerPropertyValueRenderer(Project.class, PropertyValueRenderers
+                .createProjectPropertyValueRenderer(viewContext));
         final IPropertyValueRenderer<IEntityProperty> propertyRenderer =
                 PropertyValueRenderers.createEntityPropertyPropertyValueRenderer(viewContext);
         propertyGrid.registerPropertyValueRenderer(EntityProperty.class, propertyRenderer);
@@ -132,6 +135,8 @@ public class DataSetPropertiesPanel extends ContentPanel
         properties.put(messageProvider.getMessage(Dict.REGISTRATOR), dataset.getRegistrator());
         properties.put(messageProvider.getMessage(Dict.REGISTRATION_DATE), dataset
                 .getRegistrationDate());
+        properties.put(messageProvider.getMessage(Dict.PROJECT), dataset.getExperiment()
+                .getProject());
         properties.put(messageProvider.getMessage(Dict.EXPERIMENT), dataset.getExperiment());
         if (sample != null)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesPanel.java
index 8073a807ad7e03b70dc59611b690b57381c72fa4..39b93b89cbf2ef45a459963a5e291b4fff621f29 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesPanel.java
@@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Invalidation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialValueEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermValueEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
@@ -100,6 +101,8 @@ public class ExperimentPropertiesPanel extends ContentPanel
                 .createExperimentTypePropertyValueRenderer(messageProvider));
         propertyGrid.registerPropertyValueRenderer(Invalidation.class, PropertyValueRenderers
                 .createInvalidationPropertyValueRenderer(messageProvider));
+        propertyGrid.registerPropertyValueRenderer(Project.class, PropertyValueRenderers
+                .createProjectPropertyValueRenderer(viewContext));
         final IPropertyValueRenderer<IEntityProperty> renderer =
                 PropertyValueRenderers.createEntityPropertyPropertyValueRenderer(viewContext);
         propertyGrid.registerPropertyValueRenderer(EntityProperty.class, renderer);
@@ -128,6 +131,7 @@ public class ExperimentPropertiesPanel extends ContentPanel
         {
             properties.put(messageProvider.getMessage(Dict.INVALIDATION), invalidation);
         }
+        properties.put(messageProvider.getMessage(Dict.PROJECT), experiment.getProject());
         final List<IEntityProperty> experimentProperties = experiment.getProperties();
         Collections.sort(experimentProperties);
         List<PropertyType> types = EntityPropertyUtils.extractTypes(experimentProperties);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
index 9fafec6be7d30b57bd9c48113c40635ff1a9484c..f9e47e168b992da0954810fab52455ecabd1a754 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
@@ -67,6 +67,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Invalidation;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialValueEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleParentWithDerived;
@@ -256,6 +257,7 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
         Experiment experiment = sample.getExperiment();
         if (experiment != null)
         {
+            properties.put(messageProvider.getMessage(Dict.PROJECT), experiment.getProject());
             properties.put(messageProvider.getMessage(Dict.EXPERIMENT), experiment);
         }
 
@@ -316,6 +318,8 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
                 .createSamplePropertyValueRenderer(viewContext, true));
         propertyGrid.registerPropertyValueRenderer(Invalidation.class, PropertyValueRenderers
                 .createInvalidationPropertyValueRenderer(viewContext));
+        propertyGrid.registerPropertyValueRenderer(Project.class, PropertyValueRenderers
+                .createProjectPropertyValueRenderer(viewContext));
         final IPropertyValueRenderer<IEntityProperty> propertyValueRenderer =
                 PropertyValueRenderers.createEntityPropertyPropertyValueRenderer(viewContext);
         propertyGrid.registerPropertyValueRenderer(EntityProperty.class, propertyValueRenderer);