diff --git a/full/Changes b/full/Changes
index f5b9476..de3175a 100644
--- a/full/Changes
+++ b/full/Changes
@@ -9,7 +9,9 @@
  - Added a new API: install plugin 
  - Handled redundant plugin installation
  - Handled super client id in plugin installation
-
+ - Deprecated UserClientDto and uses ClientinfoDto instead
+ 
+ 
 # version 0.67.1
 
 2022-05-12
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);
   
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2AdminControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2AdminControllerTest.java
index b656b63..958542b 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2AdminControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2AdminControllerTest.java
@@ -146,7 +146,7 @@
             String accessToken) throws KustvaktException {
 
         JsonNode node = retrieveClientInfo(clientId, "admin");
-        assertTrue(node.at("/is_super").asBoolean());
+        assertTrue(node.at("/super").asBoolean());
 
         // list vc
         ClientResponse response = resource().path(API_VERSION).path("vc")
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
index 0ea7f10..7ea1485 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2ClientControllerTest.java
@@ -81,33 +81,33 @@
     public void testRetrieveClientInfo () throws KustvaktException {
         // public client
         JsonNode clientInfo = retrieveClientInfo(publicClientId, "system");
-        assertEquals(publicClientId, clientInfo.at("/id").asText());
+        assertEquals(publicClientId, clientInfo.at("/client_id").asText());
         assertEquals("public client plugin with redirect uri",
-                clientInfo.at("/name").asText());
-        assertNotNull(clientInfo.at("/description"));
-        assertNotNull(clientInfo.at("/url"));
-        assertEquals("PUBLIC", clientInfo.at("/type").asText());
+                clientInfo.at("/client_name").asText());
+        assertNotNull(clientInfo.at("/client_description"));
+        assertNotNull(clientInfo.at("/client_url"));
+        assertEquals("PUBLIC", clientInfo.at("/client_type").asText());
         assertEquals("system", clientInfo.at("/registered_by").asText());
 
         // confidential client
         clientInfo = retrieveClientInfo(confidentialClientId, "system");
-        assertEquals(confidentialClientId, clientInfo.at("/id").asText());
+        assertEquals(confidentialClientId, clientInfo.at("/client_id").asText());
         assertEquals("non super confidential client",
-                clientInfo.at("/name").asText());
-        assertNotNull(clientInfo.at("/url"));
+                clientInfo.at("/client_name").asText());
+        assertNotNull(clientInfo.at("/client_url"));
         assertNotNull(clientInfo.at("/redirect_uri"));
-        assertEquals(false, clientInfo.at("/is_super").asBoolean());
-        assertEquals("CONFIDENTIAL", clientInfo.at("/type").asText());
+        assertEquals(false, clientInfo.at("/super").asBoolean());
+        assertEquals("CONFIDENTIAL", clientInfo.at("/client_type").asText());
 
         // super client
         clientInfo = retrieveClientInfo(superClientId, "system");
-        assertEquals(superClientId, clientInfo.at("/id").asText());
+        assertEquals(superClientId, clientInfo.at("/client_id").asText());
         assertEquals("super confidential client",
-                clientInfo.at("/name").asText());
-        assertNotNull(clientInfo.at("/url"));
+                clientInfo.at("/client_name").asText());
+        assertNotNull(clientInfo.at("/client_url"));
         assertNotNull(clientInfo.at("/redirect_uri"));
-        assertEquals("CONFIDENTIAL", clientInfo.at("/type").asText());
-        assertTrue(clientInfo.at("/is_super").asBoolean());
+        assertEquals("CONFIDENTIAL", clientInfo.at("/client_type").asText());
+        assertTrue(clientInfo.at("/super").asBoolean());
     }
     
     @Test
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2PluginTest.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2PluginTest.java
index ff63cc1..34081a5 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2PluginTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2PluginTest.java
@@ -28,6 +28,7 @@
 import de.ids_mannheim.korap.oauth2.constant.OAuth2Error;
 import de.ids_mannheim.korap.oauth2.dao.InstalledPluginDao;
 import de.ids_mannheim.korap.utils.JsonUtils;
+import de.ids_mannheim.korap.utils.TimeUtils;
 import de.ids_mannheim.korap.web.input.OAuth2ClientJson;
 
 public class OAuth2PluginTest extends OAuth2TestBase {
@@ -42,12 +43,15 @@
             ClientHandlerException, KustvaktException {
         JsonNode source = JsonUtils.readTree("{ \"plugin\" : \"source\"}");
 
+        int refreshTokenExpiry = TimeUtils.convertTimeToSeconds("90D");
+        
         String clientName = "Plugin";
         OAuth2ClientJson json = new OAuth2ClientJson();
         json.setName(clientName);
         json.setType(OAuth2ClientType.CONFIDENTIAL);
         json.setDescription("This is a plugin test client.");
         json.setSource(source);
+        json.setRefreshTokenExpiry(refreshTokenExpiry);
 
         ClientResponse response = registerClient(username, json);
         assertEquals(Status.OK.getStatusCode(), response.getStatus());
@@ -58,37 +62,38 @@
         assertNotNull(clientSecret);
         
         testInstallPluginNotPermitted(clientId);
-        testRetrievePluginInfo(clientId);
+        testRetrievePluginInfo(clientId,refreshTokenExpiry);
 
         node = listPlugins(false);
         assertEquals(3, node.size());
         node = listPlugins(true); // permitted only
         assertEquals(2, node.size());
 
-        testListUserRegisteredPlugins(username, clientId, clientName);
+        testListUserRegisteredPlugins(username, clientId, clientName,
+                refreshTokenExpiry);
         deregisterConfidentialClient(username, clientId);
     }
 
-    private void testRetrievePluginInfo (String clientId)
+    private void testRetrievePluginInfo (String clientId, int refreshTokenExpiry)
             throws UniformInterfaceException, ClientHandlerException,
             KustvaktException {
         JsonNode clientInfo = retrieveClientInfo(clientId, username);
-        assertEquals(clientId, clientInfo.at("/id").asText());
-        assertEquals("Plugin", clientInfo.at("/name").asText());
+        assertEquals(clientId, clientInfo.at("/client_id").asText());
+        assertEquals("Plugin", clientInfo.at("/client_name").asText());
 
         assertEquals(OAuth2ClientType.CONFIDENTIAL.name(),
-                clientInfo.at("/type").asText());
-        assertNotNull(clientInfo.at("/description").asText());
+                clientInfo.at("/client_type").asText());
+        assertNotNull(clientInfo.at("/client_description").asText());
         assertNotNull(clientInfo.at("/source").asText());
         assertFalse(clientInfo.at("/permitted").asBoolean());
         assertEquals(username, clientInfo.at("/registered_by").asText());
         assertNotNull(clientInfo.at("/registration_date"));
-        assertEquals(defaultRefreshTokenExpiry,
+        assertEquals(refreshTokenExpiry,
                 clientInfo.at("/refresh_token_expiry").asInt());
     }
 
     private void testListUserRegisteredPlugins (String username,
-            String clientId, String clientName)
+            String clientId, String clientName, int refreshTokenExpiry)
             throws UniformInterfaceException, ClientHandlerException,
             KustvaktException {
 
@@ -101,7 +106,7 @@
         assertFalse(node.at("/0/permitted").asBoolean());
         assertFalse(node.at("/0/registration_date").isMissingNode());
         assertFalse(node.at("/0/source").isMissingNode());
-        assertEquals(defaultRefreshTokenExpiry,
+        assertEquals(refreshTokenExpiry,
                 node.at("/0/refresh_token_expiry").asInt());
     }
 
@@ -204,7 +209,7 @@
         assertFalse(node.at("/0/source").isMissingNode());
         assertFalse(node.at("/0/refresh_token_expiry").isMissingNode());
 
-        assertTrue(node.at("/1/refresh_token_expiry").isMissingNode());
+//        assertTrue(node.at("/1/refresh_token_expiry").isMissingNode());
     }
 
     private JsonNode listPlugins (boolean permitted_only)
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2TestBase.java b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2TestBase.java
index 45f02b4..6526190 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2TestBase.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/controller/OAuth2TestBase.java
@@ -269,16 +269,16 @@
             throws UniformInterfaceException, ClientHandlerException,
             KustvaktException {
         JsonNode clientInfo = retrieveClientInfo(clientId, username);
-        assertEquals(clientId, clientInfo.at("/id").asText());
-        assertEquals("OAuth2ClientTest", clientInfo.at("/name").asText());
+        assertEquals(clientId, clientInfo.at("/client_id").asText());
+        assertEquals("OAuth2ClientTest", clientInfo.at("/client_name").asText());
         assertEquals(OAuth2ClientType.CONFIDENTIAL.name(),
-                clientInfo.at("/type").asText());
+                clientInfo.at("/client_type").asText());
         assertEquals(username, clientInfo.at("/registered_by").asText());
-        assertEquals(clientURL, clientInfo.at("/url").asText());
+        assertEquals(clientURL, clientInfo.at("/client_url").asText());
         assertEquals(clientRedirectUri,
-                clientInfo.at("/redirect_uri").asText());
+                clientInfo.at("/client_redirect_uri").asText());
         // 31536000 seconds
-        assertEquals(TimeUtils.convertTimeToSeconds("365D"),
+        assertEquals(defaultRefreshTokenExpiry,
                 clientInfo.at("/refresh_token_expiry").asInt());
         assertNotNull(clientInfo.at("/description"));
         assertNotNull(clientInfo.at("/registration_date"));
