diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SampleValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SampleValidator.java
index 2ef322d7b7b487176a6835b13ecd3dcf879b35b3..230d4d6c3a4573f98564208b55fb203237a9f2da 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SampleValidator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SampleValidator.java
@@ -19,7 +19,6 @@ package ch.systemsx.cisd.openbis.generic.server.authorization.validator;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
-import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE;
 
 /**
  * A {@link IValidator} implementation suitable for {@link Sample}.
@@ -49,15 +48,7 @@ public final class SampleValidator extends AbstractValidator<Sample>
             return matchesSpace(person, space);
         } else
         {
-
-            for (RoleAssignmentPE assignment : person.getRoleAssignments())
-            {
-                if (assignment.getSpace() == null)
-                {
-                    return true;
-                }
-            }
-            return false;
+            return person.getRoleAssignments().isEmpty() == false;
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SimpleSpaceValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SimpleSpaceValidator.java
index 0842bcc92c4c3129f5a3a8aa7e50c5bac2579e73..d786ffd5fe22297ef6ba1c8b135c6801ae2670e8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SimpleSpaceValidator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/SimpleSpaceValidator.java
@@ -33,10 +33,15 @@ public class SimpleSpaceValidator extends AbstractValidator<ICodeHolder>
     public boolean doValidation(PersonPE person, ICodeHolder value)
     {
         final Set<RoleAssignmentPE> roleAssignments = person.getAllPersonRoles();
+        String spaceCode = value.getCode();
+        if (spaceCode == null && roleAssignments.isEmpty() == false)
+        {
+            return true;
+        }
         for (final RoleAssignmentPE roleAssignment : roleAssignments)
         {
             final SpacePE space = roleAssignment.getSpace();
-            if ((space != null && space.getCode().equals(value.getCode()))
+            if ((space != null && space.getCode().equals(spaceCode))
                     || space == null)
             {
                 return true;
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchSampleTest.java
index 0e0473ee3584c775c15bbe097606bf652cf8ab36..c3a18e427098a30374f9288296c6e6852e0929fa 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchSampleTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchSampleTest.java
@@ -49,11 +49,11 @@ public class SearchSampleTest extends AbstractSampleTest
 {
 
     @Test
-    public void testSearchWithEmptyCriteria()
+    public void testSearchWhichReturnsSharedSamplesForSpaceUser()
     {
-        testSearch(TEST_SPACE_USER, new SampleSearchCriteria(), "/TEST-SPACE/FV-TEST", "/TEST-SPACE/EV-TEST", "/TEST-SPACE/EV-INVALID",
-                "/TEST-SPACE/EV-NOT_INVALID", "/TEST-SPACE/EV-PARENT", "/TEST-SPACE/EV-PARENT-NORMAL", "/TEST-SPACE/CP-TEST-4",
-                "/TEST-SPACE/SAMPLE-TO-DELETE");
+        SampleSearchCriteria sampleSearchCriteria = new SampleSearchCriteria();
+        sampleSearchCriteria.withCode().thatEndsWith("P");
+        testSearch(TEST_SPACE_USER, sampleSearchCriteria, "/DP", "/MP");
     }
 
     @Test
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
index e6ef8d91fdb3069a5b3fc4c2a3a8d5ffce15a7eb..eccc0531d697e806ea499544286ab17ff6b77ab4 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java
@@ -193,7 +193,7 @@ public class GeneralInformationServiceTest extends SystemTestCase
         loginAsObserver();
         samples = generalInformationService.searchForSamples(sessionToken, searchCriteria);
 
-        assertEntities("[]", samples);
+        assertEntities("[/MP]", samples);
     }
 
     @Test
@@ -424,7 +424,7 @@ public class GeneralInformationServiceTest extends SystemTestCase
                 generalInformationService.searchForSamples(sessionToken, searchCriteria,
                         fetchOptions);
 
-        assertEntities("[]", samples);
+        assertEntities("[/DP]", samples);
     }
 
     @Test
@@ -537,7 +537,7 @@ public class GeneralInformationServiceTest extends SystemTestCase
                 generalInformationService.searchForSamples(sessionToken, searchCriteria,
                         fetchOptions);
 
-        assertEntities("[]", samples);
+        assertEntities("[/DP]", samples);
     }
 
     @Test
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/authorization/ETLServiceAuthorizationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/authorization/ETLServiceAuthorizationTest.java
index adea353f539ceb64f41e75b423c3a33811b831d4..3b472a8ba58038fd3cd6842d8f11355f43820f18 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/authorization/ETLServiceAuthorizationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/authorization/ETLServiceAuthorizationTest.java
@@ -41,6 +41,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode;
 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;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO;
@@ -71,6 +72,10 @@ public class ETLServiceAuthorizationTest extends BaseTest
 
     private Project anotherProject;
 
+    private Sample sharedSample;
+
+    private Sample childSharedSample;
+
     @BeforeMethod
     public void createSomeEntities()
     {
@@ -80,6 +85,8 @@ public class ETLServiceAuthorizationTest extends BaseTest
         anotherProject = create(aProject().inSpace(anotherSpace));
         experiment = create(anExperiment().inProject(project));
         sample = create(aSample().inExperiment(experiment));
+        sharedSample = create(aSample());
+        childSharedSample = create(aSample().withParent(sharedSample));
         create(aSample().inExperiment(experiment));
     }
 
@@ -94,6 +101,17 @@ public class ETLServiceAuthorizationTest extends BaseTest
 
         assertEquals(2, samples.size());
     }
+    
+    @Test
+    public void testListSharedSampleByASpaceUser()
+    {
+        String sessionToken = create(aSession().withSpaceRole(RoleWithHierarchy.SPACE_USER, space));
+
+        List<Sample> samples = etlService.listSamples(sessionToken, ListSampleCriteria.createForParent(new TechId(sharedSample)));
+        
+        assertEquals(childSharedSample.getId(), samples.get(0).getId());
+        assertEquals(1, samples.size());
+    }
 
     @Test(expectedExceptions =
     { AuthorizationFailureException.class })