diff --git a/src/main/java/org/olat/course/nodes/bc/BCWebService.java b/src/main/java/org/olat/course/nodes/bc/BCWebService.java
index ef57f0cd2f3610c4578c790118b7c1bf088dd0ee..a02c450ff110ab1adcd752094b90a5866a8508ca 100644
--- a/src/main/java/org/olat/course/nodes/bc/BCWebService.java
+++ b/src/main/java/org/olat/course/nodes/bc/BCWebService.java
@@ -24,7 +24,9 @@ import static org.olat.restapi.security.RestSecurityHelper.isAuthor;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
@@ -115,26 +117,25 @@ public class BCWebService extends AbstractCourseNodeWebService {
 			return Response.serverError().status(Status.UNAUTHORIZED).build();
 		}
 
-		boolean subscribed = false;
+		final Set<String> subscribed = new HashSet<String>();
 		NotificationsManager man = NotificationsManager.getInstance();
 		List<String> notiTypes = Collections.singletonList("FolderModule");
 		List<Subscriber> subs = man.getSubscribers(ureq.getIdentity(), notiTypes);
 		for(Subscriber sub:subs) {
 			Long courseKey = sub.getPublisher().getResId();
 			if(courseId.equals(courseKey)) {
-				subscribed = true;
+				subscribed.add(sub.getPublisher().getSubidentifier());
 				break;
 			}
 		}
 		
-		final boolean subscribed_ = subscribed;
 		final List<FolderVO> folderVOs = new ArrayList<FolderVO>();
 		new CourseTreeVisitor(course, ureq.getUserSession().getIdentityEnvironment()).visit(new Visitor() {
 			@Override
 			public void visit(INode node) {
 				if(node instanceof BCCourseNode) {
 					BCCourseNode bcNode = (BCCourseNode)node;
-					FolderVO folder = createFolderVO(ureq.getUserSession().getIdentityEnvironment(), course, bcNode, subscribed_);
+					FolderVO folder = createFolderVO(ureq.getUserSession().getIdentityEnvironment(), course, bcNode, subscribed);
 					folderVOs.add(folder);
 				}
 			}
@@ -280,15 +281,14 @@ public class BCWebService extends AbstractCourseNodeWebService {
 		UserRequest ureq = getUserRequest(httpRequest);
 		boolean accessible = (new CourseTreeVisitor(course, ureq.getUserSession().getIdentityEnvironment())).isAccessible(courseNode);
 		if(accessible) {
-			boolean subscribed = false;
+			Set<String> subscribed = new HashSet<String>();
 			NotificationsManager man = NotificationsManager.getInstance();
 			List<String> notiTypes = Collections.singletonList("FolderModule");
 			List<Subscriber> subs = man.getSubscribers(ureq.getIdentity(), notiTypes);
 			for(Subscriber sub:subs) {
 				Long courseKey = sub.getPublisher().getResId();
 				if(courseId.equals(courseKey)) {
-					subscribed = true;
-					break;
+					subscribed.add(sub.getPublisher().getSubidentifier());
 				}
 			}
 
@@ -367,14 +367,14 @@ public class BCWebService extends AbstractCourseNodeWebService {
 		}	
 	}
 	
-	public static FolderVO createFolderVO(IdentityEnvironment ienv, ICourse course, BCCourseNode bcNode, boolean subscribed) {
+	public static FolderVO createFolderVO(IdentityEnvironment ienv, ICourse course, BCCourseNode bcNode, Set<String> subscribed) {
 		OlatNamedContainerImpl container = BCCourseNode.getSecurisedNodeFolderContainer(bcNode, course.getCourseEnvironment(), ienv);
 		VFSSecurityCallback secCallback = container.getLocalSecurityCallback();
 		
 		FolderVO folderVo = new FolderVO();
 		folderVo.setName(course.getCourseTitle());
 		folderVo.setDetailsName(bcNode.getShortTitle());
-		folderVo.setSubscribed(subscribed);
+		folderVo.setSubscribed(subscribed.contains(bcNode.getIdent()));
 		folderVo.setCourseKey(course.getResourceableId());
 		folderVo.setCourseNodeId(bcNode.getIdent());
 		folderVo.setWrite(secCallback.canWrite());
diff --git a/src/main/java/org/olat/restapi/repository/course/CoursesInfosWebService.java b/src/main/java/org/olat/restapi/repository/course/CoursesInfosWebService.java
index 3d6a96cf007f0ce47ff808b0ee51d7a5a6f3b5e2..5858b831a28f5cc00c1e4a382927fddef57e5f0f 100644
--- a/src/main/java/org/olat/restapi/repository/course/CoursesInfosWebService.java
+++ b/src/main/java/org/olat/restapi/repository/course/CoursesInfosWebService.java
@@ -4,7 +4,11 @@ import static org.olat.restapi.security.RestSecurityHelper.getIdentity;
 import static org.olat.restapi.security.RestSecurityHelper.getRoles;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.DefaultValue;
@@ -23,6 +27,8 @@ import org.olat.core.id.Identity;
 import org.olat.core.id.IdentityEnvironment;
 import org.olat.core.id.Roles;
 import org.olat.core.util.nodes.INode;
+import org.olat.core.util.notifications.NotificationsManager;
+import org.olat.core.util.notifications.Subscriber;
 import org.olat.core.util.tree.Visitor;
 import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
@@ -43,6 +49,15 @@ import org.olat.restapi.support.vo.CourseInfoVO;
 import org.olat.restapi.support.vo.CourseInfoVOes;
 import org.olat.restapi.support.vo.FolderVO;
 
+/**
+ * 
+ * Description:<br>
+ * 
+ * <P>
+ * Initial Date:  7 févr. 2012 <br>
+ *
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ */
 @Path("repo/courses/infos")
 public class CoursesInfosWebService {
 	
@@ -73,9 +88,38 @@ public class CoursesInfosWebService {
 			int totalCount = rm.countGenericANDQueryWithRolesRestriction(params, true);
 			List<RepositoryEntry> repoEntries = rm.genericANDQueryWithRolesRestriction(params, start, limit, true);
 			List<CourseInfoVO> infos = new ArrayList<CourseInfoVO>();
+			
+			
+			final Set<Long> forumNotified = new HashSet<Long>();
+			final Map<Long,Set<String>> courseNotified = new HashMap<Long,Set<String>>();
+			NotificationsManager man = NotificationsManager.getInstance();
+			{//collect subscriptions
+				List<String> notiTypes = new ArrayList<String>();
+				notiTypes.add("FolderModule");
+				notiTypes.add("Forum");
+				List<Subscriber> subs = man.getSubscribers(identity, notiTypes);
+				for(Subscriber sub:subs) {
+					String publisherType = sub.getPublisher().getType();
+					String resName = sub.getPublisher().getResName();
+					
+					if("CourseModule".equals(resName)) {
+						if("FolderModule".equals(publisherType)) {
+							Long courseKey = sub.getPublisher().getResId();
+							if(!courseNotified.containsKey(courseKey)) {
+								courseNotified.put(courseKey,new HashSet<String>());
+							}
+							courseNotified.get(courseKey).add(sub.getPublisher().getSubidentifier());
+						} else if ("Forum".equals(publisherType)) {
+							Long forumKey = Long.parseLong(sub.getPublisher().getData());
+							forumNotified.add(forumKey);
+						}
+					}
+				}
+			}
+
 
 			for(RepositoryEntry entry:repoEntries) {
-				CourseInfoVO info = collect(identity, roles, entry);
+				CourseInfoVO info = collect(identity, roles, entry, forumNotified, courseNotified);
 				if(info != null) {
 					infos.add(info);
 				}
@@ -91,7 +135,9 @@ public class CoursesInfosWebService {
 		}
 	}
 	
-	private CourseInfoVO collect(Identity identity, Roles roles, RepositoryEntry entry) {
+	private CourseInfoVO collect(final Identity identity, final Roles roles, final RepositoryEntry entry,
+			final Set<Long> forumNotified, final Map<Long,Set<String>> courseNotified) {
+		
 		CourseInfoVO info = new CourseInfoVO();
 		info.setRepoEntryKey(entry.getKey());
 		info.setSoftKey(entry.getSoftkey());
@@ -110,10 +156,10 @@ public class CoursesInfosWebService {
 				public void visit(INode node) {
 					if(node instanceof BCCourseNode) {
 						BCCourseNode bcNode = (BCCourseNode)node;
-						folders.add(BCWebService.createFolderVO(ienv, course, bcNode, false));
+						folders.add(BCWebService.createFolderVO(ienv, course, bcNode, courseNotified.get(course.getResourceableId())));
 					} else if (node instanceof FOCourseNode) {
 						FOCourseNode forumNode = (FOCourseNode)node;
-						forums.add(ForumCourseNodeWebService.createForumVO(course, forumNode, null));
+						forums.add(ForumCourseNodeWebService.createForumVO(course, forumNode, forumNotified));
 					}
 				}
 			});
diff --git a/src/main/java/org/olat/restapi/support/vo/FolderVOes.java b/src/main/java/org/olat/restapi/support/vo/FolderVOes.java
index 79c298249e9f90b94140bc0c58f98786abe81671..513bf203d34269488148d0bb5572cba70e97d326 100644
--- a/src/main/java/org/olat/restapi/support/vo/FolderVOes.java
+++ b/src/main/java/org/olat/restapi/support/vo/FolderVOes.java
@@ -40,7 +40,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 public class FolderVOes {
 
 	@XmlElementWrapper(name="folders")
-	@XmlElement(name="folders")
+	@XmlElement(name="folder")
 	private FolderVO[] folders;
 	@XmlAttribute(name="totalCount")
 	private int totalCount;
diff --git a/src/main/java/org/olat/restapi/user/UserFoldersWebService.java b/src/main/java/org/olat/restapi/user/UserFoldersWebService.java
index a3923e98ccb49a9c2623e19d49a048c0f9901884..69b849bf7f2d922c54691654a92b3d7b1584a8ef 100644
--- a/src/main/java/org/olat/restapi/user/UserFoldersWebService.java
+++ b/src/main/java/org/olat/restapi/user/UserFoldersWebService.java
@@ -26,8 +26,10 @@ import static org.olat.restapi.security.RestSecurityHelper.isAdmin;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.GET;
@@ -186,7 +188,7 @@ public class UserFoldersWebService {
 		}
 
 		final Map<Long,Long> groupNotified = new HashMap<Long,Long>();
-		final Map<Long,Long> courseNotified = new HashMap<Long,Long>();
+		final Map<Long,Set<String>> courseNotified = new HashMap<Long,Set<String>>();
 		NotificationsManager man = NotificationsManager.getInstance();
 		{//collect subscriptions
 			List<String> notiTypes = Collections.singletonList("FolderModule");
@@ -198,7 +200,10 @@ public class UserFoldersWebService {
 					groupNotified.put(groupKey, sub.getPublisher().getResId());
 				} else if("CourseModule".equals(resName)) {
 					Long courseKey = sub.getPublisher().getResId();
-					courseNotified.put(courseKey, sub.getPublisher().getResId());
+					if(!courseNotified.containsKey(courseKey)) {
+						courseNotified.put(courseKey,new HashSet<String>());
+					}
+					courseNotified.get(courseKey).add(sub.getPublisher().getSubidentifier());
 				}
 			}
 		}
@@ -221,7 +226,7 @@ public class UserFoldersWebService {
 					public void visit(INode node) {
 						if(node instanceof BCCourseNode) {
 							BCCourseNode bcNode = (BCCourseNode)node;
-							FolderVO folder = BCWebService.createFolderVO(ienv, course, bcNode, courseNotified.containsKey(bcNode.getIdent()));
+							FolderVO folder = BCWebService.createFolderVO(ienv, course, bcNode, courseNotified.get(course.getResourceableId()));
 							folderVOs.add(folder);
 						}
 					}
diff --git a/src/test/java/org/olat/restapi/CoursesForumsTest.java b/src/test/java/org/olat/restapi/CoursesForumsTest.java
index dcf1ae0b355df2d42f4d8ec94ee49a357122a96a..babc96672e642709381132ecfaade3e688a7208c 100644
--- a/src/test/java/org/olat/restapi/CoursesForumsTest.java
+++ b/src/test/java/org/olat/restapi/CoursesForumsTest.java
@@ -131,21 +131,6 @@ public class CoursesForumsTest  extends OlatJerseyTestCase {
 		assertNotNull(threads);
 	}
 	
-	@Test
-	public void testGetCourseInfos() throws IOException, URISyntaxException {
-		RestConnection conn = new RestConnection();
-		boolean loggedIN = conn.login("administrator", "openolat");
-		assertTrue(loggedIN);
-
-		URI uri = UriBuilder.fromUri(getContextURI()).path("repo").path("courses").path("infos").build();
-
-		HttpGet get = conn.createGet(uri, MediaType.APPLICATION_JSON + ";pagingspec=1.0", true);
-		HttpResponse response = conn.execute(get);
-		assertEquals(200, response.getStatusLine().getStatusCode());
-		CourseInfoVOes infos = conn.parse(response, CourseInfoVOes.class);
-		assertNotNull(infos);
-	}
-	
 	private URI getNodeURI() {
 		return UriBuilder.fromUri(getContextURI()).path("repo").path("courses").path(course1.getResourceableId().toString())
 			.path("elements").path("forum").path(forumNode.getIdent()).build();
@@ -160,8 +145,4 @@ public class CoursesForumsTest  extends OlatJerseyTestCase {
 		return UriBuilder.fromUri(getContextURI()).path("repo").path("courses").path(course1.getResourceableId().toString())
 			.path("elements").path("forum").build();
 	}
-	
-	
-	
-
 }
diff --git a/src/test/java/org/olat/restapi/CoursesTest.java b/src/test/java/org/olat/restapi/CoursesTest.java
index 0db1485195ac0a53a92c4e07281c586e02c26360..e7474766cfabf12e982057d9b8bfc111eb82b33d 100644
--- a/src/test/java/org/olat/restapi/CoursesTest.java
+++ b/src/test/java/org/olat/restapi/CoursesTest.java
@@ -34,6 +34,7 @@ import static org.junit.Assert.assertTrue;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.List;
 
 import javax.ws.rs.core.MediaType;
@@ -42,6 +43,8 @@ import javax.ws.rs.core.UriBuilder;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpMethod;
 import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.type.TypeReference;
 import org.junit.Before;
@@ -55,6 +58,7 @@ import org.olat.course.ICourse;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.restapi.repository.course.CoursesWebService;
+import org.olat.restapi.support.vo.CourseInfoVOes;
 import org.olat.restapi.support.vo.CourseVO;
 import org.olat.restapi.support.vo.CourseVOes;
 import org.olat.test.OlatJerseyTestCase;
@@ -149,6 +153,21 @@ public class CoursesTest extends OlatJerseyTestCase {
 		assertNotNull(re.getOwnerGroup());
 	}
 	
+	@Test
+	public void testGetCourseInfos() throws IOException, URISyntaxException {
+		RestConnection conn = new RestConnection();
+		boolean loggedIN = conn.login("administrator", "openolat");
+		assertTrue(loggedIN);
+
+		URI uri = conn.getContextURI().path("repo").path("courses").path("infos").build();
+
+		HttpGet get = conn.createGet(uri, MediaType.APPLICATION_JSON + ";pagingspec=1.0", true);
+		HttpResponse response = conn.execute(get);
+		assertEquals(200, response.getStatusLine().getStatusCode());
+		CourseInfoVOes infos = conn.parse(response, CourseInfoVOes.class);
+		assertNotNull(infos);
+	}
+	
 	protected List<CourseVO> parseCourseArray(String body) {
 		try {
 			ObjectMapper mapper = new ObjectMapper(jsonFactory);