diff --git a/full/Changes b/full/Changes
index a052996..8d9febb 100644
--- a/full/Changes
+++ b/full/Changes
@@ -8,7 +8,7 @@
 	- enabled custom implementation for email address retrieval (margaretha)
 	- removed old policy and deprecated code (margaretha)
 	- moved authentication related code to /full (margaretha)
-	- removed spring config option in KustvaktServer (margaretha)
+	- added userRoles attribute to UserGroupDto. (margaretha)
 
 version 0.59.10	
 20/02/2018 
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
index e960ee1..72c856a 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
@@ -190,8 +190,6 @@
                             + userId,
                     userId, e);
         }
-
-
     }
 
     public UserGroup retrieveGroupByName (String groupName)
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/UserGroupDto.java b/full/src/main/java/de/ids_mannheim/korap/dto/UserGroupDto.java
index 6b3e8b6..82f05eb 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/UserGroupDto.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/UserGroupDto.java
@@ -2,6 +2,8 @@
 
 import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+
 import de.ids_mannheim.korap.constant.GroupMemberStatus;
 import lombok.Getter;
 import lombok.Setter;
@@ -13,6 +15,10 @@
     private int id;
     private String name;
     private String owner;
+    
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private List<UserGroupMemberDto> members;
+    
     private GroupMemberStatus userMemberStatus;
+    private List<String> userRoles;
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/converter/UserGroupConverter.java b/full/src/main/java/de/ids_mannheim/korap/dto/converter/UserGroupConverter.java
index 273677b..0d61db3 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/converter/UserGroupConverter.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/converter/UserGroupConverter.java
@@ -16,7 +16,8 @@
 public class UserGroupConverter {
 
     public UserGroupDto createUserGroupDto (UserGroup group,
-            List<UserGroupMember> members, GroupMemberStatus userMemberStatus) {
+            List<UserGroupMember> members, GroupMemberStatus userMemberStatus,
+            List<Role> userRoles) {
 
         UserGroupDto dto = new UserGroupDto();
         dto.setId(group.getId());
@@ -24,6 +25,12 @@
         dto.setOwner(group.getCreatedBy());
         dto.setUserMemberStatus(userMemberStatus);
 
+        List<String> roles = new ArrayList<>(userRoles.size());
+        for (Role r : userRoles) {
+            roles.add(r.getName());
+        }
+        dto.setUserRoles(roles);
+
         if (members != null) {
             ArrayList<UserGroupMemberDto> memberDtos =
                     new ArrayList<>(members.size());
@@ -32,11 +39,11 @@
                 UserGroupMemberDto memberDto = new UserGroupMemberDto();
                 memberDto.setUserId(member.getUserId());
                 memberDto.setStatus(member.getStatus());
-                List<String> roles = new ArrayList<>(member.getRoles().size());
+                List<String> memberRoles = new ArrayList<>(member.getRoles().size());
                 for (Role r : member.getRoles()) {
-                    roles.add(r.getName());
+                    memberRoles.add(r.getName());
                 }
-                memberDto.setRoles(roles);
+                memberDto.setRoles(memberRoles);
                 memberDtos.add(memberDto);
             }
             dto.setMembers(memberDtos);
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java b/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
index 9c3e245..428d87c 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/UserGroupService.java
@@ -78,12 +78,14 @@
 
         UserGroupMember userAsMember;
         List<UserGroupMember> members;
+        UserGroupDto groupDto;
         for (UserGroup group : userGroups) {
             members = retrieveMembers(group.getId(), username);
             userAsMember =
                     groupMemberDao.retrieveMemberById(username, group.getId());
-            dtos.add(converter.createUserGroupDto(group, members,
-                    userAsMember.getStatus()));
+            groupDto = converter.createUserGroupDto(group, members,
+                    userAsMember.getStatus(), userAsMember.getRoles());
+            dtos.add(groupDto);
         }
 
         return dtos;
@@ -250,8 +252,10 @@
         member.setUserId(username);
         groupMemberDao.addMember(member);
 
-        if (config.isMailEnabled() && userGroup.getStatus() != UserGroupStatus.HIDDEN) {
-            mailService.sendMemberInvitationNotification(username,userGroup.getName(), createdBy);
+        if (config.isMailEnabled()
+                && userGroup.getStatus() != UserGroupStatus.HIDDEN) {
+            mailService.sendMemberInvitationNotification(username,
+                    userGroup.getName(), createdBy);
         }
     }
 
