diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesSection.java
new file mode 100644
index 0000000000000000000000000000000000000000..80be0ffe392ef378ca7a58b4e98d84e0a9862ad8
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/ExperimentPropertiesSection.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2008 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment;
+
+import static ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames.REGISTRATION_DATE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames.REGISTRATOR;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+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.ui.PropertyValueRenderers;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.PropertyGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentProperty;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentType;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Invalidation;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Person;
+
+/**
+ * {@link SectionPanel} containing experiment properties.
+ * 
+ * @author Izabela Adamczyk
+ */
+public class ExperimentPropertiesSection extends SectionPanel
+{
+    public static final String PROPERTIES_ID_PREFIX =
+            GenericConstants.ID_PREFIX + "experiment-properties-section_";
+
+    private final Experiment experiment;
+
+    private final IViewContext<?> viewContext;
+
+    public ExperimentPropertiesSection(final Experiment experiment,
+            final IViewContext<?> viewContext)
+    {
+        super("Experiment properties");
+        this.experiment = experiment;
+        this.viewContext = viewContext;
+        add(createPropertyGrid());
+    }
+
+    private final PropertyGrid createPropertyGrid()
+    {
+        final IMessageProvider messageProvider = viewContext.getMessageProvider();
+        final Map<String, Object> properties = createProperties(messageProvider);
+        final PropertyGrid propertyGrid = new PropertyGrid(messageProvider, properties.size());
+        propertyGrid.getElement()
+                .setId(PROPERTIES_ID_PREFIX + experiment.getExperimentIdentifier());
+        propertyGrid.registerPropertyValueRenderer(Person.class, PropertyValueRenderers
+                .createPersonPropertyValueRenderer(messageProvider));
+        propertyGrid.registerPropertyValueRenderer(ExperimentType.class, PropertyValueRenderers
+                .createExperimentTypePropertyValueRenderer(messageProvider));
+        propertyGrid.registerPropertyValueRenderer(Invalidation.class, PropertyValueRenderers
+                .createInvalidationPropertyValueRenderer(messageProvider));
+        propertyGrid.registerPropertyValueRenderer(ExperimentProperty.class, PropertyValueRenderers
+                .createExperimentPropertyPropertyValueRenderer(messageProvider));
+        propertyGrid.setProperties(properties);
+        return propertyGrid;
+    }
+
+    private final Map<String, Object> createProperties(final IMessageProvider messageProvider)
+    {
+        final Map<String, Object> properties = new LinkedHashMap<String, Object>();
+        final ExperimentType experimentType = experiment.getExperimentType();
+        final Invalidation invalidation = experiment.getInvalidation();
+        properties.put(messageProvider.getMessage("experiment"), experiment.getCode());
+        properties.put(messageProvider.getMessage("experiment_type"), experimentType);
+        properties.put(messageProvider.getMessage(REGISTRATOR), experiment.getRegistrator());
+        properties.put(messageProvider.getMessage(REGISTRATION_DATE), experiment
+                .getRegistrationDate());
+        if (invalidation != null)
+        {
+            properties.put(messageProvider.getMessage("invalidation"), invalidation);
+        }
+        for (final ExperimentProperty property : experiment.getProperties())
+        {
+            final String simpleCode =
+                    property.getEntityTypePropertyType().getPropertyType().getLabel();
+            properties.put(simpleCode, property);
+        }
+        return properties;
+    }
+}
\ No newline at end of file
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 a5c5641354a6e75d5057e3b4906ded9c157fb9cf..d3a0b6799b3e7b48428eb77e933c1b8d673e316f 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
@@ -16,15 +16,8 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment;
 
-import static ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames.REGISTRATION_DATE;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames.REGISTRATOR;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
 import com.extjs.gxt.ui.client.Style.Scroll;
 import com.extjs.gxt.ui.client.util.Margins;
-import com.extjs.gxt.ui.client.widget.ContentPanel;
 import com.extjs.gxt.ui.client.widget.LayoutContainer;
 import com.extjs.gxt.ui.client.widget.layout.RowData;
 import com.google.gwt.user.client.ui.Widget;
@@ -32,14 +25,7 @@ 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.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.PropertyValueRenderers;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property.PropertyGrid;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Experiment;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentProperty;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentType;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Invalidation;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Person;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync;
 
 /**
@@ -53,9 +39,6 @@ public final class GenericExperimentViewer extends LayoutContainer
 
     public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX;
 
-    public static final String PROPERTIES_ID_PREFIX =
-            GenericConstants.ID_PREFIX + "generic-experiment-properties-viewer_";
-
     private final IViewContext<IGenericClientServiceAsync> viewContext;
 
     private final String experimentIdentifier;
@@ -68,73 +51,9 @@ public final class GenericExperimentViewer extends LayoutContainer
         this.viewContext = viewContext;
     }
 
-    private final static ContentPanel createSection(final String heading, final Widget container)
-    {
-        final ContentPanel panel = new ContentPanel();
-        panel.setHeaderVisible(true);
-        panel.setBorders(true);
-        panel.setHeading(heading);
-        panel.setCollapsible(true);
-        panel.setAnimCollapse(false);
-        panel.add(container, new RowData(-1, -1, new Margins(5)));
-        panel.setBodyBorder(false);
-        return panel;
-    }
-
-    private static ContentPanel createGeneralInfo(final Experiment experiment,
-            final IViewContext<?> viewContext)
-    {
-        final ContentPanel panel = new ContentPanel();
-        panel.setBorders(false);
-        panel.setBodyBorder(false);
-        panel.setHeaderVisible(false);
-        panel.setScrollMode(Scroll.AUTOY);
-        panel.add(createPropertyGrid(experiment, viewContext));
-        return createSection("Experiment properties", panel);
-    }
-
-    private final static Map<String, Object> createProperties(
-            final IMessageProvider messageProvider, final Experiment experiment)
-    {
-        final Map<String, Object> properties = new LinkedHashMap<String, Object>();
-        final ExperimentType experimentType = experiment.getExperimentType();
-        final Invalidation invalidation = experiment.getInvalidation();
-        properties.put(messageProvider.getMessage("experiment"), experiment.getCode());
-        properties.put(messageProvider.getMessage("experiment_type"), experimentType);
-        properties.put(messageProvider.getMessage(REGISTRATOR), experiment.getRegistrator());
-        properties.put(messageProvider.getMessage(REGISTRATION_DATE), experiment
-                .getRegistrationDate());
-        if (invalidation != null)
-        {
-            properties.put(messageProvider.getMessage("invalidation"), invalidation);
-        }
-        for (final ExperimentProperty property : experiment.getProperties())
-        {
-            final String simpleCode =
-                    property.getEntityTypePropertyType().getPropertyType().getLabel();
-            properties.put(simpleCode, property);
-        }
-        return properties;
-    }
-
-    static private final PropertyGrid createPropertyGrid(final Experiment experiment,
-            final IViewContext<?> viewContext)
+    private static void addSection(final LayoutContainer lc, final Widget w)
     {
-        final IMessageProvider messageProvider = viewContext.getMessageProvider();
-        final Map<String, Object> properties = createProperties(messageProvider, experiment);
-        final PropertyGrid propertyGrid = new PropertyGrid(messageProvider, properties.size());
-        propertyGrid.getElement()
-                .setId(PROPERTIES_ID_PREFIX + experiment.getExperimentIdentifier());
-        propertyGrid.registerPropertyValueRenderer(Person.class, PropertyValueRenderers
-                .createPersonPropertyValueRenderer(messageProvider));
-        propertyGrid.registerPropertyValueRenderer(ExperimentType.class, PropertyValueRenderers
-                .createExperimentTypePropertyValueRenderer(messageProvider));
-        propertyGrid.registerPropertyValueRenderer(Invalidation.class, PropertyValueRenderers
-                .createInvalidationPropertyValueRenderer(messageProvider));
-        propertyGrid.registerPropertyValueRenderer(ExperimentProperty.class, PropertyValueRenderers
-                .createExperimentPropertyPropertyValueRenderer(messageProvider));
-        propertyGrid.setProperties(properties);
-        return propertyGrid;
+        lc.add(w, new RowData(-1, -1, new Margins(5)));
     }
 
     /**
@@ -173,8 +92,8 @@ public final class GenericExperimentViewer extends LayoutContainer
         {
             genericExperimentViewer.removeAll();
             genericExperimentViewer.setScrollMode(Scroll.AUTO);
-            genericExperimentViewer.add(createGeneralInfo(result, viewContext), new RowData(-1, -1,
-                    new Margins(5)));
+            addSection(genericExperimentViewer,
+                    new ExperimentPropertiesSection(result, viewContext));
             genericExperimentViewer.layout();
         }
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/SectionPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/SectionPanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..0bcaf49d1186e705af722bffc75da7bedb2748e7
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/SectionPanel.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2008 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+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.widget.ContentPanel;
+
+/**
+ * {@link ContentPanel} configured for Experiment Viewer.
+ * 
+ * @author Izabela Adamczyk
+ */
+public class SectionPanel extends ContentPanel
+{
+    public SectionPanel(final String header)
+    {
+        setHeaderVisible(true);
+        setBorders(true);
+        setHeading(header);
+        setCollapsible(true);
+        setAnimCollapse(false);
+        setBodyBorder(false);
+        setScrollMode(Scroll.AUTOY);
+    }
+}
\ No newline at end of file