diff --git a/Changes b/Changes
index 26308d1..6739ef1 100644
--- a/Changes
+++ b/Changes
@@ -3,6 +3,7 @@
 - Reactivate Query Serializer Web-service (#903)
 - Fix deprecated URL constructor (AI assisted)
 - Fix Jackson and serialization deprecated methods (AI assisted)
+- Change Userdata to use String username instead of integer userId
 
 # version 1.1
 
diff --git a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
index 743daf0..c0b13f3 100644
--- a/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/rewrite/FoundryRewrite.java
@@ -23,7 +23,7 @@
         String username = user.getUsername();
         String jsonSettings = settingService.retrieveDefaultSettings(username);
         if (jsonSettings != null) {
-            UserSettingProcessor processor = new UserSettingProcessor(
+            UserSettingProcessor processor = new UserSettingProcessor(username,
                     jsonSettings);
             user.setUserSettingProcessor(processor);
         }
diff --git a/src/main/java/de/ids_mannheim/korap/service/DefaultSettingService.java b/src/main/java/de/ids_mannheim/korap/service/DefaultSettingService.java
index b0ba7d0..ac1e38a 100644
--- a/src/main/java/de/ids_mannheim/korap/service/DefaultSettingService.java
+++ b/src/main/java/de/ids_mannheim/korap/service/DefaultSettingService.java
@@ -57,7 +57,7 @@
         username = verifiyUsername(username, contextUsername);
         validateSettingMap(map);
 
-        UserSettingProcessor processor = new UserSettingProcessor();
+        UserSettingProcessor processor = new UserSettingProcessor(username);
         processor.readQuietly(map, false);
 
         DefaultSetting defaultSetting = settingDao
@@ -67,7 +67,7 @@
             return HttpStatus.SC_CREATED;
         }
         else {
-            updateDefaultSetting(defaultSetting, processor);
+            updateDefaultSetting(username, defaultSetting, processor);
             return HttpStatus.SC_OK;
         }
     }
@@ -78,9 +78,9 @@
         settingDao.createDefaultSetting(username, jsonSettings);
     }
 
-    public void updateDefaultSetting (DefaultSetting setting,
+    public void updateDefaultSetting (String username, DefaultSetting setting,
             UserSettingProcessor newProcessor) throws KustvaktException {
-        UserSettingProcessor processor = new UserSettingProcessor(
+        UserSettingProcessor processor = new UserSettingProcessor(username,
                 setting.getSettings());
         processor.update(newProcessor);
 
@@ -113,7 +113,8 @@
                 .retrieveDefaultSetting(username);
 
         String jsonSettings = defaultSetting.getSettings();
-        UserSettingProcessor processor = new UserSettingProcessor(jsonSettings);
+        UserSettingProcessor processor = new UserSettingProcessor(username,
+        		jsonSettings);
         processor.removeField(key);
         String json = processor.serialize();
 
diff --git a/src/main/java/de/ids_mannheim/korap/user/GenericUserData.java b/src/main/java/de/ids_mannheim/korap/user/GenericUserData.java
index 506e262..da074e1 100644
--- a/src/main/java/de/ids_mannheim/korap/user/GenericUserData.java
+++ b/src/main/java/de/ids_mannheim/korap/user/GenericUserData.java
@@ -6,7 +6,7 @@
 public class GenericUserData extends Userdata {
 
     public GenericUserData () {
-        super(-1);
+        super();
     }
 
     @Override
diff --git a/src/main/java/de/ids_mannheim/korap/user/UserDetails.java b/src/main/java/de/ids_mannheim/korap/user/UserDetails.java
index 9559813..33c8f0e 100644
--- a/src/main/java/de/ids_mannheim/korap/user/UserDetails.java
+++ b/src/main/java/de/ids_mannheim/korap/user/UserDetails.java
@@ -8,13 +8,13 @@
  *       persistence issue with query request
  */
 public class UserDetails extends Userdata {
-
-    public UserDetails () {
+	
+	public UserDetails () {
 
     }
 
-    public UserDetails (Integer userid) {
-        super(userid);
+    public UserDetails (String username) {
+        super(username);
     }
 
     //todo: make configurable!
diff --git a/src/main/java/de/ids_mannheim/korap/user/UserSettingProcessor.java b/src/main/java/de/ids_mannheim/korap/user/UserSettingProcessor.java
index 3fcd976..1bf1b23 100644
--- a/src/main/java/de/ids_mannheim/korap/user/UserSettingProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/user/UserSettingProcessor.java
@@ -7,19 +7,17 @@
  * @date 28/01/2016
  */
 public class UserSettingProcessor extends Userdata {
-
-    public UserSettingProcessor () {
-
+	public UserSettingProcessor () {
+        super();
     }
-
-    @Deprecated
-    public UserSettingProcessor (Integer userid) {
-        super(userid);
+	
+	public UserSettingProcessor (String username) {
+        super(username);
     }
 
     // EM: added
-    public UserSettingProcessor (String data) {
-        super(data);
+    public UserSettingProcessor (String username,String data) {
+        super(username, data);
     }
 
     @Override
diff --git a/src/main/java/de/ids_mannheim/korap/user/Userdata.java b/src/main/java/de/ids_mannheim/korap/user/Userdata.java
index f607112..7eca3ac 100644
--- a/src/main/java/de/ids_mannheim/korap/user/Userdata.java
+++ b/src/main/java/de/ids_mannheim/korap/user/Userdata.java
@@ -18,32 +18,26 @@
 
     public DataFactory dataFactory = DataFactory.getFactory();
 
-    @Deprecated
-    @Getter
-    @Setter
-    private Integer id;
     @Getter(AccessLevel.PRIVATE)
     private Object data;
-    @Deprecated
     @Getter
     @Setter
-    private Integer userId;
+    private String username;
 
     public Userdata () {
-        this(-1);
+    	this.data = dataFactory.convertData(null);
     }
-
-    // EM: replace with username
-    @Deprecated
-    public Userdata (Integer userid) {
-        this.userId = userid;
-        this.id = -1;
-        this.data = dataFactory.convertData(null);
+    
+    public Userdata (String username) {
+    	this.username = username;
+    	this.data = dataFactory.convertData(null);
     }
-
-    public Userdata (String data) {
+    
+    public Userdata (String username, String data) {
+    	this.username = username;
         this.data = dataFactory.convertData(data);
     }
+    
 
     public int size () {
         return dataFactory.size(this.data);
@@ -78,7 +72,7 @@
     public void checkRequired () throws KustvaktException {
         String[] fields = findMissingFields();
         if (findMissingFields().length != 0) {
-            throw new KustvaktException(userId, StatusCodes.MISSING_PARAMETER,
+            throw new KustvaktException(username, StatusCodes.MISSING_PARAMETER,
                     "User data object not valid. Object has missing fields!",
                     Arrays.asList(fields).toString());
         }
diff --git a/src/test/java/de/ids_mannheim/korap/user/UserdataTest.java b/src/test/java/de/ids_mannheim/korap/user/UserdataTest.java
index 3e3d2de..5ccba18 100644
--- a/src/test/java/de/ids_mannheim/korap/user/UserdataTest.java
+++ b/src/test/java/de/ids_mannheim/korap/user/UserdataTest.java
@@ -66,7 +66,7 @@
     // EM: below are tests from MH
     @Test
     public void testDataValidation () {
-        Userdata data = new UserDetails(1);
+        Userdata data = new UserDetails("1");
         data.setField(Attributes.COUNTRY, "Germany");
         String[] req = data.requiredFields();
         String[] r = data.findMissingFields();
@@ -88,7 +88,7 @@
 
     @Test
     public void testUserdataRequiredFields () throws KustvaktException {
-        UserDetails details = new UserDetails(-1);
+        UserDetails details = new UserDetails("g");
         Map<String, Object> m = new HashMap<>();
         m.put(Attributes.FIRSTNAME, "first");
         m.put(Attributes.LASTNAME, "last");
@@ -126,7 +126,7 @@
     @Test
     public void testUserDataRequiredFieldsException () {
         assertThrows(KustvaktException.class, () -> {
-            UserDetails details = new UserDetails(-1);
+            UserDetails details = new UserDetails("g");
             Map<String, Object> m = new HashMap<>();
             m.put(Attributes.FIRSTNAME, "first");
             m.put(Attributes.LASTNAME, "last");
@@ -141,7 +141,7 @@
 
     @Test
     public void testUserDataPointerFunction () throws KustvaktException {
-        UserDetails details = new UserDetails(-1);
+        UserDetails details = new UserDetails("g");
         Map<String, Object> m = new HashMap<>();
         m.put(Attributes.FIRSTNAME, "first");
         m.put(Attributes.LASTNAME, "last");
@@ -158,12 +158,12 @@
 
     @Test
     public void testUserDataUpdate () {
-        UserDetails details = new UserDetails(-1);
+        UserDetails details = new UserDetails("g");
         details.setField(Attributes.FIRSTNAME, "first");
         details.setField(Attributes.LASTNAME, "last");
         details.setField(Attributes.ADDRESS, "address");
         details.setField(Attributes.EMAIL, "email");
-        UserDetails details2 = new UserDetails(-1);
+        UserDetails details2 = new UserDetails("g");
         details2.setField(Attributes.COUNTRY, "Germany");
         details.update(details2);
         assertEquals("first", details.get(Attributes.FIRSTNAME));
