diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2ClientInfoDto.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2ClientInfoDto.java
index 69cf45f..d50d79b 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2ClientInfoDto.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2ClientInfoDto.java
@@ -1,5 +1,7 @@
 package de.ids_mannheim.korap.oauth2.dto;
 
+import java.time.ZonedDateTime;
+
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -10,93 +12,73 @@
 import de.ids_mannheim.korap.oauth2.entity.OAuth2Client;
 import de.ids_mannheim.korap.utils.JsonUtils;
 
-/** Describes information about an OAuth2 client.
+/**
+ * Describes information about an OAuth2 client.
  * 
  * @author margaretha
  *
  */
 @JsonInclude(Include.NON_EMPTY)
 public class OAuth2ClientInfoDto {
+    @JsonProperty("super")
+    private boolean isSuper;
 
-    private String id;
-    private String name;
+    @JsonProperty("client_id")
+    private String clientId;
+    @JsonProperty("client_name")
+    private String clientName;
+    @JsonProperty("client_type")
+    private OAuth2ClientType clientType;
+    @JsonProperty("client_description")
     private String description;
-    @JsonProperty("is_super")
-    private String isSuper;
+    @JsonProperty("client_url")
     private String url;
+    @JsonProperty("client_redirect_uri")
     private String redirect_uri;
-    @JsonProperty("registered_by")
-    private String registeredBy;
     @JsonProperty("registration_date")
     private String registrationDate;
+    @JsonProperty("registered_by")
+    private String registeredBy;
     @JsonProperty("refresh_token_expiry")
     private int refreshTokenExpiry; // in seconds
-    private OAuth2ClientType type;
-    
+
     @JsonProperty("permitted")
     private boolean isPermitted;
     private JsonNode source;
 
     public OAuth2ClientInfoDto (OAuth2Client client) throws KustvaktException {
-        this.id = client.getId();
-        this.name = client.getName();
-        this.description = client.getDescription();
-        this.setType(client.getType());
-        this.url = client.getUrl();
-        this.registeredBy = client.getRegisteredBy();
-        this.redirect_uri = client.getRedirectURI();
-        this.registrationDate = client.getRegistrationDate().toString();
-        this.isPermitted = client.isPermitted();
+        this.setClientId(client.getId());
+        this.setClientName(client.getName());
+        this.setDescription(client.getDescription());
+        this.setClientType(client.getType());
+        this.setUrl(client.getUrl());
+        this.setClientType(client.getType());
+        this.setRedirect_uri(client.getRedirectURI());
+        this.setSuper(client.isSuper());
+        this.setPermitted(client.isPermitted());
+        this.setRegisteredBy(client.getRegisteredBy());
+
         String source = client.getSource();
-        if (source != null) {
+        if (source != null && !source.isEmpty()) {
             this.source = JsonUtils.readTree(source);
         }
-        if (client.isSuper()) {
-            this.isSuper = "true";
+        if (client.getType().equals(OAuth2ClientType.CONFIDENTIAL)) {
+            this.setRefreshTokenExpiry(client.getRefreshTokenExpiry());
         }
-        this.refreshTokenExpiry = client.getRefreshTokenExpiry();
+        ZonedDateTime registrationDate = client.getRegistrationDate();
+        if (registrationDate != null) {
+            this.setRegistrationDate(registrationDate.toString());
+        }
     }
 
-    public String getId () {
-        return id;
-    }
-
-    public void setId (String id) {
-        this.id = id;
-    }
-
-    public String getName () {
-        return name;
-    }
-
-    public void setName (String name) {
-        this.name = name;
-    }
-
-    public String getDescription () {
-        return description;
-    }
-
-    public void setDescription (String description) {
-        this.description = description;
-    }
-
-    public String getIsSuper () {
+    public boolean isSuper () {
         return isSuper;
     }
 
-    public void setIsSuper (String isSuper) {
+    public void setSuper (boolean isSuper) {
         this.isSuper = isSuper;
     }
 
-    public String getUrl () {
-        return url;
-    }
-
-    public void setUrl (String url) {
-        this.url = url;
-    }
-
     public String getRegisteredBy () {
         return registeredBy;
     }
@@ -105,12 +87,44 @@
         this.registeredBy = registeredBy;
     }
 
-    public OAuth2ClientType getType () {
-        return type;
+    public String getClientId () {
+        return clientId;
     }
 
-    public void setType (OAuth2ClientType type) {
-        this.type = type;
+    public void setClientId (String clientId) {
+        this.clientId = clientId;
+    }
+
+    public String getClientName () {
+        return clientName;
+    }
+
+    public void setClientName (String clientName) {
+        this.clientName = clientName;
+    }
+
+    public OAuth2ClientType getClientType () {
+        return clientType;
+    }
+
+    public void setClientType (OAuth2ClientType clientType) {
+        this.clientType = clientType;
+    }
+
+    public String getDescription () {
+        return description;
+    }
+
+    public void setDescription (String description) {
+        this.description = description;
+    }
+
+    public String getUrl () {
+        return url;
+    }
+
+    public void setUrl (String url) {
+        this.url = url;
     }
 
     public String getRedirect_uri () {
@@ -120,33 +134,36 @@
     public void setRedirect_uri (String redirect_uri) {
         this.redirect_uri = redirect_uri;
     }
-    
+
     public String getRegistrationDate () {
         return registrationDate;
     }
+
     public void setRegistrationDate (String registrationDate) {
         this.registrationDate = registrationDate;
     }
-    
-    public JsonNode getSource () {
-        return source;
-    }
-    public void setSource (JsonNode source) {
-        this.source = source;
-    }
-    
-    public boolean isPermitted () {
-        return isPermitted;
-    }
-    public void setPermitted (boolean isPermitted) {
-        this.isPermitted = isPermitted;
-    }
-    
+
     public int getRefreshTokenExpiry () {
         return refreshTokenExpiry;
     }
+
     public void setRefreshTokenExpiry (int refreshTokenExpiry) {
         this.refreshTokenExpiry = refreshTokenExpiry;
     }
 
+    public boolean isPermitted () {
+        return isPermitted;
+    }
+
+    public void setPermitted (boolean isPermitted) {
+        this.isPermitted = isPermitted;
+    }
+
+    public JsonNode getSource () {
+        return source;
+    }
+
+    public void setSource (JsonNode source) {
+        this.source = source;
+    }
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2UserClientDto.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2UserClientDto.java
index 8a9c6fd..c417a60 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2UserClientDto.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/dto/OAuth2UserClientDto.java
@@ -11,11 +11,14 @@
 import de.ids_mannheim.korap.utils.JsonUtils;
 
 /**
- * Lists OAuth2 clients of a user
+ * Please use {@link OAuth2ClientInfoDto} instead. 
+ * 
+ * This class is not used anymore to describe OAuth2 clients of a user.
  * 
  * @author margaretha
  *
  */
+@Deprecated
 @JsonInclude(Include.NON_DEFAULT)
 public class OAuth2UserClientDto {
     @JsonProperty("client_id")
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ClientService.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ClientService.java
index 078219a..47ba029 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ClientService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ClientService.java
@@ -30,7 +30,6 @@
 import de.ids_mannheim.korap.oauth2.dao.RefreshTokenDao;
 import de.ids_mannheim.korap.oauth2.dto.OAuth2ClientDto;
 import de.ids_mannheim.korap.oauth2.dto.OAuth2ClientInfoDto;
-import de.ids_mannheim.korap.oauth2.dto.OAuth2UserClientDto;
 import de.ids_mannheim.korap.oauth2.entity.AccessToken;
 import de.ids_mannheim.korap.oauth2.entity.Authorization;
 import de.ids_mannheim.korap.oauth2.entity.OAuth2Client;
@@ -354,7 +353,7 @@
         return clientDao.retrieveClientById(clientId);
     }
 
-    public List<OAuth2UserClientDto> listUserAuthorizedClients (String username)
+    public List<OAuth2ClientInfoDto> listUserAuthorizedClients (String username)
             throws KustvaktException {
         List<OAuth2Client> userClients =
                 clientDao.retrieveUserAuthorizedClients(username);
@@ -374,7 +373,7 @@
         return createClientDtos(uniqueClients);
     }
     
-    public List<OAuth2UserClientDto> listUserRegisteredClients (String username)
+    public List<OAuth2ClientInfoDto> listUserRegisteredClients (String username)
             throws KustvaktException {
         List<OAuth2Client> userClients =
                 clientDao.retrieveUserRegisteredClients(username);
@@ -383,7 +382,7 @@
     }
     
        
-    public List<OAuth2UserClientDto> listPlugins (boolean isPermitted)
+    public List<OAuth2ClientInfoDto> listPlugins (boolean isPermitted)
             throws KustvaktException {
 
         List<OAuth2Client> plugins = clientDao.retrievePlugins(isPermitted);
@@ -428,12 +427,12 @@
         return true;
     }
 
-    private List<OAuth2UserClientDto> createClientDtos (
+    private List<OAuth2ClientInfoDto> createClientDtos (
             List<OAuth2Client> userClients) throws KustvaktException {
-        List<OAuth2UserClientDto> dtoList = new ArrayList<>(userClients.size());
+        List<OAuth2ClientInfoDto> dtoList = new ArrayList<>(userClients.size());
         for (OAuth2Client uc : userClients) {
             if (uc.isSuper()) continue;
-            OAuth2UserClientDto dto = new OAuth2UserClientDto(uc);
+            OAuth2ClientInfoDto dto = new OAuth2ClientInfoDto(uc);
             dtoList.add(dto);
         }
         return dtoList;
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
index e8f634b..ed380d9 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
@@ -25,7 +25,6 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.oauth2.dto.OAuth2ClientDto;
 import de.ids_mannheim.korap.oauth2.dto.OAuth2ClientInfoDto;
-import de.ids_mannheim.korap.oauth2.dto.OAuth2UserClientDto;
 import de.ids_mannheim.korap.oauth2.service.OAuth2ClientService;
 import de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService;
 import de.ids_mannheim.korap.security.context.TokenContext;
@@ -207,7 +206,7 @@
     @Path("/list")
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-    public List<OAuth2UserClientDto> listUserClients (
+    public List<OAuth2ClientInfoDto> listUserClients (
             @Context SecurityContext context,
             @FormParam("super_client_id") String superClientId,
             @FormParam("super_client_secret") String superClientSecret,
@@ -237,7 +236,7 @@
     @Path("/plugins")
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-    public List<OAuth2UserClientDto> listPlugins (
+    public List<OAuth2ClientInfoDto> listPlugins (
             @Context SecurityContext context,
             @FormParam("super_client_id") String superClientId,
             @FormParam("super_client_secret") String superClientSecret,
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/input/OAuth2ClientJson.java b/full/src/main/java/de/ids_mannheim/korap/web/input/OAuth2ClientJson.java
index 7180eda..e6b4490 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/input/OAuth2ClientJson.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/input/OAuth2ClientJson.java
@@ -31,6 +31,7 @@
     @JsonProperty("redirect_uri")
     private String redirectURI;
     // Default 365 days
+    @JsonProperty("refresh_token_expiry")
     private int refreshTokenExpiry; // in seconds
     
     // plugins
diff --git a/full/src/main/resources/db/test/V3.5__insert_oauth2_clients.sql b/full/src/main/resources/db/test/V3.5__insert_oauth2_clients.sql
index 4e803d2..6b318e3 100644
--- a/full/src/main/resources/db/test/V3.5__insert_oauth2_clients.sql
+++ b/full/src/main/resources/db/test/V3.5__insert_oauth2_clients.sql
@@ -8,7 +8,7 @@
   "$2a$08$vi1FbuN3p6GcI1tSxMAoeuIYL8Yw3j6A8wJthaN8ZboVnrQaTwLPq",
   "CONFIDENTIAL", 1, 
   "https://korap.ids-mannheim.de/confidential/redirect", "system",
-  "This is a test super confidential client.", 
+  "Super confidential client.", 
   "http://korap.ids-mannheim.de/confidential", CURRENT_TIMESTAMP, 1);
 
   
@@ -20,7 +20,7 @@
   "$2a$08$vi1FbuN3p6GcI1tSxMAoeuIYL8Yw3j6A8wJthaN8ZboVnrQaTwLPq",
   "CONFIDENTIAL", 0,
   "https://third.party.com/confidential/redirect", "system",
-  "This is a test nonsuper confidential client.",
+  "Nonsuper confidential client.",
   "http://third.party.com/confidential", CURRENT_TIMESTAMP,1);
 
 INSERT INTO oauth2_client(id,name,secret,type,super,
@@ -29,7 +29,7 @@
 VALUES ("52atrL0ajex_3_5imd9Mgw","confidential client 2",
   "$2a$08$vi1FbuN3p6GcI1tSxMAoeuIYL8Yw3j6A8wJthaN8ZboVnrQaTwLPq",
   "CONFIDENTIAL", 0,"system",
-  "This is a test nonsuper confidential client.",
+  "Nonsuper confidential client plugin without redirect URI",
   "http://example.client.de", CURRENT_TIMESTAMP, 1,'{"key":"value"}');
 
 INSERT INTO oauth2_client(id,name,secret,type,super,
@@ -38,7 +38,7 @@
 VALUES ("8bIDtZnH6NvRkW2Fq","public client plugin with redirect uri",
   null, "PUBLIC", 0,
   "https://third.party.client.com/redirect","system",
-  "A public client that is a plugin with registered redirect URI",
+  "Public client plugin with a registered redirect URI",
   "http://third.party.client.com", CURRENT_TIMESTAMP,1,'{"key":"value"}');
 
   
@@ -46,7 +46,7 @@
   registered_by, description, url, registration_date, 
   is_permitted) 
 VALUES ("nW5qM63Rb2a7KdT9L","test public client",null,
-  "PUBLIC", 0, "without redirect uri",
+  "PUBLIC", 0, "Public client without redirect uri",
   "system", "http://korap.ids-mannheim.de/public", 
   CURRENT_TIMESTAMP, 1);
   
