diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
index 66b9f6491027a286aab1723d98933198b1c2b72a..1d6337896384f47393a9d563419e7616c1001ee0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
@@ -16,24 +16,25 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
 
-import com.extjs.gxt.ui.client.widget.LayoutContainer;
+import com.extjs.gxt.ui.client.widget.ContentPanel;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.IClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 
 /**
- * 
- *
  * @author Franz-Josef Elmer
  */
-public abstract class AbstractViewer<T extends IClientServiceAsync> extends LayoutContainer
+public abstract class AbstractViewer<T extends IClientServiceAsync> extends ContentPanel
 {
     protected final IViewContext<T> viewContext;
 
     public AbstractViewer(final IViewContext<T> viewContext)
     {
         this.viewContext = viewContext;
+        setHeaderVisible(false);
+        setBodyBorder(false);
+        setBorders(false);
     }
-    
+
     public abstract void loadData();
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
index 6a131248e6d66704a4627d93ed76ed52c1a59077..998a217c48fe416feded497654ee0422da446e1e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/ExperimentBO.java
@@ -34,9 +34,11 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentTypePropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
+import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier;
@@ -328,4 +330,19 @@ public final class ExperimentBO extends AbstractBusinessObject implements IExper
                 newProperties, registrator));
     }
 
+    public void enrichWithTypeDetails()
+    {
+        if (experiment != null)
+        {
+            for (ExperimentTypePropertyTypePE etpt : experiment.getExperimentType()
+                    .getExperimentTypePropertyTypes())
+            {
+                final VocabularyPE vocabulary = etpt.getPropertyType().getVocabulary();
+                if (vocabulary != null)
+                {
+                    HibernateUtils.initialize(vocabulary.getTerms());
+                }
+            }
+        }
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExperimentBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExperimentBO.java
index 0cbef8d614a9edef26e01a4d29a7c778f3a75587..4aef133dee3b7f08b356ee19f443a88ce1a72062 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExperimentBO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IExperimentBO.java
@@ -66,4 +66,10 @@ public interface IExperimentBO extends IBusinessObject
      */
     public void edit(ExperimentIdentifier identifier, List<ExperimentProperty> properties,
             List<AttachmentPE> attachments, ProjectIdentifier newProjectIdentifier);
+
+    /**
+     * Adds experiment type details.
+     */
+    public void enrichWithTypeDetails();
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
index cb6b0d52bf11876588b1d2414875da7d49fd90e0..eaf9b4990bdaea334374cafc4faf2d8bff9ad880 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
@@ -17,16 +17,32 @@
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment;
 
 import com.extjs.gxt.ui.client.Style.Scroll;
+import com.extjs.gxt.ui.client.event.SelectionListener;
+import com.extjs.gxt.ui.client.event.ToolBarEvent;
 import com.extjs.gxt.ui.client.util.Margins;
 import com.extjs.gxt.ui.client.widget.LayoutContainer;
 import com.extjs.gxt.ui.client.widget.layout.RowData;
+import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
+import com.extjs.gxt.ui.client.widget.toolbar.TextToolItem;
+import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
 import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPlugin;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifierHolder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EditableExperiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentProperty;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentTypePropertyType;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync;
 
 /**
@@ -42,12 +58,43 @@ public final class GenericExperimentViewer extends AbstractViewer<IGenericClient
 
     private final String experimentIdentifier;
 
+    private TextToolItem editButton;
+
     public GenericExperimentViewer(final IViewContext<IGenericClientServiceAsync> viewContext,
             final String experimentIdentifier)
     {
         super(viewContext);
         setId(createId(experimentIdentifier));
         this.experimentIdentifier = experimentIdentifier;
+        final ToolBar toolBar = new ToolBar();
+        setTopComponent(toolBar);
+        toolBar.add(new FillToolItem());
+        editButton = new TextToolItem(viewContext.getMessage(Dict.BUTTON_EDIT));
+        toolBar.add(editButton);
+    }
+
+    private SelectionListener<ToolBarEvent> createEditListener(final Experiment experiment)
+    {
+        return new SelectionListener<ToolBarEvent>()
+            {
+                @Override
+                public void componentSelected(ToolBarEvent ce)
+                {
+                    final IClientPluginFactory clientPluginFactory =
+                            viewContext.getClientPluginFactoryProvider().getClientPluginFactory(
+                                    EntityKind.EXPERIMENT, experiment.getExperimentType());
+                    final IClientPlugin<ExperimentType, ExperimentTypePropertyType, ExperimentProperty, IIdentifierHolder, EditableExperiment> createClientPlugin =
+                            clientPluginFactory.createClientPlugin(EntityKind.EXPERIMENT);
+                    final ITabItemFactory tabView =
+                            createClientPlugin.createEntityEditor(new EditableExperiment(experiment
+                                    .getExperimentType().getExperimentTypePropertyTypes(),
+                                    experiment.getProperties(), experiment.getExperimentType(),
+                                    experiment.getIdentifier(), experiment.getId(), experiment
+                                            .getModificationDate(), experiment.getProject()
+                                            .getIdentifier(), experiment.getCode()));
+                    DispatcherHelper.dispatchNaviEvent(tabView);
+                }
+            };
     }
 
     public static String createId(String experimentIdentifier)
@@ -70,7 +117,7 @@ public final class GenericExperimentViewer extends AbstractViewer<IGenericClient
                 new ExperimentInfoCallback(viewContext, this));
     }
 
-    public static final class ExperimentInfoCallback extends AbstractAsyncCallback<Experiment>
+    public final class ExperimentInfoCallback extends AbstractAsyncCallback<Experiment>
     {
         private final GenericExperimentViewer genericExperimentViewer;
 
@@ -94,6 +141,7 @@ public final class GenericExperimentViewer extends AbstractViewer<IGenericClient
         @Override
         protected final void process(final Experiment result)
         {
+            editButton.addSelectionListener(createEditListener(result));
             genericExperimentViewer.removeAll();
             genericExperimentViewer.setScrollMode(Scroll.AUTO);
             addSection(genericExperimentViewer,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
index 93f31166502050cb42e795ea12115760749cf841..102ca106976126a21d4f9806eaafc8f93882ff6e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
@@ -138,6 +138,7 @@ public final class GenericServer extends AbstractPluginServer<IGenericServer> im
         experimentBO.loadByExperimentIdentifier(identifier);
         experimentBO.enrichWithProperties();
         experimentBO.enrichWithAttachments();
+        experimentBO.enrichWithTypeDetails();
         final ExperimentPE experiment = experimentBO.getExperiment();
         return experiment;
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
index be472bcf8a1f869fe811fa51a2e4275bbd204708..6e5ecb1a22e3517e59877a078150a150248b8f34 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServerTest.java
@@ -158,6 +158,7 @@ public final class GenericServerTest extends AbstractServerTestCase
                     one(experimentBO).loadByExperimentIdentifier(experimentIdentifier);
                     one(experimentBO).enrichWithProperties();
                     one(experimentBO).enrichWithAttachments();
+                    one(experimentBO).enrichWithTypeDetails();
 
                     one(experimentBO).getExperiment();
                     will(returnValue(experimentPE));