diff --git a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
index e5b4d0f84e1ca324721d27ea0dada00cf013080b..6025626336be129a943a4f01167a295f165539e6 100644
--- a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
+++ b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
@@ -622,7 +622,7 @@ public class WeeklyCalendarController extends FormBasicController implements Act
 		removeAsListenerAndDispose(editController);
 		
 		KalendarRenderWrapper calendarWrapper = calendarEl.getCalendar(addEvent.getCalendarID());
-		List<KalendarRenderWrapper> copyCalendarWrappers = new ArrayList<KalendarRenderWrapper>(calendarWrappers);
+		List<KalendarRenderWrapper> copyCalendarWrappers = new ArrayList<>(calendarWrappers);
 		
 		boolean isReadOnly = calendarWrapper == null ? true : calendarWrapper.getAccess() == KalendarRenderWrapper.ACCESS_READ_ONLY;
 		for(KalendarRenderWrapper copyCalendarWrapper:copyCalendarWrappers) {
diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_pl.properties
index bc36607f3d5277497ab3e83fdaf9885214dc1b46..f3ab69412682c23d1cfcdac38a8aaa472dca4935 100644
--- a/src/main/java/org/olat/core/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/core/_i18n/LocalStrings_pl.properties
@@ -1,4 +1,4 @@
-#Thu Sep 03 11:24:43 CEST 2015
+#Tue Mar 01 16:20:46 CET 2016
 alert=Wybierz co najmniej jeden obiekt.
 back=Wstecz
 calendar.choose=Pobierz dat\u0119 z mini kalendarza
diff --git a/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties
index 36364ecd3bfc051f0bfdbcfceedd7417f6da081b..710f47e1e259dfd3dea1c2241702d3b1b09c7215 100644
--- a/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/reminder/ui/_i18n/LocalStrings_de.properties
@@ -1,4 +1,4 @@
-#Thu Apr 09 21:55:54 CEST 2015
+#Tue Mar 01 16:31:01 CET 2016
 add.reminder=Erinnerung erstellen
 add.rule=+
 course.role.all=Mitglieder
@@ -17,30 +17,30 @@ error.course.node.found=Kurselement existiert nicht mehr
 error.int=Ganzzahliger Wert erwartet
 failed=Fehlgeschlagen
 logs=Protokoll versendeter Erinnerungen
-logs.intro=In der untenstehenden Liste sind alle versendeten Erinnerungen aufgeführt.
+logs.intro=In der untenstehenden Liste sind alle versendeten Erinnerungen aufgef\u00FChrt.
 month=Monate
 new.reminder=Neue Erinnerung
 passed=Bestanden
 points=Punkte
-reminder.def.body=<p>Liebe(r) $firstname $lastname</p><p>Sie haben sich in den Kurs "$coursename" eingetragen. Jetzt w\u00E4re ein guter Zeitpunkt diesen zu besuchen!</p><p>$courseurl</p><p>Viele Gr\u00FCsse</p>
+reminder.def.body=<p>Liebe(r) $firstname $lastname</p><p>Sie haben sich in den Kurs "$coursename" eingetragen. Jetzt w\u00E4re ein guter Zeitpunkt diesen zu besuchen\!</p><p>$courseurl</p><p>Viele Gr\u00FCsse</p>
 reminder.description=Beschreibung
 reminder.id=ID
 reminder.resend=Erinnerung wurde erfolgreich geschickt.
 reminders=Erinnerungen
-reminders.intro=Mit der Erinnerungsfunktion können Sie Erinnerungen in Form einer E-Mail an Ihre Teilnehmer versenden. Die E-Mails werden versendet sobald die von Ihnen hinterlegten Regeln zutreffen, z.B. ein Tag vor einem Test, wenn dieser noch nicht absolviert wurde. Wählen Sie "$\:add.reminder" um mit einer neuen Erinnerung zu Beginnen.
+reminders.intro=Mit der Erinnerungsfunktion k\u00F6nnen Sie Erinnerungen in Form einer E-Mail an Ihre Teilnehmer versenden. Die E-Mails werden versendet sobald die von Ihnen hinterlegten Regeln zutreffen, z.B. ein Tag vor einem Test, wenn dieser noch nicht absolviert wurde. W\u00E4hlen Sie "$\:add.reminder" um mit einer neuen Erinnerung zu Beginnen.
 resend=Erneut versenden
-rule.assign.task=Termin: Aufgabe Zuweisung
+rule.assign.task=Termin\: Aufgabe Zuweisung
 rule.attempts=Versuche
 rule.initial.attempts.date=Datum des ersten Versuchs
 rule.passed=Bestanden
 rule.score=Punkte
-rule.submission.task=Termin: Aufgabe Dokumente abgeben
+rule.submission.task=Termin\: Aufgabe Dokumente abgeben
 rules.description=Wenn folgende Bedingungen erf\u00FCllt sind
 send=Erinnerung jetzt schicken
 send.reminder=Geschickte Erinnerungen
 send.time.description={0} um {1}
 send.time.description.label=Kurserinnerung
-send.time.info=Hinweis: Erinnerungen werden für jeden Teilnehmer nur einmail versendet und zwar zum ersten Sendezeitpunkt, bei dem alle festgelegten Regeln zutreffen.
+send.time.info=Hinweis\: Erinnerungen werden f\u00FCr jeden Teilnehmer nur einmal versendet und zwar zum ersten Sendezeitpunkt, bei dem alle festgelegten Regeln zutreffen.
 show.sent=Geschickte Erinnerungen zeigen
 table.header.actions=<i class\='o_icon o_icon_actions o_icon-lg'> </i>
 table.header.creationDate=Erstellt am
diff --git a/src/main/java/org/olat/home/HomeCalendarManager.java b/src/main/java/org/olat/home/HomeCalendarManager.java
index 2d0abb47c4529be0ab40aca6dd952734023b9e9e..5802958b78c8810f927f34dd24a988ff26d3ab6c 100644
--- a/src/main/java/org/olat/home/HomeCalendarManager.java
+++ b/src/main/java/org/olat/home/HomeCalendarManager.java
@@ -112,7 +112,14 @@ public class HomeCalendarManager implements PersonalCalendarManager {
 			SearchBusinessGroupParams groupParams = new SearchBusinessGroupParams(identity, true, true);
 			groupParams.addTools(CollaborationTools.TOOL_CALENDAR);
 			List<BusinessGroup> groups = businessGroupService.findBusinessGroups(groupParams, null, 0, -1);
+			Set<BusinessGroup> resourceSet = new HashSet<>();
 			for(BusinessGroup group:groups) {
+				if(resourceSet.contains(group)) {
+					continue;
+				} else {
+					resourceSet.add(group);
+				}
+				
 				String calendarId = group.getKey().toString();
 				CalendarKey key = new CalendarKey(calendarId, CalendarManager.TYPE_GROUP);
 				CalendarUserConfiguration calendarConfig = configMap.get(key);
@@ -127,8 +134,15 @@ public class HomeCalendarManager implements PersonalCalendarManager {
 		
 		if(calendarModule.isEnableCourseElementCalendar() || calendarModule.isEnableCourseToolCalendar()) {
 			List<Object[]> resources =  getCourses(identity);
+			Set<RepositoryEntry> resourceSet = new HashSet<>();
 			for(Object[] resource:resources) {
 				RepositoryEntry courseEntry = (RepositoryEntry)resource[0];
+				if(resourceSet.contains(courseEntry)) {
+					continue;
+				} else {
+					resourceSet.add(courseEntry);
+				}
+				
 				String calendarId = courseEntry.getOlatResource().getResourceableId().toString();
 				CalendarKey key = new CalendarKey(calendarId, CalendarManager.TYPE_COURSE);
 				CalendarUserConfiguration calendarConfig = configMap.get(key);
@@ -173,14 +187,18 @@ public class HomeCalendarManager implements PersonalCalendarManager {
 			Map<CalendarKey,CalendarUserConfiguration> configMap) {
 		// get the personal calendar
 		if(calendarModule.isEnablePersonalCalendar()) {
-			KalendarRenderWrapper calendarWrapper = calendarManager.getPersonalCalendar(identity);
-			calendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE);
-			calendarWrapper.setPrivateEventsVisible(true);
-			CalendarUserConfiguration config = configMap.get(calendarWrapper.getCalendarKey());
-			if (config != null) {
-				calendarWrapper.setConfiguration(config);
+			try {
+				KalendarRenderWrapper calendarWrapper = calendarManager.getPersonalCalendar(identity);
+				calendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE);
+				calendarWrapper.setPrivateEventsVisible(true);
+				CalendarUserConfiguration config = configMap.get(calendarWrapper.getCalendarKey());
+				if (config != null) {
+					calendarWrapper.setConfiguration(config);
+				}
+				calendars.add(calendarWrapper);
+			} catch (Exception e) {
+				log.error("Cannot read personal calendar of: " + identity, e);
 			}
-			calendars.add(calendarWrapper);
 		}
 	}
 	
@@ -248,6 +266,9 @@ public class HomeCalendarManager implements PersonalCalendarManager {
 				} catch (CorruptedCourseException e) {
 					OLATResource olatResource = courseEntry.getOlatResource();
 					log.error("Corrupted course: " + olatResource.getResourceableTypeName() + " :: " + courseResourceableID, null);
+				} catch (Exception e) {
+					OLATResource olatResource = courseEntry.getOlatResource();
+					log.error("Cannor read calendar of course: " + olatResource.getResourceableTypeName() + " :: " + courseResourceableID, null);
 				}
 			}
 		}
@@ -317,27 +338,31 @@ public class HomeCalendarManager implements PersonalCalendarManager {
 		
 		Map<Long,Long> groupKeyToAccess = CoreSpringFactory.getImpl(CollaborationManager.class).lookupCalendarAccess(groups);
 		for (BusinessGroup bGroup:groups) {
-			KalendarRenderWrapper groupCalendarWrapper = calendarManager.getGroupCalendar(bGroup);
-			groupCalendarWrapper.setPrivateEventsVisible(true);
-			// set calendar access
-			int iCalAccess = CollaborationTools.CALENDAR_ACCESS_OWNERS;
-			Long lCalAccess = groupKeyToAccess.get(bGroup.getKey());
-			if (lCalAccess != null) {
-				iCalAccess = lCalAccess.intValue();
-			}
-			if (iCalAccess == CollaborationTools.CALENDAR_ACCESS_OWNERS && !isOwner) {
-				groupCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_ONLY);
-			} else {
-				groupCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE);
-			}
-			CalendarUserConfiguration config = configMap.get(groupCalendarWrapper.getCalendarKey());
-			if (config != null) {
-				groupCalendarWrapper.setConfiguration(config);
-			}
-			if(isOwner || isParticipant) {
+			try {
+				KalendarRenderWrapper groupCalendarWrapper = calendarManager.getGroupCalendar(bGroup);
 				groupCalendarWrapper.setPrivateEventsVisible(true);
+				// set calendar access
+				int iCalAccess = CollaborationTools.CALENDAR_ACCESS_OWNERS;
+				Long lCalAccess = groupKeyToAccess.get(bGroup.getKey());
+				if (lCalAccess != null) {
+					iCalAccess = lCalAccess.intValue();
+				}
+				if (iCalAccess == CollaborationTools.CALENDAR_ACCESS_OWNERS && !isOwner) {
+					groupCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_ONLY);
+				} else {
+					groupCalendarWrapper.setAccess(KalendarRenderWrapper.ACCESS_READ_WRITE);
+				}
+				CalendarUserConfiguration config = configMap.get(groupCalendarWrapper.getCalendarKey());
+				if (config != null) {
+					groupCalendarWrapper.setConfiguration(config);
+				}
+				if(isOwner || isParticipant) {
+					groupCalendarWrapper.setPrivateEventsVisible(true);
+				}
+				calendars.add(groupCalendarWrapper);
+			} catch (Exception e) {
+				log.error("Cannot read calendar of group: " + bGroup, e);
 			}
-			calendars.add(groupCalendarWrapper);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/modules/qpool/QPoolService.java b/src/main/java/org/olat/modules/qpool/QPoolService.java
index 5d9e52fadddecf82991caf76378fecc02b64a19b..1d1a150d22c887b060a6fc83e865a0f90a79c256 100644
--- a/src/main/java/org/olat/modules/qpool/QPoolService.java
+++ b/src/main/java/org/olat/modules/qpool/QPoolService.java
@@ -135,7 +135,7 @@ public interface QPoolService {
 	public ResultInfos<QuestionItemView> getSharedItemByResource(OLATResource resource, SearchQuestionItemParams params, int firstResult, int maxResults, SortKey... orderBy);
 	
 	public List<QuestionItem2Resource> getSharedResourceInfosByItem(QuestionItem item);
-	
+
 	//list
 	public QuestionItemCollection createCollection(Identity owner, String collectionName, List<QuestionItemShort> initialItems);
 	
@@ -153,6 +153,11 @@ public interface QPoolService {
 	
 	public ResultInfos<QuestionItemView> getItemsOfCollection(QuestionItemCollection collection, SearchQuestionItemParams params, int firstResult, int maxResults, SortKey... orderBy);
 
+	/**
+	 * Send the message to index this list of items.
+	 * @param items
+	 */
+	public void index(List<? extends QuestionItemShort> items);
 	
 	//study field admin
 	public List<TaxonomyLevel> getTaxonomyLevels();
diff --git a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java
index d1c14ce42a3fa0030a96c82a216f79c48b98593d..98bcd1eb3513222fb98779176cb95bce0501361e 100644
--- a/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java
+++ b/src/main/java/org/olat/modules/qpool/manager/QuestionPoolServiceImpl.java
@@ -187,7 +187,18 @@ public class QuestionPoolServiceImpl implements QPoolService {
 		lifeIndexer.indexDocument(QItemDocument.TYPE, mergedItem.getKey());
 		return mergedItem;
 	}
-	
+
+	@Override
+	public void index(List<? extends QuestionItemShort> items) {
+		if(items == null || items.isEmpty()) return;
+		
+		List<Long> keys = new ArrayList<>();
+		for(QuestionItemShort item:items) {
+			keys.add(item.getKey());
+		}
+		lifeIndexer.indexDocument(QItemDocument.TYPE, keys);
+	}
+
 	@Override
 	public List<QuestionItem> copyItems(Identity owner, List<QuestionItemShort> itemsToCopy) {
 		List<QuestionItem> copies = new ArrayList<QuestionItem>();
@@ -539,6 +550,7 @@ public class QuestionPoolServiceImpl implements QPoolService {
 		for(QuestionItemShort item:items) {
 			questionItemDao.share(item, resources, editable);
 		}
+		index(items);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/modules/qpool/ui/datasource/MarkedItemsSource.java b/src/main/java/org/olat/modules/qpool/ui/datasource/MarkedItemsSource.java
index 74c05528a8d2b778c13f93d18a847a4bfd5b358d..58b3f8b0fee54f853be81e2d4ef9008940166b9e 100644
--- a/src/main/java/org/olat/modules/qpool/ui/datasource/MarkedItemsSource.java
+++ b/src/main/java/org/olat/modules/qpool/ui/datasource/MarkedItemsSource.java
@@ -58,6 +58,7 @@ public class MarkedItemsSource extends DefaultItemsSource {
 			String businessPath = "[QuestionItem:" + item.getResourceableId() + "]";
 			markManager.setMark(item, identity, null, businessPath);
 		}
+		qpoolService.index(items);
 		return items.size();
 	}
 
diff --git a/src/main/java/org/olat/modules/qpool/ui/datasource/MyItemsSource.java b/src/main/java/org/olat/modules/qpool/ui/datasource/MyItemsSource.java
index 3ff3be100729e838f5c838d2b6298c035ee13333..e1cbd076c94bf305750ba50df3040b52f0c020e0 100644
--- a/src/main/java/org/olat/modules/qpool/ui/datasource/MyItemsSource.java
+++ b/src/main/java/org/olat/modules/qpool/ui/datasource/MyItemsSource.java
@@ -45,6 +45,7 @@ public class MyItemsSource extends DefaultItemsSource {
 
 	@Override
 	public int postImport(List<QuestionItem> items, boolean editable) {
+		qpoolService.index(items);
 		return items == null ? 0 : items.size();
 	}
 
diff --git a/src/main/webapp/static/js/openolat/iframe.js b/src/main/webapp/static/js/openolat/iframe.js
index 6e089570b8003d4e61aa403323bc3f229a59dd9a..690a098280162be260cdb58ee55d3033efb077e6 100644
--- a/src/main/webapp/static/js/openolat/iframe.js
+++ b/src/main/webapp/static/js/openolat/iframe.js
@@ -302,17 +302,16 @@ function b_changeLinkTargets() {
 		if (anchor.getAttribute('href')) {
 			var target = anchor.getAttribute('target');
 			var href = anchor.getAttribute("href");
-			if (href.indexOf("/auth/repo/go?rid=") != -1 
-					|| (href.indexOf("/url/") != -1 && (
-							href.indexOf("/RepositoryEntry/") != -1 
-							|| href.indexOf("/BusinessGroup/") != -1 
-							|| href.indexOf("Site/", href.indexOf("/url/")) != -1
-							|| href.indexOf("/CatalogEntry/") != -1										
-							|| href.indexOf("/Portal/") != -1
-							|| href.indexOf("/CatalogAdmin/") != -1
-							|| href.indexOf("/CoachSite/") != -1
-							|| href.indexOf("/GMCMenuTree/") != -1
-						)
+			if ((href.indexOf("/url/") != -1 || href.indexOf("/auth/") != -1) && 
+					(
+						href.indexOf("/repo/go?rid=") != -1 
+						|| href.indexOf("/RepositoryEntry/") != -1 
+						|| href.indexOf("/BusinessGroup/") != -1 
+						|| href.indexOf("Site/") != -1
+						|| href.indexOf("/CatalogEntry/") != -1										
+						|| href.indexOf("/Portal/") != -1
+						|| href.indexOf("/CatalogAdmin/") != -1
+						|| href.indexOf("/GMCMenuTree/") != -1
 					)
 			) {
 				// absolute links to repository entries have to by opened in the parent frame