diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index 41659f7e096ee4cc700c6ca8d1b85e1b4eef375e..eaf4964268b35d910844c27d56d3b2dbec9aa852 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -2044,6 +2044,7 @@ public class RepositoryManager extends BasicManager {
 		  .append("   where bgroup.partipiciantGroup=vmember.securityGroup and res=bresource.resource and bgroup=bresource.group and vmember.identity=:identityKey")
 		  .append("  )")
 		  .append(" )");
+		appendOrderBy(sb, "v", orderby);
 
 		/* query based on permission
 		StringBuilder sb3 = new StringBuilder(400);
@@ -2174,7 +2175,8 @@ public class RepositoryManager extends BasicManager {
 		return query.getSingleResult().intValue();
 	}
 	
-	public List<RepositoryEntry> getFavoritLearningResourcesAsTeacher(Identity identity, List<String> types, int firstResult, int maxResults) {
+	public List<RepositoryEntry> getFavoritLearningResourcesAsTeacher(Identity identity, List<String> types, int firstResult, int maxResults,
+			RepositoryEntryOrder... orderby) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select distinct v from ").append(RepositoryEntry.class.getName()).append(" v ")
 		  .append(" inner join fetch v.olatResource as res ")
@@ -2188,6 +2190,7 @@ public class RepositoryManager extends BasicManager {
 		if(types != null && !types.isEmpty()) {
 			sb.append(" and res.resName in (:types)");
 		}
+		this.appendOrderBy(sb, "v", orderby);
 
 		TypedQuery<RepositoryEntry> query = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), RepositoryEntry.class)
@@ -2298,8 +2301,8 @@ public class RepositoryManager extends BasicManager {
 			sb.append(" order by ");
 			for(RepositoryEntryOrder o:orderby) {
 				switch(o) {
-					case nameAsc: sb.append(var).append(".key asc").append(","); break;
-					case nameDesc: sb.append(var).append(".key desc").append(","); break;
+					case nameAsc: sb.append(var).append(".displayname asc").append(","); break;
+					case nameDesc: sb.append(var).append(".displayname desc").append(","); break;
 				}
 			}
 			sb.append(var).append(".key asc");
diff --git a/src/main/java/org/olat/restapi/group/LearningGroupWebService.java b/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
index 748991325b93920db0e5d6359fe8b790630e4d07..fceac7deb957839d55ee95af99ce68d7ef54a7a8 100644
--- a/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
+++ b/src/main/java/org/olat/restapi/group/LearningGroupWebService.java
@@ -371,15 +371,15 @@ public class LearningGroupWebService {
 		if(bg == null) {
 			return Response.serverError().status(Status.NOT_FOUND).build();
 		}
-		
+
+		Identity identity = RestSecurityHelper.getIdentity(request);
 		if(!isGroupManager(request)) {
-			Identity identity = RestSecurityHelper.getIdentity(request);
 			if(!bgs.isIdentityInBusinessGroup(identity, bg)) {
 				return Response.serverError().status(Status.UNAUTHORIZED).build();
 			}
 		}
 		
-		GroupInfoVO info = getInformation(bg);
+		GroupInfoVO info = getInformation(identity, bg);
 		return Response.ok(info).build();
 	}
 	
diff --git a/src/main/java/org/olat/restapi/group/MyGroupWebService.java b/src/main/java/org/olat/restapi/group/MyGroupWebService.java
index de3990431d00e87449aaa9477883c2525421a5d7..618f249577e749ec9477dfdf2fbb9114bccfd71f 100644
--- a/src/main/java/org/olat/restapi/group/MyGroupWebService.java
+++ b/src/main/java/org/olat/restapi/group/MyGroupWebService.java
@@ -157,7 +157,7 @@ public class MyGroupWebService {
 			int count = 0;
 			GroupInfoVO[] groupVOs = new GroupInfoVO[groups.size()];
 			for(BusinessGroup group:groups) {
-				groupVOs[count++] = ObjectFactory.getInformation(group);
+				groupVOs[count++] = ObjectFactory.getInformation(retrievedUser, group);
 			}
 			GroupInfoVOes voes = new GroupInfoVOes();
 			voes.setGroups(groupVOs);
diff --git a/src/main/java/org/olat/restapi/support/ObjectFactory.java b/src/main/java/org/olat/restapi/support/ObjectFactory.java
index c28e4eb97e5d61eb1850c71d1b0e1682bca9977b..f00924b2453af55b5072cc6154a99430ee1f397e 100644
--- a/src/main/java/org/olat/restapi/support/ObjectFactory.java
+++ b/src/main/java/org/olat/restapi/support/ObjectFactory.java
@@ -26,9 +26,11 @@ import java.util.Date;
 import javax.ws.rs.core.EntityTag;
 
 import org.olat.basesecurity.Authentication;
+import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.collaboration.CollaborationTools;
 import org.olat.collaboration.CollaborationToolsFactory;
 import org.olat.core.gui.components.form.ValidationError;
+import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
@@ -99,7 +101,7 @@ public class ObjectFactory {
 		return vo;
 	}
 	
-	public static GroupInfoVO getInformation(BusinessGroup grp) {
+	public static GroupInfoVO getInformation(Identity identity, BusinessGroup grp) {
 		GroupInfoVO vo = new GroupInfoVO();
 		vo.setKey(grp.getKey());
 		vo.setName(grp.getName());
@@ -123,6 +125,16 @@ public class ObjectFactory {
 		
 		boolean hasFolder = collabTools.isToolEnabled(CollaborationTools.TOOL_FOLDER);
 		vo.setHasFolder(hasFolder);
+		boolean hasFolderWrite = hasFolder;
+		if(hasFolder) {
+			Long access = collabTools.lookupFolderAccess();
+			if(access != null && access.intValue() == CollaborationTools.FOLDER_ACCESS_OWNERS) {
+				//is owner?
+				hasFolderWrite = BaseSecurityManager.getInstance().isIdentityInSecurityGroup(identity, grp.getOwnerGroup());
+			}
+		}
+		vo.setFolderWrite(hasFolderWrite);
+		
 		return vo;
 	}
 	
diff --git a/src/main/java/org/olat/restapi/support/vo/GroupInfoVO.java b/src/main/java/org/olat/restapi/support/vo/GroupInfoVO.java
index 7e28569cdc8126c797428b5531ee595d915f9e97..768a608329ec751b682933598170bba76b925602 100644
--- a/src/main/java/org/olat/restapi/support/vo/GroupInfoVO.java
+++ b/src/main/java/org/olat/restapi/support/vo/GroupInfoVO.java
@@ -21,6 +21,7 @@ package org.olat.restapi.support.vo;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
 /**
@@ -40,6 +41,8 @@ public class GroupInfoVO extends GroupVO {
 	private Long forumKey;
 	private Boolean hasWiki = Boolean.FALSE;
 	private Boolean hasFolder = Boolean.FALSE;
+	@XmlAttribute(name="folderWrite", required=false)
+	private boolean folderWrite;
 	
 	public GroupInfoVO() {
 		//make JAXB happy
@@ -76,4 +79,12 @@ public class GroupInfoVO extends GroupVO {
 	public void setHasFolder(Boolean hasFolder) {
 		this.hasFolder = hasFolder;
 	}
+
+	public boolean isFolderWrite() {
+		return folderWrite;
+	}
+
+	public void setFolderWrite(boolean folderWrite) {
+		this.folderWrite = folderWrite;
+	}
 }
diff --git a/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_de.properties
index 55cf6b8508d8151997df7ba753a08b8906a44269..59d5a047beb98400fde4f76023fe81b6607bb1cf 100644
--- a/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/user/propertyhandlers/_i18n/LocalStrings_de.properties
@@ -60,6 +60,7 @@ form.name.msn.error=Bitte geben Sie einen g\u00FCltigen MSN-Namen an.
 form.name.officeCity=Dienst-Stadt
 form.name.officeCountry=Dienst-Land
 form.name.officeMobilePhone=Dienst-Mobiltelefon
+form.name.officeMobilePhone.error.valid=Bitte geben Sie eine g\u00FCltige Telefonnummer an.
 form.name.officePoBox=Dienstpostfach
 form.name.officeStreet=Strasse / Postfach
 form.name.officeZipCode=Dienst-Postleitzahl
diff --git a/src/main/java/org/olat/user/restapi/ContactVO.java b/src/main/java/org/olat/user/restapi/ContactVO.java
new file mode 100644
index 0000000000000000000000000000000000000000..03262b74b406223ff0c36d1260ef28c8f65e5a98
--- /dev/null
+++ b/src/main/java/org/olat/user/restapi/ContactVO.java
@@ -0,0 +1,100 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.user.restapi;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.olat.core.id.Identity;
+import org.olat.core.id.UserConstants;
+
+/**
+ * 
+ * Description:<br>
+ * Very minimal view of the user
+ * 
+ * <P>
+ * Initial Date:  7 apr. 2010 <br>
+ * @author srosse, stephane.rosse@frentix.com
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "contactVO")
+public class ContactVO {
+
+	private Long key;
+	private String firstName;
+	private String lastName;
+
+
+	public ContactVO() {
+		//make JAXB happy
+	}
+	
+	public ContactVO(Identity identity) {
+		key = identity.getKey();
+		firstName = identity.getUser().getProperty(UserConstants.FIRSTNAME, null);
+		lastName = identity.getUser().getProperty(UserConstants.LASTNAME, null);
+	}
+
+	public Long getKey() {
+		return key;
+	}
+
+	public void setKey(Long key) {
+		this.key = key;
+	}
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	public String getLastName() {
+		return lastName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+
+
+
+	@Override
+	public String toString() {
+		return "UserVO[key=" + key + ":lastName=" + lastName + "]";
+	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		if(this == obj) {
+			return true;
+		}
+		if(obj instanceof ContactVO) {
+			ContactVO vo = (ContactVO)obj;
+			return key != null && key.equals(vo.key);
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/user/restapi/ContactVOes.java b/src/main/java/org/olat/user/restapi/ContactVOes.java
new file mode 100644
index 0000000000000000000000000000000000000000..85f789201ed5064d00856d78a48839bcb75ca34c
--- /dev/null
+++ b/src/main/java/org/olat/user/restapi/ContactVOes.java
@@ -0,0 +1,68 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.user.restapi;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * 
+ * Description:<br>
+ * Helper class for the example in the WADL document. Don't use it
+ * for something else!!!
+ * 
+ * <P>
+ * Initial Date:  7 apr. 2010 <br>
+ * @author srosse, stephane.rosse@frentix.com
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "contacts")
+public class ContactVOes {
+
+	@XmlElementWrapper(name="users")
+	@XmlElement(name="users")
+	private ContactVO[] users;
+	@XmlAttribute(name="totalCount")
+	private int totalCount;
+
+	public ContactVOes() {
+		//make JAXB happy
+	}
+
+	public ContactVO[] getUsers() {
+		return users;
+	}
+
+	public void setUsers(ContactVO[] users) {
+		this.users = users;
+	}
+
+	public int getTotalCount() {
+		return totalCount;
+	}
+
+	public void setTotalCount(int totalCount) {
+		this.totalCount = totalCount;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/user/restapi/ContactsWebService.java b/src/main/java/org/olat/user/restapi/ContactsWebService.java
index 51b471f1bf6bbcd77c52724ff55e3cbf13f340df..43813f974d3ed656e8e9a474d6a04b381fe46c29 100644
--- a/src/main/java/org/olat/user/restapi/ContactsWebService.java
+++ b/src/main/java/org/olat/user/restapi/ContactsWebService.java
@@ -20,8 +20,6 @@
 package org.olat.user.restapi;
 
 import static org.olat.restapi.security.RestSecurityHelper.getIdentity;
-import static org.olat.user.restapi.UserVOFactory.get;
-import static org.olat.user.restapi.UserVOFactory.link;
 
 import java.util.List;
 
@@ -34,7 +32,6 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.core.Response.Status;
 
 import org.olat.core.CoreSpringFactory;
@@ -59,14 +56,13 @@ public class ContactsWebService {
 	 * @param start
 	 * @param limit
 	 * @param httpRequest The HTTP request
-	 * @param uriInfo The URI information
 	 * @return The list of contacts
 	 */
 	@GET
 	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
 	public Response getMyContacts(@QueryParam("start") @DefaultValue("0") Integer start,
 			@QueryParam("limit") @DefaultValue("25") Integer limit,
-			@Context HttpServletRequest httpRequest, @Context UriInfo uriInfo) {
+			@Context HttpServletRequest httpRequest) {
 		
 		Identity identity = getIdentity(httpRequest);
 		if(identity == null) {
@@ -78,11 +74,11 @@ public class ContactsWebService {
 		int totalCount = bgs.countContacts(identity);
 		
 		int count = 0;
-		UserVO[] userVOs = new UserVO[contacts.size()];
+		ContactVO[] userVOs = new ContactVO[contacts.size()];
 		for(Identity contact:contacts) {
-			userVOs[count++] = link(get(contact, null, true, false, true), uriInfo);
+			userVOs[count++] = new ContactVO(contact);
 		}
-		UserVOes voes = new UserVOes();
+		ContactVOes voes = new ContactVOes();
 		voes.setUsers(userVOs);
 		voes.setTotalCount(totalCount);
 		return Response.ok(voes).build();
diff --git a/src/main/java/org/olat/user/restapi/UserCoursesWebService.java b/src/main/java/org/olat/user/restapi/UserCoursesWebService.java
index c3423eb28f7afd2ebfece4b85f796de6831a4779..3d06ddc93c4e16f386f5ce14394323412e42f3bb 100644
--- a/src/main/java/org/olat/user/restapi/UserCoursesWebService.java
+++ b/src/main/java/org/olat/user/restapi/UserCoursesWebService.java
@@ -35,6 +35,7 @@ import javax.ws.rs.core.Response;
 
 import org.olat.core.id.Identity;
 import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryEntryOrder;
 import org.olat.repository.RepositoryManager;
 import org.olat.restapi.repository.course.CoursesWebService;
 import org.olat.restapi.support.MediaTypeVariants;
@@ -77,7 +78,7 @@ public class UserCoursesWebService {
 		
 		RepositoryManager rm = RepositoryManager.getInstance();
 		if(MediaTypeVariants.isPaged(httpRequest, request)) {
-			List<RepositoryEntry> repoEntries = rm.getLearningResourcesAsStudent(identity, start, limit);
+			List<RepositoryEntry> repoEntries = rm.getLearningResourcesAsStudent(identity, start, limit, RepositoryEntryOrder.nameAsc);
 			int totalCount= rm.countLearningResourcesAsStudent(identity);
 
 			CourseVO[] vos = toCourseVo(repoEntries);
@@ -86,7 +87,7 @@ public class UserCoursesWebService {
 			voes.setTotalCount(totalCount);
 			return Response.ok(voes).build();
 		} else {
-			List<RepositoryEntry> repoEntries = rm.getLearningResourcesAsStudent(identity, 0, -1);
+			List<RepositoryEntry> repoEntries = rm.getLearningResourcesAsStudent(identity, 0, -1, RepositoryEntryOrder.nameAsc);
 			CourseVO[] vos = toCourseVo(repoEntries);
 			return Response.ok(vos).build();
 		}
@@ -114,7 +115,7 @@ public class UserCoursesWebService {
 		
 		RepositoryManager rm = RepositoryManager.getInstance();
 		if(MediaTypeVariants.isPaged(httpRequest, request)) {
-			List<RepositoryEntry> repoEntries = rm.getLearningResourcesAsTeacher(identity, start, limit);
+			List<RepositoryEntry> repoEntries = rm.getLearningResourcesAsTeacher(identity, start, limit, RepositoryEntryOrder.nameAsc);
 			int totalCount= rm.countLearningResourcesAsTeacher(identity);
 
 			CourseVO[] vos = toCourseVo(repoEntries);
@@ -152,7 +153,7 @@ public class UserCoursesWebService {
 		List<String> courseType = Collections.singletonList("CourseModule");
 		RepositoryManager rm = RepositoryManager.getInstance();
 		if(MediaTypeVariants.isPaged(httpRequest, request)) {
-			List<RepositoryEntry> repoEntries = rm.getFavoritLearningResourcesAsTeacher(identity, courseType, start, limit);
+			List<RepositoryEntry> repoEntries = rm.getFavoritLearningResourcesAsTeacher(identity, courseType, start, limit, RepositoryEntryOrder.nameAsc);
 			int totalCount= rm.countFavoritLearningResourcesAsTeacher(identity, courseType);
 
 			CourseVO[] vos = toCourseVo(repoEntries);
@@ -161,7 +162,7 @@ public class UserCoursesWebService {
 			voes.setTotalCount(totalCount);
 			return Response.ok(voes).build();
 		} else {
-			List<RepositoryEntry> repoEntries = rm.getFavoritLearningResourcesAsTeacher(identity, courseType, 0, -1);
+			List<RepositoryEntry> repoEntries = rm.getFavoritLearningResourcesAsTeacher(identity, courseType, 0, -1, RepositoryEntryOrder.nameAsc);
 			CourseVO[] vos = toCourseVo(repoEntries);
 			return Response.ok(vos).build();
 		}
diff --git a/src/main/java/org/olat/user/restapi/UserVO.java b/src/main/java/org/olat/user/restapi/UserVO.java
index 3b52495b2064829230341eb3adf2ec0b2176fb1f..e5dae4caca5d1752a237c9418e7b99d9b25ff04f 100644
--- a/src/main/java/org/olat/user/restapi/UserVO.java
+++ b/src/main/java/org/olat/user/restapi/UserVO.java
@@ -27,7 +27,6 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
-import org.olat.restapi.support.vo.LinkVO;
 
 /**
  * 
@@ -53,9 +52,6 @@ public class UserVO {
 	@XmlElementWrapper(name="properties")
 	@XmlElement(name="property")
 	private List<UserPropertyVO> properties = new ArrayList<UserPropertyVO>();
-	
-	@XmlElement(name="link",nillable=true)
-	private List<LinkVO> link = new ArrayList<LinkVO>();
 
 	public UserVO() {
 		//make JAXB happy
@@ -137,14 +133,6 @@ public class UserVO {
 		}
 		return null;
 	}
-	
-	public List<LinkVO> getLink() {
-		return link;
-	}
-
-	public void setLink(List<LinkVO> link) {
-		this.link = link;
-	}
 
 	@Override
 	public String toString() {
diff --git a/src/main/java/org/olat/user/restapi/UserVOFactory.java b/src/main/java/org/olat/user/restapi/UserVOFactory.java
index 947bfe1e10af27bc8a243acafc3a182394245d95..dde5fdf4d4b7dca41756dd004fb49aaacb0dbdc6 100644
--- a/src/main/java/org/olat/user/restapi/UserVOFactory.java
+++ b/src/main/java/org/olat/user/restapi/UserVOFactory.java
@@ -23,7 +23,6 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URI;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -32,9 +31,6 @@ import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
-import javax.ws.rs.core.UriBuilder;
-import javax.ws.rs.core.UriInfo;
-
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.io.IOUtils;
 import org.olat.core.gui.translator.Translator;
@@ -46,7 +42,6 @@ import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.i18n.I18nModule;
-import org.olat.restapi.support.vo.LinkVO;
 import org.olat.user.DisplayPortraitManager;
 import org.olat.user.HomePageConfig;
 import org.olat.user.HomePageConfigManagerImpl;
@@ -190,24 +185,6 @@ public class UserVOFactory {
 		return formatedValue;
 	}
 	
-	public static UserVO link(UserVO userVO, UriInfo uriInfo) {
-		if(uriInfo != null) {
-			URI baseUri = uriInfo.getBaseUriBuilder().build();
-
-			URI getUri = UriBuilder.fromUri(baseUri).path("users").path(userVO.getKey().toString()).build();
-			userVO.getLink().add(new LinkVO("self", getUri.toString(), ""));
-			userVO.getLink().add(new LinkVO("edit", getUri.toString(), ""));
-			userVO.getLink().add(new LinkVO("delete", getUri.toString(), ""));
-
-			URI groupUri = UriBuilder.fromUri(baseUri).path("users").path(userVO.getKey().toString()).path("groups").build();
-			userVO.getLink().add(new LinkVO("self", groupUri.toString(), "Groups"));
-			
-			URI portraitUri = UriBuilder.fromUri(baseUri).path("users").path(userVO.getKey().toString()).path("portrait").build();
-			userVO.getLink().add(new LinkVO("self", portraitUri.toString(), "Portrait"));
-		}
-		return userVO;
-	}
-	
 	/**
 	 * Allow the date to be in the raw form (yyyyMMdd) or translated
 	 * to be translated
diff --git a/src/main/java/org/olat/user/restapi/UserWebService.java b/src/main/java/org/olat/user/restapi/UserWebService.java
index f9a6cea0580a9b7a22f091014ae966cab4a80d05..033bfd7620bf4b7441cd04c04697a7fbe06eb05a 100644
--- a/src/main/java/org/olat/user/restapi/UserWebService.java
+++ b/src/main/java/org/olat/user/restapi/UserWebService.java
@@ -25,7 +25,6 @@ import static org.olat.restapi.security.RestSecurityHelper.getUserRequest;
 import static org.olat.restapi.security.RestSecurityHelper.isUserManager;
 import static org.olat.user.restapi.UserVOFactory.formatDbUserProperty;
 import static org.olat.user.restapi.UserVOFactory.get;
-import static org.olat.user.restapi.UserVOFactory.link;
 import static org.olat.user.restapi.UserVOFactory.parseUserProperty;
 import static org.olat.user.restapi.UserVOFactory.post;
 
@@ -188,7 +187,7 @@ public class UserWebService {
 		int count = 0;
 		UserVO[] userVOs = new UserVO[identities.size()];
 		for(Identity identity:identities) {
-			userVOs[count++] = link(get(identity), uriInfo);
+			userVOs[count++] = get(identity);
 		}
 		return Response.ok(userVOs).build();
 	}
@@ -311,7 +310,6 @@ public class UserWebService {
    * @response.representation.404.doc The identity not found
 	 * @param identityKey The user key identifier of the user being searched
 	 * @param withPortrait If true return the portrait as Base64 (default false)
-	 * @param uriInfo The URI infos
 	 * @param httpRequest The HTTP request
 	 * @return an xml or json representation of a the user being search. The xml
 	 *         correspond to a <code>UserVO</code>. <code>UserVO</code> is a
@@ -321,7 +319,7 @@ public class UserWebService {
 	@Path("{identityKey}")
 	@Produces({MediaType.APPLICATION_XML ,MediaType.APPLICATION_JSON})
 	public Response findById(@PathParam("identityKey") Long identityKey, @QueryParam("withPortrait") @DefaultValue("false") Boolean withPortrait,
-			@Context UriInfo uriInfo, @Context HttpServletRequest httpRequest) {
+			@Context HttpServletRequest httpRequest) {
 		try {
 			Identity identity = BaseSecurityManager.getInstance().loadIdentityByKey(identityKey, false);
 			if(identity == null) {
@@ -329,7 +327,7 @@ public class UserWebService {
 			}
 			
 			boolean isUserManager = isUserManager(httpRequest);
-			UserVO userVO = link(get(identity, null, true, isUserManager, withPortrait), uriInfo);
+			UserVO userVO = get(identity, null, true, isUserManager, withPortrait);
 			return Response.ok(userVO).build();
 		} catch (Throwable e) {
 			throw new WebApplicationException(e);
@@ -486,7 +484,6 @@ public class UserWebService {
    * @response.representation.406.example {@link org.olat.restapi.support.vo.Examples#SAMPLE_ERRORVOes}
 	 * @param identityKey The user key identifier
 	 * @param user The user datas
-	 * @param uriInfo The URI infos
 	 * @param request The HTTP request
 	 * @return <code>User</code> object. The operation status (success or fail)
 	 */
@@ -494,7 +491,7 @@ public class UserWebService {
 	@Path("{identityKey}")
 	@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
 	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
-	public Response update(@PathParam("identityKey") Long identityKey, UserVO user, @Context UriInfo uriInfo, @Context HttpServletRequest request) {
+	public Response update(@PathParam("identityKey") Long identityKey, UserVO user, @Context HttpServletRequest request) {
 		try {
 			if(user == null) {
 				return Response.serverError().status(Status.NO_CONTENT).build();
@@ -514,7 +511,7 @@ public class UserWebService {
 			if(errors.isEmpty()) {
 				post(retrievedUser, user, getLocale(request));
 				UserManager.getInstance().updateUser(retrievedUser);
-				return Response.ok(link(get(retrievedIdentity, true, true), uriInfo)).build();
+				return Response.ok(get(retrievedIdentity, true, true)).build();
 			}
 			
 			//content not ok
diff --git a/src/test/java/org/olat/repository/RepositoryManagerTest.java b/src/test/java/org/olat/repository/RepositoryManagerTest.java
index bb86604d6b03e8e11d870680dfc1266ac03df041..33cf83a35e02220ead273f0fd8a132a5a539a483 100644
--- a/src/test/java/org/olat/repository/RepositoryManagerTest.java
+++ b/src/test/java/org/olat/repository/RepositoryManagerTest.java
@@ -215,7 +215,7 @@ public class RepositoryManagerTest extends OlatTestCase {
 		securityManager.addIdentityToSecurityGroup(id, re.getParticipantGroup());
 		dbInstance.commitAndCloseSession();
 
-		List<RepositoryEntry> entries = repositoryManager.getLearningResourcesAsStudent(id, 0, -1);
+		List<RepositoryEntry> entries = repositoryManager.getLearningResourcesAsStudent(id, 0, -1, RepositoryEntryOrder.nameAsc);
 		Assert.assertNotNull(entries);
 		Assert.assertFalse(entries.isEmpty());
 		Assert.assertTrue(entries.contains(re));
@@ -321,7 +321,7 @@ public class RepositoryManagerTest extends OlatTestCase {
 		
 		//check get favorite
 		List<String> types = Collections.singletonList(re.getOlatResource().getResourceableTypeName());
-		List<RepositoryEntry> entries = repositoryManager.getFavoritLearningResourcesAsTeacher(id, types, 0, -1);
+		List<RepositoryEntry> entries = repositoryManager.getFavoritLearningResourcesAsTeacher(id, types, 0, -1, RepositoryEntryOrder.nameAsc);
 		Assert.assertNotNull(entries);
 		Assert.assertEquals(1, entries.size());
 		Assert.assertTrue(entries.contains(re));
diff --git a/src/test/java/org/olat/restapi/ContactsTest.java b/src/test/java/org/olat/restapi/ContactsTest.java
index 9ab4cc420a00a5c16c51db5fa54619a4ad71ee8d..21c078774215a39770ccca9c779e70789ef951fd 100644
--- a/src/test/java/org/olat/restapi/ContactsTest.java
+++ b/src/test/java/org/olat/restapi/ContactsTest.java
@@ -52,7 +52,7 @@ import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatJerseyTestCase;
-import org.olat.user.restapi.UserVOes;
+import org.olat.user.restapi.ContactVOes;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class ContactsTest extends OlatJerseyTestCase {
@@ -201,7 +201,7 @@ public class ContactsTest extends OlatJerseyTestCase {
 		HttpGet method = conn.createGet(uri.build(), MediaType.APPLICATION_JSON, true);
 		HttpResponse response = conn.execute(method);
 		assertEquals(200, response.getStatusLine().getStatusCode());
-		UserVOes contacts = conn.parse(response, UserVOes.class);
+		ContactVOes contacts = conn.parse(response, ContactVOes.class);
 		assertNotNull(contacts);
 		assertNotNull(contacts.getUsers());
 		assertEquals(1, contacts.getUsers().length);