diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/FilterValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/FilterValidator.java
index 97ad702c968480bec0ffec6eb6ab017b0ef1524e..838782b9891609167d87606282eb7b0eb5464389 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/FilterValidator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/FilterValidator.java
@@ -33,7 +33,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.RoleCode;
  */
 public final class FilterValidator extends AbstractValidator<Filter>
 {
-    // TODO 2009-09-09, IA: add tests
     //
     // IValidator
     //
@@ -48,11 +47,10 @@ public final class FilterValidator extends AbstractValidator<Filter>
 
     private boolean isRegistrator(final PersonPE person, final Filter value)
     {
-        // Comparison between PersonPE and Person will always return false!!!
-        // return person.equals(value.getRegistrator());
-        // FIXME 2009-09-22, Piotr Buczek: Person has no database instance code to compare with PersonPE
         Person registrator = value.getRegistrator();
-        return person.getUserId().equals(registrator.getUserId());
+        return person.getUserId().equals(registrator.getUserId())
+                && person.getDatabaseInstance().getCode().equals(
+                        registrator.getDatabaseInstance().getCode());
     }
 
     public boolean isInstanceAdmin(final PersonPE person, final DatabaseInstance databaseInstance)
@@ -60,7 +58,6 @@ public final class FilterValidator extends AbstractValidator<Filter>
         final Set<RoleAssignmentPE> roleAssignments = person.getAllPersonRoles();
         for (final RoleAssignmentPE roleAssignment : roleAssignments)
         {
-            // TODO why do we use UUID instead of CODE if both are unique?
             final DatabaseInstancePE roleInstance = roleAssignment.getDatabaseInstance();
             if (roleInstance != null && roleInstance.getUuid().equals(databaseInstance.getUuid())
                     && roleAssignment.getRole().equals(RoleCode.ADMIN))
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Person.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Person.java
index b5fb913a069c0f49001b6203c6b8e15cfbf9575f..8fdde3892a96ec93e55b5a75f2f9134db091d4e4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Person.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/Person.java
@@ -21,7 +21,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 /**
  * The <i>GWT</i> equivalent to {@link PersonPE}.
  * 
- * @author     Franz-Josef Elmer
+ * @author Franz-Josef Elmer
  */
 public class Person extends AbstractRegistrationHolder implements Comparable<Person>
 {
@@ -35,6 +35,8 @@ public class Person extends AbstractRegistrationHolder implements Comparable<Per
 
     private String userId;
 
+    private DatabaseInstance databaseInstance;
+
     public final String getFirstName()
     {
         return firstName;
@@ -75,6 +77,43 @@ public class Person extends AbstractRegistrationHolder implements Comparable<Per
         this.userId = code;
     }
 
+    public DatabaseInstance getDatabaseInstance()
+    {
+        return databaseInstance;
+    }
+
+    public void setDatabaseInstance(DatabaseInstance databaseInstance)
+    {
+        this.databaseInstance = databaseInstance;
+    }
+
+    //
+    // Object
+    //
+
+    @Override
+    public boolean equals(Object obj)
+    {
+        assert getDatabaseInstance() != null;
+        if (obj == this)
+        {
+            return true;
+        }
+        if (obj instanceof Person == false)
+        {
+            return false;
+        }
+        final Person that = (Person) obj;
+        return getUserId().equals(that.getUserId())
+                && getDatabaseInstance().equals(that.getDatabaseInstance());
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return getUserId().hashCode();
+    }
+
     @Override
     public String toString()
     {
@@ -91,6 +130,10 @@ public class Person extends AbstractRegistrationHolder implements Comparable<Per
         return result.toString();
     }
 
+    //
+    // Comparable
+    //
+
     public int compareTo(final Person o)
     {
         if (o == null)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PersonTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PersonTranslator.java
index 3a23f31bb0ec83151f72f8d5301a8c6841daeb4a..a3a17844c917a58e39a9eb0530e43c152e7f8622 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PersonTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PersonTranslator.java
@@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 /**
  * A {@link Person} &lt;---&gt; {@link PersonPE} translator.
  * 
- * @author     Franz-Josef Elmer
+ * @author Franz-Josef Elmer
  */
 public class PersonTranslator
 {
@@ -63,6 +63,8 @@ public class PersonTranslator
         result.setLastName(StringEscapeUtils.escapeHtml(person.getLastName()));
         result.setEmail(StringEscapeUtils.escapeHtml(person.getEmail()));
         result.setUserId(StringEscapeUtils.escapeHtml(person.getUserId()));
+        result.setDatabaseInstance(DatabaseInstanceTranslator.translate(person
+                .getDatabaseInstance()));
         result.setRegistrationDate(person.getRegistrationDate());
         if (recursively)
         {
@@ -70,5 +72,4 @@ public class PersonTranslator
         }
         return result;
     }
-
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
index dac7f0a4684f842bbc7dac139c6f655ffa249bdc..f1071b5fbc6c9c0d4a9cc3676951690b4e8179b5 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
@@ -141,6 +141,7 @@ public final class CommonServerTest extends AbstractServerTestCase
     {
         final PersonPE systemPerson = new PersonPE();
         systemPerson.setUserId(PersonPE.SYSTEM_USER_ID);
+        systemPerson.setDatabaseInstance(CommonTestUtils.createHomeDatabaseInstance());
         return systemPerson;
     }
 
@@ -381,6 +382,7 @@ public final class CommonServerTest extends AbstractServerTestCase
         assertEquals(person.getFirstName(), persons.get(0).getFirstName());
         assertEquals(person.getLastName(), persons.get(0).getLastName());
         assertEquals(person.getEmail(), persons.get(0).getEmail());
+        assertEquals(person.getDatabaseInstance(), persons.get(0).getDatabaseInstance());
         assertEquals(1, persons.size());
 
         context.assertIsSatisfied();
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java
index 6fcda18118041fc3056f8d8b97984398ebb8eadc..d0464a4e7633f8d5859c2926a32e65b82e2f843e 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AuthorizationGroupBOTest.java
@@ -70,9 +70,7 @@ public final class AuthorizationGroupBOTest extends AbstractBOTest
             {
                 {
                     one(daoFactory).getHomeDatabaseInstance();
-                    DatabaseInstancePE dbInstance =
-                            CommonTestUtils
-                                    .createDatabaseInstance(CommonTestUtils.HOME_DATABASE_INSTANCE_CODE);
+                    DatabaseInstancePE dbInstance = CommonTestUtils.createHomeDatabaseInstance();
                     will(returnValue(dbInstance));
                     one(groupFactory).create(newAuthorizationGroup,
                             ManagerTestTool.EXAMPLE_SESSION.tryGetPerson(), dbInstance);
@@ -97,8 +95,7 @@ public final class AuthorizationGroupBOTest extends AbstractBOTest
     {
         final AuthorizationGroupBO bo = createBO();
 
-        final DatabaseInstancePE homeDb =
-                CommonTestUtils.createDatabaseInstance(CommonTestUtils.HOME_DATABASE_INSTANCE_CODE);
+        final DatabaseInstancePE homeDb = CommonTestUtils.createHomeDatabaseInstance();
         final NewAuthorizationGroup newAuthorizationGroup = createNewAuthorizationGroup();
         final AuthorizationGroupPE authGroupPE = createAuthorizationGroup();
         context.checking(new Expectations()
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java
index 9eb183c08e1d072ccf8c0522a5dd3de61ae35a0f..7064e981a88084c23fe651e7f449242bd40635cf 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/MaterialTableTest.java
@@ -90,8 +90,7 @@ public final class MaterialTableTest extends AbstractBOTest
             {
                 {
                     one(daoFactory).getHomeDatabaseInstance();
-                    will(returnValue(CommonTestUtils
-                            .createDatabaseInstance(CommonTestUtils.HOME_DATABASE_INSTANCE_CODE)));
+                    will(returnValue(CommonTestUtils.createHomeDatabaseInstance()));
                 }
             });
         createMaterialTable().add(newMaterials, materialType);
@@ -127,8 +126,7 @@ public final class MaterialTableTest extends AbstractBOTest
         final MaterialPE material = new MaterialPE();
         material.setCode(code);
         material.setMaterialType(materialType);
-        material.setDatabaseInstance(CommonTestUtils
-                .createDatabaseInstance(CommonTestUtils.HOME_DATABASE_INSTANCE_CODE));
+        material.setDatabaseInstance(CommonTestUtils.createHomeDatabaseInstance());
         material.setRegistrator(EXAMPLE_SESSION.tryGetPerson());
         return material;
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java
index 32c605b90918f0485a370772e3f9ff5a97989381..9021616d8300c848ea5cf08f31b0c3a84853324a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java
@@ -198,8 +198,7 @@ public abstract class AbstractServerTestCase extends AssertJUnit
         propertyTypeTable = context.mock(IPropertyTypeTable.class);
         materialTable = context.mock(IMaterialTable.class);
 
-        homeDatabaseInstance =
-                CommonTestUtils.createDatabaseInstance(CommonTestUtils.HOME_DATABASE_INSTANCE_CODE);
+        homeDatabaseInstance = CommonTestUtils.createHomeDatabaseInstance();
         context.checking(new Expectations()
             {
                 {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/CommonTestUtils.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/CommonTestUtils.java
index 6f1c883dd34742db334d4eb2fb45c7675c144617..35aca4a2c0338537099b50f23a8587b50e709419 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/CommonTestUtils.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/CommonTestUtils.java
@@ -156,6 +156,11 @@ public class CommonTestUtils
         return databaseInstance;
     }
 
+    public static DatabaseInstancePE createHomeDatabaseInstance()
+    {
+        return createDatabaseInstance(HOME_DATABASE_INSTANCE_CODE);
+    }
+
     static public PersonPE createPersonFromPrincipal(final Principal principal)
     {
         final PersonPE person = new PersonPE();
@@ -163,6 +168,7 @@ public class CommonTestUtils
         person.setFirstName(principal.getFirstName());
         person.setLastName(principal.getLastName());
         person.setEmail(principal.getEmail());
+        person.setDatabaseInstance(createHomeDatabaseInstance());
         return person;
     }
 
@@ -185,7 +191,7 @@ public class CommonTestUtils
     {
         final ExperimentTypePE sampleTypePE = new ExperimentTypePE();
         sampleTypePE.setCode(EXPERIMENT_TYPE);
-        sampleTypePE.setDatabaseInstance(createDatabaseInstance(HOME_DATABASE_INSTANCE_CODE));
+        sampleTypePE.setDatabaseInstance(createHomeDatabaseInstance());
         return sampleTypePE;
     }
 
@@ -200,7 +206,7 @@ public class CommonTestUtils
     {
         VocabularyPE vocabulary = new VocabularyPE();
         vocabulary.setCode(fullCode);
-        vocabulary.setDatabaseInstance(createDatabaseInstance(HOME_DATABASE_INSTANCE_CODE));
+        vocabulary.setDatabaseInstance(createHomeDatabaseInstance());
         if (terms != null)
         {
             vocabulary.setTerms(terms);
@@ -220,7 +226,7 @@ public class CommonTestUtils
     {
         PropertyTypePE result = new PropertyTypePE();
         result.setCode(fullCode);
-        result.setDatabaseInstance(createDatabaseInstance(HOME_DATABASE_INSTANCE_CODE));
+        result.setDatabaseInstance(createHomeDatabaseInstance());
         result.setType(createDataType(type));
         result.setVocabulary(vocabularyOrNull);
         result.setMaterialType(materialTypeOrNull);
@@ -312,7 +318,7 @@ public class CommonTestUtils
 
         final MaterialTypePE type = new MaterialTypePE();
         type.setCode(MATERIAL_TYPE_VIRUS);
-        type.setDatabaseInstance(createDatabaseInstance(HOME_DATABASE_INSTANCE_CODE));
+        type.setDatabaseInstance(createHomeDatabaseInstance());
         return type;
     }
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java
index 9cb48237b153adf3826aa4be7daf52cb6d7de0f3..8a1392cace9a1b781b4b7201777dffc2d9923d9e 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java
@@ -112,6 +112,7 @@ public class ExternalDataTranslatorTest extends AssertJUnit
         invalidationPE.setRegistrationDate(new Date(3));
         PersonPE personPE = new PersonPE();
         personPE.setUserId("user");
+        personPE.setDatabaseInstance(databaseInstancePE);
         invalidationPE.setRegistrator(personPE);
         samplePE.setInvalidation(invalidationPE);
         externalDataPE.setSampleAcquiredFrom(samplePE);