diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/CreatePersonExecutor.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/CreatePersonExecutor.java
index bb443f97d4121bc007be02e2ded8f6011a6ff934..93903e647a58d5004209c6103498c29ca44ec84c 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/CreatePersonExecutor.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/person/CreatePersonExecutor.java
@@ -202,6 +202,19 @@ public class CreatePersonExecutor
         {
             try
             {
+                PersonPE systemUser = daoFactory.getPersonDAO().tryFindPersonByUserId(PersonPE.SYSTEM_USER_ID);
+                if (systemUser == null)
+                {
+                    throw new UserFailureException(
+                            "Couldn't find system user with default settings in the DB.");
+                }
+
+                PersonPE existingPerson = daoFactory.getPersonDAO().tryFindPersonByUserId(person.getUserId());
+                if (existingPerson != null){
+                    throw new UserFailureException(
+                            "User with User Id [" + person.getUserId() + "] already exists!"
+                    );
+                }
                 daoFactory.getPersonDAO().createPerson(person);
             } catch (final DataAccessException e)
             {
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreatePersonTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreatePersonTest.java
index 019811fd2e0be86b40d71de0feaa8254b3826fcb..61a3555ffb444a6983546a1c38b26c5c6e85aa80 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreatePersonTest.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreatePersonTest.java
@@ -20,6 +20,7 @@ import static org.testng.Assert.assertEquals;
 import java.util.Arrays;
 import java.util.List;
 
+import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -58,6 +59,38 @@ public class CreatePersonTest extends AbstractTest
         assertEquals(person.getSpace().getCode(), "CISD");
     }
 
+    @Test
+    public void testCreateExistingPerson()
+    {
+        // Given
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+        PersonCreation personCreation = new PersonCreation();
+        personCreation.setUserId("user-existing");
+        // When
+        List<PersonPermId> persons = v3api.createPersons(sessionToken, List.of(personCreation));
+
+        // Then
+        assertEquals(persons.toString(), "[" + personCreation.getUserId() + "]");
+        PersonFetchOptions fetchOptions = new PersonFetchOptions();
+        fetchOptions.withRegistrator();
+        Person person = v3api.getPersons(sessionToken, persons, fetchOptions).get(persons.get(0));
+        assertEquals(person.getUserId(), personCreation.getUserId());
+        assertEquals(person.getRegistrator().getUserId(), TEST_USER);
+
+        // Given
+        PersonCreation existingPersonCreation = new PersonCreation();
+        existingPersonCreation.setUserId("user-existing");
+        // When
+
+        try
+        {
+            List<PersonPermId> existingPersons = v3api.createPersons(sessionToken, List.of(existingPersonCreation));
+        } catch (UserFailureException e)
+        {
+            assertEquals("User with User Id [" + existingPersonCreation.getUserId() + "] already exists! (Context: [])", e.getMessage());
+        }
+    }
+
     @Test(dataProvider = "usersNotAllowedToCreatePersons")
     public void testCreateWithUserCausingAuthorizationFailure(final String user)
     {