diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
index 7a24c8365d88b4cb02b2c6d7f0476bf5618fbf7b..e725f581f8bd45c45718e287af1763fd42c79d52 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
@@ -52,7 +52,7 @@ public final class ProjectSelectionWidget extends
     // @Private
     static final String DISPLAY_COLUMN_ID = "id";
 
-    static class ProjectComboModel extends SimplifiedBaseModelData
+    public static class ProjectComboModel extends SimplifiedBaseModelData
     {
         private static final long serialVersionUID = 1L;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ApplicationInfo.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ApplicationInfo.java
index 59b4c957ec4f8a8ced11901e7f04ab1d6abf0634..c8a023707ee63aa396d4bc575307a0a4828cc816 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ApplicationInfo.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ApplicationInfo.java
@@ -45,6 +45,8 @@ public final class ApplicationInfo implements IsSerializable
 
     private boolean archivingConfigured;
 
+    private boolean projectSamplesEnabled;
+
     private WebClientConfiguration webClientConfiguration;
 
     private Set<String> enabledTechnologies;
@@ -167,4 +169,14 @@ public final class ApplicationInfo implements IsSerializable
         }
     }
 
+    public boolean isProjectSamplesEnabled()
+    {
+        return projectSamplesEnabled;
+    }
+
+    public void setProjectSamplesEnabled(boolean projectSamplesEnabled)
+    {
+        this.projectSamplesEnabled = projectSamplesEnabled;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
index 8a3d42ea6c1eb3eedc4e0428f67481e03ea54891..abc4dfb9a06c62ffed4ad66c458f01b7e8774dd5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
@@ -474,6 +474,7 @@ public abstract class AbstractClientService implements IClientService,
         applicationInfo.setCustomImports(extractCustomImportProperties());
         applicationInfo.setWebapps(extractWebAppsProperties());
         applicationInfo.setArchivingConfigured(isArchivingConfigured());
+        applicationInfo.setProjectSamplesEnabled(isProjectSamplesEnabled());
         applicationInfo.setVersion(getVersion());
         return applicationInfo;
     }
@@ -552,6 +553,18 @@ public abstract class AbstractClientService implements IClientService,
         return false;
     }
 
+    private boolean isProjectSamplesEnabled()
+    {
+        try
+        {
+            return getServer().isProjectSamplesEnabled(getSessionToken());
+        } catch (InvalidSessionException e)
+        {
+            // ignored
+        }
+        return false;
+    }
+
     @Override
     public final SessionContext tryToGetCurrentSessionContext(boolean anonymous, String sessionIdOrNull)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
index 4c68ec20e177948b930a00089c64bb6c78124044..7a614918a5266f8a888a731c20a4c683d17b67dc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
@@ -82,6 +82,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.GridCustomColumnPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSession;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
@@ -742,6 +743,12 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp
         return false;
     }
 
+    @Override
+    public boolean isProjectSamplesEnabled(String sessionToken)
+    {
+        return SamplePE.projectSamplesEnabled;
+    }
+
     @SuppressWarnings("deprecation")
     @Override
     public void saveDisplaySettings(String sessionToken, final DisplaySettings displaySettings,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
index 5e747d691986528d5354f7b8ecaef1c3ff6a6df0..da9762509b7a264904137c82c8e4bf30f3dba6fe 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
@@ -56,6 +56,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifi
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleOwnerIdentifier;
@@ -146,6 +147,7 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
                 tryFindExperiment(experimentCacheOrNull, experimentIdentifier,
                         newSample.getDefaultSpaceIdentifier());
         updateModifierAndModificationDate(experimentPE);
+
         final SamplePE samplePE = new SamplePE();
         samplePE.setExperiment(experimentPE);
         samplePE.setCode(sampleIdentifier.getSampleSubCode());
@@ -153,6 +155,14 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
         samplePE.setRegistrator(registrator);
         samplePE.setSampleType(sampleTypePE);
         samplePE.setSpace(sampleOwner.tryGetSpace());
+
+        String projectIdentifier = newSample.getProjectIdentifier();
+        if (projectIdentifier != null)
+        {
+            ProjectPE project = findProject(new ProjectIdentifierFactory(projectIdentifier).createIdentifier());
+            samplePE.setProject(project);
+        }
+
         RelationshipUtils.updateModificationDateAndModifier(samplePE, registrator, getTransactionTimeStamp());
         defineSampleProperties(samplePE, newSample.getProperties());
         String containerIdentifier = newSample.getContainerIdentifierForNewSample();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java
index b37bc9ba85a475bd7fe0ecc147252778c1bcc0ef..1cc8cdaada6237d59e79e577815bfc5f229041db 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java
@@ -349,6 +349,13 @@ public abstract class AbstractServerLogger implements IServer
         return false;
     }
 
+    @Override
+    public boolean isProjectSamplesEnabled(String sessionToken)
+    {
+        // Do not log that
+        return false;
+    }
+
     @Override
     public void saveDisplaySettings(String sessionToken, DisplaySettings displaySettings,
             int maxEntityVisits)
@@ -400,8 +407,7 @@ public abstract class AbstractServerLogger implements IServer
     @Override
     public void setSessionUser(String sessionToken, String userID)
     {
-        logMessage(authLog, Level.INFO, sessionToken, "set_session_user", "USER(%s)", new Object[]
-        { userID });
+        logMessage(authLog, Level.INFO, sessionToken, "set_session_user", "USER(%s)", new Object[] { userID });
     }
 
     public int unarchiveDatasets(String sessionToken, List<String> datasetCodes)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java
index 2812360664af21b6a833ec63d0a97f643bdb0d4a..e692db741da646e2f6e91d01052312dfb2e7afac 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java
@@ -54,6 +54,12 @@ public interface IServer extends ISessionProvider
     @Transactional(readOnly = true)
     public boolean isArchivingConfigured(final String sessionToken);
 
+    /**
+     * @return 'true' if project samples are enabled.
+     */
+    @Transactional(readOnly = true)
+    public boolean isProjectSamplesEnabled(final String sessionToken);
+
     /**
      * Tries to authenticate the specified user with given password.
      * 
@@ -127,8 +133,7 @@ public interface IServer extends ISessionProvider
      * Deactivates specified persons.
      */
     @Transactional
-    @DatabaseCreateOrDeleteModification(value =
-    { ObjectKind.PERSON, ObjectKind.AUTHORIZATION_GROUP, ObjectKind.ROLE_ASSIGNMENT })
+    @DatabaseCreateOrDeleteModification(value = { ObjectKind.PERSON, ObjectKind.AUTHORIZATION_GROUP, ObjectKind.ROLE_ASSIGNMENT })
     public void deactivatePersons(String sessionToken, List<String> personsCodes);
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java
index a982ec05d7bc42da0a349f3d76b4490e235e70b9..a25ee5cebf5569a92a98ad82141fc13cc950e8a0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java
@@ -79,6 +79,11 @@ public class NewSample extends Identifier<NewSample> implements Comparable<NewSa
      */
     private String experimentIdentifier;
 
+    /**
+     * The project identifier.
+     */
+    private String projectIdentifier;
+
     /***
      * The space code for this row home space
      */
@@ -236,6 +241,16 @@ public class NewSample extends Identifier<NewSample> implements Comparable<NewSa
         this.experimentIdentifier = toUpperCase(experimentIdentifier);
     }
 
+    public String getProjectIdentifier()
+    {
+        return projectIdentifier;
+    }
+
+    public void setProjectIdentifier(String projectIdentifier)
+    {
+        this.projectIdentifier = toUpperCase(projectIdentifier);
+    }
+
     public String getDefaultSpaceIdentifier()
     {
         return defaultSpaceIdentifier;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
index e027fa1ba6b8b6179dc89cfa7cd19f05d0ffdc1b..6f46dad6463a467cd2bcf5f3dc9283d736e8e0ee 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/AbstractGenericSampleRegisterEditForm.java
@@ -24,10 +24,14 @@ import java.util.Map;
 
 import com.extjs.gxt.ui.client.event.ButtonEvent;
 import com.extjs.gxt.ui.client.event.Events;
+import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
+import com.extjs.gxt.ui.client.event.SelectionChangedListener;
 import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.widget.button.Button;
 import com.extjs.gxt.ui.client.widget.form.Field;
 import com.extjs.gxt.ui.client.widget.form.FormPanel;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 
 import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
@@ -40,9 +44,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.SampleTypeDisplayID;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.SpaceModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceSelectionWidget;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ProjectSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ExperimentChooserField.ExperimentChooserFieldAdaptor;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.IChosenEntitiesListener;
@@ -59,6 +65,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifi
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleTypePropertyType;
@@ -91,6 +98,10 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
 
     protected String simpleId;
 
+    private String initialProjectIdentifierOrNull;
+
+    protected ProjectSelectionWidget projectChooser;
+
     protected ExperimentChooserFieldAdaptor experimentField;
 
     private ExperimentIdentifier initialExperimentIdentifierOrNull;
@@ -111,6 +122,8 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
 
     private Sample parentOrNull;
 
+    private boolean projectSamplesEnabled;
+
     protected AbstractGenericSampleRegisterEditForm(
             IViewContext<IGenericClientServiceAsync> viewContext,
             Map<String, List<IManagedInputWidgetDescription>> inputWidgetDescriptions,
@@ -127,9 +140,10 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
         super(viewContext, inputWidgetDescriptions, identifiable, EntityKind.SAMPLE);
         this.simpleId = createSimpleId(identifiable, EntityKind.SAMPLE);
         this.attachmentsSessionKey = simpleId + "_attachments";
-        List<String> sesionKeys = new ArrayList<String>();
-        sesionKeys.add(attachmentsSessionKey);
-        addUploadFeatures(sesionKeys);
+        List<String> sessionKeys = new ArrayList<String>();
+        sessionKeys.add(attachmentsSessionKey);
+        this.projectSamplesEnabled = viewContext.getModel().getApplicationInfo().isProjectSamplesEnabled();
+        addUploadFeatures(sessionKeys);
         extractInitialValues(actionContext);
         saveUploadButton = createSaveAndUploadButton();
         ApplicationInfo applicationInfo = viewContext.getModel().getApplicationInfo();
@@ -163,8 +177,30 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
     private ExperimentChooserFieldAdaptor createExperimentField()
     {
         String label = viewContext.getMessage(Dict.EXPERIMENT);
-        return ExperimentChooserField.create(label, false, initialExperimentIdentifierOrNull,
+        ExperimentChooserFieldAdaptor experimentField = ExperimentChooserField.create(label, false, initialExperimentIdentifierOrNull,
                 viewContext.getCommonViewContext());
+
+        experimentField.getChooserField().setId(getId() + ID_SUFFIX_EXPERIMENT);
+        experimentField.getChooserField().addChosenEntityListener(
+                new IChosenEntitiesListener<TableModelRowWithObject<Experiment>>()
+                    {
+                        @Override
+                        public void entitiesChosen(
+                                List<TableModelRowWithObject<Experiment>> entities)
+                        {
+                            if (entities.isEmpty() == false)
+                            {
+                                groupSelectionWidget.setValue(new SpaceModel(entities.get(0)
+                                        .getObjectOrNull().getProject().getSpace()));
+                                if (projectChooser != null)
+                                {
+                                    projectChooser.setValue(new ProjectSelectionWidget.ProjectComboModel(entities.get(0)
+                                            .getObjectOrNull().getProject(), true));
+                                }
+                            }
+                        }
+                    });
+        return experimentField;
     }
 
     @Override
@@ -245,7 +281,7 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
                     {
                         DispatcherHelper.dispatchNaviEvent(new ComponentProvider(viewContext
                                 .getCommonViewContext())
-                                .getDataSetUploadTab(sampleIdentifierForUploadOrNull));
+                                        .getDataSetUploadTab(sampleIdentifierForUploadOrNull));
                     }
                     sampleIdentifierForUploadOrNull = null;
                 }
@@ -276,6 +312,10 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
         List<DatabaseModificationAwareField<?>> fields =
                 new ArrayList<DatabaseModificationAwareField<?>>();
         fields.add(wrapUnaware(experimentField.getField()));
+        if (projectSamplesEnabled)
+        {
+            fields.add(projectChooser.asDatabaseModificationAware());
+        }
         fields.add(groupSelectionWidget.asDatabaseModificationAware());
         fields.add(wrapUnaware(parentsArea));
         fields.add(wrapUnaware(parentButton.getField()));
@@ -327,13 +367,101 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
                 new SpaceSelectionWidget(viewContext, getId(), true, false, initialSpaceCodeOrNull);
         groupSelectionWidget.setId("register-sample-space-selection");
         FieldUtil.markAsMandatory(groupSelectionWidget);
+
+        if (projectSamplesEnabled)
+        {
+            projectChooser =
+                    new ProjectSelectionWidget(viewContext, simpleId, initialProjectIdentifierOrNull);
+            projectChooser.setFieldLabel(viewContext.getMessage(Dict.PROJECT));
+            projectChooser.addSelectionChangedListener(new SelectionChangedListener<ProjectSelectionWidget.ProjectComboModel>()
+                {
+                    @Override
+                    public void selectionChanged(SelectionChangedEvent<ProjectSelectionWidget.ProjectComboModel> se_)
+                    {
+                        final SelectionChangedEvent<ProjectSelectionWidget.ProjectComboModel> se = se_;
+                        Scheduler.get().scheduleDeferred(new ScheduledCommand()
+                            {
+                                @Override
+                                public void execute()
+                                {
+
+                                    if (se.getSelectedItem() == null)
+                                    {
+                                        return;
+                                    }
+
+                                    Project project = se.getSelectedItem().get(ModelDataPropertyNames.OBJECT);
+                                    ExperimentIdentifier currentExperiment = experimentField.tryToGetValue();
+                                    if (currentExperiment != null
+                                            && currentExperiment.getIdentifier().startsWith(project.getIdentifier() + "/") == false)
+                                    {
+                                        experimentField.getChooserField().setValue(null);
+                                    }
+
+                                    SpaceModel currentSpace = groupSelectionWidget.getValue();
+                                    String currentSpaceCode = null;
+                                    if (currentSpace != null)
+                                    {
+                                        currentSpaceCode = currentSpace.getBaseObject().getCode();
+                                    }
+
+                                    String newSpaceCode = project.getSpace().getCode();
+
+                                    if (currentSpace == null || currentSpaceCode.equals(newSpaceCode) == false)
+                                    {
+                                        groupSelectionWidget.setValue(new SpaceModel(project.getSpace()));
+                                    }
+                                }
+                            });
+                    }
+                });
+            FieldUtil.setMandatoryFlag(projectChooser, false);
+        }
+
         groupSelectionWidget.setFieldLabel(viewContext.getMessage(Dict.GROUP));
+        groupSelectionWidget.addSelectionChangedListener(new SelectionChangedListener<SpaceModel>()
+            {
+                @Override
+                public void selectionChanged(SelectionChangedEvent<SpaceModel> se_)
+                {
+                    final SelectionChangedEvent<SpaceModel> se = se_;
+
+                    Scheduler.get().scheduleDeferred(new ScheduledCommand()
+                        {
+                            @Override
+                            public void execute()
+                            {
+                                ExperimentIdentifier currentExperiment = experimentField.tryToGetValue();
+                                if (currentExperiment != null
+                                        && currentExperiment.getIdentifier()
+                                                .startsWith("/" + se.getSelectedItem().getBaseObject().getCode() + "/") == false)
+                                {
+                                    experimentField.getChooserField().setValue(null);
+                                }
+
+                                if (projectChooser != null && projectChooser.getValue() != null &&
+                                        ((Project) projectChooser.getValue().get(ModelDataPropertyNames.OBJECT)).getSpace().getCode() != se
+                                                .getSelectedItem().getBaseObject().getCode())
+                                {
+                                    String currentProjectSpace =
+                                            ((Project) projectChooser.getValue().get(ModelDataPropertyNames.OBJECT)).getSpace().getCode();
+                                    String newSpace = se.getSelectedItem().getBaseObject().getCode();
+                                    if (currentProjectSpace.equals(newSpace) == false)
+                                    {
+                                        projectChooser.setValue(null);
+                                    }
+                                }
+                            }
+                        });
+                }
+            });
         parentButton =
                 SampleChooserButton.create(null, viewContext.getMessage(Dict.ADD_PARENT), true,
                         false, false, viewContext.getCommonViewContext(), getId()
                                 + ID_SUFFIX_PARENT,
                         SampleTypeDisplayID.SAMPLE_REGISTRATION_PARENT_CHOOSER
-                                .withSuffix(getSampleTypeCode()), true);
+                                .withSuffix(getSampleTypeCode()),
+                        true);
         parentsArea = new ParentSamplesArea(viewContext, getId());
         SampleChooserButton parentChooserButton = parentButton.getChooserButton();
         parentChooserButton
@@ -353,23 +481,9 @@ abstract public class AbstractGenericSampleRegisterEditForm extends
                         true, false, false, viewContext.getCommonViewContext(), getId()
                                 + ID_SUFFIX_CONTAINER,
                         SampleTypeDisplayID.SAMPLE_REGISTRATION_CONTAINER_CHOOSER
-                                .withSuffix(getSampleTypeCode()), false);
+                                .withSuffix(getSampleTypeCode()),
+                        false);
         experimentField = createExperimentField();
-        experimentField.getChooserField().setId(getId() + ID_SUFFIX_EXPERIMENT);
-        experimentField.getChooserField().addChosenEntityListener(
-                new IChosenEntitiesListener<TableModelRowWithObject<Experiment>>()
-                    {
-                        @Override
-                        public void entitiesChosen(
-                                List<TableModelRowWithObject<Experiment>> entities)
-                        {
-                            if (entities.isEmpty() == false)
-                            {
-                                groupSelectionWidget.setValue(new SpaceModel(entities.get(0)
-                                        .getObjectOrNull().getProject().getSpace()));
-                            }
-                        }
-                    });
         attachmentsManager = new AttachmentsFileFieldManager(attachmentsSessionKey, viewContext);
         formPanel.addListener(Events.Submit, new FormPanelListener(infoBox)
             {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java
index 8d656c83f1797817109816681041c1486d7e0616..68b1f96e5a7710410b5b029acd0b55b0619061a9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationForm.java
@@ -24,6 +24,7 @@ import ch.systemsx.cisd.common.shared.basic.string.StringUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ActionContext;
 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.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.EntityLinkMessageElement;
@@ -33,6 +34,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
@@ -116,6 +118,16 @@ public final class GenericSampleRegistrationForm extends AbstractGenericSampleRe
                 (experimentField != null && experimentField.tryToGetValue() != null) ? experimentField
                         .tryToGetValue().getIdentifier() : null;
 
+        String projectIdentifier = null;
+        if (projectChooser != null && projectChooser.getValue() != null)
+        {
+            Project project = projectChooser.getValue().get(ModelDataPropertyNames.OBJECT);
+            if (project != null)
+            {
+                projectIdentifier = project.getIdentifier();
+            }
+        }
+
         final String containerOrNull = StringUtils.trimToNull(container.getValue());
         final NewSample newSample =
                 NewSample.createWithParents(createSampleIdentifier(), sampleType, containerOrNull,
@@ -124,6 +136,7 @@ public final class GenericSampleRegistrationForm extends AbstractGenericSampleRe
         newSample.setProperties(properties.toArray(IEntityProperty.EMPTY_ARRAY));
         newSample.setAttachments(attachmentsManager.extractAttachments());
         newSample.setExperimentIdentifier(experimentIdentifier);
+        newSample.setProjectIdentifier(projectIdentifier);
         newSample.setMetaprojectsOrNull(metaprojectArea.tryGetModifiedMetaprojects());
 
         viewContext.getService().registerSample(attachmentsSessionKey, newSample,